[Scummvm-cvs-logs] SF.net SVN: scummvm: [30167] scummvm/trunk/engines/scumm

sev at users.sourceforge.net sev at users.sourceforge.net
Wed Jan 2 22:15:24 CET 2008


Revision: 30167
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30167&view=rev
Author:   sev
Date:     2008-01-02 13:15:23 -0800 (Wed, 02 Jan 2008)

Log Message:
-----------
Fix for bug #896489: "DIG: Missing subtitles when talking to Brink"

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/intern.h
    scummvm/trunk/engines/scumm/script_v6.cpp
    scummvm/trunk/engines/scumm/scumm.cpp

Modified: scummvm/trunk/engines/scumm/intern.h
===================================================================
--- scummvm/trunk/engines/scumm/intern.h	2008-01-02 21:05:36 UTC (rev 30166)
+++ scummvm/trunk/engines/scumm/intern.h	2008-01-02 21:15:23 UTC (rev 30167)
@@ -604,6 +604,8 @@
 	int _curVerb;
 	int _curVerbSlot;
 
+	bool _forcedWaitForMessage;
+
 public:
 	ScummEngine_v6(OSystem *syst, const DetectorResult &dr);
 

Modified: scummvm/trunk/engines/scumm/script_v6.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_v6.cpp	2008-01-02 21:05:36 UTC (rev 30166)
+++ scummvm/trunk/engines/scumm/script_v6.cpp	2008-01-02 21:15:23 UTC (rev 30167)
@@ -2372,11 +2372,46 @@
 }
 
 void ScummEngine_v6::o6_talkActor() {
+	int offset = _scriptPointer - _scriptOrgPointer;
+
+	// WORKAROUNDfor bug #896489: see below for detailed description
+	if (_forcedWaitForMessage) {
+		if (VAR(VAR_HAVE_MSG)) {
+			_scriptPointer--;
+			o6_breakHere();
+			return;
+		}
+
+		_forcedWaitForMessage = false;
+		_scriptPointer += resStrLen(_scriptPointer) + 1;
+		
+		return;
+	}
+
 	_actorToPrintStrFor = pop();
 
 	_string[0].loadDefault();
 	actorTalk(_scriptPointer);
 
+	// WORKAROUND for bug #896489: "DIG: Missing subtitles when talking to Brink"
+	// Original script does not have wait.waitForMessage() after several messages:
+	//
+	// [011A] (5D)   if (getActorCostume(VAR_EGO) == 1) {
+	// [0126] (BA)     talkActor("/STOP.008/Low out.",3)
+	// [013D] (A9)     wait.waitForMessage()
+	// [013F] (5D)   } else if (var227 == 0) {
+	// [014C] (BA)     talkActor("/STOP.009/Never mind.",3)
+	// [0166] (73)   } else {
+	//
+	// Here we simulate that opcode.
+	if (_game.id == GID_DIG && vm.slot[_currentScript].number == 88) {
+		if (offset == 0x158 || offset == 0x214 || offset == 0x231 || offset == 0x278) {
+			_forcedWaitForMessage = true;
+			_scriptPointer--;
+
+			return;
+		}
+	}
 	_scriptPointer += resStrLen(_scriptPointer) + 1;
 }
 

Modified: scummvm/trunk/engines/scumm/scumm.cpp
===================================================================
--- scummvm/trunk/engines/scumm/scumm.cpp	2008-01-02 21:05:36 UTC (rev 30166)
+++ scummvm/trunk/engines/scumm/scumm.cpp	2008-01-02 21:15:23 UTC (rev 30167)
@@ -674,6 +674,8 @@
 	_curVerb = 0;
 	_curVerbSlot = 0;
 
+	_forcedWaitForMessage = false;
+
 	VAR_VIDEONAME = 0xFF;
 	VAR_RANDOM_NR = 0xFF;
 	VAR_STRING2DRAW = 0xFF;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list