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 | |
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.
-rw-r--r-- | engines/sci/sound/midiparser_sci.cpp | 9 | ||||
-rw-r--r-- | engines/sci/sound/midiparser_sci.h | 1 |
2 files changed, 7 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: diff --git a/engines/sci/sound/midiparser_sci.h b/engines/sci/sound/midiparser_sci.h index d3fd337644..7bd68994c8 100644 --- a/engines/sci/sound/midiparser_sci.h +++ b/engines/sci/sound/midiparser_sci.h @@ -110,6 +110,7 @@ protected: int16 _signalToSet; bool _dataincAdd; int16 _dataincToAdd; + bool _jumpToHoldTick; bool _resetOnPause; bool _channelUsed[16]; |