# HG changeset patch # User Wuzzy # Date 1540519160 -7200 # Node ID 350adfa0e89642cc5f61d9ad1a18354cac0051c8 # Parent 4d0c80f7aa32b430af00cecb09ea6a7a5127d051 Refactor usage of sndRideOfTheValkyries, now can play if music is on and sound is off diff -r 4d0c80f7aa32 -r 350adfa0e896 ChangeLog.txt --- a/ChangeLog.txt Thu Oct 25 23:46:31 2018 +0200 +++ b/ChangeLog.txt Fri Oct 26 03:59:20 2018 +0200 @@ -31,6 +31,7 @@ * Laser sight now works properly through wrap world edge * Fix projectiles behaving incorrectly with land just behind the wrap world edge * Fix bee weapon becoming unusable when hitting attack key in mid-air + * Fix hog sometimes getting stuck in land if roping very fast * Limit hedgehog health to 268435455 to prevent some bugs Game, controls and commands: @@ -57,6 +58,7 @@ * Prevent voices from being spoken directly before a victory voice * Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme) * Fix retreat timer appearing after using baseball bat or whip and immediately taking damage + * Fix Ride of the Valkyries not playing if music is enabled and sounds are disabled Frontend: + Add help button in main menu (link to Hedgewars Wiki) diff -r 4d0c80f7aa32 -r 350adfa0e896 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Thu Oct 25 23:46:31 2018 +0200 +++ b/hedgewars/uGearsHandlersMess.pas Fri Oct 26 03:59:20 2018 +0200 @@ -4174,8 +4174,7 @@ if (HHGear <> nil) and ((HHGear^.Message and gmLJump) <> 0) and ((Gear^.State and gsttmpFlag) = 0) then begin Gear^.State := Gear^.State or gsttmpFlag; - PauseMusic; - playSound(sndRideOfTheValkyries); + PlayMusicSound(sndRideOfTheValkyries); inCinematicMode:= true; end; @@ -4190,8 +4189,7 @@ begin inCinematicMode:= false; StopSoundChan(Gear^.SoundChannel); - StopSound(sndRideOfTheValkyries); - ResumeMusic; + StopMusicSound(sndRideOfTheValkyries); if ((Gear^.State and gstCollision) <> 0) then begin 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