diff options
author | Paul Gilbert | 2016-08-23 21:46:04 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-08-23 21:46:04 -0400 |
commit | 3a20dca0cb487e1c542b75f442eacb33eadd2e26 (patch) | |
tree | 3a6f77bd089ddf81c7ad9921fb96149c9193964d /engines/titanic/game/transport | |
parent | 3d558fe6ca0ad61558f5283f2ff4751b034fed5f (diff) | |
download | scummvm-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.cpp | 4 | ||||
-rw-r--r-- | engines/titanic/game/transport/lift.h | 4 | ||||
-rw-r--r-- | engines/titanic/game/transport/lift_indicator.cpp | 196 | ||||
-rw-r--r-- | engines/titanic/game/transport/lift_indicator.h | 15 |
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(); |