void CCineBlood :: BloodGush ( void ) { Vector vecSplatDir; TraceResult tr; pev->nextthink = gpGlobals->time + 0.1; UTIL_MakeVectors(pev->angles); if ( pev->health-- < 0 ) REMOVE_ENTITY(ENT(pev)); // CHANGE_METHOD ( ENT(pev), em_think, SUB_Remove ); if ( RANDOM_FLOAT ( 0 , 1 ) < 0.7 )// larger chance of globs { UTIL_BloodDrips( pev->origin, UTIL_RandomBloodVector(), BLOOD_COLOR_RED, 10 ); } else// slim chance of geyser { UTIL_BloodStream( pev->origin, UTIL_RandomBloodVector(), BLOOD_COLOR_RED, RANDOM_LONG(50, 150) ); } if ( RANDOM_FLOAT ( 0, 1 ) < 0.75 ) { // decals the floor with blood. vecSplatDir = Vector ( 0 , 0 , -1 ); vecSplatDir = vecSplatDir + (RANDOM_FLOAT(-1,1) * 0.6 * gpGlobals->v_right) + (RANDOM_FLOAT(-1,1) * 0.6 * gpGlobals->v_forward);// randomize a bit UTIL_TraceLine( pev->origin + Vector ( 0, 0 , 64) , pev->origin + vecSplatDir * 256, ignore_monsters, ENT(pev), &tr); if ( tr.flFraction != 1.0 ) { // Decal with a bloodsplat UTIL_BloodDecalTrace( &tr, BLOOD_COLOR_RED ); } } }
//========================================================= // TraceAttack - checks to see if the zombie was shot in the head //========================================================= void CGonome :: TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { // Teh_Freak: check to see if shot in the head if (ptr->iHitgroup == HITGROUP_HEAD) { m_bloodColor = BLOOD_COLOR_YELLOW; // Teh_Freak: is shot in the head, emit yellow blood } else { m_bloodColor = BLOOD_COLOR_RED; // Teh_Freak: if not, emit red blood } // CODE RANDOM HEADSHOT SOUNDS START if (ptr->iHitgroup == HITGROUP_HEAD) // si el daño es en la cabeza { // ALERT( at_console, "Zombie Headshot!\n" ); UTIL_BloodStream( ptr->vecEndPos, gpGlobals->v_forward * -5 + gpGlobals->v_up * 2, (unsigned short)58, 100 ); //56 its ok switch (RANDOM_LONG(0,2)) //ejecuta los siguientes sonidos al azar { case 0: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_headshot1.wav", 1, ATTN_NORM ); break; case 1: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_headshot2.wav", 1, ATTN_NORM ); break; case 2: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_headshot3.wav", 1, ATTN_NORM ); break; } } // CODE RANDOM HEADSHOT SOUNDS END CBaseMonster::TraceAttack( pevAttacker, flDamage, vecDir, ptr, bitsDamageType ); }
void CBlood::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { if ( pev->spawnflags & SF_BLOOD_STREAM ) UTIL_BloodStream( BloodPosition(pActivator), Direction(), Color(), BloodAmount() ); else UTIL_BloodDrips( BloodPosition(pActivator), Direction(), Color(), BloodAmount() ); if ( pev->spawnflags & SF_BLOOD_DECAL ) { Vector forward = Direction(); Vector start = BloodPosition( pActivator ); TraceResult tr; UTIL_TraceLine( start, start + forward * BloodAmount() * 2, ignore_monsters, NULL, &tr ); if ( tr.flFraction != 1.0 ) UTIL_BloodDecalTrace( &tr, Color() ); } }
void CNihilanth::TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { if (m_irritation == 3) m_irritation = 2; if (m_irritation == 2 && ptr->iHitgroup == 2 && flDamage > 2) m_irritation = 3; if (m_irritation != 3) { Vector vecBlood = (ptr->vecEndPos - pev->origin).Normalize( ); UTIL_BloodStream( ptr->vecEndPos, vecBlood, BloodColor(), flDamage + (100 - 100 * (pev->health / gSkillData.nihilanthHealth))); } // SpawnBlood(ptr->vecEndPos, BloodColor(), flDamage * 5.0);// a little surface blood. AddMultiDamage( pevAttacker, this, flDamage, bitsDamageType ); }
void CFriend::TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType) { // check for helmet shot if (ptr->iHitgroup == HITGROUP_HEAD) // si el daño es en la cabeza { if (GetBodygroup( 1 ) == HEAD_MASK && (bitsDamageType & (DMG_BULLET | DMG_SLASH | DMG_BLAST | DMG_CLUB))) { // absorb damage flDamage -= 20; if (flDamage <= 0) { UTIL_Ricochet( ptr->vecEndPos, 1.0 ); UTIL_Sparks( ptr->vecEndPos ); // Sonidos (precache en world.cpp) switch (RANDOM_LONG(0,2)) { case 0: EMIT_SOUND(ENT(pev), CHAN_VOICE, "player/damage/helmet1.wav", 0.9, ATTN_NORM); break; case 1: EMIT_SOUND(ENT(pev), CHAN_VOICE, "player/damage/helmet2.wav", 0.9, ATTN_NORM); break; case 2: EMIT_SOUND(ENT(pev), CHAN_VOICE, "player/damage/helmet3.wav", 0.9, ATTN_NORM); break; } flDamage = 0.01; } } else if (GetBodygroup( 1 ) == HEAD_GRUNT && (bitsDamageType & (DMG_BULLET | DMG_SLASH | DMG_BLAST | DMG_CLUB))) { // absorb damage flDamage -= 20; if (flDamage <= 0) { UTIL_Ricochet( ptr->vecEndPos, 1.0 ); UTIL_Sparks( ptr->vecEndPos ); // Sonidos (precache en world.cpp) switch (RANDOM_LONG(0,2)) { case 0: EMIT_SOUND(ENT(pev), CHAN_VOICE, "player/damage/helmet1.wav", 0.9, ATTN_NORM); break; case 1: EMIT_SOUND(ENT(pev), CHAN_VOICE, "player/damage/helmet2.wav", 0.9, ATTN_NORM); break; case 2: EMIT_SOUND(ENT(pev), CHAN_VOICE, "player/damage/helmet3.wav", 0.9, ATTN_NORM); break; } flDamage = 0.01; } } else { ALERT( at_console, "Human Grunt Headshot!\n" ); UTIL_BloodStream( ptr->vecEndPos, gpGlobals->v_forward * 10 + // -5 gpGlobals->v_up * 2, (unsigned short)73, 100 ); //-35 switch (RANDOM_LONG(0,2)) //ejecuta los siguientes sonidos al azar { case 0: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_headshot1.wav", 1, ATTN_NORM ); break; case 1: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_headshot2.wav", 1, ATTN_NORM ); break; case 2: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_headshot3.wav", 1, ATTN_NORM ); break; } } } else { switch (RANDOM_LONG(0,2)) //ejecuta los siguientes sonidos al azar { case 0: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_hit1.wav", 1, ATTN_NORM ); break; case 1: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_hit2.wav", 1, ATTN_NORM ); break; case 2: EMIT_SOUND (ENT(pev), CHAN_BODY, "fvox/m_hit3.wav", 1, ATTN_NORM ); break; } } CTalkMonster::TraceAttack( pevAttacker, flDamage, vecDir, ptr, bitsDamageType ); }