diff options
author | md5 | 2011-04-28 04:13:44 +0300 |
---|---|---|
committer | md5 | 2011-04-28 04:14:54 +0300 |
commit | 5654e1257551bf176c7fd06c756612bec3d79033 (patch) | |
tree | c75224c02adea98c21631c3ce0495dbe2bd5fd95 /engines/sci/sound | |
parent | af28efae4191a3885b2a19a9fe8a4c34f242985b (diff) | |
download | scummvm-rg350-5654e1257551bf176c7fd06c756612bec3d79033.tar.gz scummvm-rg350-5654e1257551bf176c7fd06c756612bec3d79033.tar.bz2 scummvm-rg350-5654e1257551bf176c7fd06c756612bec3d79033.zip |
SCI: Added a more specific workaround for bug #3267956. This fixes bug #3291115 - "KQ6: Game freezes when getting paper from web"
Diffstat (limited to 'engines/sci/sound')
-rw-r--r-- | engines/sci/sound/soundcmd.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp index 9ad964b67e..c6a7fec8ee 100644 --- a/engines/sci/sound/soundcmd.cpp +++ b/engines/sci/sound/soundcmd.cpp @@ -325,14 +325,6 @@ reg_t SoundCommandParser::kDoSoundFade(int argc, reg_t *argv, reg_t acc) { return acc; } - // If the current volume of the slot is the same as the target volume, - // return without performing any fading. This fixes the music in room - // 406 in KQ6 (bug #3267956), where the game scripts ask for the background - // music to be played, and then faded to volume 127 (but the music is - // already at volume 127) and subsequently stopped. - if (argc >= 4 && musicSlot->volume == CLIP<uint16>(argv[1].toUint16(), 0, MUSIC_VOLUME_MAX)) - return acc; - switch (argc) { case 1: // SCI0 // SCI0 fades out all the time and when fadeout is done it will also @@ -353,7 +345,19 @@ reg_t SoundCommandParser::kDoSoundFade(int argc, reg_t *argv, reg_t acc) { musicSlot->fadeStep = volume > musicSlot->fadeTo ? -5 : 5; musicSlot->fadeTickerStep = argv[2].toUint16() * 16667 / _music->soundGetTempo(); musicSlot->fadeTicker = 0; + // TODO: We only handle zero and non-zero parameters, but this parameter + // can have other values as well (e.g. it's 3 in KQ6). musicSlot->stopAfterFading = (argc == 5) ? (argv[4].toUint16() != 0) : false; + + // WORKAROUND/HACK: In the labyrinth in KQ6, when falling in the pit and + // lighting the lantern, the game scripts perform a fade in of the game + // music, but set it to stop after fading. Remove that flag here. This is + // marked as both a workaround and a hack because this issue could be a + // problem with our fading code and an incorrect handling of that + // parameter, or a script bug in that scene. Fixes bug #3267956. + if (g_sci->getGameId() == GID_KQ6 && g_sci->getEngineState()->currentRoomNumber() == 406 && + musicSlot->resourceId == 400) + musicSlot->stopAfterFading = false; break; default: |