]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/cl_physics.qc
only add a "base charge" up to 50%
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / cl_physics.qc
index c9531bbc630d45f2cca4bfc2aeb97e5b248e2072..1d2117defffb0388fe023f9bf4ec7db3fd1ea6c0 100644 (file)
@@ -1326,14 +1326,17 @@ void SV_PlayerPhysics()
                }
        }
 
-       float f;
        float xyspeed;
-       f = cvar("g_balance_nex_velocitydependent_falloff_factor");
        xyspeed = vlen('1 0 0' * self.velocity_x + '0 1 0' * self.velocity_y);
-       if(xyspeed > self.nexspeed)
-               self.nexspeed = min(xyspeed, cvar("g_balance_nex_velocitydependent_maxspeed"));
-       else
-               self.nexspeed = (1 - f) * self.nexspeed;
+       if(self.weapon == WEP_NEX && cvar("g_balance_nex_charge") && cvar("g_balance_nex_charge_velocity_rate") && xyspeed > cvar("g_balance_nex_charge_minspeed"))
+       {
+               // add a maximum of charge_velocity_rate when going fast (f = 1), gradually increasing from minspeed (f = 0) to maxspeed
+               xyspeed = min(xyspeed, cvar("g_balance_nex_charge_maxspeed"));
+               float f;
+               f = (xyspeed - cvar("g_balance_nex_charge_minspeed")) / (cvar("g_balance_nex_charge_maxspeed") - cvar("g_balance_nex_charge_minspeed"));
+               // add the extra charge
+               self.nex_charge = min(1, self.nex_charge + cvar("g_balance_nex_charge_velocity_rate") * f * frametime);
+       }
 :end
        if(self.flags & FL_ONGROUND)
                self.lastground = time;