From: divverent Date: Tue, 20 Jul 2010 07:07:23 +0000 (+0000) Subject: sv_aircontrol_penalty X-Git-Tag: xonotic-v0.1.0preview~230^2~128 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=commitdiff_plain;h=12178fece9fbb1932dbb11286d352688eb4803e3 sv_aircontrol_penalty git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10350 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/cl_input.c b/cl_input.c index 5ff0c676..bc8a4597 100644 --- a/cl_input.c +++ b/cl_input.c @@ -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; diff --git a/client.h b/client.h index 0666a096..da24f2aa 100644 --- 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; diff --git a/quakedef.h b/quakedef.h index f36f97b5..d1e50f93 100644 --- a/quakedef.h +++ b/quakedef.h @@ -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 diff --git a/server.h b/server.h index bce966e4..7b1ce0c6 100644 --- 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; diff --git a/sv_main.c b/sv_main.c index a72d1c40..d0345bf4 100644 --- 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;