aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2013-04-05 21:12:47 +0200
committerWillem Jan Palenstijn2013-04-05 21:14:55 +0200
commit841b6ca540f4d24a99302c873dc37aee374c4d7b (patch)
tree9a93428c2234cd921ea92f3cf303ce8efa608391 /engines/sci
parent89bf72ff5d608b86c6efc413baedff7618f4b44e (diff)
downloadscummvm-rg350-841b6ca540f4d24a99302c873dc37aee374c4d7b.tar.gz
scummvm-rg350-841b6ca540f4d24a99302c873dc37aee374c4d7b.tar.bz2
scummvm-rg350-841b6ca540f4d24a99302c873dc37aee374c4d7b.zip
SCI: Revert "Add a more generic solution for the problem found in bug #3605269"
This reverts commit c6320a28e483e52b489cae8e86774008e030492b. SSCI does not interpret signals on other channels than 15. Conflicts: engines/sci/sound/soundcmd.cpp
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/sound/midiparser_sci.cpp10
-rw-r--r--engines/sci/sound/soundcmd.cpp15
2 files changed, 11 insertions, 14 deletions
diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp
index 0e5672460d..4e54797960 100644
--- a/engines/sci/sound/midiparser_sci.cpp
+++ b/engines/sci/sound/midiparser_sci.cpp
@@ -475,13 +475,7 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
case 0xC:
info.basic.param1 = *(_position._playPos++);
info.basic.param2 = 0;
- // Normally, song signalling events are sent through the special SCI
- // channel 15. There are some songs where that special channel is
- // missing completely, and the signals are sent through the other
- // channels. Such a case is the Windows version of KQ5CD, songs 1840,
- // 1843 and 1849 (bug #3605269). Therefore, we check if channel 15 is
- // present, and if not, we accept signals from all other channels.
- if (info.channel() == 0xF || !_channelUsed[15]) { // SCI special channel
+ 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
@@ -497,8 +491,6 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
_position._playTick || info.delta) {
_signalSet = true;
_signalToSet = info.basic.param1;
- debugC(kDebugLevelSound, "Setting signal of song %d to %d from channel %d",
- _pSnd->resourceId, _signalToSet, info.channel());
}
} else {
_loopTick = _position._playTick + info.delta;
diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp
index 82099fd611..402991094b 100644
--- a/engines/sci/sound/soundcmd.cpp
+++ b/engines/sci/sound/soundcmd.cpp
@@ -177,11 +177,16 @@ void SoundCommandParser::processPlaySound(reg_t obj) {
writeSelectorValue(_segMan, obj, SELECTOR(state), kSoundPlaying);
}
- // WORKAROUND: Song 1849 in the Windows version of KQ5CD does not have
- // correct signalling data, causing the game scripts to wait indefinitely
- // for the missing signal. We signal the game scripts to stop waiting
- // forever by setting the song's dataInc selector to something other than 0
- if (g_sci->getGameId() == GID_KQ5 && resourceId == 1849)
+ // WORKAROUND: Songs 1840, 1843 and 1849 in the Windows version of KQ5CD
+ // are all missing their channel 15 (all played during its ending
+ // sequences, when fighting with Mordack). This makes the game scripts
+ // wait indefinitely for the missing signals in these songs. In the
+ // original interpreter, this bug manifests as an "Out of heap" error. We
+ // signal the game scripts to stop waiting forever by setting the song's
+ // dataInc selector to something other than 0. This causes Mordack's
+ // appearing animation to occur a bit earlier than expected, but at least
+ // the game doesn't freeze at that point. Fixes bug #3605269.
+ if (g_sci->getGameId() == GID_KQ5 && (resourceId == 1840 || resourceId == 1843 || resourceId == 1849))
musicSlot->dataInc = 1;
musicSlot->loop = readSelectorValue(_segMan, obj, SELECTOR(loop));