[Scummvm-cvs-logs] SF.net SVN: scummvm:[35884] scummvm/trunk/engines/saga

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sat Jan 17 22:45:53 CET 2009


Revision: 35884
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35884&view=rev
Author:   thebluegr
Date:     2009-01-17 21:45:53 +0000 (Sat, 17 Jan 2009)

Log Message:
-----------
Fixed bug #2057987 - "IHNM: Music stops in Ellen's chapter"

Modified Paths:
--------------
    scummvm/trunk/engines/saga/events.cpp
    scummvm/trunk/engines/saga/events.h
    scummvm/trunk/engines/saga/saveload.cpp
    scummvm/trunk/engines/saga/sfuncs_ihnm.cpp

Modified: scummvm/trunk/engines/saga/events.cpp
===================================================================
--- scummvm/trunk/engines/saga/events.cpp	2009-01-17 21:17:58 UTC (rev 35883)
+++ scummvm/trunk/engines/saga/events.cpp	2009-01-17 21:45:53 UTC (rev 35884)
@@ -625,7 +625,7 @@
 	return SUCCESS;
 }
 
-int Events::clearList() {
+int Events::clearList(bool playQueuedMusic) {
 	Event *chain_walk;
 	Event *next_chain;
 	Event *event_p;
@@ -636,7 +636,16 @@
 
 		// Only remove events not marked kEvFNoDestory (engine events)
 		if (!(event_p->code & kEvFNoDestory)) {
-			// Remove any events chained off this one */
+			// Handle queued music change events before deleting them
+			// This can happen in IHNM by music events set by sfQueueMusic()
+			// Fixes bug #2057987 - "IHNM: Music stops in Ellen's chapter"
+			if (playQueuedMusic && ((event_p->code & EVENT_MASK) == kMusicEvent)) {
+				_vm->_music->stop();
+				if (event_p->op == kEventPlay)
+					_vm->_music->play(event_p->param, (MusicFlags)event_p->param2);
+			}
+
+			// Remove any events chained off this one
 			for (chain_walk = event_p->chain; chain_walk != NULL; chain_walk = next_chain) {
 				next_chain = chain_walk->chain;
 				free(chain_walk);

Modified: scummvm/trunk/engines/saga/events.h
===================================================================
--- scummvm/trunk/engines/saga/events.h	2009-01-17 21:17:58 UTC (rev 35883)
+++ scummvm/trunk/engines/saga/events.h	2009-01-17 21:45:53 UTC (rev 35884)
@@ -165,7 +165,7 @@
 	Events(SagaEngine *vm);
 	~Events(void);
 	int handleEvents(long msec);
-	int clearList();
+	int clearList(bool playQueuedMusic = true);
 	int freeList();
 	Event *queue(Event *event);
 	Event *chain(Event *headEvent, Event *addEvent);

Modified: scummvm/trunk/engines/saga/saveload.cpp
===================================================================
--- scummvm/trunk/engines/saga/saveload.cpp	2009-01-17 21:17:58 UTC (rev 35883)
+++ scummvm/trunk/engines/saga/saveload.cpp	2009-01-17 21:45:53 UTC (rev 35884)
@@ -292,6 +292,9 @@
 		// TODO: played time
 	}
 
+	// Clear pending events here, and don't process queued music events
+	_events->clearList(false);
+
 	// Surrounding scene
 	sceneNumber = in->readSint32LE();
 #ifdef ENABLE_IHNM

Modified: scummvm/trunk/engines/saga/sfuncs_ihnm.cpp
===================================================================
--- scummvm/trunk/engines/saga/sfuncs_ihnm.cpp	2009-01-17 21:17:58 UTC (rev 35883)
+++ scummvm/trunk/engines/saga/sfuncs_ihnm.cpp	2009-01-17 21:45:53 UTC (rev 35884)
@@ -422,11 +422,8 @@
 		event.param = _vm->_music->_songTable[param1];
 		event.param2 = param2 ? MUSIC_LOOP : MUSIC_NORMAL;
 		event.op = kEventPlay;
-		event.time = _vm->ticksToMSec(500);		// I find the delay in the original to be too long, so I've set it to
-												// wait for half the time, which sounds better when chapter points
-												// change
-												// FIXME: If this is too short for other cases apart from chapter
-												// point change, set it back to 1000
+		event.time = _vm->ticksToMSec(1000);
+
 		_vm->_events->queue(&event);
 
 		if (!_vm->_scene->haveChapterPointsChanged()) {


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