52 if(game_stopped)
return;
72 PlayerStats_GameReport_Event_Player(attacker, sprintf(
"kills-%d", targ.playerid), 1);
78 if(
MUTATOR_CALLHOOK(GiveFragsForKill, attacker, targ, f, deathtype, attacker.(weaponentity)))
81 attacker.totalfrags += f;
92 int w = player.(weaponentity).m_weapon.m_id;
94 w = player.(weaponentity).
cnt;
95 if(w != 0 || slot == 0)
111 s =
strcat(
":kill:", mode);
119 s =
strcat(s,
":victimitems=");
129 string s1,
string s2,
string s3,
130 float f1,
float f2,
float f3)
134 backtrace(
"Obituary_SpecialDeath called without a special deathtype?\n");
141 backtrace(
"Obituary_SpecialDeath: Could not find deathtype entity!\n");
145 if(
g_cts && deathtype == DEATH_KILL.m_id)
148 Notification death_message = (murder) ? deathent.death_msgmurder : deathent.death_msgself;
151 Send_Notification_WOCOVA(
159 Send_Notification_WOCOVA(
163 death_message.nent_msginfo,
174 string s1,
string s2,
string s3,
178 if (death_weapon == WEP_Null)
182 Notification death_message = ((murder) ? death_weapon.wr_killmessage(death_weapon) : death_weapon.wr_suicidemessage(death_weapon));
187 Send_Notification_WOCOVA(
196 Send_Notification_WOCOVA(
200 death_message.nent_msginfo,
208 "Obituary_WeaponDeath(): ^1Deathtype ^7(%d)^1 has no notification for weapon %s!\n",
219 if(deathtype == DEATH_FIRE.m_id)
221 Send_Notification(NOTIF_ONE, attacker, MSG_CHOICE, CHOICE_FRAG_FIRE, targ.netname, kill_count_to_attacker, (
IS_BOT_CLIENT(targ) ? -1 :
CS(targ).
ping));
222 Send_Notification(NOTIF_ONE, targ, MSG_CHOICE, CHOICE_FRAGGED_FIRE, attacker_name, kill_count_to_target,
GetResource(attacker,
RES_HEALTH),
GetResource(attacker, RES_ARMOR), (
IS_BOT_CLIENT(attacker) ? -1 :
CS(attacker).ping));
226 return MUTATOR_CALLHOOK(FragCenterMessage, attacker, targ, deathtype, kill_count_to_attacker, kill_count_to_target);
235 float notif_firstblood =
false;
236 float kill_count_to_attacker, kill_count_to_target;
237 bool notif_anonymous =
false;
238 string attacker_name = attacker.netname;
241 targ.death_origin = targ.origin;
242 string deathlocation = (autocvar_notification_server_allows_location ?
NearestLocation(targ.death_origin) :
"");
245 if (
MUTATOR_CALLHOOK(ClientObituary, inflictor, attacker, targ, deathtype, attacker.(weaponentity))) {
CS(targ).killcount = 0;
return; }
246 notif_anonymous =
M_ARGV(5,
bool);
249 attacker_name =
"Anonymous player";
251 #ifdef NOTIFICATIONS_DEBUG 254 "Obituary(%s, %s, %s, %s = %d);\n",
271 if(deathtype == DEATH_TEAMCHANGE.m_id || deathtype == DEATH_AUTOTEAMCHANGE.m_id)
279 case DEATH_MIRRORDAMAGE:
284 case DEATH_HURTTRIGGER:
297 backtrace(
"SUICIDE: what the hell happened here?\n");
300 LogDeath(
"suicide", deathtype, targ, targ);
301 if(deathtype != DEATH_AUTOTEAMCHANGE.m_id)
302 GiveFrags(attacker, targ, -1, deathtype, weaponentity);
312 LogDeath(
"tk", deathtype, attacker, targ);
313 GiveFrags(attacker, targ, -1, deathtype, weaponentity);
315 CS(attacker).killcount = 0;
317 Send_Notification(NOTIF_ONE, attacker, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAG, targ.netname);
318 Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker_name);
319 Send_Notification(NOTIF_ALL,
NULL, MSG_INFO,
APP_TEAM_NUM(targ.team, INFO_DEATH_TEAMKILL), targ.netname, attacker_name, deathlocation,
CS(targ).
killcount);
326 LogDeath(
"frag", deathtype, attacker, targ);
327 GiveFrags(attacker, targ, 1, deathtype, weaponentity);
329 CS(attacker).taunt_soundtime =
time + 1;
330 CS(attacker).killcount =
CS(attacker).killcount + 1;
332 attacker.killsound += 1;
336 #define SPREE_ITEM(counta,countb,center,normal,gentle) \ 338 Send_Notification(NOTIF_ONE, attacker, MSG_ANNCE, ANNCE_KILLSTREAK_##countb); \ 340 PlayerStats_GameReport_Event_Player(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_##counta, 1); \ 353 notif_firstblood =
true;
354 PlayerStats_GameReport_Event_Player(attacker, PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD, 1);
355 PlayerStats_GameReport_Event_Player(targ, PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM, 1);
358 kill_count_to_attacker = -1;
359 kill_count_to_target = -2;
363 kill_count_to_attacker =
CS(attacker).killcount;
364 kill_count_to_target = 0;
375 kill_count_to_attacker,
384 kill_count_to_target,
398 kill_count_to_attacker,
407 kill_count_to_target,
415 if(deathtype == DEATH_BUFF.m_id)
418 if (!
Obituary_WeaponDeath(targ,
true, deathtype, targ.netname, attacker_name, deathlocation,
CS(targ).killcount, kill_count_to_attacker))
419 Obituary_SpecialDeath(targ,
true, deathtype, targ.netname, attacker_name, deathlocation,
CS(targ).killcount, kill_count_to_attacker, f3);
433 case DEATH_HURTTRIGGER:
464 LogDeath(
"accident", deathtype, targ, targ);
465 GiveFrags(targ, targ, -1, deathtype, weaponentity);
469 Send_Notification(NOTIF_ONE, targ, MSG_ANNCE, ANNCE_ACHIEVEMENT_BOTLIKE);
472 PlayerStats_GameReport_Event_Player(attacker, PLAYERSTATS_ACHIEVEMENT_BOTLIKE, 1);
478 CS(targ).killcount = 0;
483 if(!STAT(FROZEN, this.
owner) || this.
owner.iceblock !=
this)
489 if (this.
origin != ice_org)
494 void Freeze(
entity targ,
float revivespeed,
int frozen_type,
bool show_waypoint)
499 if(STAT(FROZEN, targ))
504 STAT(FROZEN, targ) = frozen_type;
507 targ.revive_speed = revivespeed;
510 targ.bot_attack =
false;
511 targ.freeze_time =
time;
515 ice.scale = targ.scale;
518 ice.nextthink =
time;
523 ice.glowmod = ice.colormod;
525 targ.revival_time = 0;
536 if(it.(weaponentity).hook.aiment == targ)
543 WaypointSprite_Spawn(WP_Frozen, 0, 0, targ,
'0 0 64',
NULL, targ.team, targ, waypointsprite_attached,
true, RADARICON_WAYPOINT);
548 if(!STAT(FROZEN, targ))
556 STAT(FROZEN, targ) = 0;
557 STAT(REVIVE_PROGRESS, targ) = 0;
558 targ.revival_time =
time;
561 targ.bot_attack =
true;
563 WaypointSprite_Kill(targ.waypointsprite_attached);
570 if(it.(weaponentity).hook.aiment == targ)
577 delete(targ.iceblock);
578 targ.iceblock =
NULL;
585 float complainteamdamage = 0;
586 float mirrordamage = 0;
587 float mirrorforce = 0;
592 entity attacker_save = attacker;
603 if(deathtype == DEATH_KILL.m_id || deathtype == DEATH_TEAMCHANGE.m_id || deathtype == DEATH_AUTOTEAMCHANGE.m_id)
612 if(deathtype == DEATH_TEAMCHANGE.m_id || deathtype == DEATH_AUTOTEAMCHANGE.m_id)
621 else if(deathtype == DEATH_MIRRORDAMAGE.m_id || deathtype == DEATH_NOAMMO.m_id)
628 if(deathtype != DEATH_TELEFRAG.m_id)
636 else if(!STAT(FROZEN, targ) &&
SAME_TEAM(attacker, targ))
640 else if(attacker != targ)
646 attacker.dmg_team = attacker.dmg_team + damage;
656 attacker.dmg_team = attacker.dmg_team + damage;
658 if(complainteamdamage > 0)
667 attacker.dmg_take += v.x;
668 attacker.dmg_save += v.y;
669 attacker.dmg_inflictor = inflictor;
677 targ.dmg_take += v.x;
678 targ.dmg_save += v.y;
679 targ.dmg_inflictor = inflictor;
685 else if(!targ.canteamdamage)
702 MUTATOR_CALLHOOK(Damage_Calculate, inflictor, attacker, targ, deathtype, damage, mirrordamage, force, attacker.(weaponentity));
703 damage =
M_ARGV(4,
float);
704 mirrordamage =
M_ARGV(5,
float);
707 if(
IS_PLAYER(targ) && damage > 0 && attacker)
712 if(targ.(went).hook && targ.(went).
hook.aiment == attacker)
718 && deathtype != DEATH_TEAMCHANGE.m_id && deathtype != DEATH_AUTOTEAMCHANGE.m_id)
724 Send_Effect(EFFECT_ICEORGLASS, targ.origin,
'0 0 0', 3);
725 Send_Notification(NOTIF_ALL,
NULL, MSG_INFO, INFO_FREEZETAG_REVIVED_FALL, targ.netname);
726 Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_FREEZETAG_REVIVE_SELF);
736 Send_Effect(EFFECT_TELEPORT, targ.origin,
'0 0 0', 1);
744 targ.angles = spot.angles;
750 targ.fixangle =
true;
751 targ.velocity =
'0 0 0';
752 targ.avelocity =
'0 0 0';
753 targ.punchangle =
'0 0 0';
754 targ.punchvector =
'0 0 0';
755 targ.oldvelocity = targ.velocity;
757 targ.spawnorigin = spot.origin;
758 setorigin(targ, spot.origin +
'0 0 1' * (1 - targ.mins.z - 24));
760 targ.oldorigin = targ.origin;
762 Send_Effect(EFFECT_TELEPORT, targ.origin,
'0 0 0', 1);
766 if (targ == attacker)
772 if(deathtype != DEATH_BUFF.m_id)
788 if(deathtype != DEATH_FIRE.m_id)
791 attacker.typehitsound += 1;
793 attacker.hitsound_damage_dealt += damage;
806 else if (
IS_PLAYER(attacker) && !STAT(FROZEN, victim))
808 if (deathtype != DEATH_FIRE.m_id)
810 attacker.typehitsound += 1;
812 if(complainteamdamage > 0)
815 CS(attacker).teamkill_complain =
time + 5;
816 CS(attacker).teamkill_soundtime =
time + 0.4;
817 CS(attacker).teamkill_soundsource = targ;
825 if (targ.damageforcescale)
827 if (!
IS_PLAYER(targ) || !StatusEffects_active(STATUSEFFECT_SpawnShield, targ) || targ == attacker)
832 entity farcent =
new(farce);
833 farcent.enemy = targ;
834 farcent.movedir = farce * 10;
836 farcent.movedir = farcent.movedir * targ.mass;
837 farcent.origin = hitloc;
839 farcent.nextthink =
time + 0.1;
844 targ.velocity = targ.velocity + farce;
850 if (damage != 0 || (targ.damageforcescale && force))
851 if (targ.event_damage)
852 targ.event_damage (targ, inflictor, attacker, damage, deathtype, weaponentity, hitloc, force);
856 if(mirrordamage > 0 || mirrorforce > 0)
858 attacker = attacker_save;
860 force =
normalize(attacker.origin + attacker.view_ofs - hitloc) * mirrorforce;
861 Damage(attacker, inflictor, attacker, mirrordamage, DEATH_MIRRORDAMAGE.m_id, weaponentity, attacker.origin, force);
867 float inflictorselfdamage,
float forceintensity,
float forcezscale,
int deathtype, .
entity weaponentity,
entity directhitentity)
871 float total_damage_to_creatures;
876 float stat_damagedone;
880 backtrace(
"RadiusDamage called recursively! Expect stuff to go HORRIBLY wrong.");
889 total_damage_to_creatures = 0;
894 force = inflictorvelocity;
899 if(forceintensity >= 0)
900 Damage_DamageInfo(inflictororigin, coredamage, edgedamage, rad, forceintensity * force, deathtype, 0, attacker);
902 Damage_DamageInfo(inflictororigin, coredamage, edgedamage, -rad, (-forceintensity) * force, deathtype, 0, attacker);
911 if ((targ != inflictor) || inflictorselfdamage)
912 if (((cantbe != targ) && !mustbe) || (mustbe == targ))
921 nearest = targ.WarpZone_findradius_nearest;
922 diff = targ.WarpZone_findradius_dist;
935 finaldmg = coredamage * power + edgedamage * (1 - power);
949 force =
normalize(center - myblastorigin);
950 force = force * (finaldmg / coredamage) * forceintensity;
956 force.z *= forcezscale;
958 if(targ != directhitentity)
963 float mininv_f, mininv_d;
977 LOG_INFOF(
"THROUGHFLOOR: D=%f F=%f max(dD)=1/%f max(dF)=1/%f", finaldmg,
vlen(force), mininv_d, mininv_f);
980 total = 0.25 * (
max(mininv_f, mininv_d) ** 2);
992 LOG_INFOF(
" steps=%f dD=%f dF=%f", total, finaldmg * (1-tfloordmg) / (2 *
sqrt(total)),
vlen(force) * (1-tfloorforce) / (2 *
sqrt(total)));
994 for(c = 0; c < total; ++c)
1002 hitloc = hitloc + nearest;
1006 nearest.x = targ.origin.x + targ.mins.x +
random() * targ.size.x;
1007 nearest.y = targ.origin.y + targ.mins.y +
random() * targ.size.y;
1008 nearest.z = targ.origin.z + targ.mins.z +
random() * targ.size.z;
1011 nearest = hitloc * (1 /
max(1, hits));
1012 hitratio = (hits / total);
1013 a =
bound(0, tfloordmg + (1-tfloordmg) * hitratio, 1);
1014 finaldmg = finaldmg * a;
1015 a =
bound(0, tfloorforce + (1-tfloorforce) * hitratio, 1);
1028 if(finaldmg || force)
1032 total_damage_to_creatures += finaldmg;
1035 stat_damagedone += finaldmg;
1039 Damage(targ, inflictor, attacker, finaldmg, deathtype, weaponentity, nearest, force);
1041 Damage(targ, inflictor, attacker, finaldmg, deathtype |
HITTYPE_SPLASH, weaponentity, nearest, force);
1054 return total_damage_to_creatures;
1057 float RadiusDamage(
entity inflictor,
entity attacker,
float coredamage,
float edgedamage,
float rad,
entity cantbe,
entity mustbe,
float forceintensity,
int deathtype, .
entity weaponentity,
entity directhitentity)
1059 return RadiusDamageForSource(inflictor, (inflictor.origin + (inflictor.mins + inflictor.maxs) * 0.5), inflictor.velocity, attacker, coredamage, edgedamage, rad,
1060 cantbe, mustbe,
false, forceintensity, 1, deathtype, weaponentity, directhitentity);
1068 bool healed =
false;
1070 healed = targ.event_heal(targ, inflictor, amount, limit);
1080 float maxtime, mintime, maxdamage, mindamage, maxdps, mindps, totaldamage, totaltime;
1090 if(StatusEffects_active(STATUSEFFECT_Burning, e))
1092 float fireendtime = StatusEffects_gettime(STATUSEFFECT_Burning, e);
1094 mintime = fireendtime -
time;
1095 maxtime =
max(mintime, t);
1097 mindps = e.fire_damagepersec;
1098 maxdps =
max(mindps, dps);
1100 if(maxtime > mintime || maxdps > mindps)
1105 mindamage = mindps * mintime;
1108 maxdamage = mindamage + d;
1111 totaldamage =
min(maxdamage, maxtime * maxdps);
1134 totaltime =
min(maxtime, totaldamage / mindps);
1156 e.fire_damagepersec = totaldamage / totaltime;
1157 StatusEffects_apply(STATUSEFFECT_Burning, e, time + totaltime, 0);
1158 if(totaldamage > 1.2 * mindamage)
1160 e.fire_deathtype = dt;
1161 if(e.fire_owner != o)
1164 e.fire_hitsound =
false;
1169 return max(0, totaldamage - mindamage);
1176 e.fire_damagepersec = dps;
1177 StatusEffects_apply(STATUSEFFECT_Burning, e,
time + t, 0);
1178 e.fire_deathtype = dt;
1180 e.fire_hitsound =
false;
1192 for(t = 0, o = e.owner; o.owner && t < 16; o = o.owner, ++t);
1196 float fireendtime = StatusEffects_gettime(STATUSEFFECT_Burning, e);
1198 d = e.fire_damagepersec * t;
1200 hi = e.fire_owner.hitsound_damage_dealt;
1201 ty = e.fire_owner.typehitsound;
1202 Damage(e, e, e.fire_owner, d, e.fire_deathtype,
DMG_NOWEP, e.origin,
'0 0 0');
1203 if(e.fire_hitsound && e.fire_owner)
1205 e.fire_owner.hitsound_damage_dealt = hi;
1206 e.fire_owner.typehitsound = ty;
1208 e.fire_hitsound =
true;
1214 if(!IS_DEAD(it) && it.takedamage && !IS_INDEPENDENT_PLAYER(it))
1215 if(boxesoverlap(e.absmin, e.absmax, it.absmin, it.absmax))
1217 t = autocvar_g_balance_firetransfer_time * (fireendtime - time);
1218 d = autocvar_g_balance_firetransfer_damage * e.fire_damagepersec * t;
1219 Fire_AddDamage(it, o, d, t, DEATH_FIRE.m_id);
const int HITTYPE_SPLASH
automatically set by RadiusDamage
ERASEABLE void IL_REMOVE(IntrusiveList this, entity it)
Remove any element, anywhere in the list.
entity SelectSpawnPoint(entity this, bool anypoint)
#define APP_TEAM_NUM(num, prefix)
#define IL_EACH(this, cond, body)
#define PHYS_INPUT_BUTTON_CHAT(s)
bool autocvar_g_frozen_damage_trigger
void GiveFrags(entity attacker, entity targ, float f, int deathtype,.entity weaponentity)
spree_inf s1 s2 s3loc s2 s1
bool SetResourceExplicit(entity e, Resource res_type, float amount)
Sets the resource amount of an entity without calling any hooks.
spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2 f1 f1points s1 s2
float autocvar_g_balance_pause_health_regen
float RadiusDamage_running
const float MOVETYPE_PHYSICS
Header file that describes the resource system.
bool frag_centermessage_override(entity attacker, entity targ, int deathtype, int kill_count_to_attacker, int kill_count_to_target, string attacker_name)
#define IS_INDEPENDENT_PLAYER(e)
vector Team_ColorRGB(int teamid)
float autocvar_g_frozen_revive_falldamage
const float MIN_DAMAGEEXTRARADIUS
const float FORCETYPE_FORCEATPOS
IntrusiveList g_damagedbycontents
void Obituary(entity attacker, entity inflictor, entity targ, int deathtype,.entity weaponentity)
vector damage_explosion_calcpush(vector explosion_f, vector target_v, float speedfactor)
#define REGISTRY_GET(id, i)
vector WarpZone_TransformOrigin(entity wz, vector v)
ClientState CS(Client this)
void Freeze(entity targ, float revivespeed, int frozen_type, bool show_waypoint)
#define FOREACH_CLIENT(cond, body)
float autocvar_g_friendlyfire_virtual
#define GameRules_scoring_add(client, fld, value)
string Deathtype_Name(int deathtype)
float autocvar_g_throughfloor_min_steps_other
void LogDeath(string mode, int deathtype, entity killer, entity killed)
entity buff_FirstFromFlags(entity actor)
void Obituary_SpecialDeath(entity notif_target, float murder, int deathtype, string s1, string s2, string s3, float f1, float f2, float f3)
#define UNSET_ONGROUND(s)
float autocvar_g_throughfloor_damage
float checkrules_firstblood
float autocvar_g_throughfloor_min_steps_player
int autocvar_g_frozen_revive_falldamage_health
#define DEATH_WEAPONOF(t)
float autocvar_g_throughfloor_max_steps_other
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1
IntrusiveList g_bot_targets
const int EF_TELEPORT_BIT
vector WarpZone_UnTransformOrigin(entity wz, vector v)
string netname
M: refname : reference name name.
#define setmodel(this, m)
float autocvar_g_frozen_force
void Unfreeze(entity targ, bool reset_health)
Effect is being forcibly removed without calling any additional mechanics.
bool autocvar_g_mirrordamage_onlyweapons
string AppendItemcodes(string s, entity player)
float autocvar_g_friendlyfire_virtual_force
float autocvar_g_weapondamagefactor
const float MOVE_NOMONSTERS
spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 spree_inf s1 s2 s3loc s2 s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2loc s1 s2 f1 f1points f2
float autocvar_g_balance_selfdamagepercent
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
float autocvar_g_teamdamage_threshold
void UpdateCSQCProjectile(entity e)
int autocvar_teamplay_mode
void SetResource(entity e, Resource res_type, float amount)
Sets the current amount of resource the given entity will have.
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
const int MAX_WEAPONSLOTS
#define GameRules_scoring_add_team(client, fld, value)
void Ice_Think(entity this)
void UpdateFrags(entity player, int f)
string NearestLocation(vector p)
void GameLogEcho(string s)
float autocvar_g_friendlyfire
#define IS_NOT_A_CLIENT(v)
was: (clienttype(v) == CLIENTTYPE_NOTACLIENT)
void Damage(entity targ, entity inflictor, entity attacker, float damage, int deathtype,.entity weaponentity, vector hitloc, vector force)
bool Heal(entity targ, entity inflictor, float amount, float limit)
const int HITTYPE_SECONDARY
entity WarpZone_FindRadius(vector org, float rad, bool needlineofsight)
bool IsFlying(entity this)
float autocvar_g_balance_damagepush_speedfactor
float autocvar_g_weaponforcefactor
float autocvar_g_throughfloor_max_steps_player
void RemoveGrapplingHooks(entity pl)
#define CENTER_OR_VIEWOFS(ent)
vector(float skel, float bonenum) _skel_get_boneabs_hidden
#define ITEM_DAMAGE_NEEDKILL(dt)
float autocvar_g_throughfloor_force
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
float Fire_AddDamage(entity e, entity o, float d, float t, float dt)
void accuracy_add(entity this, Weapon w, float fired, float hit)
void WarpZone_TraceLine(vector org, vector end, float nomonsters, entity forent)
entity Notification
always last
bool autocvar_g_mirrordamage_virtual
float RadiusDamage(entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float forceintensity, int deathtype,.entity weaponentity, entity directhitentity)
bool accuracy_isgooddamage(entity attacker, entity targ)
float autocvar_g_mirrordamage
const int FRAGS_SPECTATOR
const float MAX_DAMAGEEXTRARADIUS
#define MUTATOR_CALLHOOK(id,...)
#define IS_BOT_CLIENT(v)
want: (IS_CLIENT(v) && !IS_REAL_CLIENT(v))
entity weaponentities[MAX_WEAPONSLOTS]
void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, int deathtype, float bloodtype, entity dmgowner)
float RadiusDamageForSource(entity inflictor, vector inflictororigin, vector inflictorvelocity, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float inflictorselfdamage, float forceintensity, float forcezscale, int deathtype,.entity weaponentity, entity directhitentity)
void vehicles_exit(entity vehic, bool eject)
#define DEATH_ISWEAPON(t, w)
#define DEATH_ISSPECIAL(t)
bool autocvar_sv_eventlog
float autocvar_g_balance_armor_blockpercent
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
float Obituary_WeaponDeath(entity notif_target, float murder, int deathtype, string s1, string s2, string s3, float f1, float f2)
float autocvar_g_throughfloor_damage_max_stddev
void Fire_ApplyDamage(entity e)
const int FROZEN_TEMP_DYING
float autocvar_g_throughfloor_force_max_stddev
void RemoveHook(entity this)
bool autocvar_g_throughfloor_debug