diff options
| -rw-r--r-- | engines/sci/engine/script_patches.cpp | 40 | 
1 files changed, 37 insertions, 3 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index f12b6f5f97..112e04d4d4 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 },  | 
