From aa409151578ca633ec7fab5252f027ea657f00fd Mon Sep 17 00:00:00 2001 From: bones_was_here Date: Mon, 11 Mar 2024 02:10:57 +1000 Subject: [PATCH] Underwater sound filter: simplify code, improve cvar description Signed-off-by: bones_was_here --- snd_main.c | 3 +-- snd_mix.c | 20 ++++++-------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/snd_main.c b/snd_main.c index 029e65d9..03d7e33e 100644 --- a/snd_main.c +++ b/snd_main.c @@ -120,7 +120,6 @@ static const speakerlayout_t snd_speakerlayouts[] = } }; -void S_SetUnderwaterIntensity(void); // ======================================================================= // Internal sound data & structures @@ -184,7 +183,7 @@ cvar_t snd_spatialization_prologic_frontangle = {CF_CLIENT | CF_ARCHIVE, "snd_sp cvar_t snd_spatialization_occlusion = {CF_CLIENT | CF_ARCHIVE, "snd_spatialization_occlusion", "1", "enable occlusion testing on spatialized sounds, which simply quiets sounds that are blocked by the world; 1 enables PVS method, 2 enables LineOfSight method, 3 enables both"}; // Cvars declared in snd_main.h (shared with other snd_*.c files) -cvar_t snd_waterfx = {CF_CLIENT | CF_ARCHIVE, "snd_waterfx", "1", "underwater sound filter"}; +cvar_t snd_waterfx = {CF_CLIENT | CF_ARCHIVE, "snd_waterfx", "1", "underwater sound filter strength"}; cvar_t _snd_mixahead = {CF_CLIENT | CF_ARCHIVE, "_snd_mixahead", "0.15", "how much sound to mix ahead of time"}; cvar_t snd_streaming = {CF_CLIENT | CF_ARCHIVE, "snd_streaming", "1", "enables keeping compressed ogg sound files compressed, decompressing them only as needed, otherwise they will be decompressed completely at load (may use a lot of memory); when set to 2, streaming is performed even if this would waste memory"}; cvar_t snd_streaming_length = {CF_CLIENT | CF_ARCHIVE, "snd_streaming_length", "1", "decompress sounds completely if they are less than this play time when snd_streaming is 1"}; diff --git a/snd_mix.c b/snd_mix.c index b83c3ae7..9d5c2e54 100644 --- a/snd_mix.c +++ b/snd_mix.c @@ -323,32 +323,24 @@ Muffles the intensity of sounds when the player is underwater static struct { - float intensity; - float alpha; - float accum[SND_LISTENERS]; + float intensity; + float alpha; + float accum[SND_LISTENERS]; } underwater = {0.f, 1.f, {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f}}; void S_SetUnderwaterIntensity(void) { - float host_frametime = cl.realframetime; - float target = cl.view_underwater ? 1.f : 0.f; - - if (snd_waterfx.value < 0.f) - target *= 0.f; - else if (snd_waterfx.value > 2.f) - target *= 2.f; - else - target *= snd_waterfx.value; + float target = cl.view_underwater ? bound(0.f, snd_waterfx.value, 2.f) : 0.f; if (underwater.intensity < target) { - underwater.intensity += host_frametime * 4.f; + underwater.intensity += cl.realframetime * 4.f; underwater.intensity = min(underwater.intensity, target); } else if (underwater.intensity > target) { - underwater.intensity -= host_frametime * 4.f; + underwater.intensity -= cl.realframetime * 4.f; underwater.intensity = max(underwater.intensity, target); } -- 2.39.2