void UTIL_BloodDrips( const Vector &origin, const Vector &direction, int color, int amount ) { if ( !UTIL_ShouldShowBlood( color ) ) return; if ( color == DONT_BLEED || amount == 0 ) return; if ( g_Language.GetInt() == LANGUAGE_GERMAN && color == BLOOD_COLOR_RED ) color = 0; if ( g_pGameRules->IsMultiplayer() ) { // scale up blood effect in multiplayer for better visibility amount *= 5; } if ( amount > 255 ) amount = 255; if (color == BLOOD_COLOR_MECH) { g_pEffects->Sparks(origin); if (random->RandomFloat(0, 2) >= 1) { UTIL_Smoke(origin, random->RandomInt(10, 15), 10); } } else { // Normal blood impact UTIL_BloodImpact( origin, direction, color, amount ); } }
//----------------------------------------------------------------------------- // Purpose: // Input : pEvent - //----------------------------------------------------------------------------- void CNPC_Monk::HandleAnimEvent( animevent_t *pEvent ) { switch ( pEvent->event ) { case AE_MONK_FIRE_GUN: { Vector vecShootOrigin; QAngle vecAngles; GetAttachment( "muzzle", vecShootOrigin, vecAngles ); Vector vecShootDir = GetShootEnemyDir( vecShootOrigin ); CPASAttenuationFilter filter2( this, "NPC_Monk.Fire" ); EmitSound( filter2, entindex(), "NPC_Monk.Fire" ); UTIL_Smoke( vecShootOrigin, random->RandomInt(20, 30), 10 ); FireBullets( 1, vecShootOrigin, vecShootDir, vec3_origin, MAX_TRACE_LENGTH, m_nAmmoType, 0 ); m_fEffects |= EF_MUZZLEFLASH; break; } default: { BaseClass::HandleAnimEvent( pEvent ); } } }
//------------------------------------------------------------------------------ // Purpose : // Input : // Output : //------------------------------------------------------------------------------ void CNPC_MissileDefense::Gib(void) { // Sparks for (int i = 0; i < 4; i++) { Vector sparkPos = GetAbsOrigin(); sparkPos.x += random->RandomFloat(-12,12); sparkPos.y += random->RandomFloat(-12,12); sparkPos.z += random->RandomFloat(-12,12); g_pEffects->Sparks(sparkPos); } // Smoke UTIL_Smoke(GetAbsOrigin(), random->RandomInt(10, 15), 10); // Light CBroadcastRecipientFilter filter; te->DynamicLight( filter, 0.0, &GetAbsOrigin(), 255, 180, 100, 0, 100, 0.1, 0 ); // Remove top parts SetBodygroup( 1, 0 ); SetBodygroup( 2, 0 ); SetBodygroup( 3, 0 ); SetBodygroup( 4, 0 ); m_takedamage = 0; SetThink(NULL); // Throw manhackgibs CGib::SpawnSpecificGibs( this, MD_GIB_COUNT, 300, 500, MD_GIB_MODEL); }
void CNPC_Stalker::DoSmokeEffect( const Vector &position ) { if ( gpGlobals->curtime > m_nextSmokeTime ) { m_nextSmokeTime = gpGlobals->curtime + 0.5; UTIL_Smoke(position, random->RandomInt(5, 10), 10); } }
//------------------------------------------------------------------------------ // Purpose: //------------------------------------------------------------------------------ void CNPC_Launcher::LaunchGrenade( CBaseEntity* pEnemy ) { // If a path following missile, create a path following missile if (m_sPathCornerName != NULL_STRING) { CGrenadePathfollower *pGrenade = CGrenadePathfollower::CreateGrenadePathfollower( m_sMissileModel, m_sFlySound, GetAbsOrigin(), vec3_angle, edict() ); pGrenade->SetDamage(m_flDamage); pGrenade->SetDamageRadius(m_flDamageRadius); pGrenade->Launch(m_flLaunchSpeed,m_sPathCornerName); } else { Vector vUp; AngleVectors( GetAbsAngles(), NULL, NULL, &vUp ); Vector vLaunchVelocity = (vUp * m_flLaunchSpeed); CGrenadeHomer *pGrenade = CGrenadeHomer::CreateGrenadeHomer( m_sMissileModel, m_sFlySound, GetAbsOrigin(), vec3_angle, edict() ); pGrenade->Spawn( ); pGrenade->SetSpin(m_flSpinMagnitude,m_flSpinSpeed); pGrenade->SetHoming((0.01*m_nHomingStrength),m_flHomingDelay,m_flHomingRampUp,m_flHomingDuration,m_flHomingRampDown); pGrenade->SetDamage(m_flDamage); pGrenade->SetDamageRadius(m_flDamageRadius); pGrenade->Launch(this,pEnemy,vLaunchVelocity,m_flHomingSpeed,GetGravity(),m_nSmokeTrail); } CPASAttenuationFilter filter( this, 0.3 ); EmitSound_t ep; ep.m_nChannel = CHAN_WEAPON; ep.m_pSoundName = STRING(m_sLaunchSound); ep.m_SoundLevel = SNDLVL_NORM; EmitSound( filter, entindex(), ep ); if (m_bSmokeLaunch) { UTIL_Smoke(GetAbsOrigin(), random->RandomInt(20,30), random->RandomInt(10,15)); } m_flNextAttack = gpGlobals->curtime + LAUNCHER_REST_TIME; }
void UTIL_BloodDrips( const Vector &origin, const Vector &direction, int color, int amount ) { #ifdef HL2SB //Andrew; see https://developer.valvesoftware.com/wiki/Fixing_AI_in_multiplayer#Blood IPredictionSystem::SuppressHostEvents( NULL ); #endif if ( !UTIL_ShouldShowBlood( color ) ) return; if ( color == DONT_BLEED || amount == 0 ) return; if ( g_Language.GetInt() == LANGUAGE_GERMAN && color == BLOOD_COLOR_RED ) color = 0; if ( g_pGameRules->IsMultiplayer() ) { // scale up blood effect in multiplayer for better visibility amount *= 5; } if ( amount > 255 ) amount = 255; if (color == BLOOD_COLOR_MECH) { g_pEffects->Sparks(origin); if (random->RandomFloat(0, 2) >= 1) { UTIL_Smoke(origin, random->RandomInt(10, 15), 10); } } else { // Normal blood impact UTIL_BloodImpact( origin, direction, color, amount ); } }
void CNPC_Gargantua::DeathEffect( void ) { int i; Vector vForward; AngleVectors( GetAbsAngles(), &vForward ); Vector deathPos = GetAbsOrigin() + vForward * 100; Vector position = GetAbsOrigin(); position.z += 32; CPASFilter filter( GetAbsOrigin() ); for ( i = 0; i < 7; i++) { te->Explosion( filter, i * 0.2, &GetAbsOrigin(), g_sModelIndexFireball, 10, 15, TE_EXPLFLAG_NONE, 100, 0 ); position.z += 15; } UTIL_Smoke(GetAbsOrigin(),random->RandomInt(10, 15), 10); UTIL_ScreenShake( GetAbsOrigin(), 25.0, 100.0, 5.0, 1000, SHAKE_START ); }
void UTIL_BloodDrips( const Vector &origin, const Vector &direction, int color, int amount ) { //Thanks to the prediction, the blood of NPCs is suppressed. This is because in HL2DM the blood of players is done client-side. need to break it for bots IPredictionSystem::SuppressHostEvents( NULL ); if ( !UTIL_ShouldShowBlood( color ) ) return; if ( color == DONT_BLEED || amount == 0 ) return; if ( g_Language.GetInt() == LANGUAGE_GERMAN && color == BLOOD_COLOR_RED ) color = 0; /* if ( g_pGameRules->IsMultiplayer() ) { // scale up blood effect in multiplayer for better visibility amount *= 5; } */ if ( amount > 255 ) amount = 255; if (color == BLOOD_COLOR_MECH) { g_pEffects->Sparks(origin); if (random->RandomFloat(0, 2) >= 1) { UTIL_Smoke(origin, random->RandomInt(10, 15), 10); } } else { // Normal blood impact UTIL_BloodImpact( origin, direction, color, amount ); } }
//------------------------------------------------------------------------------ // Purpose : // Input : // Output : //------------------------------------------------------------------------------ void CGrenadeBeam::GrenadeBeamTouch( CBaseEntity *pOther ) { //--------------------------------------------------------- // Make sure I'm not caught in a corner, if so remove me //--------------------------------------------------------- if (gpGlobals->curtime - m_flLastTouchTime < 0.01) { KillBeam(); return; } m_flLastTouchTime = gpGlobals->curtime; // --------------------------------------- // If I have room for another hit, add it // --------------------------------------- if (m_nNumHits < GRENADEBEAM_MAXHITS) { m_pHitLocation[m_nNumHits] = GetLocalOrigin(); m_nNumHits++; } // Otherwise copy over old hit, and force chaser into last hit position else { m_hBeamChaser->SetLocalOrigin( m_pHitLocation[0] ); for (int i=0;i<m_nNumHits-1;i++) { m_pHitLocation[i] = m_pHitLocation[i+1]; } m_pHitLocation[m_nNumHits-1]=GetLocalOrigin(); } UpdateBeams(); // -------------------------------------- // Smoke or bubbles effect // -------------------------------------- if (UTIL_PointContents ( GetAbsOrigin() ) & MASK_WATER) { UTIL_Bubbles(GetAbsOrigin()-Vector(3,3,3),GetAbsOrigin()+Vector(3,3,3),10); } else { UTIL_Smoke(GetAbsOrigin(), random->RandomInt(5, 10), 10); } // -------------------------------------------- // Play burn sounds // -------------------------------------------- if (pOther->m_takedamage) { pOther->TakeDamage( CTakeDamageInfo( this, this, m_flDamage, DMG_BURN ) ); KillBeam(); return; } EmitSound( "GrenadeBeam.HitSound" ); trace_t tr; Vector vDirection = GetAbsVelocity(); VectorNormalize(vDirection); UTIL_TraceLine( GetAbsOrigin()-vDirection, GetAbsOrigin()+vDirection, MASK_SOLID, NULL, COLLISION_GROUP_NONE, &tr ); UTIL_DecalTrace( &tr, "RedGlowFade" ); UTIL_ImpactTrace( &tr, DMG_ENERGYBEAM ); }