[Scummvm-git-logs] scummvm master -> 7f0f63670b69756425341d72cffbb9511cecfd9d
sluicebox
noreply at scummvm.org
Fri Oct 14 00:01:32 UTC 2022
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
26d4a53d56 SCI32: Fix LIGHTHOUSE missing birds in tower roost
7f0f63670b SCI32: Fix LIGHTHOUSE animation speed when opening safe
Commit: 26d4a53d56b560d77e8c92e749acecff6a6f3fe6
https://github.com/scummvm/scummvm/commit/26d4a53d56b560d77e8c92e749acecff6a6f3fe6
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2022-10-13T19:01:09-05:00
Commit Message:
SCI32: Fix LIGHTHOUSE missing birds in tower roost
Fixes bug #10265
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 3df8e8cfca6..89b27b0e535 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -183,6 +183,7 @@ static const char *const selectorNameTable[] = {
"back", // KQ7
"font", // KQ7
"setHeading", // KQ7
+ "newPic", // Lighthouse
"setScale", // LSL6hires, QFG4
"setScaler", // LSL6hires, QFG4
"showTitle", // LSL6hires
@@ -321,6 +322,7 @@ enum ScriptPatcherSelectors {
SELECTOR_back,
SELECTOR_font,
SELECTOR_setHeading,
+ SELECTOR_newPic,
SELECTOR_setScale,
SELECTOR_setScaler,
SELECTOR_showTitle,
@@ -7347,11 +7349,82 @@ static const uint16 lighthouseCompassPatch[] = {
PATCH_END
};
+// At the top of the roost tower there can be up to three mechanical birds, but
+// they can appear and disappear inconsistently depending on which direction
+// the player was facing before turning. rm510:changeScene has two bugs that
+// set the wrong scene/pic links on the exit cursors once Birdman has appeared:
+//
+// 1. When facing the ladder (scene 504) and there are 3 birds, exitRight:curPic
+// is set to 7506 (no birds) instead of 7504 (left and broken center bird).
+// 2. When facing right of the perch and there are no birds (scene 502), there
+// is code to handle the bird count being 0, and so exitLeft:curPic is set to
+// 4511 (left and broken center bird) instead of 501 (no birds).
+//
+// We fix this by setting the correct scene/pic view when facing the ladder and
+// adding the missing bird count test when facing right of the perch.
+//
+// Applies to: All versions
+// Responsible method: rm510:changeScene
+// Fixes bug: #10265
+static const uint16 lighthouseRoostBirdPicSignature1[] = {
+ 0x3c, // dup
+ 0x35, 0x03, // ldi 03
+ 0x1a, // eq? [ bird count == 3 ]
+ 0x31, 0x14, // bnt 14
+ 0x38, SIG_SELECTOR16(newPic), // pushi newPic
+ SIG_MAGICDWORD,
+ 0x7a, // push2
+ 0x38, SIG_UINT16(0x1d52), // pushi 1d52 [ no birds ]
+ 0x39, 0x04, // pushi 04
+ 0x7a, // push2
+ 0x78, // push1
+ 0x39, 0x04, // pushi 04
+ 0x43, 0x02, SIG_UINT16(0x0004), // callk ScriptID 04 [ exitRight ]
+ 0x4a, SIG_UINT16(0x0008), // send 08 [ exitRight newPic: 7506 4 ]
+ SIG_END
+};
+
+static const uint16 lighthouseRoostBirdPicPatch1[] = {
+ PATCH_ADDTOOFFSET(+10),
+ 0x38, PATCH_UINT16(0x1d50), // pushi 1d50 [ left bird + broken bird ]
+ PATCH_END
+};
+
+static const uint16 lighthouseRoostBirdPicSignature2[] = {
+ SIG_MAGICDWORD,
+ 0x3c, // dup
+ 0x34, SIG_UINT16(0x01f6), // ldi 01f6
+ 0x1a, // eq? [ is scene 502? ]
+ 0x31, 0x68, // bnt 68
+ 0x78, // push1
+ 0x38, SIG_UINT16(0x0182), // pushi 0182 [ flag 386 ]
+ 0x45, 0x05, SIG_UINT16(0x0002), // callb proc5_2 [ has birdman attacked? ]
+ 0x31, 0x33, // bnt 33 [ no birds to the left ]
+ 0x89, 0xd1, // lsg d1 [ bird count ]
+ 0x35, 0x01, // ldi 01
+ 0x1a, // eq?
+ SIG_END
+};
+
+static const uint16 lighthouseRoostBirdPicPatch2[] = {
+ PATCH_ADDTOOFFSET(+7),
+ 0x89, 0x8c, // lsg 8c [ flag global ]
+ 0x34, PATCH_UINT16(0x2000), // ldi 2000 [ flag 386 ]
+ 0x12, // and [ is flag 386 set? ]
+ 0x31, 0x35, // bnt 35 [ no birds to left ]
+ 0x81, 0xd1, // lag d1 [ bird count ]
+ 0x31, 0x31, // bnt 31 [ no birds to left if bird count == 0 ]
+ 0x39, 0x01, // pushi 01
+ PATCH_END
+};
+
// script, description, signature patch
static const SciScriptPatcherEntry lighthouseSignatures[] = {
{ true, 5, "fix bad globals clear after credits", 1, lighthouseFlagResetSignature, lighthouseFlagResetPatch },
{ true, 9, "fix compass in submarine", 1, lighthouseCompassSignature, lighthouseCompassPatch },
{ true, 360, "fix slow computer memory counter", 1, lighthouseMemoryCountSignature, lighthouseMemoryCountPatch },
+ { true, 510, "fix roost bird pic", 1, lighthouseRoostBirdPicSignature1, lighthouseRoostBirdPicPatch1 },
+ { true, 510, "fix roost bird pic", 1, lighthouseRoostBirdPicSignature2, lighthouseRoostBirdPicPatch2 },
{ true, 64928, "Narrator lockup fix", 1, sciNarratorLockupSignature, sciNarratorLockupPatch },
{ true, 64990, "increase number of save games (1/2)", 1, sci2NumSavesSignature1, sci2NumSavesPatch1 },
{ true, 64990, "increase number of save games (2/2)", 1, sci2NumSavesSignature2, sci2NumSavesPatch2 },
Commit: 7f0f63670b69756425341d72cffbb9511cecfd9d
https://github.com/scummvm/scummvm/commit/7f0f63670b69756425341d72cffbb9511cecfd9d
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2022-10-13T19:01:09-05:00
Commit Message:
SCI32: Fix LIGHTHOUSE animation speed when opening safe
Fixes bug #10226
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 89b27b0e535..318d170d203 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -184,6 +184,7 @@ static const char *const selectorNameTable[] = {
"font", // KQ7
"setHeading", // KQ7
"newPic", // Lighthouse
+ "start", // Lighthouse
"setScale", // LSL6hires, QFG4
"setScaler", // LSL6hires, QFG4
"showTitle", // LSL6hires
@@ -323,6 +324,7 @@ enum ScriptPatcherSelectors {
SELECTOR_font,
SELECTOR_setHeading,
SELECTOR_newPic,
+ SELECTOR_start,
SELECTOR_setScale,
SELECTOR_setScaler,
SELECTOR_showTitle,
@@ -7349,6 +7351,47 @@ static const uint16 lighthouseCompassPatch[] = {
PATCH_END
};
+// The script for opening the underwater safe has a timing bug that relies on
+// the original interpreter being too slow to play the robot video at the
+// specified frame rate. In ScummVM this causes the submarine arm animation to
+// be out of sync with the safe door, repeat itself, and end on the wrong cel.
+//
+// openSafe:changeState(0) starts two animations: robot 596 (the safe door) and
+// view 595 (the submarine arm). State 1 cues when the robot completes and
+// resets the view's cel on the assumption that the view's cycler has already
+// completed. But the robot is 50 frames at 2 ticks per frame (100 ticks) while
+// the view is 39 ticks at 6 ticks per frame (234 ticks) so the robot should
+// complete first. This worked in the original interpreter because it wasn't
+// fast enough to run this scene at 2 ticks per frame and because Lighthouse's
+// RobotPlayer script has a bug in its time calculations that amplifies delays
+// when the specified frame rate can't be achieved. This combination caused the
+// the robot to animate slower than specified and complete before the view.
+//
+// We fix this by lowering the robot's specified frame rate to the effective
+// frame rate from the original.
+//
+// Applies to: All versions
+// Responsible Method: openSafe:changeState(0)
+// Fixes bug: #10226
+static const uint16 lighthouseOpenSafeSpeedSignature[] = {
+ 0x39, SIG_SELECTOR8(init), // pushi init
+ SIG_MAGICDWORD,
+ 0x3c, // dup
+ 0x38, SIG_UINT16(0x0254), // pushi 0254 [ view 585 ]
+ SIG_ADDTOOFFSET(+10),
+ 0x38, SIG_SELECTOR16(start), // pushi start
+ 0x7a, // push2
+ 0x78, // push1
+ 0x39, 0x1e, // pushi 1e [ 30 frames per second (100 ticks) ]
+ SIG_END
+};
+
+static const uint16 lighthouseOpenSafeSpeedPatch[] = {
+ PATCH_ADDTOOFFSET(+21),
+ 0x39, 0x0a, // pushi 0a [ 10 frames per second (300 ticks) ]
+ PATCH_END
+};
+
// At the top of the roost tower there can be up to three mechanical birds, but
// they can appear and disappear inconsistently depending on which direction
// the player was facing before turning. rm510:changeScene has two bugs that
@@ -7425,6 +7468,7 @@ static const SciScriptPatcherEntry lighthouseSignatures[] = {
{ true, 360, "fix slow computer memory counter", 1, lighthouseMemoryCountSignature, lighthouseMemoryCountPatch },
{ true, 510, "fix roost bird pic", 1, lighthouseRoostBirdPicSignature1, lighthouseRoostBirdPicPatch1 },
{ true, 510, "fix roost bird pic", 1, lighthouseRoostBirdPicSignature2, lighthouseRoostBirdPicPatch2 },
+ { true, 700, "fix open safe speed", 1, lighthouseOpenSafeSpeedSignature, lighthouseOpenSafeSpeedPatch },
{ true, 64928, "Narrator lockup fix", 1, sciNarratorLockupSignature, sciNarratorLockupPatch },
{ true, 64990, "increase number of save games (1/2)", 1, sci2NumSavesSignature1, sci2NumSavesPatch1 },
{ true, 64990, "increase number of save games (2/2)", 1, sci2NumSavesSignature2, sci2NumSavesPatch2 },
More information about the Scummvm-git-logs
mailing list