[Scummvm-git-logs] scummvm master -> 8f2da7086c74220869d8da0ae5c01b2999da37fd

bluegr bluegr at gmail.com
Fri Dec 28 14:05:36 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:
8f2da7086c SCI: Fix LB1 attic stairs lockup, bug #9949


Commit: 8f2da7086c74220869d8da0ae5c01b2999da37fd
    https://github.com/scummvm/scummvm/commit/8f2da7086c74220869d8da0ae5c01b2999da37fd
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2018-12-28T15:05:33+02:00

Commit Message:
SCI: Fix LB1 attic stairs lockup, bug #9949

Fixes a lockup in the original game

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 f12b6f5..112e04d 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -116,6 +116,7 @@ static const char *const selectorNameTable[] = {
 	"has",          // King's Quest 6, GK1
 	"modeless",     // King's Quest 6 CD
 	"cycler",       // Space Quest 4 / system selector
+	"loop",         // Laura Bow 1 Colonel's Bequest, QFG4
 	"setLoop",      // Laura Bow 1 Colonel's Bequest, QFG4
 	"ignoreActors", // Laura Bow 1 Colonel's Bequest
 	"at",           // Longbow
@@ -158,7 +159,6 @@ static const char *const selectorNameTable[] = {
 	"plane",        // RAMA
 	"state",        // RAMA
 	"getSubscriberObj", // RAMA
-	"loop",         // QFG4
 	"moveSpeed",    // QFG4
 	"setLooper",    // QFG4
 	"value",        // QFG4
@@ -201,6 +201,7 @@ enum ScriptPatcherSelectors {
 	SELECTOR_has,
 	SELECTOR_modeless,
 	SELECTOR_cycler,
+	SELECTOR_loop,
 	SELECTOR_setLoop,
 	SELECTOR_ignoreActors,
 	SELECTOR_at,
@@ -244,7 +245,6 @@ enum ScriptPatcherSelectors {
 	SELECTOR_plane,
 	SELECTOR_state,
 	SELECTOR_getSubscriberObj,
-	SELECTOR_loop,
 	SELECTOR_moveSpeed,
 	SELECTOR_setLooper,
 	SELECTOR_value
@@ -4630,6 +4630,39 @@ static const uint16 laurabow1PatchObstacleCollisionLockupsFix[] = {
 	PATCH_END
 };
 
+// Laura can get stuck walking up the attic stairs diagonally in room 47 and
+//  lockup the game. This also occurs in the original. Room47:doit loads the
+//  attic when ego is on control $10 at the base of the stairs and facing north.
+//  Room47:handleEvent prevents the user from moving ego when on control $10.
+//  Walking up the stairs diagonally puts ego in control $10 facing left or
+//  right and so the room never changes and the user never regains control.
+//
+// We fix this by allowing ego to face any direction except south to trigger the
+//  attic room change. This also fixes an edge case that allows walking through
+//  the staircase wall into Clarence's room.
+//
+// Applies to: DOS, Amiga, Atari ST
+// Responsible method: Room47:doit
+// Fixes bug #9949
+static const uint16 laurabow1SignatureAtticStairsLockupFix[] = {
+	SIG_MAGICDWORD,
+	0x39, SIG_SELECTOR8(loop),          // pushi loop
+	0x76,                               // push0
+	0x81, 0x00,                         // lag 00
+	0x4a, 0x04,                         // send 4 [ ego:loop? ]
+	0x36,                               // push
+	0x35, 0x03,                         // ldi 03 [ facing north ]
+	0x1a,                               // eq?
+	SIG_END
+};
+
+static const uint16 laurabow1PatchAtticStairsLockupFix[] = {
+	PATCH_ADDTOOFFSET(+8),
+	0x35, 0x2,                          // ldi 02 [ facing south ]
+	0x1c,                               // ne?
+	PATCH_END
+};
+
 //          script, description,                                signature                                             patch
 static const SciScriptPatcherEntry laurabow1Signatures[] = {
 	{  true,     4, "easter egg view fix",                      1, laurabow1SignatureEasterEggViewFix,                laurabow1PatchEasterEggViewFix },
@@ -4637,7 +4670,8 @@ static const SciScriptPatcherEntry laurabow1Signatures[] = {
 	{  true,    37, "armor move to fix",                        2, laurabow1SignatureArmorMoveToFix,                  laurabow1PatchArmorMoveToFix },
 	{  true,    37, "allowing input, after oiling arm",         1, laurabow1SignatureArmorOilingArmFix,               laurabow1PatchArmorOilingArmFix },
 	{  true,    44, "lillian bed fix",                          1, laurabow1SignatureLillianBedFix,                   laurabow1PatchLillianBedFix },
-    {  true,    58, "chapel candles persistence",               1, laurabow1SignatureChapelCandlesPersistence,        laurabow1PatchChapelCandlesPersistence },
+	{  true,    47, "attic stairs lockup fix",                  1, laurabow1SignatureAtticStairsLockupFix,            laurabow1PatchAtticStairsLockupFix },
+	{  true,    58, "chapel candles persistence",               1, laurabow1SignatureChapelCandlesPersistence,        laurabow1PatchChapelCandlesPersistence },
 	{  true,   236, "tell Lilly about Gertie blocking fix 1/2", 1, laurabow1SignatureTellLillyAboutGerieBlockingFix1, laurabow1PatchTellLillyAboutGertieBlockingFix1 },
 	{  true,   236, "tell Lilly about Gertie blocking fix 2/2", 1, laurabow1SignatureTellLillyAboutGerieBlockingFix2, laurabow1PatchTellLillyAboutGertieBlockingFix2 },
 	{  true,   998, "obstacle collision lockups fix",           1, laurabow1SignatureObstacleCollisionLockupsFix,     laurabow1PatchObstacleCollisionLockupsFix },





More information about the Scummvm-git-logs mailing list