aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/script_patches.cpp58
1 files changed, 29 insertions, 29 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index 1de0342672..738f2acfd0 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -987,9 +987,10 @@ static const uint16 gk1Day6PoliceSleepPatch[] = {
// if the player has the drum book and runs the veve dialogue if so.
//
// We fix both of these issues by skipping the has-drum-book check if the player
-// just got the drum book. Doing this causes the game to jump from state 1 to
-// state 12, which bypasses the duplicate drum book dialogue in state 11, as
-// well as the veve dialogue trigger in the has-drum-book check.
+// just got the drum book in 'GetTheVeve::changeState(1)'.
+// Doing this causes the game to jump from state 1 to state 12, which bypasses
+// the duplicate drum book dialogue in state 11, as well as the veve dialogue
+// trigger in the has-drum-book check.
//
// More notes: The veve newspaper item is inventory 9. The drum book is
// inventory 14. The flag for veve research is 36, the flag for drum
@@ -999,7 +1000,6 @@ static const uint16 gk1Day6PoliceSleepPatch[] = {
// research on this and even found this game bug originally.
//
// Applies to at least: English PC-CD, German PC-CD
-// Responsible method: getTheVeve::changeState(1)
static const uint16 gk1Day5DrumBookDialogueSignature[] = {
0x31, 0x0b, // bnt [skip giving player drum book code]
0x38, SIG_SELECTOR16(get), // pushi $200 (get)
@@ -1133,10 +1133,9 @@ static const SciScriptPatcherEntry gk1Signatures[] = {
// The down scroll button in GK2 jumps up a pixel on mousedown because there is
// a send to scrollSelections using an immediate value 1, which means to scroll
// up by 1 pixel. This patch fixes the send to scrollSelections by passing the
-// button's delta instead of 1.
+// button's delta instead of 1 in 'ScrollButton::track'.
//
// Applies to at least: English CD 1.00, English Steam 1.01
-// Responsible method: ScrollButton::track
static const uint16 gk2InvScrollSignature[] = {
0x7e, SIG_ADDTOOFFSET(2), // line whatever
SIG_MAGICDWORD,
@@ -1158,8 +1157,8 @@ static const uint16 gk2InvScrollPatch[] = {
PATCH_END
};
-// The init code that runs when GK2 starts up unconditionally resets the
-// music volume to 63, but the game should always use the volume stored in
+// The init code 'GK2::init' that runs when GK2 starts up unconditionally resets
+// the music volume to 63, but the game should always use the volume stored in
// ScummVM.
// Applies to at least: English 1.00 CD
static const uint16 gk2VolumeResetSignature[] = {
@@ -1174,8 +1173,9 @@ static const uint16 gk2VolumeResetPatch[] = {
PATCH_END
};
-// GK2 has custom video benchmarking code that needs to be disabled; see
-// sci2BenchmarkSignature
+// GK2 has custom video benchmarking code that needs to be disabled in a subroutine
+// which is called from 'GK2::init'; see sci2BenchmarkSignature
+// TODO: Patch is not applied to localized versions and needs to get adjusted
static const uint16 gk2BenchmarkSignature[] = {
0x7e, SIG_ADDTOOFFSET(+2), // line
0x38, SIG_SELECTOR16(new), // pushi new
@@ -2021,8 +2021,9 @@ static const SciScriptPatcherEntry kq6Signatures[] = {
// the bottom of the game area, and force it to always use black & white, which
// are guaranteed to not be changed by game scripts.
//
+// We make 2 changes to KQNarrator::init and one to Narrator::say.
+//
// Applies to at least: PC CD 1.4 English, 1.51 English, 1.51 German, 2.00 English
-// Patched method: KQNarrator::init
static const uint16 kq7SubtitleFixSignature1[] = {
SIG_MAGICDWORD,
0x39, SIG_SELECTOR8(fore), // pushi $25 (fore)
@@ -2047,7 +2048,6 @@ static const uint16 kq7SubtitleFixPatch1[] = {
};
// Applies to at least: PC CD 1.51 English, 1.51 German, 2.00 English
-// Patched method: Narrator::init
static const uint16 kq7SubtitleFixSignature2[] = {
SIG_MAGICDWORD,
0x89, 0x5a, // lsg global[$5a]
@@ -2097,7 +2097,6 @@ static const uint16 kq7SubtitleFixPatch2[] = {
};
// Applies to at least: PC CD 1.51 English, 1.51 German, 2.00 English
-// Patched method: Narrator::say
static const uint16 kq7SubtitleFixSignature3[] = {
SIG_MAGICDWORD,
0x63, 0x28, // pToa initialized
@@ -2140,8 +2139,8 @@ static const uint16 kq7SubtitleFixPatch3[] = {
PATCH_END
};
-// KQ7 has custom video benchmarking code that needs to be disabled; see
-// sci2BenchmarkSignature
+// KQ7 has custom video benchmarking code that needs to be disabled in a subroutine
+// that is called by KQ7CD::init; see sci2BenchmarkSignature
static const uint16 kq7BenchmarkSignature[] = {
0x38, SIG_SELECTOR16(new), // pushi new
0x76, // push0
@@ -2163,9 +2162,9 @@ static const uint16 kq7BenchmarkPatch[] = {
// When attempting to use an inventory item on an object that does not interact
// with that item, the game temporarily displays an X cursor, but does this by
-// spinning for 90000 cycles, which make the duration dependent on CPU speed,
-// maxes out the CPU for no reason, and keeps the engine from polling for events
-// (which may make the window appear nonresponsive to the OS)
+// spinning for 90000 cycles inside 'KQ7CD::pragmaFail', which make the duration
+// dependent on CPU speed, maxes out the CPU for no reason, and keeps the engine
+// from polling for events (which may make the window appear nonresponsive to the OS)
// Applies to at least: KQ7 English 2.00b
static const uint16 kq7PragmaFailSpinSignature[] = {
0x35, 0x00, // ldi 0
@@ -4330,7 +4329,7 @@ static const uint16 pq4CdSpeechAndSubtitlesPatch[] = {
// occurred (which is needed to progress in the game). This is because the game
// checks global $9a (dialogue progress flag) instead of local 3 (badge shown
// flag) when interacting with Barbie. The game uses the same
-// `shoeShoe::changeState` method for showing the shoe to the young woman at the
+// `shoeShoe::changeState(0)` method for showing the shoe to the young woman at the
// bar earlier in the game, and checks local 3 then, so just check local 3 in
// both cases to prevent the game from appearing to be in an unwinnable state
// just because the player interacted in the "wrong" order.
@@ -4391,7 +4390,6 @@ static const uint16 pq4FloppyCityHallDrawGunTimerPatch[] = {
PATCH_END
};
-// stickScr::changeState(0)
static const uint16 pq4FloppyCityHallTellEnemyDropWeaponTimerSignature[] = {
SIG_MAGICDWORD,
0x34, SIG_UINT16(0xb4), // pushi $b4 (180)
@@ -4406,7 +4404,6 @@ static const uint16 pq4FloppyCityHallTellEnemyDropWeaponTimerPatch[] = {
PATCH_END
};
-// dropStick::changeState(5)
static const uint16 pq4FloppyCityHallTellEnemyTurnAroundTimerSignature[] = {
SIG_MAGICDWORD,
0x4a, SIG_UINT16(0x04), // send 4
@@ -4422,7 +4419,6 @@ static const uint16 pq4FloppyCityHallTellEnemyTurnAroundTimerPatch[] = {
PATCH_END
};
-// turnMetz::changeState(5)
static const uint16 pq4FloppyCityHallCuffEnemyTimerSignature[] = {
SIG_MAGICDWORD,
0x34, SIG_UINT16(0x258), // pushi $258 (600)
@@ -5476,7 +5472,7 @@ static const SciScriptPatcherEntry qfg3Signatures[] = {
#pragma mark -
#pragma mark Quest for Glory 4
-// The trap init code incorrectly creates an int array for string data.
+// The 'Trap::init' code incorrectly creates an int array for string data.
// Applies to at least: English CD
static const uint16 qfg4TrapArrayTypeSignature[] = {
0x38, SIG_SELECTOR16(new), // pushi new
@@ -5495,8 +5491,9 @@ static const uint16 qfg4TrapArrayTypePatch[] = {
PATCH_END
};
-// QFG4 has custom video benchmarking code that needs to be disabled; see
-// sci2BenchmarkSignature
+// QFG4 has custom video benchmarking code inside a subroutine, which is called
+// by 'glryInit::init', that needs to be disabled; see sci2BenchmarkSignature
+// Applies to at least: English CD, German Floppy
static const uint16 qfg4BenchmarkSignature[] = {
0x38, SIG_SELECTOR16(new), // pushi new
0x76, // push0
@@ -6247,7 +6244,7 @@ static const SciScriptPatcherEntry sq6Signatures[] = {
#pragma mark -
#pragma mark Torins Passage
-// The init code that runs when Torin starts up unconditionally resets the
+// A subroutine that gets called by 'Torin::init' unconditionally resets the
// audio volumes to defaults, but the game should always use the volume stored
// in ScummVM. This patch is basically identical to the patch for LSL7, except
// that they left line numbers in the LSL7 scripts and changed the music volume.
@@ -6268,7 +6265,7 @@ static const uint16 torinVolumeResetPatch1[] = {
PATCH_END
};
-// The init code that runs when Torin starts up unconditionally resets the
+// A subroutine that gets called by 'Torin::init' unconditionally resets the
// audio volumes to values stored in torin.prf, but the game should always use
// the volume stored in ScummVM. This patch is basically identical to the patch
// for LSL7, except that they left line numbers in the LSL7 scripts.
@@ -6302,14 +6299,17 @@ static const uint16 torinVolumeResetPatch2[] = {
// tries to worm Boogle to the left side of the cave, the game will hang because
// Boogle is on the wrong side of the navigable area barrier and cannot move
// through it to continue the cutscene. This patch fixes the fast-forward code
-// in the seraglio so that Boogle's in-the-bag flag is set when fast forwarding.
-// Applies to at least: English CD
+// 'soBoogleBackUp::ff' in the seraglio so that Boogle's in-the-bag flag is set
+// when fast forwarding.
+// Applies to at least: English CD, Spanish CD
static const uint16 torinSeraglioBoogleFlagSignature[] = {
0x35, 0x00, // ldi 0
SIG_MAGICDWORD,
0xa3, 0x00, // sal 0
0x38, SIG_SELECTOR16(test), // pushi test
SIG_ADDTOOFFSET(0x5a), // all the rest of the method
+ // CHECKME: Spanish version seems to have a total of 0x5d bytes from this point to the ret
+ // FIXME: Check for end of method (e.g. ret) and add different signatures in case localized versions are different
SIG_END
};