From: Mircea Kitsune Date: Wed, 4 Jan 2012 15:26:37 +0000 (+0200) Subject: Go through all bones on the player model, and select the one closest to the damage... X-Git-Tag: xonotic-v0.6.0~110^2^2~72 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=15bcc7df71c2dadbc5b8f29112e9196de6a4512f;p=xonotic%2Fxonotic-data.pk3dir.git Go through all bones on the player model, and select the one closest to the damage origin. Damage effects now show on the limb a player was shot on. --- diff --git a/qcsrc/client/damage.qc b/qcsrc/client/damage.qc index eaa2fd4f9..26df48379 100644 --- a/qcsrc/client/damage.qc +++ b/qcsrc/client/damage.qc @@ -1,4 +1,4 @@ -void DamageEffect(float dmg, float type, float specnum1, float entnumber); +void DamageEffect(vector hitorg, float dmg, float type, float specnum1, float entnumber); void Ent_DamageInfo(float isNew) { float dmg, rad, edge, thisdmg, forcemul, species; @@ -73,7 +73,7 @@ void Ent_DamageInfo(float isNew) if(self.event_damage) self.event_damage(thisdmg, w_deathtype, w_org, thisforce); - DamageEffect(thisdmg, w_deathtype, species, self.entnum - 1); + DamageEffect(w_org, thisdmg, w_deathtype, species, self.entnum - 1); } self = oldself; @@ -289,7 +289,7 @@ void DamageEffect_Think() self.dmgtime = time + autocvar_cl_damageeffect_player; } -void DamageEffect(float dmg, float type, float specnum, float entnumber) +void DamageEffect(vector hitorg, float dmg, float type, float specnum, float entnumber) { float life; string specstr, effectnum; @@ -326,10 +326,17 @@ void DamageEffect(float dmg, float type, float specnum, float entnumber) } } - entity e; + float i, closest; + for(i = 1; gettaginfo(self, i); i++) + { + // go through all tags on the player model, choose the one closest to the damage origin + if(!closest || vlen(hitorg - gettaginfo(self, i)) <= vlen(hitorg - gettaginfo(self, closest))) + closest = i; + } + e = spawn(); e.owner = self; - e.bone = 0; + e.bone = closest; e.classname = "damageeffect"; e.team = entnumber; e.dmgpartnum = particleeffectnum(effectnum);