mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-12 08:08:02 +00:00
engine: client: use soundlist to acquire random sounds for temp entities
This commit is contained in:
parent
b5f02324a6
commit
c8e1ffe0dd
@ -57,36 +57,6 @@ const char *cl_default_sprites[] =
|
||||
"sprites/shellchrome.spr",
|
||||
};
|
||||
|
||||
const char *cl_player_shell_sounds[] =
|
||||
{
|
||||
"player/pl_shell1.wav",
|
||||
"player/pl_shell2.wav",
|
||||
"player/pl_shell3.wav",
|
||||
};
|
||||
|
||||
const char *cl_weapon_shell_sounds[] =
|
||||
{
|
||||
"weapons/sshell1.wav",
|
||||
"weapons/sshell2.wav",
|
||||
"weapons/sshell3.wav",
|
||||
};
|
||||
|
||||
const char *cl_ricochet_sounds[] =
|
||||
{
|
||||
"weapons/ric1.wav",
|
||||
"weapons/ric2.wav",
|
||||
"weapons/ric3.wav",
|
||||
"weapons/ric4.wav",
|
||||
"weapons/ric5.wav",
|
||||
};
|
||||
|
||||
const char *cl_explode_sounds[] =
|
||||
{
|
||||
"weapons/explode3.wav",
|
||||
"weapons/explode4.wav",
|
||||
"weapons/explode5.wav",
|
||||
};
|
||||
|
||||
static void CL_PlayerDecal( int playerIndex, int textureIndex, int entityIndex, float *pos );
|
||||
|
||||
/*
|
||||
@ -148,6 +118,7 @@ client resources not precached by server
|
||||
*/
|
||||
void CL_AddClientResources( void )
|
||||
{
|
||||
const char *snd;
|
||||
char filepath[MAX_QPATH];
|
||||
int i;
|
||||
|
||||
@ -163,37 +134,37 @@ void CL_AddClientResources( void )
|
||||
}
|
||||
|
||||
// then check sounds
|
||||
for( i = 0; i < ARRAYSIZE( cl_player_shell_sounds ); i++ )
|
||||
for( i = 0; ( snd = SoundList_Get( BouncePlayerShell, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_player_shell_sounds[i] );
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
if( !FS_FileExists( filepath, false ))
|
||||
CL_AddClientResource( cl_player_shell_sounds[i], t_sound );
|
||||
CL_AddClientResource( snd, t_sound );
|
||||
}
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( cl_weapon_shell_sounds ); i++ )
|
||||
for( i = 0; ( snd = SoundList_Get( BounceWeaponShell, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_weapon_shell_sounds[i] );
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
if( !FS_FileExists( filepath, false ))
|
||||
CL_AddClientResource( cl_weapon_shell_sounds[i], t_sound );
|
||||
CL_AddClientResource( snd, t_sound );
|
||||
}
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( cl_explode_sounds ); i++ )
|
||||
for( i = 0; ( snd = SoundList_Get( Explode, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_explode_sounds[i] );
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
if( !FS_FileExists( filepath, false ))
|
||||
CL_AddClientResource( cl_explode_sounds[i], t_sound );
|
||||
CL_AddClientResource( snd, t_sound );
|
||||
}
|
||||
|
||||
#if 0 // ric sounds was precached by server-side
|
||||
for( i = 0; i < ARRAYSIZE( cl_ricochet_sounds ); i++ )
|
||||
for( i = 0; ( snd = SoundList_Get( Ricochet, i )); i++ )
|
||||
{
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_ricochet_sounds[i] );
|
||||
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
|
||||
|
||||
if( !FS_FileExists( filepath, false ))
|
||||
CL_AddClientResource( cl_ricochet_sounds[i], t_sound );
|
||||
CL_AddClientResource( snd, t_sound );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -301,7 +272,7 @@ play collide sound
|
||||
static void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
|
||||
{
|
||||
float fvol;
|
||||
char soundname[32];
|
||||
const char *soundname = NULL;
|
||||
qboolean isshellcasing = false;
|
||||
int zvel;
|
||||
|
||||
@ -312,36 +283,39 @@ static void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
|
||||
switch( pTemp->hitSound )
|
||||
{
|
||||
case BOUNCE_GLASS:
|
||||
Q_snprintf( soundname, sizeof( soundname ), "debris/glass%i.wav", COM_RandomLong( 1, 4 ));
|
||||
soundname = SoundList_GetRandom( BounceGlass );
|
||||
break;
|
||||
case BOUNCE_METAL:
|
||||
Q_snprintf( soundname, sizeof( soundname ), "debris/metal%i.wav", COM_RandomLong( 1, 6 ));
|
||||
soundname = SoundList_GetRandom( BounceMetal );
|
||||
break;
|
||||
case BOUNCE_FLESH:
|
||||
Q_snprintf( soundname, sizeof( soundname ), "debris/flesh%i.wav", COM_RandomLong( 1, 7 ));
|
||||
soundname = SoundList_GetRandom( BounceFlesh );
|
||||
break;
|
||||
case BOUNCE_WOOD:
|
||||
Q_snprintf( soundname, sizeof( soundname ), "debris/wood%i.wav", COM_RandomLong( 1, 4 ));
|
||||
soundname = SoundList_GetRandom( BounceWood );
|
||||
break;
|
||||
case BOUNCE_SHRAP:
|
||||
Q_strncpy( soundname, cl_ricochet_sounds[COM_RandomLong( 0, 4 )], sizeof( soundname ) );
|
||||
soundname = SoundList_GetRandom( Ricochet );
|
||||
break;
|
||||
case BOUNCE_SHOTSHELL:
|
||||
Q_strncpy( soundname, cl_weapon_shell_sounds[COM_RandomLong( 0, 2 )], sizeof( soundname ) );
|
||||
soundname = SoundList_GetRandom( BounceWeaponShell );
|
||||
isshellcasing = true; // shell casings have different playback parameters
|
||||
fvol = 0.5f;
|
||||
break;
|
||||
case BOUNCE_SHELL:
|
||||
Q_strncpy( soundname, cl_player_shell_sounds[COM_RandomLong( 0, 2 )], sizeof( soundname ) );
|
||||
soundname = SoundList_GetRandom( BouncePlayerShell );
|
||||
isshellcasing = true; // shell casings have different playback parameters
|
||||
break;
|
||||
case BOUNCE_CONCRETE:
|
||||
Q_snprintf( soundname, sizeof( soundname ), "debris/concrete%i.wav", COM_RandomLong( 1, 3 ));
|
||||
soundname = SoundList_GetRandom( BounceConcrete );
|
||||
break;
|
||||
default: // null sound
|
||||
return;
|
||||
}
|
||||
|
||||
if( !soundname )
|
||||
return;
|
||||
|
||||
zvel = abs( pTemp->entity.baseline.origin[2] );
|
||||
|
||||
// only play one out of every n
|
||||
@ -1491,7 +1465,7 @@ void GAME_EXPORT R_FunnelSprite( const vec3_t org, int modelIndex, int reverse )
|
||||
===============
|
||||
R_SparkEffect
|
||||
|
||||
Create a streaks + richochet sprite
|
||||
Create a streaks + ricochet sprite
|
||||
===============
|
||||
*/
|
||||
void GAME_EXPORT R_SparkEffect( const vec3_t pos, int count, int velocityMin, int velocityMax )
|
||||
@ -1507,18 +1481,25 @@ R_RicochetSound
|
||||
Make a random ricochet sound
|
||||
==============
|
||||
*/
|
||||
static void R_RicochetSound_( const vec3_t pos, int sound )
|
||||
static void R_RicochetSoundByName( const vec3_t pos, const char *name )
|
||||
{
|
||||
sound_t handle;
|
||||
|
||||
handle = S_RegisterSound( cl_ricochet_sounds[sound] );
|
||||
|
||||
sound_t handle;
|
||||
handle = S_RegisterSound( name );
|
||||
S_StartSound( pos, 0, CHAN_AUTO, handle, VOL_NORM, 1.0, 100, 0 );
|
||||
}
|
||||
|
||||
static void R_RicochetSoundByIndex( const vec3_t pos, int idx )
|
||||
{
|
||||
const char *name = SoundList_Get( Ricochet, idx );
|
||||
if( name )
|
||||
R_RicochetSoundByName( pos, name );
|
||||
}
|
||||
|
||||
void GAME_EXPORT R_RicochetSound( const vec3_t pos )
|
||||
{
|
||||
R_RicochetSound_( pos, COM_RandomLong( 0, 4 ));
|
||||
const char *name = SoundList_GetRandom( Ricochet );
|
||||
if( name )
|
||||
R_RicochetSoundByName( pos, name );
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1665,8 +1646,12 @@ void GAME_EXPORT R_Explosion( vec3_t pos, int model, float scale, float framerat
|
||||
|
||||
if( !FBitSet( flags, TE_EXPLFLAG_NOSOUND ))
|
||||
{
|
||||
hSound = S_RegisterSound( cl_explode_sounds[COM_RandomLong( 0, 2 )] );
|
||||
S_StartSound( pos, 0, CHAN_STATIC, hSound, VOL_NORM, 0.3f, PITCH_NORM, 0 );
|
||||
const char *name = SoundList_GetRandom( Explode );
|
||||
if( name )
|
||||
{
|
||||
hSound = S_RegisterSound( name );
|
||||
S_StartSound( pos, 0, CHAN_STATIC, hSound, VOL_NORM, 0.3f, PITCH_NORM, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1909,6 +1894,7 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
||||
cl_entity_t *pEnt;
|
||||
dlight_t *dl;
|
||||
sound_t hSound;
|
||||
const char *name;
|
||||
|
||||
if( cls.legacymode )
|
||||
iSize = MSG_ReadByte( msg );
|
||||
@ -1968,8 +1954,11 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
||||
pos[2] = MSG_ReadCoord( &buf );
|
||||
R_BlobExplosion( pos );
|
||||
|
||||
hSound = S_RegisterSound( cl_explode_sounds[0] );
|
||||
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 1.0f, PITCH_NORM, 0 );
|
||||
if(( name = SoundList_Get( Explode, 0 )))
|
||||
{
|
||||
hSound = S_RegisterSound( name );
|
||||
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 1.0f, PITCH_NORM, 0 );
|
||||
}
|
||||
break;
|
||||
case TE_SMOKE:
|
||||
pos[0] = MSG_ReadCoord( &buf );
|
||||
@ -2022,8 +2011,11 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
||||
dl->die = cl.time + 0.5;
|
||||
dl->decay = 300;
|
||||
|
||||
hSound = S_RegisterSound( cl_explode_sounds[0] );
|
||||
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 0.6f, PITCH_NORM, 0 );
|
||||
if(( name = SoundList_Get( Explode, 0 )))
|
||||
{
|
||||
hSound = S_RegisterSound( name );
|
||||
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 1.0f, PITCH_NORM, 0 );
|
||||
}
|
||||
break;
|
||||
case TE_BSPDECAL:
|
||||
case TE_DECAL:
|
||||
@ -2251,8 +2243,8 @@ void CL_ParseTempEntity( sizebuf_t *msg )
|
||||
CL_DecalShoot( CL_DecalIndex( decalIndex ), entityIndex, 0, pos, 0 );
|
||||
R_BulletImpactParticles( pos );
|
||||
flags = COM_RandomLong( 0, 0x7fff );
|
||||
if( flags < 0x3fff )
|
||||
R_RicochetSound_( pos, flags % 5 );
|
||||
if( flags < 0x3fff && ( count = SoundList_Count( Ricochet )))
|
||||
R_RicochetSoundByIndex( pos, flags % count );
|
||||
break;
|
||||
case TE_SPRAY:
|
||||
case TE_SPRITE_SPRAY:
|
||||
|
Loading…
Reference in New Issue
Block a user