aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova2/rooms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/supernova2/rooms.cpp')
-rw-r--r--engines/supernova2/rooms.cpp61
1 files changed, 59 insertions, 2 deletions
diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp
index d7a0042b3f..a20a96ddc3 100644
--- a/engines/supernova2/rooms.cpp
+++ b/engines/supernova2/rooms.cpp
@@ -3042,9 +3042,15 @@ MonsterF::MonsterF(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 14;
_id = MONSTER_F;
_shown[0] = kShownTrue;
+ _shown[1] = kShownTrue;
+ _shown[14] = kShownTrue;
+
+ _objectState[0] = Object(_id, kStringRight, kStringDefaultDescription, G_RIGHT, EXIT, 12, 12, 0, PYR_ENTRANCE, 14);
+ _objectState[1] = Object(_id, kStringLeft, kStringDefaultDescription, G_LEFT, EXIT, 11, 11, 0, PYR_ENTRANCE, 10);
+ _objectState[2] = Object(_id, kStringMonster, kStringMonsterDescription, CORRIDOR, EXIT, 0, 0, 0, PYR_ENTRANCE, 2);
}
void MonsterF::onEntrance() {
@@ -3055,6 +3061,15 @@ void MonsterF::animation() {
}
bool MonsterF::interact(Action verb, Object &obj1, Object &obj2) {
+ if (!_gm->move(verb, obj1))
+ return false;
+ if (obj1._id == CORRIDOR) {
+ if (_gm->_state._pyraS == 4)
+ _gm->changeRoom(MONSTER1_N);
+ else
+ _gm->changeRoom(MONSTER2_N);
+ }
+ _gm->_newRoom = true;
return true;
}
@@ -3062,9 +3077,17 @@ Monster1N::Monster1N(Supernova2Engine *vm, GameManager *gm) {
_vm = vm;
_gm = gm;
- _fileNumber = 6;
+ _fileNumber = 13;
_id = MONSTER1_N;
_shown[0] = kShownTrue;
+ _shown[1] = kShownTrue;
+
+ _objectState[0] = Object(_id, kStringRight, kStringDefaultDescription, G_RIGHT, EXIT, 8, 8, 0, PYR_ENTRANCE, 14);
+ _objectState[1] = Object(_id, kStringLeft, kStringDefaultDescription, G_LEFT, EXIT, 7, 7, 0, PYR_ENTRANCE, 10);
+ _objectState[2] = Object(_id, kStringRope, kStringRopeDescription, ROPE, TAKE | COMBINABLE, 255, 255, 2);
+ _objectState[3] = Object(_id, kStringEyes, kStringDefaultDescription, NULLOBJECT, NULLTYPE, 6, 6, 0);
+ _objectState[4] = Object(_id, kStringMouth, kStringDefaultDescription, MOUTH, NULLTYPE, 1, 1, 0);
+ _objectState[5] = Object(_id, kStringMonster, kStringMonster1Description, MONSTER, NULLTYPE, 0, 0, 0);
}
void Monster1N::onEntrance() {
@@ -3075,6 +3098,40 @@ void Monster1N::animation() {
}
bool Monster1N::interact(Action verb, Object &obj1, Object &obj2) {
+ if (_gm->move(verb, obj1)) {
+ _gm->passageConstruction();
+ _gm->_newRoom = true;
+ } else if ((verb == ACTION_OPEN || verb == ACTION_PULL) && obj1._id == MOUTH) {
+ if (obj1._type & OPENED)
+ _vm->renderMessage(kStringGenericInteract8);
+ else {
+ obj1._type |= OPENED;
+ if (isSectionVisible(kMaxSection - 1))
+ _vm->renderImage(2);
+ else {
+ _objectState[2]._click = 1;
+ _vm->renderImage(4);
+ setSectionVisible(2, kShownFalse);
+ }
+ _vm->playSound(kAudioTaxiOpen);
+ }
+ } else if (verb == ACTION_CLOSE && obj1._id == MOUTH) {
+ if (obj1._type & OPENED) {
+ _vm->renderImage(1);
+ setSectionVisible(2, kShownFalse);
+ obj1._type &= ~OPENED;
+ _vm->playSound(kAudioElevator1);
+ } else
+ _vm->renderMessage(kStringGenericInteract11);
+ } else if (verb == ACTION_TAKE && (obj1._id == ROPE || obj1._id == NOTE)) {
+ _gm->takeObject(obj1);
+ setSectionVisible(3, kShownFalse);
+ setSectionVisible(4, kShownFalse);
+ setSectionVisible(kMaxSection - 1, kShownTrue);
+ } else if (verb == ACTION_USE && Object::combine(obj1, obj2, TKNIFE, MONSTER)) {
+ _vm->renderMessage(kStringPyramid6);
+ } else
+ return false;
return true;
}