diff options
author | Torbjörn Andersson | 2007-12-16 00:41:30 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2007-12-16 00:41:30 +0000 |
commit | 35e8a6651864dd8dc6c4607b0aefa32a571f29be (patch) | |
tree | f4750516a542ddfb035ecbe587e2e53f95dcc611 | |
parent | 01b6e025ffa455507514d7fbf065d0cc4ba0a4c6 (diff) | |
download | scummvm-rg350-35e8a6651864dd8dc6c4607b0aefa32a571f29be.tar.gz scummvm-rg350-35e8a6651864dd8dc6c4607b0aefa32a571f29be.tar.bz2 scummvm-rg350-35e8a6651864dd8dc6c4607b0aefa32a571f29be.zip |
Workaround for bug #1487382 ("SWORD2: Game freezes"). It appears to be a script
bug.
svn-id: r29866
-rw-r--r-- | engines/sword2/interpreter.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/engines/sword2/interpreter.cpp b/engines/sword2/interpreter.cpp index d3f202211d..17b7cbe92f 100644 --- a/engines/sword2/interpreter.cpp +++ b/engines/sword2/interpreter.cpp @@ -312,6 +312,7 @@ int Logic::runScript2(byte *scriptData, byte *objectData, byte *offsetPtr) { bool checkMopBug = false; bool checkPyramidBug = false; bool checkElevatorBug = false; + bool checkPearlBug = false; if (scriptNumber == 2) { if (strcmp((char *)header.name, "mop_73") == 0) @@ -320,6 +321,8 @@ int Logic::runScript2(byte *scriptData, byte *objectData, byte *offsetPtr) { checkPyramidBug = true; else if (strcmp((char *)header.name, "lift_82") == 0) checkElevatorBug = true; + else if (strcmp((char *)header.name, "pearl_31") == 0) + checkPearlBug = true; } code += noScripts * 4; @@ -633,6 +636,15 @@ int Logic::runScript2(byte *scriptData, byte *objectData, byte *offsetPtr) { // Continue as normal break; case IR_TERMINATE: + if (checkPearlBug && readVar(1290) == 0) { + // Pearl's interaction script will wait + // until global(1290) is no longer 0 + // before doing anything. But if the + // script was terminated prematurely, + // that never happens. + warning("Working around Pearl bug: Resetting Pearl's state"); + writeVar(1290, 1); + } // Return without updating the offset return 2; case IR_REPEAT: |