void G_CheckDeathOrKnockout (edict_t *target, edict_t *attacker, const fireDef_t *fd, int damage) { /* Check death/knockout. */ if (target->HP == 0 || target->HP <= target->STUN) { G_SendStats(target); if (G_ActorDieOrStun(target, attacker)) { G_PrintActorStats(target, attacker, fd); /* apply morale changes */ if (mor_panic->integer) G_Morale(ML_DEATH, target, attacker, damage); /* Update number of killed/stunned actors for this attacker. */ G_UpdateCharacterBodycount(attacker, fd, target); } } else { target->chr.minHP = std::min(target->chr.minHP, target->HP); if (damage > 0) { if (mor_panic->integer) G_Morale(ML_WOUND, target, attacker, damage); } else { /* medikit, etc. */ const int hp = GET_HP(target->chr.score.skills[ABILITY_POWER]); if (target->HP > hp) { target->HP = std::min(std::max(hp, 0), target->chr.maxHP); } } G_SendStats(target); } }
void G_CheckDeathOrKnockout (Edict* target, Edict* attacker, const fireDef_t* fd, int damage) { /* Sanity check */ target->HP = std::min(std::max(target->HP, 0), target->chr.maxHP); /* Check death/knockout. */ if (target->HP == 0 || target->HP <= target->STUN) { G_SendStats(*target); if (G_ActorDieOrStun(target, attacker)) { G_PrintActorStats(target, attacker, fd); /* apply morale changes */ if (mor_panic->integer) G_Morale(ML_DEATH, target, attacker, damage); /* Update number of killed/stunned actors for this attacker. */ G_UpdateCharacterBodycount(attacker, fd, target); } } else { target->chr.minHP = std::min(target->chr.minHP, target->HP); if (damage > 0) { if (mor_panic->integer) G_Morale(ML_WOUND, target, attacker, damage); } G_SendStats(*target); } }