mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-05 09:49:14 +00:00
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.
This commit is contained in:
parent
c7bfbc31e2
commit
1dcce4445c
@ -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();
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user