diff options
author | md5 | 2011-02-28 01:06:29 +0200 |
---|---|---|
committer | md5 | 2011-02-28 01:06:29 +0200 |
commit | 1dcce4445c28720cd093b6a36b376a36758138eb (patch) | |
tree | 40d72b52af289495e3031166a87f7232c4230ddf /engines/sci/sound | |
parent | c7bfbc31e2f23f899dcf884ef9a9ba3a7bd0ebe8 (diff) | |
download | scummvm-rg350-1dcce4445c28720cd093b6a36b376a36758138eb.tar.gz scummvm-rg350-1dcce4445c28720cd093b6a36b376a36758138eb.tar.bz2 scummvm-rg350-1dcce4445c28720cd093b6a36b376a36758138eb.zip |
SCI: Reverted rc7bfbc3 and fixed the actual cause of bug #3106107
While fast forwarding a song, disable its hold value together with any possible
sound looping, so that the song won't loop forever.
Diffstat (limited to 'engines/sci/sound')
-rw-r--r-- | engines/sci/sound/music.cpp | 5 | ||||
-rw-r--r-- | engines/sci/sound/soundcmd.cpp | 9 |
2 files changed, 5 insertions, 9 deletions
diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index a08525d760..2331f2f959 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -441,10 +441,15 @@ void SciMusic::soundPlay(MusicEntry *pSnd) { // when loading a saved game. Fixes bug #3083151. uint16 prevLoop = pSnd->loop; pSnd->loop = 0; + // Same for hold. Fixes bug #3106107. + int16 prevHold = pSnd->hold; + pSnd->hold = -1; // Fast forward to the last position and perform associated events when loading pSnd->pMidiParser->jumpToTick(pSnd->ticker, true, true, true); // Restore looping pSnd->loop = prevLoop; + // Restore hold + pSnd->hold = prevHold; } pSnd->pMidiParser->mainThreadEnd(); _mutex.unlock(); diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp index 33be8f4bca..1e6d0aef87 100644 --- a/engines/sci/sound/soundcmd.cpp +++ b/engines/sci/sound/soundcmd.cpp @@ -318,9 +318,6 @@ reg_t SoundCommandParser::kDoSoundFade(int argc, reg_t *argv, reg_t acc) { int volume = musicSlot->volume; - // Reset hold so that the song can actually stop - musicSlot->hold = -1; - // If sound is not playing currently, set signal directly if (musicSlot->status != kSoundPlaying) { debugC(kDebugLevelSound, "kDoSound(fade): %04x:%04x fading requested, but sound is currently not playing", PRINT_REG(obj)); @@ -534,12 +531,6 @@ reg_t SoundCommandParser::kDoSoundSetHold(int argc, reg_t *argv, reg_t acc) { return acc; } - // Is the song being faded? If yes, don't set a hold value, otherwise the - // song will never actually stop. Fixes bug #3106107. - if (musicSlot->fadeStep && argv[1].toSint16() != -1) { - warning("kDoSound(setHold): Attempt to set a hold value (%d) to a song being faded, ignoring", argv[1].toSint16()); - return acc; - } // Set the special hold marker ID where the song should be looped at. musicSlot->hold = argv[1].toSint16(); return acc; |