[Scummvm-git-logs] scummvm branch-2-2 -> ce23e90eb8b2cbbeacc9b1646152e03485af69de
sluicebox
22204938+sluicebox at users.noreply.github.com
Sat Sep 19 04:02:55 UTC 2020
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:
635b2009ae SCI32: Fix GK1 Jackson Square cursor bugs
1502fbffa1 SCI32: Enable GK1 Windows videos at bayou ritual
ce23e90eb8 SCI32: Fix GK1 Day 6 envelope lockup
Commit: 635b2009aec5239fa5595cc8fc3ac43e1d6cad1f
https://github.com/scummvm/scummvm/commit/635b2009aec5239fa5595cc8fc3ac43e1d6cad1f
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2020-09-18T21:00:21-07:00
Commit Message:
SCI32: Fix GK1 Jackson Square cursor bugs
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 c161c0d6a6..102b89e635 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -3543,6 +3543,80 @@ static const uint16 gk1LoreleiDanceTimerPatch[] = {
PATCH_END
};
+// When walking between rooms in Jackson Square, the cursor is often initialized
+// to the wrong view, even though it's really the Walk cursor. This seemingly
+// random event with many variations is due to a bug in the ExitFeature class.
+//
+// ExitFeature is responsible for swapping the cursor with an Exit cursor when
+// the mouse is over it and then restoring afterwards. The previous cursor is
+// stored in ExitFeature:lastCursor. The first problem is that ExitFeature:init
+// initializes lastCursor to the current cursor even though the mouse hasn't
+// touched it yet. The second problem is that ExitFeature:dispose restores the
+// cursor to lastCursor if the current cursor is any Exit cursor, including
+// ones it's not responsible for. Entering Jackson Square from the cathedral
+// causes all three ExitFeatures in the room to initialize lastCursor to
+// theWaitCursor (the shield). When exiting the room, the ExitFeatures are
+// disposed in the order they were added, which means northExit disposes first.
+// northExit:lastCursor is still theWaitCursor unless it was moused over.
+// Exiting to another Jackson Square room will cause northExit:dispose to check
+// if the cursor is globeCursor, which represents all Exit cursors, and if so
+// then it will incorrectly restore the cursor to theWaitCursor, preventing
+// the ExitFeature responsible for the room change from correctly restoring.
+//
+// We fix this by patching ExitFeature:dispose to only restore the cursor if
+// its view matches the Exit cursor that it's responsible for.
+//
+// Applies to: All versions
+// Responsible method: ExitFeature:dispose
+static const uint16 gk1ExitFeatureCursorSignature[] = {
+ 0x89, 0x13, // lsg 13 [ current-cursor ]
+ 0x7a, // push2
+ 0x76, // push0
+ 0x78, // push1
+ 0x43, 0x02, SIG_UINT16(0x0004), // callk ScriptID 0 1 [ globeCursor ]
+ 0x1a, // eq?
+ 0x31, 0x0b, // bnt 0b [ skip if current-cursor isn't an exit cursor ]
+ 0x38, SIG_SELECTOR16(setCursor), // pushi setCursor
+ 0x78, // push1
+ 0x67, SIG_ADDTOOFFSET(+1), // pTos lastCursor
+ 0x81, 0x01, // lag 01
+ 0x4a, SIG_UINT16(0x0006), // send 06 [ GK1 setCursor: lastCursor ]
+ SIG_MAGICDWORD,
+ 0x39, SIG_SELECTOR8(delete), // pushi delete
+ 0x78, // push1
+ 0x7c, // pushSelf
+ 0x81, 0xce, // lag ce
+ 0x4a, SIG_UINT16(0x0006), // send 06 [ gk1Exits delete: self ]
+ 0x48, // ret
+ SIG_ADDTOOFFSET(+372),
+ 0x38, SIG_SELECTOR16(setCursor), // pushi setCursor
+ 0x78, // push1
+ 0x67, SIG_ADDTOOFFSET(+1), // pTos lastCursor
+ 0x81, 0x01, // lag 01
+ 0x4a, SIG_UINT16(0x0006), // send 06 [ GK1 setCursor: lastCursor ]
+ 0x35, 0x01, // ldi 01
+ 0x65, SIG_ADDTOOFFSET(+1), // aTop eCursor [ eCursor = 1 ]
+ 0x48, // ret
+ SIG_END
+};
+
+static const uint16 gk1ExitFeatureCursorPatch[] = {
+ 0x39, PATCH_SELECTOR8(delete), // pushi delete
+ 0x78, // push1
+ 0x7c, // pushSelf
+ 0x81, 0xce, // lag ce
+ 0x4a, PATCH_UINT16(0x0006), // send 06 [ gk1Exits delete: self ]
+ 0x39, PATCH_SELECTOR8(view), // pushi view
+ 0x76, // push0
+ 0x81, 0x13, // lag 13 [ current-cursor ]
+ 0x4a, PATCH_UINT16(0x0004), // send 04 [ current-cursor: view? ]
+ 0x67, PATCH_GETORIGINALBYTEADJUST(+17, -2), // pTos cursor
+ 0x1a, // eq? [ current-cursor:view == self:cursor ]
+ 0x2e, PATCH_UINT16(0x017e), // bt 017e [ GK1 setCursor: lastCursor ]
+ 0x48, // ret
+ PATCH_END
+};
+
// GK1 Mac is missing view 56, which is the close-up of the talisman. Clicking
// Look on the talisman from inventory is supposed to display an inset with
// view 56 and say a message, but instead this would crash the Mac interpreter.
@@ -3606,6 +3680,7 @@ static const uint16 gk1NarratorLockupPatch[] = {
static const SciScriptPatcherEntry gk1Signatures[] = {
{ true, 0, "remove alt+n syslogger hotkey", 1, gk1SysLoggerHotKeySignature, gk1SysLoggerHotKeyPatch },
{ true, 17, "disable video benchmarking", 1, sci2BenchmarkSignature, sci2BenchmarkPatch },
+ { true, 21, "fix ExitFeature cursor restore", 1, gk1ExitFeatureCursorSignature, gk1ExitFeatureCursorPatch },
{ false, 24, "mac: fix missing talisman view", 1, gk1MacTalismanInsetSignature, gk1MacTalismanInsetPatch },
{ true, 51, "fix interrogation bug", 1, gk1InterrogationBugSignature, gk1InterrogationBugPatch },
{ true, 93, "fix inventory on restart", 1, gk1RestartInventorySignature, gk1RestartInventoryPatch },
Commit: 1502fbffa130b5807636b3a3354554be69e9f047
https://github.com/scummvm/scummvm/commit/1502fbffa130b5807636b3a3354554be69e9f047
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2020-09-18T21:00:30-07:00
Commit Message:
SCI32: Enable GK1 Windows videos at bayou ritual
Fixes bug #9807
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 102b89e635..f02d173679 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -3617,6 +3617,38 @@ static const uint16 gk1ExitFeatureCursorPatch[] = {
PATCH_END
};
+// The Windows CD version never plays its AVI videos during the bayou ritual,
+// instead it runs the view-based slide shows for the floppy versions. The
+// ritual script contains the normal code for playing its AVI and SEQ files
+// depending on kPlatform, just like every video script in the game, except
+// that the initial floppy flag test has been replaced with another kPlatform
+// call which prevents the real platform test from executing.
+//
+// It's unclear if this is a script bug or why it would be intentional, but
+// the end result is that selecting Windows as the platform excludes videos
+// from this one scene whereas selecting DOS doesn't, so we patch the platform
+// tests back to floppy tests like everywhere else and enable the AVI videos.
+//
+// Applies to: All CD versions, though only English versions support Windows
+// Responsible method: roomScript:changeState
+// Fixes bug: #9807
+static const uint16 gk1BayouRitualAviSignature[] = {
+ 0x76, // push0
+ 0x43, 0x68, SIG_UINT16(0x0000), // callk Platform
+ SIG_MAGICDWORD,
+ 0x36, // push
+ 0x35, 0x01, // ldi 01 [ DOS ]
+ 0x1c, // ne?
+ SIG_END
+};
+
+static const uint16 gk1BayouRitualAviPatch[] = {
+ 0x78, // push1
+ 0x38, PATCH_UINT16(0x01d6), // pushi 01d6 [ flag 470 ]
+ 0x47, 0x0d, 0x00, PATCH_UINT16(0x0002), // calle proc13_0 [ is floppy flag set? ]
+ PATCH_END
+};
+
// GK1 Mac is missing view 56, which is the close-up of the talisman. Clicking
// Look on the talisman from inventory is supposed to display an inset with
// view 56 and say a message, but instead this would crash the Mac interpreter.
@@ -3702,6 +3734,7 @@ static const SciScriptPatcherEntry gk1Signatures[] = {
{ true, 410, "fix day 2 binoculars lockup", 1, gk1Day2BinocularsLockupSignature, gk1Day2BinocularsLockupPatch },
{ true, 420, "fix day 6 empty booth message", 6, gk1EmptyBoothMessageSignature, gk1EmptyBoothMessagePatch },
{ true, 420, "fix lorelei dance timer", 1, gk1LoreleiDanceTimerSignature, gk1LoreleiDanceTimerPatch },
+ { true, 480, "win: play day 6 bayou ritual avi videos", 3, gk1BayouRitualAviSignature, gk1BayouRitualAviPatch },
{ true, 710, "fix day 9 vine swing speech playing", 1, gk1Day9VineSwingSignature, gk1Day9VineSwingPatch },
{ true, 710, "fix day 9 mummy animation (floppy)", 1, gk1MummyAnimateFloppySignature, gk1MummyAnimateFloppyPatch },
{ true, 710, "fix day 9 mummy animation (cd)", 1, gk1MummyAnimateCDSignature, gk1MummyAnimateCDPatch },
Commit: ce23e90eb8b2cbbeacc9b1646152e03485af69de
https://github.com/scummvm/scummvm/commit/ce23e90eb8b2cbbeacc9b1646152e03485af69de
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2020-09-18T21:00:39-07:00
Commit Message:
SCI32: Fix GK1 Day 6 envelope lockup
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 f02d173679..1c7fa4bed6 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -3649,6 +3649,47 @@ static const uint16 gk1BayouRitualAviPatch[] = {
PATCH_END
};
+// On day 6, an envelope is dropped off in the bookstore after 20 seconds, but
+// if the game is in the middle of a message sequence then it can lockup.
+// When a timer expires, bookstore:cue tests a number of properties to make
+// sure that it's not interrupting anything, but unlike other rooms such as
+// nwJackson:cue it doesn't test if a message is being said. Looking at Grace
+// triggers one of many message sequences which can prevent ego from completing
+// his turn to face the door, leaving dropTheEnvelope stuck in handsOff mode.
+//
+// We fix this by adding a test to bookstore:cue to verify that a message isn't
+// being said, just like nwJackson:cue. We make room for this by overwriting a
+// redundant handsOff call. This also prevents the florist script from starting
+// in the middle of a message, as this could have similar conflicts.
+//
+// Applies to: All versions
+// Responsible method: bookstore:cue
+static const uint16 gk1Day6EnvelopeSignature[] = {
+ SIG_MAGICDWORD,
+ 0x39, SIG_SELECTOR8(state), // pushi state
+ 0x76, // push0
+ 0x51, SIG_ADDTOOFFSET(+1), // class CueObj
+ 0x4a, SIG_UINT16(0x0004), // send 04 [ CueObj state? ]
+ 0x18, // not
+ 0x31, SIG_ADDTOOFFSET(+1), // bnt [ reset timer ]
+ 0x38, SIG_SELECTOR16(handsOff), // pushi handsOff
+ 0x76, // push0
+ 0x81, 0x01, // lag 01
+ 0x4a, SIG_UINT16(0x0004), // send 04 [ GK1 handsOff: ]
+ SIG_END
+};
+
+static const uint16 gk1Day6EnvelopePatch[] = {
+ PATCH_ADDTOOFFSET(+8),
+ 0x2f, PATCH_GETORIGINALBYTEADJUST(+10, +1), // bt [ reset timer ]
+ 0x39, PATCH_SELECTOR8(size), // pushi size
+ 0x76, // push0
+ 0x81, 0x54, // lag 54
+ 0x4a, PATCH_UINT16(0x0004), // send 04 [ talkers size? ]
+ 0x2f, PATCH_GETORIGINALBYTEADJUST(+10, -9), // bt [ reset timer ]
+ PATCH_END
+};
+
// GK1 Mac is missing view 56, which is the close-up of the talisman. Clicking
// Look on the talisman from inventory is supposed to display an inset with
// view 56 and say a message, but instead this would crash the Mac interpreter.
@@ -3716,6 +3757,7 @@ static const SciScriptPatcherEntry gk1Signatures[] = {
{ false, 24, "mac: fix missing talisman view", 1, gk1MacTalismanInsetSignature, gk1MacTalismanInsetPatch },
{ true, 51, "fix interrogation bug", 1, gk1InterrogationBugSignature, gk1InterrogationBugPatch },
{ true, 93, "fix inventory on restart", 1, gk1RestartInventorySignature, gk1RestartInventoryPatch },
+ { true, 210, "fix day 6 envelope lockup", 2, gk1Day6EnvelopeSignature, gk1Day6EnvelopePatch },
{ true, 211, "fix day 1 grace phone speech timing", 1, gk1Day1GracePhoneSignature, gk1Day1GracePhonePatch },
{ true, 212, "fix day 5 drum book dialogue error", 1, gk1Day5DrumBookDialogueSignature, gk1Day5DrumBookDialoguePatch },
{ true, 212, "fix day 5 phone softlock", 1, gk1Day5PhoneFreezeSignature, gk1Day5PhoneFreezePatch },
More information about the Scummvm-git-logs
mailing list