aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorColin Snover2016-10-01 14:05:31 -0500
committerColin Snover2016-10-01 14:07:26 -0500
commit7d77a712d384e050a3b5a6eadc95af794a7e43a0 (patch)
treea4908a2fb35cc43ae667fb4d69efbd9ccbce6cdd /engines/sci
parent50753f292a1af45b05871962168a1503e5e03ab7 (diff)
downloadscummvm-rg350-7d77a712d384e050a3b5a6eadc95af794a7e43a0.tar.gz
scummvm-rg350-7d77a712d384e050a3b5a6eadc95af794a7e43a0.tar.bz2
scummvm-rg350-7d77a712d384e050a3b5a6eadc95af794a7e43a0.zip
SCI32: Fix interrogation screen crash in GK1
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/engine/script_patches.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index c7f2e08bc8..e643a0480d 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -995,8 +995,32 @@ static const uint16 gk1PatchDay10GabrielDressUp[] = {
PATCH_END
};
+// GK1 initializes the global interrogation array with an int16 array, which
+// happens to work in SSCI because object references are int16s, but in ScummVM
+// object references are reg_ts, so this array needs to be created as an IDArray
+// instead
+static const uint16 gk1SignatureInterrogationArray1[] = {
+ 0x38, SIG_SELECTOR16(new), // pushi new
+ 0x78, // push1
+ SIG_MAGICDWORD,
+ 0x39, 0x0f, // pushi 15
+ 0x51, 0x0a, // class IntArray
+ SIG_END
+};
+
+static const uint16 gk1PatchInterrogationArray1[] = {
+ PATCH_ADDTOOFFSET(+3), // pushi new
+ PATCH_ADDTOOFFSET(+1), // push1
+ PATCH_ADDTOOFFSET(+2), // pushi 15
+ 0x51, 0x0b, // class IDArray
+ PATCH_END
+};
+
// script, description, signature patch
static const SciScriptPatcherEntry gk1Signatures[] = {
+ { true, 10, "fix interrogation array type 1/3", 1, gk1SignatureInterrogationArray1, gk1PatchInterrogationArray1 },
+ { true, 50, "fix interrogation array type 2/3", 1, gk1SignatureInterrogationArray1, gk1PatchInterrogationArray1 },
+ { true, 93, "fix interrogation array type 3/3", 1, gk1SignatureInterrogationArray1, gk1PatchInterrogationArray1 },
{ true, 51, "interrogation bug", 1, gk1SignatureInterrogationBug, gk1PatchInterrogationBug },
{ true, 212, "day 5 drum book dialogue error", 1, gk1SignatureDay5DrumBookDialogue, gk1PatchDay5DrumBookDialogue },
{ true, 212, "day 5 phone freeze", 1, gk1SignatureDay5PhoneFreeze, gk1PatchDay5PhoneFreeze },