diff options
author | Jaromir Wysoglad | 2019-06-18 21:35:55 +0200 |
---|---|---|
committer | Thierry Crozat | 2019-07-28 15:09:14 +0100 |
commit | d09b286054d60e5e26d8339467e721662d381f53 (patch) | |
tree | 3ece004e2e3a46068a492475eda4c7f8dbaee34d | |
parent | 83e05ea13f61fdd5d582115c8c2bbd246f70983c (diff) | |
download | scummvm-rg350-d09b286054d60e5e26d8339467e721662d381f53.tar.gz scummvm-rg350-d09b286054d60e5e26d8339467e721662d381f53.tar.bz2 scummvm-rg350-d09b286054d60e5e26d8339467e721662d381f53.zip |
SUPERNOVA2: Fix more bugs
1. Saving and loading correct time when saving in front of museum
2. Saving and loading correct time left for the pyramid (1 hour)
3. Add sound when entering a correct address inside taxi
4. Show message when leaving museum via taxi in the middle of
the haist
5. Reset elevator possition to floor 0, so it can be exited
if the player enters it again after completing the museum.
6. Ignore clicking during editing
7. Add open and close sounds to doors
8. Add "death" when getting arested by the museum guard
9. Don't allow saving / loading during the appearance animation
-rw-r--r-- | engines/supernova2/rooms.cpp | 9 | ||||
-rw-r--r-- | engines/supernova2/state.cpp | 19 |
2 files changed, 20 insertions, 8 deletions
diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp index 2e594287ce..e9ede99b58 100644 --- a/engines/supernova2/rooms.cpp +++ b/engines/supernova2/rooms.cpp @@ -1394,6 +1394,8 @@ void Checkout::shouting() { } void Checkout::appearance() { + _vm->_allowSaveGame = false; + _vm->_allowLoadGame = false; int xp = 0; CursorMan.showMouse(false); _vm->playSound(kMusicMadMonkeys); @@ -1599,6 +1601,8 @@ void Checkout::appearance() { _vm->_screen->setViewportBrightness(1); _vm->paletteBrightness(); _gm->drawGUI(); + _vm->_allowSaveGame = true; + _vm->_allowLoadGame = true; } City1::City1(Supernova2Engine *vm, GameManager *gm) { @@ -1702,7 +1706,6 @@ void Elevator::onEntrance() { _objectState[5]._type &= ~OPENED; else _objectState[5]._type |= OPENED; - setRoomSeen(true); } void Elevator::animation() { @@ -3970,10 +3973,14 @@ bool Museum::interact(Action verb, Object &obj1, Object &obj2) { _vm->paletteFadeOut(); _vm->_system->fillScreen(kColorBlack); _vm->_screen->setViewportBrightness(255); + _vm->_screen->setGuiBrightness(255); + _vm->_screen->paletteBrightness(); _vm->renderMessage(kStringMuseum13); _gm->waitOnInput(_gm->_messageDuration); _vm->removeMessage(); _vm->_screen->setViewportBrightness(0); + _vm->_screen->setGuiBrightness(0); + _vm->_screen->paletteBrightness(); bool hasDinosaurHead = false; if (_gm->_rooms[MUS_ROUND]->getObject(4)->_type & CARRIED) hasDinosaurHead = true; diff --git a/engines/supernova2/state.cpp b/engines/supernova2/state.cpp index 1652170e9e..9f25e15ec6 100644 --- a/engines/supernova2/state.cpp +++ b/engines/supernova2/state.cpp @@ -37,7 +37,7 @@ bool GameManager::serialize(Common::WriteStream *out) { // GameState out->writeSint16LE(_state._money); - out->writeSint32LE(_state._startTime); + out->writeSint32LE(_state._startTime - g_system->getMillis()); out->writeByte(_state._addressKnown); out->writeByte(_state._poleMagnet); out->writeByte(_state._admission); @@ -55,7 +55,7 @@ bool GameManager::serialize(Common::WriteStream *out) { out->writeByte(_state._pressureCounter); out->writeByte(_state._sirenOn); out->writeSint16LE(_state._pyraDirection); - out->writeUint32LE(_state._eventTime); + out->writeUint32LE(_state._eventTime - g_system->getMillis()); out->writeSint32LE(_state._eventCallback); out->writeByte(_state._taxiPossibility); for (int i = 0; i < 15; i++) { @@ -89,7 +89,7 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) { // GameState _state._money = in->readSint16LE(); - _state._startTime = in->readSint32LE(); + _state._startTime = in->readSint32LE() + g_system->getMillis(); _state._addressKnown = in->readByte(); _state._poleMagnet = in->readByte(); _state._admission = in->readByte(); @@ -107,7 +107,7 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) { _state._pressureCounter = in->readByte(); _state._sirenOn = in->readByte(); _state._pyraDirection = in->readSint16LE(); - _state._eventTime = in->readUint32LE(); + _state._eventTime = in->readUint32LE() + g_system->getMillis(); _state._eventCallback = (EventFunction)in->readSint32LE(); _state._taxiPossibility = in->readByte(); for (int i = 0; i < 15; i++) @@ -524,6 +524,8 @@ void GameManager::initGui() { } void GameManager::updateEvents() { + if (_currentRoom == _rooms[ELEVATOR]) + debug("%d %d", _state._elevatorE, _state._elevatorNumber); handleTime(); if (_animationEnabled && !_vm->_screen->isMessageShown() && _animationTimer == 0) _currentRoom->animation(); @@ -879,6 +881,7 @@ void GameManager::edit(Common::String &input, int x, int y, uint length) { int overdrawWidth = ((int)((length + 1) * (kFontWidth + 2)) > (kScreenWidth - x)) ? kScreenWidth - x : (length + 1) * (kFontWidth + 2); + _guiEnabled = false; while (isEditing) { _vm->_screen->setTextCursorPos(x, y); _vm->_screen->setTextCursorColor(kColorWhite99); @@ -938,6 +941,7 @@ void GameManager::edit(Common::String &input, int x, int y, uint length) { break; } } + _guiEnabled = true; } void GameManager::takeMoney(int amount) { @@ -1496,7 +1500,7 @@ void GameManager::handleInput() { byte i = _inputObject[0]->_click; _inputObject[0]->_click = _inputObject[0]->_click2; _inputObject[0]->_click2 = i; - //_sound->play(kAudioDoorOpen); + _vm->_sound->play(kAudioTaxiOpen); } break; @@ -1515,7 +1519,7 @@ void GameManager::handleInput() { byte i = _inputObject[0]->_click; _inputObject[0]->_click = _inputObject[0]->_click2; _inputObject[0]->_click2 = i; - //_sound->play(kAudioDoorClose); + _vm->_sound->play(kAudioElevator1); } break; @@ -1729,6 +1733,7 @@ void GameManager::taxi() { _vm->renderImage(0); _vm->renderImage(1); _vm->renderImage(6); + _vm->playSound(kAudioSuccess); taxiPayment(14, answer); break; default: @@ -2112,7 +2117,7 @@ void GameManager::caught2() { _state._sirenOn = false; _mapOn = false; _state._haste = false; - //dead(kStringMuseum9); + dead(kStringMuseum9); } void GameManager::drawClock() { |