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

csnover csnover at users.noreply.github.com
Sun Jul 16 05:56:19 CEST 2017


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:
8e0ccc5eb1 SCI32: Add patch for mismatched PointSoft Torin heap 20700


Commit: 8e0ccc5eb144a458d3e12cae24fa7970a7d9a749
    https://github.com/scummvm/scummvm/commit/8e0ccc5eb144a458d3e12cae24fa7970a7d9a749
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-07-15T22:53:39-05:00

Commit Message:
SCI32: Add patch for mismatched PointSoft Torin heap 20700

Refs Trac#9776, Trac#9864. Fixes Trac#9797.

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 04aecba..8c000dd 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -5811,9 +5811,111 @@ static const uint16 torinSeraglioBoogleFlagPatch[] = {
 	PATCH_END
 };
 
+// At least some French PointSoft releases of Torin's Passage managed to get
+// released with script 20700 from the official Sierra TORINPAT patch and
+// *unpatched* heap 20700. Worse, the selector table is not the same as the one
+// in the US release, so it is not possible to just apply TORINPAT to the game
+// (it will just explode later when mismatched selectors are used). So, here we
+// are hot-patching all of the wrong offsets in the original heap to match the
+// patched script.
+// Applies to at least: French PointSoft CD release
+static const uint16 torinPointSoft20700HeapSignature[] = {
+	0xe1, 0x15, 0x23, 0x16, // end of patched 20700.SCR (so we don't
+							// accidentally patch the heap when it is correctly
+							// matched with an unpatched script)
+	SIG_ADDTOOFFSET(1),     // padding byte added by Script::load
+	SIG_ADDTOOFFSET(0x1d2), // first bad offset in the heap is at 0x1d2
+	SIG_MAGICDWORD,
+	SIG_UINT16(0xd8),
+	SIG_UINT16(0xd8),
+	SIG_ADDTOOFFSET(0x200 - 0x1d2 - 4), // second bad offset, etc.
+	SIG_UINT16(0xde),
+	SIG_UINT16(0xde),
+	SIG_ADDTOOFFSET(0x280 - 0x200 - 4),
+	SIG_UINT16(0xe0),
+	SIG_UINT16(0xe0),
+	SIG_ADDTOOFFSET(0x300 - 0x280 - 4),
+	SIG_UINT16(0xe2),
+	SIG_UINT16(0xe2),
+	SIG_ADDTOOFFSET(0x374 - 0x300 - 4),
+	SIG_UINT16(0xe4),
+	SIG_UINT16(0xe4),
+	SIG_ADDTOOFFSET(0x3ce - 0x374 - 4),
+	SIG_UINT16(0xee),
+	SIG_UINT16(0xee),
+	SIG_ADDTOOFFSET(0x44e - 0x3ce - 4),
+	SIG_UINT16(0xf0),
+	SIG_UINT16(0xf0),
+	SIG_ADDTOOFFSET(0x482 - 0x44e - 4),
+	SIG_UINT16(0xf6),
+	SIG_UINT16(0xf6),
+	SIG_ADDTOOFFSET(0x4b6 - 0x482 - 4),
+	SIG_UINT16(0xfc),
+	SIG_UINT16(0xfc),
+	SIG_ADDTOOFFSET(0x4ea - 0x4b6 - 4),
+	SIG_UINT16(0x106),
+	SIG_UINT16(0x106),
+	SIG_ADDTOOFFSET(0x51e - 0x4ea - 4),
+	SIG_UINT16(0x110),
+	SIG_UINT16(0x110),
+	SIG_ADDTOOFFSET(0x55c - 0x51e - 4),
+	SIG_UINT16(0x116),
+	SIG_UINT16(0x116),
+	SIG_ADDTOOFFSET(0x5a2 - 0x55c - 4),
+	SIG_UINT16(0x118),
+	SIG_UINT16(0x118),
+	SIG_END
+};
+
+static const uint16 torinPointSoft20700HeapPatch[] = {
+	PATCH_ADDTOOFFSET(4),      // end of patched 20700.SCR
+	PATCH_ADDTOOFFSET(1),      // padding byte
+	PATCH_ADDTOOFFSET(0x1d2),  // first bad offset
+	PATCH_UINT16(0xdc),
+	PATCH_UINT16(0xdc),
+	PATCH_ADDTOOFFSET(0x200 - 0x1d2 - 4), // second bad offset, etc.
+	PATCH_UINT16(0xe6),
+	PATCH_UINT16(0xe6),
+	PATCH_ADDTOOFFSET(0x280 - 0x200 - 4),
+	PATCH_UINT16(0xe8),
+	PATCH_UINT16(0xe8),
+	PATCH_ADDTOOFFSET(0x300 - 0x280 - 4),
+	PATCH_UINT16(0xea),
+	PATCH_UINT16(0xea),
+	PATCH_ADDTOOFFSET(0x374 - 0x300 - 4),
+	PATCH_UINT16(0xec),
+	PATCH_UINT16(0xec),
+	PATCH_ADDTOOFFSET(0x3ce - 0x374 - 4),
+	PATCH_UINT16(0xf6),
+	PATCH_UINT16(0xf6),
+	PATCH_ADDTOOFFSET(0x44e - 0x3ce - 4),
+	PATCH_UINT16(0xf8),
+	PATCH_UINT16(0xf8),
+	PATCH_ADDTOOFFSET(0x482 - 0x44e - 4),
+	PATCH_UINT16(0xfe),
+	PATCH_UINT16(0xfe),
+	PATCH_ADDTOOFFSET(0x4b6 - 0x482 - 4),
+	PATCH_UINT16(0x104),
+	PATCH_UINT16(0x104),
+	PATCH_ADDTOOFFSET(0x4ea - 0x4b6 - 4),
+	PATCH_UINT16(0x10e),
+	PATCH_UINT16(0x10e),
+	PATCH_ADDTOOFFSET(0x51e - 0x4ea - 4),
+	PATCH_UINT16(0x118),
+	PATCH_UINT16(0x118),
+	PATCH_ADDTOOFFSET(0x55c - 0x51e - 4),
+	PATCH_UINT16(0x11e),
+	PATCH_UINT16(0x11e),
+	PATCH_ADDTOOFFSET(0x5a2 - 0x55c - 4),
+	PATCH_UINT16(0x120),
+	PATCH_UINT16(0x120),
+	PATCH_END
+};
+
 //          script, description,                                      signature                         patch
 static const SciScriptPatcherEntry torinSignatures[] = {
 	{  true, 20600, "fix wrong boogle bag flag on fast-forward",   1, torinSeraglioBoogleFlagSignature,  torinSeraglioBoogleFlagPatch },
+	{  true, 20700, "fix bad heap in PointSoft release",           1, torinPointSoft20700HeapSignature,  torinPointSoft20700HeapPatch },
 	{  true, 64000, "disable volume reset on startup 1/2",         1, torinVolumeResetSignature1,        torinVolumeResetPatch1 },
 	{  true, 64000, "disable volume reset on startup 2/2",         1, torinVolumeResetSignature2,        torinVolumeResetPatch2 },
 	{  true, 64866, "increase number of save games",               1, torinNumSavesSignature,            torinNumSavesPatch },





More information about the Scummvm-git-logs mailing list