aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMartin Kiewitz2015-04-19 17:24:27 +0200
committerMartin Kiewitz2015-04-19 17:24:27 +0200
commitb8838d9bffa3cb4ff2a8ded41311dbae6cfde968 (patch)
tree3978774c92b869b5637b0912a509ba83f07123b6 /engines
parent76fa1a0c6fa38339e28450581bf8562bb4840d40 (diff)
downloadscummvm-rg350-b8838d9bffa3cb4ff2a8ded41311dbae6cfde968.tar.gz
scummvm-rg350-b8838d9bffa3cb4ff2a8ded41311dbae6cfde968.tar.bz2
scummvm-rg350-b8838d9bffa3cb4ff2a8ded41311dbae6cfde968.zip
SCI: workaround sig Conquests of Camelot migrated
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/workarounds.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp
index b591ea2b79..9fb40c54a4 100644
--- a/engines/sci/engine/workarounds.cpp
+++ b/engines/sci/engine/workarounds.cpp
@@ -39,6 +39,20 @@ namespace Sci {
// Those signatures are just like the script patcher signatures (for further study: engine\script_patches.cpp)
// However you may NOT use command SIG_SELECTOR8 nor SIG_SELECTOR16 atm. Proper support for those may be added later.
+// Game: Conquests of Camelot
+// Calling method: endingCartoon2::changeState
+// Subroutine offset: English 0x020d (script 92)
+// Applies to at least: English PC floppy
+static const uint16 sig_arithmetic_camelot_1[] = {
+ 0x83, 0x32, // lal local[32h]
+ 0x30, SIG_UINT16(0x001d), // bnt [...]
+ 0x7a, // push2
+ 0x39, 0x08, // pushi 08
+ 0x36, // push
+ 0x43, // callk Graph
+ SIG_END
+};
+
// Game: Eco Quest 2
// Calling method: Rain::points
// Subroutine offset: English 0x0cc6, French/Spanish 0x0ce0 (script 0)
@@ -60,7 +74,7 @@ static const uint16 sig_arithmetic_ecoq2_1[] = {
// gameID, room,script,lvl, object-name, method-name, call, callSig, index, workaround
const SciWorkaroundEntry arithmeticWorkarounds[] = {
- { GID_CAMELOT, 92, 92, 0, "endingCartoon2", "changeState", 0x20d, NULL, 0, { WORKAROUND_FAKE, 0 } }, // op_lai: during the ending, sub gets called with no parameters, uses parameter 1 which is theGrail in this case - bug #5237
+ { GID_CAMELOT, 92, 92, 0, "endingCartoon2", "changeState",-1,sig_arithmetic_camelot_1, 0, { WORKAROUND_FAKE, 0 } }, // op_lai: during the ending, sub gets called with no parameters, uses parameter 1 which is theGrail in this case - bug #5237
{ GID_ECOQUEST2, 100, 0, 0, "Rain", "points", -1, sig_arithmetic_ecoq2_1, 0, { WORKAROUND_FAKE, 0 } }, // op_or: when giving the papers to the customs officer, gets called against a pointer instead of a number - bug #4939, Spanish version - bug #5750
{ GID_FANMADE, 516, 983, 0, "Wander", "setTarget", -1, NULL, 0, { WORKAROUND_FAKE, 0 } }, // op_mul: The Legend of the Lost Jewel Demo (fan made): called with object as second parameter when attacked by insects - bug #5124
{ GID_GK1, 800,64992, 0, "Fwd", "doit", -1, NULL, 0, { WORKAROUND_FAKE, 1 } }, // op_gt: when Mosely finds Gabriel and Grace near the end of the game, compares the Grooper object with 7
@@ -79,7 +93,7 @@ const SciWorkaroundEntry arithmeticWorkarounds[] = {
// Game: Conquests of the Longbow
// Calling method: letter::handleEvent
-// Subroutine offset: English 0x00a8 (script 213)
+// Subroutine offset: English PC/Amiga 0x00a8 (script 213)
// Applies to at least: English PC floppy, English Amiga floppy
static const uint16 sig_uninitread_longbow_1[] = {
0x3f, 0x02, // link 02