diff options
author | Jaromir Wysoglad | 2019-06-03 17:03:27 +0200 |
---|---|---|
committer | Thierry Crozat | 2019-07-28 15:09:14 +0100 |
commit | 286f12c830eff01f94fac339eb7037162e54e7fc (patch) | |
tree | f5bd133a8e3296e29d5484a53f5dada9e09da467 /engines/supernova2/rooms.cpp | |
parent | 247deea4fcee03156b8c3e471081083ce4785a80 (diff) | |
download | scummvm-rg350-286f12c830eff01f94fac339eb7037162e54e7fc.tar.gz scummvm-rg350-286f12c830eff01f94fac339eb7037162e54e7fc.tar.bz2 scummvm-rg350-286f12c830eff01f94fac339eb7037162e54e7fc.zip |
SUPERNOVA2: Add cabin room
Diffstat (limited to 'engines/supernova2/rooms.cpp')
-rw-r--r-- | engines/supernova2/rooms.cpp | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp index 936c827bc4..f15c03f3db 100644 --- a/engines/supernova2/rooms.cpp +++ b/engines/supernova2/rooms.cpp @@ -737,10 +737,23 @@ bool Games::interact(Action verb, Object &obj1, Object &obj2) { Cabin::Cabin(Supernova2Engine *vm, GameManager *gm) { _vm = vm; _gm = gm; + _paid = false; - _fileNumber = 6; + _fileNumber = 7; _id = CABIN; _shown[0] = kShownTrue; + + _objectState[0] = Object(_id, kStringExit, kStringDefaultDescription, NULLOBJECT, EXIT, 255, 255, 0, GAMES, 22); + _objectState[1] = Object(_id, kStringHood, kStringHoodDescription, NULLOBJECT, NULLTYPE, 0, 0, 0); + _objectState[2] = Object(_id, kString400Xa, kStringDefaultDescription, PRIZE, TAKE, 255, 255, 2 + 180); + _objectState[3] = Object(_id, kString10Xa, kStringDefaultDescription, BACK_MONEY, TAKE, 255, 255, 2 + 128); + _objectState[4] = Object(_id, kStringSlot, kStringSlotDescription1, SLOT1, COMBINABLE, 2, 2, 0); + _objectState[5] = Object(_id, kStringSlot, kStringSlotDescription2, NULLOBJECT, COMBINABLE, 3, 3, 0); + _objectState[6] = Object(_id, kStringChair, kStringChairDescription, CHAIR, NULLTYPE, 4, 4, 0); + _objectState[7] = Object(_id, kStringScribble, kStringDefaultDescription, SCRIBBLE1, NULLTYPE, 5, 5, 0); + _objectState[8] = Object(_id, kStringScribble, kStringDefaultDescription, SCRIBBLE2, NULLTYPE, 6, 6, 0); + _objectState[9] = Object(_id, kStringFace, kStringFaceDescription, NULLOBJECT, NULLTYPE, 7, 7, 0); + _objectState[10] = Object(_id, kStringSign, kStringDefaultDescription, SIGN, UNNECESSARY, 1, 1, 0); } void Cabin::onEntrance() { @@ -748,9 +761,72 @@ void Cabin::onEntrance() { } void Cabin::animation() { + if (_paid) { + if (isSectionVisible(1)) + _vm->renderImage(1 + 128); + else + _vm->renderImage(1); + } + _gm->setAnimationTimer(4); } bool Cabin::interact(Action verb, Object &obj1, Object &obj2) { + if (verb == ACTION_USE && Object::combine(obj1, obj2, MONEY, SLOT1)) { + if (isSectionVisible(2)) + _vm->renderMessage(kStringTakeMoney); + else if (_paid) + _vm->renderMessage(kStringAlreadyPaid); + else if (_gm->_state._money < 10) + _vm->renderMessage(kStringNoMoney); + else { + _vm->renderMessage(kStringPay10Xa); + _gm->takeMoney(-10); + _paid = true; + } + } + else if (verb == ACTION_USE && obj1._id == CHAIR) { + if (_paid) { + if (_var2) { + _vm->paletteFadeOut(); + _vm->setCurrentImage(31); + _vm->renderImage(0); + _vm->paletteFadeIn(); + _paid = true; + _gm->waitOnInput(100000); + _vm->paletteFadeOut(); + _vm->setCurrentImage(7); + _vm->renderImage(0); + setSectionVisible(1, kShownFalse); + _paid = false; + _vm->renderRoom(*this); + _vm->renderImage(2); + _gm->drawMapExits(); + _gm->drawInventory(); + _gm->drawStatus(); + _gm->drawCommandBox(); + _vm->paletteFadeIn(); + getObject(3)->_click = 8; + } else { + _gm->_state._tipsy = false; + _vm->paletteFadeOut(); + _vm->_system->fillScreen(kColorBlack); + Common::String text = _vm->getGameString(kStringWillPassOut); + _vm->renderMessage(text); + _gm->waitOnInput((text.size() + 20) * _vm->_textSpeed / 10); + _vm->removeMessage(); + _vm->saveGame(kSleepAutosaveSlot, "autosave"); + _gm->_inventory.clear(); + _gm->changeRoom(PYRAMID); + _gm->drawStatus(); + _gm->drawInventory(); + _gm->drawMapExits(); + _gm->drawCommandBox(); + } + } else + _vm->renderMessage(kStringRest); + } + else + return false; return true; } |