Skip to content
Browse files

SCI: Fix bug #3605269 - "SCI: KQ5 Windows CD - Game Hangs Before Fina…

…l Battle"

This is caused because songs 1840, 1843 and 1849 are all missing their special
SCI signaling channel (channel 15), so the game scripts wait indefinitely for
signals which are never set
  • Loading branch information...
1 parent f81ce4d commit 2e93ee2b8301cf48e86c799c429f5e09fd09f051 @bluegr bluegr committed Apr 1, 2013
Showing with 12 additions and 0 deletions.
  1. +12 −0 engines/sci/sound/soundcmd.cpp
View
12 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

0 comments on commit 2e93ee2

Please sign in to comment.
Something went wrong with that request. Please try again.