[Scummvm-git-logs] scummvm master -> b6d8b7a1d95ebc728d43554f81e3240221c15a53
sluicebox
22204938+sluicebox at users.noreply.github.com
Fri Sep 4 03:11:04 UTC 2020
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:
d9ffa7b3d7 SCI32: Fix SQ6 shuttle cockpit invalid save games
b6d8b7a1d9 SCI32: Fix SQ6 ExitFeature breaking cursors
Commit: d9ffa7b3d7f681c8d2f2929c4878888304bcaa8e
https://github.com/scummvm/scummvm/commit/d9ffa7b3d7f681c8d2f2929c4878888304bcaa8e
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2020-09-03T20:08:23-07:00
Commit Message:
SCI32: Fix SQ6 shuttle cockpit invalid save games
Fixes bug #11673
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 f5fd2bfdf8..9e2f6471e8 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -196,6 +196,8 @@ static const char *const selectorNameTable[] = {
"setLooper", // QFG4
"useStamina", // QFG4
"value", // QFG4
+ "enable", // SQ6
+ "setupExit", // SQ6
"vol", // SQ6
#endif
NULL
@@ -317,6 +319,8 @@ enum ScriptPatcherSelectors {
SELECTOR_setLooper,
SELECTOR_useStamina,
SELECTOR_value,
+ SELECTOR_enable,
+ SELECTOR_setupExit,
SELECTOR_vol
#endif
};
@@ -19225,6 +19229,54 @@ static const uint16 sq6PolysorbateVolumePatch[] = {
PATCH_END
};
+// The shuttle's cockpit initializes the control panel incorrectly if the cursor
+// is Walk. If the game is saved in this state then it won't load because
+// walkIcon0's screen item was deleted even though it's the current icon.
+//
+// We fix this as Sierra did in later versions by setting the current icon to Do
+// when initializing the control panel in room 490.
+//
+// Applies to: English PC 1.0 (TODO: develop a Mac patch)
+// Responsible method: localproc_5c38 in script 490
+// Fixes bug: #11673
+static const uint16 sq6CockpitIconBarSignature[] = {
+ 0x7e, SIG_ADDTOOFFSET(+2), // line
+ 0x38, SIG_SELECTOR16(setupExit), // pushi setupExit
+ 0x78, // push1
+ 0x78, // push1
+ 0x81, 0x45, // lag 45
+ 0x4a, SIG_UINT16(0x0006), // send 06 [ SQIconBar setupExit: 1 ]
+ 0x7e, SIG_ADDTOOFFSET(+2), // line
+ SIG_MAGICDWORD,
+ 0x38, SIG_SELECTOR16(enable), // pushi enable
+ 0x78, // push1
+ 0x76, // push0
+ 0x81, 0x45, // lag 45
+ 0x4a, SIG_UINT16(0x0006), // send 06 [ SQIconBar enable: 0 ]
+ 0x7e, SIG_ADDTOOFFSET(+2), // line
+ SIG_END
+};
+
+static const uint16 sq6CockpitIconBarPatch[] = {
+ 0x38, PATCH_SELECTOR16(curIcon), // pushi curIcon
+ 0x78, // push1
+ 0x39, PATCH_SELECTOR8(at), // pushi at
+ 0x78, // push1
+ 0x7a, // push2
+ 0x81, 0x45, // lag 45
+ 0x4a, PATCH_UINT16(0x0006), // send 06 [ SQIconBar at: 2 ]
+ 0x36, // push
+ 0x38, PATCH_SELECTOR16(setupExit), // pushi setupExit
+ 0x78, // push1
+ 0x78, // push1
+ 0x38, PATCH_SELECTOR16(enable), // pushi enable
+ 0x78, // push1
+ 0x76, // push0
+ 0x81, 0x45, // lag 45
+ 0x4a, PATCH_UINT16(0x0012), // send 12 [ SQIconBar curIcon: doIcon2, setupExit: 1, enable: 0 ]
+ PATCH_END
+};
+
// Narrator lockup fix for SQ6's SQNarrator:sayForReal in versions compiled
// without debug line number instructions, see sciNarratorLockupSignature.
// SQ6 also uses the regular Narrator:say which the generic patches handle.
@@ -19287,6 +19339,7 @@ static const SciScriptPatcherEntry sq6Signatures[] = {
{ true, 330, "fix polysorbate lx music volume", 1, sq6PolysorbateVolumeSignature, sq6PolysorbateVolumePatch },
{ true, 410, "fix slow transitions", 1, sq6SlowTransitionSignature2, sq6SlowTransitionPatch2 },
{ true, 460, "fix invalid array construction", 1, sci21IntArraySignature, sci21IntArrayPatch },
+ { true, 490, "fix invalid cockpit icon bar", 1, sq6CockpitIconBarSignature, sq6CockpitIconBarPatch },
{ true, 500, "fix slow transitions", 1, sq6SlowTransitionSignature1, sq6SlowTransitionPatch1 },
{ true, 510, "fix invalid array construction", 1, sci21IntArraySignature, sci21IntArrayPatch },
{ true, 690, "fix duplicate points", 1, sq6DuplicatePointsSignature, sq6DuplicatePointsPatch },
Commit: b6d8b7a1d95ebc728d43554f81e3240221c15a53
https://github.com/scummvm/scummvm/commit/b6d8b7a1d95ebc728d43554f81e3240221c15a53
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2020-09-03T20:08:23-07:00
Commit Message:
SCI32: Fix SQ6 ExitFeature breaking cursors
Fixes bug #11640
Special thanks to Alien-Grey for reporting this and taking the time
to track down how to trigger this difficult to reproduce bug.
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 9e2f6471e8..c161c0d6a6 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -199,6 +199,7 @@ static const char *const selectorNameTable[] = {
"enable", // SQ6
"setupExit", // SQ6
"vol", // SQ6
+ "walkIconItem", // SQ6
#endif
NULL
};
@@ -321,7 +322,8 @@ enum ScriptPatcherSelectors {
SELECTOR_value,
SELECTOR_enable,
SELECTOR_setupExit,
- SELECTOR_vol
+ SELECTOR_vol,
+ SELECTOR_walkIconItem
#endif
};
@@ -19277,6 +19279,38 @@ static const uint16 sq6CockpitIconBarPatch[] = {
PATCH_END
};
+// The ExitFeature class has a bug which permanently breaks the game's cursors.
+// ExitFeature:doit is responsible for toggling the Walk cursor to and from an
+// Exit cursor. If an ExitFeature's area overlaps with the icon bar and a user
+// mouses from it to the icon bar while the cursor is Exit and clicks on an
+// icon then the new cursor will no longer work. ExitFeature assumes the new
+// icon is Walk and incorrectly sets its message property to Exit, preventing
+// it from ever sending the correct verb again. This occurs in the esophagus
+// where room 640 can be scrolled to a position where the southern ExitFeature
+// is partially under the icon bar.
+//
+// We fix by this by patching ExitFeature to explicitly use the Walk icon
+// instead of assuming that the current icon is always Walk when the cursor is.
+// This assumption is false when SQIconbar is in the middle of changing icons
+// and calls everyone's doit methods.
+//
+// Applies to: All versions
+// Responsible method: ExitFeature:doit
+// Fixes bug: #11640
+static const uint16 sq6ExitFeatureIconSignature[] = {
+ SIG_MAGICDWORD,
+ 0x38, SIG_SELECTOR16(curIcon), // pushi curIcon
+ 0x76, // push0
+ 0x81, 0x45, // lag 45
+ 0x4a, SIG_UINT16(0x0004), // send 04 [ SQIconbar curIcon? ]
+ SIG_END
+};
+
+static const uint16 sq6ExitFeatureIconPatch[] = {
+ 0x38, PATCH_SELECTOR16(walkIconItem), // pushi walkIconItem
+ PATCH_END
+};
+
// Narrator lockup fix for SQ6's SQNarrator:sayForReal in versions compiled
// without debug line number instructions, see sciNarratorLockupSignature.
// SQ6 also uses the regular Narrator:say which the generic patches handle.
@@ -19335,6 +19369,7 @@ static const SciScriptPatcherEntry sq6Signatures[] = {
{ true, 15, "fix hookah hose missing point", 1, sq6HookahHosePointSignature, sq6HookahHosePointPatch },
{ true, 15, "fix invalid array construction", 1, sci21IntArraySignature, sci21IntArrayPatch },
{ true, 22, "fix invalid array construction", 1, sci21IntArraySignature, sci21IntArrayPatch },
+ { true, 31, "fix ExitFeature breaking icons", 2, sq6ExitFeatureIconSignature, sq6ExitFeatureIconPatch },
{ true, 33, "disable video benchmarking", 1, sci2BenchmarkSignature, sci2BenchmarkPatch },
{ true, 330, "fix polysorbate lx music volume", 1, sq6PolysorbateVolumeSignature, sq6PolysorbateVolumePatch },
{ true, 410, "fix slow transitions", 1, sq6SlowTransitionSignature2, sq6SlowTransitionPatch2 },
More information about the Scummvm-git-logs
mailing list