]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
sv_aircontrol_penalty
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 20 Jul 2010 07:07:23 +0000 (07:07 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 20 Jul 2010 07:07:23 +0000 (07:07 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10350 d7cf8633-e32d-0410-b094-e92efae38249

cl_input.c
client.h
quakedef.h
server.h
sv_main.c

index 5ff0c67651346ddfa19905e609980dc10709a84b..bc8a459727b7b9789ac033902dcbda3f38a407cd 100644 (file)
@@ -1142,7 +1142,9 @@ void CL_ClientMovement_Physics_CPM_PM_Aircontrol(cl_clientmovement_state_t *s, v
        dot = DotProduct(s->velocity, wishdir);
 
        if(dot > 0) { // we can't change direction while slowing down
-               k *= cl.movevars_aircontrol*pow(dot, cl.movevars_aircontrol_power)*s->cmd.frametime;
+               k *= pow(dot, cl.movevars_aircontrol_power)*s->cmd.frametime;
+               speed = max(0, speed - cl.movevars_aircontrol_penalty * sqrt(max(0, 1 - dot*dot)) * k/32);
+               k *= cl.movevars_aircontrol;
                VectorMAM(speed, s->velocity, k, wishdir, s->velocity);
                VectorNormalize(s->velocity);
        }
@@ -1478,6 +1480,7 @@ void CL_UpdateMoveVars(void)
                cl.movevars_airstrafeaccel_qw = cl.statsf[STAT_MOVEVARS_AIRSTRAFEACCEL_QW];
                cl.movevars_aircontrol = cl.statsf[STAT_MOVEVARS_AIRCONTROL];
                cl.movevars_aircontrol_power = cl.statsf[STAT_MOVEVARS_AIRCONTROL_POWER];
+               cl.movevars_aircontrol_penalty = cl.statsf[STAT_MOVEVARS_AIRCONTROL_PENALTY];
                cl.movevars_warsowbunny_airforwardaccel = cl.statsf[STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL];
                cl.movevars_warsowbunny_accel = cl.statsf[STAT_MOVEVARS_WARSOWBUNNY_ACCEL];
                cl.movevars_warsowbunny_topspeed = cl.statsf[STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED];
@@ -1513,6 +1516,7 @@ void CL_UpdateMoveVars(void)
                cl.movevars_airstrafeaccel_qw = 0;
                cl.movevars_aircontrol = 0;
                cl.movevars_aircontrol_power = 2;
+               cl.movevars_aircontrol_penalty = 0;
                cl.movevars_warsowbunny_airforwardaccel = 0;
                cl.movevars_warsowbunny_accel = 0;
                cl.movevars_warsowbunny_topspeed = 0;
index 0666a096ff75cb3ec4aee3635f38fbe532317b05..da24f2aa396743b272fd972a791df6a4bb54079f 100644 (file)
--- a/client.h
+++ b/client.h
@@ -1200,6 +1200,7 @@ typedef struct client_state_s
        float movevars_airstrafeaccel_qw;
        float movevars_aircontrol;
        float movevars_aircontrol_power;
+       float movevars_aircontrol_penalty;
        float movevars_warsowbunny_airforwardaccel;
        float movevars_warsowbunny_accel;
        float movevars_warsowbunny_topspeed;
index f36f97b583a3eb46103ac9af794f5cfc5ad00a2a..d1e50f93801c41c5cbbf6c289def00514a623839 100644 (file)
@@ -229,6 +229,7 @@ extern char engineversion[128];
 //#define STAT_TIME                    17 ///< FTE
 //#define STAT_VIEW2           20 ///< FTE
 #define STAT_VIEWZOOM          21 ///< DP
+#define STAT_MOVEVARS_AIRCONTROL_PENALTY                                       221 ///< DP
 #define STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW 222 ///< DP
 #define STAT_MOVEVARS_AIRSTRAFEACCEL_QW 223 ///< DP
 #define STAT_MOVEVARS_AIRCONTROL_POWER                                 224 ///< DP
index bce966e4a9596e34d545163c9ea0aee2997703f8..7b1ce0c61570c0428480322f96777b56e5200c11 100644 (file)
--- a/server.h
+++ b/server.h
@@ -393,6 +393,7 @@ extern cvar_t sv_maxairstrafespeed;
 extern cvar_t sv_airstrafeaccel_qw;
 extern cvar_t sv_aircontrol;
 extern cvar_t sv_aircontrol_power;
+extern cvar_t sv_aircontrol_penalty;
 extern cvar_t sv_airspeedlimit_nonqw;
 extern cvar_t sv_allowdownloads;
 extern cvar_t sv_allowdownloads_archive;
index a72d1c40bd47280cfc8e2127278291ef8a7cadbe..d0345bf4b11adc53f15e76d8f251deb4933d6553 100644 (file)
--- a/sv_main.c
+++ b/sv_main.c
@@ -62,6 +62,7 @@ cvar_t sv_maxairstrafespeed = {0, "sv_maxairstrafespeed", "0", "when set, replac
 cvar_t sv_airstrafeaccel_qw = {0, "sv_airstrafeaccel_qw", "0", "when set, replacement for sv_airaccel_qw when just strafing"};
 cvar_t sv_aircontrol = {0, "sv_aircontrol", "0", "CPMA-style air control"};
 cvar_t sv_aircontrol_power = {0, "sv_aircontrol_power", "2", "CPMA-style air control exponent"};
+cvar_t sv_aircontrol_penalty = {0, "sv_aircontrol_penalty", "0", "deceleration while using CPMA-style air control"};
 cvar_t sv_allowdownloads = {0, "sv_allowdownloads", "1", "whether to allow clients to download files from the server (does not affect http downloads)"};
 cvar_t sv_allowdownloads_archive = {0, "sv_allowdownloads_archive", "0", "whether to allow downloads of archives (pak/pk3)"};
 cvar_t sv_allowdownloads_config = {0, "sv_allowdownloads_config", "0", "whether to allow downloads of config files (cfg)"};
@@ -385,6 +386,7 @@ void SV_Init (void)
        Cvar_RegisterVariable (&sv_airspeedlimit_nonqw);
        Cvar_RegisterVariable (&sv_aircontrol);
        Cvar_RegisterVariable (&sv_aircontrol_power);
+       Cvar_RegisterVariable (&sv_aircontrol_penalty);
        Cvar_RegisterVariable (&sv_allowdownloads);
        Cvar_RegisterVariable (&sv_allowdownloads_archive);
        Cvar_RegisterVariable (&sv_allowdownloads_config);
@@ -1973,6 +1975,7 @@ void SV_WriteClientdataToMessage (client_t *client, prvm_edict_t *ent, sizebuf_t
        statsf[STAT_MOVEVARS_AIRSTRAFEACCEL_QW] = sv_airstrafeaccel_qw.value;
        statsf[STAT_MOVEVARS_AIRCONTROL] = sv_aircontrol.value;
        statsf[STAT_MOVEVARS_AIRCONTROL_POWER] = sv_aircontrol_power.value;
+       statsf[STAT_MOVEVARS_AIRCONTROL_PENALTY] = sv_aircontrol_penalty.value;
        statsf[STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL] = sv_warsowbunny_airforwardaccel.value;
        statsf[STAT_MOVEVARS_WARSOWBUNNY_ACCEL] = sv_warsowbunny_accel.value;
        statsf[STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED] = sv_warsowbunny_topspeed.value;