Skip to content

Commit

Permalink
SCI: Reverted rc7bfbc3 and fixed the actual cause of bug #3106107
Browse files Browse the repository at this point in the history
While fast forwarding a song, disable its hold value together with any possible
sound looping, so that the song won't loop forever.
  • Loading branch information
bluegr committed Feb 27, 2011
1 parent c7bfbc3 commit 1dcce44
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 9 deletions.
5 changes: 5 additions & 0 deletions engines/sci/sound/music.cpp
Expand Up @@ -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();
Expand Down
9 changes: 0 additions & 9 deletions engines/sci/sound/soundcmd.cpp
Expand Up @@ -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));
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 1dcce44

Please sign in to comment.