mirror of
https://github.com/FWGS/xash3d-fwgs
synced 2024-12-27 11:16:43 +01:00
Alibek Omarov
9a432a5a13
* unify cvar.h and cvardef.h, enable private definitions only for refdll and engine * add FCVAR_REFDLL for easier RefDll cvars cleanup
123 lines
4.8 KiB
C
123 lines
4.8 KiB
C
/*
|
|
cvardef.h - quake cvar definition
|
|
Copyright (C) 1997-2001 Id Software, Inc.
|
|
Copyright (C) 2024 Alibek Omarov
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
#ifndef CVAR
|
|
#define CVAR
|
|
|
|
#include STDINT_H
|
|
#include "xash3d_types.h"
|
|
|
|
/*
|
|
|
|
cvar_t variables are used to hold scalar or string variables that can be changed
|
|
or displayed at the console or prog code as well as accessed directly
|
|
in C code.
|
|
|
|
The user can access cvars from the console in three ways:
|
|
r_draworder prints the current value
|
|
r_draworder 0 sets the current value to 0
|
|
set r_draworder 0 as above, but creates the cvar if not present
|
|
|
|
Cvars are restricted from having the same names as commands to keep this
|
|
interface from being ambiguous.
|
|
|
|
The are also occasionally used to communicated information between different
|
|
modules of the program.
|
|
|
|
*/
|
|
|
|
enum
|
|
{
|
|
// GoldSrc compatibility flags
|
|
FCVAR_ARCHIVE = 1 << 0, // set to cause it to be saved to vars.rc
|
|
FCVAR_USERINFO = 1 << 1, // added to userinfo when changed
|
|
FCVAR_SERVER = 1 << 2, // added to serverinfo when changed, will notify clients by default
|
|
FCVAR_EXTDLL = 1 << 3, // defined by server.dll
|
|
FCVAR_CLIENTDLL = 1 << 4, // defined by client.dll
|
|
FCVAR_PROTECTED = 1 << 5, // private server cvar
|
|
FCVAR_SPONLY = 1 << 6, // can be set only in singleplayer
|
|
FCVAR_PRINTABLEONLY = 1 << 7, // only allows printable characters
|
|
FCVAR_UNLOGGED = 1 << 8, // disables notifying client about server cvar change
|
|
FCVAR_NOEXTRAWHITESPACE = 1 << 9, // removes space characters from the beginning and the end of the string
|
|
FCVAR_PRIVILEGED = 1 << 10, // only available in privileged mode
|
|
FCVAR_FILTERABLE = 1 << 11, // treated as privileged if cl_filterstuffcmd is 1, otherwise ignored
|
|
|
|
// Xash3D public flags
|
|
// FCVAR_LATCH = 1 << 11, // deprecated Xash3D flag, conflicts with FCVAR_FILTERABLE. Use another FCVAR_LATCH!
|
|
FCVAR_GLCONFIG = 1 << 12, // set to cause it to be saved to <renderer>.cfg (see RefAPI)
|
|
FCVAR_CHANGED = 1 << 13, // set each time the cvar changed
|
|
FCVAR_GAMEUIDLL = 1 << 14, // defined by menu.dll
|
|
FCVAR_CHEAT = 1 << 15, // cannot be changed if sv_cheats is 0
|
|
|
|
#if REF_DLL || ENGINE_DLL // Xash3D internal flags, MUST NOT be used outside of engine
|
|
FCVAR_RENDERINFO = 1 << 16, // set to cause it to be saved to video.cfg
|
|
FCVAR_READ_ONLY = 1 << 17, // display only, cannot be set by user at all
|
|
FCVAR_EXTENDED = 1 << 18, // extended cvar structure
|
|
FCVAR_ALLOCATED = 1 << 19, // allocated by the engine, must be freed with Mem_Free
|
|
FCVAR_VIDRESTART = 1 << 20, // triggers video subsystem to recreate/modify window parameters
|
|
FCVAR_TEMPORARY = 1 << 21, // only used to temporarly hold some value, can be unlinked
|
|
FCVAR_MOVEVARS = 1 << 22, // access to movevars_t structure, synchornized between client and server
|
|
FCVAR_USER_CREATED = 1 << 23, // created by a set command
|
|
|
|
FCVAR_REFDLL = 1 << 29, // (Xash3D FWGS internal flag) defined by the renderer DLL
|
|
#endif // REF_DLL || ENGINE_DLL
|
|
|
|
FCVAR_LATCH = 1 << 30, // (Xash3D FWGS public flag, was FCVAR_FILTERABLE in Xash3D) save changes until server restart
|
|
};
|
|
|
|
struct cvar_s {
|
|
char *name;
|
|
char *string;
|
|
uint32_t flags;
|
|
float value;
|
|
struct cvar_s *next;
|
|
};
|
|
typedef struct cvar_s cvar_t;
|
|
|
|
STATIC_CHECK_SIZEOF( struct cvar_s, 20, 32 );
|
|
|
|
#if REF_DLL || ENGINE_DLL // Xash3D internal cvar format, MUST NOT be used outside of engine
|
|
struct convar_s {
|
|
char *name;
|
|
char *string;
|
|
uint32_t flags;
|
|
float value;
|
|
struct convar_s *next;
|
|
char *desc;
|
|
char *def_string;
|
|
};
|
|
typedef struct convar_s convar_t;
|
|
|
|
#if XASH_64BIT
|
|
#define CVAR_SENTINEL (uintptr_t)0xDEADBEEFDEADBEEF
|
|
#else
|
|
#define CVAR_SENTINEL (uintptr_t)0xDEADBEEF
|
|
#endif
|
|
|
|
#define CVAR_CHECK_SENTINEL( cv ) ((uintptr_t)(cv)->next == CVAR_SENTINEL)
|
|
|
|
#define CVAR_DEFINE( cv, cvname, cvstr, cvflags, cvdesc ) \
|
|
convar_t cv = { (char*)cvname, (char*)cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, (char*)cvdesc, NULL }
|
|
|
|
#define CVAR_DEFINE_AUTO( cv, cvstr, cvflags, cvdesc ) CVAR_DEFINE( cv, #cv, cvstr, cvflags, cvdesc )
|
|
#endif // REF_DLL || ENGINE_DLL
|
|
|
|
#endif // CVAR
|