aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authormd52011-04-28 04:13:44 +0300
committermd52011-04-28 04:14:54 +0300
commit5654e1257551bf176c7fd06c756612bec3d79033 (patch)
treec75224c02adea98c21631c3ce0495dbe2bd5fd95 /engines
parentaf28efae4191a3885b2a19a9fe8a4c34f242985b (diff)
downloadscummvm-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')
-rw-r--r--engines/sci/sound/soundcmd.cpp20
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: