From: Rudolf Polzer Date: Sun, 23 May 2010 20:25:51 +0000 (+0200) Subject: new funny cvar g_movementspeed, works by overriding the otherwise engine-set stats... X-Git-Tag: xonotic-v0.1.0preview~576 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=e4c4af7662d3ec8b3302fe7b5d0fd73fb094d64c;p=xonotic%2Fxonotic-data.pk3dir.git new funny cvar g_movementspeed, works by overriding the otherwise engine-set stats for airaccel* --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 1f7f53522..6a01ba59a 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -1846,3 +1846,5 @@ set g_weaponreplace_tuba "" set g_weaponreplace_fireball "" set g_weaponreplace_seeker "" set sv_q3acompat_machineshotgunswap 0 "shorthand for swapping uzi and shotgun (for Q3A map compatibility in mapinfo files)" + +set g_movement_highspeed 1 "movement speed modification factor (only changes movement when above maxspeed)" diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index cdf92f070..d747b70db 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -279,6 +279,11 @@ const float STAT_NB_METERSTART = 45; const float STAT_SHOTORG = 46; // compressShotOrigin const float STAT_LEADLIMIT = 47; const float STAT_BULLETS_LOADED = 48; + +// see DP source, quakedef.h +const float STAT_MOVEVARS_AIRSTRAFEACCEL_QW = 223; +const float STAT_MOVEVARS_AIRACCEL_QW = 254; + const float CTF_STATE_ATTACK = 1; const float CTF_STATE_DEFEND = 2; const float CTF_STATE_COMMANDER = 3; diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index 8d7bac21d..f42e14209 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -605,6 +605,7 @@ string GetMapname(void); float speedaward_lastupdate; float speedaward_lastsent; .float jumppadusetime; +var float autocvar_g_movement_highspeed = 1; void SV_PlayerPhysics() { local vector wishvel, wishdir, v; @@ -614,6 +615,13 @@ void SV_PlayerPhysics() float not_allowed_to_move; string c; + // fix physics stats for g_movement_highspeed + self.stat_sv_airaccel_qw = copysign(bound(0, 1-(1-fabs(sv_airaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airaccel_qw); + if(sv_airstrafeaccel_qw) + self.stat_sv_airstrafeaccel_qw = copysign(bound(0.001, 1-(1-fabs(sv_airstrafeaccel_qw))*autocvar_g_movement_highspeed, 1), sv_airstrafeaccel_qw); + else + self.stat_sv_airstrafeaccel_qw = 0; + if(self.PlayerPhysplug) if(self.PlayerPhysplug()) return; @@ -1160,7 +1168,7 @@ void SV_PlayerPhysics() float airaccelqw; float strafity; - airaccelqw = sv_airaccel_qw; + airaccelqw = self.stat_sv_airaccel_qw; accelerating = (self.velocity * wishdir > 0); wishspeed2 = wishspeed; @@ -1181,8 +1189,8 @@ void SV_PlayerPhysics() 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 = copysign(1-GeomLerp(1-fabs(sv_airaccel_qw), strafity, 1-fabs(sv_airstrafeaccel_qw)), ((strafity > 0.5) ? sv_airstrafeaccel_qw : sv_airaccel_qw)); + if(self.stat_sv_airstrafeaccel_qw) + airaccelqw = copysign(1-GeomLerp(1-fabs(self.stat_sv_airaccel_qw), strafity, 1-fabs(self.stat_sv_airstrafeaccel_qw)), ((strafity > 0.5) ? self.stat_sv_airstrafeaccel_qw : self.stat_sv_airaccel_qw)); // !CPM if(sv_warsowbunny_turnaccel && accelerating && self.movement_y == 0 && self.movement_x != 0) diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 41ca098b7..fec2a0976 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -534,6 +534,9 @@ string cvar_changes; float game_starttime; //point in time when the countdown is over .float stat_game_starttime; +.float stat_sv_airaccel_qw; +.float stat_sv_airstrafeaccel_qw; + void W_Porto_Remove (entity p); .float projectiledeathtype; diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index c815b0815..e969146ca 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -635,6 +635,10 @@ void spawnfunc_worldspawn (void) addstat(STAT_LEADLIMIT, AS_FLOAT, stat_leadlimit); addstat(STAT_BULLETS_LOADED, AS_INT, campingrifle_bulletcounter); + // g_movementspeed hack + addstat(STAT_MOVEVARS_AIRACCEL_QW, AS_FLOAT, stat_sv_airaccel_qw); + addstat(STAT_MOVEVARS_AIRSTRAFEACCEL_QW, AS_FLOAT, stat_sv_airstrafeaccel_qw); + next_pingtime = time + 5; InitializeEntity(self, cvar_changes_init, INITPRIO_CVARS);