aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/imuse_digi/dimuse.cpp
diff options
context:
space:
mode:
authorPaweł Kołodziejski2008-01-15 21:35:03 +0000
committerPaweł Kołodziejski2008-01-15 21:35:03 +0000
commit6bb2f4447240bf3fe5fa16a8945ecd60866f2625 (patch)
tree3de3886de535bf438e04473da9bef0999ea0daa0 /engines/scumm/imuse_digi/dimuse.cpp
parent8935c574d547903b0c8d760d406873a3d8a36228 (diff)
downloadscummvm-rg350-6bb2f4447240bf3fe5fa16a8945ecd60866f2625.tar.gz
scummvm-rg350-6bb2f4447240bf3fe5fa16a8945ecd60866f2625.tar.bz2
scummvm-rg350-6bb2f4447240bf3fe5fa16a8945ecd60866f2625.zip
implement dimuse transition 12, not tested yet
svn-id: r30503
Diffstat (limited to 'engines/scumm/imuse_digi/dimuse.cpp')
-rw-r--r--engines/scumm/imuse_digi/dimuse.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/engines/scumm/imuse_digi/dimuse.cpp b/engines/scumm/imuse_digi/dimuse.cpp
index 1874546259..98b85321d2 100644
--- a/engines/scumm/imuse_digi/dimuse.cpp
+++ b/engines/scumm/imuse_digi/dimuse.cpp
@@ -101,6 +101,7 @@ void IMuseDigital::resetState() {
memset(_attributes, 0, sizeof(_attributes));
_nextSeqToPlay = 0;
_stopingSequence = false;
+ _triggerUsed = false;
}
void IMuseDigital::saveOrLoad(Serializer *ser) {
@@ -364,6 +365,24 @@ void IMuseDigital::switchToNextRegion(Track *track) {
}
ImuseDigiSndMgr::SoundDesc *soundDesc = track->soundDesc;
+ if (_triggerUsed && track->soundDesc->numMarkers) {
+ if (_sound->checkForTriggerByRegionAndMarker(soundDesc, track->curRegion, _triggerParams.marker)) {
+ debug(5, "trigger %s reached, switchToNextRegion(track:%d)", track->trackId, _triggerParams.marker);
+ debug(5, "exit current region, switchToNextRegion(track:%d)", track->trackId);
+ Track *fadeTrack = cloneToFadeOutTrack(track, _triggerParams.fadeOutDelay);
+ if (fadeTrack) {
+ fadeTrack->dataOffset = _sound->getRegionOffset(fadeTrack->soundDesc, fadeTrack->curRegion);
+ fadeTrack->regionOffset = 0;
+ debug(5, "switchToNextRegion-sound(%d) select region %d, curHookId: %d", fadeTrack->soundId, fadeTrack->curRegion, fadeTrack->curHookId);
+ fadeTrack->curHookId = 0;
+ }
+ flushTrack(track);
+ startMusic(_triggerParams.filename, _triggerParams.soundId, _triggerParams.hookId, _triggerParams.volume);
+ _triggerUsed = false;
+ return;
+ }
+ }
+
int jumpId = _sound->getJumpIdByRegionAndHookId(soundDesc, track->curRegion, track->curHookId);
if (jumpId == -1)
jumpId = _sound->getJumpIdByRegionAndHookId(soundDesc, track->curRegion, 0);