aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/imuse
diff options
context:
space:
mode:
Diffstat (limited to 'engines/scumm/imuse')
-rw-r--r--engines/scumm/imuse/imuse.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/engines/scumm/imuse/imuse.cpp b/engines/scumm/imuse/imuse.cpp
index 8b892f5fda..78fd821f30 100644
--- a/engines/scumm/imuse/imuse.cpp
+++ b/engines/scumm/imuse/imuse.cpp
@@ -675,6 +675,27 @@ bool IMuseInternal::startSound_internal(int sound, int offset) {
if (_game_id == GID_SAMNMAX && sound == 82 && getSoundStatus_internal(81, false))
ImClearTrigger(81, 1);
+ // Workaround for monkey2 bug #1410 / Scabb Island
+ //
+ // Tunes involved:
+ // 100 - Captain Dread's map
+ // 101 - Woodtick
+ // 107 - Map of Scabb Island
+ //
+ // If you go from Woodtick to the map of Scabb Island tune 107 is added as
+ // trigger on 101 and 101 moves to an outro and stop (triggering start
+ // of 107). Then at Captain Dread tune 107 is stopped and 100 is started.
+ //
+ // If you go quickly enough, the trigger occurs not at the Scabb Island
+ // map but at Captain Dread causing tune 107 not to be stopped.
+ // So we prevent starting 107 if 100 is already running.
+ if (_game_id == GID_MONKEY2 && (sound == 107) && (getSoundStatus_internal(100, true) == 1))
+ return false;
+
+ // In some cases 107 is running and doesn't get killed at Dread's map
+ if (_game_id == GID_MONKEY2 && (sound == 100) && (getSoundStatus_internal(107, true) == 1))
+ IMuseInternal::stopSound_internal(107);
+
player->clear();
player->setOffsetNote(offset);
return player->startSound(sound, driver);