]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Show no damage effect if damage is null (frozen player case)
authorterencehill <piuntn@gmail.com>
Tue, 19 Feb 2019 00:06:11 +0000 (01:06 +0100)
committerterencehill <piuntn@gmail.com>
Tue, 19 Feb 2019 00:06:11 +0000 (01:06 +0100)
qcsrc/common/effects/qc/gibs.qc
qcsrc/server/player.qc

index 7be63e2e55c5e1056a544f23ae9bc0331ec8138a..35f0fe52256b8cbca67f35bd846ea1caaf2d9957 100644 (file)
@@ -16,7 +16,7 @@ bool Violence_GibSplash_SendEntity(entity this, entity to, int sf)
        WriteShort(channel, floor(this.origin.x / 4)); // not using a coord here, as gibs don't need this accuracy
        WriteShort(channel, floor(this.origin.y / 4)); // not using a coord here, as gibs don't need this accuracy
        WriteShort(channel, floor(this.origin.z / 4)); // not using a coord here, as gibs don't need this accuracy
-       WriteShort(channel, this.oldorigin.x); // acrually compressed velocity
+       WriteShort(channel, this.oldorigin.x); // actually compressed velocity
        return true;
 }
 
index ed1d938a294128758632d7e5be46caf7c5519fb5..f52cb75bb007c1ba62bbeb8b689d40c5b39b9a2c 100644 (file)
@@ -310,62 +310,63 @@ void calculate_player_respawn_time(entity this)
 
 void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force)
 {
-       float take, save, dh, da;
        vector v;
-       float excess;
+       float dh = max(GetResource(this, RES_HEALTH), 0);
+       float da = max(GetResource(this, RES_ARMOR), 0);
+       float take = 0, save = 0;
 
-       dh = max(GetResource(this, RES_HEALTH), 0);
-       da = max(GetResource(this, RES_ARMOR), 0);
-
-       if(!DEATH_ISSPECIAL(deathtype))
+       if (damage)
        {
-               damage *= Handicap_GetTotalHandicap(this);
-               if (this != attacker && IS_PLAYER(attacker))
+               if(!DEATH_ISSPECIAL(deathtype))
                {
-                       damage /= Handicap_GetTotalHandicap(attacker);
+                       damage *= Handicap_GetTotalHandicap(this);
+                       if (this != attacker && IS_PLAYER(attacker))
+                       {
+                               damage /= Handicap_GetTotalHandicap(attacker);
+                       }
                }
-       }
 
-       if (time < this.spawnshieldtime && autocvar_g_spawnshield_blockdamage < 1)
-               damage *= 1 - max(0, autocvar_g_spawnshield_blockdamage);
+               if (time < this.spawnshieldtime && autocvar_g_spawnshield_blockdamage < 1)
+                       damage *= 1 - max(0, autocvar_g_spawnshield_blockdamage);
 
-       if(DEATH_ISWEAPON(deathtype, WEP_TUBA))
-       {
-               // tuba causes blood to come out of the ears
-               vector ear1, ear2;
-               vector d;
-               float f;
-               ear1 = this.origin;
-               ear1_z += 0.125 * this.view_ofs.z + 0.875 * this.maxs.z; // 7/8
-               ear2 = ear1;
-               makevectors(this.angles);
-               ear1 += v_right * -10;
-               ear2 += v_right * +10;
-               d = inflictor.origin - this.origin;
-               if (d)
-                       f = (d * v_right) / vlen(d); // this is cos of angle of d and v_right!
-               else
-                       f = 0;  // Assum ecenter.
-               force = v_right * vlen(force);
-               Violence_GibSplash_At(ear1, force * -1, 2, bound(0, damage, 25) / 2 * (0.5 - 0.5 * f), this, attacker);
-               Violence_GibSplash_At(ear2, force,      2, bound(0, damage, 25) / 2 * (0.5 + 0.5 * f), this, attacker);
-               if(f > 0)
+               if(DEATH_ISWEAPON(deathtype, WEP_TUBA))
                {
-                       hitloc = ear1;
-                       force = force * -1;
+                       // tuba causes blood to come out of the ears
+                       vector ear1, ear2;
+                       vector d;
+                       float f;
+                       ear1 = this.origin;
+                       ear1_z += 0.125 * this.view_ofs.z + 0.875 * this.maxs.z; // 7/8
+                       ear2 = ear1;
+                       makevectors(this.angles);
+                       ear1 += v_right * -10;
+                       ear2 += v_right * +10;
+                       d = inflictor.origin - this.origin;
+                       if (d)
+                               f = (d * v_right) / vlen(d); // this is cos of angle of d and v_right!
+                       else
+                               f = 0;  // Assum ecenter.
+                       force = v_right * vlen(force);
+                       Violence_GibSplash_At(ear1, force * -1, 2, bound(0, damage, 25) / 2 * (0.5 - 0.5 * f), this, attacker);
+                       Violence_GibSplash_At(ear2, force,      2, bound(0, damage, 25) / 2 * (0.5 + 0.5 * f), this, attacker);
+                       if(f > 0)
+                       {
+                               hitloc = ear1;
+                               force = force * -1;
+                       }
+                       else
+                       {
+                               hitloc = ear2;
+                               // force is already good
+                       }
                }
                else
-               {
-                       hitloc = ear2;
-                       // force is already good
-               }
-       }
-       else
-               Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, this, attacker);
+                       Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, this, attacker);
 
-       v = healtharmor_applydamage(GetResource(this, RES_ARMOR), autocvar_g_balance_armor_blockpercent, deathtype, damage);
-       take = v.x;
-       save = v.y;
+               v = healtharmor_applydamage(GetResource(this, RES_ARMOR), autocvar_g_balance_armor_blockpercent, deathtype, damage);
+               take = v.x;
+               save = v.y;
+       }
 
        if(attacker == this)
        {
@@ -394,7 +395,7 @@ void PlayerDamage(entity this, entity inflictor, entity attacker, float damage,
        MUTATOR_CALLHOOK(PlayerDamage_SplitHealthArmor, inflictor, attacker, this, force, take, save, deathtype, damage);
        take = bound(0, M_ARGV(4, float), GetResource(this, RES_HEALTH));
        save = bound(0, M_ARGV(5, float), GetResource(this, RES_ARMOR));
-       excess = max(0, damage - take - save);
+       float excess = max(0, damage - take - save);
 
        if(sound_allowed(MSG_BROADCAST, attacker))
        {