From d76868053424d957b8f4f6b798aa501b2a8ccc41 Mon Sep 17 00:00:00 2001 From: Jaromir Wysoglad Date: Thu, 13 Jun 2019 10:58:48 +0200 Subject: SUPERNOVA2: Add MusRound room --- engines/supernova2/ms2_def.h | 6 +++--- engines/supernova2/rooms.cpp | 51 +++++++++++++++++++++++++++++++++----------- engines/supernova2/rooms.h | 4 ++-- engines/supernova2/state.cpp | 4 ++-- 4 files changed, 46 insertions(+), 19 deletions(-) (limited to 'engines') diff --git a/engines/supernova2/ms2_def.h b/engines/supernova2/ms2_def.h index 092d4b1d01..acca6f2c04 100644 --- a/engines/supernova2/ms2_def.h +++ b/engines/supernova2/ms2_def.h @@ -92,7 +92,7 @@ enum RoomId { BST_DOOR,HALL,COFFIN_ROOM,MASK, MUSEUM,MUS_ENTRANCE,MUS1,MUS2,MUS3,MUS4,MUS5,MUS6,MUS7,MUS8, - MUS9,MUS10,MUS11,MUS_RUND, + MUS9,MUS10,MUS11,MUS_ROUND, MUS12,MUS13,MUS14,MUS15,MUS16,MUS17,MUS18,MUS19,MUS20,MUS21,MUS22, NUMROOMS,NULLROOM }; @@ -121,7 +121,7 @@ enum ObjectId { SMALL_DOOR,BACK_MONEY,WALL,SUCTION_CUP,IMITATION,SP_KEYCARD,ALARM_CRACKER, ENCRYPTED_DOOR,ALARM_ANLAGE,MUS_STREET,BIG_DOOR,MUSIC_SYSTEM, HANDLE,SWITCH,DOOR_SWITCH,SUIT,CABLE,RCABLE, - MUSCARD,SKOPF, DISPLAY + MUSCARD,HEAD, DISPLAY }; enum StringId { @@ -146,7 +146,7 @@ kStringMuseum1, kStringMuseum2, kStringMuseum3, kStringMuseum4, kStringMuseum5, kString85, kString86, kString87, kString88, kString89, kString90, kString91, kString92, kStringDinosaur, kStringDinosaurDescription, kStringEntrance, kStringDoor, kStringRoad, kStringCamera, kStringCameraDescription, -kStringMainEntrance, kStringCorridor, kString102, kStringDinosaurHead, kString104, +kStringMainEntrance, kStringCorridor, kStringDinosaurDescription2, kStringDinosaurHead, kStringDinosaurHeadDescription, kString105, kStringSuctionCup, kString107, kStringOpening, kStringLetter, kStringMassive, kStringInscriptionDescription, kStringPyramid0, kStringPyramid1, kStringPyramid2, kStringPyramid3, kStringPyramid4, kStringPiece, kStringPyramid5, kStringPyramid6, diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp index d788ad4589..1402c8eddf 100644 --- a/engines/supernova2/rooms.cpp +++ b/engines/supernova2/rooms.cpp @@ -3775,7 +3775,7 @@ void Museum::onEntrance() { _vm->loadGame(kSleepAutosaveSlot); _vm->renderImage(0); _vm->paletteFadeIn(); - if (_gm->_rooms[MUS_RUND]->getObject(4)->_type & CARRIED) { + if (_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED) { _gm->reply(kStringMuseum3, 1, 1 + 128); _gm->reply(kStringMuseum4, 1, 1 + 128); _gm->takeMoney(30000); @@ -3799,7 +3799,7 @@ void Museum::animation() { bool Museum::interact(Action verb, Object &obj1, Object &obj2) { if (verb == ACTION_WALK && obj1._id == MUS_STREET) { if (!_gm->_state._alarmOn && - !(_gm->_rooms[MUS_RUND]->getObject(4)->_type & CARRIED)) { + !(_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED)) { _vm->renderMessage(kStringMuseum10); } else { _gm->_state._eventTime = kMaxTimerValue; @@ -3823,7 +3823,7 @@ bool Museum::interact(Action verb, Object &obj1, Object &obj2) { _vm->loadGame(kSleepAutosaveSlot); if (_gm->_state._money >= 8) _gm->takeMoney(-8); - if (_gm->_rooms[MUS_RUND]->getObject(4)->_type & CARRIED) + if (_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED) _gm->takeObject(*_gm->_rooms[INTRO]->getObject(7)); _gm->changeRoom(CULTURE_PALACE); _gm->_newRoom = true; @@ -4224,7 +4224,7 @@ Mus9::Mus9(Supernova2Engine *vm, GameManager *gm) { _objectState[0] = Object(_id, kStringDoor, kStringDefaultDescription, ENCRYPTED_DOOR, EXIT | OPENABLE | CLOSED | COMBINABLE, 0, 0, 1, MUS8, 10); _objectState[1] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 1, 1, 2, MUS5, 14); - _objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, SMALL_DOOR, EXIT | OPENABLE | CLOSED, 3, 3, 0, MUS_RUND, 21); + _objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, SMALL_DOOR, EXIT | OPENABLE | CLOSED, 3, 3, 0, MUS_ROUND, 21); } void Mus9::onEntrance() { @@ -4261,7 +4261,7 @@ bool Mus9::interact(Action verb, Object &obj1, Object &obj2) { _vm->renderImage(6); setSectionVisible(5, kShownFalse); _objectState[2]._type = EXIT | OPENABLE | OPENED; - _gm->_rooms[MUS_RUND]->getObject(0)->_type = EXIT | OPENABLE | OPENED; + _gm->_rooms[MUS_ROUND]->getObject(0)->_type = EXIT | OPENABLE | OPENED; _vm->playSound(kAudioTaxiOpen); } } else if (verb == ACTION_CLOSE && obj1._id == SMALL_DOOR && @@ -4269,7 +4269,7 @@ bool Mus9::interact(Action verb, Object &obj1, Object &obj2) { _vm->renderImage(5); setSectionVisible(6, kShownFalse); _objectState[2]._type = EXIT | OPENABLE | CLOSED; - _gm->_rooms[MUS_RUND]->getObject(0)->_type = EXIT | OPENABLE | CLOSED; + _gm->_rooms[MUS_ROUND]->getObject(0)->_type = EXIT | OPENABLE | CLOSED; _vm->playSound(kAudioElevator1); } else return false; @@ -4350,23 +4350,50 @@ bool Mus11::interact(Action verb, Object &obj1, Object &obj2) { return true; } -MusRund::MusRund(Supernova2Engine *vm, GameManager *gm) { +MusRound::MusRound(Supernova2Engine *vm, GameManager *gm) { _vm = vm; _gm = gm; - _fileNumber = 6; - _id = MUS_RUND; + _fileNumber = 33; + _id = MUS_ROUND; _shown[0] = kShownTrue; + _shown[1] = kShownTrue; + + _objectState[0] = Object(_id, kStringDoor, kStringDefaultDescription, ENCRYPTED_DOOR, EXIT | OPENABLE | OPENED | COMBINABLE, 0, 0, 1, MUS9, 2); + _objectState[1] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 1, 1, 0, MUS13, 10); + _objectState[2] = Object(_id, kStringCorridor, kStringDefaultDescription, NULLOBJECT, EXIT, 2, 2, 0, MUS12, 14); + _objectState[3] = Object(_id, kStringDinosaur, kStringDinosaurDescription2, NULLOBJECT, NULLTYPE, 3, 3, 0); + _objectState[3] = Object(_id, kStringDinosaurHead, kStringDinosaurHeadDescription, HEAD, TAKE, 4, 4, 2); } -void MusRund::onEntrance() { +void MusRound::onEntrance() { setRoomSeen(true); } -void MusRund::animation() { +void MusRound::animation() { } -bool MusRund::interact(Action verb, Object &obj1, Object &obj2) { +bool MusRound::interact(Action verb, Object &obj1, Object &obj2) { + if (verb == ACTION_USE && + Object::combine(obj1, obj2, SP_KEYCARD, ENCRYPTED_DOOR) && + !(_objectState[0]._type & OPENED)) { + if (_gm->crackDoor(50)) { + _vm->renderImage(1); + _objectState[0]._type = EXIT | OPENABLE | OPENED; + _gm->_rooms[MUS9]->getObject(2)->_type = EXIT | OPENABLE | OPENED; + _vm->playSound(kAudioTaxiOpen); + } + } else if (verb == ACTION_CLOSE && obj1._id == ENCRYPTED_DOOR && + (obj1._type & OPENED)) { + _vm->renderImage(1 + 128); + _objectState[0]._type = EXIT | OPENABLE | CLOSED; + _gm->_rooms[MUS9]->getObject(2)->_type = EXIT | OPENABLE | CLOSED; + _vm->playSound(kAudioElevator1); + } else if (verb == ACTION_TAKE && obj1._id == HEAD && !(obj1._type & CARRIED)) { + _gm->takeObject(obj1); + _vm->playSound(kAudioSuccess); + } else + return false; return true; } diff --git a/engines/supernova2/rooms.h b/engines/supernova2/rooms.h index c71a4c6c2c..3d23811452 100644 --- a/engines/supernova2/rooms.h +++ b/engines/supernova2/rooms.h @@ -683,9 +683,9 @@ public: private: }; -class MusRund : public Room { +class MusRound : public Room { public: - MusRund(Supernova2Engine *vm, GameManager *gm); + MusRound(Supernova2Engine *vm, GameManager *gm); virtual void onEntrance(); virtual void animation(); virtual bool interact(Action verb, Object &obj1, Object &obj2); diff --git a/engines/supernova2/state.cpp b/engines/supernova2/state.cpp index a222af12db..c61d3451d9 100644 --- a/engines/supernova2/state.cpp +++ b/engines/supernova2/state.cpp @@ -326,7 +326,7 @@ void GameManager::destroyRooms() { delete _rooms[MUS9]; delete _rooms[MUS10]; delete _rooms[MUS11]; - delete _rooms[MUS_RUND]; + delete _rooms[MUS_ROUND]; delete _rooms[MUS12]; delete _rooms[MUS13]; delete _rooms[MUS14]; @@ -467,7 +467,7 @@ void GameManager::initRooms() { _rooms[MUS9] = new Mus9(_vm, this); _rooms[MUS10] = new Mus10(_vm, this); _rooms[MUS11] = new Mus11(_vm, this); - _rooms[MUS_RUND] = new MusRund(_vm, this); + _rooms[MUS_ROUND] = new MusRound(_vm, this); _rooms[MUS12] = new Mus12(_vm, this); _rooms[MUS13] = new Mus13(_vm, this); _rooms[MUS14] = new Mus14(_vm, this); -- cgit v1.2.3