diff options
author | Martin Kiewitz | 2016-03-02 19:34:40 +0100 |
---|---|---|
committer | Martin Kiewitz | 2016-03-02 19:34:40 +0100 |
commit | 858859294733f080ea2902469dfd392635464a21 (patch) | |
tree | ac477dbf5ac91c3fc66fc30680b7b8e64634d84a /engines/sci | |
parent | 7ee2af41984500ac580a904a15be498e625cf5c3 (diff) | |
download | scummvm-rg350-858859294733f080ea2902469dfd392635464a21.tar.gz scummvm-rg350-858859294733f080ea2902469dfd392635464a21.tar.bz2 scummvm-rg350-858859294733f080ea2902469dfd392635464a21.zip |
SCI32: Don't do a syncWithScripts on restore from launcher
Causes issues in at least gk1 (option + inventory plane are shown)
Game::restore is not called, when doing restores from launcher,
so in the original interpreter this script code wasn't called
either.
Fixes option + inventory planes etc. being shown right after
restoring via launcher, when original save/load dialogs were
disabled.
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/savegame.cpp | 11 | ||||
-rw-r--r-- | engines/sci/engine/state.cpp | 1 | ||||
-rw-r--r-- | engines/sci/engine/state.h | 1 | ||||
-rw-r--r-- | engines/sci/sci.cpp | 1 |
4 files changed, 12 insertions, 2 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 18cee3321f..ae7ab431f8 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -1081,8 +1081,13 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) { // We MUST NOT delete all planes/screen items. At least Space Quest 6 has a few in memory like for example // the options plane, which are not re-added and are in memory all the time right from the start of the // game. Sierra SCI32 did not clear planes, only scripts cleared the ones inside planes::elements. - if (getSciVersion() >= SCI_VERSION_2) - g_sci->_gfxFrameout->syncWithScripts(false); + if (getSciVersion() >= SCI_VERSION_2) { + if (!s->_delayedRestoreFromLauncher) { + // Only do it, when we are restoring regulary and not from launcher + // As it could result in option planes etc. on the screen (happens in gk1) + g_sci->_gfxFrameout->syncWithScripts(false); + } + } #endif s->reset(true); @@ -1131,6 +1136,8 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) { // signal restored game to game scripts s->gameIsRestarting = GAMEISRESTARTING_RESTORE; + + s->_delayedRestoreFromLauncher = false; } bool get_savegame_metadata(Common::SeekableReadStream *stream, SavegameMetadata *meta) { diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp index d53e6b48c8..fda78317b5 100644 --- a/engines/sci/engine/state.cpp +++ b/engines/sci/engine/state.cpp @@ -95,6 +95,7 @@ void EngineState::reset(bool isRestoring) { // reset delayed restore game functionality _delayedRestoreGame = false; _delayedRestoreGameId = 0; + _delayedRestoreFromLauncher = false; executionStackBase = 0; _executionStackPosChanged = false; diff --git a/engines/sci/engine/state.h b/engines/sci/engine/state.h index 0f04e32fe5..6efc56e40f 100644 --- a/engines/sci/engine/state.h +++ b/engines/sci/engine/state.h @@ -138,6 +138,7 @@ public: // see detection.cpp / SciEngine::loadGameState() bool _delayedRestoreGame; // boolean, that triggers delayed restore (triggered by ScummVM menu) int _delayedRestoreGameId; // the saved game id, that it supposed to get restored (triggered by ScummVM menu) + bool _delayedRestoreFromLauncher; // is set, when the the delayed restore game was triggered from launcher uint _chosenQfGImportItem; // Remembers the item selected in QfG import rooms diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index 6d36fabde9..52188db0fb 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -316,6 +316,7 @@ Common::Error SciEngine::run() { if (directSaveSlotLoading >= 0) { _gamestate->_delayedRestoreGame = true; _gamestate->_delayedRestoreGameId = directSaveSlotLoading; + _gamestate->_delayedRestoreFromLauncher = true; // Jones only initializes its menus when restarting/restoring, thus set // the gameIsRestarting flag here before initializing. Fixes bug #6536. |