diff --git a/engines/gob/game_v1.cpp b/engines/gob/game_v1.cpp index f038c7edc3a..1a530fa4f62 100644 --- a/engines/gob/game_v1.cpp +++ b/engines/gob/game_v1.cpp @@ -242,7 +242,8 @@ void Game_v1::playTot(int16 skipPlay) { _vm->_inter->_breakFromLevel = oldBreakFrom; _vm->_scenery->_pCaptureCounter = oldCaptureCounter; - _script->pop(); + if (_script->isLoaded()) + _script->pop(); } void Game_v1::clearCollisions() { diff --git a/engines/gob/game_v2.cpp b/engines/gob/game_v2.cpp index ace842f18ee..e170a1c9d00 100644 --- a/engines/gob/game_v2.cpp +++ b/engines/gob/game_v2.cpp @@ -293,7 +293,8 @@ void Game_v2::playTot(int16 skipPlay) { _vm->_inter->_breakFromLevel = oldBreakFrom; _vm->_scenery->_pCaptureCounter = oldCaptureCounter; - _script->pop(); + if (_script->isLoaded()) + _script->pop(); } void Game_v2::clearCollisions() { diff --git a/engines/gob/script.cpp b/engines/gob/script.cpp index 7ed27771f37..0ac9d26a9b3 100644 --- a/engines/gob/script.cpp +++ b/engines/gob/script.cpp @@ -343,6 +343,9 @@ void Script::unloadTOT() { if (_lomHandle >= 0) _vm->_dataIO->closeData(_lomHandle); + while (!_callStack.empty()) + pop(); + delete[] _totData; _totData = 0;