[Scummvm-git-logs] scummvm master -> d55e63dbcffda12322e1ac3c10f2bdd790d82e43

bluegr bluegr at gmail.com
Sun Dec 9 13:10:11 CET 2018


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:
d55e63dbcf SCI32: Fix GK1 mummy animation, bug #10828 (#1439)


Commit: d55e63dbcffda12322e1ac3c10f2bdd790d82e43
    https://github.com/scummvm/scummvm/commit/d55e63dbcffda12322e1ac3c10f2bdd790d82e43
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2018-12-09T14:10:08+02:00

Commit Message:
SCI32: Fix GK1 mummy animation, bug #10828 (#1439)

Fixes an animation script bug that occurs in the original

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 8442eeb..2a8e6d8 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -1353,6 +1353,84 @@ static const uint16 gk1Day9VineSwingPatch[] = {
 	PATCH_END
 };
 
+// The mummies on day 9 move without animating if ego exits to the north before
+//  the first one finishes standing. This also occurs in Sierra's interpreter.
+//
+// The 12 outer rooms of the African mound all take place in room 710, which
+//  reinitializes its contents on each room change. Each room's mummy is guard1
+//  repositioned with a different view. When the mummies come to life,
+//  keyWorks:changeState(6) starts guard1's standing animation after which
+//  state 7 initializes guard1 for chasing ego. Ego however can leave before
+//  guard1 finishes standing, preventing state 7 from occurring. The script for
+//  exiting to the north assumes state 7 has run, otherwise guard1 remains on
+//  the wrong view with no cycler or looper in subsequent rooms.
+//
+// This bug is due to the script rightWay only partially initializing guard1 for
+//  chasing as opposed to wrongWay and backTrack which fully initialize. We fix
+//  this by replacing rightWay's partial initialization with the full version
+//  from keyWorks state 7. There are two versions of this patch due to
+//  significant differences between floppy and CD versions of this script.
+//
+// This patch is not applied to the NRS versions of this script, which address
+//  this bug by disabling control until guard1 finishes standing, giving the
+//  player less time to escape.
+//
+// Applies to: All PC Floppy and CD versions. TODO: Test Mac
+// Responsible method: rightWay:changeState(1)
+// Fixes bug #10828
+static const uint16 gk1MummyAnimateFloppySignature[] = {
+    0x39, SIG_SELECTOR8(view),          // pushi view [ full guard1 init ]
+    SIG_MAGICDWORD,
+    0x78,                               // push1
+    0x38, SIG_UINT16(0x02c5),           // pushi 709d
+    SIG_ADDTOOFFSET(+674),
+    0x38, SIG_SELECTOR16(setMotion),    // pushi setMotion [ partial guard1 init ]
+    0x38, SIG_UINT16(0x0004),           // pushi 0004
+    0x51, 0x70,                         // class PChase
+    0x36,                               // push
+    0x89, 0x00,                         // lsg 00
+    0x39, 0x0f,                         // pushi 0f
+    SIG_END
+};
+
+static const uint16 gk1MummyAnimateFloppyPatch[] = {
+    PATCH_ADDTOOFFSET(+680),
+    0x39, PATCH_SELECTOR8(view),        // pushi view [ waste 6 stack items to be compatible with ]
+    0x76,                               // push0      [  the send instruction in full guard1 init ]
+    0x39, PATCH_SELECTOR8(view),        // pushi view
+    0x76,                               // push0
+    0x39, PATCH_SELECTOR8(view),        // pushi view
+    0x39, 00,                           // pushi 00
+    0x32, PATCH_UINT16(0xfd4b),         // jmp -693d [ continue full guard1 init in keyWorks state 7 ]
+    PATCH_END
+};
+
+static const uint16 gk1MummyAnimateCDSignature[] = {
+    0x39, SIG_SELECTOR8(view),          // pushi view [ full guard1 init ]
+    SIG_MAGICDWORD,
+    0x78,                               // push1
+    0x38, SIG_UINT16(0x02c5),           // pushi 709d
+    SIG_ADDTOOFFSET(+750),
+    0x38, SIG_SELECTOR16(setMotion),    // pushi setMotion [ partial guard1 init ]
+    0x38, SIG_UINT16(0x0004),           // pushi 0004
+    0x51, 0x70,                         // class PChase
+    0x36,                               // push
+    0x89, 0x00,                         // lsg 00
+    0x39, 0x0f,                         // pushi 0f
+    SIG_END
+};
+
+static const uint16 gk1MummyAnimateCDPatch[] = {
+    PATCH_ADDTOOFFSET(+756),
+    0x39, PATCH_SELECTOR8(view),        // pushi view [ waste 6 stack items to be compatible with ]
+    0x76,                               // push0      [  the send instruction in full guard1 init ]
+    0x39, PATCH_SELECTOR8(view),        // pushi view
+    0x76,                               // push0
+    0x39, PATCH_SELECTOR8(view),        // pushi view
+    0x39, 00,                           // pushi 00
+    0x32, PATCH_UINT16(0xfcff),         // jmp -769d [ continue full guard1 init in keyWorks state 7 ]
+    PATCH_END
+};
 
 // In GK1, the `view` selector is used to store view numbers in some cases and
 // object references to Views in other cases. `Interrogation::dispose` compares
@@ -2110,6 +2188,8 @@ static const SciScriptPatcherEntry gk1Signatures[] = {
 	{  true,   420, "fix lorelei chair missing message",           1, gk1OperateLoreleiChairSignature,  gk1OperateLoreleiChairPatch },
 	{  true,   420, "fix lorelei money messages",                  1, gk1LoreleiMoneySignature,         gk1LoreleiMoneyPatch },
 	{  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 },
 	{  true,   800, "fix day 10 honfour unlock door lockup",       1, gk1HonfourUnlockDoorSignature,    gk1HonfourUnlockDoorPatch },
 	{  true, 64908, "disable video benchmarking",                  1, sci2BenchmarkSignature,           sci2BenchmarkPatch },
 	{  true, 64990, "increase number of save games (1/2)",         1, sci2NumSavesSignature1,           sci2NumSavesPatch1 },





More information about the Scummvm-git-logs mailing list