diff options
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/script.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index 1382df36a2..b6b9fe81d4 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -588,8 +588,20 @@ void Script::initialiseObjectsSci0(SegManager *segMan, SegmentId segmentId) { if (pass == 2) { if (!obj->initBaseObject(segMan, addr)) { - error("Failed to locate base object for object at %04X:%04X", PRINT_REG(addr)); - //scriptObjRemove(addr); + if ((_nr == 202 || _nr == 764) && g_sci->getGameId() == GID_KQ5) { + // WORKAROUND: Script 202 of KQ5 French and German + // (perhaps Spanish too?) has an invalid object. + // This is non-fatal. Refer to bugs #3035396 and + // #3150767. + // Same happens with script 764, it seems to + // contain junk towards its end. + if (getSciVersion() < SCI_VERSION_1_1) + addr.offset += 8; + + _objects.erase(addr.toUint16()); + } else { + error("Failed to locate base object for object at %04X:%04X", PRINT_REG(addr)); + } } } } |