]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/physics.qc
Fix air acceleration the same way
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / physics.qc
index 1ac5c7fea65bd0db2690132757d9eeec4f55c3ae..b4468e0bf4f5bec2c72329cceab5de7b0e5b3685 100644 (file)
@@ -65,8 +65,8 @@ void Physics_AddStats()
        #define PHYS_INPUT_MOVEVALUES(s)                        input_movevalues
 
        #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE  moveflags & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE
-       #define GAMEPLAYFIX_NOGRAVITYONGROUND                   moveflags & MOVEFLAG_NOGRAVITYONGROUND
-       #define GAMEPLAYFIX_Q2AIRACCELERATE                             moveflags & MOVEFLAG_Q2AIRACCELERATE
+       #define GAMEPLAYFIX_NOGRAVITYONGROUND                   cvar("sv_gameplayfix_nogravityonground")
+       #define GAMEPLAYFIX_Q2AIRACCELERATE                             cvar("sv_gameplayfix_q2airaccelerate")
 
        #define IS_DUCKED(s)                                            (s.pmove_flags & PMF_DUCKED)
        #define SET_DUCKED(s)                                           s.pmove_flags |= PMF_DUCKED
@@ -81,7 +81,7 @@ void Physics_AddStats()
        #define UNSET_ONGROUND(s)                                       s.pmove_flags &= ~PMF_ONGROUND
 
        #define ITEMS(s)                                                        getstati(STAT_ITEMS, 0, 24)
-       #define PHYS_AMMO_FUEL(s)                                       getstatf(STAT_FUEL)
+       #define PHYS_AMMO_FUEL(s)                                       getstati(STAT_FUEL)
        #define PHYS_FROZEN(s)                                          getstati(STAT_FROZEN)
 
        #define PHYS_ACCELERATE                                         getstatf(STAT_MOVEVARS_ACCELERATE)
@@ -335,6 +335,7 @@ void PM_ClientMovement_UpdateStatus()
 
 void PM_ClientMovement_Move()
 {
+#ifdef CSQC
        float t = PHYS_INPUT_TIMELENGTH;
        vector primalvelocity = self.velocity;
        PM_ClientMovement_UpdateStatus();
@@ -403,6 +404,7 @@ void PM_ClientMovement_Move()
        }
        if (pmove_waterjumptime > 0)
                self.velocity = primalvelocity;
+#endif
 }
 
 void CPM_PM_Aircontrol(vector wishdir, float wishspeed)
@@ -1330,8 +1332,8 @@ void PM_jetpack(float maxspd_mod)
 {
        //makevectors(PHYS_INPUT_ANGLES(self).y * '0 1 0');
        makevectors(PHYS_INPUT_ANGLES(self));
-       vector wishvel = v_forward * PHYS_INPUT_MOVEVALUES(self).x
-                                       + v_right * PHYS_INPUT_MOVEVALUES(self).y;
+       vector wishvel = v_forward * PHYS_INPUT_MOVEVALUES(self)_x
+                                       + v_right * PHYS_INPUT_MOVEVALUES(self)_y;
        // add remaining speed as Z component
        float maxairspd = PHYS_MAXAIRSPEED * max(1, maxspd_mod);
        // fix speedhacks :P
@@ -1428,6 +1430,18 @@ void PM_jetpack(float maxspd_mod)
                self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_fuel_regen);
 #endif
        }
+
+#ifdef CSQC
+       float g = PHYS_GRAVITY * PHYS_ENTGRAVITY(self) * PHYS_INPUT_TIMELENGTH;
+       if (GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE)
+               self.velocity_z -= g * 0.5;
+       else
+               self.velocity_z -= g;
+       PM_ClientMovement_Move();
+       if (!IS_ONGROUND(self) || !(GAMEPLAYFIX_NOGRAVITYONGROUND))
+               if (GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE)
+                       self.velocity_z -= g * 0.5;
+#endif
 }
 
 void PM_walk(float buttons_prev, float maxspd_mod)
@@ -1820,10 +1834,12 @@ void PM_Main()
        else if (self.waterlevel >= WATERLEVEL_SWIMMING)
                PM_swim(maxspeed_mod);
 
+#ifdef SVQC
        else if (time < self.ladder_time)
                PM_ladder(maxspeed_mod);
+#endif
 
-       else if ((ITEMS(self) & IT_JETPACK) && PHYS_BUTTON_HOOK(self) && (!PHYS_JETPACK_FUEL || PHYS_AMMO_FUEL(self) >= 0.01 || (ITEMS(self) & IT_UNLIMITED_WEAPON_AMMO)) && !PHYS_FROZEN(self))
+       else if ((ITEMS(self) & IT_JETPACK) && PHYS_BUTTON_HOOK(self) && (!PHYS_JETPACK_FUEL || PHYS_AMMO_FUEL(self) > 0 || (ITEMS(self) & IT_UNLIMITED_WEAPON_AMMO)) && !PHYS_FROZEN(self))
                PM_jetpack(maxspeed_mod);
 
        else