]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add slick surface support
authorMario <zacjardine@y7mail.com>
Mon, 5 Jan 2015 11:30:34 +0000 (22:30 +1100)
committerMario <zacjardine@y7mail.com>
Mon, 5 Jan 2015 11:30:34 +0000 (22:30 +1100)
qcsrc/common/physics.qc
qcsrc/common/physics.qh
qcsrc/common/stats.qh
qcsrc/server/autocvars.qh

index 233e3c33d30e9fe70c86f7216ca767b8e83fcf9e..1b96fe03a7a613b03a63db0ced9d1559110f82f4 100644 (file)
@@ -26,6 +26,9 @@ float AdjustAirAccelQW(float accelqw, float factor);
 .float stat_sv_maxspeed;
 .float stat_movement_highspeed;
 
 .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;
 .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);
        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)
 }
 
 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_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
 
 }
 #endif
 
@@ -1596,9 +1606,17 @@ void PM_walk(float buttons_prev, float maxspd_mod)
        float f = vlen(vec2(self.velocity));
        if (f > 0)
        {
        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
                // 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;
                /*
                f = max(0, f);
                self.velocity *= f;
                /*
index 3ddb24486632fb1c5f6dd401440d8c99301a4099..a169ad4ff67de1ce2fb0b3ea6933dcf5a165c3b7 100644 (file)
@@ -77,6 +77,7 @@
        #define PHYS_AIRSTRAFEACCELERATE                        getstatf(STAT_MOVEVARS_AIRSTRAFEACCELERATE)
        #define PHYS_ENTGRAVITY(s)                                      getstatf(STAT_MOVEVARS_ENTGRAVITY)
        #define PHYS_FRICTION                                           getstatf(STAT_MOVEVARS_FRICTION)
        #define PHYS_AIRSTRAFEACCELERATE                        getstatf(STAT_MOVEVARS_AIRSTRAFEACCELERATE)
        #define PHYS_ENTGRAVITY(s)                                      getstatf(STAT_MOVEVARS_ENTGRAVITY)
        #define PHYS_FRICTION                                           getstatf(STAT_MOVEVARS_FRICTION)
+       #define PHYS_FRICTION_SLICK                                     getstatf(STAT_MOVEVARS_FRICTION_SLICK)
        #define PHYS_FRICTION_ONLAND                            getstatf(STAT_MOVEVARS_FRICTION_ONLAND)
        #define PHYS_GRAVITY                                            getstatf(STAT_MOVEVARS_GRAVITY)
        #define PHYS_HIGHSPEED                                          getstatf(STAT_MOVEVARS_HIGHSPEED)
        #define PHYS_FRICTION_ONLAND                            getstatf(STAT_MOVEVARS_FRICTION_ONLAND)
        #define PHYS_GRAVITY                                            getstatf(STAT_MOVEVARS_GRAVITY)
        #define PHYS_HIGHSPEED                                          getstatf(STAT_MOVEVARS_HIGHSPEED)
        #define PHYS_AIRSTRAFEACCELERATE                        autocvar_sv_airstrafeaccelerate
        #define PHYS_ENTGRAVITY(s)                                      s.gravity
        #define PHYS_FRICTION                                           autocvar_sv_friction
        #define PHYS_AIRSTRAFEACCELERATE                        autocvar_sv_airstrafeaccelerate
        #define PHYS_ENTGRAVITY(s)                                      s.gravity
        #define PHYS_FRICTION                                           autocvar_sv_friction
+       #define PHYS_FRICTION_SLICK                                     autocvar_sv_friction_slick
        #define PHYS_FRICTION_ONLAND                            autocvar_sv_friction_on_land
        #define PHYS_GRAVITY                                            autocvar_sv_gravity
        #define PHYS_HIGHSPEED                                          autocvar_g_movement_highspeed
        #define PHYS_FRICTION_ONLAND                            autocvar_sv_friction_on_land
        #define PHYS_GRAVITY                                            autocvar_sv_gravity
        #define PHYS_HIGHSPEED                                          autocvar_g_movement_highspeed
index ef4472d9f17b543414ae037219721671f652b6a8..8898ad2b23d14feb8b552f5d9807620f1a7daecd 100644 (file)
@@ -223,7 +223,7 @@ const float STAT_REVIVE_PROGRESS        = 106;
 // 188 empty?
 // 189 empty?
 // 190 empty?
 // 188 empty?
 // 189 empty?
 // 190 empty?
-// 191 empty?
+const float STAT_MOVEVARS_FRICTION_SLICK                = 191;
 const float STAT_MOVEVARS_FRICTION_ONLAND               = 192;
 const float STAT_MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS  = 193;
 const float STAT_MOVEVARS_JUMPSPEEDCAP_MAX              = 194;
 const float STAT_MOVEVARS_FRICTION_ONLAND               = 192;
 const float STAT_MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS  = 193;
 const float STAT_MOVEVARS_JUMPSPEEDCAP_MAX              = 194;
index 6b46a95124eca7923537eb3c3f321843202633e0..a1ecb2fd13983e6baa6cfdabe3b99471868e0f3a 100644 (file)
@@ -631,6 +631,7 @@ string autocvar_sv_eventlog_files_namesuffix;
 float autocvar_sv_eventlog_files_timestamps;
 float autocvar_sv_friction;
 float autocvar_sv_friction_on_land;
 float autocvar_sv_eventlog_files_timestamps;
 float autocvar_sv_friction;
 float autocvar_sv_friction_on_land;
+var float autocvar_sv_friction_slick = 1;
 float autocvar_sv_gameplayfix_q2airaccelerate;
 float autocvar_sv_gentle;
 #define autocvar_sv_gravity cvar("sv_gravity")
 float autocvar_sv_gameplayfix_q2airaccelerate;
 float autocvar_sv_gentle;
 #define autocvar_sv_gravity cvar("sv_gravity")