From f280789afe397e384a81411a65e1e12a308c1125 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 16 Apr 2013 23:10:09 +0200 Subject: SCI: Don't suppress loop delta in SCI1 midi This fixes bug #3293354. --- engines/sci/sound/midiparser_sci.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'engines/sci/sound/midiparser_sci.cpp') 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); -- cgit v1.2.3