diff options
-rw-r--r-- | engines/sci/engine/script_patches.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index 255d8dd9a5..0f3f126e66 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -4634,10 +4634,32 @@ static const uint16 kq7PragmaFailSpinPatch[] = { PATCH_END }; +// Room 6100 creates an extra ambrosia, usually floating in upper left of the +// screen, due to an off by one error. The script's local arrays contain four +// ambrosia coordinates but the loop that accesses them iterates five times. +// +// Applies to: All versions +// Responsible method: rm6100:init +// Fixes bug #9790 +static const uint16 kq7ExtraAmbrosiaSignature[] = { + SIG_MAGICDWORD, + 0x8d, 0x00, // lst 00 + 0x35, 0x04, // ldi 04 + 0x24, // le? + SIG_END +}; + +static const uint16 kq7ExtraAmbrosiaPatch[] = { + PATCH_ADDTOOFFSET(+4), + 0x22, // lt? + PATCH_END +}; + // script, description, signature patch static const SciScriptPatcherEntry kq7Signatures[] = { { true, 0, "disable video benchmarking", 1, kq7BenchmarkSignature, kq7BenchmarkPatch }, { true, 0, "remove hardcoded spin loop", 1, kq7PragmaFailSpinSignature, kq7PragmaFailSpinPatch }, + { true, 6100, "fix extra ambrosia", 1, kq7ExtraAmbrosiaSignature, kq7ExtraAmbrosiaPatch }, { true, 31, "enable subtitles (1/3)", 1, kq7SubtitleFixSignature1, kq7SubtitleFixPatch1 }, { true, 64928, "enable subtitles (2/3)", 1, kq7SubtitleFixSignature2, kq7SubtitleFixPatch2 }, { true, 64928, "enable subtitles (3/3)", 1, kq7SubtitleFixSignature3, kq7SubtitleFixPatch3 }, |