aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-06-18 21:35:55 +0200
committerThierry Crozat2019-07-28 15:09:14 +0100
commitd09b286054d60e5e26d8339467e721662d381f53 (patch)
tree3ece004e2e3a46068a492475eda4c7f8dbaee34d
parent83e05ea13f61fdd5d582115c8c2bbd246f70983c (diff)
downloadscummvm-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.cpp9
-rw-r--r--engines/supernova2/state.cpp19
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() {