aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsluicebox2020-01-03 14:25:08 -0800
committersluicebox2020-01-03 14:25:08 -0800
commite4d5f37d8dba87301843aaebd5079cfe92766fc8 (patch)
treed791bdd7853a3d6777bb80ced3d5298e5a434f21
parent3b441df98bb2cb2c2f6f950aad769b42c452e795 (diff)
downloadscummvm-rg350-e4d5f37d8dba87301843aaebd5079cfe92766fc8.tar.gz
scummvm-rg350-e4d5f37d8dba87301843aaebd5079cfe92766fc8.tar.bz2
scummvm-rg350-e4d5f37d8dba87301843aaebd5079cfe92766fc8.zip
SCI32: Fix GK2 Chapter 4 Georg letter topic
-rw-r--r--engines/sci/engine/script_patches.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index bd5e5d4ebe..fd01a0b541 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -3557,6 +3557,35 @@ static const uint16 gk2XaverBlackWolfkPatch[] = {
PATCH_END
};
+// Chapter 4 has a bug in many versions of GK2 that is effectively a deadend.
+// Asking Georg about "Ludwig's letter to the Conductor" is required to finish
+// the chapter. This topic becomes available after looking at the "Ludwig and
+// Wagner" plaque in Herrenchiemsee and then clicking again to read it aloud.
+// The problem is that the rest of the game only cares about looking at the
+// plaque. If Herrenchiemsee is completed without reading the plaque then the
+// Hint feature claims everything is done and the player appears to be stuck.
+//
+// We fix this as Sierra did by making Georg's letter topic available upon just
+// looking at the plaque, which is consistent with the rest of the scripts.
+// Although Sierra advertised this fix in the readme for GK2PAT 1.11, the patch
+// file seems to be missing, but appears in later versions and the GOG release.
+//
+// Applies to: English PC 1.0, 1.1, 1.11 Patch, Mac
+// Responsible method: Heap in script 8520
+static const uint16 gk2GeorgLetterTopicSignature[] = {
+ SIG_MAGICDWORD, // tLtr2Conductor
+ SIG_UINT16(0x0211), // sceneNum = 529
+ SIG_UINT16(0x012a), // flagNum = 298
+ SIG_UINT16(0x0283), // readyFlagNum = 643
+ SIG_END
+};
+
+static const uint16 gk2GeorgLetterTopicPatch[] = {
+ PATCH_ADDTOOFFSET(+4),
+ PATCH_UINT16(0x026f), // readyFlagNum = 623
+ PATCH_END
+};
+
// In early versions of GK2, clicking on the holy water basket after using the
// holy water locks up the game. The script is supposed to test the flag that's
// set when getting the water but some code mistakenly tests inventory instead.
@@ -3660,6 +3689,7 @@ static const SciScriptPatcherEntry gk2Signatures[] = {
{ true, 1020, "fix holy water lockup", 2, gk2HolyWaterLockupSignature, gk2HolyWaterLockupPatch },
{ true, 3210, "fix police station deadend", 1, gk2PoliceStationDeadendSignature, gk2PoliceStationDeadendPatch },
{ true, 4320, "fix xaver black wolf topic", 1, gk2XaverBlackWolfSignature, gk2XaverBlackWolfkPatch },
+ { true, 8520, "fix georg letter topic", 1, gk2GeorgLetterTopicSignature, gk2GeorgLetterTopicPatch },
{ true, 8616, "fix wagner painting message", 2, gk2WagnerPaintingMessageSignature, gk2WagnerPaintingMessagePatch },
{ true, 8617, "fix wagner painting message", 2, gk2WagnerPaintingMessageSignature, gk2WagnerPaintingMessagePatch },
{ true, 64990, "increase number of save games (1/2)", 1, sci2NumSavesSignature1, sci2NumSavesPatch1 },