aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/events.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2009-01-17 21:45:53 +0000
committerFilippos Karapetis2009-01-17 21:45:53 +0000
commit56f75b4c41b9fbd8736477ac28a6004e6b4a5014 (patch)
tree72a7397799c244feefdf5914f5778f613a0d3cf6 /engines/saga/events.cpp
parentba4b872a205528c4159a2d633e12595256eaa990 (diff)
downloadscummvm-rg350-56f75b4c41b9fbd8736477ac28a6004e6b4a5014.tar.gz
scummvm-rg350-56f75b4c41b9fbd8736477ac28a6004e6b4a5014.tar.bz2
scummvm-rg350-56f75b4c41b9fbd8736477ac28a6004e6b4a5014.zip
Fixed bug #2057987 - "IHNM: Music stops in Ellen's chapter"
svn-id: r35884
Diffstat (limited to 'engines/saga/events.cpp')
-rw-r--r--engines/saga/events.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp
index 0a3b7fe21b..482bb6d46e 100644
--- a/engines/saga/events.cpp
+++ b/engines/saga/events.cpp
@@ -625,7 +625,7 @@ int Events::initializeEvent(Event *event) {
return SUCCESS;
}
-int Events::clearList() {
+int Events::clearList(bool playQueuedMusic) {
Event *chain_walk;
Event *next_chain;
Event *event_p;
@@ -636,7 +636,16 @@ int Events::clearList() {
// 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);