[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