]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
new physics cvar: sv_airstrafeaccel_qw; also try to fix analog input issues with...
authorRudolf Polzer <divverent@alientrap.org>
Sat, 22 May 2010 17:54:09 +0000 (19:54 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sat, 22 May 2010 17:54:09 +0000 (19:54 +0200)
26 files changed:
physics10.cfg
physics11.cfg
physics151.cfg
physics151b.cfg
physics16rc1.cfg
physics20.cfg
physics25.cfg
physics26.cfg
physicsCPMA.cfg
physicsHavoc.cfg
physicsLeeStricklin.cfg
physicsLzd.cfg
physicsNoQWBunny.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsXPM.cfg
qcsrc/server/cl_physics.qc
qcsrc/server/sv_main.qc

index 4d9a118b34054eaefa65f3d51a55d368faa25b65..16331779c3bc3678daf5b37be4d32614c7093314 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 8fba5746a6449e439c5c8cbe79c3530a64067fcd..1a7afbd5c5bf893ec66348f8125c17e844749a53 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 59cf1de9dd3c39e3331c2388c2c3deb8c68f361b..52f2536da2a85b5f9a022371451952e21ecc962f 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 6ab373ffaedf270e66f3132b3612168998c617bd..325e7f6623b4c895920e4943c3a07692813bb88a 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index e6926e4c8ad39c9bdd166d34814879865787a7a7..751e527df3f1ad914903bda55b8408e455c3e8cc 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 39d1e6af5e6ec9ea8cc0304c518a2e02eda92e24..cf3f9110ba9400c4691036baf5fb9b94942a2817 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 048d2bb061b5afbee95706b1800c744e6ff3a9b4..ed1a85446cea1f6d187f9327b9bcb6f35bd6835e 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index b28cb4f7a0975389ac2da2bbc23e73607c29dc3a..34ab3cf940c238601daea8ce0d9796306b035c86 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 4ee66f297bc16ad994597771f9bbbdc959d5142f..7c985bfd69052e64e54a02a194cdc5dce673cf13 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 150
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 1731b12d4b32b73c84e755283802a392ea1ec1f3..cc90edcecfcb9f09451cb0fc775ca847bf8231f7 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index c0a5e21a3ac18a4a2dbd778cd946d6bef07f5e0e..446da86abfb44aee6a55069d149cf3f05cb77467 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw -0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index d408285ea730d9592c40b784e0fc82be7f9aaabf..4a73e899387da62e3cabe570f60a7864d1b92de8 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 7622096a0b65dbde0db2416d51ae24e914568031..5bc8a3147f8fd8f3e2b383d22c41105e07dd50a8 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw -0.975
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 150
 sv_aircontrol_power 2.5
 sv_warsowbunny_turnaccel 0
index 343971ca1df1229a10f21486605c48efb9ef09ef..5839a6137796a36e93f392742bc621388606cc98 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index de8ff7239c7a23e5c1b10d256a082922ddd2f2cb..e6c1ea3eefae6269c791eb058e05ccbe82ef939b 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index ff08d0784f74edc5d310fe38715e06931c3899ff..03e4008dc8d898cce34fec23575a238b7a6e971e 100644 (file)
@@ -17,6 +17,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 716728e9aa64849b0176e9aeb798ef5677b1c202..37643ed9afb79619b380005bcffe38a0c4bb59ce 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 88e7e8f40e2e2dc5f932e21c4b43e39bfdda3181..8b677e6cd71ade18726037b6f631db95e7c83b80 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 7c5da3f5e281fdb2158864c4c22ca697e739424e..58b2a45d5a7e8887c2cd106b11bb5afab9f297fd 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 9a3f1e113c9dfc5cc5bcc380e85d65bc727ddb09..8d2fa30a050cb4ab2dd7f41b91f56fe2c5c01ee0 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 0.93
 sv_airstopaccelerate 0
 sv_airstrafeaccelerate 0
 sv_maxairstrafespeed 0
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index bc53f7a6764faf514828af8766f7f4b48ffd86bf..1c87870a1934e7b8500fb4ce4d0238709d90dc1e 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 9 // activates warsow movement mode
index 6c60724d2228d343f1bab5c886b2c9400296f215..e73204d662f2d3bf09e93baeb9b86b6486a737d6 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 150
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index 324676d2ee587ccb6349ece0fec6a1f2ec21a596..f63f67e11110e3a87a561c5615f5a011e5d6d5d7 100644 (file)
@@ -16,6 +16,7 @@ sv_airaccel_qw 1
 sv_airstopaccelerate 2
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 0
 sv_aircontrol 0
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 6 // activates warsow movement mode
index da81a24ee2a06a3537ee736bceb8dd130a346db4..1737f1aeaf163c44ea0d27b16df6d5c2c9c1aff8 100644 (file)
@@ -20,6 +20,7 @@ sv_airaccel_qw 0.95
 sv_airstopaccelerate 2.5
 sv_airstrafeaccelerate 70
 sv_maxairstrafespeed 30
+sv_airstrafeaccel_qw 1
 sv_aircontrol 150
 sv_aircontrol_power 2
 sv_warsowbunny_turnaccel 0
index ff5fbaa37ee4cf436796d3bc709e8164993c5de6..defb1f93925d014e3da2d9078d989c436b194de5 100644 (file)
@@ -13,6 +13,7 @@ float sv_airaccel_qw;
 float sv_airstopaccelerate;
 float sv_airstrafeaccelerate;
 float sv_maxairstrafespeed;
+float sv_airstrafeaccel_qw;
 float sv_aircontrol;
 float sv_aircontrol_power;
 float sv_warsowbunny_airforwardaccel;
@@ -386,7 +387,7 @@ float IsMoveInDirection(vector mv, float angle) // key mix factor
 {
        if(mv_x == 0 && mv_y == 0)
                return 0; // avoid division by zero
-       angle = RAD2DEG * atan2(mv_y, mv_x);
+       angle -= RAD2DEG * atan2(mv_y, mv_x);
        angle = remainder(angle, 360) / 45;
        if(angle >  1)
                return 0;
@@ -395,6 +396,25 @@ float IsMoveInDirection(vector mv, float angle) // key mix factor
        return 1 - fabs(angle);
 }
 
+float GeomLerp(float a, float lerp, float b)
+{
+       if(a == 0)
+       {
+               if(lerp < 1)
+                       return 0;
+               else
+                       return b;
+       }
+       if(b == 0)
+       {
+               if(lerp > 0)
+                       return 0;
+               else
+                       return a;
+       }
+       return a * pow(fabs(b / a), lerp);
+}
+
 void CPM_PM_Aircontrol(vector wishdir, float wishspeed)
 {
        float zspeed, xyspeed, dot, k;
@@ -1138,6 +1158,7 @@ void SV_PlayerPhysics()
                        float accelerating;
                        float wishspeed2;
                        float airaccelqw;
+                       float strafity;
 
                        airaccelqw = sv_airaccel_qw;
                        accelerating = (self.velocity * wishdir > 0);
@@ -1150,21 +1171,21 @@ void SV_PlayerPhysics()
                        // this doesn't play well with analog input, but can't r
                        // fixed like the AirControl can. So, don't set the maxa
                        // cvars when you want to support analog input.
-                       if(self.movement_x == 0 && self.movement_y != 0)
-                       {
-                               if(sv_maxairstrafespeed)
-                               {
-                                       wishspeed = min(wishspeed, sv_maxairstrafespeed*maxspd_mod);
-                                       if(sv_maxairstrafespeed < sv_maxairspeed)
-                                               airaccelqw = 1;
-                               }
-                               if(sv_airstrafeaccelerate)
-                               {
-                                       airaccel = sv_airstrafeaccelerate*maxspd_mod;
-                                       if(sv_airstrafeaccelerate > sv_airaccelerate)
-                                               airaccelqw = 1;
-                               }
-                       }
+                       // note that for straight forward jumping:
+                       // step = accel * frametime * wishspeed0;
+                       // accel  = bound(0, wishspeed - vel_xy_current, step) * accelqw + step * (1 - accelqw);
+                       // -->
+                       // dv/dt = accel * maxspeed (when slow)
+                       // dv/dt = accel * maxspeed * (1 - accelqw) (when fast)
+                       // log dv/dt = logaccel + logmaxspeed (when slow)
+                       // log dv/dt = logaccel + logmaxspeed + log(1 - accelqw) (when fast)
+                       strafity = IsMoveInDirection(self.movement, -90) + IsMoveInDirection(self.movement, +90); // if one is nonzero, other is always zero
+                       if(sv_maxairstrafespeed)
+                               wishspeed = min(wishspeed, GeomLerp(sv_maxairspeed*maxspd_mod, strafity, sv_maxairstrafespeed*maxspd_mod));
+                       if(sv_airstrafeaccelerate)
+                               airaccel = GeomLerp(airaccel, strafity, sv_airstrafeaccelerate*maxspd_mod);
+                       if(sv_airstrafeaccel_qw)
+                               airaccelqw = sign((strafity > 0.5) ? sv_airstrafeaccel_qw : sv_airaccel_qw) * (1-GeomLerp(1-fabs(airaccelqw), strafity, 1-fabs(sv_airstrafeaccel_qw)));
                        // !CPM
 
                        if(sv_warsowbunny_turnaccel && accelerating && self.movement_y == 0 && self.movement_x != 0)
index 603aad7fd0977eb30b0f84f651db59d1677a1358..0212fce8a43fa7fe3e78951aa77e273f57e01468 100644 (file)
@@ -190,6 +190,7 @@ void StartFrame (void)
        sv_airstopaccelerate = cvar("sv_airstopaccelerate");
        sv_airstrafeaccelerate = cvar("sv_airstrafeaccelerate");
        sv_maxairstrafespeed = cvar("sv_maxairstrafespeed");
+       sv_airstrafeaccel_qw = cvar("sv_airstrafeaccel_qw");
        sv_aircontrol = cvar("sv_aircontrol");
        sv_aircontrol_power = cvar("sv_aircontrol_power");
        sv_warsowbunny_airforwardaccel = cvar("sv_warsowbunny_airforwardaccel");