]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/physics.qc
Merge branch 'master' into TimePath/vehicles_cleanup
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / physics.qc
index 60ca3b101a7c7c7c09b6f303786875d8137f340f..6c0bd616bcfee30c402a41cc118f921946dfe62a 100644 (file)
@@ -1,10 +1,12 @@
 #include "physics.qh"
 #include "triggers/trigger/swamp.qh"
 #include "triggers/trigger/jumppads.qh"
+#include "viewloc.qh"
 
 #ifdef SVQC
 
 #include "../server/miscfunctions.qh"
+#include "triggers/trigger/viewloc.qh"
 
 // client side physics
 bool Physics_Valid(string thecvar)
@@ -82,8 +84,6 @@ void Physics_AddStats()
        addstat(STAT_DOUBLEJUMP, AS_INT, stat_doublejump);
 
        // jump speed caps
-       addstat(STAT_MOVEVARS_JUMPSPEEDCAP_MIN, AS_FLOAT, stat_jumpspeedcap_min);
-       addstat(STAT_MOVEVARS_JUMPSPEEDCAP_MIN, AS_FLOAT, stat_jumpspeedcap_min);
        addstat(STAT_MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, AS_INT, stat_jumpspeedcap_disable_onramps);
 
        // hacks
@@ -145,8 +145,6 @@ void Physics_UpdateStats(float maxspd_mod)
        self.stat_jetpack_maxspeed_up = PHYS_JETPACK_MAXSPEED_UP;
        self.stat_jetpack_fuel = PHYS_JETPACK_FUEL;
 
-       self.stat_jumpspeedcap_min = PHYS_JUMPSPEEDCAP_MIN;
-       self.stat_jumpspeedcap_max = PHYS_JUMPSPEEDCAP_MAX;
        self.stat_jumpspeedcap_disable_onramps = PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS;
 
        self.stat_sv_friction_on_land = PHYS_FRICTION_ONLAND;
@@ -555,12 +553,12 @@ bool PlayerJump (void)
        bool doublejump = false;
        float mjumpheight = PHYS_JUMPVELOCITY;
 
-       player_multijump = doublejump;
-       player_jumpheight = mjumpheight;
 #ifdef SVQC
-       if (MUTATOR_CALLHOOK(PlayerJump))
+       if (MUTATOR_CALLHOOK(PlayerJump, doublejump, mjumpheight))
 #elif defined(CSQC)
-       if(PM_multijump_checkjump())
+       player_multijump = doublejump;
+       player_jumpheight = mjumpheight;
+       if (PM_multijump_checkjump())
 #endif
                return true;
 
@@ -600,22 +598,22 @@ bool PlayerJump (void)
        // velocity bounds.  Final velocity is bound between (jumpheight *
        // min + jumpheight) and (jumpheight * max + jumpheight);
 
-       if(PHYS_JUMPSPEEDCAP_MIN)
+       if(PHYS_JUMPSPEEDCAP_MIN != "")
        {
-               float minjumpspeed = mjumpheight * PHYS_JUMPSPEEDCAP_MIN;
+               float minjumpspeed = mjumpheight * stof(PHYS_JUMPSPEEDCAP_MIN);
 
                if (self.velocity_z < minjumpspeed)
                        mjumpheight += minjumpspeed - self.velocity_z;
        }
 
-       if(PHYS_JUMPSPEEDCAP_MAX)
+       if(PHYS_JUMPSPEEDCAP_MAX != "")
        {
                // don't do jump speedcaps on ramps to preserve old xonotic ramjump style
                tracebox(self.origin + '0 0 0.01', self.mins, self.maxs, self.origin - '0 0 0.01', MOVE_NORMAL, self);
 
                if (!(trace_fraction < 1 && trace_plane_normal_z < 0.98 && PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS))
                {
-                       float maxjumpspeed = mjumpheight * PHYS_JUMPSPEEDCAP_MAX;
+                       float maxjumpspeed = mjumpheight * stof(PHYS_JUMPSPEEDCAP_MAX);
 
                        if (self.velocity_z > maxjumpspeed)
                                mjumpheight -= self.velocity_z - maxjumpspeed;
@@ -711,7 +709,7 @@ void CheckPlayerJump()
                float activate = JETPACK_JUMP(self) && air_jump && PHYS_INPUT_BUTTON_JUMP(self) || PHYS_INPUT_BUTTON_JETPACK(self);
                float has_fuel = !PHYS_JETPACK_FUEL || PHYS_AMMO_FUEL(self) || ITEMS_STAT(self) & IT_UNLIMITED_WEAPON_AMMO;
 
-               if (!(ITEMS_STAT(self) & IT_JETPACK)) { }
+               if (!(ITEMS_STAT(self) & ITEM_Jetpack.m_itemid)) { }
                else if (self.jetpack_stopped) { }
                else if (!has_fuel)
                {
@@ -1195,7 +1193,7 @@ void PM_check_vortex(void)
 #ifdef SVQC
        // WEAPONTODO
        float xyspeed = vlen(vec2(self.velocity));
-       if (self.weapon == WEP_VORTEX && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, charge_minspeed))
+       if (self.weapon == WEP_VORTEX.m_id && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, 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, WEP_CVAR(vortex, charge_maxspeed));
@@ -1762,6 +1760,8 @@ void PM_Main()
        self.disableclientprediction = 0;
 #endif
 
+       viewloc_PlayerPhysics();
+
        PM_check_spider();
 
        PM_check_frozen();
@@ -1828,6 +1828,17 @@ void PM_Main()
                stuffcmd(self, strcat("cl_sidespeed ", temps, "\n"));
                stuffcmd(self, strcat("cl_upspeed ", temps, "\n"));
        }
+
+       if(self.stat_jumpspeedcap_min != PHYS_JUMPSPEEDCAP_MIN)
+       {
+               self.stat_jumpspeedcap_min = PHYS_JUMPSPEEDCAP_MIN;
+               stuffcmd(self, strcat("cl_jumpspeedcap_min ", PHYS_JUMPSPEEDCAP_MIN, "\n"));
+       }
+       if(self.stat_jumpspeedcap_max != PHYS_JUMPSPEEDCAP_MAX)
+       {
+               self.stat_jumpspeedcap_min = PHYS_JUMPSPEEDCAP_MAX;
+               stuffcmd(self, strcat("cl_jumpspeedcap_max ", PHYS_JUMPSPEEDCAP_MAX, "\n"));
+       }
 #endif
 
        if(PHYS_DEAD(self))
@@ -1874,7 +1885,7 @@ void PM_Main()
                RaceCarPhysics();
 #endif
 
-       else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || (BUFFS(self) & BUFF_FLIGHT))
+       else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || (BUFFS_STAT(self) & BUFF_FLIGHT.m_itemid))
                PM_fly(maxspeed_mod);
 
        else if (self.waterlevel >= WATERLEVEL_SWIMMING)