diff options
Diffstat (limited to 'src/client/snd_openal.c')
-rw-r--r-- | src/client/snd_openal.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/client/snd_openal.c b/src/client/snd_openal.c index 01b965ae..e3a01754 100644 --- a/src/client/snd_openal.c +++ b/src/client/snd_openal.c @@ -40,6 +40,7 @@ cvar_t *s_alMinDistance; cvar_t *s_alRolloff; cvar_t *s_alDriver; cvar_t *s_alMaxSpeakerDistance; +cvar_t *s_alSpatEntOrigin; /* ================= @@ -1461,20 +1462,29 @@ S_AL_Respatialize static void S_AL_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater ) { - S_AL_SanitiseVector( (vec_t *)origin ); + float velocity[3] = {0.0f, 0.0f, 0.0f}; + float orientation[6]; + vec3_t sorigin; + + if( s_alSpatEntOrigin->integer && entityNum >= 0 ) + VectorCopy( entityList[ entityNum ].origin, sorigin ); + else + { + VectorCopy( origin, sorigin ); + S_AL_SanitiseVector( sorigin ); + } + S_AL_SanitiseVector( axis[ 0 ] ); S_AL_SanitiseVector( axis[ 1 ] ); S_AL_SanitiseVector( axis[ 2 ] ); - // Axis[0] = Forward - // Axis[2] = Up - float velocity[] = {0.0f, 0.0f, 0.0f}; - float orientation[] = {axis[0][0], axis[0][1], axis[0][2], - axis[2][0], axis[2][1], axis[2][2]}; - VectorCopy( origin, lastListenerOrigin ); + orientation[0] = axis[0][0]; orientation[1] = axis[0][1]; orientation[2] = axis[0][2]; + orientation[3] = axis[2][0]; orientation[4] = axis[2][1]; orientation[5] = axis[2][2]; + + VectorCopy( sorigin, lastListenerOrigin ); // Set OpenAL listener paramaters - qalListenerfv(AL_POSITION, (ALfloat *)origin); + qalListenerfv(AL_POSITION, (ALfloat *)sorigin); qalListenerfv(AL_VELOCITY, velocity); qalListenerfv(AL_ORIENTATION, orientation); } @@ -1631,6 +1641,7 @@ qboolean S_AL_Init( soundInterface_t *si ) s_alMinDistance = Cvar_Get( "s_alMinDistance", "120", CVAR_CHEAT ); s_alRolloff = Cvar_Get( "s_alRolloff", "0.8", CVAR_CHEAT ); s_alMaxSpeakerDistance = Cvar_Get( "s_alMaxSpeakerDistance", "1024", CVAR_ARCHIVE ); + s_alSpatEntOrigin = Cvar_Get( "s_alSpatEntOrigin", "1", CVAR_ARCHIVE ); s_alDriver = Cvar_Get( "s_alDriver", ALDRIVER_DEFAULT, CVAR_ARCHIVE ); |