diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/supernova2/ms2_def.h | 8 | ||||
-rw-r--r-- | engines/supernova2/rooms.cpp | 83 |
2 files changed, 86 insertions, 5 deletions
diff --git a/engines/supernova2/ms2_def.h b/engines/supernova2/ms2_def.h index 3d2f801b69..f74e2848ea 100644 --- a/engines/supernova2/ms2_def.h +++ b/engines/supernova2/ms2_def.h @@ -150,16 +150,16 @@ kString100, kStringCorridor, kString102, kStringDinosaurHead, kString104, kString105, kStringSuctionCup, kString107, kStringOpening, kString109, kStringMassive, kStringInscriptionDescription, kStringPyramid0, kStringPyramid1, kStringPyramid2, kStringPyramid3, kStringPyramid4, kStringPiece, kStringPyramid5, kStringPyramid6, -kStringPyramid7, kStringPyramid8, kStringPyramid9, kStringPyramid10, kString124, -kString125, kString126, kString127, kString128, kString129, +kStringPyramid7, kStringPyramid8, kStringPyramid9, kStringPyramid10, kStringPyramid11, +kStringPyramid12, kString126, kString127, kString128, kString129, kString130, kString131, kStringDirection1, kStringDirection2, kStringDirection3, kStringDirection4, kStringRope, kStringSign, kStringSignDescription, kStringEntrance1Description, kStringPyramid, kStringPyramidDescription, kStringSun, kStringSunDescription, kStringSign5Description, kStringRight, kStringLeft, kStringButton, kStringInscription, kStringTomato, kStringFunnyDescription, kStringKnife1, kStringKnife1Description, kStringMonster, kStringRopeDescription, kStringEyes, kStringMouth, kStringMonster1Description, kStringNote, kStringNoteDescription, -kStringOpeningDescription1, kStringOpeningDescription2, kString162, kStringSlot, kString164, -kString165, kString166, kString167, kString168, kStringExit, +kStringOpeningDescription1, kStringOpeningDescription2, kStringNoteDescription1, kStringSlot, kStringSlotDescription3, +kStringOpeningDescription3, kStringStones, kString167, kString168, kStringExit, kString170, kStringToothbrush, kString172, kString173, kString174, kString175, kString176, kString177, kStringDefaultDescription, kStringLooksMetal, kStringTaxiArrives, kStringNothingHappens, kStringEmpty, kStringWalletOpen, kStringAttachMagnet, diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp index f604068c40..e095ab7acf 100644 --- a/engines/supernova2/rooms.cpp +++ b/engines/supernova2/rooms.cpp @@ -3397,6 +3397,10 @@ InHole::InHole(Supernova2Engine *vm, GameManager *gm) { _fileNumber = 6; _id = IN_HOLE; _shown[0] = kShownTrue; + + _objectState[0] = Object(_id, kStringRope, kStringDefaultDescription, ROPE, EXIT, 0, 0, 0, HOLE_ROOM, 2); + _objectState[1] = Object(_id, kStringNote, kStringNoteDescription1, NULLOBJECT, TAKE, 255, 255, 1 + 128); + _objectState[2] = Object(_id, kStringSlot, kStringSlotDescription3, SLOT, COMBINABLE, 1, 1, 0); } void InHole::onEntrance() { @@ -3407,6 +3411,21 @@ void InHole::animation() { } bool InHole::interact(Action verb, Object &obj1, Object &obj2) { + if (verb == ACTION_USE && Object::combine(obj1, obj2, TKNIFE, SLOT)) { + if (isSectionVisible(kMaxSection - 1)) + _vm->renderMessage(kStringPyramid11); + else { + _vm->renderImage(1); + _objectState[1]._click = 2; + setSectionVisible(kMaxSection - 1, kShownTrue); + } + } else if (verb == ACTION_TAKE && obj1._id == ROPE) { + _vm->renderMessage(kStringPyramid9); + } else if (verb == ACTION_USE && obj1._id == ROPE) { + _gm->changeRoom(HOLE_ROOM); + _gm->_newRoom = true; + } else + return false; return true; } @@ -3414,10 +3433,17 @@ Floordoor::Floordoor(Supernova2Engine *vm, GameManager *gm) { _vm = vm; _gm = gm; - _fileNumber = 6; + _fileNumber = 14; _id = FLOORDOOR; _shown[0] = 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, kStringKnife1, kStringDefaultDescription, TKNIFE, TAKE | COMBINABLE, 255, 255, 9); + _objectState[3] = Object(_id, kStringRope, kStringDefaultDescription, ROPE, TAKE, 255, 255, 11+128); + _objectState[4] = Object(_id, kStringOpening, kStringOpeningDescription3, HOLE, EXIT, 4, 4, 0, FLOORDOOR_U, 12); + _objectState[5] = Object(_id, kStringStones, kStringDefaultDescription, STONES, COMBINABLE, 5, 5, 0); } void Floordoor::onEntrance() { @@ -3428,6 +3454,61 @@ void Floordoor::animation() { } bool Floordoor::interact(Action verb, Object &obj1, Object &obj2) { + if (_gm->move(verb, obj1)) { + _gm->passageConstruction(); + _gm->_newRoom = true; + } else if (verb == ACTION_WALK && obj1._id == HOLE) { + if (isSectionVisible(11)) { + _gm->_state._pyraZ = 4; + _gm->_state._pyraDirection = 2; + _gm->_state._pyraE = 0; + return false; + } else + _vm->renderMessage(kStringPyramid12); + } else if (verb == ACTION_USE && obj1._id == ROPE && isSectionVisible(11)) { + _gm->_state._pyraZ = 4; + _gm->_state._pyraDirection = 2; + _gm->_state._pyraE = 0 ; + _gm->changeRoom(FLOORDOOR_U); + _gm->_newRoom = true; + } else if (verb == ACTION_USE && Object::combine(obj1, obj2, TKNIFE, STONES)) { + _vm->renderImage(10); + if (obj1._id == TKNIFE) + _gm->_inventory.remove(obj1); + else + _gm->_inventory.remove(obj2); + _objectState[2]._click = 6; + } else if (verb == ACTION_USE && + (Object::combine(obj1, obj2, TKNIFE, G_RIGHT) || + Object::combine(obj1, obj2, TKNIFE, G_LEFT))) { + _vm->renderMessage(kStringPyramid8); + } else if (verb == ACTION_USE && Object::combine(obj1, obj2, ROPE, TKNIFE) && + isSectionVisible(10)) { + _vm->renderImage(11); + setSectionVisible(10, kShownFalse); + if (obj1._id == ROPE) + _gm->_inventory.remove(obj1); + else + _gm->_inventory.remove(obj2); + _objectState[2]._click = 255; + _objectState[3]._click = 7; + _objectState[3]._type &= ~COMBINABLE; + } else if (verb == ACTION_USE && + (Object::combine(obj1, obj2, ROPE, G_RIGHT) || + Object::combine(obj1, obj2, ROPE, G_LEFT) || + Object::combine(obj1, obj2, ROPE, STONES))) { + _vm->renderMessage(kStringPyramid7); + } else if (verb == ACTION_TAKE && obj1._id == ROPE && !(obj1._type & CARRIED)) { + _gm->takeObject(obj1); + obj1._type |= COMBINABLE; + _vm->renderImage(9); + _vm->renderImage(10); + _objectState[2]._click = 6; + } else if (verb == ACTION_TAKE && obj1._id == TKNIFE && !(obj1._type & CARRIED)) { + _gm->takeObject(obj1); + setSectionVisible(10, kShownFalse); + } else + return false; return true; } |