aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound/midiparser_sci.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2011-08-28 14:06:57 +0300
committerFilippos Karapetis2011-08-28 14:07:42 +0300
commit2798c65d756e82db8eb4a58ca3db526215557333 (patch)
tree7369296e4ad55bc65e4a1e95f43ae7ff5878b36f /engines/sci/sound/midiparser_sci.cpp
parent039805ad3bb1b87afe3d32d8b625afaebb1e9f2f (diff)
downloadscummvm-rg350-2798c65d756e82db8eb4a58ca3db526215557333.tar.gz
scummvm-rg350-2798c65d756e82db8eb4a58ca3db526215557333.tar.bz2
scummvm-rg350-2798c65d756e82db8eb4a58ca3db526215557333.zip
SCI: Fixed bug #3297883 - "SCI: LB1 (Amiga) - Intro stuck"
Diffstat (limited to 'engines/sci/sound/midiparser_sci.cpp')
-rw-r--r--engines/sci/sound/midiparser_sci.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index f48a68dc66..ad7ba7ca36 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -480,11 +480,18 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
info.basic.param2 = 0;
if (info.channel() == 0xF) {// SCI special case
if (info.basic.param1 != kSetSignalLoop) {
- // at least in kq5/french&mac the first scene in the intro has a song that sets signal to 4 immediately
- // on tick 0. Signal isn't set at that point by sierra sci and it would cause the castle daventry text to
- // get immediately removed, so we currently filter it.
- // Sierra SCI ignores them as well at that time
- if ((_position._play_tick) || (info.delta)) {
+ // At least in kq5/french&mac the first scene in the intro has
+ // a song that sets signal to 4 immediately on tick 0. Signal
+ // isn't set at that point by sierra sci and it would cause the
+ // castle daventry text to get immediately removed, so we
+ // currently filter it. Sierra SCI ignores them as well at that
+ // time. However, this filtering should only be performed for
+ // SCI1 and newer games. Signalling is done differently in SCI0
+ // though, so ignoring these signals in SCI0 games will result
+ // in glitches (e.g. the intro of LB1 Amiga gets stuck - bug
+ // #3297883). Refer to MusicEntry::setSignal() in sound/music.cpp.
+ if (_soundVersion <= SCI_VERSION_0_LATE ||
+ _position._play_tick || info.delta) {
_signalSet = true;
_signalToSet = info.basic.param1;
}