void CGargantua::TraceAttack( const CTakeDamageInfo& info, Vector vecDir, TraceResult& tr ) { ALERT( at_aiconsole, "CGargantua::TraceAttack\n"); if ( !IsAlive() ) { CBaseMonster::TraceAttack( info, vecDir, tr ); return; } CTakeDamageInfo newInfo = info; // UNDONE: Hit group specific damage? if ( newInfo.GetDamageTypes() & (GARG_DAMAGE|DMG_BLAST) ) { if ( m_painSoundTime < gpGlobals->time ) { EMIT_SOUND_DYN( this, CHAN_VOICE, pPainSounds[ RANDOM_LONG(0,ARRAYSIZE(pPainSounds)-1) ], 1.0, ATTN_GARG, 0, PITCH_NORM ); m_painSoundTime = gpGlobals->time + RANDOM_FLOAT( 2.5, 4 ); } } newInfo.GetMutableDamageTypes() &= GARG_DAMAGE; if ( newInfo.GetDamageTypes() == 0) { if ( GetDamageTime() != gpGlobals->time || (RANDOM_LONG(0,100) < 20) ) { UTIL_Ricochet( tr.vecEndPos, RANDOM_FLOAT(0.5,1.5) ); SetDamageTime( gpGlobals->time ); // if ( RANDOM_LONG(0,100) < 25 ) // EMIT_SOUND_DYN( this, CHAN_BODY, pRicSounds[ RANDOM_LONG(0,ARRAYSIZE(pRicSounds)-1) ], 1.0, ATTN_NORM, 0, PITCH_NORM ); } newInfo.GetMutableDamage() = 0; } CBaseMonster::TraceAttack( newInfo, vecDir, tr ); }