]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Go through all bones on the player model, and select the one closest to the damage...
authorMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Wed, 4 Jan 2012 15:26:37 +0000 (17:26 +0200)
committerMircea Kitsune <sonichedgehog_hyperblast00@yahoo.com>
Wed, 4 Jan 2012 15:26:37 +0000 (17:26 +0200)
qcsrc/client/damage.qc

index eaa2fd4f9534771923ffe5e8289b1a34a274861f..26df4837992b7cba8750b648406eec0265c2d0f0 100644 (file)
@@ -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);