From: Rudolf Polzer Date: Wed, 4 Jan 2012 12:44:30 +0000 (+0100) Subject: Merge branch 'master' of git://nl.git.xonotic.org/xonotic/xonotic-data.pk3dir X-Git-Tag: xonotic-v0.6.0~188^2~30 X-Git-Url: https://git.xonotic.org/?a=commitdiff_plain;h=aa6943d5edcf98b434db249de720c76b1a92ff8d;hp=b2737b5c99b7971099ffd2fefb9c8599c69f430b;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' of git://nl.git.xonotic.org/xonotic/xonotic-data.pk3dir --- diff --git a/qcsrc/client/Defs.qc b/qcsrc/client/Defs.qc index 901380c1b..5282910a2 100644 --- a/qcsrc/client/Defs.qc +++ b/qcsrc/client/Defs.qc @@ -238,6 +238,9 @@ float servertime, serverprevtime, serverdeltatime; float ticrate; .float damageforcescale; +#define MIN_DAMAGEEXTRARADIUS 2 +#define MAX_DAMAGEEXTRARADIUS 16 +.float damageextraradius; .void(float thisdmg, float hittype, vector org, vector thisforce) event_damage; // only for Porto diff --git a/qcsrc/client/damage.qc b/qcsrc/client/damage.qc index 51029396a..86df995cc 100644 --- a/qcsrc/client/damage.qc +++ b/qcsrc/client/damage.qc @@ -30,11 +30,12 @@ void Ent_DamageInfo(float isNew) else forcemul = 1; - for(self = findradius(w_org, rad); self; self = self.chain) + for(self = findradius(w_org, rad + MAX_DAMAGEEXTRARADIUS); self; self = self.chain) { + vector nearest = NearestPointOnBox(self, w_org); if(rad) { - thisdmg = vlen(self.origin - w_org) / rad; + thisdmg = ((vlen (nearest - w_org) - bound(MIN_DAMAGEEXTRARADIUS, self.damageextraradius, MAX_DAMAGEEXTRARADIUS)) / rad); if(thisdmg >= 1) continue; if(dmg) @@ -50,6 +51,9 @@ void Ent_DamageInfo(float isNew) } else { + if(vlen(nearest - w_org) > bound(MIN_DAMAGEEXTRARADIUS, self.damageextraradius, MAX_DAMAGEEXTRARADIUS)) + continue; + thisdmg = dmg; thisforce = forcemul * force; } diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 62504ef62..0824cb463 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -176,6 +176,9 @@ void setanim(entity e, vector anim, float looping, float override, float restart //.float chasecam; .float damageforcescale; +#define MIN_DAMAGEEXTRARADIUS 2 +#define MAX_DAMAGEEXTRARADIUS 16 +.float damageextraradius; //.float gravity; diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index b192845bc..dde853283 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -1001,7 +1001,7 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e stat_damagedone = 0; - targ = WarpZone_FindRadius (blastorigin, rad, FALSE); + targ = WarpZone_FindRadius (blastorigin, rad + MAX_DAMAGEEXTRARADIUS, FALSE); while (targ) { next = targ.chain; @@ -1014,7 +1014,7 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e diff = targ.WarpZone_findradius_dist; // round up a little on the damage to ensure full damage on impacts // and turn the distance into a fraction of the radius - power = 1 - ((vlen (diff) - 2) / rad); + power = 1 - ((vlen (diff) - bound(MIN_DAMAGEEXTRARADIUS, targ.damageextraradius, MAX_DAMAGEEXTRARADIUS)) / rad); //bprint(" "); //bprint(ftos(power)); //if (targ == attacker)