diff options
author | sluicebox | 2018-12-30 15:18:38 -0800 |
---|---|---|
committer | Filippos Karapetis | 2019-01-02 21:47:19 +0200 |
commit | f1fdb0cd26b2645b7b012f5177f50bdaffcd10f9 (patch) | |
tree | 85b64695c3c41b6747560c0165085ce0ea8e2f4e /engines | |
parent | c02d1f543282a5fe277302700c53e63a1213c319 (diff) | |
download | scummvm-rg350-f1fdb0cd26b2645b7b012f5177f50bdaffcd10f9.tar.gz scummvm-rg350-f1fdb0cd26b2645b7b012f5177f50bdaffcd10f9.tar.bz2 scummvm-rg350-f1fdb0cd26b2645b7b012f5177f50bdaffcd10f9.zip |
SCI: Fix QFG1VGA Mac Antwerp controls, bug #10856
Fixes a script bug in the mac version that always kills the player
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/script_patches.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index f291bc8bd5..82e58de9fe 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -7301,12 +7301,52 @@ static const uint16 qfg1vgaPatchAntwerpWander[] = { PATCH_END }; +// QFG1VGA Mac disables all controls when the antwerp falls in room 78, killing +// the player by not allowing them to defend themselves. +// +// The antwerp falls in rooms 78 and 85 and the only way to survive is to hold +// up a weapon. These two antwerp scripts were identical in the PC version and +// enabled all menu icons even though most of them couldn't really be used. +// Sierra attempted to improve this in Mac by only enabling the inventory icons +// but instead disabled everything in room 78 by not calling the enable procedure. +// +// We fix this by calling the enable procedure like the script in room 85 does. +// +// Applies to: Mac Floppy +// Responsible method: antwerped:changeState(1) +// Fixes bug #10856 +static const uint16 qfg1vgaSignatureMacAntwerpControls[] = { + 0x30, SIG_UINT16(0x0033), // bnt 0033 [ state 1 ] + SIG_ADDTOOFFSET(+0x30), + SIG_MAGICDWORD, + 0x32, SIG_UINT16(0x014e), // jmp 014e [ end of method ] + 0x3c, // dup + 0x35, 0x01, // ldi 01 + 0x1a, // eq? + 0x30, SIG_UINT16(0x0033), // bnt 0033 [ state 2 ] + 0x38, SIG_UINT16(0x00f9), // pushi 00f9 [ canControl, hard coded for Mac ] + SIG_END +}; + +static const uint16 qfg1vgaPatchMacAntwerpControls[] = { + 0x30, PATCH_UINT16(0x0030), // bnt 0030 [ state 1 ] + PATCH_ADDTOOFFSET(+0x30), + 0x3c, // dup + 0x35, 0x01, // ldi 01 + 0x1a, // eq? + 0x31, 0x37, // bnt 37 [ state 2 ] + 0x76, // push0 + 0x45, 0x03, 0x00, // callb proc0_3 [ enable all input ] + PATCH_END +}; + // script, description, signature patch static const SciScriptPatcherEntry qfg1vgaSignatures[] = { { true, 41, "moving to castle gate", 1, qfg1vgaSignatureMoveToCastleGate, qfg1vgaPatchMoveToCastleGate }, { true, 55, "healer's hut, no delay for buy/steal", 1, qfg1vgaSignatureHealerHutNoDelay, qfg1vgaPatchHealerHutNoDelay }, { true, 73, "brutus script freeze glitch", 1, qfg1vgaSignatureBrutusScriptFreeze, qfg1vgaPatchBrutusScriptFreeze }, { true, 77, "white stag dagger throw animation glitch", 1, qfg1vgaSignatureWhiteStagDagger, qfg1vgaPatchWhiteStagDagger }, + { true, 78, "mac: enable antwerp controls", 1, qfg1vgaSignatureMacAntwerpControls, qfg1vgaPatchMacAntwerpControls }, { true, 96, "funny room script bug fixed", 1, qfg1vgaSignatureFunnyRoomFix, qfg1vgaPatchFunnyRoomFix }, { true, 210, "cheetaur description fixed", 1, qfg1vgaSignatureCheetaurDescription, qfg1vgaPatchCheetaurDescription }, { true, 215, "fight event issue", 1, qfg1vgaSignatureFightEvents, qfg1vgaPatchFightEvents }, |