From 214fc7e827f0827856e3e47075f6f99b219ee7b1 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 19 May 2023 07:43:40 +0300 Subject: [PATCH] engine: common: move host cvars to static allocation --- engine/client/cl_demo.c | 4 +-- engine/client/cl_main.c | 2 +- engine/common/cmd.c | 4 +-- engine/common/common.h | 7 +++--- engine/common/con_utils.c | 6 ++--- engine/common/cvar.c | 4 +-- engine/common/host.c | 51 +++++++++++++++++++-------------------- engine/server/sv_cmds.c | 6 ++--- engine/server/sv_frame.c | 2 +- engine/server/sv_main.c | 4 +-- 10 files changed, 44 insertions(+), 46 deletions(-) diff --git a/engine/client/cl_demo.c b/engine/client/cl_demo.c index b8c0ee5b..e1c43faa 100644 --- a/engine/client/cl_demo.c +++ b/engine/client/cl_demo.c @@ -372,7 +372,7 @@ void CL_WriteDemoHeader( const char *name ) demo.header.id = IDEMOHEADER; demo.header.dem_protocol = DEMO_PROTOCOL; demo.header.net_protocol = cls.legacymode ? PROTOCOL_LEGACY_VERSION : PROTOCOL_VERSION; - demo.header.host_fps = bound( MIN_FPS, host_maxfps->value, MAX_FPS ); + demo.header.host_fps = bound( MIN_FPS, host_maxfps.value, MAX_FPS ); Q_strncpy( demo.header.mapname, clgame.mapname, sizeof( demo.header.mapname )); Q_strncpy( demo.header.comment, clgame.maptitle, sizeof( demo.header.comment )); Q_strncpy( demo.header.gamedir, FS_Gamedir(), sizeof( demo.header.gamedir )); @@ -1468,7 +1468,7 @@ void CL_PlayDemo_f( void ) { int c, neg = false; - demo.header.host_fps = host_maxfps->value; + demo.header.host_fps = host_maxfps.value; while(( c = FS_Getc( cls.demofile )) != '\n' ) { diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index f04a16d2..0b55e928 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -726,7 +726,7 @@ void CL_WritePacket( void ) // In single player, send commands as fast as possible // Otherwise, only send when ready and when not choking bandwidth - if( cl.maxclients == 1 || ( NET_IsLocalAddress( cls.netchan.remote_address ) && !host_limitlocal->value )) + if( cl.maxclients == 1 || ( NET_IsLocalAddress( cls.netchan.remote_address ) && !host_limitlocal.value )) send_command = true; if(( host.realtime >= cls.nextcmdtime ) && Netchan_CanPacket( &cls.netchan, true )) diff --git a/engine/common/cmd.c b/engine/common/cmd.c index e8d514c7..c4476b7e 100644 --- a/engine/common/cmd.c +++ b/engine/common/cmd.c @@ -996,7 +996,7 @@ static void Cmd_ExecuteStringWithPrivilegeCheck( const char *text, qboolean isPr cmd_condlevel = 0; // cvar value substitution - if( CVAR_TO_BOOL( cmd_scripting ) && isPrivileged ) + if( cmd_scripting.value && isPrivileged ) { while( *text ) { @@ -1357,7 +1357,7 @@ inserts escape sequences void Cmd_Escape( char *newCommand, const char *oldCommand, int len ) { int c; - int scripting = CVAR_TO_BOOL( cmd_scripting ); + int scripting = cmd_scripting.value; while( (c = *oldCommand++) && len > 1 ) { diff --git a/engine/common/common.h b/engine/common/common.h index 61e39ef8..81098b58 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -156,13 +156,12 @@ void DBG_AssertFunction( qboolean fExpr, const char* szExpr, const char* szFile, extern convar_t gl_vsync; extern convar_t scr_loading; extern convar_t scr_download; -extern convar_t *cmd_scripting; +extern convar_t cmd_scripting; extern convar_t *sv_maxclients; extern convar_t cl_allow_levelshots; extern convar_t host_developer; -extern convar_t *host_limitlocal; -extern convar_t *host_framerate; -extern convar_t *host_maxfps; +extern convar_t host_limitlocal; +extern convar_t host_maxfps; extern convar_t sys_timescale; extern convar_t cl_filterstuffcmd; extern convar_t rcon_password; diff --git a/engine/common/con_utils.c b/engine/common/con_utils.c index 126a289d..6bba1ac1 100644 --- a/engine/common/con_utils.c +++ b/engine/common/con_utils.c @@ -18,7 +18,7 @@ GNU General Public License for more details. #include "const.h" #include "kbutton.h" -extern convar_t *con_gamemaps; +extern convar_t con_gamemaps; #define CON_MAXCMDS 4096 // auto-complete intermediate list @@ -76,7 +76,7 @@ int Cmd_ListMaps( search_t *t, char *lastmapname, size_t len ) compiler[0] = '\0'; generator[0] = '\0'; - f = FS_Open( t->filenames[i], "rb", con_gamemaps->value ); + f = FS_Open( t->filenames[i], "rb", con_gamemaps.value ); if( f ) { @@ -190,7 +190,7 @@ qboolean Cmd_GetMapList( const char *s, char *completedname, int length ) string matchbuf; int i, nummaps; - t = FS_Search( va( "maps/%s*.bsp", s ), true, con_gamemaps->value ); + t = FS_Search( va( "maps/%s*.bsp", s ), true, con_gamemaps.value ); if( !t ) return false; COM_FileBase( t->filenames[0], matchbuf, sizeof( matchbuf )); diff --git a/engine/common/cvar.c b/engine/common/cvar.c index 52cc9bb7..574c25cf 100644 --- a/engine/common/cvar.c +++ b/engine/common/cvar.c @@ -19,7 +19,7 @@ GNU General Public License for more details. #include "eiface.h" // ARRAYSIZE convar_t *cvar_vars = NULL; // head of list -convar_t *cmd_scripting; +CVAR_DEFINE_AUTO( cmd_scripting, "0", FCVAR_ARCHIVE|FCVAR_PRIVILEGED, "enable simple condition checking and variable operations" ); #ifdef HACKS_RELATED_HLMODS typedef struct cvar_filter_quirks_s @@ -1240,7 +1240,7 @@ void Cvar_Init( void ) { cvar_vars = NULL; cvar_active_filter_quirks = NULL; - cmd_scripting = Cvar_Get( "cmd_scripting", "0", FCVAR_ARCHIVE|FCVAR_PRIVILEGED, "enable simple condition checking and variable operations" ); + Cvar_RegisterVariable( &cmd_scripting ); Cvar_RegisterVariable( &host_developer ); // early registering for dev Cvar_RegisterVariable( &cl_filterstuffcmd ); Cmd_AddRestrictedCommand( "setgl", Cvar_SetGL_f, "change the value of a opengl variable" ); // OBSOLETE diff --git a/engine/common/host.c b/engine/common/host.c index e836c4e5..6ab4c8d4 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -54,15 +54,14 @@ CVAR_DEFINE( host_developer, "developer", "0", FCVAR_FILTERABLE, "engine is in d CVAR_DEFINE_AUTO( sys_timescale, "1.0", FCVAR_CHEAT|FCVAR_FILTERABLE, "scale frame time" ); CVAR_DEFINE_AUTO( sys_ticrate, "100", 0, "framerate in dedicated mode" ); -convar_t *host_serverstate; -convar_t *host_gameloaded; -convar_t *host_clientloaded; -convar_t *host_limitlocal; -convar_t *host_maxfps; -convar_t *host_framerate; -convar_t *host_sleeptime; -convar_t *con_gamemaps; -convar_t *build, *ver; +static CVAR_DEFINE_AUTO( host_serverstate, "0", FCVAR_READ_ONLY, "displays current server state" ); +static CVAR_DEFINE_AUTO( host_gameloaded, "0", FCVAR_READ_ONLY, "inidcates a loaded game.dll" ); +static CVAR_DEFINE_AUTO( host_clientloaded, "0", FCVAR_READ_ONLY, "inidcates a loaded client.dll" ); +CVAR_DEFINE_AUTO( host_limitlocal, "0", 0, "apply cl_cmdrate and rate to loopback connection" ); +CVAR_DEFINE( host_maxfps, "fps_max", "72", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "host fps upper limit" ); +static CVAR_DEFINE_AUTO( host_framerate, "0", FCVAR_FILTERABLE, "locks frame timing to this value in seconds" ); +static CVAR_DEFINE( host_sleeptime, "sleeptime", "1", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "milliseconds to sleep for each frame. higher values reduce fps accuracy" ); +CVAR_DEFINE( con_gamemaps, "con_mapfilter", "1", FCVAR_ARCHIVE, "when true show only maps in game folder" ); void Sys_PrintUsage( void ) { @@ -285,20 +284,20 @@ static int Host_CalcSleep( void ) if( Host_IsDedicated() ) { // let the dedicated server some sleep - return host_sleeptime->value; + return host_sleeptime.value; } switch( host.status ) { case HOST_NOFOCUS: if( SV_Active() && CL_IsInGame()) - return host_sleeptime->value; + return host_sleeptime.value; // fallthrough case HOST_SLEEP: return 20; } - return host_sleeptime->value; + return host_sleeptime.value; } void Host_NewInstance( const char *name, const char *finalmsg ) @@ -600,13 +599,13 @@ double Host_CalcFPS( void ) else if( Host_IsLocalGame( )) { if( !gl_vsync.value ) - fps = host_maxfps->value; + fps = host_maxfps.value; } else { if( !gl_vsync.value ) { - fps = host_maxfps->value; + fps = host_maxfps.value; if( fps == 0.0 ) fps = MAX_FPS; fps = bound( MIN_FPS, fps, MAX_FPS ); } @@ -681,8 +680,8 @@ qboolean Host_FilterTime( float time ) oldtime = host.realtime; // NOTE: allow only in singleplayer while demos are not active - if( host_framerate->value > 0.0f && Host_IsLocalGame() && !CL_IsPlaybackDemo() && !CL_IsRecordDemo( )) - host.frametime = bound( MIN_FRAMETIME, host_framerate->value * scale, MAX_FRAMETIME ); + if( host_framerate.value > 0.0f && Host_IsLocalGame() && !CL_IsPlaybackDemo() && !CL_IsRecordDemo( )) + host.frametime = bound( MIN_FRAMETIME, host_framerate.value * scale, MAX_FRAMETIME ); else host.frametime = bound( MIN_FRAMETIME, host.frametime, MAX_FRAMETIME ); return true; @@ -1164,18 +1163,18 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa Cmd_AddRestrictedCommand ( "crash", Host_Crash_f, "a way to force a bus error for development reasons"); } - host_serverstate = Cvar_Get( "host_serverstate", "0", FCVAR_READ_ONLY, "displays current server state" ); - host_maxfps = Cvar_Get( "fps_max", "72", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "host fps upper limit" ); - host_framerate = Cvar_Get( "host_framerate", "0", FCVAR_FILTERABLE, "locks frame timing to this value in seconds" ); - host_sleeptime = Cvar_Get( "sleeptime", "1", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "milliseconds to sleep for each frame. higher values reduce fps accuracy" ); - host_gameloaded = Cvar_Get( "host_gameloaded", "0", FCVAR_READ_ONLY, "inidcates a loaded game.dll" ); - host_clientloaded = Cvar_Get( "host_clientloaded", "0", FCVAR_READ_ONLY, "inidcates a loaded client.dll" ); - host_limitlocal = Cvar_Get( "host_limitlocal", "0", 0, "apply cl_cmdrate and rate to loopback connection" ); - con_gamemaps = Cvar_Get( "con_mapfilter", "1", FCVAR_ARCHIVE, "when true show only maps in game folder" ); + Cvar_RegisterVariable( &host_serverstate ); + Cvar_RegisterVariable( &host_maxfps ); + Cvar_RegisterVariable( &host_framerate ); + Cvar_RegisterVariable( &host_sleeptime ); + Cvar_RegisterVariable( &host_gameloaded ); + Cvar_RegisterVariable( &host_clientloaded ); + Cvar_RegisterVariable( &host_limitlocal ); + Cvar_RegisterVariable( &con_gamemaps ); Cvar_RegisterVariable( &sys_timescale ); - build = Cvar_Getf( "buildnum", FCVAR_READ_ONLY, "returns a current build number", "%i", Q_buildnum_compat()); - ver = Cvar_Getf( "ver", FCVAR_READ_ONLY, "shows an engine version", "%i/%s (hw build %i)", PROTOCOL_VERSION, XASH_COMPAT_VERSION, Q_buildnum_compat()); + Cvar_Getf( "buildnum", FCVAR_READ_ONLY, "returns a current build number", "%i", Q_buildnum_compat()); + Cvar_Getf( "ver", FCVAR_READ_ONLY, "shows an engine version", "%i/%s (hw build %i)", PROTOCOL_VERSION, XASH_COMPAT_VERSION, Q_buildnum_compat()); Cvar_Getf( "host_ver", FCVAR_READ_ONLY, "detailed info about this build", "%i " XASH_VERSION " %s %s %s", Q_buildnum(), Q_buildos(), Q_buildarch(), Q_buildcommit()); Cvar_Getf( "host_lowmemorymode", FCVAR_READ_ONLY, "indicates if engine compiled for low RAM consumption (0 - normal, 1 - low engine limits, 2 - low protocol limits)", "%i", XASH_LOW_MEMORY ); diff --git a/engine/server/sv_cmds.c b/engine/server/sv_cmds.c index 481f6744..973bc70b 100644 --- a/engine/server/sv_cmds.c +++ b/engine/server/sv_cmds.c @@ -16,7 +16,7 @@ GNU General Public License for more details. #include "common.h" #include "server.h" -extern convar_t *con_gamemaps; +extern convar_t con_gamemaps; /* ================= @@ -321,8 +321,8 @@ void SV_NextMap_f( void ) int i, next; search_t *t; - t = FS_Search( "maps\\*.bsp", true, CVAR_TO_BOOL( con_gamemaps )); // only in gamedir - if( !t ) t = FS_Search( "maps/*.bsp", true, CVAR_TO_BOOL( con_gamemaps )); // only in gamedir + t = FS_Search( "maps\\*.bsp", true, con_gamemaps.value ); // only in gamedir + if( !t ) t = FS_Search( "maps/*.bsp", true, con_gamemaps.value ); // only in gamedir if( !t ) { diff --git a/engine/server/sv_frame.c b/engine/server/sv_frame.c index 669319fc..3cee17b9 100644 --- a/engine/server/sv_frame.c +++ b/engine/server/sv_frame.c @@ -863,7 +863,7 @@ void SV_SendClientMessages( void ) continue; } - if( !host_limitlocal->value && NET_IsLocalAddress( cl->netchan.remote_address )) + if( !host_limitlocal.value && NET_IsLocalAddress( cl->netchan.remote_address )) SetBits( cl->flags, FCL_SEND_NET_MESSAGE ); if( cl->state == cs_spawned ) diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index c5232dc5..69deccf4 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -422,7 +422,7 @@ void SV_ReadPackets( void ) if( Netchan_Process( &cl->netchan, &net_message )) { - if(( svs.maxclients == 1 && !host_limitlocal->value ) || ( cl->state != cs_spawned )) + if(( svs.maxclients == 1 && !host_limitlocal.value ) || ( cl->state != cs_spawned )) SetBits( cl->flags, FCL_SEND_NET_MESSAGE ); // reply at end of frame // this is a valid, sequenced packet, so process it @@ -441,7 +441,7 @@ void SV_ReadPackets( void ) { MSG_Init( &net_message, "ClientPacket", net_message_buffer, curSize ); - if(( svs.maxclients == 1 && !host_limitlocal->value ) || ( cl->state != cs_spawned )) + if(( svs.maxclients == 1 && !host_limitlocal.value ) || ( cl->state != cs_spawned )) SetBits( cl->flags, FCL_SEND_NET_MESSAGE ); // reply at end of frame // this is a valid, sequenced packet, so process it