}
}
+
+
/*
===============================================================================
UNDERWATER EFFECT
+Muffles the intensity of sounds when the player is underwater
+
===============================================================================
*/
-static struct {
- 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}};
+static struct
+{
+ 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);
}
- underwater.alpha = exp(-underwater.intensity * log(12.f));
+ underwater.alpha = underwater.intensity ? exp(-underwater.intensity * log(12.f)) : 1.f;
}
static void S_UnderwaterFilter(int endtime)
{
int i;
int sl;
- if (!underwater.intensity) {
- if (endtime > 0) {
- for (sl = 0; sl < SND_LISTENERS; sl++) {
+
+ if (!underwater.intensity)
+ {
+ if (endtime > 0)
+ for (sl = 0; sl < SND_LISTENERS; sl++)
underwater.accum[sl] = paintbuffer[endtime-1].sample[sl];
- }
- }
return;
}
- for (i = 0; i < endtime; i++) {
- for (sl = 0; sl < SND_LISTENERS; sl++) {
+
+ for (i = 0; i < endtime; i++)
+ for (sl = 0; sl < SND_LISTENERS; sl++)
+ {
underwater.accum[sl] += underwater.alpha * (paintbuffer[i].sample[sl] - underwater.accum[sl]);
paintbuffer[i].sample[sl] = underwater.accum[sl];
}
- }
}
+
+
/*
===============================================================================