1 #include "sv_vampire.qh"
3 string autocvar_g_vampire;
4 float autocvar_g_vampire_factor = 1.0;
5 bool autocvar_g_vampire_use_total_damage = false;
7 REGISTER_MUTATOR(vampire, expr_evaluate(autocvar_g_vampire) && !MUTATOR_IS_ENABLED(mutator_instagib));
9 MUTATOR_HOOKFUNCTION(vampire, PlayerDamage_SplitHealthArmor)
11 // NOTE: vampire buff PlayerDamage_SplitHealthArmor code is similar
12 entity frag_attacker = M_ARGV(1, entity);
13 entity frag_target = M_ARGV(2, entity);
14 float health_take = bound(0, M_ARGV(4, float), GetResource(frag_target, RES_HEALTH));
15 float armor_take = bound(0, M_ARGV(5, float), GetResource(frag_target, RES_ARMOR));
16 float damage_take = (autocvar_g_vampire_use_total_damage) ? health_take + armor_take : health_take;
18 if (!StatusEffects_active(STATUSEFFECT_SpawnShield, frag_target) && frag_target != frag_attacker
19 && IS_PLAYER(frag_attacker) && !IS_DEAD(frag_target) && !STAT(FROZEN, frag_target))
21 GiveResource(frag_attacker, RES_HEALTH, autocvar_g_vampire_factor * damage_take);
25 MUTATOR_HOOKFUNCTION(vampire, BuildMutatorsString)
27 M_ARGV(0, string) = strcat(M_ARGV(0, string), ":Vampire");
30 MUTATOR_HOOKFUNCTION(vampire, BuildMutatorsPrettyString)
32 M_ARGV(0, string) = strcat(M_ARGV(0, string), ", Vampire");