From f4d258811e770e665ff0e680a8fe7032a590328b Mon Sep 17 00:00:00 2001 From: lordhavoc Date: Tue, 13 Jun 2006 21:23:06 +0000 Subject: [PATCH] changed radius damage code to check for occlusion, and only do damage if one of several random traces (or the first trace to the nearest point) succeeds in hitting the target git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1627 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/g_damage.qc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/data/qcsrc/server/g_damage.qc b/data/qcsrc/server/g_damage.qc index f3d9730ad..5d11b8a74 100644 --- a/data/qcsrc/server/g_damage.qc +++ b/data/qcsrc/server/g_damage.qc @@ -534,7 +534,25 @@ void RadiusDamage (entity inflictor, entity attacker, float coredamage, float ed force = normalize((m1 + m2) * 0.5 - blastorigin) * (finaldmg / coredamage) * forceintensity; if (targ == attacker) finaldmg = finaldmg * cvar("g_balance_selfdamagepercent"); // Partial damage if the attacker hits himself - Damage (targ, inflictor, attacker, finaldmg, deathtype, nearest, force); + // test line of sight to multiple positions on box, + // and do damage if any of them hit + local float c; + c = ceil(finaldmg / 10); + if (c > 20) + c = 20; + while (c > 0) + { + c = c - 1; + traceline(blastorigin, nearest, TRUE, inflictor); + if (trace_fraction == 1 || trace_ent == targ) + { + Damage (targ, inflictor, attacker, finaldmg, deathtype, nearest, force); + break; + } + nearest_x = m1_x + random() * targ.size_x; + nearest_y = m1_y + random() * targ.size_y; + nearest_z = m1_z + random() * targ.size_z; + } } } } -- 2.39.2