diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index ab1f6b464eb..107fe18ab8a 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -1465,6 +1465,61 @@ static const uint16 gk1HonfourUnlockDoorPatch[] = { PATCH_END }; +// GK1 english pc floppy locks up on day 2 when using the binoculars to view +// room 410 when the artist's drawing blows away. This is particularly bad +// because when using the binoculars you can't use the mouse to access the +// control panel to restore. +// +// We fix this as Sierra did in later versions by not allowing the drawing to +// blow away when viewing through binoculars. To make room for this patch +// we remove initializing juggler:cycleSpeed to 6 as this is redundant. +// juggler is a Prop and Prop:cycleSpeed's initial value is 6. +// +// Applies to: English PC Floppy +// Responsible method: neJackson:init +// Fixes bug #10797 +static const uint16 gk1Day2BinocularsLockupSignature[] = { + SIG_MAGICDWORD, + 0x30, SIG_UINT16(0x01d6), // bnt 01d6 [ english pc floppy 1.0 only ] + 0x38, SIG_SELECTOR16(init), // pushi init + 0x76, // push0 + 0x38, SIG_SELECTOR16(cycleSpeed), // pushi cycleSpeed + 0x78, // push1 + 0x39, 0x06, // pushi 06 + 0x38, SIG_SELECTOR16(setCycle), // pushi setCycle + 0x78, // push1 + 0x51, 0x15, // class Fwd + 0x36, // push + 0x72, SIG_UINT16(0x02b0), // lofsa juggler + 0x4a, SIG_UINT16(0x0010), // send 10 [ juggler: init, cycleSpeed: 6, setCycle: Fwd ] + 0x38, SIG_SELECTOR16(init), // pushi init + 0x76, // push0 + 0x72, SIG_UINT16(0x0538), // lofsa easel + 0x4a, SIG_UINT16(0x0004), // send 4 [ easel: init ] + SIG_END +}; + +static const uint16 gk1Day2BinocularsLockupPatch[] = { + PATCH_ADDTOOFFSET(+6), + 0x3c, // dup + 0x76, // push0 + 0x38, PATCH_SELECTOR16(setCycle), // pushi setCycle + 0x78, // push1 + 0x51, 0x15, // class Fwd + 0x36, // push + 0x72, PATCH_UINT16(0x02b0), // lofsa juggler + 0x4a, PATCH_UINT16(0x000a), // send a [ juggler: init, setCycle Fwd ] + 0x76, // push0 + 0x72, PATCH_UINT16(0x0538), // lofsa easel + 0x4a, PATCH_UINT16(0x0004), // send 4 [ easel: init ] + + 0x89, 0x0c, // lsg 0c [ previous room ] + 0x34, PATCH_UINT16(0x0190), // ldi 0190 [ overlook ] + 0x1c, // ne? + 0x31, 0x09, // bnt 09 [ drawing doesn't blow away ] + PATCH_END +}; + // GK1 english pc floppy has a missing-points bug on day 5 in room 240. // Showing Mosely the veve sketch and Hartridge's notes awards 2 points // but not if you show the notes before the veve. @@ -1832,6 +1887,7 @@ static const SciScriptPatcherEntry gk1Signatures[] = { { true, 280, "fix pathfinding in Madame Cazanoux's house", 1, gk1CazanouxPathfindingSignature, gk1CazanouxPathfindingPatch }, { true, 290, "fix magentia missing message", 1, gk1ShowMagentiaItemSignature, gk1ShowMagentiaItemPatch }, { true, 380, "fix ego flicker in Gran's chair", 1, gk1GranChairFlickerSignature, gk1GranChairFlickerPatch }, + { true, 410, "fix day 2 binoculars lockup", 1, gk1Day2BinocularsLockupSignature, gk1Day2BinocularsLockupPatch }, { true, 710, "fix day 9 vine swing speech playing", 1, gk1Day9VineSwingSignature, gk1Day9VineSwingPatch }, { true, 800, "fix day 10 honfour unlock door lockup", 1, gk1HonfourUnlockDoorSignature, gk1HonfourUnlockDoorPatch }, { true, 64908, "disable video benchmarking", 1, sci2BenchmarkSignature, sci2BenchmarkPatch },