aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound
diff options
context:
space:
mode:
authorFilippos Karapetis2013-07-07 19:41:42 +0300
committerFilippos Karapetis2013-07-07 19:41:42 +0300
commit0f30ba2f10df20cbe57f67fcf98b3125c1c57e5f (patch)
tree7961b11148917d11306dc374679af3ee5994b6b2 /engines/sci/sound
parenta949a88220eea86cb15182daccd34a269ff7d6dd (diff)
downloadscummvm-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')
-rw-r--r--engines/sci/sound/midiparser_sci.cpp9
-rw-r--r--engines/sci/sound/midiparser_sci.h1
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];