aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorsluicebox2018-10-21 18:35:50 -0700
committerFilippos Karapetis2018-10-23 00:07:12 +0300
commit7da548aa1ea873523014376da24dc624b7209466 (patch)
treef86e75c060625305d1ae0c07f31852baeafc1e83 /engines
parent185f01586003f843a10f5f5e5a40a55c42ab22a1 (diff)
downloadscummvm-rg350-7da548aa1ea873523014376da24dc624b7209466.tar.gz
scummvm-rg350-7da548aa1ea873523014376da24dc624b7209466.tar.bz2
scummvm-rg350-7da548aa1ea873523014376da24dc624b7209466.zip
SCI: Disable LB2 speed test
Fixes bug #10761
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/script_patches.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index 6ef2d62128..2c3fe5e914 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -4070,6 +4070,47 @@ static const uint16 laurabow2CDPatchFixBugsWithMeat[] = {
PATCH_END
};
+// LB2 does a speed test during startup (room 28) to determine the initial
+// detail level and to use for pacing later scenes. Even with the highest
+// score the detail level is only set to medium instead of highest like
+// other SCI games.
+//
+// Platforms such as iOS can introduce a lag during game initialization that
+// causes the speed test to occasionally get the lowest score, causing
+// detail to be initialized to lowest and subsequent scenes such as the act 5
+// chase scene to go very slow.
+//
+// We patch startGame:doit to ignore the score and always set the highest detail
+// level and cpu speed so that detail needn't be manually increased and act 5
+// behaves consistently. This also helps touchscreen devices as the game's
+// detail slider is prohibitively difficult to manually set to highest without
+// switching from the default touch mode.
+//
+// Applies to: All Floppy and CD versions
+// Responsible method: startGame:doit/<noname57>
+// Fixes bug #10761
+static const uint16 laurabow2SignatureDisableSpeedTest[] = {
+ 0x89, 0x57, // lsg 87 [ speed test result ]
+ SIG_MAGICDWORD,
+ 0x35, 0x03, // ldi 03 [ low-speed threshold ]
+ 0x24, // le?
+ 0x31, 0x04, // bnt 04
+ 0x35, 0x01, // ldi 01 [ lowest detail ]
+ 0x33, 0x0d, // jmp 0d
+ 0x89, 0x57, // lsg global87 [ speed test result ]
+ SIG_END
+};
+
+static const uint16 laurabow2PatchDisableSpeedTest[] = {
+ 0x38, PATCH_UINT16(0x0005), // pushi 0005
+ 0x81, 0x01, // lag 01
+ 0x4a, 0x06, // send 06 [ LB2:detailLevel = 5, max detail ]
+ 0x35, 0x0f, // ldi 0f
+ 0xa1, 0x57, // sag global87 [ global87 = f, max cpu speed ]
+ 0x33, 0x10, // jmp 10 [ continue init ]
+ PATCH_END
+};
+
// Laura Bow 2 CD resets the audio mode to speech on init/restart
// We already sync the settings from ScummVM (see SciEngine::syncIngameAudioOptions())
// and this script code would make it impossible to see the intro using "dual" mode w/o using debugger command
@@ -4170,6 +4211,7 @@ static const SciScriptPatcherEntry laurabow2Signatures[] = {
{ true, 440, "Floppy: handle armor inset events", 1, laurabow2SignatureHandleArmorInsetEvents, laurabow2PatchHandleArmorInsetEvents },
{ true, 600, "Floppy: fix bugs with meat", 1, laurabow2FloppySignatureFixBugsWithMeat, laurabow2FloppyPatchFixBugsWithMeat },
{ true, 600, "CD: fix bugs with meat", 1, laurabow2CDSignatureFixBugsWithMeat, laurabow2CDPatchFixBugsWithMeat },
+ { true, 28, "CD/Floppy: disable speed test", 1, laurabow2SignatureDisableSpeedTest, laurabow2PatchDisableSpeedTest },
// 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 },