aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsluicebox2019-03-08 17:14:00 -0800
committersluicebox2019-03-08 17:14:00 -0800
commit949b9a0d91cb41c19cfc8223c7799c9d44582c63 (patch)
tree37e09d1322b1fd83c3727bf34b39d74aac4b0560
parent57218bb38dfd9804866927b73a71f55059469d10 (diff)
downloadscummvm-rg350-949b9a0d91cb41c19cfc8223c7799c9d44582c63.tar.gz
scummvm-rg350-949b9a0d91cb41c19cfc8223c7799c9d44582c63.tar.bz2
scummvm-rg350-949b9a0d91cb41c19cfc8223c7799c9d44582c63.zip
SCI: Fix SQ4 kernel signature mismatch on Estros
-rw-r--r--engines/sci/engine/workarounds.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index 6fc356a794..08b1234483 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -810,6 +810,18 @@ static const uint16 sig_kGraphRedrawBox_sq4_1[] = {
SIG_END
};
+// Game: Space Quest 4
+// Calling method: shootEgoScript::changeState
+// Subroutine offset: English/German/French/Russian PC floppy, Japanese PC-9801: 0x0f8c, English PC CD: 0x0c4d (script 703)
+// Applies to at least: English/German/French/Russian PC floppy, English PC CD, Japanese PC-9801
+static const uint16 sig_kGraphRedrawBox_sq4_2[] = {
+ 0x3f, 0x03, // link 03
+ 0x39, SIG_ADDTOOFFSET(+1), // pushi [ number ]
+ 0x78, // push1
+ 0x39, 0x69, // pushi 69h
+ SIG_END
+};
+
// gameID, room,script,lvl, object-name, method-name, local-call-signature, index-range, workaround
const SciWorkaroundEntry kGraphRedrawBox_workarounds[] = {
{ GID_SQ4, 405, 405, 0, "swimAfterEgo", "changeState", NULL, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // skateOrama when "swimming" in the air - accidental additional parameter specified
@@ -823,6 +835,8 @@ const SciWorkaroundEntry kGraphRedrawBox_workarounds[] = {
{ GID_SQ4, 411, 411, 0, "", "changeState", NULL, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // skateOrama when "swimming" in the air... Russian version - bug #5573
{ GID_SQ4, 150, 150, 0, "laserScript", "changeState", sig_kGraphRedrawBox_sq4_1, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // when visiting the pedestral where Roger Jr. is trapped, before trashing the brain icon in the programming chapter, accidental additional parameter specified - bug #5479, German - bug #5527
{ GID_SQ4, 150, 150, 0, "", "changeState", sig_kGraphRedrawBox_sq4_1, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // same as above, for the Russian version - bug #5573
+ { GID_SQ4, -1, 703, 0, "shootEgoScript", "changeState", sig_kGraphRedrawBox_sq4_2, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // estros when getting shot by the police - accidental additional parameter specified
+ { GID_SQ4, -1, 703, 0, "", "changeState", sig_kGraphRedrawBox_sq4_2, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // same as above, for the Russian version
{ GID_SQ4, -1, 704, 0, "shootEgo", "changeState", NULL, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // When shot by Droid in Super Computer Maze (Rooms 500, 505, 510...) - accidental additional parameter specified
{ GID_KQ5, -1, 981, 0, "myWindow", "dispose", NULL, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // Happens in the floppy version, when closing any dialog box, accidental additional parameter specified - bug #5031
{ GID_KQ5, -1, 995, 0, "invW", "doit", NULL, 0, 0, { WORKAROUND_STILLCALL, 0 } }, // Happens in the floppy version, when closing the inventory window, accidental additional parameter specified