[Scummvm-git-logs] scummvm master -> 032afca6cb7305c7d0974b3d7ecef15a0f536e0e
sluicebox
noreply at scummvm.org
Sat Dec 10 07:31:36 UTC 2022
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f3f90556d4 SCI: Remove SCI32 code from SCI16 kDoAudio
11ca903f60 SCI: Fix LB2 disabled control panel icon
032afca6cb SCI: Fix LB2 CD hands-off cursor
Commit: f3f90556d42855bb8c7f5587f3ea2fa1dca9be55
https://github.com/scummvm/scummvm/commit/f3f90556d42855bb8c7f5587f3ea2fa1dca9be55
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2022-12-09T23:31:16-08:00
Commit Message:
SCI: Remove SCI32 code from SCI16 kDoAudio
Changed paths:
engines/sci/engine/ksound.cpp
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp
index bf79f805b54..3d43a3ec8ae 100644
--- a/engines/sci/engine/ksound.cpp
+++ b/engines/sci/engine/ksound.cpp
@@ -328,11 +328,6 @@ reg_t kDoAudio(EngineState *s, int argc, reg_t *argv) {
// a change. The Narrator class also does this to detect
// if speech was interrupted so that the game can continue.
return make_reg(0, g_sci->_audio->getPlayCounter());
- case 17:
- // Seems to be some sort of audio sync, used in SQ6. Silenced the
- // warning due to the high level of spam it produces. (takes no params)
- //warning("kDoAudio: Unhandled case 17, %d extra arguments passed", argc - 1);
- break;
default:
warning("kDoAudio: Unhandled case %d, %d extra arguments passed", argv[0].toUint16(), argc - 1);
}
Commit: 11ca903f606e0b5d155652e9b8c80f3a4d0ddbec
https://github.com/scummvm/scummvm/commit/11ca903f606e0b5d155652e9b8c80f3a4d0ddbec
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2022-12-09T23:31:16-08:00
Commit Message:
SCI: Fix LB2 disabled control panel icon
Now that we allow arbitrary saving via the Global Main Menu,
we can remove the buggy restrictions that prevented saving
and restoring
Changed paths:
engines/sci/engine/script_patches.cpp
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index 1f27ac8af4f..a851753eb66 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -9642,39 +9642,107 @@ static const uint16 laurabow2CDPatchPaintingClosing[] = {
PATCH_END
};
-// In the CD version the system menu is disabled for certain rooms. LB2::handsOff is called,
-// when leaving the room (and in other cases as well). This method remembers the disabled
-// icons of the icon bar. In the new room LB2::handsOn will get called, which then enables
-// all icons, but also disabled the ones, that were disabled before.
-//
-// Because of this behaviour certain rooms, that should have the system menu enabled, have
-// it disabled, when entering those rooms from rooms, where the menu is supposed to be
-// disabled.
-//
-// We patch this by injecting code into LB2::newRoom (which is called right after a room change)
-// and reset the global variable there, that normally holds the disabled buttons.
-//
-// This patch may cause side-effects and it's difficult to test, because it affects every room
-// in the game. At least for the intro, the speakeasy and plenty of rooms in the beginning it
-// seems to work correctly.
-//
-// Applies to at least: English PC-CD
-// Responsible method: LB2::newRoom, LB2::handsOff, LB2::handsOn
+// The CD version disables the control panel icon in many rooms. It's unclear
+// why this was done; it may have been to conserve memory. Unfortunately, the
+// CD script is quite buggy, and it also disables the icon in other rooms at
+// seemingly random times, preventing saving and restoring in even more places.
+// In ScummVM we allow arbitrary saving and restoring through the Global Main
+// Menu so these restrictions are unnecessary.
+//
+// The CD version attempts to disable the control panel icon by:
+// - Adding code to LB2:handsOn to disable the icon when in a list of 14 rooms.
+// - Adding many calls to IconBar:disable(7) in these rooms.
+// - Removing the code from Inset:dispose that re-enables the icon. This has the
+// side effect of disabling the icon after viewing an inset in any room.
+//
+// These changes don't take into account that handsOff records IconBar state
+// and handsOn restores it. This causes restricted rooms to contaminate others
+// when traveling between them with handsOff scripts such as doors.
+//
+// We remove these restrictions by patching out all of the new CD code and
+// restoring the floppy code in Inset:dispose. We make room by overwriting
+// unnecessary code in Inset:onMe that sets variables and doesn't use them.
+// While we're at it, we also remove IconBar:disable(7) from the vat room (610)
+// and the final passage (740) in all versions. As with the CD restrictions,
+// they're unnecessary and inconsistently applied.
+//
+// Applies to: English PC-CD for most patches, floppy versions for others
+// Responsible methods: LB2:handsOn, Inset:dispose, many others
// Fixes bug: #6440
-static const uint16 laurabow2CDSignatureFixProblematicIconBar[] = {
+static const uint16 laurabow2CDSignatureEnableControlPanel[] = {
+ 0x38, SIG_UINT16(0x00f1), // pushi disable [ CD selector ]
SIG_MAGICDWORD,
- 0x38, SIG_UINT16(0x00f1), // pushi 00f1 (disable) - hardcoded, we only want to patch the CD version
- 0x76, // push0
- 0x81, 0x45, // lag global[45]
+ 0x78, // push1
+ 0x39, 0x07, // pushi 07
+ 0x81, 0x45, // lag 45
+ 0x4a, 0x06, // send 06 [ IconBar disable: 7 ]
+ SIG_END
+};
+
+static const uint16 laurabow2FloppySignatureEnableControlPanel[] = {
+ 0x38, SIG_UINT16(0x00e9), // pushi disable [ Floppy selector ]
+ SIG_MAGICDWORD,
+ 0x78, // push1
+ 0x39, 0x07, // pushi 07
+ 0x81, 0x45, // lag 45
+ 0x4a, 0x06, // send 06 [ IconBar disable: 7 ]
+ SIG_END
+};
+
+static const uint16 laurabow2PatchEnableControlPanel[] = {
+ 0x32, PATCH_UINT16(0x0007), // jmp 0007
+ PATCH_END
+};
+
+static const uint16 laurabow2CDSignatureInsetEnableControlPanel[] = {
+ // Inset:onMe
+ SIG_MAGICDWORD,
+ 0x3f, 0x02, // link 02
+ 0x78, // push1
+ 0x8f, 0x01, // lsp 01
+ SIG_ADDTOOFFSET(+0x1f),
+ 0x63, 0x18, // pToa view
+ SIG_ADDTOOFFSET(+0x1b5),
+ // Inset:dispose
+ 0x31, 0x12, // bnt 12
+ SIG_ADDTOOFFSET(+2),
+ 0x31, 0x0e, // bnt 0e
+ 0xa5, 0x00, // sat 00
+ 0x35, 0x00, // ldi 00
+ 0x65, 0x28, // aTop caller [ caller = 0 ]
+ SIG_ADDTOOFFSET(+4),
+ 0x85, 0x00, // lat 00
0x4a, 0x04, // send 04
+ 0x48, // ret
SIG_END
};
-static const uint16 laurabow2CDPatchFixProblematicIconBar[] = {
- 0x35, 0x00, // ldi 00
- 0xa1, 0x74, // sag global[74]
- 0x35, 0x00, // ldi 00 (waste bytes)
- 0x35, 0x00, // ldi 00
+static const uint16 laurabow2CDPatchInsetEnableControlPanel[] = {
+ // Inset:onMe
+ PATCH_ADDTOOFFSET(+2),
+ 0xa5, 0x00, // sat 00 [ prevents uninitialized-parameter warning ]
+ 0x33, 0x1e, // jmp 1e [ skip our new code ]
+ 0x67, 0x2a, // pTos owner
+ 0x81, 0x02, // lag 02
+ 0x1a, // eq?
+ 0x31, 0x0a, // bnt 0a
+ 0x38, PATCH_SELECTOR16(enable), // pushi enable
+ 0x78, // pushi
+ 0x39, 0x07, // pushi 07
+ 0x81, 0x45, // lag 45
+ 0x4a, 0x06, // send 06 [ IconBar enable: 7 ]
+ 0x48, // ret
+ PATCH_ADDTOOFFSET(+0x1c3),
+ // Inset:dispose
+ 0x31, 0x10, // bnt 10
+ PATCH_ADDTOOFFSET(+2),
+ 0x31, 0x0c, // bnt 0c
+ PATCH_ADDTOOFFSET(+2),
+ 0x39, 0x00, // pushi 00
+ 0x69, 0x28, // sTop caller [ caller = 0, acc = temp0 ]
+ PATCH_ADDTOOFFSET(+4),
+ 0x4a, 0x04, // send 04
+ 0x32, PATCH_UINT16(0xfe16), // jmp fe16 [ our new code, ret ]
PATCH_END
};
@@ -10857,7 +10925,6 @@ static const uint16 laurabow2CDPatchAudioTextMenuSupport2[] = {
static const SciScriptPatcherEntry laurabow2Signatures[] = {
{ true, 560, "CD: painting closing immediately", 1, laurabow2CDSignaturePaintingClosing, laurabow2CDPatchPaintingClosing },
{ true, 0, "CD/Floppy: museum music volume", 1, laurabow2SignatureMuseumMusicVolume, laurabow2PatchMuseumMusicVolume },
- { true, 0, "CD: fix problematic icon bar", 1, laurabow2CDSignatureFixProblematicIconBar, laurabow2CDPatchFixProblematicIconBar },
{ true, 26, "CD: fix act 4 wrong music", 1, laurabow2CDSignatureFixAct4WrongMusic, laurabow2CDPatchFixAct4WrongMusic },
{ true, 90, "CD: fix yvette's tut response", 1, laurabow2CDSignatureFixYvetteTutResponse, laurabow2CDPatchFixYvetteTutResponse },
{ true, 110, "CD: fix intro music", 1, laurabow2CDSignatureFixIntroMusic, laurabow2CDPatchFixIntroMusic },
@@ -10892,6 +10959,21 @@ static const SciScriptPatcherEntry laurabow2Signatures[] = {
{ true, 28, "disable speed test", 1, sci11SpeedTestSignature, sci11SpeedTestPatch },
{ true, 120, "CD: disable intro volume change in text mode", 1, laurabow2CDSignatureIntroVolumeChange, laurabow2CDPatchIntroVolumeChange },
{ true, 928, "Narrator lockup fix", 1, sciNarratorLockupSignature, sciNarratorLockupPatch },
+ { false, 0, "CD: enable control panel", 1, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 310, "CD: enable control panel", 1, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 441, "CD: enable control panel", 2, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 454, "CD: enable control panel", 7, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 520, "CD: enable control panel", 13, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 550, "CD: enable control panel", 8, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 610, "CD: enable control panel", 3, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 700, "CD: enable control panel", 6, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 710, "CD: enable control panel", 1, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 730, "CD: enable control panel", 5, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 740, "CD: enable control panel", 4, laurabow2CDSignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 923, "CD: enable control panel", 1, laurabow2CDSignatureInsetEnableControlPanel, laurabow2CDPatchInsetEnableControlPanel },
+ { false, 610, "Floppy: enable control panel", 3, laurabow2FloppySignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 730, "Floppy: enable control panel", 5, laurabow2FloppySignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
+ { false, 740, "Floppy: enable control panel", 3, laurabow2FloppySignatureEnableControlPanel, laurabow2PatchEnableControlPanel },
// King's Quest 6 and Laura Bow 2 share basic patches for audio + text support
{ false, 924, "CD: audio + text support 1", 1, kq6laurabow2CDSignatureAudioTextSupport1, kq6laurabow2CDPatchAudioTextSupport1 },
{ false, 924, "CD: audio + text support 2", 1, kq6laurabow2CDSignatureAudioTextSupport2, kq6laurabow2CDPatchAudioTextSupport2 },
@@ -24727,6 +24809,10 @@ void ScriptPatcher::processScript(uint16 scriptNr, SciSpan<byte> scriptData) {
// Enables Dual mode patches (audio + subtitles at the same time) for Laura Bow 2
enablePatch(signatureTable, "CD: audio + text support");
+
+ enablePatch(signatureTable, "CD: enable control panel");
+ } else {
+ enablePatch(signatureTable, "Floppy: enable control panel");
}
break;
case GID_QFG4:
Commit: 032afca6cb7305c7d0974b3d7ecef15a0f536e0e
https://github.com/scummvm/scummvm/commit/032afca6cb7305c7d0974b3d7ecef15a0f536e0e
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2022-12-09T23:31:17-08:00
Commit Message:
SCI: Fix LB2 CD hands-off cursor
Changed paths:
engines/sci/engine/script_patches.cpp
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index a851753eb66..068e18b39f3 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -147,6 +147,7 @@ static const char *const selectorNameTable[] = {
"loop", // Laura Bow 1 Colonel's Bequest, QFG4
"setLoop", // Laura Bow 1 Colonel's Bequest, QFG4
"ignoreActors", // Laura Bow 1 Colonel's Bequest
+ "saveCursor", // Laura Bow 2 CD
"setVol", // Laura Bow 2 CD
"at", // Longbow, QFG4
"owner", // Longbow, QFG4
@@ -287,6 +288,7 @@ enum ScriptPatcherSelectors {
SELECTOR_loop,
SELECTOR_setLoop,
SELECTOR_ignoreActors,
+ SELECTOR_saveCursor,
SELECTOR_setVol,
SELECTOR_at,
SELECTOR_owner,
@@ -9746,6 +9748,61 @@ static const uint16 laurabow2CDPatchInsetEnableControlPanel[] = {
PATCH_END
};
+// The CD version frequently displays the hands-off cursor when the player has
+// control. This occurs when speech is enabled. For example: climbing down a
+// vat ladder or picking up items like the charcoal, wire cutters, or lasso.
+//
+// When re-enabling control and displaying a message at the same time, scripts
+// are supposed to call handsOn before saying the message, otherwise the wrong
+// cursor is shown while the message is displayed. In LB2, this also applies to
+// ego:get, because it also says "You pick it up and place it in your purse."
+// Many scripts call these in the wrong order. In the floppy version this had
+// little effect, but the CD version added speech code to Narrator that records
+// and restores the previous cursor. If handsOn is called after say then the
+// Narrator restores the hands-off cursor when the speech eventually completes.
+//
+// We fix this by adding code to handsOn that detects if a Narrator is saying a
+// message, and if so, updates its saveCursor to the correct previous cursor.
+// We make room by overwriting the large list of rooms that handsOn attempts to
+// disable the control panel icon in. This list is unused because we patch out
+// that restriction. See also: laurabow2PatchEnableControlPanel
+//
+// Applies to: English PC-CD
+// Responsible method: LB2:handsOn
+static const uint16 laurabow2CDSignatureFixHandsOffCursor[] = {
+ SIG_MAGICDWORD,
+ 0x39, 0x0f, // pushi 0f [ OneOf parameter count ]
+ 0x89, 0x0b, // lsg 0b [ roomNumber ]
+ SIG_ADDTOOFFSET(+42),
+ 0x46, SIG_UINT16(0x03e7), // calle 999 0005 1e [ OneOf roomNumber ... ]
+ SIG_UINT16(0x0005), 0x1e,
+ 0x31, 0x0a, // bnt 0a
+ SIG_END
+};
+
+static const uint16 laurabow2CDPatchFixHandsOffCursor[] = {
+ 0x81, 0x54, // lag 54 [ fastCast ]
+ 0x31, 0x3c, // bnt 3c [ skip if no message ]
+ 0x39, PATCH_SELECTOR8(at), // pushi at
+ 0x78, // push1
+ 0x76, // push0
+ 0x4a, 0x06, // send 06 [ fastCast at: 0 ]
+ 0x31, 0x34, // bnt 34 [ skip if no Narrator ]
+ 0xa1, 0x61, // sag 61 [ store Narrator in unused global ]
+ 0x81, 0x79, // lag 79 [ icon when handsOff was called ]
+ 0x31, 0x2e, // bnt 2e [ skip if no icon is set ]
+ 0x39, PATCH_SELECTOR8(cursor), // pushi cursor
+ 0x76, // push0
+ 0x4a, 0x04, // send 04 [ icon cursor? ]
+ 0x38, PATCH_SELECTOR16(saveCursor), // pushi saveCursor
+ 0x78, // push1
+ 0x36, // push
+ 0x81, 0x61, // lag 61
+ 0x4a, 0x06, // send 06 [ Narrator saveCursor: previous icon cursor ]
+ 0x33, 0x1e, // jmp 1e
+ PATCH_END
+};
+
// LB2 CD responds with the wrong message when asking Yvette about Tut in acts 3+.
//
// aYvette:doVerb(6) tests flag 134, which is set when Pippin dies, to determine
@@ -10924,6 +10981,7 @@ static const uint16 laurabow2CDPatchAudioTextMenuSupport2[] = {
// script, description, signature patch
static const SciScriptPatcherEntry laurabow2Signatures[] = {
{ true, 560, "CD: painting closing immediately", 1, laurabow2CDSignaturePaintingClosing, laurabow2CDPatchPaintingClosing },
+ { true, 0, "CD: fix hands-off cursor", 1, laurabow2CDSignatureFixHandsOffCursor, laurabow2CDPatchFixHandsOffCursor },
{ true, 0, "CD/Floppy: museum music volume", 1, laurabow2SignatureMuseumMusicVolume, laurabow2PatchMuseumMusicVolume },
{ true, 26, "CD: fix act 4 wrong music", 1, laurabow2CDSignatureFixAct4WrongMusic, laurabow2CDPatchFixAct4WrongMusic },
{ true, 90, "CD: fix yvette's tut response", 1, laurabow2CDSignatureFixYvetteTutResponse, laurabow2CDPatchFixYvetteTutResponse },
More information about the Scummvm-git-logs
mailing list