diff options
author | Jaromir Wysoglad | 2019-06-05 16:21:10 +0200 |
---|---|---|
committer | Thierry Crozat | 2019-07-28 15:09:14 +0100 |
commit | b4c59bee451f6715c368d9607786eb5ddb40b6f0 (patch) | |
tree | 7019b35931a39d342b3dd52906b7774d5745211d | |
parent | d2e67fca8fb61848af51e06fdbf4013b50f2df05 (diff) | |
download | scummvm-rg350-b4c59bee451f6715c368d9607786eb5ddb40b6f0.tar.gz scummvm-rg350-b4c59bee451f6715c368d9607786eb5ddb40b6f0.tar.bz2 scummvm-rg350-b4c59bee451f6715c368d9607786eb5ddb40b6f0.zip |
SUPERNOVA2: Add partialy finished Elevator room.
-rw-r--r-- | engines/supernova2/- | 221 | ||||
-rw-r--r-- | engines/supernova2/ms2_def.h | 34 | ||||
-rw-r--r-- | engines/supernova2/resman.cpp | 3 | ||||
-rw-r--r-- | engines/supernova2/rooms.cpp | 210 | ||||
-rw-r--r-- | engines/supernova2/rooms.h | 1 | ||||
-rw-r--r-- | engines/supernova2/sound.h | 1 | ||||
-rw-r--r-- | engines/supernova2/state.cpp | 6 | ||||
-rw-r--r-- | engines/supernova2/state.h | 2 |
8 files changed, 459 insertions, 19 deletions
diff --git a/engines/supernova2/- b/engines/supernova2/- new file mode 100644 index 0000000000..beda2e284d --- /dev/null +++ b/engines/supernova2/- @@ -0,0 +1,221 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef SUPERNOVA2_STATE_H +#define SUPERNOVA2_STATE_H + +#include "common/events.h" +#include "common/rect.h" +#include "common/keyboard.h" +#include "supernova2/rooms.h" +#include "supernova2/sound.h" + +namespace Supernova2 { + +const int32 kMaxTimerValue = 0x7FFFFFFF; + +enum EventFunction { kNoFn, kSoberFn}; + +struct GameState { + int16 _money; + bool _addressKnown; + Room *_previousRoom; + bool _poleMagnet; + char _admission; + bool _tipsy; + bool _dark; + char _elevatorE; + char _elevatorNumber; + bool _toMuseum; + EventFunction _eventCallback; + uint32 _eventTime; +}; + +class Inventory { +public: + Inventory(Object *nullObject, int &inventoryScroll) + : _numObjects(0) + , _nullObject(nullObject) + , _inventoryScroll(inventoryScroll) { + for (int i = 0; i < kMaxCarry; ++i) + _inventory[i] = nullptr; + } + + void add(Object &obj); + void remove(Object &obj); + void clear(); + Object *get(int index) const; + Object *get(ObjectId id) const; + int getSize() const { return _numObjects; } + +private: + Object *_inventory[kMaxCarry]; + Object *_nullObject; + int &_inventoryScroll; + int _numObjects; +}; + +class GuiElement : public Common::Rect { +public: + GuiElement(); + + void setSize(int x1, int y1, int x2, int y2); + void setText(const char *text); + void setTextPosition(int x, int y); + void setColor(int bgColor, int textColor, int bgColorHighlighted, int textColorHightlighted); + void setHighlight(bool isHighlighted); + + const char *getText() const { + return _text; + } + int getBackgroundColor() const { + return _bgColor; + } + int getTextColor() const { + return _textColor; + } + const Common::Point &getTextPos() const { + return _textPosition; + } + bool isHighlighted() const { + return _isHighlighted; + } + +private: + Common::Point _textPosition; + char _text[128]; + int _bgColor; + int _textColor; + int _bgColorNormal; + int _bgColorHighlighted; + int _textColorNormal; + int _textColorHighlighted; + bool _isHighlighted; +}; + +class GameManager { +public: + GameManager(Supernova2Engine *vm); + ~GameManager(); + + void updateEvents(); + void processInput(Common::KeyState &state); + void processInput(); + void executeRoom(); + bool serialize(Common::WriteStream *out); + bool deserialize(Common::ReadStream *in, int version); + + static StringId guiCommands[]; + static StringId guiStatusCommands[]; + Supernova2Engine *_vm; + Common::KeyState _key; + Common::EventType _mouseClickType; + bool _mouseClicked; + bool _keyPressed; + int _mouseX; + int _mouseY; + int _mouseField; + Room *_currentRoom; + bool _newRoom; + Room *_rooms[NUMROOMS]; + Inventory _inventory; + GameState _state; + bool _processInput; + bool _guiEnabled; + bool _animationEnabled; + Action _inputVerb; + Object _nullObject; + Object *_currentInputObject; + Object *_inputObject[2]; + int32 _oldTime; + uint _timePaused; + bool _timerPaused; + int _restTime; + int32 _messageDuration; + int32 _animationTimer; + int _inventoryScroll; + int _exitList[25]; + GuiElement _guiCommandButton[10]; + GuiElement _guiInventory[8]; + GuiElement _guiInventoryArrow[2]; + // Dialog + int _currentSentence; + int _sentenceNumber[6]; + StringId _texts[6]; + byte _rows[6]; + byte _rowsStart[6]; + byte _dials[6]; + int _taxi_possibility; + + void takeObject(Object &obj); + void setObjectNull(Object *&obj); + bool isNullObject(Object *obj); + + void initState(); + void initRooms(); + void destroyRooms(); + void initGui(); + bool genericInteract(Action verb, Object &obj1, Object &obj2); + uint16 getKeyInput(bool blockForPrintChar = false); + void getInput(); + void wait(int ticks); + void waitOnInput(int ticks); + bool waitOnInput(int ticks, Common::KeyCode &keycode); + void showMenu(); + void edit(Common::String &input, int x, int y, uint length); + int invertSection(int section); + void drawMapExits(); + void drawStatus(); + void drawCommandBox(); + void drawInventory(); + void changeRoom(RoomId id); + void resetInputState(); + void handleInput(); + void handleTime(); + void pauseTimer(bool pause); + void setAnimationTimer(int ticks); + int dialog(int num, byte rowLength[6], StringId text[6], int number); + void sentence(int number, bool brightness); + void say(StringId textId); + void say(const char *text); + void reply(StringId textId, int aus1, int aus2); + void reply(const char *text, int aus1, int aus2); + void mousePosDialog(int x, int y); + void takeMoney(int amount); + void taxi(); + void leaveTaxi(); + void taxiUnknownDestination(); + void taxiPayment(int price, int destination); + void playerTakeOut(); + void sober(); + void playCD(); + void drawGUI(); + bool talk(int mod1, int mod2, int rest, MessagePosition pos, StringId id); + bool talkRest(int mod1, int mod2, int rest); + +private: + int _prevImgId; +}; + +} + +#endif // SUPERNOVA2_STATE_H diff --git a/engines/supernova2/ms2_def.h b/engines/supernova2/ms2_def.h index f99c008d9e..f3cc21f8a4 100644 --- a/engines/supernova2/ms2_def.h +++ b/engines/supernova2/ms2_def.h @@ -116,12 +116,12 @@ enum ObjectId { BMASK,BOTTLE,PLAYER,TOOTHBRUSH,BOOKS,LEXICON,PLANT,SNAKE, CUP,JOYSTICK,BOTTLE1,BOTTLE2,BOTTLE3,BOTTLE4,BOX,FACES, SELLER,POSTER,AXACUSSER,KP_ENTRANCE,CHIP,CARD, - SCRIBBLE1,SCRIBBLE2,BELL,GROPE,DOOR_L,DOOR_R,ID_CARD, + SCRIBBLE1,SCRIBBLE2,BELL,KEYPAD,DOOR_L,DOOR_R,ID_CARD, MAGNET,UNDER_BED,KEY,VALVE,WARDROBE,DISCMAN, SMALL_DOOR,BACK_MONEY,WALL,SUCTION_CUP,IMITATION,SP_KEYCARD,ALARM_CRACKER, ENCRYPTED_DOOR,ALARM_ANLAGE,MUS_STREET,BIG_DOOR,INVESTMENT, HANDLE,COUNTER,DOOR_SWITCH,SUIT,MANAGEMENT,RMANAGEMENT, - MUSCARD,SKOPF + MUSCARD,SKOPF, DISPLAY }; enum StringId { @@ -216,19 +216,19 @@ kStringAppearance8, kStringAppearance9, kStringAppearance10, kStringAppearance11 kStringAppearance13, kStringAppearance14, kStringAppearance15, kStringAppearance16, kStringAppearance17, kStringAppearance18, kStringAppearance19, kStringAppearance20, kStringAppearance21, kStringAppearance22, kStringAppearance23, kStringAppearance24, kStringAppearance25, kStringAppearance26, kStringAppearance27, -kStringAppearance28, kStringAppearance29, kStringAppearance30, kStringAppearance31, kString454, -kString455, kString456, kString457, kString458, kString459, -kString460, kString461, kString462, kString463, kString464, -kString465, kString466, kString467, kString468, kString469, -kString470, kString471, kString472, kString473, kString474, -kString475, kString476, kString477, kString478, kString479, -kString480, kString481, kString482, kString483, kString484, -kString485, kString486, kString487, kString488, kString489, -kString490, kString491, kString492, kString493, kString494, -kString495, kString496, kString497, kString498, kString499, -kString500, kString501, kString502, kString503, kString504, -kString505, kString506, kString507, kString508, kString509, -kString510, kString511, kString512, kString513, kString514, +kStringAppearance28, kStringAppearance29, kStringAppearance30, kStringAppearance31, kStringElevator1, +kStringElevator2, kStringElevator3, kStringElevator4, kStringElevator5, kStringElevator6, +kStringElevator7, kStringElevator8, kStringElevator9, kStringElevator10, kStringElevator11, +kStringElevator12, kStringElevator13, kStringElevator14, kStringElevator15, kStringElevator16, +kStringElevator17, kStringElevator18, kStringElevator19, kStringElevator20, kStringElevator21, +kStringElevator22, kStringElevator23, kStringElevator24, kStringElevator25, kStringElevator26, +kStringElevator27, kStringElevator28, kStringElevator29, kStringElevator30, kStringElevator31, +kStringElevator32, kStringElevator33, kStringElevator34, kStringElevator35, kStringElevator36, +kStringElevator37, kStringElevator38, kStringElevator39, kStringElevator40, kStringElevator41, +kStringElevator42, kStringElevator43, kStringElevator44, kStringElevator45, kStringElevator46, +kStringElevator47, kStringElevator48, kStringElevator49, kStringElevator50, kStringElevator51, +kStringElevator52, kStringElevator53, kStringElevator54, kStringElevator55, kStringElevator56, +kStringElevator57, kStringElevator58, kStringElevator59, kStringElevator60, kStringElevator61, kString515, kString516, kString517, kString518, kString519, kString520, kString521, kString522, kString523, kString524, kString525, kString526, kString527, kString528, kString529, @@ -237,8 +237,8 @@ kString535, kString536, kString537, kString538, kString539, kString540, kString541, kString542, kString543, kString544, kString545, kString546, kStringFascinating, kStringTaxis, kStringTaxisDescription, kStringAxacussan, kStringParticipationCard, kStringAxacussian, kStringSign1Description, kStringSign2Description, -kStringSign3Description, kStringSign4Description, kString557, kString558, kString559, -kString560, kString561, kString562, kString563, kString564, +kStringSign3Description, kStringSign4Description, kStringBell, kStringDisplay, kStringKeypad, +kStringKeypadDescription, kString561, kString562, kString563, kString564, kString565, kString566, kString567, kString568, kString569, kString570, kString571, kString572, kString573, kString574, kString575, kString576, kString577, kString578, kString579, diff --git a/engines/supernova2/resman.cpp b/engines/supernova2/resman.cpp index 29a272d8a4..7ab833f96e 100644 --- a/engines/supernova2/resman.cpp +++ b/engines/supernova2/resman.cpp @@ -55,7 +55,8 @@ static const AudioInfo audioInfo[kAudioNumSamples] = { {55, 0, 7010}, {53, 5010, 30020}, {55, 18230, -1}, - {55, 17020, 18230} + {55, 17020, 18230}, + {53, 0, 30020} }; static const byte mouseNormal[64] = { diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp index 9ce7a54cea..f9b8056843 100644 --- a/engines/supernova2/rooms.cpp +++ b/engines/supernova2/rooms.cpp @@ -1596,12 +1596,23 @@ Elevator::Elevator(Supernova2Engine *vm, GameManager *gm) { _vm = vm; _gm = gm; - _fileNumber = 6; + _fileNumber = 24; _id = ELEVATOR; _shown[0] = kShownTrue; + + _objectState[0] = Object(_id, kStringSlot, kStringDefaultDescription, SLOT, COMBINABLE, 0, 0, 0); + _objectState[1] = Object(_id, kStringBell, kStringDefaultDescription, BELL, PRESS, 1, 1, 0); + _objectState[2] = Object(_id, kStringDisplay, kStringDefaultDescription, DISPLAY, NULLTYPE, 2, 2, 0); + _objectState[3] = Object(_id, kStringKeypad, kStringKeypadDescription, KEYPAD, PRESS, 3, 3, 0); + _objectState[4] = Object(_id, kStringDoor, kStringDefaultDescription, NULLOBJECT, EXIT | OPENABLE | CLOSED, 4, 4, 0, APARTMENT, 3); + _objectState[5] = Object(_id, kStringEntrance, kStringDefaultDescription, NULLOBJECT, EXIT | OPENABLE | OPENED | CLOSED, 4, 4, 0, APARTMENT, 3); } void Elevator::onEntrance() { + if (_gm->_state._elevatorE) + _objectState[5]._type &= ~OPENED; + else + _objectState[5]._type |= OPENED; setRoomSeen(true); } @@ -1609,9 +1620,206 @@ void Elevator::animation() { } bool Elevator::interact(Action verb, Object &obj1, Object &obj2) { + static StringId dialLuke1[4] = { + kStringElevator2, + kStringElevator3, + kStringElevator4, + kStringElevator5 + }; + static byte dialsLuke1[3] = {2,1,1}; + static StringId dialBoss1[2] = { + kStringElevator6, + kStringElevator7 + }; + char input[3]; + + if (verb == ACTION_LOOK && obj1._id == DISPLAY) { + Common::String format = _vm->getGameString(kStringElevator1); + Common::String display = + Common::String::format(format.c_str(), _gm->_state._elevatorE); + _vm->renderMessage(display); + } else if (verb == ACTION_PRESS && obj1._id == BELL) { + _vm->renderImage(8); + _vm->playSound(kAudioElevatorBell); + while(_vm->_sound->isPlaying()) + _gm->wait(1); + _vm->renderImage(8 + 128); + if (_gm->_state._elevatorNumber == 4 && _gm->_state._elevatorE == 4 && !_gm->_state._toMuseum) { + _gm->wait(18); + _vm->renderImage(1); + _gm->wait(3); + _vm->renderImage(2); + setSectionVisible(1, kShownFalse); + _gm->wait(3); + _vm->renderImage(3); + setSectionVisible(2, kShownFalse); + _gm->reply(kStringWhatYouWant, 4, 3); + switch (_gm->dialog(3, dialsLuke1, dialLuke1, 1)) { + case 0: + _gm->reply(kStringElevator11, 4, 3); + _vm->renderImage(2); + setSectionVisible(3, kShownFalse); + _gm->wait(3); + _vm->renderImage(1); + setSectionVisible(2, kShownFalse); + _gm->wait(3); + _vm->renderImage(1 + 128); + _vm->renderMessage(kStringElevator12); + _gm->waitOnInput(_gm->_messageDuration); + _vm->removeMessage(); + _vm->renderImage(1); + _gm->wait(3); + _vm->renderImage(2); + setSectionVisible(1, kShownFalse); + _gm->wait(3); + _vm->renderImage(3); + setSectionVisible(2, kShownFalse); + _gm->reply(kStringElevator13, 4, 3); + setSectionVisible(3, kShownFalse); + setSectionVisible(4, kShownFalse); + _vm->paletteFadeOut(); + _vm->_system->fillScreen(kColorBlack); + _vm->paletteFadeIn(); + _vm->renderMessage(kStringElevator14); + _gm->waitOnInput(_gm->_messageDuration); + _vm->removeMessage(); + _vm->paletteFadeOut(); + _vm->paletteFadeOut(); + _vm->setCurrentImage(26); + _vm->renderImage(0); + _vm->paletteFadeIn(); + _gm->reply(kStringElevator15, 1, 1 + 128); + _gm->say(kStringYes); + _gm->reply(kStringElevator16, 1, 1 + 128); + _gm->reply(kStringElevator17, 1, 1 + 128); + if (_gm->dialog(2, _gm->_dials, dialBoss1, 0)) { + _gm->reply(kStringElevator18, 1, 1 + 128); + _gm->reply(kStringElevator19, 1, 1 + 128); + _gm->say(kStringElevator20); + } + _gm->reply(kStringElevator21, 1, 1 + 128); + _gm->reply(kStringElevator22, 1, 1 + 128); + _gm->reply(kStringElevator23, 1, 1 + 128); + _gm->reply(kStringElevator24, 1, 1 + 128); + _gm->reply(kStringElevator25, 1, 1 + 128); + _gm->reply(kStringElevator26, 1, 1 + 128); + _gm->reply(kStringElevator27, 1, 1 + 128); + _gm->reply(kStringElevator28, 1, 1 + 128); + jobDescription(); + return true; + case 1: + _gm->reply(kStringElevator59, 4, 3); + _vm->renderImage(2); + setSectionVisible(3, kShownFalse); + setSectionVisible(4, kShownFalse); + _gm->wait(3); + _vm->renderImage(1); + setSectionVisible(2, kShownFalse); + _vm->renderImage(1 + 128); + break; + case 2: + _gm->reply(kStringElevator60, 4, 3); + _vm->renderImage(2); + setSectionVisible(3, kShownFalse); + setSectionVisible(4, kShownFalse); + _gm->wait(3); + _vm->renderImage(1); + setSectionVisible(2, kShownFalse); + _vm->renderImage(1 + 128); + break; + } + _gm->drawGUI(); + } + else + _vm->renderMessage(kStringElevator61); + } else + return false; return true; } +void Elevator::jobDescription() { + static StringId dialBoss2[5] = { + kStringElevator8, + kStringElevator9, + kStringElevator10 + }; + byte dialsBoss2[4] = {1,1,2,1}; + + _gm->reply(kStringElevator29, 1, 1 + 128); + _gm->reply(kStringElevator30, 1, 1 + 128); + _gm->reply(kStringElevator31, 1, 1 + 128); + _gm->reply(kStringElevator32, 1, 1 + 128); + _vm->setCurrentImage(30); + _vm->renderImage(0); + _gm->waitOnInput(72); + _gm->reply(kStringElevator33, 0, 0); + _gm->reply(kStringElevator34, 0, 0); + _gm->reply(kStringElevator35, 0, 0); + _gm->reply(kStringElevator36, 0, 0); + _gm->reply(kStringElevator37, 0, 0); + _gm->reply(kStringElevator38, 0, 0); + _gm->reply(kStringElevator39, 0, 0); + _gm->reply(kStringElevator40, 0, 0); + _gm->reply(kStringElevator41, 0, 0); + _gm->reply(kStringElevator42, 0, 0); + _gm->reply(kStringElevator43, 0, 0); + _gm->reply(kStringElevator44, 0, 0); + _gm->reply(kStringElevator45, 0, 0); + _gm->reply(kStringElevator46, 0, 0); + _gm->reply(kStringElevator47, 0, 0); + _gm->reply(kStringElevator48, 0, 0); + _vm->setCurrentImage(26); + _vm->renderImage(0); + _gm->reply(kStringElevator49, 1, 1 + 128); + int e; + do { + addSentence(0, 2); + switch (e = _gm->dialog(4, dialsBoss2, dialBoss2, 2)) { + case 0: + _gm->reply(kStringElevator50, 1, 1 + 128); + jobDescription(); + return; + case 1: + _gm->reply(kStringElevator51, 1, 1 + 128); + break; + case 2: + _gm->reply(kStringElevator52, 1, 1 + 128); + break; + } + if (e == 1 || e == 2) + _gm->reply(kStringElevator53, 1, 1 + 128); + } while (e != 3); + _gm->reply(kStringElevator54, 1, 1 + 128); + _vm->paletteFadeOut(); + _vm->_system->fillScreen(kColorBlack); + _vm->paletteFadeIn(); + _vm->renderMessage(kStringElevator55); + _gm->waitOnInput(_gm->_messageDuration); + _vm->removeMessage(); + _vm->paletteFadeOut(); + _vm->saveGame(kSleepAutosaveSlot, "autosave"); + _gm->_inventory.clear(); + _gm->takeObject(*_gm->_rooms[INTRO]->getObject(3)); + _gm->takeObject(*_gm->_rooms[INTRO]->getObject(5)); + _gm->takeObject(*_gm->_rooms[INTRO]->getObject(6)); + _gm->takeObject(*_gm->_rooms[INTRO]->getObject(8)); + _vm->setCurrentImage(29); + _gm->changeRoom(MUSEUM); + _vm->renderImage(0); + _vm->paletteFadeIn(); + _vm->renderMessage(kStringElevator56); + _gm->waitOnInput(_gm->_messageDuration); + _vm->removeMessage(); + _vm->renderMessage(kStringElevator57); + _gm->waitOnInput(_gm->_messageDuration); + _vm->removeMessage(); + _vm->renderMessage(kStringElevator58); + _gm->drawGUI(); + _gm->_state._startTime = g_system->getMillis() - 2390000; + _gm->_state._tipsy = false; + _gm->_state._toMuseum = true; +} + Apartment::Apartment(Supernova2Engine *vm, GameManager *gm) { _vm = vm; _gm = gm; diff --git a/engines/supernova2/rooms.h b/engines/supernova2/rooms.h index 3e0f75c457..4145f8028a 100644 --- a/engines/supernova2/rooms.h +++ b/engines/supernova2/rooms.h @@ -200,6 +200,7 @@ public: virtual bool interact(Action verb, Object &obj1, Object &obj2); private: + void jobDescription(); }; class Apartment : public Room { diff --git a/engines/supernova2/sound.h b/engines/supernova2/sound.h index 7798c7a38d..e2e693f45d 100644 --- a/engines/supernova2/sound.h +++ b/engines/supernova2/sound.h @@ -42,6 +42,7 @@ enum AudioId { kAudioAppearance1, kAudioAppearance2, kAudioAppearance3, + kAudioElevatorBell, kAudioNumSamples }; diff --git a/engines/supernova2/state.cpp b/engines/supernova2/state.cpp index 8f3a3cfa79..2cc05180d2 100644 --- a/engines/supernova2/state.cpp +++ b/engines/supernova2/state.cpp @@ -37,6 +37,7 @@ bool GameManager::serialize(Common::WriteStream *out) { // GameState out->writeSint16LE(_state._money); + out->writeSint32LE(_state._startTime); out->writeByte(_state._addressKnown); out->writeByte(_state._poleMagnet); out->writeByte(_state._admission); @@ -44,6 +45,7 @@ bool GameManager::serialize(Common::WriteStream *out) { out->writeByte(_state._dark); out->writeByte(_state._elevatorE); out->writeByte(_state._elevatorNumber); + out->writeByte(_state._toMuseum); out->writeUint32LE(_state._eventTime); out->writeSint32LE(_state._eventCallback); @@ -73,6 +75,7 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) { // GameState _state._money = in->readSint16LE(); + _state._startTime = in->readSint32LE(); _state._addressKnown = in->readByte(); _state._poleMagnet = in->readByte(); _state._admission = in->readByte(); @@ -80,6 +83,7 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) { _state._dark = in->readByte(); _state._elevatorE = in->readByte(); _state._elevatorNumber = in->readByte(); + _state._toMuseum = in->readByte(); _state._eventTime = in->readUint32LE(); _state._eventCallback = (EventFunction)in->readSint32LE(); _vm->setGameString(kStringMoney, Common::String::format("%d Xa", _state._money)); @@ -342,6 +346,7 @@ void GameManager::initState() { _prevImgId = 0; _state._money = 20; + _state._startTime = 0; _state._addressKnown = false; _state._previousRoom = _currentRoom; _state._poleMagnet = false; @@ -350,6 +355,7 @@ void GameManager::initState() { _state._dark = false; _state._elevatorE = 0; _state._elevatorNumber = 0; + _state._toMuseum = false; _state._eventTime = kMaxTimerValue; _state._eventCallback = kNoFn; } diff --git a/engines/supernova2/state.h b/engines/supernova2/state.h index 927bca3174..53deb9f13b 100644 --- a/engines/supernova2/state.h +++ b/engines/supernova2/state.h @@ -37,6 +37,7 @@ enum EventFunction { kNoFn, kSoberFn}; struct GameState { int16 _money; + int32 _startTime; bool _addressKnown; Room *_previousRoom; bool _poleMagnet; @@ -45,6 +46,7 @@ struct GameState { bool _dark; char _elevatorE; char _elevatorNumber; + bool _toMuseum; EventFunction _eventCallback; uint32 _eventTime; }; |