]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/physics.qc
Move swamps across (as with all physics related stuff, currently does not work)
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / physics.qc
index 233e3c33d30e9fe70c86f7216ca767b8e83fcf9e..26e14e4de525fc80cddfc8b06990682e2e8b9b31 100644 (file)
@@ -26,6 +26,9 @@ float AdjustAirAccelQW(float accelqw, float factor);
 .float stat_sv_maxspeed;
 .float stat_movement_highspeed;
 
+.float stat_sv_friction_on_land;
+.float stat_sv_friction_slick;
+
 .float stat_doublejump;
 
 .float stat_jumpspeedcap_min;
@@ -66,6 +69,10 @@ void Physics_AddStats()
        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
+       addstat(STAT_MOVEVARS_FRICTION_ONLAND, AS_FLOAT, stat_sv_friction_on_land);
+       addstat(STAT_MOVEVARS_FRICTION_SLICK, AS_FLOAT, stat_sv_friction_slick);
 }
 
 void Physics_UpdateStats(float maxspd_mod)
@@ -91,6 +98,9 @@ void Physics_UpdateStats(float maxspd_mod)
        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;
+       self.stat_sv_friction_slick = PHYS_FRICTION_SLICK;
 }
 #endif
 
@@ -1263,18 +1273,6 @@ void PM_ladder(float maxspd_mod)
                PM_Accelerate(wishdir, wishspeed, wishspeed, PHYS_ACCELERATE*maxspd_mod, 1, 0, 0, 0);
 }
 
-void PM_check_jumppad()
-{
-#ifdef CSQC
-       entity oldself = self;
-
-       for(self = world; (self = find(self, classname, "jumppad")); )
-               trigger_push_draw();
-
-       self = oldself;
-#endif
-}
-
 void PM_jetpack(float maxspd_mod)
 {
        //makevectors(PHYS_INPUT_ANGLES(self).y * '0 1 0');
@@ -1596,9 +1594,17 @@ void PM_walk(float buttons_prev, float maxspd_mod)
        float f = vlen(vec2(self.velocity));
        if (f > 0)
        {
+               float realfriction;
+               trace_dphitq3surfaceflags = 0;
+               tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 1', MOVE_NOMONSTERS, self);
                // TODO: apply edge friction
                // apply ground friction
-               f = 1 - PHYS_INPUT_TIMELENGTH * PHYS_FRICTION * ((f < PHYS_STOPSPEED) ? (PHYS_STOPSPEED / f) : 1);
+               if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK)
+                       realfriction = PHYS_FRICTION_SLICK;
+               else
+                       realfriction = PHYS_FRICTION;
+
+               f = 1 - PHYS_INPUT_TIMELENGTH * realfriction * ((f < PHYS_STOPSPEED) ? (PHYS_STOPSPEED / f) : 1);
                f = max(0, f);
                self.velocity *= f;
                /*
@@ -1795,9 +1801,8 @@ void PM_Main()
                        not_allowed_to_move = 1;
 #endif
 #ifdef SVQC
-               if (!autocvar_sv_ready_restart_after_countdown)
-                       if (time < game_starttime)
-                               not_allowed_to_move = 1;
+               if (time < game_starttime)
+                       not_allowed_to_move = 1;
 #endif
 
                if (not_allowed_to_move)
@@ -1834,11 +1839,8 @@ void PM_Main()
 
        maxspeed_mod = 1;
 
-#ifdef SVQC
-       if (self.in_swamp) {
+       if (self.in_swamp)
                maxspeed_mod *= self.swamp_slowdown; //cvar("g_balance_swamp_moverate");
-       }
-#endif
 
        // conveyors: first fix velocity
        if (self.conveyor.state)
@@ -1930,8 +1932,6 @@ void PM_Main()
 #endif
                CheckPlayerJump();
 
-       PM_check_jumppad();
-
        if (self.flags & /* FL_WATERJUMP */ 2048)
        {
                self.velocity_x = self.movedir_x;