mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-16 17:11:03 +00:00
Fix underwater sfx in demos
This commit is contained in:
parent
924cad6bdf
commit
1a514560da
1 changed files with 85 additions and 25 deletions
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "header/common.h"
|
||||
#include "../client/sound/header/local.h"
|
||||
#include "../client/header/client.h"
|
||||
|
||||
#if !defined(DEDICATED_ONLY) && defined(USE_OPENAL)
|
||||
void AL_Underwater();
|
||||
|
@ -1265,16 +1266,89 @@ PM_ClampAngles(void)
|
|||
AngleVectors(pm->viewangles, pml.forward, pml.right, pml.up);
|
||||
}
|
||||
|
||||
void PM_CalculateViewHeightForDemo()
|
||||
{
|
||||
if (pm->s.pm_type == PM_GIB)
|
||||
pm->viewheight = 8;
|
||||
else {
|
||||
if ((pm->s.pm_flags & PMF_DUCKED) != 0)
|
||||
pm->viewheight = -2;
|
||||
else
|
||||
pm->viewheight = 22;
|
||||
}
|
||||
}
|
||||
|
||||
void PM_CalculateWaterLevelForDemo()
|
||||
{
|
||||
vec3_t point;
|
||||
int cont;
|
||||
float sample1;
|
||||
float sample2;
|
||||
|
||||
point[0] = pml.origin[0];
|
||||
point[1] = pml.origin[1];
|
||||
|
||||
pm->waterlevel = 0;
|
||||
pm->watertype = 0;
|
||||
|
||||
sample2 = pm->viewheight - pm->mins[2];
|
||||
sample1 = sample2 / 2;
|
||||
|
||||
point[2] = pml.origin[2] + pm->mins[2] + 1;
|
||||
cont = pm->pointcontents(point);
|
||||
|
||||
if ((cont & MASK_WATER) != 0) {
|
||||
pm->watertype = cont;
|
||||
pm->waterlevel = 1;
|
||||
point[2] = pml.origin[2] + pm->mins[2] + sample1;
|
||||
cont = pm->pointcontents(point);
|
||||
|
||||
if ((cont & MASK_WATER) != 0) {
|
||||
pm->waterlevel = 2;
|
||||
point[2] = pml.origin[2] + pm->mins[2] + sample2;
|
||||
cont = pm->pointcontents(point);
|
||||
|
||||
if ((cont & MASK_WATER) != 0)
|
||||
pm->waterlevel = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PM_UpdateUnderwaterSfx()
|
||||
{
|
||||
#if !defined(DEDICATED_ONLY)
|
||||
static int underwater;
|
||||
#endif
|
||||
|
||||
#if !defined(DEDICATED_ONLY)
|
||||
if ((pm->waterlevel == 3) && !underwater) {
|
||||
underwater = 1;
|
||||
snd_is_underwater = 1;
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
if (snd_is_underwater_enabled)
|
||||
AL_Underwater();
|
||||
#endif
|
||||
}
|
||||
|
||||
if ((pm->waterlevel < 3) && underwater) {
|
||||
underwater = 0;
|
||||
snd_is_underwater = 0;
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
if (snd_is_underwater_enabled)
|
||||
AL_Overwater();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Can be called by either the server or the client
|
||||
*/
|
||||
void
|
||||
Pmove(pmove_t *pmove)
|
||||
{
|
||||
#if !defined(DEDICATED_ONLY)
|
||||
static int underwater;
|
||||
#endif
|
||||
|
||||
pm = pmove;
|
||||
|
||||
/* clear results */
|
||||
|
@ -1320,6 +1394,12 @@ Pmove(pmove_t *pmove)
|
|||
|
||||
if (pm->s.pm_type == PM_FREEZE)
|
||||
{
|
||||
if (cl.attractloop) {
|
||||
PM_CalculateViewHeightForDemo();
|
||||
PM_CalculateWaterLevelForDemo();
|
||||
PM_UpdateUnderwaterSfx();
|
||||
}
|
||||
|
||||
return; /* no movement at all */
|
||||
}
|
||||
|
||||
|
@ -1415,27 +1495,7 @@ Pmove(pmove_t *pmove)
|
|||
/* set groundentity, watertype, and waterlevel for final spot */
|
||||
PM_CatagorizePosition();
|
||||
|
||||
#if !defined(DEDICATED_ONLY)
|
||||
if ((pm->waterlevel == 3) && !underwater)
|
||||
{
|
||||
underwater = 1;
|
||||
snd_is_underwater = 1;
|
||||
#ifdef USE_OPENAL
|
||||
if (snd_is_underwater_enabled)
|
||||
AL_Underwater();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (((pm->waterlevel < 3) && underwater))
|
||||
{
|
||||
underwater = 0;
|
||||
snd_is_underwater = 0;
|
||||
#ifdef USE_OPENAL
|
||||
if (snd_is_underwater_enabled)
|
||||
AL_Overwater();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
PM_UpdateUnderwaterSfx();
|
||||
|
||||
PM_SnapPosition();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue