aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/sound/soundcmd.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp
index 4d12d95dc7..c0de7fe90d 100644
--- a/engines/sci/sound/soundcmd.cpp
+++ b/engines/sci/sound/soundcmd.cpp
@@ -177,6 +177,18 @@ void SoundCommandParser::processPlaySound(reg_t obj) {
writeSelectorValue(_segMan, obj, SELECTOR(state), kSoundPlaying);
}
+ // 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))
+ writeSelectorValue(_segMan, obj, SELECTOR(dataInc), 1);
+
musicSlot->loop = readSelectorValue(_segMan, obj, SELECTOR(loop));
musicSlot->priority = readSelectorValue(_segMan, obj, SELECTOR(priority));
// Reset hold when starting a new song. kDoSoundSetHold is always called after