diff options
author | Filippos Karapetis | 2013-07-07 19:41:42 +0300 |
---|---|---|
committer | Filippos Karapetis | 2013-07-07 19:41:42 +0300 |
commit | 0f30ba2f10df20cbe57f67fcf98b3125c1c57e5f (patch) | |
tree | 7961b11148917d11306dc374679af3ee5994b6b2 /engines/sci/sound/midiparser_sci.cpp | |
parent | a949a88220eea86cb15182daccd34a269ff7d6dd (diff) | |
download | scummvm-rg350-0f30ba2f10df20cbe57f67fcf98b3125c1c57e5f.tar.gz scummvm-rg350-0f30ba2f10df20cbe57f67fcf98b3125c1c57e5f.tar.bz2 scummvm-rg350-0f30ba2f10df20cbe57f67fcf98b3125c1c57e5f.zip |
SCI: Fix bug #3614566 - "LSL6: ScummVM locks up at Electro-Shock room"
We now do the jumpToTick() for hold events after waiting for the delta
of the current event, like we do for the signal set events. This keeps
the fixes for the hold timings in QFG3, while not breaking LSL6.
Many thanks to wjp for pinpointing the actual cause of the issue.
Diffstat (limited to 'engines/sci/sound/midiparser_sci.cpp')
-rw-r--r-- | engines/sci/sound/midiparser_sci.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp index 9546b1503f..00089cd4c3 100644 --- a/engines/sci/sound/midiparser_sci.cpp +++ b/engines/sci/sound/midiparser_sci.cpp @@ -57,6 +57,7 @@ MidiParser_SCI::MidiParser_SCI(SciVersion soundVersion, SciMusic *music) : _signalToSet = 0; _dataincAdd = false; _dataincToAdd = 0; + _jumpToHoldTick = false; _resetOnPause = false; _pSnd = 0; } @@ -452,6 +453,10 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) { debugC(4, kDebugLevelSound, "signal %04x", _signalToSet); } + if (_jumpToHoldTick) { + _jumpToHoldTick = false; + jumpToTick(_loopTick, false, false); + } info.start = _position._playPos; info.delta = 0; @@ -532,9 +537,7 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) { // 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) { - uint32 extraDelta = info.delta; - jumpToTick(_loopTick, false, false); - _nextEvent.delta += extraDelta; + _jumpToHoldTick = true; } break; case kUpdateCue: |