From 1d77c9f0cf710e1f9f439ad371cb1b49624aed75 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Fri, 20 Dec 2013 01:01:26 +0100 Subject: SCI: script patcher cleanup --- engines/sci/engine/script_patches.cpp | 461 +++++++++++++++++----------------- engines/sci/engine/script_patches.h | 58 +++-- 2 files changed, 262 insertions(+), 257 deletions(-) (limited to 'engines/sci') diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index 1fa8d66624..e9f8b54a47 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -147,25 +147,25 @@ enum ScriptPatcherSelectors { // Responsible method: fawaz::handleEvent // Fixes bug: #6402 static const uint16 camelotSignaturePeepingTom[] = { - 0x72, SIG_MAGICDWORD, SIG_UINT16 + 0x7e, 0x07, // lofsa fawaz <-- start of proper initializion code + 0x72, SIG_MAGICDWORD, SIG_UINT16(0x077e), // lofsa fawaz <-- start of proper initializion code 0xa1, 0xb9, // sag b9h - SIG_ADDTOOFFSET +571, // skip 571 bytes + SIG_ADDTOOFFSET(+571), // skip 571 bytes 0x39, 0x7a, // pushi 7a <-- initialization code when walking automatically 0x78, // push1 0x7a, // push2 - 0x38, SIG_UINT16 + 0xa9, 0x00, // pushi 00a9 - script 169 + 0x38, SIG_UINT16(0x00a9), // + 0xa9, 0x00, // pushi 00a9 - script 169 0x78, // push1 0x43, 0x02, 0x04, // call kScriptID 0x36, // push 0x81, 0x00, // lag 00 0x4a, 0x06, // send 06 - 0x32, SIG_UINT16 + 0x20, 0x05, // jmp [end of fawaz::handleEvent] + 0x32, SIG_UINT16(0x0520), // jmp [end of fawaz::handleEvent] SIG_END }; static const uint16 camelotPatchPeepingTom[] = { - PATCH_ADDTOOFFSET +576, - 0x32, PATCH_UINT16 + 0xbd, 0xfd, // jmp to fawaz::doit / properly init peepingTom code + PATCH_ADDTOOFFSET(+576), + 0x32, PATCH_UINT16(0xfdbd), // jmp to fawaz::doit / properly init peepingTom code PATCH_END }; @@ -196,12 +196,12 @@ static const uint16 ecoquest1SignatureStayAndHelp[] = { 0x76, // push0 0x45, 0x01, 0x00, // callb export1 from script 0 (switching control off) SIG_MAGICDWORD, - 0x38, SIG_UINT16 + 0x22, 0x01, // pushi 0122 + 0x38, SIG_UINT16(0x0122), // pushi 0122 0x78, // push1 0x76, // push0 0x81, 0x00, // lag global[0] 0x4a, 0x06, // send 06 - call ego::setMotion(0) - 0x39, SIG_SELECTOR8 + SELECTOR_init, // pushi "init" + 0x39, SIG_SELECTOR8(SELECTOR_init), // pushi "init" 0x39, 0x04, // pushi 04 0x76, // push0 0x76, // push0 @@ -220,19 +220,19 @@ static const uint16 ecoquest1PatchStayAndHelp[] = { 0x2f, 0x22, // bt [next state] (this optimization saves 6 bytes) 0x39, 0x00, // pushi 0 (wasting 1 byte here) 0x45, 0x01, 0x00, // callb export1 from script 0 (switching control off) - 0x38, PATCH_UINT16 + 0x22, 0x01, // pushi 0122 + 0x38, PATCH_UINT16(0x0122), // pushi 0122 0x78, // push1 0x76, // push0 0x81, 0x00, // lag global[0] 0x4a, 0x06, // send 06 - call ego::setMotion(0) - 0x39, PATCH_SELECTOR8 + SELECTOR_init, // pushi "init" + 0x39, PATCH_SELECTOR8(SELECTOR_init), // pushi "init" 0x39, 0x06, // pushi 06 0x39, 0x02, // pushi 02 (additional 2 bytes) 0x76, // push0 0x76, // push0 0x39, 0x17, // pushi 17 0x7c, // pushSelf - 0x38, PATCH_UINT16 + 0x80, 0x02, // pushi 280 (additional 3 bytes) + 0x38, PATCH_UINT16(0x0280), // pushi 280 (additional 3 bytes) 0x51, 0x82, // class EcoNarrator 0x4a, 0x10, // send 10 - call EcoNarrator::init(2, 0, 0, 23, self, 640) PATCH_END @@ -263,14 +263,14 @@ static const uint16 ecoquest2SignatureEcorder[] = { 0x39, 0x66, // pushi 66 0x39, 0x17, // pushi 17 0x39, 0x69, // pushi 69 - 0x38, PATCH_UINT16 + 0x31, 0x26, // pushi 2631 + 0x38, PATCH_UINT16(0x2631), // pushi 2631 0x39, 0x6a, // pushi 6a 0x39, 0x64, // pushi 64 0x43, 0x1b, 0x14, // call kDisplay 0x35, 0x0a, // ldi 0a 0x65, 0x20, // aTop ticks 0x33, // jmp [end] - SIG_ADDTOOFFSET +1, // [skip 1 byte] + SIG_ADDTOOFFSET(+1), // [skip 1 byte] 0x3c, // dup 0x35, 0x03, // ldi 03 0x1a, // eq? @@ -282,21 +282,21 @@ static const uint16 ecoquest2PatchEcorder[] = { 0x2f, 0x02, // bt [to pushi 07] 0x3a, // toss 0x48, // ret - 0x38, PATCH_UINT16 + 0x07, 0x00, // pushi 07 (parameter count) (waste 1 byte) + 0x38, PATCH_UINT16(0x0007), // pushi 07 (parameter count) (waste 1 byte) 0x39, 0x0b, // push (FillBoxAny) 0x39, 0x1d, // pushi 29d 0x39, 0x73, // pushi 115d 0x39, 0x5e, // pushi 94d - 0x38, PATCH_UINT16 + 0xd7, 0x00, // pushi 215d + 0x38, PATCH_UINT16(0x00d7), // pushi 215d 0x78, // push1 (visual screen) - 0x38, PATCH_UINT16 + 0x17, 0x00, // pushi 17 (color) (waste 1 byte) + 0x38, PATCH_UINT16(0x0017), // pushi 17 (color) (waste 1 byte) 0x43, 0x6c, 0x0e, // call kGraph - 0x38, PATCH_UINT16 + 0x05, 0x00, // pushi 05 (parameter count) (waste 1 byte) + 0x38, PATCH_UINT16(0x0005), // pushi 05 (parameter count) (waste 1 byte) 0x39, 0x0c, // pushi 12d (UpdateBox) 0x39, 0x1d, // pushi 29d 0x39, 0x73, // pushi 115d 0x39, 0x5e, // pushi 94d - 0x38, PATCH_UINT16 + 0xd7, 0x00, // pushi 215d + 0x38, PATCH_UINT16(0x00d7), // pushi 215d 0x43, 0x6c, 0x0a, // call kGraph PATCH_END }; @@ -308,7 +308,7 @@ static const uint16 ecoquest2PatchEcorder[] = { // the function otherwise. // Fixes bug: #6467 static const uint16 ecoquest2SignatureEcorderTutorial[] = { - 0x30, SIG_UINT16 + 0x23, 0x00, // bnt [next state] + 0x30, SIG_UINT16(0x0023), // bnt [next state] 0x39, 0x0a, // pushi 0a 0x5b, 0x04, 0x1f, // lea temp[1f] 0x36, // push @@ -319,7 +319,7 @@ static const uint16 ecoquest2SignatureEcorderTutorial[] = { 0x39, 0x66, // pushi 66 0x39, 0x17, // pushi 17 0x39, 0x69, // pushi 69 - 0x38, SIG_UINT16 + 0x31, 0x26, // pushi 2631 + 0x38, SIG_UINT16(0x2631), // pushi 2631 0x39, 0x6a, // pushi 6a 0x39, 0x64, // pushi 64 0x43, 0x1b, 0x14, // call kDisplay @@ -340,7 +340,7 @@ static const uint16 ecoquest2PatchEcorderTutorial[] = { 0x39, 0x1d, // pushi 29d 0x39, 0x73, // pushi 115d 0x39, 0x5e, // pushi 94d - 0x38, PATCH_UINT16 + 0xd7, 0x00, // pushi 215d + 0x38, PATCH_UINT16(0x00d7), // pushi 215d 0x78, // push1 (visual screen) 0x39, 0x17, // pushi 17 (color) 0x43, 0x6c, 0x0e, // call kGraph @@ -352,14 +352,14 @@ static const uint16 ecoquest2PatchEcorderTutorial[] = { 0x39, 0x1d, // pushi 29d 0x39, 0x73, // pushi 115d 0x39, 0x5e, // pushi 94d - 0x38, PATCH_UINT16 + 0xd7, 0x00, // pushi 215d + 0x38, PATCH_UINT16(0x00d7), // pushi 215d 0x43, 0x6c, 0x0a, // call kGraph // We are out of bytes to patch at this point, // so we skip 494 (0x1EE) bytes to reuse this code: // ldi 1e // aTop 20 // jmp 030e (jump to end) - 0x32, PATCH_UINT16 + 0xee, 0x01, // skip 494 (0x1EE) bytes + 0x32, PATCH_UINT16(0x01ee), // skip 494 (0x1EE) bytes PATCH_END }; @@ -377,19 +377,19 @@ static const SciScriptPatcherEntry ecoquest2Signatures[] = { // event handling was slightly different there, so it was never discovered. // Fixes bug: #5120 static const uint16 fanmadeSignatureInfiniteLoop[] = { - 0x38, SIG_UINT16 + 0x4c, 0x00, // pushi 004c + 0x38, SIG_UINT16(0x004c), // pushi 004c 0x39, 0x00, // pushi 00 0x87, 0x01, // lap 01 0x4b, 0x04, // send 04 SIG_MAGICDWORD, 0x18, // not - 0x30, SIG_UINT16 + 0x2f, 0x00, // bnt 002f [06a5] --> jmp ffbc [0664] --> BUG! infinite loop + 0x30, SIG_UINT16(0x002f), // bnt 002f [06a5] --> jmp ffbc [0664] --> BUG! infinite loop SIG_END }; static const uint16 fanmadePatchInfiniteLoop[] = { - PATCH_ADDTOOFFSET | +10, - 0x30, SIG_UINT16 + 0x32, 0x00, // bnt 0032 [06a8] --> pushi 004c + PATCH_ADDTOOFFSET(+10), + 0x30, SIG_UINT16(0x0032), // bnt 0032 [06a8] --> pushi 004c PATCH_END }; @@ -421,9 +421,9 @@ static const uint16 freddypharkasSignatureScoreDisposal[] = { }; static const uint16 freddypharkasPatchScoreDisposal[] = { - 0x34, PATCH_UINT16 + 0x00, 0x00, // ldi 0000 - 0x34, PATCH_UINT16 + 0x00, 0x00, // ldi 0000 - 0x34, PATCH_UINT16 + 0x00, 0x00, // ldi 0000 + 0x34, PATCH_UINT16(0x0000), // ldi 0000 + 0x34, PATCH_UINT16(0x0000), // ldi 0000 + 0x34, PATCH_UINT16(0x0000), // ldi 0000 PATCH_END }; @@ -436,7 +436,7 @@ static const uint16 freddypharkasPatchScoreDisposal[] = { // Applies to at least: English PC-CD // Responsible method: rm235::init and sEnterFrom500::changeState static const uint16 freddypharkasSignatureCanisterHang[] = { - 0x38, SIG_SELECTOR16 + SELECTOR_disable, // pushi disable + 0x38, SIG_SELECTOR16(SELECTOR_disable), // pushi disable 0x7a, // push2 SIG_MAGICDWORD, 0x39, 0x07, // pushi 07 @@ -447,11 +447,11 @@ static const uint16 freddypharkasSignatureCanisterHang[] = { }; static const uint16 freddypharkasPatchCanisterHang[] = { - PATCH_ADDTOOFFSET | +3, + PATCH_ADDTOOFFSET(+3), 0x78, // push1 - PATCH_ADDTOOFFSET | +2, + PATCH_ADDTOOFFSET(+2), 0x33, 0x00, // ldi 00 (waste 2 bytes) - PATCH_ADDTOOFFSET | +3, + PATCH_ADDTOOFFSET(+3), 0x06, // send 06 - call IconBar::disable(7) PATCH_END }; @@ -468,15 +468,15 @@ static const uint16 freddypharkasPatchCanisterHang[] = { // Responsible method: lowerLadder::doit and highLadder::doit static const uint16 freddypharkasSignatureLadderEvent[] = { 0x39, SIG_MAGICDWORD, - SIG_SELECTOR8 + SELECTOR_new, // pushi new + SIG_SELECTOR8(SELECTOR_new), // pushi new 0x76, // push0 - 0x38, SIG_SELECTOR16 + SELECTOR_curEvent, // pushi curEvent + 0x38, SIG_SELECTOR16(SELECTOR_curEvent), // pushi curEvent 0x76, // push0 0x81, 0x50, // lag global[50] 0x4a, 0x04, // send 04 - read User::curEvent 0x4a, 0x04, // send 04 - call curEvent::new 0xa5, 0x00, // sat temp[0] - 0x38, SIG_SELECTOR16 + SELECTOR_localize, + 0x38, SIG_SELECTOR16(SELECTOR_localize), 0x76, // push0 0x4a, 0x04, // send 04 - call curEvent::localize SIG_END @@ -484,9 +484,9 @@ static const uint16 freddypharkasSignatureLadderEvent[] = { static const uint16 freddypharkasPatchLadderEvent[] = { 0x34, 0x00, 0x00, // ldi 0000 (waste 3 bytes, overwrites first 2 pushes) - PATCH_ADDTOOFFSET | +8, + PATCH_ADDTOOFFSET(+8), 0xa5, 0x00, // sat temp[0] (waste 2 bytes, overwrites 2nd send) - PATCH_ADDTOOFFSET | +2, + PATCH_ADDTOOFFSET(+2), 0x34, 0x00, 0x00, // ldi 0000 0x34, 0x00, 0x00, // ldi 0000 (waste 6 bytes, overwrites last 3 opcodes) PATCH_END @@ -502,14 +502,14 @@ static const uint16 freddypharkasSignatureMacInventory[] = { 0x39, 0x23, // pushi 23 0x39, 0x74, // pushi 74 0x78, // push1 - 0x38, SIG_UINT16 + 0x74, 0x01, // pushi 0174 (on mac it's actually 0x01, 0x74) + 0x38, SIG_UINT16(0x0174), // pushi 0174 (on mac it's actually 0x01, 0x74) 0x85, 0x15, // lat 15 SIG_END }; static const uint16 freddypharkasPatchMacInventory[] = { 0x39, 0x02, // pushi 02 (now matches the DOS version) - PATCH_ADDTOOFFSET +23, + PATCH_ADDTOOFFSET(+23), 0x39, 0x04, // pushi 04 (now matches the DOS version) PATCH_END }; @@ -531,21 +531,21 @@ static const SciScriptPatcherEntry freddypharkasSignatures[] = { static const uint16 gk1SignatureDay6PoliceBeignet[] = { 0x35, 0x04, // ldi 04 0x1a, // eq? - 0x30, SIG_ADDTOOFFSET +2, // bnt [next state check] - 0x38, SIG_SELECTOR16 + SELECTOR_dispose, // pushi dispose + 0x30, SIG_ADDTOOFFSET(+2), // bnt [next state check] + 0x38, SIG_SELECTOR16(SELECTOR_dispose), // pushi dispose 0x76, // push0 - 0x72, SIG_ADDTOOFFSET +2, // lofsa deskSarg - 0x4a, SIG_UINT16 + 0x04, 0x00, // send 04 + 0x72, SIG_ADDTOOFFSET(+2), // lofsa deskSarg + 0x4a, SIG_UINT16(0x0004), // send 04 SIG_MAGICDWORD, - 0x34, SIG_UINT16 + 0xdc, 0x00, // ldi 220 - 0x65, SIG_ADDTOOFFSET +1, // aTop cycles (1a for PC, 1c for Mac) + 0x34, SIG_UINT16(0x00dc), // ldi 220 + 0x65, SIG_ADDTOOFFSET(+1), // aTop cycles (1a for PC, 1c for Mac) 0x32, // jmp [end] SIG_END }; static const uint16 gk1PatchDay6PoliceBeignet[] = { - PATCH_ADDTOOFFSET +16, - 0x34, PATCH_UINT16 + 0x17, 0x00, // ldi 23 + PATCH_ADDTOOFFSET(+16), + 0x34, PATCH_UINT16(0x0017), // ldi 23 0x65, PATCH_GETORIGINALBYTEADJUST +20, +2, // aTop seconds (1c for PC, 1e for Mac) PATCH_END }; @@ -557,17 +557,17 @@ static const uint16 gk1PatchDay6PoliceBeignet[] = { static const uint16 gk1SignatureDay6PoliceSleep[] = { 0x35, 0x08, // ldi 08 0x1a, // eq? - 0x31, SIG_ADDTOOFFSET +1, // bnt [next state check] + 0x31, SIG_ADDTOOFFSET(+1), // bnt [next state check] SIG_MAGICDWORD, - 0x34, SIG_UINT16 + 0xdc, 0x00, // ldi 220 - 0x65, SIG_ADDTOOFFSET +1, // aTop cycles (1a for PC, 1c for Mac) + 0x34, SIG_UINT16(0x00dc), // ldi 220 + 0x65, SIG_ADDTOOFFSET(+1), // aTop cycles (1a for PC, 1c for Mac) 0x32, // jmp [end] 0 }; static const uint16 gk1PatchDay6PoliceSleep[] = { - PATCH_ADDTOOFFSET +5, - 0x34, SIG_UINT16 + 0x2a, 0x00, // ldi 42 + PATCH_ADDTOOFFSET(+5), + 0x34, SIG_UINT16(0x002a), // ldi 42 0x65, PATCH_GETORIGINALBYTEADJUST +9, +2, // aTop seconds (1c for PC, 1e for Mac) PATCH_END }; @@ -577,17 +577,17 @@ static const uint16 gk1PatchDay6PoliceSleep[] = { // Responsible method: startOfDay5::changeState static const uint16 gk1SignatureDay5PhoneFreeze[] = { 0x4a, - SIG_MAGICDWORD, SIG_UINT16 + 0x0c, 0x00, // send 0c + SIG_MAGICDWORD, SIG_UINT16(0x000c), // send 0c 0x35, 0x03, // ldi 03 - 0x65, SIG_ADDTOOFFSET +1, // aTop cycles - 0x32, SIG_ADDTOOFFSET +2, // jmp [end] + 0x65, SIG_ADDTOOFFSET(+1), // aTop cycles + 0x32, SIG_ADDTOOFFSET(+2), // jmp [end] 0x3c, // dup 0x35, 0x21, // ldi 21 SIG_END }; static const uint16 gk1PatchDay5PhoneFreeze[] = { - PATCH_ADDTOOFFSET +3, + PATCH_ADDTOOFFSET(+3), 0x35, 0x06, // ldi 01 0x65, PATCH_GETORIGINALBYTEADJUST +6, +6, // aTop ticks PATCH_END @@ -608,23 +608,23 @@ static const uint16 gk1SignatureInterrogationBug[] = { SIG_MAGICDWORD, 0x65, 0x4c, // aTop 4c 0x67, 0x50, // pTos 50 - 0x34, SIG_UINT16 + 0x10, 0x27, // ldi 2710 + 0x34, SIG_UINT16(0x2710), // ldi 2710 0x1e, // gt? 0x31, 0x08, // bnt 08 [05a0] 0x67, 0x50, // pTos 50 - 0x34, SIG_UINT16 + 0x10, 0x27, // ldi 2710 + 0x34, SIG_UINT16(0x2710), // ldi 2710 0x04, // sub 0x65, 0x50, // aTop 50 0x63, 0x50, // pToa 50 0x31, 0x15, // bnt 15 [05b9] 0x39, 0x0e, // pushi 0e 0x76, // push0 - 0x4a, SIG_UINT16 + 0x04, 0x00, // send 0004 + 0x4a, SIG_UINT16(0x0004), // send 0004 0xa5, 0x00, // sat 00 - 0x38, SIG_SELECTOR16 + SELECTOR_dispose, // pushi dispose + 0x38, SIG_SELECTOR16(SELECTOR_dispose), // pushi dispose 0x76, // push0 0x63, 0x50, // pToa 50 - 0x4a, SIG_UINT16 + 0x04, 0x00, // send 0004 + 0x4a, SIG_UINT16(0x0004), // send 0004 0x85, 0x00, // lat 00 0x65, 0x50, // aTop 50 SIG_END @@ -638,18 +638,18 @@ static const uint16 gk1PatchInterrogationBug[] = { 0x76, // push0 0x4a, 0x04, 0x00, // send 0004 0xa5, 0x00, // sat 00 - 0x38, SIG_SELECTOR16 + SELECTOR_dispose, // pushi dispose + 0x38, SIG_SELECTOR16(SELECTOR_dispose), // pushi dispose 0x76, // push0 0x63, 0x50, // pToa 50 0x4a, 0x04, 0x00, // send 0004 0x85, 0x00, // lat 00 0x65, 0x50, // aTop 50 0x67, 0x50, // pTos 50 - 0x34, PATCH_UINT16 + 0x10, 0x27, // ldi 2710 + 0x34, PATCH_UINT16(0x2710), // ldi 2710 0x1e, // gt? 0x31, 0x08, // bnt 08 [05b9] 0x67, 0x50, // pTos 50 - 0x34, PATCH_UINT16 + 0x10, 0x27, // ldi 2710 + 0x34, PATCH_UINT16(0x2710), // ldi 2710 0x04, // sub 0x65, 0x50, // aTop 50 PATCH_END @@ -672,17 +672,17 @@ static const SciScriptPatcherEntry gk1Signatures[] = { // those cases. static const uint16 kq5SignatureCdHarpyVolume[] = { SIG_MAGICDWORD, - 0x80, SIG_UINT16 + 0x91, 0x01, // lag global[191h] + 0x80, SIG_UINT16(0x0191), // lag global[191h] 0x18, // not - 0x30, SIG_UINT16 + 0x2c, 0x00, // bnt [jump further] (jumping, if global 191h is 1) + 0x30, SIG_UINT16(0x002c), // bnt [jump further] (jumping, if global 191h is 1) 0x35, 0x01, // ldi 01 - 0xa0, SIG_UINT16 + 0x91, 0x01, // sag global[191h] (setting global 191h to 1) - 0x38, SIG_UINT16 + 0x7b, 0x01, // pushi 017b + 0xa0, SIG_UINT16(0x0191), // sag global[191h] (setting global 191h to 1) + 0x38, SIG_UINT16(0x017b), // pushi 017b 0x76, // push0 0x81, 0x01, // lag global[1] 0x4a, 0x04, // send 04 - read KQ5::masterVolume 0xa5, 0x03, // sat temp[3] (store volume in temp 3) - 0x38, SIG_UINT16 + 0x7b, 0x01, // pushi 017b + 0x38, SIG_UINT16(0x017b), // pushi 017b 0x76, // push0 0x81, 0x01, // lag global[1] 0x4a, 0x04, // send 04 - read KQ5::masterVolume @@ -693,17 +693,17 @@ static const uint16 kq5SignatureCdHarpyVolume[] = { }; static const uint16 kq5PatchCdHarpyVolume[] = { - 0x38, PATCH_UINT16 + 0x2f, 0x02, // pushi 022f (selector theVol) (3 new bytes) + 0x38, PATCH_UINT16(0x022f), // pushi 022f (selector theVol) (3 new bytes) 0x76, // push0 (1 new byte) 0x51, 0x88, // class SpeakTimer (2 new bytes) 0x4a, 0x04, // send 04 (2 new bytes) -> read SpeakTimer::theVol 0xa5, 0x03, // sat temp[3] (2 new bytes) -> write to temp 3 - 0x80, PATCH_UINT16 + 0x91, 0x01, // lag global[191h] + 0x80, PATCH_UINT16(0x0191), // lag global[191h] // saving 1 byte due optimization - 0x2e, PATCH_UINT16 + 0x23, 0x00, // bt [jump further] (jumping, if global 191h is 1) + 0x2e, PATCH_UINT16(0x0023), // bt [jump further] (jumping, if global 191h is 1) 0x35, 0x01, // ldi 01 - 0xa0, PATCH_UINT16 + 0x91, 0x01, // sag global[191h] (setting global 191h to 1) - 0x38, PATCH_UINT16 + 0x7b, 0x01, // pushi 017b + 0xa0, PATCH_UINT16(0x0191), // sag global[191h] (setting global 191h to 1) + 0x38, PATCH_UINT16(0x017b), // pushi 017b 0x76, // push0 0x81, 0x01, // lag global[1] 0x4a, 0x04, // send 04 - read KQ5::masterVolume @@ -731,23 +731,23 @@ static const uint16 kq5PatchCdHarpyVolume[] = { // // Fixes bug: #4964 static const uint16 kq5SignatureWitchCageInit[] = { - SIG_UINT16 + 0x00, 0x00, // top - SIG_UINT16 + 0x00, 0x00, // left - SIG_UINT16 + 0x00, 0x00, // bottom - SIG_UINT16 + 0x00, 0x00, // right - SIG_UINT16 + 0x00, 0x00, // extra property #1 + SIG_UINT16(0x0000), // top + SIG_UINT16(0x0000), // left + SIG_UINT16(0x0000), // bottom + SIG_UINT16(0x0000), // right + SIG_UINT16(0x0000), // extra property #1 SIG_MAGICDWORD, - SIG_UINT16 + 0x7a, 0x00, // extra property #2 - SIG_UINT16 + 0xc8, 0x00, // extra property #3 - SIG_UINT16 + 0xa3, 0x00, // extra property #4 + SIG_UINT16(0x007a), // extra property #2 + SIG_UINT16(0x00c8), // extra property #3 + SIG_UINT16(0x00a3), // extra property #4 SIG_END }; static const uint16 kq5PatchWitchCageInit[] = { - PATCH_UINT16 + 0x00, 0x00, // top - PATCH_UINT16 + 0x7a, 0x00, // left - PATCH_UINT16 + 0xc8, 0x00, // bottom - PATCH_UINT16 + 0xa3, 0x00, // right + PATCH_UINT16(0x0000), // top + PATCH_UINT16(0x007a), // left + PATCH_UINT16(0x00c8), // bottom + PATCH_UINT16(0x00a3), // right PATCH_END }; @@ -767,15 +767,15 @@ static const uint16 kq5PatchWitchCageInit[] = { // TODO: Investigate these side effects more closely. static const uint16 kq5SignatureWinGMSignals[] = { SIG_MAGICDWORD, - 0x80, SIG_UINT16 + 0x90, 0x01, // lag 0x190 + 0x80, SIG_UINT16(0x0190), // lag 0x190 0x18, // not - 0x30, SIG_UINT16 + 0x1b, 0x00, // bnt +0x001B + 0x30, SIG_UINT16(0x001b), // bnt +0x001B 0x89, 0x57, // lsg 0x57 SIG_END }; static const uint16 kq5PatchWinGMSignals[] = { - 0x34, PATCH_UINT16 + 0x01, 0x00, // ldi 0x0001 + 0x34, PATCH_UINT16(0x0001), // ldi 0x0001 PATCH_END }; @@ -822,7 +822,7 @@ static const uint16 kq6PatchDuplicateBabyCry[] = { // Fixes bug: #5681 static const uint16 kq6SignatureInventoryStackFix[] = { 0x67, 0x30, // pTos state - 0x34, SIG_UINT16 + 0x00, 0x20, // ldi 2000 + 0x34, SIG_UINT16(0x2000), // ldi 2000 0x12, // and 0x18, // not 0x31, 0x04, // bnt [not first refresh] @@ -830,10 +830,10 @@ static const uint16 kq6SignatureInventoryStackFix[] = { SIG_MAGICDWORD, 0x65, 0x1e, // aTop curIcon 0x67, 0x30, // pTos state - 0x34, SIG_UINT16 + 0xff, 0xdf, // ldi dfff + 0x34, SIG_UINT16(0xdfff), // ldi dfff 0x12, // and 0x65, 0x30, // aTop state - 0x38, SIG_SELECTOR16 + SELECTOR_show, // pushi "show" ("show" is e1h for KQ6CD) + 0x38, SIG_SELECTOR16(SELECTOR_show), // pushi "show" ("show" is e1h for KQ6CD) 0x78, // push1 0x87, 0x00, // lap param[0] 0x31, 0x04, // bnt [use global for show] @@ -842,7 +842,7 @@ static const uint16 kq6SignatureInventoryStackFix[] = { 0x81, 0x00, // lag global[0] 0x36, // push 0x54, 0x06, // self 06 (KqInv::show) - 0x31, SIG_ADDTOOFFSET + 1, // bnt [exit menu code] (0x08 for PC, 0x07 for mac) + 0x31, SIG_ADDTOOFFSET(+1), // bnt [exit menu code] (0x08 for PC, 0x07 for mac) 0x39, 0x39, // pushi 39 0x76, // push0 0x54, 0x04, // self 04 (KqInv::doit) @@ -853,7 +853,7 @@ static const uint16 kq6PatchInventoryStackFix[] = { 0x67, 0x30, // pTos state 0x3c, // dup (1 more byte, needed for patch) 0x3c, // dup (1 more byte, saves 1 byte later) - 0x34, PATCH_UINT16 + 0x00, 0x20, // ldi 2000 + 0x34, PATCH_UINT16(0x2000), // ldi 2000 0x12, // and 0x2f, 0x02, // bt [not first refresh] - saves 3 bytes in total 0x65, 0x1e, // aTop curIcon @@ -872,7 +872,7 @@ static const uint16 kq6PatchInventoryStackFix[] = { 0x54, 0x06, // self 06 (call x::show) 0x31, // bnt [menu exit code] PATCH_GETORIGINALBYTEADJUST +39, +6,// dynamic offset must be 0x0E for PC and 0x0D for mac - 0x34, PATCH_UINT16 + 0x00, 0x20, // ldi 2000 + 0x34, PATCH_UINT16(0x2000), // ldi 2000 0x12, // and 0x2f, 0x05, // bt [to return] 0x39, 0x39, // pushi 39 @@ -895,42 +895,42 @@ static const uint16 kq6SignatureDrinkMeFix[] = { 0x3c, // dup 0x35, 0x0f, // ldi 0f 0x1a, // eq? - 0x30, SIG_UINT16 + 0xa4, 0x00, // bnt [skip to next check] - SIG_ADDTOOFFSET +161, - 0x32, SIG_UINT16 + 0x7f, 0x00, // jmp [return] + 0x30, SIG_UINT16(0x00a4), // bnt [skip to next check] + SIG_ADDTOOFFSET(+161), + 0x32, SIG_UINT16(0x007f), // jmp [return] 0x3c, // dup 0x35, 0x10, // ldi 10 0x1a, // eq? 0x31, 0x07, // bnt [skip to next check] 0x35, 0x03, // ldi 03 0x65, 0x1a, // aTop (cycles) - 0x32, SIG_UINT16 + 0x72, 0x00, // jmp [return] + 0x32, SIG_UINT16(0x0072), // jmp [return] 0x3c, // dup 0x35, 0x11, // ldi 11 0x1a, // eq? 0x31, 0x13, // bnt [skip to next check] - SIG_ADDTOOFFSET +20, + SIG_ADDTOOFFSET(+20), 0x35, 0x12, // ldi 12 - SIG_ADDTOOFFSET +23, + SIG_ADDTOOFFSET(+23), 0x35, 0x13, // ldi 13 SIG_END }; static const uint16 kq6PatchDrinkMeFix[] = { - PATCH_ADDTOOFFSET +5, // skip to bnt offset + PATCH_ADDTOOFFSET(+5), // skip to bnt offset PATCH_GETORIGINALBYTEADJUST +5, +13, // adjust jump to [check for 11h code] - SIG_ADDTOOFFSET +162, - 0x39, PATCH_SELECTOR8 + SELECTOR_doit, // pushi (doit) + PATCH_ADDTOOFFSET(+162), + 0x39, PATCH_SELECTOR8(SELECTOR_doit), // pushi (doit) 0x76, // push0 0x81, 0x0a, // lag 0a 0x4a, 0x04, // send 04 (call addToPics::doit) 0x3a, // toss 0x48, // ret - PATCH_ADDTOOFFSET +8, // skip to check 11h code + PATCH_ADDTOOFFSET(+8), // skip to check 11h code 0x35, 0x10, // ldi 10 instead of 11 - PATCH_ADDTOOFFSET +23, // skip to check 12h code + PATCH_ADDTOOFFSET(+23), // skip to check 12h code 0x35, 0x11, // ldi 11 instead of 12 - PATCH_ADDTOOFFSET +23, // skip to check 13h code + PATCH_ADDTOOFFSET(+23), // skip to check 13h code 0x35, 0x12, // ldi 12 instead of 13 PATCH_END }; @@ -945,12 +945,12 @@ static const uint16 kq6laurabow2CDSignatureAudioTextSupport1[] = { 0x12, // and SIG_MAGICDWORD, 0x31, 0x13, // bnt [audio call] - 0x38, SIG_SELECTOR16 + SELECTOR_modNum, // pushi modNum + 0x38, SIG_SELECTOR16(SELECTOR_modNum), // pushi modNum SIG_END }; static const uint16 kq6laurabow2CDPatchAudioTextSupport1[] = { - PATCH_ADDTOOFFSET +5, + PATCH_ADDTOOFFSET(+5), 0x33, 0x13, // jmp [audio call] PATCH_END }; @@ -966,7 +966,7 @@ static const uint16 kq6laurabow2CDSignatureAudioTextSupport2[] = { }; static const uint16 kq6laurabow2CDPatchAudioTextSupport2[] = { - PATCH_ADDTOOFFSET +7, + PATCH_ADDTOOFFSET(+7), 0xa1, 98, // sag global[98d] PATCH_END }; @@ -982,7 +982,7 @@ static const uint16 kq6laurabow2CDSignatureAudioTextSupport3[] = { }; static const uint16 kq6laurabow2CDPatchAudioTextSupport3[] = { - PATCH_ADDTOOFFSET +3, + PATCH_ADDTOOFFSET(+3), 0x89, 98, // lsg global[98d] PATCH_END }; @@ -993,7 +993,7 @@ static const uint16 kq6laurabow2CDSignatureAudioTextSupport4[] = { 0x35, 0x01, // ldi 01 0x12, // and 0x31, 0x08, // bnt [skip code] - 0x38, SIG_SELECTOR16 + SELECTOR_startText, // pushi startText + 0x38, SIG_SELECTOR16(SELECTOR_startText), // pushi startText 0x78, // push1 0x8f, 0x01, // lsp param[1] 0x54, 0x06, // self 06 @@ -1002,7 +1002,7 @@ static const uint16 kq6laurabow2CDSignatureAudioTextSupport4[] = { 0x12, // and 0x31, 0x08, // bnt [skip code] SIG_MAGICDWORD, - 0x38, SIG_SELECTOR16 + SELECTOR_startAudio, // pushi startAudio + 0x38, SIG_SELECTOR16(SELECTOR_startAudio), // pushi startAudio 0x78, // push1 0x8f, 0x01, // lsp param[1] 0x54, 0x06, // self 06 @@ -1010,11 +1010,11 @@ static const uint16 kq6laurabow2CDSignatureAudioTextSupport4[] = { }; static const uint16 kq6laurabow2CDPatchAudioTextSupport4[] = { - PATCH_ADDTOOFFSET +2, - 0x34, PATCH_UINT16 + 0x01, 0x00, // ldi 0001 (waste 1 byte) + PATCH_ADDTOOFFSET(+2), + 0x34, PATCH_UINT16(0x0001), // ldi 0001 (waste 1 byte) 0x12, 0x18, // not - prepares acc for KQ6 talker::startText - PATCH_ADDTOOFFSET +19, + PATCH_ADDTOOFFSET(+19), 0x89, 98, // lsp global[98d] PATCH_END }; @@ -1047,7 +1047,7 @@ static const uint16 kq6CDSignatureAudioTextSupport1[] = { }; static const uint16 kq6CDPatchAudioTextSupport1[] = { - PATCH_ADDTOOFFSET +5, + PATCH_ADDTOOFFSET(+5), 0x33, 0x32, // jmp [jump-for-text-code] PATCH_END }; @@ -1062,14 +1062,14 @@ static const uint16 kq6CDSignatureAudioTextSupport2[] = { 0x63, 0x8a, // pToa viewInPrint 0x18, // not 0x31, 0x06, // bnt [skip following code] - 0x38, SIG_UINT16 + 0xe1, 0x00, // pushi 00e1 + 0x38, SIG_UINT16(0x00e1), // pushi 00e1 0x76, // push0 0x54, 0x04, // self 04 SIG_END }; static const uint16 kq6CDPatchAudioTextSupport2[] = { - PATCH_ADDTOOFFSET +2, + PATCH_ADDTOOFFSET(+2), 0x67, 0x8a, // pTos viewInPrint 0x14, // or 0x2f, // bt [skip following code] @@ -1092,7 +1092,7 @@ static const uint16 kq6CDSignatureAudioTextSupport3[] = { }; static const uint16 kq6CDPatchAudioTextSupport3[] = { - PATCH_ADDTOOFFSET +5, + PATCH_ADDTOOFFSET(+5), 0x18, 0x18, // not (waste bytes) PATCH_END }; @@ -1108,8 +1108,8 @@ static const uint16 kq6CDSignatureAudioTextSupportGuards[] = { }; static const uint16 kq6CDPatchAudioTextSupportGuards[] = { - PATCH_ADDTOOFFSET +2, - 0x34, PATCH_UINT16 + 0x01, 0x00, // ldi 0001 (waste 1 byte to overwrite eq?) + PATCH_ADDTOOFFSET(+2), + 0x34, PATCH_UINT16(0x0001), // ldi 0001 (waste 1 byte to overwrite eq?) PATCH_END }; @@ -1125,7 +1125,7 @@ static const uint16 kq6CDSignatureAudioTextSupportStepmother[] = { }; static const uint16 kq6CDPatchAudioTextSupportJumpAlways[] = { - PATCH_ADDTOOFFSET +5, + PATCH_ADDTOOFFSET(+5), 0x33, // jump always PATCH_END }; @@ -1179,25 +1179,25 @@ static const SciScriptPatcherEntry kq6Signatures[] = { static const uint16 longbowSignatureShowHandCode[] = { 0x78, // push1 0x78, // push1 - 0x72, SIG_ADDTOOFFSET +2, // lofsa (letter, that was typed) + 0x72, SIG_ADDTOOFFSET(+2), // lofsa (letter, that was typed) 0x36, // push - 0x40, SIG_ADDTOOFFSET +2, // call + 0x40, SIG_ADDTOOFFSET(+2), // call 0x02, // perform the call above with 2 parameters 0x36, // push - 0x40, SIG_ADDTOOFFSET +2, // call + 0x40, SIG_ADDTOOFFSET(+2), // call SIG_MAGICDWORD, 0x02, // perform the call above with 2 parameters - 0x38, SIG_SELECTOR16 + SELECTOR_setMotion, // pushi "setMotion" (0x11c in Longbow German) - 0x39, SIG_SELECTOR8 + SELECTOR_x, // pushi "x" (0x04 in Longbow German) + 0x38, SIG_SELECTOR16(SELECTOR_setMotion), // pushi "setMotion" (0x11c in Longbow German) + 0x39, SIG_SELECTOR8(SELECTOR_x), // pushi "x" (0x04 in Longbow German) 0x51, 0x1e, // class MoveTo SIG_END }; static const uint16 longbowPatchShowHandCode[] = { 0x39, 0x01, // pushi 1 (combine the two push1's in one, like in the English version) - PATCH_ADDTOOFFSET +3, // leave the lofsa call untouched + PATCH_ADDTOOFFSET(+3), // leave the lofsa call untouched // The following will remove the duplicate call - 0x32, PATCH_UINT16 + 0x02, 0x00, // jmp 02 - skip 2 bytes (the remainder of the first call) + 0x32, PATCH_UINT16(0x0002), // jmp 02 - skip 2 bytes (the remainder of the first call) 0x48, // ret (dummy, should never be reached) 0x48, // ret (dummy, should never be reached) PATCH_END @@ -1229,19 +1229,19 @@ static const SciScriptPatcherEntry longbowSignatures[] = { static const uint16 larry2SignatureWearParachutePoints[] = { 0x35, 0x01, // ldi 01 0xa1, SIG_MAGICDWORD, 0x8e, // sag 8e - 0x80, SIG_UINT16 + 0xe0, 0x01, // lag 1e0 + 0x80, SIG_UINT16(0x01e0), // lag 1e0 0x18, // not - 0x30, SIG_UINT16 + 0x0f, 0x00, // bnt [don't give points] + 0x30, SIG_UINT16(0x000f), // bnt [don't give points] 0x35, 0x01, // ldi 01 0xa0, 0xe0, 0x01, // sag 1e0 SIG_END }; static const uint16 larry2PatchWearParachutePoints[] = { - PATCH_ADDTOOFFSET +4, - 0x80, PATCH_UINT16 + 0x5a, 0x00, // lag 5a (global 90) - PATCH_ADDTOOFFSET +6, - 0xa0, PATCH_UINT16 + 0x5a, 0x00, // sag 5a (global 90) + PATCH_ADDTOOFFSET(+4), + 0x80, PATCH_UINT16(0x005a), // lag 5a (global 90) + PATCH_ADDTOOFFSET(+6), + 0xa0, PATCH_UINT16(0x005a), // sag 5a (global 90) PATCH_END }; @@ -1261,16 +1261,16 @@ static const SciScriptPatcherEntry larry2Signatures[] = { // Responsible method: none, position of talker object on screen needs to get modified static const uint16 larry5SignatureGermanEndingPattiTalker[] = { SIG_MAGICDWORD, - SIG_UINT16 + 0x6e, 0x00, // object pattiTalker::x (110) - SIG_UINT16 + 0xb4, 0x00, // object pattiTalker::y (180) - SIG_ADDTOOFFSET + 469, // verify that it's really the German version + SIG_UINT16(0x006e), // object pattiTalker::x (110) + SIG_UINT16(0x00b4), // object pattiTalker::y (180) + SIG_ADDTOOFFSET(+469), // verify that it's really the German version 0x59, 0x6f, 0x75, // (object name) "You" 0x23, 0x47, 0x44, 0x75, // "#GDu" SIG_END }; static const uint16 larry5PatchGermanEndingPattiTalker[] = { - PATCH_UINT16 + 0x5a, 0x00, // change pattiTalker::x to 90 + PATCH_UINT16(0x005a), // change pattiTalker::x to 90 PATCH_END }; @@ -1292,36 +1292,36 @@ static const SciScriptPatcherEntry larry5Signatures[] = { // Responsible method: unknown static const uint16 larry6SignatureDeathDialog[] = { SIG_MAGICDWORD, - 0x3e, SIG_UINT16 + 0x33, 0x01, // link 0133 (offset 0x20) + 0x3e, SIG_UINT16(0x0133), // link 0133 (offset 0x20) 0x35, 0xff, // ldi ff 0xa3, 0x00, // sal 00 - SIG_ADDTOOFFSET +680, // [skip 680 bytes] + SIG_ADDTOOFFSET(+680), // [skip 680 bytes] 0x8f, 0x01, // lsp 01 (offset 0x2cf) 0x7a, // push2 - 0x5a, SIG_UINT16 + 0x04, 0x00, SIG_UINT16 + 0x0e, 0x01, // lea 0004 010e + 0x5a, SIG_UINT16(0x0004), SIG_UINT16(0x010e), // lea 0004 010e 0x36, // push 0x43, 0x7c, 0x0e, // kMessage[7c] 0e - SIG_ADDTOOFFSET +90, // [skip 90 bytes] - 0x38, SIG_UINT16 + 0xd6, 0x00, // pushi 00d6 (offset 0x335) + SIG_ADDTOOFFSET(+90), // [skip 90 bytes] + 0x38, SIG_UINT16(0x00d6), // pushi 00d6 (offset 0x335) 0x78, // push1 - 0x5a, SIG_UINT16 + 0x04, 0x00, SIG_UINT16 + 0x0e, 0x01, // lea 0004 010e + 0x5a, SIG_UINT16(0x0004), SIG_UINT16(0x010e), // lea 0004 010e 0x36, // push - SIG_ADDTOOFFSET +76, // [skip 76 bytes] - 0x38, SIG_UINT16 + 0xcd, 0x00, // pushi 00cd (offset 0x38b) + SIG_ADDTOOFFSET(+76), // [skip 76 bytes] + 0x38, SIG_UINT16(0x00cd), // pushi 00cd (offset 0x38b) 0x39, 0x03, // pushi 03 - 0x5a, SIG_UINT16 + 0x04, 0x00, SIG_UINT16 + 0x0e, 0x01, // lea 0004 010e + 0x5a, SIG_UINT16(0x0004), SIG_UINT16(0x010e), // lea 0004 010e 0x36, SIG_END }; static const uint16 larry6PatchDeathDialog[] = { 0x3e, 0x00, 0x02, // link 0200 - PATCH_ADDTOOFFSET +687, - 0x5a, PATCH_UINT16 + 0x04, 0x00, PATCH_UINT16 + 0x40, 0x01, // lea 0004 0140 - PATCH_ADDTOOFFSET +98, - 0x5a, PATCH_UINT16 + 0x04, 0x00, PATCH_UINT16 + 0x40, 0x01, // lea 0004 0140 - PATCH_ADDTOOFFSET +82, - 0x5a, PATCH_UINT16 + 0x04, 0x00, PATCH_UINT16 + 0x40, 0x01, // lea 0004 0140 + PATCH_ADDTOOFFSET(+687), + 0x5a, PATCH_UINT16(0x0004), PATCH_UINT16(0x0140), // lea 0004 0140 + PATCH_ADDTOOFFSET(+98), + 0x5a, PATCH_UINT16(0x0004), PATCH_UINT16(0x0140), // lea 0004 0140 + PATCH_ADDTOOFFSET(+82), + 0x5a, PATCH_UINT16(0x0004), PATCH_UINT16(0x0140), // lea 0004 0140 PATCH_END }; @@ -1363,13 +1363,13 @@ static const uint16 laurabow2CDSignaturePaintingClosing[] = { 0x76, // push0 SIG_MAGICDWORD, 0x7a, // push2 - 0x38, SIG_UINT16 + 0x31, 0x02, // pushi 0231h (561) + 0x38, SIG_UINT16(0x0231), // pushi 0231h (561) 0x76, // push0 0x43, 0x02, 0x04, // kScriptID (get export 0 of script 561) 0x4a, 0x04, // send 04 (gets safePicture::cel) 0x18, // not 0x31, 0x21, // bnt [exit] - 0x38, SIG_UINT16 + 0x83, 0x02, // pushi 0283h + 0x38, SIG_UINT16(0x0283), // pushi 0283h 0x76, // push0 0x7a, // push2 0x39, 0x20, // pushi 20 @@ -1386,19 +1386,19 @@ static const uint16 laurabow2CDSignaturePaintingClosing[] = { }; static const uint16 laurabow2CDPatchPaintingClosing[] = { - PATCH_ADDTOOFFSET +2, + PATCH_ADDTOOFFSET(+2), 0x3c, // dup (1 additional byte) 0x76, // push0 0x3c, // dup (1 additional byte) 0xab, 0x00, // ssl local[0] -> reset safePic signal 0x7a, // push2 - 0x38, PATCH_UINT16 + 0x31, 0x02, // pushi 0231h (561) + 0x38, PATCH_UINT16(0x0231), // pushi 0231h (561) 0x76, // push0 0x43, 0x02, 0x04, // kScriptID (get export 0 of script 561) 0x4a, 0x04, // send 04 (gets safePicture::cel) 0x1a, // eq? 0x31, 0x1d, // bnt [exit] - 0x38, PATCH_UINT16 + 0x83, 0x02, // pushi 0283h + 0x38, PATCH_UINT16(0x0283), // pushi 0283h 0x76, // push0 0x7a, // push2 0x39, 0x20, // pushi 20 @@ -1433,7 +1433,7 @@ static const uint16 laurabow2CDPatchPaintingClosing[] = { // Fixes bug: #6440 static const uint16 laurabow2CDSignatureFixProblematicIconBar[] = { SIG_MAGICDWORD, - 0x38, SIG_UINT16 + 0xf1, 0x00, // pushi 00f1 (disable) - hardcoded, we only want to patch the CD version + 0x38, SIG_UINT16(0x00f1), // pushi 00f1 (disable) - hardcoded, we only want to patch the CD version 0x76, // push0 0x81, 0x45, // lag global[45] 0x4a, 0x04, // send 04 @@ -1476,8 +1476,8 @@ static const uint16 mothergoose256SignatureReplay[] = { }; static const uint16 mothergoose256PatchReplay[] = { - 0x34, PATCH_UINT16 + 0x00, 0x00, // ldi 0000 (dummy) - 0x34, PATCH_UINT16 + 0x00, 0x00, // ldi 0000 (dummy) + 0x34, PATCH_UINT16(0x0000), // ldi 0000 (dummy) + 0x34, PATCH_UINT16(0x0000), // ldi 0000 (dummy) PATCH_END }; @@ -1491,7 +1491,7 @@ static const uint16 mothergoose256SignatureSaveLimit[] = { }; static const uint16 mothergoose256PatchSaveLimit[] = { - PATCH_ADDTOOFFSET | +2, + PATCH_ADDTOOFFSET(+2), 0x35, 0x0d + SAVEGAMEID_OFFICIALRANGE_START, // ldi 113d PATCH_END }; @@ -1521,9 +1521,9 @@ static const uint16 pq1vgaSignaturePutGunInLockerBug[] = { 0x35, 0x00, // ldi 00 0x1a, // eq? 0x31, 0x25, // bnt [next state check] - SIG_ADDTOOFFSET +22, // [skip 22 bytes] + SIG_ADDTOOFFSET(+22), // [skip 22 bytes] SIG_MAGICDWORD, - 0x38, SIG_SELECTOR16 + SELECTOR_put, // pushi "put" + 0x38, SIG_SELECTOR16(SELECTOR_put), // pushi "put" 0x78, // push1 0x76, // push0 0x81, 0x00, // lag 00 @@ -1535,17 +1535,17 @@ static const uint16 pq1vgaSignaturePutGunInLockerBug[] = { 0x35, 0x01, // ldi 01 0x1a, // eq? 0x31, 0x08, // bnt [end of method] - 0x39, SIG_SELECTOR8 + SELECTOR_dispose, // pushi "dispose" + 0x39, SIG_SELECTOR8(SELECTOR_dispose), // pushi "dispose" 0x76, // push0 - 0x72, SIG_UINT16 + 0x88, 0x00, // lofsa 0088 + 0x72, SIG_UINT16(0x0088), // lofsa 0088 0x4a, 0x04, // send 04 - locker::dispose SIG_END }; static const uint16 pq1vgaPatchPutGunInLockerBug[] = { - PATCH_ADDTOOFFSET +3, + PATCH_ADDTOOFFSET(+3), 0x31, 0x1c, // bnt [next state check] - PATCH_ADDTOOFFSET +22, + PATCH_ADDTOOFFSET(+22), 0x35, 0x02, // ldi 02 0x65, 0x1c, // aTop 1c (set timer to 2 seconds) 0x33, 0x17, // jmp [end of method] @@ -1553,7 +1553,7 @@ static const uint16 pq1vgaPatchPutGunInLockerBug[] = { 0x35, 0x01, // ldi 01 0x1a, // eq? 0x31, 0x11, // bnt [end of method] - 0x38, PATCH_SELECTOR16 + SELECTOR_put, // pushi "put" + 0x38, PATCH_SELECTOR16(SELECTOR_put), // pushi "put" 0x78, // push1 0x76, // push0 0x81, 0x00, // lag 00 @@ -1573,8 +1573,7 @@ static const uint16 pq1vgaPatchPutGunInLockerBug[] = { // Fixes bug: #5016 static const uint16 pq1vgaSignatureMapSaveRestoreBug[] = { 0x39, 0x04, // pushi 04 - SIG_ADDTOOFFSET +2, // skip either lsg global[f9] or pTos register - //0x89, 0xf9, // lsg global[f9] + SIG_ADDTOOFFSET(+2), // skip either lsg global[f9] or pTos register SIG_MAGICDWORD, 0x38, 0x64, 0x80, // pushi 8064 0x76, // push0 @@ -1584,7 +1583,7 @@ static const uint16 pq1vgaSignatureMapSaveRestoreBug[] = { }; static const uint16 pq1vgaPatchMapSaveRestoreBug[] = { - 0x38, PATCH_SELECTOR16 + SELECTOR_overlay, // pushi "overlay" + 0x38, PATCH_SELECTOR16(SELECTOR_overlay), // pushi "overlay" 0x7a, // push2 0x89, 0xf9, // lsg global[f9] 0x39, 0x64, // pushi 64 (no transition) @@ -1614,7 +1613,7 @@ static const SciScriptPatcherEntry pq1vgaSignatures[] = { // Responsible method: pointBox::doit static const uint16 qfg1vgaSignatureFightEvents[] = { 0x39, SIG_MAGICDWORD, - SIG_SELECTOR8 + SELECTOR_new, // pushi "new" + SIG_SELECTOR8(SELECTOR_new), // pushi "new" 0x76, // push0 0x51, 0x07, // class Event 0x4a, 0x04, // send 04 - call Event::new @@ -1634,7 +1633,7 @@ static const uint16 qfg1vgaSignatureFightEvents[] = { }; static const uint16 qfg1vgaPatchFightEvents[] = { - 0x38, PATCH_SELECTOR16 + SELECTOR_curEvent, // pushi 15a (selector curEvent) + 0x38, PATCH_SELECTOR16(SELECTOR_curEvent), // pushi 15a (selector curEvent) 0x76, // push0 0x81, 0x50, // lag global[50] 0x4a, 0x04, // send 04 - read User::curEvent -> needs one byte more than previous code @@ -1701,13 +1700,13 @@ static const uint16 qfg1vgaSignatureMoveToCrusher[] = { 0x51, 0x1f, // class Motion 0x36, // push 0x39, 0x4f, // pushi 4f (79 - x) - 0x38, SIG_UINT16 + 0xa5, 0x00, // pushi 00a5 (165 - y) + 0x38, SIG_UINT16(0x00a5), // pushi 00a5 (165 - y) 0x7c, // pushSelf SIG_END }; static const uint16 qfg1vgaPatchMoveToCrusher[] = { - PATCH_ADDTOOFFSET +3, + PATCH_ADDTOOFFSET(+3), 0x39, 0x55, // pushi 55 (85 - x) PATCH_END }; @@ -1727,7 +1726,7 @@ static const uint16 qfg1vgaSignatureMoveToCastleGate[] = { }; static const uint16 qfg1vgaPatchMoveToCastleGate[] = { - PATCH_ADDTOOFFSET +3, + PATCH_ADDTOOFFSET(+3), 0x39, 0x72, // pushi 72 (114 - x) PATCH_END }; @@ -1740,10 +1739,10 @@ static const uint16 qfg1vgaPatchMoveToCastleGate[] = { // Fixes bug #6249 static const uint16 qfg1vgaSignatureCheetaurDescription[] = { SIG_MAGICDWORD, - 0x34, SIG_UINT16 + 0xb8, 0x01, // ldi 01b8 + 0x34, SIG_UINT16(0x01b8), // ldi 01b8 0x1a, // eq? 0x31, 0x16, // bnt 16 - 0x38, SIG_UINT16 + 0x27, 0x01, // pushi 0127 + 0x38, SIG_UINT16(0x0127), // pushi 0127 0x39, 0x06, // pushi 06 0x39, 0x03, // pushi 03 0x78, // push1 @@ -1752,7 +1751,7 @@ static const uint16 qfg1vgaSignatureCheetaurDescription[] = { }; static const uint16 qfg1vgaPatchCheetaurDescription[] = { - PATCH_ADDTOOFFSET +14, + PATCH_ADDTOOFFSET(+14), 0x39, 0x11, // pushi 11 -> monster type cheetaur PATCH_END }; @@ -1776,7 +1775,7 @@ static const uint16 qfg1vgaSignatureFunnyRoomFix[] = { 0x3c, // dup 0x35, 0x00, // ldi 00 0x1a, // eq? - 0x30, SIG_UINT16 + 0x25, 0x00, // bnt 0025 [-> next state] + 0x30, SIG_UINT16(0x0025), // bnt 0025 [-> next state] SIG_MAGICDWORD, 0x35, 0x01, // ldi 01 0xa3, 0x4e, // sal 4e @@ -1784,8 +1783,8 @@ static const uint16 qfg1vgaSignatureFunnyRoomFix[] = { }; static const uint16 qfg1vgaPatchFunnyRoomFix[] = { - PATCH_ADDTOOFFSET +3, - 0x2e, PATCH_UINT16 + 0x29, 0x00, // bt 0029 [-> next state] - saves 4 bytes + PATCH_ADDTOOFFSET(+3), + 0x2e, PATCH_UINT16(0x0029), // bt 0029 [-> next state] - saves 4 bytes 0x35, 0x01, // ldi 01 0xa3, 0x4e, // sal 4e 0xa3, 0x05, // sal 05 (sets local 5 to 1) @@ -1822,7 +1821,7 @@ static const SciScriptPatcherEntry qfg1vgaSignatures[] = { // Fixes bug: #5096 static const uint16 qfg2SignatureImportDialog[] = { 0x63, SIG_MAGICDWORD, 0x20, // pToa text - 0x30, SIG_UINT16 + 0x0b, 0x00, // bnt [next state] + 0x30, SIG_UINT16(0x000b), // bnt [next state] 0x7a, // push2 0x39, 0x03, // pushi 03 0x36, // push @@ -1833,7 +1832,7 @@ static const uint16 qfg2SignatureImportDialog[] = { }; static const uint16 qfg2PatchImportDialog[] = { - PATCH_ADDTOOFFSET +5, + PATCH_ADDTOOFFSET(+5), 0x48, // ret PATCH_END }; @@ -1859,7 +1858,7 @@ static const uint16 qfg3SignatureImportDialog[] = { }; static const uint16 qfg3PatchImportDialog[] = { - PATCH_ADDTOOFFSET +4, + PATCH_ADDTOOFFSET(+4), 0x48, // ret PATCH_END }; @@ -1892,9 +1891,9 @@ static const uint16 qfg3SignatureWooDialog[] = { 0x35, 0x9b, // ldi 9b 0x1a, // eq? 0x31, 0x0c, // bnt 0c - 0x38, SIG_SELECTOR16 + SELECTOR_solvePuzzle, // pushi 0297 + 0x38, SIG_SELECTOR16(SELECTOR_solvePuzzle), // pushi 0297 0x7a, // push2 - 0x38, SIG_UINT16 + 0x0c, 0x01, // pushi 010c + 0x38, SIG_UINT16(0x010c), // pushi 010c 0x7a, // push2 0x81, 0x00, // lag 00 0x4a, 0x08, // send 08 @@ -1904,7 +1903,7 @@ static const uint16 qfg3SignatureWooDialog[] = { }; static const uint16 qfg3PatchWooDialog[] = { - PATCH_ADDTOOFFSET +0x29, + PATCH_ADDTOOFFSET(+0x29), 0x33, 0x11, // jmp to 0x6a2, the call to hero::solvePuzzle for 0xFFFC PATCH_END }; @@ -1929,13 +1928,13 @@ static const uint16 sq4FloppySignatureEndlessFlight[] = { SIG_MAGICDWORD, 0x78, // push1 0x67, 0x08, // pTos 08 (property x) - 0x63, SIG_ADDTOOFFSET + 1, // pToa (invalid property) - 44h for English floppy, 4ch for German floppy + 0x63, SIG_ADDTOOFFSET(+1), // pToa (invalid property) - 44h for English floppy, 4ch for German floppy 0x02, // add SIG_END }; static const uint16 sq4FloppyPatchEndlessFlight[] = { - PATCH_ADDTOOFFSET +5, + PATCH_ADDTOOFFSET(+5), 0x35, 0x03, // ldi 03 (which would be the content of the property) PATCH_END }; @@ -1967,7 +1966,7 @@ static const uint16 sq4FloppySignatureThrowStuffAtSequelPoliceBug[] = { }; static const uint16 sq4FloppyPatchThrowStuffAtSequelPoliceBug[] = { - PATCH_ADDTOOFFSET +5, + PATCH_ADDTOOFFSET(+5), 0x48, // ret PATCH_END }; @@ -1990,7 +1989,7 @@ static const uint16 sq4CdSignatureTextOptionsButton[] = { }; static const uint16 sq4CdPatchTextOptionsButton[] = { - PATCH_ADDTOOFFSET +7, + PATCH_ADDTOOFFSET(+7), 0x39, 0x0b, // pushi 0x0b PATCH_END }; @@ -2036,7 +2035,7 @@ static const uint16 sq4CdSignatureTextOptions[] = { 0x35, 0x01, // ldi 0x01 0xa1, 0x5a, // sag 0x5a (save acc to global 90) 0x3a, // toss - 0x38, SIG_SELECTOR16 + SELECTOR_show, // pushi 0x00d9 + 0x38, SIG_SELECTOR16(SELECTOR_show), // pushi 0x00d9 0x76, // push0 0x54, 0x04, // self 0x04 0x48, // ret @@ -2056,7 +2055,7 @@ static const uint16 sq4CdPatchTextOptions[] = { 0x35, 0x01, // ldi 0x01 (reset acc to 1) 0xa1, 0x5a, // sag 0x5a (save acc to global 90) 0x33, 0x03, // jmp 0x03 (jump over the wasted bytes below) - 0x34, PATCH_UINT16 + 0x00, 0x00, // ldi 0x0000 (waste 3 bytes) + 0x34, PATCH_UINT16(0x0000), // ldi 0x0000 (waste 3 bytes) 0x3a, // toss // (the rest of the code is the same) PATCH_END @@ -2085,24 +2084,24 @@ static const SciScriptPatcherEntry sq4Signatures[] = { // Responsible method: robotIntoShip::changeState(9) static const uint16 sq1vgaSignatureUlenceFlatsTimepodGfxGlitch[] = { 0x39, - SIG_MAGICDWORD, SIG_SELECTOR8 + SELECTOR_cel, // pushi "cel" + SIG_MAGICDWORD, SIG_SELECTOR8(SELECTOR_cel), // pushi "cel" 0x78, // push1 0x39, 0x0a, // pushi 0x0a (set ship::cel to 10) - 0x38, SIG_UINT16 + 0xa0, 0x00, // pushi 0x00a0 (ship::setLoop) + 0x38, SIG_UINT16(0x00a0), // pushi 0x00a0 (ship::setLoop) SIG_END }; static const uint16 sq1vgaPatchUlenceFlatsTimepodGfxGlitch[] = { - PATCH_ADDTOOFFSET +3, + PATCH_ADDTOOFFSET(+3), 0x39, 0x09, // pushi 0x09 (set ship::cel to 9) PATCH_END }; static const uint16 sq1vgaSignatureEgoShowsCard[] = { SIG_MAGICDWORD, - 0x38, SIG_SELECTOR16 + SELECTOR_timesShownID, // push "timesShownID" + 0x38, SIG_SELECTOR16(SELECTOR_timesShownID), // push "timesShownID" 0x78, // push1 - 0x38, SIG_SELECTOR16 + SELECTOR_timesShownID, // push "timesShownID" + 0x38, SIG_SELECTOR16(SELECTOR_timesShownID), // push "timesShownID" 0x76, // push0 0x51, 0x7c, // class DeltaurRegion 0x4a, 0x04, // send 0x04 (get timesShownID) @@ -2121,7 +2120,7 @@ static const uint16 sq1vgaSignatureEgoShowsCard[] = { // Note that this script patch is merely a reordering of the // instructions in the original script. static const uint16 sq1vgaPatchEgoShowsCard[] = { - 0x38, PATCH_SELECTOR16 + SELECTOR_timesShownID, // push "timesShownID" + 0x38, PATCH_SELECTOR16(SELECTOR_timesShownID), // push "timesShownID" 0x76, // push0 0x51, 0x7c, // class DeltaurRegion 0x4a, 0x04, // send 0x04 (get timesShownID) @@ -2129,7 +2128,7 @@ static const uint16 sq1vgaPatchEgoShowsCard[] = { 0x35, 0x01, // ldi 1 0x02, // add 0x36, // push (this push corresponds to the wrong one above) - 0x38, PATCH_SELECTOR16 + SELECTOR_timesShownID, // push "timesShownID" + 0x38, PATCH_SELECTOR16(SELECTOR_timesShownID), // push "timesShownID" 0x78, // push1 0x36, // push 0x51, 0x7c, // class DeltaurRegion @@ -2172,7 +2171,7 @@ static const SciScriptPatcherEntry sq1vgaSignatures[] = { static const uint16 sq5SignatureToolboxFix[] = { 0x31, 0x13, // bnt [check for state 1] SIG_MAGICDWORD, - 0x38, SIG_UINT16 + 0xaa, 0x00, // pushi 00aa + 0x38, SIG_UINT16(0x00aa), // pushi 00aa 0x39, 0x05, // pushi 05 0x39, 0x16, // pushi 16 0x76, // push0 @@ -2181,7 +2180,7 @@ static const uint16 sq5SignatureToolboxFix[] = { 0x7c, // pushSelf 0x81, 0x5b, // lag 5b 0x4a, 0x0e, // send 0e - 0x32, SIG_UINT16 + 0x88, 0x00, // jmp [end-of-method] + 0x32, SIG_UINT16(0x0088), // jmp [end-of-method] 0x3c, // dup 0x35, 0x01, // ldi 01 0x1a, // eq? @@ -2191,7 +2190,7 @@ static const uint16 sq5SignatureToolboxFix[] = { static const uint16 sq5PatchToolboxFix[] = { 0x31, 0x41, // bnt [check for state 2] - PATCH_ADDTOOFFSET +16, // skip to jmp offset + PATCH_ADDTOOFFSET(+16), // skip to jmp offset 0x35, 0x01, // ldi 01 0x65, 0x14, // aTop [state] 0x36, 0x00, 0x00, // ldi 0000 (waste 3 bytes) @@ -2242,7 +2241,7 @@ void ScriptPatcher::applyPatch(const SciScriptPatcherEntry *patchEntry, byte *sc uint16 patchCommand = patchWord & PATCH_COMMANDMASK; uint16 patchValue = patchWord & PATCH_VALUEMASK; switch (patchCommand) { - case PATCH_ADDTOOFFSET: { + case PATCH_codeADDTOOFFSET: { // add value to offset offset += patchValue; break; @@ -2266,13 +2265,13 @@ void ScriptPatcher::applyPatch(const SciScriptPatcherEntry *patchEntry, byte *sc offset++; break; } - case PATCH_UINT16: - case PATCH_SELECTOR16: { + case PATCH_codeUINT16: + case PATCH_codeSELECTOR16: { byte byte1; byte byte2; switch (patchCommand) { - case PATCH_UINT16: { + case PATCH_codeUINT16: { byte1 = patchValue & PATCH_BYTEMASK; patchData++; patchWord = *patchData; if (patchWord & PATCH_COMMANDMASK) @@ -2280,7 +2279,7 @@ void ScriptPatcher::applyPatch(const SciScriptPatcherEntry *patchEntry, byte *sc byte2 = patchWord & PATCH_BYTEMASK; break; } - case PATCH_SELECTOR16: { + case PATCH_codeSELECTOR16: { patchSelector = _selectorIdTable[patchValue]; byte1 = patchSelector & 0xFF; byte2 = patchSelector >> 8; @@ -2299,7 +2298,7 @@ void ScriptPatcher::applyPatch(const SciScriptPatcherEntry *patchEntry, byte *sc } break; } - case PATCH_SELECTOR8: { + case PATCH_codeSELECTOR8: { patchSelector = _selectorIdTable[patchValue]; if (patchSelector & 0xFF00) error("Script-Patcher: 8 bit selector required, game uses 16 bit selector"); @@ -2307,7 +2306,7 @@ void ScriptPatcher::applyPatch(const SciScriptPatcherEntry *patchEntry, byte *sc offset++; break; } - case PATCH_BYTE: + case PATCH_codeBYTE: scriptData[offset] = patchValue & PATCH_BYTEMASK; offset++; } @@ -2338,19 +2337,19 @@ int32 ScriptPatcher::findSignature(const SciScriptPatcherEntry *patchEntry, SciS uint16 sigCommand = sigWord & SIG_COMMANDMASK; uint16 sigValue = sigWord & SIG_VALUEMASK; switch (sigCommand) { - case SIG_ADDTOOFFSET: { + case SIG_codeADDTOOFFSET: { // add value to offset byteOffset += sigValue; break; } - case SIG_UINT16: - case SIG_SELECTOR16: { + case SIG_codeUINT16: + case SIG_codeSELECTOR16: { if ((byteOffset + 1) < scriptSize) { byte byte1; byte byte2; switch (sigCommand) { - case SIG_UINT16: { + case SIG_codeUINT16: { byte1 = sigValue & SIG_BYTEMASK; signatureData++; sigWord = *signatureData; if (sigWord & SIG_COMMANDMASK) @@ -2358,7 +2357,7 @@ int32 ScriptPatcher::findSignature(const SciScriptPatcherEntry *patchEntry, SciS byte2 = sigWord & SIG_BYTEMASK; break; } - case SIG_SELECTOR16: { + case SIG_codeSELECTOR16: { sigSelector = _selectorIdTable[sigValue]; byte1 = sigSelector & 0xFF; byte2 = sigSelector >> 8; @@ -2381,7 +2380,7 @@ int32 ScriptPatcher::findSignature(const SciScriptPatcherEntry *patchEntry, SciS } break; } - case SIG_SELECTOR8: { + case SIG_codeSELECTOR8: { if (byteOffset < scriptSize) { sigSelector = _selectorIdTable[sigValue]; if (sigSelector & 0xFF00) @@ -2394,7 +2393,7 @@ int32 ScriptPatcher::findSignature(const SciScriptPatcherEntry *patchEntry, SciS } break; } - case SIG_BYTE: + case SIG_codeBYTE: if (byteOffset < scriptSize) { if (scriptData[byteOffset] != sigWord) sigWord = SIG_MISMATCH; @@ -2476,17 +2475,17 @@ void ScriptPatcher::initSignature(const SciScriptPatcherEntry *patchTable, bool } break; } - case SIG_ADDTOOFFSET: { + case SIG_codeADDTOOFFSET: { magicOffset -= curValue; if (magicDWordLeft) error("Script-Patcher: Magic-DWORD contains AddToOffset command\nFaulty patch: '%s'", curEntry->description); break; } - case SIG_UINT16: - case SIG_SELECTOR16: { + case SIG_codeUINT16: + case SIG_codeSELECTOR16: { // UINT16 or 1 switch (curCommand) { - case SIG_UINT16: { + case SIG_codeUINT16: { curData++; curWord = *curData; if (curWord & SIG_COMMANDMASK) error("Script-Patcher: signature entry inconsistent\nFaulty patch: '%s'", curEntry->description); @@ -2499,7 +2498,7 @@ void ScriptPatcher::initSignature(const SciScriptPatcherEntry *patchTable, bool } break; } - case SIG_SELECTOR16: { + case SIG_codeSELECTOR16: { curSelector = _selectorIdTable[curValue]; if (curSelector == -1) { curSelector = g_sci->getKernel()->findSelector(selectorNameTable[curValue]); @@ -2530,9 +2529,9 @@ void ScriptPatcher::initSignature(const SciScriptPatcherEntry *patchTable, bool } break; } - case SIG_BYTE: - case SIG_SELECTOR8: { - if (curCommand == SIG_SELECTOR8) { + case SIG_codeBYTE: + case SIG_codeSELECTOR8: { + if (curCommand == SIG_codeSELECTOR8) { curSelector = _selectorIdTable[curValue]; if (curSelector == -1) { curSelector = g_sci->getKernel()->findSelector(selectorNameTable[curValue]); diff --git a/engines/sci/engine/script_patches.h b/engines/sci/engine/script_patches.h index 5d3ee22f7a..d634db8089 100644 --- a/engines/sci/engine/script_patches.h +++ b/engines/sci/engine/script_patches.h @@ -27,41 +27,47 @@ namespace Sci { -#define SIG_END 0xFFFF -#define SIG_MISMATCH 0xFFFE -#define SIG_COMMANDMASK 0xF000 -#define SIG_VALUEMASK 0x0FFF -#define SIG_BYTEMASK 0x00FF -#define SIG_MAGICDWORD 0xF000 -#define SIG_ADDTOOFFSET 0xE000 -#define SIG_SELECTOR16 0x9000 -#define SIG_SELECTOR8 0x8000 -#define SIG_UINT16 0x1000 -#define SIG_BYTE 0x0000 - -#define PATCH_END SIG_END -#define PATCH_COMMANDMASK SIG_COMMANDMASK -#define PATCH_VALUEMASK SIG_VALUEMASK -#define PATCH_BYTEMASK SIG_BYTEMASK -#define PATCH_ADDTOOFFSET SIG_ADDTOOFFSET -#define PATCH_GETORIGINALBYTE 0xD000 -#define PATCH_GETORIGINALBYTEADJUST 0xC000 -#define PATCH_SELECTOR16 SIG_SELECTOR16 -#define PATCH_SELECTOR8 SIG_SELECTOR8 -#define PATCH_UINT16 SIG_UINT16 -#define PATCH_BYTE SIG_BYTE +// Please do not use the #defines, that are called SIG_code* / PATCH_code* inside signature/patch-tables +#define SIG_END 0xFFFF +#define SIG_MISMATCH 0xFFFE +#define SIG_COMMANDMASK 0xF000 +#define SIG_VALUEMASK 0x0FFF +#define SIG_BYTEMASK 0x00FF +#define SIG_MAGICDWORD 0xF000 +#define SIG_codeADDTOOFFSET 0xE000 +#define SIG_ADDTOOFFSET(_offset_) SIG_codeADDTOOFFSET | _offset_ +#define SIG_codeSELECTOR16 0x9000 +#define SIG_SELECTOR16(_selectorID_) SIG_codeSELECTOR16 | _selectorID_ +#define SIG_codeSELECTOR8 0x8000 +#define SIG_SELECTOR8(_selectorID_) SIG_codeSELECTOR8 | _selectorID_ +#define SIG_codeUINT16 0x1000 +#define SIG_UINT16(_value_) SIG_codeUINT16 | (_value_ & 0xFF), (_value_ >> 8) +#define SIG_codeBYTE 0x0000 + +#define PATCH_END SIG_END +#define PATCH_COMMANDMASK SIG_COMMANDMASK +#define PATCH_VALUEMASK SIG_VALUEMASK +#define PATCH_BYTEMASK SIG_BYTEMASK +#define PATCH_codeADDTOOFFSET SIG_codeADDTOOFFSET +#define PATCH_ADDTOOFFSET(_offset_) SIG_codeADDTOOFFSET | _offset_ +#define PATCH_GETORIGINALBYTE 0xD000 +#define PATCH_GETORIGINALBYTEADJUST 0xC000 +#define PATCH_codeSELECTOR16 SIG_codeSELECTOR16 +#define PATCH_SELECTOR16(_selectorID_) SIG_codeSELECTOR16 | _selectorID_ +#define PATCH_codeSELECTOR8 SIG_codeSELECTOR8 +#define PATCH_SELECTOR8(_selectorID_) SIG_codeSELECTOR8 | _selectorID_ +#define PATCH_codeUINT16 SIG_codeUINT16 +#define PATCH_UINT16(_value_) SIG_codeUINT16 | (_value_ & 0xFF), (_value_ >> 8) +#define PATCH_codeBYTE SIG_codeBYTE // defines maximum scratch area for getting original bytes from unpatched script data #define PATCH_VALUELIMIT 4096 struct SciScriptPatcherEntry { bool defaultActive; -// bool active; uint16 scriptNr; const char *description; int16 applyCount; -// uint32 magicDWord; -// int magicOffset; const uint16 *signatureData; const uint16 *patchData; }; -- cgit v1.2.3