From 75adb2e686a9560c0105ea15320e79ab44fef45d Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 8 Dec 2024 01:39:24 +0300 Subject: [PATCH] engine: server: for entities physics code directly use cvar values rather than movevars. Leave movevars to player movement only --- engine/server/server.h | 1 + engine/server/sv_game.c | 4 ++++ engine/server/sv_main.c | 2 +- engine/server/sv_move.c | 10 +++++----- engine/server/sv_pmove.c | 2 +- engine/server/sv_world.c | 2 +- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/engine/server/server.h b/engine/server/server.h index e369e389..d0d864d9 100644 --- a/engine/server/server.h +++ b/engine/server/server.h @@ -430,6 +430,7 @@ extern convar_t sv_wateramp; extern convar_t sv_voiceenable; extern convar_t sv_voicequality; extern convar_t sv_maxvelocity; +extern convar_t sv_stepsize; extern convar_t sv_skyname; extern convar_t sv_skycolor_r; extern convar_t sv_skycolor_g; diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index 128cb630..f1a2ce54 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -3813,8 +3813,12 @@ static void GAME_EXPORT pfnSetClientMaxspeed( const edict_t *pEdict, float fNewM if(( cl = SV_ClientFromEdict( pEdict, false )) == NULL ) return; + // GoldSrc doesn't bound the value to the movevar here fNewMaxspeed = bound( -svgame.movevars.maxspeed, fNewMaxspeed, svgame.movevars.maxspeed ); + + // There isn't any reference to "maxspd" anywhere except some commented-out code in SDK Info_SetValueForKeyf( cl->physinfo, "maxspd", MAX_INFO_STRING, "%.f", fNewMaxspeed ); + cl->edict->v.maxspeed = fNewMaxspeed; } diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 6aa24a6b..7b2314bb 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -90,7 +90,7 @@ CVAR_DEFINE_AUTO( sv_friction, "4", FCVAR_SERVER|FCVAR_MOVEVARS, "how fast you s static CVAR_DEFINE( sv_edgefriction, "edgefriction", "2", FCVAR_SERVER|FCVAR_MOVEVARS, "how much you slow down when nearing a ledge you might fall off" ); static CVAR_DEFINE_AUTO( sv_waterfriction, "1", FCVAR_SERVER|FCVAR_MOVEVARS, "how fast you slow down in water" ); static CVAR_DEFINE_AUTO( sv_bounce, "1", FCVAR_SERVER|FCVAR_MOVEVARS, "bounce factor for entities with MOVETYPE_BOUNCE" ); -static CVAR_DEFINE_AUTO( sv_stepsize, "18", FCVAR_SERVER|FCVAR_MOVEVARS, "how high you and NPS's can step up" ); +CVAR_DEFINE_AUTO( sv_stepsize, "18", FCVAR_SERVER|FCVAR_MOVEVARS, "how high you and NPC's can step up" ); CVAR_DEFINE_AUTO( sv_maxvelocity, "2000", FCVAR_MOVEVARS|FCVAR_UNLOGGED, "max velocity for all things in the world" ); static CVAR_DEFINE_AUTO( sv_zmax, "4096", FCVAR_MOVEVARS|FCVAR_SPONLY, "maximum viewable distance" ); CVAR_DEFINE_AUTO( sv_wateramp, "0", FCVAR_MOVEVARS|FCVAR_UNLOGGED, "world waveheight factor" ); diff --git a/engine/server/sv_move.c b/engine/server/sv_move.c index 25cd894a..b0937d9c 100644 --- a/engine/server/sv_move.c +++ b/engine/server/sv_move.c @@ -66,12 +66,12 @@ realcheck: start[2] = mins[2]; if( !FBitSet( host.features, ENGINE_QUAKE_COMPATIBLE )) - start[2] += svgame.movevars.stepsize; + start[2] += sv_stepsize.value; // the midpoint must be within 16 of the bottom start[0] = stop[0] = (mins[0] + maxs[0]) * 0.5f; start[1] = stop[1] = (mins[1] + maxs[1]) * 0.5f; - stop[2] = start[2] - 2.0f * svgame.movevars.stepsize; + stop[2] = start[2] - 2.0f * sv_stepsize.value; if( iMode == WALKMOVE_WORLDONLY ) trace = SV_MoveNoEnts( start, vec3_origin, vec3_origin, stop, MOVE_NOMONSTERS, ent ); @@ -96,7 +96,7 @@ realcheck: if( trace.fraction != 1.0f && trace.endpos[2] > bottom ) bottom = trace.endpos[2]; - if( trace.fraction == 1.0f || mid - trace.endpos[2] > svgame.movevars.stepsize ) + if( trace.fraction == 1.0f || mid - trace.endpos[2] > sv_stepsize.value ) return false; } } @@ -283,7 +283,7 @@ qboolean SV_MoveStep( edict_t *ent, vec3_t move, qboolean relink ) } else { - dz = svgame.movevars.stepsize; + dz = sv_stepsize.value; neworg[2] += dz; VectorCopy( neworg, end ); end[2] -= dz * 2.0f; @@ -348,7 +348,7 @@ qboolean SV_MoveTest( edict_t *ent, vec3_t move, qboolean relink ) VectorCopy( ent->v.origin, oldorg ); VectorAdd( ent->v.origin, move, neworg ); - temp = svgame.movevars.stepsize; + temp = sv_stepsize.value; neworg[2] += temp; VectorCopy( neworg, end ); diff --git a/engine/server/sv_pmove.c b/engine/server/sv_pmove.c index 925bcf04..fbb82caa 100644 --- a/engine/server/sv_pmove.c +++ b/engine/server/sv_pmove.c @@ -571,7 +571,7 @@ static void SV_SetupPMove( playermove_t *pmove, sv_client_t *cl, usercmd_t *ucmd if( pmove->multiplayer ) pmove->onground = -1; pmove->waterlevel = clent->v.waterlevel; pmove->watertype = clent->v.watertype; - pmove->maxspeed = svgame.movevars.maxspeed; + pmove->maxspeed = svgame.movevars.maxspeed; // GoldSrc uses sv_maxspeed here? pmove->clientmaxspeed = clent->v.maxspeed; pmove->iuser1 = clent->v.iuser1; pmove->iuser2 = clent->v.iuser2; diff --git a/engine/server/sv_world.c b/engine/server/sv_world.c index 6e706962..2fc4ec6e 100644 --- a/engine/server/sv_world.c +++ b/engine/server/sv_world.c @@ -1478,7 +1478,7 @@ trace_t SV_MoveToss( edict_t *tossent, edict_t *ignore ) VectorCopy( tossent->v.velocity, original_velocity ); VectorCopy( tossent->v.angles, original_angles ); VectorCopy( tossent->v.avelocity, original_avelocity ); - gravity = tossent->v.gravity * svgame.movevars.gravity * 0.05f; + gravity = tossent->v.gravity * sv_gravity.value * 0.05f; for( i = 0; i < 200; i++ ) {