SCI: immediate restore now uses delayed restore

instead of the old hackish method
This commit is contained in:
Martin Kiewitz 2015-04-27 18:21:41 +02:00
parent 031b9b8ced
commit 139bdec3ba

View file

@ -282,25 +282,13 @@ Common::Error SciEngine::run() {
// Check whether loading a savestate was requested // Check whether loading a savestate was requested
int directSaveSlotLoading = ConfMan.getInt("save_slot"); int directSaveSlotLoading = ConfMan.getInt("save_slot");
if (directSaveSlotLoading >= 0) { if (directSaveSlotLoading >= 0) {
// call GameObject::play (like normally) _gamestate->_delayedRestoreGame = true;
initStackBaseWithSelector(SELECTOR(play)); _gamestate->_delayedRestoreGameId = directSaveSlotLoading;
// We set this, so that the game automatically quit right after init
_gamestate->variables[VAR_GLOBAL][4] = TRUE_REG;
// Jones only initializes its menus when restarting/restoring, thus set // Jones only initializes its menus when restarting/restoring, thus set
// the gameIsRestarting flag here before initializing. Fixes bug #6536. // the gameIsRestarting flag here before initializing. Fixes bug #6536.
if (g_sci->getGameId() == GID_JONES) if (g_sci->getGameId() == GID_JONES)
_gamestate->gameIsRestarting = GAMEISRESTARTING_RESTORE; _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, // Show any special warnings for buggy scripts with severe game bugs,