X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_damage.qc;h=913f3dd23d4c206a5da3d15983728298b75aa45d;hb=6cc2d1aa115907d16ae84fb07c3fe6c3329cd9b5;hp=4840e15dd25d6916239fb221de8fbd721d47cec0;hpb=819247f875aa17ebcd2669676ee53195786a5457;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 4840e15dd..39ad85c6d 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -1,24 +1,43 @@ -.float dmg; -.float dmg_edge; -.float dmg_force; -.float dmg_radius; - -float Damage_DamageInfo_SendEntity(entity to, float sf) +#include "g_damage.qh" +#include "_all.qh" + +#include "g_hook.qh" +#include "mutators/mutators_include.qh" +#include "scores.qh" +#include "spawnpoints.qh" +#include "t_items.qh" +#include "../common/vehicles/all.qh" +#include "weapons/accuracy.qh" +#include "weapons/csqcprojectile.qh" +#include "weapons/selection.qh" +#include "../common/buffs.qh" +#include "../common/constants.qh" +#include "../common/deathtypes.qh" +#include "../common/notifications.qh" +#include "../common/movetypes/movetypes.qh" +#include "../common/playerstats.qh" +#include "../common/teams.qh" +#include "../common/util.qh" +#include "../common/weapons/all.qh" +#include "../csqcmodellib/sv_model.qh" +#include "../warpzonelib/common.qh" + +float Damage_DamageInfo_SendEntity(entity to, int sf) { WriteByte(MSG_ENTITY, ENT_CLIENT_DAMAGEINFO); WriteShort(MSG_ENTITY, self.projectiledeathtype); - WriteCoord(MSG_ENTITY, floor(self.origin_x)); - WriteCoord(MSG_ENTITY, floor(self.origin_y)); - WriteCoord(MSG_ENTITY, floor(self.origin_z)); + WriteCoord(MSG_ENTITY, floor(self.origin.x)); + WriteCoord(MSG_ENTITY, floor(self.origin.y)); + WriteCoord(MSG_ENTITY, floor(self.origin.z)); WriteByte(MSG_ENTITY, bound(1, self.dmg, 255)); WriteByte(MSG_ENTITY, bound(0, self.dmg_radius, 255)); WriteByte(MSG_ENTITY, bound(1, self.dmg_edge, 255)); - WriteShort(MSG_ENTITY, self.oldorigin_x); + WriteShort(MSG_ENTITY, self.oldorigin.x); WriteByte(MSG_ENTITY, self.species); - return TRUE; + return true; } -void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, float deathtype, float bloodtype, entity dmgowner) +void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, int deathtype, float bloodtype, entity dmgowner) { // TODO maybe call this from non-edgedamage too? // TODO maybe make the client do the particle effects for the weapons and the impact sounds using this info? @@ -39,33 +58,7 @@ void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad e.oldorigin_x = compressShortVector(e.velocity); e.species = bloodtype; - Net_LinkEntity(e, FALSE, 0.2, Damage_DamageInfo_SendEntity); -} - -float checkrules_firstblood; - -float yoda; -float damage_goodhits; -float damage_gooddamage; - -.float dmg_team; -.float teamkill_complain; -.float teamkill_soundtime; -.entity teamkill_soundsource; -.entity pusher; -.float istypefrag; -.float taunt_soundtime; - -float IsFlying(entity a) -{ - if(a.flags & FL_ONGROUND) - return 0; - if(a.waterlevel >= WATERLEVEL_SWIMMING) - return 0; - traceline(a.origin, a.origin - '0 0 48', MOVE_NORMAL, a); - if(trace_fraction < 1) - return 0; - return 1; + Net_LinkEntity(e, false, 0.2, Damage_DamageInfo_SendEntity); } void UpdateFrags(entity player, float f) @@ -73,10 +66,7 @@ void UpdateFrags(entity player, float f) PlayerTeamScore_AddScore(player, f); } -// NOTE: f=0 means still count as a (positive) kill, but count no frags for it -void W_SwitchWeapon_Force(entity e, float w); -entity GiveFrags_randomweapons; -void GiveFrags (entity attacker, entity targ, float f, float deathtype) +void GiveFrags (entity attacker, entity targ, float f, int deathtype) { // TODO route through PlayerScores instead if(gameover) return; @@ -115,7 +105,7 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype) else if(!(attacker.weapons & WepSet_FromWeapon(culprit))) culprit = attacker.weapon; - if(g_weaponarena_random_with_blaster && culprit == WEP_BLASTER) // WEAPONTODO: Shouldn't this be in a mutator? + if(g_weaponarena_random_with_blaster && culprit == WEP_BLASTER.m_id) // WEAPONTODO: Shouldn't this be in a mutator? { // no exchange } @@ -155,10 +145,7 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype) entity oldself; oldself = self; self = attacker; - frag_attacker = attacker; - frag_target = targ; - frag_score = f; - if(MUTATOR_CALLHOOK(GiveFragsForKill)) + if(MUTATOR_CALLHOOK(GiveFragsForKill, attacker, targ, f)) { f = frag_score; self = oldself; @@ -196,7 +183,7 @@ string AppendItemcodes(string s, entity player) return s; } -void LogDeath(string mode, float deathtype, entity killer, entity killed) +void LogDeath(string mode, int deathtype, entity killer, entity killed) { string s; if(!autocvar_sv_eventlog) @@ -218,7 +205,7 @@ void LogDeath(string mode, float deathtype, entity killer, entity killed) void Obituary_SpecialDeath( entity notif_target, float murder, - float deathtype, + int deathtype, string s1, string s2, string s3, float f1, float f2, float f3) { @@ -275,11 +262,10 @@ void Obituary_SpecialDeath( else { backtrace("Obituary_SpecialDeath called without a special deathtype?\n"); return; } } -float w_deathtype; float Obituary_WeaponDeath( entity notif_target, float murder, - float deathtype, + int deathtype, string s1, string s2, string s3, float f1, float f2) { @@ -287,10 +273,10 @@ float Obituary_WeaponDeath( if(death_weapon) { w_deathtype = deathtype; - float death_message = WEP_ACTION(death_weapon, ((murder) ? WR_KILLMESSAGE : WR_SUICIDEMESSAGE)); - w_deathtype = FALSE; + int death_message = WEP_ACTION(death_weapon, ((murder) ? WR_KILLMESSAGE : WR_SUICIDEMESSAGE)); + w_deathtype = false; - if(death_message) + if (death_message) { Send_Notification_WOCOVA( NOTIF_ONE, @@ -311,25 +297,25 @@ float Obituary_WeaponDeath( } else { - dprintf( + LOG_TRACEF( "Obituary_WeaponDeath(): ^1Deathtype ^7(%d)^1 has no notification for weapon %d!\n", deathtype, death_weapon ); } - return TRUE; + return true; } - return FALSE; + return false; } -void Obituary(entity attacker, entity inflictor, entity targ, float deathtype) +void Obituary(entity attacker, entity inflictor, entity targ, int deathtype) { // Sanity check if (!IS_PLAYER(targ)) { backtrace("Obituary called on non-player?!\n"); return; } // Declarations - float notif_firstblood = FALSE; + float notif_firstblood = false; float kill_count_to_attacker, kill_count_to_target; // Set final information for the death @@ -359,7 +345,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype) { if(deathtype == DEATH_TEAMCHANGE || deathtype == DEATH_AUTOTEAMCHANGE) { - Obituary_SpecialDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.team, 0, 0); + Obituary_SpecialDeath(targ, false, deathtype, targ.netname, deathlocation, "", targ.team, 0, 0); } else { @@ -367,19 +353,19 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype) { case DEATH_MIRRORDAMAGE: { - Obituary_SpecialDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0); + Obituary_SpecialDeath(targ, false, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0); break; } default: { - Obituary_SpecialDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0); + Obituary_SpecialDeath(targ, false, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0); break; } } } } - else if (!Obituary_WeaponDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0)) + else if (!Obituary_WeaponDeath(targ, false, deathtype, targ.netname, deathlocation, "", targ.killcount, 0)) { backtrace("SUICIDE: what the hell happened here?\n"); return; @@ -431,8 +417,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype) if(!checkrules_firstblood) { - checkrules_firstblood = TRUE; - notif_firstblood = TRUE; // modify the current messages so that they too show firstblood information + checkrules_firstblood = true; + notif_firstblood = true; // modify the current messages so that they too show firstblood information PS_GR_P_ADDVAL(attacker, PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD, 1); PS_GR_P_ADDVAL(targ, PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM, 1); @@ -493,8 +479,12 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype) ); } - if (!Obituary_WeaponDeath(targ, TRUE, deathtype, targ.netname, attacker.netname, deathlocation, targ.killcount, kill_count_to_attacker)) - Obituary_SpecialDeath(targ, TRUE, deathtype, targ.netname, attacker.netname, deathlocation, targ.killcount, kill_count_to_attacker, 0); + float f3 = 0; + if(deathtype == DEATH_BUFF) + f3 = attacker.buffs; + + if (!Obituary_WeaponDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, targ.killcount, kill_count_to_attacker)) + Obituary_SpecialDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, targ.killcount, kill_count_to_attacker, f3); } } @@ -518,7 +508,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype) case DEATH_CUSTOM: { - Obituary_SpecialDeath(targ, FALSE, deathtype, + Obituary_SpecialDeath(targ, false, deathtype, targ.netname, ((strstrofs(deathmessage, "%", 0) < 0) ? strcat("%s ", deathmessage) : deathmessage), deathlocation, @@ -530,7 +520,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype) default: { - Obituary_SpecialDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0); + Obituary_SpecialDeath(targ, false, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0); break; } } @@ -562,13 +552,13 @@ void Ice_Think() void Freeze (entity targ, float freeze_time, float frozen_type, float show_waypoint) { - if(!IS_PLAYER(targ) && !(targ.flags & FL_MONSTER)) // only specified entities can be freezed + if(!IS_PLAYER(targ) && !IS_MONSTER(targ)) // only specified entities can be freezed return; if(targ.frozen) return; - float targ_maxhealth = ((targ.flags & FL_MONSTER) ? targ.max_health : start_health); + float targ_maxhealth = ((IS_MONSTER(targ)) ? targ.max_health : start_health); targ.frozen = frozen_type; targ.revive_progress = ((frozen_type == 3) ? 1 : 0); @@ -603,8 +593,8 @@ void Freeze (entity targ, float freeze_time, float frozen_type, float show_waypo RemoveGrapplingHook(head); // add waypoint - if(show_waypoint) - WaypointSprite_Spawn("frozen", 0, 0, targ, '0 0 64', world, targ.team, targ, waypointsprite_attached, TRUE, RADARICON_WAYPOINT, '0.25 0.90 1'); + if(show_waypoint) + WaypointSprite_Spawn(WP_Frozen, 0, 0, targ, '0 0 64', world, targ.team, targ, waypointsprite_attached, true, RADARICON_WAYPOINT); } void Unfreeze (entity targ) @@ -616,9 +606,9 @@ void Unfreeze (entity targ) targ.frozen = 0; targ.revive_progress = 0; targ.revival_time = time; - + WaypointSprite_Kill(targ.waypointsprite_attached); - + FOR_EACH_PLAYER(head) if(head.hook.aiment == targ) RemoveGrapplingHook(head); @@ -629,12 +619,7 @@ void Unfreeze (entity targ) targ.iceblock = world; } -// these are updated by each Damage call for use in button triggering and such -entity damage_targ; -entity damage_inflictor; -entity damage_attacker; - -void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) +void Damage (entity targ, entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { float mirrordamage; float mirrorforce; @@ -661,7 +646,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float RemoveGrapplingHook(targ); // STOP THAT, you parasite! // special rule: gravity bomb does not hit team mates (other than for disconnecting the hook) - if(DEATH_ISWEAPON(deathtype, WEP_HOOK) || DEATH_ISWEAPON(deathtype, WEP_TUBA)) + if(DEATH_ISWEAPON(deathtype, WEP_HOOK.m_id) || DEATH_ISWEAPON(deathtype, WEP_TUBA.m_id)) { if(IS_PLAYER(targ)) if(SAME_TEAM(targ, attacker)) @@ -675,7 +660,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float { // exit the vehicle before killing (fixes a crash) if(IS_PLAYER(targ) && targ.vehicle) - vehicles_exit(VHEF_RELESE); + vehicles_exit(VHEF_RELEASE); // These are ALWAYS lethal // No damage modification here @@ -724,18 +709,18 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float if(autocvar_g_mirrordamage_virtual) { vector v = healtharmor_applydamage(attacker.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, mirrordamage); - attacker.dmg_take += v_x; - attacker.dmg_save += v_y; + attacker.dmg_take += v.x; + attacker.dmg_save += v.y; attacker.dmg_inflictor = inflictor; - mirrordamage = v_z; + mirrordamage = v.z; mirrorforce = 0; } if(autocvar_g_friendlyfire_virtual) { vector v = healtharmor_applydamage(targ.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage); - targ.dmg_take += v_x; - targ.dmg_save += v_y; + targ.dmg_take += v.x; + targ.dmg_save += v.y; targ.dmg_inflictor = inflictor; damage = 0; if(!autocvar_g_friendlyfire_virtual_force) @@ -759,13 +744,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float } // should this be changed at all? If so, in what way? - frag_attacker = attacker; - frag_target = targ; - frag_damage = damage; - frag_force = force; - frag_deathtype = deathtype; - frag_mirrordamage = mirrordamage; - MUTATOR_CALLHOOK(PlayerDamage_Calculate); + MUTATOR_CALLHOOK(PlayerDamage_Calculate, attacker, targ, deathtype, damage, mirrordamage, force); damage = frag_damage; mirrordamage = frag_mirrordamage; force = frag_force; @@ -779,7 +758,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float { Unfreeze(targ); targ.health = autocvar_g_freezetag_revive_falldamage_health; - pointparticles(particleeffectnum("iceorglass"), targ.origin, '0 0 0', 3); + Send_Effect(EFFECT_ICEORGLASS, targ.origin, '0 0 0', 3); Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_FREEZETAG_REVIVED_FALL, targ.netname); Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_FREEZETAG_REVIVE_SELF); } @@ -787,49 +766,49 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float damage = 0; force *= autocvar_g_freezetag_frozen_force; } - + if(targ.frozen && deathtype == DEATH_HURTTRIGGER && !autocvar_g_freezetag_frozen_damage_trigger) { - pointparticles(particleeffectnum("teleport"), targ.origin, '0 0 0', 1); - + Send_Effect(EFFECT_TELEPORT, targ.origin, '0 0 0', 1); + entity oldself = self; self = targ; - entity spot = SelectSpawnPoint (FALSE); - + entity spot = SelectSpawnPoint (false); + if(spot) { damage = 0; self.deadflag = DEAD_NO; self.angles = spot.angles; - + self.effects = 0; self.effects |= EF_TELEPORT_BIT; self.angles_z = 0; // never spawn tilted even if the spot says to - self.fixangle = TRUE; // turn this way immediately + self.fixangle = true; // turn this way immediately self.velocity = '0 0 0'; self.avelocity = '0 0 0'; self.punchangle = '0 0 0'; self.punchvector = '0 0 0'; self.oldvelocity = self.velocity; - + self.spawnorigin = spot.origin; - setorigin (self, spot.origin + '0 0 1' * (1 - self.mins_z - 24)); + setorigin (self, spot.origin + '0 0 1' * (1 - self.mins.z - 24)); // don't reset back to last position, even if new position is stuck in solid self.oldorigin = self.origin; self.prevorigin = self.origin; - - pointparticles(particleeffectnum("teleport"), self.origin, '0 0 0', 1); + + Send_Effect(EFFECT_TELEPORT, self.origin, '0 0 0', 1); } - + self = oldself; } if(!g_instagib) { // apply strength multiplier - if (attacker.items & IT_STRENGTH) + if (attacker.items & ITEM_Strength.m_itemid) { if(targ == attacker) { @@ -844,7 +823,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float } // apply invincibility multiplier - if (targ.items & IT_INVINCIBLE) + if (targ.items & ITEM_Shield.m_itemid) damage = damage * autocvar_g_balance_powerup_invincible_takedamage; } @@ -854,17 +833,17 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float // count the damage if(attacker) if(!targ.deadflag) - if(deathtype != DEATH_BUFF_VENGEANCE) + if(deathtype != DEATH_BUFF) if(targ.takedamage == DAMAGE_AIM) if(targ != attacker) { entity victim; - if((targ.vehicle_flags & VHF_ISVEHICLE) && targ.owner) + if(IS_VEHICLE(targ) && targ.owner) victim = targ.owner; else victim = targ; - if(IS_PLAYER(victim) || (victim.turrcaps_flags & TFL_TURRCAPS_ISTURRET) || (victim.flags & FL_MONSTER)) + if(IS_PLAYER(victim) || (IS_TURRET(victim) && victim.active == ACTIVE_ACTIVE) || IS_MONSTER(victim) || MUTATOR_CALLHOOK(PlayHitsound, victim)) { if(DIFF_TEAM(victim, attacker) && !victim.frozen) { @@ -928,8 +907,12 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float farcent.think = SUB_Remove; } else + { self.velocity = self.velocity + farce; + self.move_velocity = self.velocity; + } self.flags &= ~FL_ONGROUND; + self.move_flags &= ~FL_ONGROUND; UpdateCSQCProjectile(self); } // apply damage @@ -948,8 +931,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float } } -float RadiusDamage_running; -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 deathtype, entity directhitentity) +float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector inflictorvelocity, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float inflictorselfdamage, float forceintensity, int deathtype, entity directhitentity) // Returns total damage applies to creatures { entity targ; @@ -974,8 +956,8 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in total_damage_to_creatures = 0; - if(deathtype != (WEP_HOOK | HITTYPE_SECONDARY | HITTYPE_BOUNCE)) // only send gravity bomb damage once - if(DEATH_WEAPONOF(deathtype) != WEP_TUBA) // do not send tuba damage (bandwidth hog) + if(deathtype != (WEP_HOOK.m_id | HITTYPE_SECONDARY | HITTYPE_BOUNCE)) // only send gravity bomb damage once + if(DEATH_WEAPONOF(deathtype) != WEP_TUBA.m_id) // do not send tuba damage (bandwidth hog) { force = inflictorvelocity; if(vlen(force) == 0) @@ -990,7 +972,7 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in stat_damagedone = 0; - targ = WarpZone_FindRadius (inflictororigin, rad + MAX_DAMAGEEXTRARADIUS, FALSE); + targ = WarpZone_FindRadius (inflictororigin, rad + MAX_DAMAGEEXTRARADIUS, false); while (targ) { next = targ.chain; @@ -1036,7 +1018,7 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in force = force * (finaldmg / coredamage) * forceintensity; hitloc = nearest; - if(deathtype & WEP_BLASTER) + if(deathtype & WEP_BLASTER.m_id) force *= WEP_CVAR_BOTH(blaster, !(deathtype & HITTYPE_SECONDARY), force_zscale); if(targ != directhitentity) @@ -1058,13 +1040,13 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in mininv_f = (vlen(force) * (1-tfloorforce)) / autocvar_g_throughfloor_force_max_stddev; if(autocvar_g_throughfloor_debug) - printf("THROUGHFLOOR: D=%f F=%f max(dD)=1/%f max(dF)=1/%f", finaldmg, vlen(force), mininv_d, mininv_f); + LOG_INFOF("THROUGHFLOOR: D=%f F=%f max(dD)=1/%f max(dF)=1/%f", finaldmg, vlen(force), mininv_d, mininv_f); total = 0.25 * pow(max(mininv_f, mininv_d), 2); if(autocvar_g_throughfloor_debug) - printf(" steps=%f", total); + LOG_INFOF(" steps=%f", total); if (IS_PLAYER(targ)) @@ -1073,7 +1055,7 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in total = ceil(bound(autocvar_g_throughfloor_min_steps_other, total, autocvar_g_throughfloor_max_steps_other)); if(autocvar_g_throughfloor_debug) - printf(" steps=%f dD=%f dF=%f", total, finaldmg * (1-tfloordmg) / (2 * sqrt(total)), vlen(force) * (1-tfloorforce) / (2 * sqrt(total))); + LOG_INFOF(" steps=%f dD=%f dF=%f", total, finaldmg * (1-tfloordmg) / (2 * sqrt(total)), vlen(force) * (1-tfloorforce) / (2 * sqrt(total))); for(c = 0; c < total; ++c) { @@ -1087,9 +1069,9 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in else hitloc = nearest; } - nearest_x = targ.origin_x + targ.mins_x + random() * targ.size_x; - nearest_y = targ.origin_y + targ.mins_y + random() * targ.size_y; - nearest_z = targ.origin_z + targ.mins_z + random() * targ.size_z; + nearest.x = targ.origin.x + targ.mins.x + random() * targ.size.x; + nearest.y = targ.origin.y + targ.mins.y + random() * targ.size.y; + nearest.z = targ.origin.z + targ.mins.z + random() * targ.size.z; } nearest = hitloc * (1 / max(1, hits)); @@ -1100,7 +1082,7 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in force = force * a; if(autocvar_g_throughfloor_debug) - printf(" D=%f F=%f\n", finaldmg, vlen(force)); + LOG_INFOF(" D=%f F=%f\n", finaldmg, vlen(force)); } //if (targ == attacker) @@ -1133,25 +1115,16 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in RadiusDamage_running = 0; if(!DEATH_ISSPECIAL(deathtype)) - accuracy_add(attacker, DEATH_WEAPONOFWEAPONDEATH(deathtype), 0, min(coredamage, stat_damagedone)); + accuracy_add(attacker, DEATH_WEAPONOF(deathtype), 0, min(coredamage, stat_damagedone)); return total_damage_to_creatures; } -float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float forceintensity, float deathtype, entity directhitentity) +float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float forceintensity, int deathtype, entity directhitentity) { - return RadiusDamageForSource (inflictor, (inflictor.origin + (inflictor.mins + inflictor.maxs) * 0.5), inflictor.velocity, attacker, coredamage, edgedamage, rad, cantbe, mustbe, FALSE, forceintensity, deathtype, directhitentity); + return RadiusDamageForSource (inflictor, (inflictor.origin + (inflictor.mins + inflictor.maxs) * 0.5), inflictor.velocity, attacker, coredamage, edgedamage, rad, cantbe, mustbe, false, forceintensity, deathtype, directhitentity); } -.float fire_damagepersec; -.float fire_endtime; -.float fire_deathtype; -.entity fire_owner; -.float fire_hitsound; -.entity fire_burner; - -void fireburner_think(); - float Fire_IsBurning(entity e) { return (time < e.fire_endtime); @@ -1254,11 +1227,11 @@ float Fire_AddDamage(entity e, entity o, float d, float t, float dt) if(e.fire_owner != o) { e.fire_owner = o; - e.fire_hitsound = FALSE; + e.fire_hitsound = false; } } if(accuracy_isgooddamage(o, e)) - accuracy_add(o, DEATH_WEAPONOFWEAPONDEATH(dt), 0, max(0, totaldamage - mindamage)); + accuracy_add(o, DEATH_WEAPONOF(dt), 0, max(0, totaldamage - mindamage)); return max(0, totaldamage - mindamage); // can never be negative, but to make sure } else @@ -1270,9 +1243,9 @@ float Fire_AddDamage(entity e, entity o, float d, float t, float dt) e.fire_endtime = time + t; e.fire_deathtype = dt; e.fire_owner = o; - e.fire_hitsound = FALSE; + e.fire_hitsound = false; if(accuracy_isgooddamage(o, e)) - accuracy_add(o, DEATH_WEAPONOFWEAPONDEATH(dt), 0, d); + accuracy_add(o, DEATH_WEAPONOF(dt), 0, d); return d; } } @@ -1309,7 +1282,7 @@ void Fire_ApplyDamage(entity e) e.fire_owner.damage_dealt = hi; e.fire_owner.typehitsound = ty; } - e.fire_hitsound = TRUE; + e.fire_hitsound = true; if (!IS_INDEPENDENT_PLAYER(e)) if(!e.frozen)