aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/transport
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-23 21:46:04 -0400
committerPaul Gilbert2016-08-23 21:46:04 -0400
commit3a20dca0cb487e1c542b75f442eacb33eadd2e26 (patch)
tree3a6f77bd089ddf81c7ad9921fb96149c9193964d /engines/titanic/game/transport
parent3d558fe6ca0ad61558f5283f2ff4751b034fed5f (diff)
downloadscummvm-rg350-3a20dca0cb487e1c542b75f442eacb33eadd2e26.tar.gz
scummvm-rg350-3a20dca0cb487e1c542b75f442eacb33eadd2e26.tar.bz2
scummvm-rg350-3a20dca0cb487e1c542b75f442eacb33eadd2e26.zip
TITANIC: Implemented more game classes
Diffstat (limited to 'engines/titanic/game/transport')
-rw-r--r--engines/titanic/game/transport/lift.cpp4
-rw-r--r--engines/titanic/game/transport/lift.h4
-rw-r--r--engines/titanic/game/transport/lift_indicator.cpp196
-rw-r--r--engines/titanic/game/transport/lift_indicator.h15
4 files changed, 204 insertions, 15 deletions
diff --git a/engines/titanic/game/transport/lift.cpp b/engines/titanic/game/transport/lift.cpp
index ef8d9028d9..114e840007 100644
--- a/engines/titanic/game/transport/lift.cpp
+++ b/engines/titanic/game/transport/lift.cpp
@@ -49,7 +49,7 @@ void CLift::save(SimpleFile *file, int indent) {
file->writeNumberLine(_elevator2Floor, indent);
file->writeNumberLine(_elevator3Floor, indent);
file->writeNumberLine(_elevator4Floor, indent);
- file->writeNumberLine(_fieldF8, indent);
+ file->writeNumberLine(_liftNum, indent);
file->writeNumberLine(_v6, indent);
CTransport::save(file, indent);
@@ -62,7 +62,7 @@ void CLift::load(SimpleFile *file) {
_elevator2Floor = file->readNumber();
_elevator3Floor = file->readNumber();
_elevator4Floor = file->readNumber();
- _fieldF8 = file->readNumber();
+ _liftNum = file->readNumber();
_v6 = file->readNumber();
CTransport::load(file);
diff --git a/engines/titanic/game/transport/lift.h b/engines/titanic/game/transport/lift.h
index 38af00a1ce..c45d2b64d0 100644
--- a/engines/titanic/game/transport/lift.h
+++ b/engines/titanic/game/transport/lift.h
@@ -44,10 +44,10 @@ public:
static int _elevator4Floor;
static int _v6;
- int _fieldF8;
+ int _liftNum;
public:
CLASSDEF;
- CLift() : CTransport(), _fieldF8(1) {}
+ CLift() : CTransport(), _liftNum(1) {}
/**
* Save the data for the class to file
diff --git a/engines/titanic/game/transport/lift_indicator.cpp b/engines/titanic/game/transport/lift_indicator.cpp
index 582de8ad3b..1336daf7aa 100644
--- a/engines/titanic/game/transport/lift_indicator.cpp
+++ b/engines/titanic/game/transport/lift_indicator.cpp
@@ -21,23 +21,32 @@
*/
#include "titanic/game/transport/lift_indicator.h"
+#include "titanic/game/transport/lift.h"
+#include "titanic/pet_control/pet_control.h"
+#include "titanic/titanic.h"
namespace Titanic {
BEGIN_MESSAGE_MAP(CLiftindicator, CLift)
+ ON_MESSAGE(EnterViewMsg)
+ ON_MESSAGE(LeaveViewMsg)
+ ON_MESSAGE(PETActivateMsg)
+ ON_MESSAGE(MovieEndMsg)
ON_MESSAGE(EnterRoomMsg)
+ ON_MESSAGE(LeaveRoomMsg)
+ ON_MESSAGE(TimerMsg)
END_MESSAGE_MAP()
CLiftindicator::CLiftindicator() : CLift(),
- _fieldFC(0), _field108(0), _field10C(0) {
+ _fieldFC(0), _start(0), _end(0) {
}
void CLiftindicator::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
file->writeNumberLine(_fieldFC, indent);
- file->writePoint(_pos2, indent);
- file->writeNumberLine(_field108, indent);
- file->writeNumberLine(_field10C, indent);
+ file->writePoint(_indicatorPos, indent);
+ file->writeNumberLine(_start, indent);
+ file->writeNumberLine(_end, indent);
CLift::save(file, indent);
}
@@ -45,11 +54,184 @@ void CLiftindicator::save(SimpleFile *file, int indent) {
void CLiftindicator::load(SimpleFile *file) {
file->readNumber();
_fieldFC = file->readNumber();
- _pos2 = file->readPoint();
- _field108 = file->readNumber();
- _field10C = file->readNumber();
+ _indicatorPos = file->readPoint();
+ _start = file->readNumber();
+ _end = file->readNumber();
CLift::load(file);
}
+bool CLiftindicator::EnterViewMsg(CEnterViewMsg *msg) {
+ double multiplier = _fieldFC * 0.037037037;
+ CPetControl *pet = getPetControl();
+ int floorNum = pet->getRoomsFloorNum();
+ debugC(kDebugScripts, "Lifts = %d,%d,%d,%d, %d",
+ CLift::_elevator1Floor, CLift::_elevator2Floor,
+ CLift::_elevator3Floor, CLift::_elevator4Floor,
+ floorNum);
+
+ if ((pet->petGetRoomsWellEntry() & 1) == (_fieldFC & 1)) {
+ petSetRemoteTarget();
+ petSetArea(PET_REMOTE);
+
+ CString str = CString::format("You are standing outside Elevator %d",
+ petGetRoomsWellEntry());
+ petDisplayMessage(-1, str);
+
+ debugC(kDebugScripts, "Claiming PET - %d, Multiplier = %f",
+ _liftNum, multiplier);
+ }
+
+ switch (_liftNum) {
+ case 0:
+ loadFrame(pet->getRoomsFloorNum());
+ break;
+
+ case 1:
+ case 3:
+ switch (petGetRoomsWellEntry()) {
+ case 1:
+ case 2:
+ setPosition(Point(_bounds.left, _indicatorPos.y +
+ multiplier * CLift::_elevator1Floor));
+ _startFrame = CLift::_elevator1Floor;
+ break;
+
+ case 3:
+ case 4:
+ setPosition(Point(_bounds.left, _indicatorPos.y +
+ multiplier * CLift::_elevator3Floor));
+ _startFrame = CLift::_elevator3Floor;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 2:
+ case 4:
+ switch (petGetRoomsWellEntry()) {
+ case 1:
+ case 2:
+ setPosition(Point(_bounds.left, _indicatorPos.y +
+ multiplier * CLift::_elevator2Floor));
+ _startFrame = CLift::_elevator2Floor;
+ break;
+
+ case 3:
+ case 4:
+ setPosition(Point(_bounds.left, _indicatorPos.y +
+ multiplier * CLift::_elevator4Floor));
+ _startFrame = CLift::_elevator4Floor;
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return true;
+}
+
+bool CLiftindicator::LeaveViewMsg(CLeaveViewMsg *msg) {
+ petClear();
+ return true;
+}
+
+bool CLiftindicator::PETActivateMsg(CPETActivateMsg *msg) {
+ double multiplier = _fieldFC * 0.037037037;
+ CPetControl *pet = getPetControl();
+
+ if (msg->_name == "Lift") {
+ if (petDoorOrBellbotPresent()) {
+ petDisplayMessage(1, "I'm sorry, you cannot enter this elevator at present "
+ "as a bot is in the way.");
+ } else {
+ _endFrame = pet->getRoomsFloorNum();
+
+ if (petGetRoomsWellEntry() == 4 && !CLift::_v6
+ && pet->getRoomsFloorNum() != CLift::_elevator4Floor) {
+ petDisplayMessage(1, "This elevator is currently in an advanced state of non-functionality.");
+ } else {
+ _start = _indicatorPos.y + _startFrame * multiplier;
+ _end = _indicatorPos.y + _endFrame * multiplier;
+ lockMouse();
+ addTimer(100);
+
+ if (petGetRoomsWellEntry() == 2) {
+ CLift::_elevator4Floor = CLift::_elevator2Floor;
+ CShipSettingMsg settingMsg;
+ settingMsg._value = CLift::_elevator4Floor;
+ settingMsg.execute("SGTStateroomTV");
+ }
+
+ switch (petGetRoomsWellEntry()) {
+ case 1:
+ CLift::_elevator1Floor = pet->getRoomsFloorNum();
+ break;
+ case 2:
+ CLift::_elevator2Floor = pet->getRoomsFloorNum();
+ break;
+ case 3:
+ CLift::_elevator3Floor = pet->getRoomsFloorNum();
+ break;
+ case 4:
+ CLift::_elevator4Floor = pet->getRoomsFloorNum();
+ break;
+ default:
+ break;
+ }
+
+ debugC(kDebugScripts, "Lifts = %d,%d,%d,%d %d",
+ CLift::_elevator1Floor, CLift::_elevator2Floor,
+ CLift::_elevator3Floor, CLift::_elevator4Floor,
+ petGetRoomsWellEntry());
+ }
+ }
+ }
+
+ return true;
+}
+
+bool CLiftindicator::MovieEndMsg(CMovieEndMsg *msg) {
+ playSound("357 gp button 1.wav");
+ sleep(100);
+ changeView("Lift.Node 1.N");
+
+ unlockMouse();
+ return true;
+}
+
+bool CLiftindicator::EnterRoomMsg(CEnterRoomMsg *msg) {
+ return true;
+}
+
+bool CLiftindicator::LeaveRoomMsg(CLeaveRoomMsg *msg) {
+ return true;
+}
+
+bool CLiftindicator::TimerMsg(CTimerMsg *msg) {
+ debugC(kDebugScripts, "Start %d, End %d", _start, _end);
+
+ if (_start > _end) {
+ setPosition(Point(_bounds.left, _bounds.top - 1));
+ --_start;
+ addTimer(20);
+ } else if (_start < _end) {
+ setPosition(Point(_bounds.left, _bounds.top + 1));
+ ++_start;
+ addTimer(20);
+ } else {
+ CMovieEndMsg endMsg(0, 0);
+ endMsg.execute(this);
+ }
+
+ return true;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game/transport/lift_indicator.h b/engines/titanic/game/transport/lift_indicator.h
index 945f627417..5d0bc45d7b 100644
--- a/engines/titanic/game/transport/lift_indicator.h
+++ b/engines/titanic/game/transport/lift_indicator.h
@@ -25,17 +25,24 @@
#include "titanic/game/transport/lift.h"
#include "titanic/messages/messages.h"
+#include "titanic/messages/pet_messages.h"
namespace Titanic {
class CLiftindicator : public CLift {
DECLARE_MESSAGE_MAP;
- bool EnterRoomMsg(CEnterRoomMsg *msg) { return true; }
+ bool EnterViewMsg(CEnterViewMsg *msg);
+ bool LeaveViewMsg(CLeaveViewMsg *msg);
+ bool PETActivateMsg(CPETActivateMsg *msg);
+ bool MovieEndMsg(CMovieEndMsg *msg);
+ bool EnterRoomMsg(CEnterRoomMsg *msg);
+ bool LeaveRoomMsg(CLeaveRoomMsg *msg);
+ bool TimerMsg(CTimerMsg *msg);
private:
int _fieldFC;
- Point _pos2;
- int _field108;
- int _field10C;
+ Point _indicatorPos;
+ int _start;
+ int _end;
public:
CLASSDEF;
CLiftindicator();