aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound/midiparser_sci.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2013-04-16 23:10:09 +0200
committerWillem Jan Palenstijn2013-04-16 23:10:09 +0200
commitf280789afe397e384a81411a65e1e12a308c1125 (patch)
tree1166b65896e339d4977ec24ab291653949ce6160 /engines/sci/sound/midiparser_sci.cpp
parent457f5da0957a964bff95dc4e545817540332d71d (diff)
downloadscummvm-rg350-f280789afe397e384a81411a65e1e12a308c1125.tar.gz
scummvm-rg350-f280789afe397e384a81411a65e1e12a308c1125.tar.bz2
scummvm-rg350-f280789afe397e384a81411a65e1e12a308c1125.zip
SCI: Don't suppress loop delta in SCI1 midi
This fixes bug #3293354.
Diffstat (limited to 'engines/sci/sound/midiparser_sci.cpp')
-rw-r--r--engines/sci/sound/midiparser_sci.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index 2e66a16cb7..9546b1503f 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -531,8 +531,11 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
// Check if the hold ID marker is the same as the hold ID
// marker set for that song by cmdSetSoundHold.
// If it is, loop back, but don't stop notes when jumping.
- if (info.basic.param2 == _pSnd->hold)
+ if (info.basic.param2 == _pSnd->hold) {
+ uint32 extraDelta = info.delta;
jumpToTick(_loopTick, false, false);
+ _nextEvent.delta += extraDelta;
+ }
break;
case kUpdateCue:
_dataincAdd = true;
@@ -635,7 +638,9 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
// treats this case as an infinite loop (bug #3311911).
if (_pSnd->loop || _pSnd->hold > 0) {
// We need to play it again...
+ uint32 extraDelta = info.delta;
jumpToTick(_loopTick);
+ _nextEvent.delta += extraDelta;
} else {
_pSnd->status = kSoundStopped;
_pSnd->setSignal(SIGNAL_OFFSET);