aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/carry
diff options
context:
space:
mode:
authorPaul Gilbert2016-04-11 22:59:58 -0400
committerPaul Gilbert2016-07-10 16:10:57 -0400
commit36d60d7476b62aef07914325adb6f9fd7b30132f (patch)
tree84134f3d1573046776784334b0d324083f6b7789 /engines/titanic/carry
parent7ac4f7c3aa26831f771418472472735cf73bade9 (diff)
downloadscummvm-rg350-36d60d7476b62aef07914325adb6f9fd7b30132f.tar.gz
scummvm-rg350-36d60d7476b62aef07914325adb6f9fd7b30132f.tar.bz2
scummvm-rg350-36d60d7476b62aef07914325adb6f9fd7b30132f.zip
TITANIC: Added remainder of CCarry msg handlers
Diffstat (limited to 'engines/titanic/carry')
-rw-r--r--engines/titanic/carry/carry.cpp84
-rw-r--r--engines/titanic/carry/carry.h12
2 files changed, 75 insertions, 21 deletions
diff --git a/engines/titanic/carry/carry.cpp b/engines/titanic/carry/carry.cpp
index dbb7189781..cc12fd1a72 100644
--- a/engines/titanic/carry/carry.cpp
+++ b/engines/titanic/carry/carry.cpp
@@ -23,6 +23,7 @@
#include "titanic/carry/carry.h"
#include "titanic/messages/messages.h"
#include "titanic/npcs/character.h"
+#include "titanic/npcs/succubus.h"
namespace Titanic {
@@ -43,9 +44,9 @@ END_MESSAGE_MAP()
CCarry::CCarry() : CGameObject(), _fieldDC(0), _fieldE0(1),
_field100(0), _field104(0), _field108(0), _field10C(0),
- _field110(0), _field120(0), _field124(0), _field128(0),
+ _itemFrame(0), _enterFrame(0), _enterFrameSet(false), _visibleFrame(0),
_string1("None"),
- _string2("NULL"),
+ _fullViewName("NULL"),
_string3("That doesn't seem to do anything."),
_string4("It doesn't seem to want this.") {
}
@@ -53,8 +54,8 @@ CCarry::CCarry() : CGameObject(), _fieldDC(0), _fieldE0(1),
void CCarry::save(SimpleFile *file, int indent) const {
file->writeNumberLine(1, indent);
file->writeQuotedLine(_string1, indent);
- file->writePoint(_pos1, indent);
- file->writeQuotedLine(_string2, indent);
+ file->writePoint(_origPos, indent);
+ file->writeQuotedLine(_fullViewName, indent);
file->writeNumberLine(_fieldDC, indent);
file->writeNumberLine(_fieldE0, indent);
file->writeQuotedLine(_string3, indent);
@@ -63,11 +64,11 @@ void CCarry::save(SimpleFile *file, int indent) const {
file->writeNumberLine(_field104, indent);
file->writeNumberLine(_field108, indent);
file->writeNumberLine(_field10C, indent);
- file->writeNumberLine(_field110, indent);
+ file->writeNumberLine(_itemFrame, indent);
file->writeQuotedLine(_string5, indent);
- file->writeNumberLine(_field120, indent);
- file->writeNumberLine(_field124, indent);
- file->writeNumberLine(_field128, indent);
+ file->writeNumberLine(_enterFrame, indent);
+ file->writeNumberLine(_enterFrameSet, indent);
+ file->writeNumberLine(_visibleFrame, indent);
CGameObject::save(file, indent);
}
@@ -75,8 +76,8 @@ void CCarry::save(SimpleFile *file, int indent) const {
void CCarry::load(SimpleFile *file) {
file->readNumber();
_string1 = file->readString();
- _pos1 = file->readPoint();
- _string2 = file->readString();
+ _origPos = file->readPoint();
+ _fullViewName = file->readString();
_fieldDC = file->readNumber();
_fieldE0 = file->readNumber();
_string3 = file->readString();
@@ -85,11 +86,11 @@ void CCarry::load(SimpleFile *file) {
_field104 = file->readNumber();
_field108 = file->readNumber();
_field10C = file->readNumber();
- _field110 = file->readNumber();
+ _itemFrame = file->readNumber();
_string5 = file->readString();
- _field120 = file->readNumber();
- _field124 = file->readNumber();
- _field128 = file->readNumber();
+ _enterFrame = file->readNumber();
+ _enterFrameSet = file->readNumber();
+ _visibleFrame = file->readNumber();
CGameObject::load(file);
}
@@ -142,12 +143,30 @@ bool CCarry::MouseDragEndMsg(CMouseDragEndMsg *msg) {
return true;
}
- // TODO
+ CString viewName = getViewFullName();
+ if (viewName.empty() || msg->_mousePos.y >= 360) {
+ sleep(250);
+ dropOnPet();
+ } else {
+ setPosition(_origPos);
+ loadFrame(_itemFrame);
+ }
return true;
}
bool CCarry::UseWithCharMsg(CUseWithCharMsg *msg) {
+ CSuccUBus *succubus = static_cast<CSuccUBus *>(msg->_character);
+ if (succubus) {
+ CSubAcceptCCarryMsg carryMsg;
+ carryMsg._item = this;
+ carryMsg.execute(succubus);
+ } else {
+ CShowTextMsg textMsg(_string4);
+ textMsg.execute("PET");
+ dropOnPet();
+ }
+
return true;
}
@@ -156,10 +175,25 @@ bool CCarry::LeaveViewMsg(CLeaveViewMsg *msg) {
}
bool CCarry::UseWithOtherMsg(CUseWithOtherMsg *msg) {
+ CShowTextMsg textMsg(_string3);
+ textMsg.execute("PET");
+
+ _fullViewName = getViewFullName();
+ if (_fullViewName.empty() || _bounds.top >= 360) {
+ sleep(250);
+ dropOnPet();
+ } else {
+ setPosition(_origPos);
+ }
+
return true;
}
bool CCarry::VisibleMsg(CVisibleMsg *msg) {
+ setVisible(msg->_visible);
+ if (msg->_visible && _visibleFrame != -1)
+ loadFrame(_visibleFrame);
+
return true;
}
@@ -168,18 +202,38 @@ bool CCarry::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
}
bool CCarry::RemoveFromGameMsg(CRemoveFromGameMsg *msg) {
+ setPosition(Point(0, 0));
+ setVisible(false);
+
return true;
}
bool CCarry::MoveToStartPosMsg(CMoveToStartPosMsg *msg) {
+ setPosition(_origPos);
return true;
}
bool CCarry::EnterViewMsg(CEnterViewMsg *msg) {
+ if (!_enterFrameSet) {
+ loadFrame(_enterFrame);
+ _enterFrameSet = true;
+ }
+
return true;
}
bool CCarry::PassOnDragStartMsg(CPassOnDragStartMsg *msg) {
+ if (_visibleFrame != -1)
+ loadFrame(_visibleFrame);
+
+ if (msg->_value3) {
+ _tempPos.x = _bounds.width() / 2;
+ _tempPos.y = _bounds.height() / 2;
+ } else {
+ _tempPos = msg->_mousePos - _bounds;
+ }
+
+ setPosition(_tempPos - getMousePos());
return true;
}
diff --git a/engines/titanic/carry/carry.h b/engines/titanic/carry/carry.h
index 33e3ac369d..e292eb2897 100644
--- a/engines/titanic/carry/carry.h
+++ b/engines/titanic/carry/carry.h
@@ -45,8 +45,8 @@ class CCarry : public CGameObject {
bool PassOnDragStartMsg(CPassOnDragStartMsg *msg);
private:
CString _string1;
- Point _pos1;
- CString _string2;
+ Point _origPos;
+ CString _fullViewName;
int _fieldDC;
int _fieldE0;
CString _string3;
@@ -56,11 +56,11 @@ private:
int _field104;
int _field108;
int _field10C;
- int _field110;
+ int _itemFrame;
CString _string5;
- int _field120;
- int _field124;
- int _field128;
+ int _enterFrame;
+ bool _enterFrameSet;
+ int _visibleFrame;
protected:
/**
* Called when an item is dropped onto the PET