diff options
Diffstat (limited to 'engines/sci/sci.cpp')
-rw-r--r-- | engines/sci/sci.cpp | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index fc723f18cf..668ad053cc 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -114,6 +114,7 @@ SciEngine::SciEngine(OSystem *syst, const ADGameDescription *desc, SciGameId gam DebugMan.addDebugChannel(kDebugLevelVM, "VM", "VM debugging"); DebugMan.addDebugChannel(kDebugLevelScripts, "Scripts", "Notifies when scripts are unloaded"); DebugMan.addDebugChannel(kDebugLevelScriptPatcher, "ScriptPatcher", "Notifies when scripts are patched"); + DebugMan.addDebugChannel(kDebugLevelWorkarounds, "Workarounds", "Notifies when workarounds are triggered"); DebugMan.addDebugChannel(kDebugLevelGC, "GC", "Garbage Collector debugging"); DebugMan.addDebugChannel(kDebugLevelResMan, "ResMan", "Resource manager debugging"); DebugMan.addDebugChannel(kDebugLevelOnStartup, "OnStartup", "Enter debugger at start of game"); @@ -219,7 +220,7 @@ Common::Error SciEngine::run() { // Add the after market GM patches for the specified game, if they exist _resMan->addNewGMPatch(_gameId); _gameObjectAddress = _resMan->findGameObject(); - + _scriptPatcher = new ScriptPatcher(); SegManager *segMan = new SegManager(_resMan, _scriptPatcher); @@ -281,25 +282,13 @@ Common::Error SciEngine::run() { // Check whether loading a savestate was requested int directSaveSlotLoading = ConfMan.getInt("save_slot"); if (directSaveSlotLoading >= 0) { - // call GameObject::play (like normally) - initStackBaseWithSelector(SELECTOR(play)); - // We set this, so that the game automatically quit right after init - _gamestate->variables[VAR_GLOBAL][4] = TRUE_REG; + _gamestate->_delayedRestoreGame = true; + _gamestate->_delayedRestoreGameId = directSaveSlotLoading; // Jones only initializes its menus when restarting/restoring, thus set // the gameIsRestarting flag here before initializing. Fixes bug #6536. if (g_sci->getGameId() == GID_JONES) _gamestate->gameIsRestarting = GAMEISRESTARTING_RESTORE; - - _gamestate->_executionStackPosChanged = false; - run_vm(_gamestate); - - // As soon as we get control again, actually restore the game - reg_t restoreArgv[2] = { NULL_REG, make_reg(0, directSaveSlotLoading) }; // special call (argv[0] is NULL) - kRestoreGame(_gamestate, 2, restoreArgv); - - // this indirectly calls GameObject::init, which will setup menu, text font/color codes etc. - // without this games would be pretty badly broken } // Show any special warnings for buggy scripts with severe game bugs, @@ -896,7 +885,7 @@ void SciEngine::syncSoundSettings() { bool SciEngine::speechAndSubtitlesEnabled() { bool subtitlesOn = ConfMan.getBool("subtitles"); bool speechOn = !ConfMan.getBool("speech_mute"); - + if (isCD() && subtitlesOn && speechOn) return true; return false; @@ -936,7 +925,7 @@ void SciEngine::updateScummVMAudioOptions() { // depending on the in-game settings if (isCD() && getSciVersion() == SCI_VERSION_1_1) { uint16 ingameSetting = _gamestate->variables[VAR_GLOBAL][90].getOffset(); - + switch (ingameSetting) { case 1: // subtitles |