diff options
author | sluicebox | 2018-12-17 05:08:53 -0800 |
---|---|---|
committer | Filippos Karapetis | 2018-12-17 15:08:53 +0200 |
commit | 074177cc159da9c8f0b751732e463e7ed409196d (patch) | |
tree | ee1605bca172af186d8284c8aaebf7718bbf0446 | |
parent | 9de73859ff7b22b79f77104aa18a6ee5fe499b7d (diff) | |
download | scummvm-rg350-074177cc159da9c8f0b751732e463e7ed409196d.tar.gz scummvm-rg350-074177cc159da9c8f0b751732e463e7ed409196d.tar.bz2 scummvm-rg350-074177cc159da9c8f0b751732e463e7ed409196d.zip |
SCI32: Simplify GK1 ego speed script patch (#1450)
-rw-r--r-- | engines/sci/engine/script_patches.cpp | 80 |
1 files changed, 13 insertions, 67 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index d58236b89d..ecc835444b 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -1810,80 +1810,27 @@ static const uint16 gk1Day5SnakeAttackPatch2[] = { // something that does call normalize. // // We fix this by calling GKEgo:normalize after Gabriel finishes walking -// through the door in sGabeEnters:changeState(5). This requires overwriting -// the instructions in state 4 which set GKEgo:ignoreActors to 0 but that's -// okay because normalize does that. -// -// There are two versions of this patch due to two significantly different -// versions of this script. The first is in english pc floppy prior to -// Sierra's 1.0b patch and the second is in cd and localized floppies. The -// script was restructured and the compiler used different sized instructions. +// through the door in sGabeEnters:changeState(4). This replaces setting +// GKEgo:ignoreActors to 0 but that's okay because normalize does that. // // Applies to: All PC Floppy and CD versions. TODO: Test Mac, should apply -// Responsible method: sGabeEnters:changeState +// Responsible method: sGabeEnters:changeState(4) // Fixes bug #10780 -static const uint16 gk1PoliceEgoSpeedFixV1Signature[] = { - 0x31, 0x1f, // bnt 1f [ state 5 ] - SIG_ADDTOOFFSET(+19), - 0x38, SIG_SELECTOR16(ignoreActors), // pushi ignoreActors +static const uint16 gk1PoliceEgoSpeedFixSignature[] = { + 0x38, SIG_MAGICDWORD, // pushi ignoreActors + SIG_SELECTOR16(ignoreActors), 0x78, // push1 0x76, // push0 - 0x81, 0x00, // lag 0 - 0x4a, SIG_UINT16(0x000c), // send c [ GKEgo:setPri: -1, ignoreActors: 0 ] - 0x33, 0x45, // jmp 45 [ end of method ] - SIG_MAGICDWORD, - 0x3c, // dup - 0x35, 0x05, // ldi 5 - 0x1a, // eq? - 0x31, 0x3f, // bnt 3f [ end of method ] + 0x81, 0x00, // lag 00 + 0x4a, SIG_UINT16(0x000c), // send c [ GKEgo: ..., ignoreActors: 0 ] SIG_END }; -static const uint16 gk1PoliceEgoSpeedFixV1Patch[] = { - 0x31, 0x1b, // bnt 1b [ state 5 ] - SIG_ADDTOOFFSET(+19), - 0x81, 0x00, // lag 0 - 0x4a, PATCH_UINT16(0x0006), // send 6 [ GKEgo:setPri: -1 ] - 0x3a, // toss - 0x48, // ret - 0x33, 0x00, // jmp 0 [ waste 2 bytes ] +static const uint16 gk1PoliceEgoSpeedFixPatch[] = { 0x38, PATCH_SELECTOR16(normalize), // pushi normalize - 0x76, // push0 - 0x81, 0x00, // lag 0 - 0x4a, PATCH_UINT16(0x0004), // send 4 [ GKEgo:normalize ] - PATCH_END -}; - -// cd / localized floppy / floppy 1.0b version of the above signature/patch -static const uint16 gk1PoliceEgoSpeedFixV2Signature[] = { - 0x31, 0x27, // bnt 27 [ state 5 ] - SIG_ADDTOOFFSET(+26), - 0x38, SIG_SELECTOR16(ignoreActors), // pushi ignoreActors - 0x78, // push1 - 0x76, // push0 - 0x81, 0x00, // lag 0 - 0x4a, SIG_UINT16(0x000c), // send c [ GKEgo:setPri: -1, ignoreActors: 0 ] - 0x32, SIG_UINT16(0x004c), // jmp 004c [ end of method ] - SIG_MAGICDWORD, - 0x3c, // dup - 0x35, 0x05, // ldi 5 - 0x1a, // eq? - 0x31, 0x46, // bnt 46 [ end of method ] - SIG_END -}; - -static const uint16 gk1PoliceEgoSpeedFixV2Patch[] = { - 0x31, 0x24, // bnt 24 [ state 5 ] - SIG_ADDTOOFFSET(+26), - 0x81, 0x00, // lag 0 - 0x4a, PATCH_UINT16(0x0006), // send 6 [ GKEgo:setPri: -1 ] - 0x3a, // toss - 0x48, // ret - 0x32, PATCH_UINT16(0x0000), // jmp 0 [ waste 3 bytes ] - 0x38, PATCH_SELECTOR16(normalize), // pushi 0300 [ normalize ] - 0x76, // push0 - 0x81, 0x00, // lag 0 - 0x4a, PATCH_UINT16(0x0004), // send 4 [ GKEgo:normalize ] + 0x39, 0x00, // pushi 00 + 0x81, 0x00, // lag 00 + 0x4a, PATCH_UINT16(0x000a), // send a [ GKEgo: ..., normalize ] PATCH_END }; @@ -2176,8 +2123,7 @@ static const SciScriptPatcherEntry gk1Signatures[] = { { true, 230, "fix day 6 police beignet timer issue (1/2)", 1, gk1Day6PoliceBeignetSignature1, gk1Day6PoliceBeignetPatch1 }, { true, 230, "fix day 6 police beignet timer issue (2/2)", 1, gk1Day6PoliceBeignetSignature2, gk1Day6PoliceBeignetPatch2 }, { true, 230, "fix day 6 police sleep timer issue", 1, gk1Day6PoliceSleepSignature, gk1Day6PoliceSleepPatch }, - { true, 230, "fix police station ego speed (version 1)", 1, gk1PoliceEgoSpeedFixV1Signature, gk1PoliceEgoSpeedFixV1Patch }, - { true, 230, "fix police station ego speed (version 2)", 1, gk1PoliceEgoSpeedFixV2Signature, gk1PoliceEgoSpeedFixV2Patch }, + { true, 230, "fix police station ego speed", 1, gk1PoliceEgoSpeedFixSignature, gk1PoliceEgoSpeedFixPatch }, { true, 240, "fix day 5 mosely veve missing points", 1, gk1Day5MoselyVevePointsSignature, gk1Day5MoselyVevePointsPatch }, { true, 250, "fix ego speed when exiting drug store", 1, gk1DrugStoreEgoSpeedFixSignature, gk1DrugStoreEgoSpeedFixPatch }, { true, 260, "fix day 5 snake attack (1/2)", 1, gk1Day5SnakeAttackSignature1, gk1Day5SnakeAttackPatch1 }, |