diff options
-rw-r--r-- | engines/sci/engine/seg_manager.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp index 43e572d071..1cbe9a56f4 100644 --- a/engines/sci/engine/seg_manager.cpp +++ b/engines/sci/engine/seg_manager.cpp @@ -1070,10 +1070,15 @@ void SegManager::uninstantiateScriptSci0(int script_nr) { if (scr->getLockers()) scr->decrementLockers(); // Decrease lockers if this is us ourselves } else { - // Uninstantiate superclass, but never uninstantiate - // system scripts, i.e. script 0 and scripts 900-999 - bug #3038837 - if (superclass_script != 0 && superclass_script < 900) + if (g_sci->getGameId() == GID_HOYLE3 && (superclass_script == 0 || superclass_script >= 990)) { + // HACK for Hoyle 3: when exiting Checkers or Pachisi, scripts 0, 999 and some others + // are deleted but are never instantiated again. We ignore deletion of these scripts + // here for Hoyle 3 - bug #3038837 + // TODO/FIXME: find out why this happens, seems like there is a problem with the object + // lock code + } else { uninstantiateScript(superclass_script); + } } // Recurse to assure that the superclass lockers number gets decreased } |