-MUTATOR_HOOKFUNCTION(vampire_PlayerDamage)
+#include "mutator.qh"
+
+REGISTER_MUTATOR(vampire, cvar("g_vampire") && !cvar("g_instagib"));
+
+MUTATOR_HOOKFUNCTION(vampire, PlayerDamage_SplitHealthArmor)
{
- if(time < self.spawnshieldtime)
- return 0;
- if(g_minstagib)
- {
- // minstagib: each hit means +1 ammo
- frag_attacker.ammo_cells += 2; // note: 1 cell was deducted for the shot
- }
- else
+ if(time >= frag_target.spawnshieldtime)
+ if(frag_target != frag_attacker)
+ if(frag_target.deadflag == DEAD_NO)
{
- // otherwise: each hit gets damage back
- frag_attacker.health += damage_take;
+ frag_attacker.health += bound(0, damage_take, frag_target.health);
+ frag_attacker.health = bound(0, frag_attacker.health, autocvar_g_balance_health_limit);
}
- return 0;
+
+ return false;
}
-MUTATOR_HOOKFUNCTION(vampire_BuildMutatorsString)
+MUTATOR_HOOKFUNCTION(vampire, BuildMutatorsString)
{
ret_string = strcat(ret_string, ":Vampire");
return 0;
}
-MUTATOR_HOOKFUNCTION(vampire_BuildMutatorsPrettyString)
+MUTATOR_HOOKFUNCTION(vampire, BuildMutatorsPrettyString)
{
ret_string = strcat(ret_string, ", Vampire");
return 0;
}
-
-MUTATOR_DEFINITION(mutator_vampire)
-{
- MUTATOR_HOOK(PlayerDamage, vampire_PlayerDamage, CBC_ORDER_ANY);
- MUTATOR_HOOK(BuildMutatorsString, vampire_BuildMutatorsString, CBC_ORDER_ANY);
- MUTATOR_HOOK(BuildMutatorsPrettyString, vampire_BuildMutatorsPrettyString, CBC_ORDER_ANY);
-
- return 0;
-}