diff options
-rw-r--r-- | engines/sci/engine/seg_manager.cpp | 2 | ||||
-rw-r--r-- | engines/sci/engine/vm.cpp | 5 | ||||
-rw-r--r-- | engines/sci/graphics/animate.cpp | 5 |
3 files changed, 11 insertions, 1 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp index e011de67d9..d356c9a3fc 100644 --- a/engines/sci/engine/seg_manager.cpp +++ b/engines/sci/engine/seg_manager.cpp @@ -454,7 +454,7 @@ byte *SegManager::getHunkPointer(reg_t addr) { HunkTable *ht = (HunkTable *)getSegment(addr.segment, SEG_TYPE_HUNK); if (!ht || !ht->isValidEntry(addr.offset)) { - warning("getHunkPointer() with invalid handle %04x:%04x", PRINT_REG(addr)); + error("getHunkPointer() with invalid handle %04x:%04x", PRINT_REG(addr)); return NULL; } diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index 068259224d..f54cddc253 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -1226,6 +1226,11 @@ void run_vm(EngineState *s, bool restoring) { xs_new = &(s->_executionStack.back()); s->_executionStackPosChanged = true; + + // If a game is being loaded, stop processing + if (s->abortScriptProcessing != kAbortNone || g_engine->shouldQuit()) + return; // Stop processing + break; } diff --git a/engines/sci/graphics/animate.cpp b/engines/sci/graphics/animate.cpp index 9018a6f62e..08ff3bfc80 100644 --- a/engines/sci/graphics/animate.cpp +++ b/engines/sci/graphics/animate.cpp @@ -98,6 +98,11 @@ bool GfxAnimate::invoke(List *list, int argc, reg_t *argv) { if (!(signal & kSignalFrozen)) { // Call .doit method of that object invokeSelector(_s, curObject, SELECTOR(doit), argc, argv, 0); + + // If a game is being loaded, stop processing + if (_s->abortScriptProcessing != kAbortNone || g_engine->shouldQuit()) + return true; // Stop processing + // Lookup node again, since the nodetable it was in may have been reallocated curNode = _s->_segMan->lookupNode(curAddress); } |