void hhHarvesterSimple::Killed(idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location) { ClearSmoke(); hhMonsterAI::Killed(inflictor, attacker, damage, dir, location); if (bGibOnDeath) { Gib(vec3_origin, "damage_gib"); } }
void SwampMonster::spawnGib(float velocity) { if(!game->getAllowGibs()) return; Animation *arm = game->getAnimationManager()->get("swampmonster_arm"); Animation *leg = game->getAnimationManager()->get("swampmonster_leg"); Animation *torso = game->getAnimationManager()->get("swampmonster_torso"); Animation *head = game->getAnimationManager()->get("swampmonster_head"); for(int i = 0; i < 2; i++) game->getEntityManager()->add(New Gib(arm, mPosition, Vec3d(randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f)), mIsFrozen, GIB_ARM)); for(int i = 0; i < 2; i++) game->getEntityManager()->add(New Gib(leg, mPosition, Vec3d(randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f)), mIsFrozen, GIB_LEG)); game->getEntityManager()->add(New Gib(head, mPosition, Vec3d(randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f)), mIsFrozen, GIB_HEAD)); game->getEntityManager()->add(New Gib(torso, mPosition, Vec3d(randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f),randomFloat(0.0f,0.075f)), mIsFrozen, GIB_TORSO)); }
/* ============ idMoveableItem::Event_Gib ============ */ void idMoveableItem::Event_Gib(const char *damageDefName) { Gib(idVec3(0, 0, 1), damageDefName); }
//------------------------------------------------------------------------------ // Purpose : // Input : // Output : //------------------------------------------------------------------------------ void CNPC_MissileDefense::Event_Killed( const CTakeDamageInfo &info ) { StopSound( "NPC_MissileDefense.Turn" ); Gib(); }
/* ============ idActor::Damage this entity that is being damaged inflictor entity that is causing the damage attacker entity that caused the inflictor to damage targ example: this=monster, inflictor=rocket, attacker=player dir direction of the attack for knockback in global space point point at which the damage is being inflicted, used for headshots damage amount of damage being inflicted inflictor, attacker, dir, and point can be NULL for environmental effects Bleeding wounds and surface overlays are applied in the collision code that calls Damage() ============ */ void idActor::Damage( idEntity *inflictor, idEntity *attacker, const noVec3 &dir, const char *damageDefName, const float damageScale, const int location ) { if ( !fl.takedamage ) { return; } if ( !inflictor ) { inflictor = gameLocal.world; } if ( !attacker ) { attacker = gameLocal.world; } #if 0 #ifdef _D3XP SetTimeState ts( timeGroup ); // Helltime boss is immune to all projectiles except the helltime killer if ( finalBoss && idStr::Icmp(inflictor->GetEntityDefName(), "projectile_helltime_killer") ) { return; } // Maledict is immume to the falling asteroids if ( !idStr::Icmp( GetEntityDefName(), "monster_boss_d3xp_maledict" ) && (!idStr::Icmp( damageDefName, "damage_maledict_asteroid" ) || !idStr::Icmp( damageDefName, "damage_maledict_asteroid_splash" ) ) ) { return; } #else if ( finalBoss && !inflictor->IsType( idSoulCubeMissile::Type ) ) { return; } #endif #endif const idDict *damageDef = gameLocal.FindEntityDefDict( damageDefName ); if ( !damageDef ) { gameLocal.Error( "Unknown damageDef '%s'", damageDefName ); } int damage = damageDef->GetInt( "damage" ) * damageScale; damage = GetDamageForLocation( damage, location ); // inform the attacker that they hit someone attacker->DamageFeedback( this, inflictor, damage ); if ( damage > 0 ) { health -= damage; #ifdef _D3XP //Check the health against any damage cap that is currently set if(damageCap >= 0 && health < damageCap) { health = damageCap; } #endif if ( health <= 0 ) { if ( health < -999 ) { health = -999; } Killed( inflictor, attacker, damage, dir, location ); if ( ( health < -20 ) && spawnArgs.GetBool( "gib" ) && damageDef->GetBool( "gib" ) ) { Gib( dir, damageDefName ); } } else { Pain( inflictor, attacker, damage, dir, location ); } } else { // don't accumulate knockback if ( af.IsLoaded() ) { // clear impacts af.Rest(); // physics is turned off by calling af.Rest() BecomeActive( TH_PHYSICS ); } } }