diff options
author | Jaromir Wysoglad | 2019-06-05 13:23:35 +0200 |
---|---|---|
committer | Thierry Crozat | 2019-07-28 15:09:14 +0100 |
commit | d2e67fca8fb61848af51e06fdbf4013b50f2df05 (patch) | |
tree | 3a88a89c0e24c637ec6e8dcb872906e9bb0413ba /engines | |
parent | be450f096794093ee6c7fa9d97cbd43038e35242 (diff) | |
download | scummvm-rg350-d2e67fca8fb61848af51e06fdbf4013b50f2df05.tar.gz scummvm-rg350-d2e67fca8fb61848af51e06fdbf4013b50f2df05.tar.bz2 scummvm-rg350-d2e67fca8fb61848af51e06fdbf4013b50f2df05.zip |
SUPERNOVA2: Add City1 and City2 rooms
Diffstat (limited to 'engines')
-rw-r--r-- | engines/supernova2/ms2_def.h | 6 | ||||
-rw-r--r-- | engines/supernova2/rooms.cpp | 48 | ||||
-rw-r--r-- | engines/supernova2/state.cpp | 6 | ||||
-rw-r--r-- | engines/supernova2/state.h | 2 |
4 files changed, 55 insertions, 7 deletions
diff --git a/engines/supernova2/ms2_def.h b/engines/supernova2/ms2_def.h index adf345c6af..f99c008d9e 100644 --- a/engines/supernova2/ms2_def.h +++ b/engines/supernova2/ms2_def.h @@ -145,7 +145,7 @@ kString75, kString76, kString77, kString78, kString79, kString80, kString81, kString82, kString83, kString84, kString85, kString86, kString87, kString88, kString89, kString90, kString91, kString92, kString93, kString94, -kStringEntrance, kString96, kString97, kString98, kString99, +kStringEntrance, kStringDoor, kString97, kString98, kString99, kString100, kString101, kString102, kStringDinosaurHead, kString104, kString105, kStringSuctionCup, kString107, kString108, kString109, kString110, kString111, kString112, kString113, kString114, @@ -236,8 +236,8 @@ kString530, kString531, kString532, kString533, kString534, kString535, kString536, kString537, kString538, kString539, kString540, kString541, kString542, kString543, kString544, kString545, kString546, kStringFascinating, kStringTaxis, kStringTaxisDescription, -kStringAxacussan, kStringParticipationCard, kStringAxacussian, kString553, kString554, -kString555, kString556, kString557, kString558, kString559, +kStringAxacussan, kStringParticipationCard, kStringAxacussian, kStringSign1Description, kStringSign2Description, +kStringSign3Description, kStringSign4Description, kString557, kString558, kString559, kString560, kString561, kString562, kString563, kString564, kString565, kString566, kString567, kString568, kString569, kString570, kString571, kString572, kString573, kString574, diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp index ceaccbac61..9ce7a54cea 100644 --- a/engines/supernova2/rooms.cpp +++ b/engines/supernova2/rooms.cpp @@ -1516,9 +1516,14 @@ City1::City1(Supernova2Engine *vm, GameManager *gm) { _vm = vm; _gm = gm; - _fileNumber = 6; + _fileNumber = 23; _id = CITY1; _shown[0] = kShownTrue; + + _objectState[0] = Object(_id, kStringSign, kStringSign1Description, NULLOBJECT, NULLTYPE, 2, 2, 0); + _objectState[1] = Object(_id, kStringSign, kStringSign2Description, NULLOBJECT, NULLTYPE, 3, 3, 0); + _objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_L, EXIT | OPENABLE, 0, 0, 1, ELEVATOR, 10); + _objectState[3] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_R, EXIT | OPENABLE, 1, 1, 2, ELEVATOR, 14); } void City1::onEntrance() { @@ -1529,16 +1534,36 @@ void City1::animation() { } bool City1::interact(Action verb, Object &obj1, Object &obj2) { - return true; + if (verb == ACTION_OPEN && obj1._id == DOOR_L) { + _objectState[0]._click = 255; + } else if (verb == ACTION_CLOSE && obj1._id == DOOR_L) { + _objectState[0]._click = 2; + } else if (verb == ACTION_OPEN && obj1._id == DOOR_R) { + _objectState[1]._click = 255; + } else if (verb == ACTION_CLOSE && obj1._id == DOOR_R) { + _objectState[1]._click = 3; + } else if (verb == ACTION_WALK && obj1._id == DOOR_L) { + _gm->_state._elevatorNumber = 1; + } else if (verb == ACTION_WALK && obj1._id == DOOR_R) { + _gm->_state._elevatorNumber = 2; + } + _gm->_rooms[ELEVATOR]->getObject(5)->_exitRoom = CITY1; + _gm->_state._elevatorE = 0; + return false; } City2::City2(Supernova2Engine *vm, GameManager *gm) { _vm = vm; _gm = gm; - _fileNumber = 6; + _fileNumber = 23; _id = CITY2; _shown[0] = kShownTrue; + + _objectState[0] = Object(_id, kStringSign, kStringSign3Description, NULLOBJECT, NULLTYPE, 2, 2, 0); + _objectState[1] = Object(_id, kStringSign, kStringSign4Description, NULLOBJECT, NULLTYPE, 3, 3, 0); + _objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_L, EXIT | OPENABLE, 0, 0, 1, ELEVATOR, 10); + _objectState[3] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR_R, EXIT | OPENABLE, 1, 1, 2, ELEVATOR, 14); } void City2::onEntrance() { @@ -1549,7 +1574,22 @@ void City2::animation() { } bool City2::interact(Action verb, Object &obj1, Object &obj2) { - return true; + if (verb == ACTION_OPEN && obj1._id == DOOR_L) { + _objectState[0]._click = 255; + } else if (verb == ACTION_CLOSE && obj1._id == DOOR_L) { + _objectState[0]._click = 2; + } else if (verb == ACTION_OPEN && obj1._id == DOOR_R) { + _objectState[1]._click = 255; + } else if (verb == ACTION_CLOSE && obj1._id == DOOR_R) { + _objectState[1]._click = 3; + } else if (verb == ACTION_WALK && obj1._id == DOOR_L) { + _gm->_state._elevatorNumber = 3; + } else if (verb == ACTION_WALK && obj1._id == DOOR_R) { + _gm->_state._elevatorNumber = 4; + } + _gm->_rooms[ELEVATOR]->getObject(5)->_exitRoom = CITY2; + _gm->_state._elevatorE = 0; + return false; } Elevator::Elevator(Supernova2Engine *vm, GameManager *gm) { diff --git a/engines/supernova2/state.cpp b/engines/supernova2/state.cpp index 25d3accd40..8f3a3cfa79 100644 --- a/engines/supernova2/state.cpp +++ b/engines/supernova2/state.cpp @@ -42,6 +42,8 @@ bool GameManager::serialize(Common::WriteStream *out) { out->writeByte(_state._admission); out->writeByte(_state._tipsy); out->writeByte(_state._dark); + out->writeByte(_state._elevatorE); + out->writeByte(_state._elevatorNumber); out->writeUint32LE(_state._eventTime); out->writeSint32LE(_state._eventCallback); @@ -76,6 +78,8 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) { _state._admission = in->readByte(); _state._tipsy = in->readByte(); _state._dark = in->readByte(); + _state._elevatorE = in->readByte(); + _state._elevatorNumber = in->readByte(); _state._eventTime = in->readUint32LE(); _state._eventCallback = (EventFunction)in->readSint32LE(); _vm->setGameString(kStringMoney, Common::String::format("%d Xa", _state._money)); @@ -344,6 +348,8 @@ void GameManager::initState() { _state._admission = 0; _state._tipsy = false; _state._dark = false; + _state._elevatorE = 0; + _state._elevatorNumber = 0; _state._eventTime = kMaxTimerValue; _state._eventCallback = kNoFn; } diff --git a/engines/supernova2/state.h b/engines/supernova2/state.h index 2382cd0aec..927bca3174 100644 --- a/engines/supernova2/state.h +++ b/engines/supernova2/state.h @@ -43,6 +43,8 @@ struct GameState { char _admission; bool _tipsy; bool _dark; + char _elevatorE; + char _elevatorNumber; EventFunction _eventCallback; uint32 _eventTime; }; |