[Scummvm-cvs-logs] scummvm master -> 1454408e96641beecaf3021e9ce4fedf01bce7c3

m-kiewitz m_kiewitz at users.sourceforge.net
Tue Nov 19 23:37:32 CET 2013


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:
1454408e96 SCI: proper laura bow 2 script patch for safe issue


Commit: 1454408e96641beecaf3021e9ce4fedf01bce7c3
    https://github.com/scummvm/scummvm/commit/1454408e96641beecaf3021e9ce4fedf01bce7c3
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2013-11-19T14:36:58-08:00

Commit Message:
SCI: proper laura bow 2 script patch for safe issue

fixes one half of bug #6460

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 4a829c2..054fac7 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -1092,35 +1092,89 @@ SciScriptPatcherEntry larry6Signatures[] = {
 };
 
 // ===========================================================================
-// rm560::doit was supposed to close the painting, when Heimlich enters the
-//  room. The code is buggy. It actually closes the painting, when heimlich
-//  is not in the room. We fix that.
-// Applies to at least: English floppy
+// Laura Bow 2
+// 
+// Moving away the painting in the room with the hidden safe is problematic
+//  for the CD version of the game. safePic::doVerb gets triggered by the mouse-click.
+// This method sets local 0 as signal, which is only meant to get handled, when
+//  the player clicks again to move the painting back. This signal is processed by
+//  the room doit-script.
+// That doit-script checks safePic::cel to be not equal 0 and would then skip over
+//  the "close painting" trigger code. On very fast computers this script may
+//  get called too early (which is the case when running under ScummVM and when
+//  running the game using Sierra SCI in DOS-Box with cycles 15000) and thinks
+//  that it's supposed to move the painting back. Which then results in the painting
+//  getting moved to its original position immediately (which means it won't be possible
+//  to access the safe behind it).
+//
+// We patch the script, so that we check for cel to be not equal 4 (the final cel) and
+//  we also reset the safePic-signal immediately as well.
+//
+// In the floppy version Laura's coordinates are checked directly in rm560::doit
+//  and as soon as she moves, the painting will automatically move to its original position.
+//  This is not the case for the CD version of the game. The painting will only "move" back,
+//  when the player actually exits the room and re-enters.
+
+// Applies to at least: English PC-CD
 // Responsible method: rm560::doit
-const uint16 laurabow2SignaturePaintingClosing[] = {
-	0x4a, 0x04,                         // send 04 - read aHeimlich::room
+// Fixes bug: #6460 (actually only part of)
+const uint16 laurabow2CDSignaturePaintingClosing[] = {
+	0x39, 0x04,                         // pushi 04 (cel)
+	0x76,                               // push0
 	SIG_MAGICDWORD,
+	0x7a,                               // push2
+	0x38, SIG_UINT16 + 0x31, 0x02,      // pushi 0231h (561)
+	0x76,                               // push0
+	0x43, 0x02, 0x04,                   // kScriptID (get export 0 of script 561)
+	0x4a, 0x04,                         // send 04 (gets safePicture::cel)
+	0x18,                               // not
+	0x31, 0x21,                         // bnt [exit]
+	0x38, SIG_UINT16 + 0x83, 0x02,      // pushi 0283h
+	0x76,                               // push0
+	0x7a,                               // push2
+	0x39, 0x20,                         // pushi 20
+	0x76,                               // push0
+	0x43, 0x02, 0x04,                   // kScriptID (get export 0 of script 32)
+	0x4a, 0x04,                         // send 04 (get sHeimlich::room)
 	0x36,                               // push
-	0x81, 0x0b,                         // lag global[11d] -> current room
+	0x81, 0x0b,                         // lag global[b] (current room)
 	0x1c,                               // ne?
-	0x31, 0x0e,                         // bnt [don't close]
+	0x31, 0x0e,                         // bnt [exit]
 	0x35, 0x00,                         // ldi 00
-	0xa3, 0x00,                         // sal local[0]
-	0x38, SIG_UINT16 + 0x92, 0x00,      // pushi 0092
-	0x78,                               // push1
-	0x72,                               // lofsa sDumpSafe
+	0xa3, 0x00,                         // sal local[0] -> reset safePic signal
 	SIG_END
 };
 
-const uint16 laurabow2PatchPaintingClosing[] = {
-	PATCH_ADDTOOFFSET +6,
-	0x2f, 0x0e,       // bt [don't close]
+const uint16 laurabow2CDPatchPaintingClosing[] = {
+	PATCH_ADDTOOFFSET +2,
+	0x3c,                               // dup (1 additional byte)
+	0x76,                               // push0
+	0x3c,                               // dup (1 additional byte)
+	0xab, 0x00,                         // ssl local[0] -> reset safePic signal
+	0x7a,                               // push2
+	0x38, PATCH_UINT16 + 0x31, 0x02,    // pushi 0231h (561)
+	0x76,                               // push0
+	0x43, 0x02, 0x04,                   // kScriptID (get export 0 of script 561)
+	0x4a, 0x04,                         // send 04 (gets safePicture::cel)
+	0x1a,                               // eq?
+	0x31, 0x1d,                         // bnt [exit]
+	0x38, PATCH_UINT16 + 0x83, 0x02,    // pushi 0283h
+	0x76,                               // push0
+	0x7a,                               // push2
+	0x39, 0x20,                         // pushi 20
+	0x76,                               // push0
+	0x43, 0x02, 0x04,                   // kScriptID (get export 0 of script 32)
+	0x4a, 0x04,                         // send 04 (get sHeimlich::room)
+	0x36,                               // push
+	0x81, 0x0b,                         // lag global[b] (current room)
+	0x1a,                               // eq? (2 opcodes changed, to save 2 bytes)
+	0x2f, 0x0a,                         // bt [exit]
 	PATCH_END
 };
 
 //    script, description,                                            signature                          patch
 SciScriptPatcherEntry laurabow2Signatures[] = {
-	{    560, "painting closing immediately",                1, 0, 0, laurabow2SignaturePaintingClosing, laurabow2PatchPaintingClosing },
+	{    560, "CD: painting closing immediately",            1, 0, 0, laurabow2CDSignaturePaintingClosing, laurabow2CDPatchPaintingClosing },
 	SCI_SIGNATUREENTRY_TERMINATOR
 };
 






More information about the Scummvm-git-logs mailing list