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

bluegr bluegr at gmail.com
Wed Nov 28 01:20:37 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:
8eb334a2ab SCI32: Fix GK1 fortune teller messages, bug #10819 (#1423)


Commit: 8eb334a2abe97ac2c03875b63b3e0503af1c7a9a
    https://github.com/scummvm/scummvm/commit/8eb334a2abe97ac2c03875b63b3e0503af1c7a9a
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2018-11-28T02:20:34+02:00

Commit Message:
SCI32: Fix GK1 fortune teller messages, bug #10819 (#1423)

Changed paths:
    engines/sci/engine/script_patches.cpp
    engines/sci/resource_audio.cpp


diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index 7a11e4a..bfa0b33 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -1990,6 +1990,40 @@ static const uint16 gk1GranChairFlickerPatch[] = {
 	PATCH_END
 };
 
+// Using the money on the fortune teller Lorelei is scripted to respond with
+//  a different message depending on whether she's sitting or dancing. This
+//  feature manages to have three bugs which all occur in Sierra's interpreter.
+//
+// Bug 1: The script transposes the sitting and dancing responses.
+//        We reverse the test so that the right messages are attempted.
+//
+// Bug 2: The script passes the wrong message tuple when Lorelei is sitting
+//        and so a missing message error occurs. We pass the right tuple.
+//
+// Bug 3: The audio36 resource for message 420 2 32 0 1 has the wrong tuple and
+//        so no audio plays when using the money on Lorelei while dancing.
+//        This is a CD resource bug which we fix in the audio loader.
+//
+// Applies to: All PC Floppy and CD versions. TODO: Test Mac, should apply
+// Responsible method: lorelei:doVerb(32)
+// Fixes bug #10819
+static const uint16 gk1LoreleiMoneySignature[] = {
+	0x30, SIG_UINT16(0x000d),           // bnt 000d [ lorelei is sitting ]
+	SIG_ADDTOOFFSET(+19),
+	SIG_MAGICDWORD,
+	0x7a,                               // pushi2   [ noun ]
+	0x8f, 0x01,                         // lsp 01   [ verb (32d) ]
+	0x39, 0x03,                         // pushi 03 [ cond ]
+	SIG_END
+};
+
+static const uint16 gk1LoreleiMoneyPatch[] = {
+	0x2e, PATCH_UINT16(0x000d),         // bt 000d [ lorelei is dancing ]
+	PATCH_ADDTOOFFSET(+22),
+	0x39, 0x02,                         // pushi 02 [ correct cond ]
+	PATCH_END
+};
+
 // Using "Operate" on the fortune teller Lorelei's right chair causes a
 //  missing message error when she's standing in english pc floppy.
 //  We fix the message tuple as Sierra did in later versions.
@@ -2057,6 +2091,7 @@ static const SciScriptPatcherEntry gk1Signatures[] = {
 	{  true,   410, "fix day 2 binoculars lockup",                 1, gk1Day2BinocularsLockupSignature, gk1Day2BinocularsLockupPatch },
 	{  true,   410, "fix artist veve photocopy missing message",   1, gk1ArtistVeveCopySignature,       gk1ArtistVeveCopyPatch },
 	{  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,   800, "fix day 10 honfour unlock door lockup",       1, gk1HonfourUnlockDoorSignature,    gk1HonfourUnlockDoorPatch },
 	{  true, 64908, "disable video benchmarking",                  1, sci2BenchmarkSignature,           sci2BenchmarkPatch },
diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp
index b1d2a91..6a1b57c 100644
--- a/engines/sci/resource_audio.cpp
+++ b/engines/sci/resource_audio.cpp
@@ -454,6 +454,13 @@ int ResourceManager::readAudioMapSCI11(IntMapResourceSource *map) {
 				break;
 			}
 
+			// GK1CD has a message whose audio36 resource has the wrong tuple and never plays.
+			//  The message tuple is 420 2 32 0 1 but the audio36 tuple is 420 2 32 3 1. bug #10819
+			if (g_sci->getGameId() == GID_GK1 && g_sci->isCD() &&
+				map->_mapNumber == 420 && n == 0x02200301) {
+				n = 0x02200001;
+			}
+
 			if (isEarly) {
 				offset = ptr.getUint32LE();
 				ptr += 4;





More information about the Scummvm-git-logs mailing list