aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-06-13 10:58:48 +0200
committerThierry Crozat2019-07-28 15:09:14 +0100
commitd76868053424d957b8f4f6b798aa501b2a8ccc41 (patch)
treefdaef35b8f7b2233baaac600c250bdba01983b57
parent01a3f82886c3acf4778fede58b3d93859620c971 (diff)
downloadscummvm-rg350-d76868053424d957b8f4f6b798aa501b2a8ccc41.tar.gz
scummvm-rg350-d76868053424d957b8f4f6b798aa501b2a8ccc41.tar.bz2
scummvm-rg350-d76868053424d957b8f4f6b798aa501b2a8ccc41.zip
SUPERNOVA2: Add MusRound room
-rw-r--r--engines/supernova2/ms2_def.h6
-rw-r--r--engines/supernova2/rooms.cpp51
-rw-r--r--engines/supernova2/rooms.h4
-rw-r--r--engines/supernova2/state.cpp4
4 files changed, 46 insertions, 19 deletions
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);