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

eriktorbjorn at users.sourceforge.net eriktorbjorn at users.sourceforge.net
Thu Nov 16 18:08:32 CET 2006


Revision: 24726
          http://svn.sourceforge.net/scummvm/?rev=24726&view=rev
Author:   eriktorbjorn
Date:     2006-11-16 09:08:31 -0800 (Thu, 16 Nov 2006)

Log Message:
-----------
Applied my own patch #1594924 to work around bug #1324106 ("MI2 VGA: Music as
Rapp is instantiating isn't synchronized"). I don't know if our timing is off,
or if it's just a case of overly optimistic scripting, but the pause / unpause
music instructions are issued in the wrong order.

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/imuse/imuse.cpp

Modified: scummvm/trunk/engines/scumm/imuse/imuse.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse/imuse.cpp	2006-11-15 23:00:41 UTC (rev 24725)
+++ scummvm/trunk/engines/scumm/imuse/imuse.cpp	2006-11-16 17:08:31 UTC (rev 24726)
@@ -960,6 +960,8 @@
 	_trigger_count--;
 	_queue_cleared = false;
 	do {
+		bool skip_cmd = false;
+
 		pos = (pos + 1) % ARRAYSIZE(_cmd_queue);
 		if (_queue_pos == pos)
 			break;
@@ -968,8 +970,30 @@
 			break;
 		_queue_end = pos;
 
-		doCommand_internal(p[0], p[1], p[2], p[3], p[4], p[5], p[6], 0);
+		// WORKAROUND for bug #1324106. When playing the "flourishes"
+		// as Rapp's body appears from his ashes, MI2 sets up a trigger
+		// to pause the music, in case the animation plays too slowly,
+		// and then the music is manually unpaused for the next part of
+		// the animation.
+		//
+		// However, with ScummVM the animation finishes slightly too
+		// quickly instead, and the pause command is run *after* the
+		// unpause, so the whole thing is thrown out of sync. I think
+		// we can assume that any platform running ScummVM is fast
+		// enough to keep up with the animation here, so ignore the
+		// pause command.
+		//
+		// Since setting up a trigger is a multi-step operation (first
+		// the trigger, and then the commands), it's probably easiest
+		// to catch it here.
 
+		if (_game_id == GID_MONKEY2 && p[0] == 262 && p[1] == 183 && p[2] == 0) {
+			skip_cmd = true;
+		}
+
+		if (!skip_cmd)
+			doCommand_internal(p[0], p[1], p[2], p[3], p[4], p[5], p[6], 0);
+
 		if (_queue_cleared)
 			return;
 		pos = _queue_end;


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