Add pm_bunnyfriction cvar to better mimic nq player physics with predictable QW physics.
This commit is contained in:
parent
45df6806c2
commit
990066dea1
8 changed files with 49 additions and 14 deletions
|
@ -2570,6 +2570,7 @@ void CL_CheckServerInfo(void)
|
|||
cl.bunnyspeedcap = Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_bunnyspeedcap"));
|
||||
movevars.slidefix = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_slidefix")) != 0);
|
||||
movevars.slidyslopes = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_slidyslopes")) != 0);
|
||||
movevars.bunnyfriction = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_bunnyfriction")) != 0);
|
||||
movevars.airstep = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_airstep")) != 0);
|
||||
movevars.pground = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_pground")) != 0);
|
||||
movevars.stepdown = (Q_atof(InfoBuf_ValueForKey(&cl.serverinfo, "pm_stepdown")) != 0);
|
||||
|
|
|
@ -1078,17 +1078,18 @@ const char *presetexec[] =
|
|||
struct
|
||||
{
|
||||
const char *name;
|
||||
qboolean dorestart;
|
||||
const char *desc;
|
||||
const char *settings;
|
||||
} builtinpresets[] =
|
||||
{
|
||||
{ "hdr",
|
||||
{ "hdr", true,
|
||||
"Don't let colour depth stop you!",
|
||||
|
||||
"set vid_srgb 2\n"
|
||||
"set r_hdr_irisadaptation 1\n"
|
||||
},
|
||||
{ "shib",
|
||||
{ "shib", true,
|
||||
"Performance optimisations for large/detailed maps.",
|
||||
|
||||
"set r_temporalscenecache 1\n" //the main speedup.
|
||||
|
@ -1096,7 +1097,7 @@ struct
|
|||
"set sv_autooffload 1\n" //Needs polish still.
|
||||
"set gl_pbolightmaps 1\n" //FIXME: this needs to be the default eventually.
|
||||
},
|
||||
{ "dm",
|
||||
{ "dm", false,
|
||||
"Various settings to make you more competitive."
|
||||
|
||||
"set cl_yieldcpu 0\n"
|
||||
|
@ -1110,20 +1111,42 @@ struct
|
|||
"set sys_clockprecision 1\n" //windows kinda sucks otherwise
|
||||
#endif
|
||||
},
|
||||
{ "qw",
|
||||
"Enable QuakeWorld-isms, for better gameplay.",
|
||||
{ "qw", false,
|
||||
"Enable QuakeWorld physics, for better gameplay.",
|
||||
|
||||
"set sv_nqplayerphysics 0\n"
|
||||
"set sv_gameplayfix_multiplethinks 1\n"
|
||||
"cvarreset pm_bunnyfriction\n"
|
||||
"cvarreset pm_edgefriction\n"
|
||||
"cvarreset pm_slidefix\n"
|
||||
"cvarreset pm_slidyslopes\n"
|
||||
},
|
||||
{ "nq"
|
||||
"Disable QuakeWorld-isms, for nq mod compat.",
|
||||
{ "hybridphysics", false,
|
||||
"Tweak QuakeWorld player physics to feel like nq physics, while still supporting prediction.",
|
||||
|
||||
"set sv_nqplayerphysics 0\n"
|
||||
"set sv_gameplayfix_multiplethinks 1\n"
|
||||
"set pm_bunnyfriction 1\n" //don't need bunnyspeedcap with this.
|
||||
"set pm_edgefriction 2\n" //forces traceline instead of tracebox, to match nq (applies earlier, making it more aggressive)
|
||||
"set pm_slidefix 1\n" //smoother running down slopes
|
||||
"set pm_slidyslopes 1\n" //*sigh*
|
||||
"set pm_noround 1\n" //lame
|
||||
"set sv_maxtic 0\n" //fixed tick rates.
|
||||
},
|
||||
{ "nq", false,
|
||||
"Disable QuakeWorld physics, for nq mod compat.",
|
||||
|
||||
"set sv_nqplayerphysics 1\n"
|
||||
"set sv_gameplayfix_multiplethinks 0\n"
|
||||
//*also* set these, in case they use nqplayerphysics 2 after, which should give better hints.
|
||||
"set pm_bunnyfriction 1\n" //don't need bunnyspeedcap with this.
|
||||
"set pm_edgefriction 2\n" //forces traceline instead of tracebox, to match nq (applies earlier, making it more aggressive)
|
||||
"set pm_slidefix 1\n" //smoother running down slopes
|
||||
"set pm_slidyslopes 1\n" //*sigh*
|
||||
"set pm_noround 1\n" //lame
|
||||
},
|
||||
|
||||
{ "dp",
|
||||
{ "dp", false,
|
||||
"Reconfigures FTE to mimic DP for compat reasons.",
|
||||
|
||||
"if $server then echo Be sure to restart your server\n"
|
||||
|
@ -1153,7 +1176,7 @@ struct
|
|||
// "sv_listen_dp 1\nsv_listen_nq 0\nsv_listen_qw 0\ncl_loopbackprotocol dpp7\ndpcompat_nopreparse 1\n"
|
||||
},
|
||||
|
||||
{ "tenebrae",
|
||||
{ "tenebrae", true,
|
||||
"Reconfigures FTE to mimic Tenebrae for compat/style reasons.",
|
||||
//for the luls. combine with the tenebrae mod for maximum effect.
|
||||
"fps_preset nq\n"
|
||||
|
@ -1169,7 +1192,7 @@ struct
|
|||
"set r_nolerp 1\n" //well, that matches tenebrae. for the luls, right?
|
||||
},
|
||||
|
||||
{ "timedemo",
|
||||
{ "timedemo", false,
|
||||
"Reconfigure some stuff to get through timedemos really fast. Some people might consider this cheating.",
|
||||
//some extra things to pwn timedemos.
|
||||
"fps_preset fast\n"
|
||||
|
@ -1457,7 +1480,7 @@ void FPS_Preset_f (void)
|
|||
{
|
||||
if (!stricmp(builtinpresets[i].name, arg))
|
||||
{
|
||||
if (doreload)
|
||||
if (doreload && builtinpresets[i].dorestart)
|
||||
Cbuf_InsertText("\nfs_restart\nvid_reload\n", RESTRICT_LOCAL, false);
|
||||
Cbuf_InsertText(builtinpresets[i].settings, RESTRICT_LOCAL, false);
|
||||
return;
|
||||
|
|
|
@ -8324,6 +8324,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.bunnyfriction = false;
|
||||
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;
|
||||
|
|
|
@ -1473,8 +1473,9 @@ void PM_PlayerMove (float gamespeed)
|
|||
pmove.jump_msec = 0;
|
||||
}
|
||||
|
||||
PM_CheckJump ();
|
||||
|
||||
if (!movevars.bunnyfriction)
|
||||
PM_CheckJump (); //qw-style bunny
|
||||
PM_Friction ();
|
||||
|
||||
if (pmove.waterlevel >= 2)
|
||||
|
@ -1486,6 +1487,9 @@ void PM_PlayerMove (float gamespeed)
|
|||
else
|
||||
PM_AirMove ();
|
||||
|
||||
if (movevars.bunnyfriction)
|
||||
PM_CheckJump (); //nq-style bunny. note tick rate differences too.
|
||||
|
||||
/* //round to network precision
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
|
|
|
@ -119,6 +119,7 @@ typedef struct {
|
|||
qboolean stepdown;
|
||||
qboolean slidyslopes;
|
||||
qboolean autobunny;
|
||||
qboolean bunnyfriction; //force at least one frame of friction when bunnying.
|
||||
int stepheight;
|
||||
|
||||
qbyte coordtype; //FIXME: EZPEXT1_FLOATENTCOORDS should mean 4, but the result does not match ezquake/mvdsv's round-towards-origin which would result in inconsistencies. so player coords are rounded inconsistently.
|
||||
|
|
|
@ -5690,6 +5690,7 @@ void SV_InitLocal (void)
|
|||
extern cvar_t sv_aim;
|
||||
|
||||
extern cvar_t pm_bunnyspeedcap;
|
||||
extern cvar_t pm_bunnyfriction;
|
||||
extern cvar_t pm_ktjump;
|
||||
extern cvar_t pm_slidefix;
|
||||
extern cvar_t pm_airstep;
|
||||
|
@ -5766,6 +5767,7 @@ void SV_InitLocal (void)
|
|||
Cvar_Register (&sv_bigcoords, cvargroup_serverphysics);
|
||||
|
||||
Cvar_Register (&pm_bunnyspeedcap, cvargroup_serverphysics);
|
||||
Cvar_Register (&pm_bunnyfriction, cvargroup_serverphysics);
|
||||
Cvar_Register (&pm_watersinkspeed, cvargroup_serverphysics);
|
||||
Cvar_Register (&pm_flyfriction, cvargroup_serverphysics);
|
||||
Cvar_Register (&pm_ktjump, cvargroup_serverphysics);
|
||||
|
|
|
@ -73,13 +73,14 @@ cvar_t pm_bunnyspeedcap = CVARFD("pm_bunnyspeedcap", "", CVAR_SERVERINFO, "0 or
|
|||
cvar_t pm_watersinkspeed = CVARFD("pm_watersinkspeed", "", CVAR_SERVERINFO, "This is the speed that players will sink at while inactive in water. Empty means 60.");
|
||||
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_slidyslopes = CVARFD("pm_slidyslopes", "", CVAR_SERVERINFO, "Replicates NQ behaviour, where players will slowly slide down ramps. Generally requires 'pm_noround 1' too, otherwise the effect rounds to nothing.");
|
||||
cvar_t pm_bunnyfriction = CVARFD("pm_bunnyfriction", "", CVAR_SERVERINFO, "Replicates NQ behaviour, ensuring that there's at least a frame of friction while jumping - friction is proportional to tick rate.");
|
||||
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.");
|
||||
cvar_t pm_walljump = CVARFD("pm_walljump", "", CVAR_SERVERINFO, "Allows the player to bounce off walls while arborne.");
|
||||
cvar_t pm_edgefriction = CVARAFD("pm_edgefriction", "", /*nq*/"edgefriction", CVAR_SERVERINFO, "Default value of 2");
|
||||
cvar_t pm_edgefriction = CVARAFD("pm_edgefriction", "", /*nq*/"edgefriction", CVAR_SERVERINFO, "Increases friction when about to walk over a cliff, so you're less likely to plummet by mistake. When empty defaults to 2, but uses a tracebox instead of a traceline to detect the drop.");
|
||||
|
||||
#define cvargroup_serverphysics "server physics variables"
|
||||
void WPhys_Init(void)
|
||||
|
|
|
@ -115,6 +115,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_bunnyfriction;
|
||||
extern cvar_t pm_autobunny;
|
||||
extern cvar_t pm_airstep;
|
||||
extern cvar_t pm_pground;
|
||||
|
@ -7608,6 +7609,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.bunnyfriction = (pm_bunnyfriction.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;
|
||||
|
|
Loading…
Reference in a new issue