diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index 5abbb9ad0..bdbcd4dd1 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -2362,6 +2362,7 @@ void CL_CheckServerInfo(void) movevars.stepdown = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_stepdown")) != 0); movevars.walljump = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_walljump"))); movevars.ktjump = Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_ktjump")); + movevars.autobunny = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_autobunny")) != 0); s = InfoBuf_ValueForKey(&cl.serverinfo, "pm_stepheight"); movevars.stepheight = *s?Q_atof(s):PM_DEFAULTSTEPHEIGHT; s = InfoBuf_ValueForKey(&cl.serverinfo, "pm_watersinkspeed"); diff --git a/engine/client/pr_csqc.c b/engine/client/pr_csqc.c index 2d8e77267..b2d1da442 100644 --- a/engine/client/pr_csqc.c +++ b/engine/client/pr_csqc.c @@ -8097,6 +8097,7 @@ qboolean CSQC_Init (qboolean anycsqc, const char *csprogsname, unsigned int chec movevars.stepdown = true; movevars.walljump = false;//(pm_walljump.value); movevars.slidyslopes = false;//(pm_slidyslopes.value!=0); + movevars.autobunny = false; //pm_autobunny.value!=0 movevars.watersinkspeed = 60;//*pm_watersinkspeed.string?pm_watersinkspeed.value:60; movevars.flyfriction = 4;//*pm_flyfriction.string?pm_flyfriction.value:4; movevars.edgefriction = 2;//*pm_edgefriction.string?pm_edgefriction.value:2; diff --git a/engine/common/pmove.c b/engine/common/pmove.c index 73b67ac88..9b5a110d6 100644 --- a/engine/common/pmove.c +++ b/engine/common/pmove.c @@ -1448,6 +1448,9 @@ void PM_PlayerMove (float gamespeed) // set onground, watertype, and waterlevel PM_CategorizePosition (); + if (movevars.autobunny && !pmove.onground) + pmove.jump_held = false; + if (pmove.waterlevel == 2 && pmove.pm_type != PM_FLY) PM_CheckWaterJump (); diff --git a/engine/common/pmove.h b/engine/common/pmove.h index f6a219a0a..95eb729af 100644 --- a/engine/common/pmove.h +++ b/engine/common/pmove.h @@ -120,6 +120,7 @@ typedef struct { qboolean pground; qboolean stepdown; qboolean slidyslopes; + qboolean autobunny; int stepheight; qbyte coordtype; //FIXME: EZPEXT1_FLOATENTCOORDS should mean 4, but the result does not match ezquake/mvdsv which would result in inconsistencies. so player coords are rounded inconsistently. diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index bfc81e518..3783e41a8 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -5400,6 +5400,7 @@ void SV_InitLocal (void) extern cvar_t pm_stepdown; extern cvar_t pm_walljump; extern cvar_t pm_slidyslopes; + extern cvar_t pm_autobunny; extern cvar_t pm_watersinkspeed; extern cvar_t pm_flyfriction; extern cvar_t pm_edgefriction; @@ -5456,6 +5457,7 @@ void SV_InitLocal (void) Cvar_Register (&pm_ktjump, cvargroup_serverphysics); Cvar_Register (&pm_slidefix, cvargroup_serverphysics); Cvar_Register (&pm_slidyslopes, cvargroup_serverphysics); + Cvar_Register (&pm_autobunny, cvargroup_serverphysics); Cvar_Register (&pm_airstep, cvargroup_serverphysics); Cvar_Register (&pm_pground, cvargroup_serverphysics); Cvar_Register (&pm_stepdown, cvargroup_serverphysics); diff --git a/engine/server/sv_phys.c b/engine/server/sv_phys.c index 993ffac77..3b4c8b0a9 100644 --- a/engine/server/sv_phys.c +++ b/engine/server/sv_phys.c @@ -74,6 +74,7 @@ cvar_t pm_watersinkspeed = CVARFD("pm_watersinkspeed", "", CVAR_SERVERINFO, "Th cvar_t pm_flyfriction = CVARFD("pm_flyfriction", "", CVAR_SERVERINFO, "Amount of friction that applies in fly or 6dof mode. Empty means 4."); cvar_t pm_slidefix = CVARFD("pm_slidefix", "", CVAR_SERVERINFO, "Fixes an issue when walking down slopes (ie: so they act more like slopes and not a series of steps)"); cvar_t pm_slidyslopes = CVARFD("pm_slidyslopes", "", CVAR_SERVERINFO, "Replicates NQ behaviour, where players will slowly slide down ramps"); +cvar_t pm_autobunny = CVARFD("pm_autobunny", "", CVAR_SERVERINFO, "Players will continue jumping without needing to release the jump button."); cvar_t pm_airstep = CVARAFD("pm_airstep", "", /*dp*/"sv_jumpstep", CVAR_SERVERINFO, "Allows players to step up while jumping. This makes stairs more graceful but also increases potential jump heights."); cvar_t pm_pground = CVARFD("pm_pground", "", CVAR_SERVERINFO, "Use persisten onground state instead of recalculating every frame."CON_WARNING"Do NOT use with nq mods, as most nq mods will interfere with onground state, resulting in glitches."); cvar_t pm_stepdown = CVARFD("pm_stepdown", "", CVAR_SERVERINFO, "Causes physics to stick to the ground, instead of constantly losing traction whiloe going down steps."); diff --git a/engine/server/sv_user.c b/engine/server/sv_user.c index b472a807f..04cde8f5b 100644 --- a/engine/server/sv_user.c +++ b/engine/server/sv_user.c @@ -112,6 +112,7 @@ extern cvar_t pm_bunnyspeedcap; extern cvar_t pm_ktjump; extern cvar_t pm_slidefix; extern cvar_t pm_slidyslopes; +extern cvar_t pm_autobunny; extern cvar_t pm_airstep; extern cvar_t pm_pground; extern cvar_t pm_stepdown; @@ -7189,6 +7190,7 @@ void SV_RunCmd (usercmd_t *ucmd, qboolean recurse) movevars.stepdown = (pm_stepdown.value != 0); movevars.walljump = (pm_walljump.value); movevars.slidyslopes = (pm_slidyslopes.value!=0); + movevars.autobunny = (pm_autobunny.value!=0); movevars.watersinkspeed = *pm_watersinkspeed.string?pm_watersinkspeed.value:60; movevars.flyfriction = *pm_flyfriction.string?pm_flyfriction.value:4; movevars.edgefriction = *pm_edgefriction.string?pm_edgefriction.value:2; @@ -7426,6 +7428,7 @@ void SV_RunCmd (usercmd_t *ucmd, qboolean recurse) movevars.stepdown = (pm_stepdown.value != 0); movevars.walljump = (pm_walljump.value); movevars.slidyslopes = (pm_slidyslopes.value!=0); + movevars.autobunny = (pm_autobunny.value!=0); movevars.watersinkspeed = *pm_watersinkspeed.string?pm_watersinkspeed.value:60; movevars.flyfriction = *pm_flyfriction.string?pm_flyfriction.value:4; movevars.edgefriction = *pm_edgefriction.string?pm_edgefriction.value:2;