]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/physics.qc
Merge branch 'maint' (early part before Transifex)
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / physics.qc
index 5e5a9d042b16a78cd0b67fdd1a0eb15fab300e16..0cac08bb0c0fab1c7ac93ccdb160863753907c56 100644 (file)
@@ -84,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
@@ -147,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;
@@ -557,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;
 
@@ -602,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;
@@ -1832,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))
@@ -1878,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)