aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/savegame.cpp1
-rw-r--r--engines/sci/engine/vm.cpp4
-rw-r--r--engines/sci/sci.cpp3
3 files changed, 4 insertions, 4 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp
index 5690969065..c080120d7b 100644
--- a/engines/sci/engine/savegame.cpp
+++ b/engines/sci/engine/savegame.cpp
@@ -805,7 +805,6 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) {
s->_msgState = new MessageState(s->_segMan);
s->abortScriptProcessing = kAbortLoadGame;
- s->shrinkStackToBase();
}
bool get_savegame_metadata(Common::SeekableReadStream *stream, SavegameMetadata *meta) {
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index ada6d8ed92..61cc4c429a 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -934,9 +934,7 @@ void run_vm(EngineState *s) {
if (!local_script)
error("run_vm(): program counter gone astray (local_script pointer is null)");
- // TODO: Revise this
- if (s->abortScriptProcessing != kAbortLoadGame)
- s->executionStackBase = s->_executionStack.size() - 1;
+ s->executionStackBase = s->_executionStack.size() - 1;
s->variablesSegment[VAR_TEMP] = s->variablesSegment[VAR_PARAM] = s->_segMan->findSegmentByType(SEG_TYPE_STACK);
s->variablesBase[VAR_TEMP] = s->variablesBase[VAR_PARAM] = s->stack_base;
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index 16984639af..2dfcf076ab 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -414,13 +414,16 @@ void SciEngine::runGame() {
exitGame();
if (_gamestate->abortScriptProcessing == kAbortRestartGame) {
+ _gamestate->abortScriptProcessing = kAbortNone;
_gamestate->_segMan->resetSegMan();
initGame();
initStackBaseWithSelector(SELECTOR(play));
_gamestate->gameWasRestarted = true;
} else if (_gamestate->abortScriptProcessing == kAbortLoadGame) {
_gamestate->abortScriptProcessing = kAbortNone;
+ _gamestate->_executionStack.clear();
initStackBaseWithSelector(SELECTOR(replay));
+ _gamestate->shrinkStackToBase();
} else {
break; // exit loop
}