[Scummvm-git-logs] scummvm master -> 9a9a13605f543f2bc59fdd6d236986a6d10258d5
sluicebox
noreply at scummvm.org
Fri Dec 15 00:26:08 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
9a9a13605f SCI: Fix SQ1VGA buckazoid inventory crash
Commit: 9a9a13605f543f2bc59fdd6d236986a6d10258d5
https://github.com/scummvm/scummvm/commit/9a9a13605f543f2bc59fdd6d236986a6d10258d5
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2023-12-14T16:26:00-08:00
Commit Message:
SCI: Fix SQ1VGA buckazoid inventory crash
Big thank you to @codengine for discovering this script bug, performing
the script analysis, and developing the initial script patch.
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 40ca807edad..f4fa67c90f1 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -23527,8 +23527,46 @@ static const uint16 sq1vgaSysLoggerHotKeyPatch[] = {
PATCH_END
};
+// On the inventory screen, clicking an item on the buckazoids when there are
+// less than three crashes the game. RInvItem:show picks a message by loading
+// the text resource with the same number as the target item's view property.
+// The problem is that the buckazoid view is dynamic and changes when the count
+// gets low. This causes RInvItem:show to attempt to load a text resource that
+// doesn't exist.
+//
+// We fix this by restoring buckazoid:view after drawing it in inventory.
+// Sierra fixed this bug in the Amiga and Mac versions by resetting the
+// buckazoid view to its original value before handling inventory verbs.
+//
+// Applies to: All versions
+// Responsible method: buckazoid:show
+static const uint16 sq1vgaBuckazoidInventorySignature[] = {
+ SIG_MAGICDWORD,
+ 0x89, 0xa5, // lsg a5 [ buckazoid-count ]
+ 0x35, 0x03, // ldi 03
+ 0x20, // ge? [ buckazoid-count >= 3 ]
+ 0x30, SIG_UINT16(0x0006), // bnt 0006
+ SIG_ADDTOOFFSET(+15),
+ 0x59, 0x01, // &rest 01 [ unnecessary ]
+ 0x57, SIG_ADDTOOFFSET(+1), 0x04,// super RInvItem 04 [ super show: &rest ]
+ SIG_END
+};
+
+static const uint16 sq1vgaBuckazoidInventoryPatch[] = {
+ 0x67, 0x08, // pTos view [ store view ]
+ 0x7a, // push2
+ 0x81, 0xa5, // lag a5 [ buckazoid-count ]
+ 0x22, // lt? [ 2 < buckazoid-count ]
+ 0x31, 0x06, // bnt 06
+ PATCH_ADDTOOFFSET(+15),
+ PATCH_GETORIGINALBYTES(25, 3), // super RInvItem 04 [ super show: ]
+ 0x69, 0x08, // sTop view [ restore view ]
+ PATCH_END
+};
+
// script, description, signature patch
static const SciScriptPatcherEntry sq1vgaSignatures[] = {
+ { true, 0, "buckazoid inventory", 1, sq1vgaBuckazoidInventorySignature, sq1vgaBuckazoidInventoryPatch },
{ true, 0, "remove alt+n syslogger hotkey", 1, sq1vgaSysLoggerHotKeySignature, sq1vgaSysLoggerHotKeyPatch },
{ true, 28, "orat sounds", 1, sq1vgaSignatureOratSounds, sq1vgaPatchOratSounds },
{ true, 40, "taste pink ship", 1, sq1vgaSignatureTastePinkShip, sq1vgaPatchTastePinkShip },
More information about the Scummvm-git-logs
mailing list