//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNPC_AntlionGrub::SpawnSquashedGrub( void ) { CGib *pStandin = CREATE_ENTITY( CGib, "gib" ); Assert( pStandin ); pStandin->SetModel( ANTLIONGRUB_SQUASHED_MODEL ); pStandin->AddSolidFlags( FSOLID_NOT_SOLID ); pStandin->SetLocalAngles( GetLocalAngles() ); pStandin->SetLocalOrigin( GetLocalOrigin() ); }
void CGib::SpawnStickyGibs( CBaseEntity *pVictim, Vector vecOrigin, int cGibs ) { int i; //City17: Germany Violence Fix. /*if ( g_Language.GetInt() == LANGUAGE_GERMAN ) { // no sticky gibs in germany right now! return; }*/ for ( i = 0 ; i < cGibs ; i++ ) { CGib *pGib = (CGib *)CreateEntityByName( "gib" ); pGib->Spawn( "models/stickygib.mdl" ); pGib->m_nBody = random->RandomInt(0,2); if ( pVictim ) { pGib->SetLocalOrigin( Vector( vecOrigin.x + random->RandomFloat( -3, 3 ), vecOrigin.y + random->RandomFloat( -3, 3 ), vecOrigin.z + random->RandomFloat( -3, 3 ) ) ); // make the gib fly away from the attack vector Vector vecNewVelocity = g_vecAttackDir * -1; // mix in some noise vecNewVelocity.x += random->RandomFloat ( -0.15, 0.15 ); vecNewVelocity.y += random->RandomFloat ( -0.15, 0.15 ); vecNewVelocity.z += random->RandomFloat ( -0.15, 0.15 ); vecNewVelocity *= 900; QAngle vecAngVelocity( random->RandomFloat ( 250, 400 ), random->RandomFloat ( 250, 400 ), 0 ); pGib->SetLocalAngularVelocity( vecAngVelocity ); // copy owner's blood color pGib->SetBloodColor( pVictim->BloodColor() ); pGib->AdjustVelocityBasedOnHealth( pVictim->m_iHealth, vecNewVelocity ); pGib->SetAbsVelocity( vecNewVelocity ); pGib->SetMoveType( MOVETYPE_FLYGRAVITY ); pGib->RemoveSolidFlags( FSOLID_NOT_SOLID ); pGib->SetCollisionBounds( vec3_origin, vec3_origin ); pGib->SetTouch ( &CGib::StickyGibTouch ); pGib->SetThink (NULL); } pGib->LimitVelocity(); } }
void CGib::SpawnHeadGib( CBaseEntity *pVictim ) { CGib *pGib = CREATE_ENTITY( CGib, "gib" ); //City17: Germany Violence Fix. /*if ( g_Language.GetInt() == LANGUAGE_GERMAN ) { pGib->Spawn( "models/germangibs.mdl" );// throw one head pGib->m_nBody = 0; } else {*/ pGib->Spawn( "models/gibs/hgibs.mdl" );// throw one head pGib->m_nBody = 0; //} if ( pVictim ) { Vector vecNewVelocity = pGib->GetAbsVelocity(); pGib->SetLocalOrigin( pVictim->EyePosition() ); edict_t *pentPlayer = UTIL_FindClientInPVS( pGib->edict() ); if ( random->RandomInt ( 0, 100 ) <= 5 && pentPlayer ) { // 5% chance head will be thrown at player's face. CBasePlayer *player = (CBasePlayer *)CBaseEntity::Instance( pentPlayer ); if ( player ) { vecNewVelocity = ( player->EyePosition() ) - pGib->GetAbsOrigin(); VectorNormalize(vecNewVelocity); vecNewVelocity *= 300; vecNewVelocity.z += 100; } } else { vecNewVelocity = Vector (random->RandomFloat(-100,100), random->RandomFloat(-100,100), random->RandomFloat(200,300)); } QAngle vecNewAngularVelocity = pGib->GetLocalAngularVelocity(); vecNewAngularVelocity.x = random->RandomFloat ( 100, 200 ); vecNewAngularVelocity.y = random->RandomFloat ( 100, 300 ); pGib->SetLocalAngularVelocity( vecNewAngularVelocity ); // copy owner's blood color pGib->SetBloodColor( pVictim->BloodColor() ); pGib->AdjustVelocityBasedOnHealth( pVictim->m_iHealth, vecNewVelocity ); pGib->SetAbsVelocity( vecNewVelocity ); } pGib->LimitVelocity(); }