]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/g_damage.qc
fix player view offset and headshot bbox
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / g_damage.qc
index 6f8c9490ef907175c088a5c51315dcaef1ce8f38..809df9ecbd892b5d6037f4cb5b07670818a3ba27 100644 (file)
@@ -88,11 +88,11 @@ float IsFlying(entity a)
 
 vector GetHeadshotMins(entity targ)
 {
-       return '0.6 0 0' * targ.mins_x + '0 0.6 0' * targ.mins_y + '0 0 1' * (1.3 * targ.view_ofs_z - 0.3 * targ.maxs_z);
+       return '-0.5 0 0' * PL_HEAD_x + '0 -0.5 0' * PL_HEAD_y + '0 0 1' * (targ.maxs_z - PL_HEAD_z);
 }
 vector GetHeadshotMaxs(entity targ)
 {
-       return '0.6 0 0' * targ.maxs_x + '0 0.6 0' * targ.maxs_y + '0 0 1' * targ.maxs_z;
+       return '0.5 0 0' * PL_HEAD_x + '0 0.5 0' * PL_HEAD_y + '0 0 1' * targ.maxs_z;
 }
 
 void UpdateFrags(entity player, float f)
@@ -993,6 +993,39 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e
                                                finaldmg = finaldmg * a;
                                                a = bound(0, tfloorforce + (1-tfloorforce) * hitratio, 1);
                                                force = force * a;
+
+                                               // laser force adjustments :P
+                                               if(DEATH_WEAPONOF(deathtype) == WEP_LASER)
+                                               {
+                                                       vector vel;
+
+                                                       float force_zscale;
+                                                       float force_velocitybiasramp;
+                                                       float force_velocitybias;
+
+                                                       force_velocitybiasramp = cvar("sv_maxspeed");
+                                                       if(deathtype & HITTYPE_SECONDARY)
+                                                       {
+                                                               force_zscale = cvar("g_balance_laser_secondary_force_zscale");
+                                                               force_velocitybias = cvar("g_balance_laser_secondary_force_velocitybias");
+                                                       }
+                                                       else
+                                                       {
+                                                               force_zscale = cvar("g_balance_laser_primary_force_zscale");
+                                                               force_velocitybias = cvar("g_balance_laser_primary_force_velocitybias");
+                                                       }
+
+                                                       vel = targ.velocity;
+                                                       vel_z = 0;
+                                                       vel = normalize(vel) * bound(0, vlen(vel) / force_velocitybiasramp, 1) * force_velocitybias;
+                                                       force =
+                                                               vlen(force)
+                                                               *
+                                                               normalize(normalize(force) + vel);
+
+                                                       force_z *= force_zscale;
+                                               }
+
                                                //if (targ == attacker)
                                                //{
                                                //      print("hits ", ftos(hits), " / ", ftos(total));