aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Castricum2017-06-16 08:16:30 +0200
committerEugene Sandulenko2017-07-30 22:10:54 +0200
commitd58f594755449f6a0402fdf5dba61cfa5edcf58e (patch)
tree9cee72ab256942408a48b374fd9da61492fc8572
parent392d8b44ff99d08eabe6007b259d26545f085583 (diff)
downloadscummvm-rg350-d58f594755449f6a0402fdf5dba61cfa5edcf58e.tar.gz
scummvm-rg350-d58f594755449f6a0402fdf5dba61cfa5edcf58e.tar.bz2
scummvm-rg350-d58f594755449f6a0402fdf5dba61cfa5edcf58e.zip
SCUMM: MI2 kill tune 113 on start of next, Fixes bug #1410 / Booty Island
Fix the "MI2: Two soundtracks playing at once" bug from the bug tracker. It's triggered when the player enters the kiosk for the second time and leaves before tune 113 is started.
-rw-r--r--engines/scumm/imuse/imuse.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/engines/scumm/imuse/imuse.cpp b/engines/scumm/imuse/imuse.cpp
index 78fd821f30..b7b72ba181 100644
--- a/engines/scumm/imuse/imuse.cpp
+++ b/engines/scumm/imuse/imuse.cpp
@@ -696,6 +696,23 @@ bool IMuseInternal::startSound_internal(int sound, int offset) {
if (_game_id == GID_MONKEY2 && (sound == 100) && (getSoundStatus_internal(107, true) == 1))
IMuseInternal::stopSound_internal(107);
+ // Workaround for monkey2 bug #1410 / Booty Island
+ //
+ // Tunes involved
+ // 100 - Captain Dread's map
+ // 113 - Guard Kiosk / Mardi Grass
+ // 115 - Map of Booty Island / Ville de la Booty
+ // 118 - Ville de la Booty
+ //
+ // When you enter the Guard Kiosk tune 113 is added as trigger on song
+ // 115. Then if you leave, 113 is stopped and 115 is started again.
+ // If you leave quickly enough, the trigger occurs on the map and tune
+ // 113 will not stop.
+ // We kill 113 on entry of one of the other locations (Captain Dread
+ // or Ville de la Booty) because tune 115 is not always started.
+ if (_game_id == GID_MONKEY2 && (sound == 100 || sound == 115 || sound == 118) && (getSoundStatus_internal(113, true) == 1))
+ IMuseInternal::stopSound_internal(113);
+
player->clear();
player->setOffsetNote(offset);
return player->startSound(sound, driver);