aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-06-13 10:33:35 +0200
committerThierry Crozat2019-07-28 15:09:14 +0100
commit01a3f82886c3acf4778fede58b3d93859620c971 (patch)
treeee98b4be319c0e5d550c676b45107a8421ee0eb4
parenta8ca6b9f5272a19956c722042ff6800d4b6985eb (diff)
downloadscummvm-rg350-01a3f82886c3acf4778fede58b3d93859620c971.tar.gz
scummvm-rg350-01a3f82886c3acf4778fede58b3d93859620c971.tar.bz2
scummvm-rg350-01a3f82886c3acf4778fede58b3d93859620c971.zip
SUPERNOVA2: Add rooms Mus8 to Mus11
-rw-r--r--engines/supernova2/ms2_def.h2
-rw-r--r--engines/supernova2/rooms.cpp113
-rw-r--r--engines/supernova2/state.cpp3
3 files changed, 111 insertions, 7 deletions
diff --git a/engines/supernova2/ms2_def.h b/engines/supernova2/ms2_def.h
index 1ec7360d94..092d4b1d01 100644
--- a/engines/supernova2/ms2_def.h
+++ b/engines/supernova2/ms2_def.h
@@ -146,7 +146,7 @@ kStringMuseum1, kStringMuseum2, kStringMuseum3, kStringMuseum4, kStringMuseum5,
kString85, kString86, kString87, kString88, kString89,
kString90, kString91, kString92, kStringDinosaur, kStringDinosaurDescription,
kStringEntrance, kStringDoor, kStringRoad, kStringCamera, kStringCameraDescription,
-kString100, kStringCorridor, kString102, kStringDinosaurHead, kString104,
+kStringMainEntrance, kStringCorridor, kString102, kStringDinosaurHead, kString104,
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 925a936fd0..d788ad4589 100644
--- a/engines/supernova2/rooms.cpp
+++ b/engines/supernova2/rooms.cpp
@@ -4171,12 +4171,17 @@ Mus8::Mus8(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 34;
_id = MUS8;
_shown[0] = kShownTrue;
+ _shown[12] = kShownTrue;
+
+ _objectState[0] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 0, 0, 1, MUS1, 10);
+ _objectState[1] = Object(_id, kStringDoor, kStringDefaultDescription, ENCRYPTED_DOOR, EXIT | OPENABLE | CLOSED | COMBINABLE, 1, 1, 2, MUS9, 14);
}
void Mus8::onEntrance() {
+ _gm->securityEntrance();
setRoomSeen(true);
}
@@ -4184,6 +4189,26 @@ void Mus8::animation() {
}
bool Mus8::interact(Action verb, Object &obj1, Object &obj2) {
+ _gm->museumDoorInteract(verb, obj1, obj2);
+ if (verb == ACTION_USE &&
+ Object::combine(obj1, obj2, SP_KEYCARD, ENCRYPTED_DOOR) &&
+ !(_objectState[1]._type & OPENED)) {
+ if (_gm->crackDoor(50)) {
+ _vm->renderImage(2);
+ _objectState[1]._type = EXIT | OPENABLE | OPENED;
+ _gm->_rooms[MUS9]->getObject(0)->_type = EXIT | OPENABLE | OPENED;
+ _gm->_rooms[MUS9]->setSectionVisible(1, kShownTrue);
+ _vm->playSound(kAudioTaxiOpen);
+ }
+ } else if (verb == ACTION_CLOSE && obj1._id == ENCRYPTED_DOOR &&
+ (obj1._type & OPENED)) {
+ _vm->renderImage(2 + 128);
+ _objectState[1]._type = EXIT | OPENABLE | CLOSED;
+ _gm->_rooms[MUS9]->getObject(0)->_type = EXIT | OPENABLE | CLOSED;
+ _gm->_rooms[MUS9]->setSectionVisible(1, kShownFalse);
+ _vm->playSound(kAudioElevator1);
+ } else
+ return false;
return true;
}
@@ -4191,12 +4216,19 @@ Mus9::Mus9(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 34;
_id = MUS9;
_shown[0] = kShownTrue;
+ _shown[5] = kShownTrue;
+ _shown[10] = kShownTrue;
+
+ _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);
}
void Mus9::onEntrance() {
+ _gm->securityEntrance();
setRoomSeen(true);
}
@@ -4204,6 +4236,43 @@ void Mus9::animation() {
}
bool Mus9::interact(Action verb, Object &obj1, Object &obj2) {
+ _gm->museumDoorInteract(verb, obj1, 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[MUS8]->getObject(1)->_type = EXIT | OPENABLE | OPENED;
+ _gm->_rooms[MUS8]->setSectionVisible(2, kShownTrue);
+ _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[MUS8]->getObject(1)->_type = EXIT | OPENABLE | CLOSED;
+ _gm->_rooms[MUS8]->setSectionVisible(2, kShownFalse);
+ _vm->playSound(kAudioElevator1);
+ } else if (verb == ACTION_USE &&
+ Object::combine(obj1, obj2, SP_KEYCARD, SMALL_DOOR) &&
+ !(_objectState[2]._type & OPENED)) {
+ if (_gm->crackDoor(50)) {
+ _vm->renderImage(6);
+ setSectionVisible(5, kShownFalse);
+ _objectState[2]._type = EXIT | OPENABLE | OPENED;
+ _gm->_rooms[MUS_RUND]->getObject(0)->_type = EXIT | OPENABLE | OPENED;
+ _vm->playSound(kAudioTaxiOpen);
+ }
+ } else if (verb == ACTION_CLOSE && obj1._id == SMALL_DOOR &&
+ (obj1._type & OPENED)) {
+ _vm->renderImage(5);
+ setSectionVisible(6, kShownFalse);
+ _objectState[2]._type = EXIT | OPENABLE | CLOSED;
+ _gm->_rooms[MUS_RUND]->getObject(0)->_type = EXIT | OPENABLE | CLOSED;
+ _vm->playSound(kAudioElevator1);
+ } else
+ return false;
return true;
}
@@ -4211,12 +4280,19 @@ Mus10::Mus10(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 34;
_id = MUS10;
_shown[0] = kShownTrue;
+ _shown[11] = kShownTrue;
+ _shown[13] = kShownTrue;
+
+ _objectState[0] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 0, 0, 1, MUS3, 10);
+ _objectState[1] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 1, 1, 2, MUS11, 14);
+ _objectState[2] = Object(_id, kStringMainEntrance, kStringDefaultDescription, BIG_DOOR, EXIT | OPENABLE | CLOSED, 4, 4, 0);
}
void Mus10::onEntrance() {
+ _gm->securityEntrance();
setRoomSeen(true);
}
@@ -4224,26 +4300,53 @@ void Mus10::animation() {
}
bool Mus10::interact(Action verb, Object &obj1, Object &obj2) {
- return true;
+ _gm->museumDoorInteract(verb, obj1, obj2);
+ if (verb == ACTION_USE && Object::combine(obj1, obj2, SP_KEYCARD, BIG_DOOR)) {
+ _vm->renderMessage(kStringMuseum14);
+ return true;
+ }
+ return false;
}
Mus11::Mus11(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 34;
_id = MUS11;
_shown[0] = kShownTrue;
+ _shown[4] = kShownTrue;
+ _shown[9] = kShownTrue;
+
+ _objectState[0] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 0, 0, 1, MUS10, 10);
+ _objectState[1] = Object(_id, kStringDoor, kStringDefaultDescription, DOOR, EXIT | OPENABLE, 1, 1, 2, MUS7, 14);
+ _objectState[2] = Object(_id, kStringDoor, kStringDefaultDescription, SMALL_DOOR, EXIT | OPENABLE, 2, 2, 0, MUS_ENTRANCE, 21);
}
void Mus11::onEntrance() {
+ _gm->pressureAlarmEntrance();
setRoomSeen(true);
}
void Mus11::animation() {
+ _gm->pressureAlarmCount();
}
bool Mus11::interact(Action verb, Object &obj1, Object &obj2) {
+ _gm->museumDoorInteract(verb, obj1, obj2);
+ if (verb == ACTION_OPEN && obj1._id == SMALL_DOOR && !(obj1._type & OPENED)) {
+ obj1._type |= OPENED;
+ _vm->renderImage(4);
+ setSectionVisible(3, kShownFalse);
+ _vm->playSound(kAudioTaxiOpen);
+ } else if (verb == ACTION_CLOSE && obj1._id == SMALL_DOOR &&
+ (obj1._type & OPENED)) {
+ obj1._type &= ~OPENED;
+ _vm->renderImage(3);
+ setSectionVisible(4, kShownFalse);
+ _vm->playSound(kAudioElevator1);
+ } else
+ return false;
return true;
}
diff --git a/engines/supernova2/state.cpp b/engines/supernova2/state.cpp
index 6309dab1da..a222af12db 100644
--- a/engines/supernova2/state.cpp
+++ b/engines/supernova2/state.cpp
@@ -1531,6 +1531,7 @@ void GameManager::handleInput() {
void GameManager::executeRoom() {
if (_currentRoom == _rooms[PUZZLE_FRONT])
puzzleConstruction();
+ debug("Siren: %d Sound: %d", _state._sirenOn, _vm->_sound->isPlaying());
if (_state._sirenOn && !_vm->_sound->isPlaying())
_vm->_sound->playSiren();
if (_processInput && !_vm->_screen->isMessageShown() && _guiEnabled) {
@@ -2063,7 +2064,7 @@ void GameManager::alarm() {
if (_vm->_screen->isMessageShown())
_vm->removeMessage();
_vm->renderMessage(kStringMuseum7);
- _state._eventTime = g_system->getMillis() + 270;
+ _state._eventTime = g_system->getMillis() + 18900;
_state._eventCallback = kCaughtFn;
_state._alarmOn = true;
}