diff -r be5d9fd2c56a -r de07c8423beb hedgewars/uSound.pas --- a/hedgewars/uSound.pas Thu Mar 08 17:07:14 2018 +0100 +++ b/hedgewars/uSound.pas Thu Mar 08 18:15:06 2018 +0100 @@ -63,8 +63,10 @@ // then the sound's playback won't be interrupted if asked to play again. procedure PlaySound(snd: TSound); procedure PlaySound(snd: TSound; keepPlaying: boolean); +procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean); procedure PlaySoundV(snd: TSound; voicepack: PVoicepack); procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean); +procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean; ignoreMask: boolean); // Plays sound snd [of voicepack] in a loop, but starts with fadems milliseconds of fade-in. // Returns sound channel of the looped sound. @@ -80,6 +82,7 @@ procedure StopSoundChan(chn, fadems: LongInt); procedure AddVoice(snd: TSound; voicepack: PVoicepack); +procedure AddVoice(snd: TSound; voicepack: PVoicepack; ignoreMask: boolean); procedure PlayNextVoice; @@ -414,20 +417,30 @@ procedure PlaySound(snd: TSound); begin - PlaySoundV(snd, nil, false); + PlaySoundV(snd, nil, false, false); end; procedure PlaySound(snd: TSound; keepPlaying: boolean); begin - PlaySoundV(snd, nil, keepPlaying); + PlaySoundV(snd, nil, keepPlaying, false); +end; + +procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean); +begin + PlaySoundV(snd, nil, keepPlaying, ignoreMask); end; procedure PlaySoundV(snd: TSound; voicepack: PVoicepack); begin - PlaySoundV(snd, voicepack, false); + PlaySoundV(snd, voicepack, false, false); end; procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean); +begin + PlaySoundV(snd, voicepack, keepPlaying, false); +end; + +procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean; ignoreMask: boolean); var s:shortstring; rwops: PSDL_RWops; begin @@ -437,6 +450,9 @@ if keepPlaying and (lastChan[snd] <> -1) and (Mix_Playing(lastChan[snd]) <> 0) then exit; + if (ignoreMask = false) and (MaskedSounds[snd] = true) then + exit; + if (voicepack <> nil) then begin if (voicepack^.chunks[snd] = nil) and (Soundz[snd].Path = ptVoices) and (Soundz[snd].FileName <> '') then @@ -486,10 +502,19 @@ end; procedure AddVoice(snd: TSound; voicepack: PVoicepack); +begin + AddVoice(snd, voicepack, false); +end; + +procedure AddVoice(snd: TSound; voicepack: PVoicepack; ignoreMask: boolean); var i : LongInt; begin + if (not isSoundEnabled) or fastUntilLag or ((LastVoice.snd = snd) and (LastVoice.voicepack = voicepack)) then exit; + if (ignoreMask = false) and (MaskedSounds[snd] = true) then + exit; + if (snd = sndVictory) or (snd = sndFlawless) then begin Mix_FadeOutChannel(-1, 800);