diff -r 4d0c80f7aa32 -r 350adfa0e896 hedgewars/uSound.pas --- a/hedgewars/uSound.pas Thu Oct 25 23:46:31 2018 +0200 +++ b/hedgewars/uSound.pas Fri Oct 26 03:59:20 2018 +0200 @@ -65,9 +65,15 @@ procedure PlaySound(snd: TSound); procedure PlaySound(snd: TSound; keepPlaying: boolean); procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean); +procedure PlaySound(snd: TSound; keepPlaying, ignoreMask, soundAsMusic: 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); +procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask: boolean); +procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask, soundAsMusic: boolean); + +// Plays/stops a sound to replace the main background music temporarily. +procedure PlayMusicSound(snd: TSound); +procedure StopMusicSound(snd: TSound); // Plays sound snd [of voicepack] in a loop, but starts with fadems milliseconds of fade-in. // Returns sound channel of the looped sound. @@ -79,6 +85,7 @@ // Stops the normal/looped sound of the given type/in the given channel // [with a fade-out effect for fadems milliseconds]. procedure StopSound(snd: TSound); +procedure StopSound(snd: TSound; soundAsMusic: boolean); procedure StopSoundChan(chn: LongInt); procedure StopSoundChan(chn, fadems: LongInt); @@ -435,34 +442,44 @@ procedure PlaySound(snd: TSound); begin - PlaySoundV(snd, nil, false, false); + PlaySoundV(snd, nil, false, false, false); end; procedure PlaySound(snd: TSound; keepPlaying: boolean); begin - PlaySoundV(snd, nil, keepPlaying, false); + PlaySoundV(snd, nil, keepPlaying, false, false); end; procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask: boolean); begin - PlaySoundV(snd, nil, keepPlaying, ignoreMask); + PlaySoundV(snd, nil, keepPlaying, ignoreMask, false); +end; + +procedure PlaySound(snd: TSound; keepPlaying: boolean; ignoreMask, soundAsMusic: boolean); +begin + PlaySoundV(snd, nil, keepPlaying, ignoreMask, soundAsMusic); end; procedure PlaySoundV(snd: TSound; voicepack: PVoicepack); begin - PlaySoundV(snd, voicepack, false, false); + PlaySoundV(snd, voicepack, false, false, false); end; procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean); begin - PlaySoundV(snd, voicepack, keepPlaying, false); + PlaySoundV(snd, voicepack, keepPlaying, false, false); end; -procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean; ignoreMask: boolean); +procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask: boolean); +begin + PlaySoundV(snd, voicepack, keepPlaying, ignoreMask, false); +end; + +procedure PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask, soundAsMusic: boolean); var s:shortstring; rwops: PSDL_RWops; begin - if (not isSoundEnabled) or fastUntilLag then + if ((not isSoundEnabled) and (not (soundAsMusic and isMusicEnabled))) or fastUntilLag then exit; if keepPlaying and (lastChan[snd] <> -1) and (Mix_Playing(lastChan[snd]) <> 0) then @@ -528,6 +545,18 @@ end; end; +procedure PlayMusicSound(snd: TSound); +begin + PauseMusic; + PlaySound(snd, false, false, true); +end; + +procedure StopMusicSound(snd: TSound); +begin + StopSound(snd, true); + ResumeMusic; +end; + procedure AddVoice(snd: TSound; voicepack: PVoicepack); begin AddVoice(snd, voicepack, false); @@ -651,7 +680,12 @@ procedure StopSound(snd: TSound); begin - if not isSoundEnabled then + StopSound(snd, false); +end; + +procedure StopSound(snd: TSound; soundAsMusic: boolean); +begin + if ((not isSoundEnabled) and (not (soundAsMusic and isMusicEnabled))) then exit; if (lastChan[snd] <> -1) and (Mix_Playing(lastChan[snd]) <> 0) then