diff options
author | Filippos Karapetis | 2010-12-02 13:37:39 +0000 |
---|---|---|
committer | Filippos Karapetis | 2010-12-02 13:37:39 +0000 |
commit | 4fe03f1b664a71c323ba9de16c95e492540a211c (patch) | |
tree | 43830361cb9164cf53cbbf1ea4a2ae49a0e6c8dd | |
parent | 0ac28d1fbf94fddb6c5f38aca91dccdf5915a68c (diff) | |
download | scummvm-rg350-4fe03f1b664a71c323ba9de16c95e492540a211c.tar.gz scummvm-rg350-4fe03f1b664a71c323ba9de16c95e492540a211c.tar.bz2 scummvm-rg350-4fe03f1b664a71c323ba9de16c95e492540a211c.zip |
SCI: Enabled the GUI option to play speech and show subtitles simultaneously in SQ4CD
svn-id: r54736
-rw-r--r-- | engines/sci/engine/script_patches.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index cee733cfe6..1b0c6b4550 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -878,10 +878,82 @@ const uint16 sq4FloppyPatchEndlessFlight[] = { PATCH_END }; +// The scripts in SQ4CD support simultaneous playing of speech and subtitles, +// but this was not available as an option. The following two patches enable +// this functionality in the game's GUI options dialog. +// Patch 1: iconTextSwitch::show, called when the text options button is shown. +// This is patched to add the "Both" text resource (i.e. we end up with +// "Speech", "Text" and "Both") +const byte sq4CdSignatureTextOptionsButton[] = { + 11, + 0x35, 0x01, // ldi 0x01 + 0xa1, 0x53, // sag 0x53 + 0x39, 0x03, // pushi 0x03 + 0x78, // push1 + 0x39, 0x09, // pushi 0x09 + 0x54, 0x06, // self 0x06 + 0 +}; + +const uint16 sq4CdPatchTextOptionsButton[] = { + PATCH_ADDTOOFFSET | +7, + 0x39, 0x0b, // pushi 0x0b + PATCH_END +}; + +// Patch 2: Add the ability to toggle among the three available options, +// when the text options button is clicked: "Speech", "Text" and "Both". +// Refer to the patch above for additional details. +// iconTextSwitch::doit (called when the text options button is clicked) +const byte sq4CdSignatureTextOptions[] = { + 32, + 0x89, 0x5a, // lsg 0x5a (load global 90 to stack) + 0x3c, // dup + 0x35, 0x01, // ldi 0x01 + 0x1a, // eq? (global 90 == 1) + 0x31, 0x06, // bnt 0x06 (0x0691) + 0x35, 0x02, // ldi 0x02 + 0xa1, 0x5a, // sag 0x5a (save acc to global 90) + 0x33, 0x0a, // jmp 0x0a (0x69b) + 0x3c, // dup + 0x35, 0x02, // ldi 0x02 + 0x1a, // eq? (global 90 == 2) + 0x31, 0x04, // bnt 0x04 (0x069b) + 0x35, 0x01, // ldi 0x01 + 0xa1, 0x5a, // sag 0x5a (save acc to global 90) + 0x3a, // toss + 0x38, 0xd9, 0x00, // pushi 0x00d9 + 0x76, // push0 + 0x54, 0x04, // self 0x04 + 0x48, // ret + 0 +}; + +const uint16 sq4CdPatchTextOptions[] = { + 0x89, 0x5a, // lsg 0x5a (load global 90 to stack) + 0x3c, // dup + 0x35, 0x03, // ldi 0x03 (acc = 3) + 0x1a, // eq? (global 90 == 3) + 0x2f, 0x07, // bt 0x07 + 0x89, 0x5a, // lsg 0x5a (load global 90 to stack again) + 0x35, 0x01, // ldi 0x01 (acc = 1) + 0x02, // add: acc = global 90 (on stack) + 1 (previous acc value) + 0x33, 0x02, // jmp 0x02 + 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, 0x00, 0x00, // ldi 0x0000 (waste 3 bytes) + 0x3a, // toss + // (the rest of the code is the same) + PATCH_END +}; + // script, description, magic DWORD, adjust const SciScriptSignature sq4Signatures[] = { { 298, "Floppy: endless flight", 1, PATCH_MAGICDWORD(0x67, 0x08, 0x63, 0x44), -3, sq4FloppySignatureEndlessFlight, sq4FloppyPatchEndlessFlight }, { 298, "Floppy (German): endless flight", 1, PATCH_MAGICDWORD(0x67, 0x08, 0x63, 0x4c), -3, sq4FloppySignatureEndlessFlightGerman, sq4FloppyPatchEndlessFlight }, + { 818, "CD: Speech and subtitles option", 1, PATCH_MAGICDWORD(0x89, 0x5a, 0x3c, 0x35), 0, sq4CdSignatureTextOptions, sq4CdPatchTextOptions }, + { 818, "CD: Speech and subtitles option button", 1, PATCH_MAGICDWORD(0x35, 0x01, 0xa1, 0x53), 0, sq4CdSignatureTextOptionsButton, sq4CdPatchTextOptionsButton }, SCI_SIGNATUREENTRY_TERMINATOR }; |