Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- //FGP - BULLET IMPACT EFFECTS
- //
- //FGP - Client side bullet crap cvars
- extern cvar_t *cl_bt_impactefx;//disable/enable ALL impact effects
- extern cvar_t *cl_bt_texturesnd;//impact texture-type sound
- extern cvar_t *cl_bt_ricochetsnd;//impact ricochet sound
- extern cvar_t *cl_bt_nearmisssnd;//nearmiss (flyby) sound
- extern cvar_t *cl_bt_decals;//impact decals
- extern cvar_t *cl_bt_particles;//impact particles
- extern cvar_t *cl_bt_streaks;//impact streaks
- //FGP - Client side bullet crap cvars
- void EV_HLDM_ImpactEFX(int iBulletType, int isplayer, int iscrowbar, cl_entity_t *pEntity, vec3_t position, vec3_t normal)
- {
- //Do nothing more, if bullet impact EFX are disabled
- if(cl_bt_impactefx == 0)
- {
- return;
- }
- int entity = pEntity->index;
- pmtrace_t tr;
- pmtrace_t *pTrace = &tr;
- // physent_t *pe;
- VectorCopy( position, pTrace->endpos );
- //pTrace->ent = idx;//pEntity->index;
- //pe = gEngfuncs.pEventAPI->EV_GetPhysent( pTrace->ent );
- //Position fix. Corrects particles sometimes not appearing on (angled) surfaces
- if ( pTrace->fraction != 1.0 )
- {
- position = position + (normal * 1.5);
- }
- // hit the world, try to play sound based on texture material type
- char chTextureType = CHAR_TEX_CONCRETE;
- // float fvol;
- // float fvolbar;
- // char *rgsz[4];
- // int cnt;
- float fattn = ATTN_NORM;
- // int entity;
- char *pTextureName;
- char texname[ 64 ];
- char szbuffer[ 64 ];
- // FIXME check if playtexture sounds movevar is set
- //
- chTextureType = 0;
- // Player
- if ( entity >= 1 && entity <= gEngfuncs.GetMaxClients() )
- {
- // hit body
- chTextureType = CHAR_TEX_FLESH;
- }
- else if ( entity == 0 )
- {
- // get texture from entity or world (world is ent(0))
- pTextureName = (char *)gEngfuncs.pEventAPI->EV_TraceTexture( entity, position+normal, position-normal );//pTrace->plane.normal );//vecSrc, vecEnd );
- if ( pTextureName )
- {
- strcpy( texname, pTextureName );
- pTextureName = texname;
- // strip leading '-0' or '+0~' or '{' or '!'
- if (*pTextureName == '-' || *pTextureName == '+')
- {
- pTextureName += 2;
- }
- if (*pTextureName == '{' || *pTextureName == '!' || *pTextureName == '~' || *pTextureName == ' ')
- {
- pTextureName++;
- }
- // '}}'
- strcpy( szbuffer, pTextureName );
- szbuffer[ CBTEXTURENAMEMAX - 1 ] = 0;
- // get texture type
- chTextureType = PM_FindTextureType( szbuffer );
- }
- }
- switch (chTextureType)
- {
- default:
- //CONCRETE
- case CHAR_TEX_CONCRETE:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("concrete_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_streaks->value != 0)
- gEngfuncs.pEfxAPI->R_StreakSplash( position, normal, 5, gEngfuncs.pfnRandomLong(8,12), 100, -150, 150 );
- //if(iscrowbar)
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_conc1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_conc2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_conc3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //METAL
- case CHAR_TEX_METAL:
- case CHAR_TEX_GRATE://ass
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot_metal", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("metal_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_streaks->value != 0)
- gEngfuncs.pEfxAPI->R_StreakSplash( position, normal, 0, gEngfuncs.pfnRandomLong(25,35), 100, -200, 200 );
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //DIRT
- case CHAR_TEX_DIRT:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("dirt_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_dirt1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_dirt2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_dirt3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //VENT
- case CHAR_TEX_VENT:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot_metal", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("metal_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_streaks->value != 0)
- gEngfuncs.pEfxAPI->R_StreakSplash( position, normal, 0, gEngfuncs.pfnRandomLong(20,30), 100, -200, 200 );
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_vent1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_vent2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_vent3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //GRATE
- /* case CHAR_TEX_GRATE:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot_metal", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("metal_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_streaks->value != 0)
- gEngfuncs.pEfxAPI->R_StreakSplash( position, normal, 0, gEngfuncs.pfnRandomLong(30,40), 100, -200, 200 );
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;*/
- //TILE
- case CHAR_TEX_TILE:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("concrete_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_streaks->value != 0)
- gEngfuncs.pEfxAPI->R_StreakSplash( position, normal, 5, gEngfuncs.pfnRandomLong(8,16), 60, -200, 200 );
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_tile1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_tile2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_tile3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //SLOSH
- case CHAR_TEX_SLOSH:
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("water_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_water1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_water2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_water3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //WOOD
- case CHAR_TEX_WOOD:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot_wood", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("concrete_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- // if(cl_bt_streaks->value != 0)
- // gEngfuncs.pEfxAPI->R_StreakSplash( position, normal, 5, gEngfuncs.pfnRandomLong(2,4), 50, -80, 80 );
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_conc1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_conc2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_conc3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //COMPUTER
- case CHAR_TEX_COMPUTER:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot_metal", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("metal_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_streaks->value != 0)
- {
- gEngfuncs.pEfxAPI->R_SparkShower( position );//sparks
- gEngfuncs.pEfxAPI->R_StreakSplash( position, normal, 0, gEngfuncs.pfnRandomLong(40,60), 100, -200, 200 );
- }
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0:
- gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110));
- gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "buttons/spark3.wav", gEngfuncs.pfnRandomFloat(0.25, 0.45), ATTN_NORM, 0, 98);
- break;
- case 1:
- gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110));
- gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "buttons/spark4.wav", gEngfuncs.pfnRandomFloat(0.25, 0.45), ATTN_NORM, 0, 98);
- break;
- case 2:
- gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_metal3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110));
- gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "buttons/spark6.wav", gEngfuncs.pfnRandomFloat(0.25, 0.45), ATTN_NORM, 0, 98);
- break;
- }
- }
- break;
- //GLASS
- case CHAR_TEX_GLASS:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot_glass", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("glass_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_glass1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_glass2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_glass3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //FLESH
- case CHAR_TEX_FLESH:
- //Do nothing..?
- //(TODO: handle flesh/blood impacts here)
- break;
- //SNOW
- case CHAR_TEX_SNOW:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("snow_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_snow1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_snow2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_snow3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //CARPET
- case CHAR_TEX_CARPET:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("carpet_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 2 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_carpet1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_carpet2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "bullets/impact_carpet3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //ORGANIC
- case CHAR_TEX_ORGANIC:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot", FALSE );
- // if(cl_bt_particles->value != 0)
- // gParticleEngine.CreateCluster("organic_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 3 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_organic1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_organic2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_organic3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 3: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_organic4.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- //GRAVEL
- case CHAR_TEX_GRAVEL:
- if(cl_bt_decals->value != 0)
- gBSPRenderer.CreateDecal( position, normal, "shot", FALSE );
- if(cl_bt_particles->value != 0)
- gParticleEngine.CreateCluster("dirt_impact_cluster.txt", position, normal, 0);//works awesome with position fix!
- if(cl_bt_texturesnd->value != 0)
- {
- switch ( gEngfuncs.pfnRandomLong ( 0 , 3 ) )
- {
- case 0: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_gravel1.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 1: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_gravel2.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 2: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_gravel3.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- case 3: gSoundEngine.EV_PlaySound( entity, position, CHAN_STATIC, "player/pl_gravel4.wav", gEngfuncs.pfnRandomFloat(0.3, 0.6), ATTN_NORM, 0, gEngfuncs.pfnRandomFloat(90, 110)); break;
- }
- }
- break;
- }
- }
Add Comment
Please, Sign In to add comment