diff --git a/lib/public/tier1.lib b/lib/public/tier1.lib index b66bc4a1..d382e0e7 100644 Binary files a/lib/public/tier1.lib and b/lib/public/tier1.lib differ diff --git a/notes.txt b/notes.txt index e10868f8..5d397b22 100644 --- a/notes.txt +++ b/notes.txt @@ -1,35 +1,9 @@ ********* * About * ********* -This version of the Source/Orange Box SDK attempts to remove as many -warnings as possible when compiling on Windows or Linux. -The -fpermissive option has been removed from the Linux makefiles and --Wall has been added. It is also now possible to cross-compile the SDK -on 64-bit Linux systems with the addition of the -m32 option. +This version of the Source SDK is meant only for compiling server plugins for +the engine that runs Valve's Left 4 Dead game. An official SDK is not yet +available. -********* -* Notes * -********* -1: A Visual Studio project file for choreoobjects has been added to - the choreoobjects directory for the convenience of recompiling this - static library for Windows if it ever becomes necessary to do so. - -2: Makefiles for choreoobjects, mathlib, and tier1 have been added to - the linux_sdk directory for the convenience of recompiling these - static libraries for Linux if it ever becomes necessary to do so. - -3: The vmpi directory has been removed as it seems to be an exact copy - of the one located in the utils directory. Nothing seems to depend - upon the files within it yet. - -**************** -* Known Issues * -**************** -1: The SDK will not compile with GCC 4.3. This will be addressed in a - future update. - -2: The SDK may not fully compile with Visual Studio 2008. This will be - addressed in a future update. - -3: The caption compiler which is located in utils/captioncompiler will - not link due to a missing static library (appframework.lib). +This is a modified version of the Orange Box SDK. Changes to it were reverse +engineered from the Left 4 Dead engine and game binaries. diff --git a/public/edict.h b/public/edict.h index 98875288..47d1a044 100644 --- a/public/edict.h +++ b/public/edict.h @@ -59,6 +59,14 @@ public: bool teamplay; // current maxentities int maxEntities; + + // Number of servers spawned (-fork) + int serverCount; + + // First edict/entity, usually worldspawn (0) + // - Replacement for IndexOfEntity: (edict - baseEdict) >> 4 + // - Replacement for PEntityOfIndex: baseEdict + (entIndex << 4) + edict_t *baseEdict; }; inline CGlobalVars::CGlobalVars( bool bIsClient ) : diff --git a/public/eiface.h b/public/eiface.h index fea09c4e..294ea548 100644 --- a/public/eiface.h +++ b/public/eiface.h @@ -57,6 +57,7 @@ class CStandardSendProxies; class IAchievementMgr; class CGamestatsData; class CSteamID; +struct bbox_t; typedef struct player_info_s player_info_t; @@ -70,7 +71,7 @@ typedef struct player_info_s player_info_t; #define DLLEXPORT /* */ #endif -#define INTERFACEVERSION_VENGINESERVER "VEngineServer021" +#define INTERFACEVERSION_VENGINESERVER "VEngineServer022" //----------------------------------------------------------------------------- // Purpose: Interface the engine exposes to the game DLL @@ -123,13 +124,12 @@ public: virtual int GetPlayerUserId( const edict_t *e ) = 0; virtual const char *GetPlayerNetworkIDString( const edict_t *e ) = 0; + virtual bool IsUserIDInUse ( int userid ) = 0; + virtual int GetLoadingProgressForUserID ( int userid ) = 0; + // Return the current number of used edict slots virtual int GetEntityCount( void ) = 0; - // Given an edict, returns the entity index - virtual int IndexOfEdict( const edict_t *pEdict ) = 0; - // Given and entity index, returns the corresponding edict pointer - virtual edict_t *PEntityOfEntIndex( int iEntIndex ) = 0; - + // Get stats info interface for a client netchannel virtual INetChannelInfo* GetPlayerNetInfo( int playerIndex ) = 0; @@ -265,6 +265,7 @@ public: // Print a message to the server log file virtual void LogPrint( const char *msg ) = 0; + virtual bool IsLogEnabled( void ) = 0; // Builds PVS information for an entity virtual void BuildEntityClusterList( edict_t *pEdict, PVSInfo_t *pPVSInfo ) = 0; @@ -311,7 +312,7 @@ public: // Is the engine in Commentary mode? virtual int IsInCommentaryMode( void ) = 0; - + virtual bool IsLevelMainMenuBackground( void ) = 0; // Mark some area portals as open/closed. It's more efficient to use this // than a bunch of individual SetAreaPortalState calls. @@ -338,6 +339,10 @@ public: // Name of most recently load .sav file virtual char const *GetMostRecentlyLoadedFileName() = 0; virtual char const *GetSaveFileName() = 0; + virtual void WriteSavegameScreenshot( const char *filename ) = 0; + + virtual int GetLightForPointListenServerOnly(const Vector &, bool, Vector *) = 0; + virtual int TraceLightingListenServerOnly(const Vector &, const Vector &, Vector *, Vector *) = 0; // Matchmaking virtual void MultiplayerEndGame() = 0; @@ -352,6 +357,7 @@ public: virtual int GetAppID() = 0; virtual bool IsLowViolence() = 0; + virtual bool IsAnyClientLowViolence() = 0; // Call this to find out the value of a cvar on the client. // @@ -370,16 +376,32 @@ public: // Returns true if this client has been fully authenticated by Steam virtual bool IsClientFullyAuthenticated( edict_t *pEdict ) = 0; - // This makes the host run 1 tick per frame instead of checking the system timer to see how many ticks to run in a certain frame. - // i.e. it does the same thing timedemo does. - virtual void SetDedicatedServerBenchmarkMode( bool bBenchmarkMode ) = 0; + virtual bool IsSplitScreenPlayer( int ) = 0; + virtual int GetSplitScreenPlayerAttachToEdict( int ) = 0; + virtual int GetNumSplitScreenUsersAttachedToEdict( int ) = 0; + virtual int GetSplitScreenPlayerForEdict( int, int ) = 0; + + virtual bool IsOverrideLoadGameEntsOn() = 0; + virtual void ForceFlushEntity( int ) = 0; + + virtual void *GetSinglePlayerSharedMemorySpace( char const * ) = 0; + + virtual void *AllocLevelStaticData( unsigned int ) = 0; + virtual int GetClusterCount() = 0; + virtual void *GetAllClusterBounds( bbox_t *, int ) = 0; + + virtual bool IsCreatingReslist() = 0; + virtual bool IsCreatingXboxReslist() = 0; + virtual bool IsDedicatedServerForXbox() = 0; + + virtual void Pause( bool, bool ) = 0; // Methods to set/get a gamestats data container so client & server running in same process can send combined data virtual void SetGamestatsData( CGamestatsData *pGamestatsData ) = 0; virtual CGamestatsData *GetGamestatsData() = 0; - - // Returns the SteamID of the specified player. It'll be NULL if the player hasn't authenticated yet. - virtual const CSteamID *GetClientSteamID( edict_t *pPlayerEdict ) = 0; + + virtual void HostValidateSession() = 0; + virtual void RefreshScreenIfNecessary() = 0; }; #define INTERFACEVERSION_SERVERGAMEDLL_VERSION_4 "ServerGameDLL004" @@ -487,6 +509,12 @@ public: // iCookie is the value returned by IServerPluginHelpers::StartQueryCvarValue. // Added with version 2 of the interface. virtual void OnQueryCvarValueFinished( QueryCvarCookie_t iCookie, edict_t *pPlayerEntity, EQueryCvarValueStatus eStatus, const char *pCvarName, const char *pCvarValue ) = 0; + + virtual void PostToolsInit( void ) = 0; + virtual void ApplyGameSettings( KeyValues * ) = 0; + virtual const char * GetGameModeConfigFile( int ) = 0; + virtual int GameGameModePlayerSlots( int ) = 0; + virtual void GetMatchmakingTags( char *, unsigned int ) = 0; }; //----------------------------------------------------------------------------- @@ -505,9 +533,6 @@ abstract_class IServerGameEnts public: virtual ~IServerGameEnts() {} - // Only for debugging. Set the edict base so you can get an edict's index in the debugger while debugging the game .dll - virtual void SetDebugEdictBase(edict_t *base) = 0; - // The engine wants to mark two entities as touching virtual void MarkEntitiesAsTouching( edict_t *e1, edict_t *e2 ) = 0; @@ -524,6 +549,8 @@ public: // This is also where an entity can force other entities to be transmitted if it refers to them // with ehandles. virtual void CheckTransmit( CCheckTransmitInfo *pInfo, const unsigned short *pEdictIndices, int nEdicts ) = 0; + + virtual void PrepareForFullUpdate( edict_t * ) = 0; }; #define INTERFACEVERSION_SERVERGAMECLIENTS "ServerGameClients003" @@ -582,9 +609,15 @@ public: // Anything this game .dll wants to add to the bug reporter text (e.g., the entity/model under the picker crosshair) // can be added here virtual void GetBugReportInfo( char *buf, int buflen ) = 0; + + virtual void ClientVoice( edict_t * ) = 0; // A user has had their network id setup and validated virtual void NetworkIDValidated( const char *pszUserName, const char *pszNetworkID ) = 0; + + virtual int GetMaxSplitscreenPlayers( void ) = 0; + + virtual int GetMaxHumanPlayers( void ) = 0; }; #define INTERFACEVERSION_UPLOADGAMESTATS "ServerUploadGameStats001" diff --git a/public/engine/IEngineSound.h b/public/engine/IEngineSound.h index 25bcef2b..07380b6f 100644 --- a/public/engine/IEngineSound.h +++ b/public/engine/IEngineSound.h @@ -59,6 +59,9 @@ public: virtual bool PrecacheSound( const char *pSample, bool bPreload = false, bool bIsUISound = false ) = 0; virtual bool IsSoundPrecached( const char *pSample ) = 0; virtual void PrefetchSound( const char *pSample ) = 0; + + // Client only + virtual bool IsLoopingSound( const char *pSample ) = 0; // Just loads the file header and checks for duration (not hooked up for .mp3's yet) // Is accessible to server and client though @@ -116,6 +119,9 @@ public: virtual void PrecacheSentenceGroup( const char *pGroupName ) = 0; virtual void NotifyBeginMoviePlayback() = 0; virtual void NotifyEndMoviePlayback() = 0; + + // Client only + virtual float GetSoundChannelVolume( const char *, float &, float & ) = 0; }; diff --git a/public/engine/IEngineTrace.h b/public/engine/IEngineTrace.h index 3c729f71..61d7d7fd 100644 --- a/public/engine/IEngineTrace.h +++ b/public/engine/IEngineTrace.h @@ -23,7 +23,6 @@ class CGameTrace; typedef CGameTrace trace_t; class ICollideable; class QAngle; -class CTraceListData; class CPhysCollide; struct cplane_t; @@ -45,6 +44,16 @@ public: virtual TraceType_t GetTraceType() const = 0; }; +abstract_class ITraceListData +{ +public: + virtual ~ITraceListData() {}; + + virtual void Reset() = 0; + virtual bool IsEmpty() = 0; + virtual bool CanTraceRay( const Ray_t &ray ) = 0; +}; + //----------------------------------------------------------------------------- // Classes are expected to inherit these + implement the ShouldHitEntity method @@ -129,8 +138,9 @@ abstract_class IEngineTrace { public: // Returns the contents mask + entity at a particular world-space position - virtual int GetPointContents( const Vector &vecAbsPosition, IHandleEntity** ppEntity = NULL ) = 0; + virtual int GetPointContents( const Vector &vecAbsPosition, int, IHandleEntity** ppEntity = NULL ) = 0; + virtual int GetPointContents_WorldOnly( const Vector &vecAbsPosition, int ) = 0; // Get the point contents, but only test the specific entity. This works // on static props and brush models. // @@ -148,9 +158,9 @@ public: virtual void TraceRay( const Ray_t &ray, unsigned int fMask, ITraceFilter *pTraceFilter, trace_t *pTrace ) = 0; // A version that sets up the leaf and entity lists and allows you to pass those in for collision. - virtual void SetupLeafAndEntityListRay( const Ray_t &ray, CTraceListData &traceData ) = 0; - virtual void SetupLeafAndEntityListBox( const Vector &vecBoxMin, const Vector &vecBoxMax, CTraceListData &traceData ) = 0; - virtual void TraceRayAgainstLeafAndEntityList( const Ray_t &ray, CTraceListData &traceData, unsigned int fMask, ITraceFilter *pTraceFilter, trace_t *pTrace ) = 0; + virtual void SetupLeafAndEntityListRay( const Ray_t &ray, ITraceListData *traceData ) = 0; + virtual void SetupLeafAndEntityListBox( const Vector &vecBoxMin, const Vector &vecBoxMax, ITraceListData *traceData ) = 0; + virtual void TraceRayAgainstLeafAndEntityList( const Ray_t &ray, ITraceListData *traceData, unsigned int fMask, ITraceFilter *pTraceFilter, trace_t *pTrace ) = 0; // A version that sweeps a collideable through the world // abs start + abs end represents the collision origins you want to sweep the collideable through @@ -185,6 +195,9 @@ public: // Walks bsp to find the leaf containing the specified point virtual int GetLeafContainingPoint( const Vector &ptTest ) = 0; + + virtual ITraceListData *AllocTraceListData( void ) = 0; + virtual void FreeTraceListData( ITraceListData *traceData ) = 0; }; diff --git a/public/filesystem.h b/public/filesystem.h index f87fb72b..12ce2dc6 100644 --- a/public/filesystem.h +++ b/public/filesystem.h @@ -736,6 +736,17 @@ public: // Installs a callback used to display a dirty disk dialog virtual void InstallDirtyDiskReportFunc( FSDirtyDiskReportFunc_t func ) = 0; + + virtual bool IsLaunchedFromXboxHDD( void ) = 0; + virtual bool IsInstalledToXboxHDDCache( void ) = 0; + virtual bool IsDVDHosted( void ) = 0; + virtual bool IsInstallAllowed( void ) = 0; + virtual void GetSearchPathID( char *, int ) = 0; + virtual bool FixupSearchPathsAfterInstall( void ) = 0; + + virtual FSDirtyDiskReportFunc_t GetDirtyDiskReportFunc( void ) = 0; + + virtual int AddVPKFile( const char *file ) = 0; }; //----------------------------------------------------------------------------- diff --git a/public/filesystem_passthru.h b/public/filesystem_passthru.h index 5a0bc2fe..0885a790 100644 --- a/public/filesystem_passthru.h +++ b/public/filesystem_passthru.h @@ -229,6 +229,14 @@ public: virtual void SetWhitelistSpewFlags( int spewFlags ) { m_pFileSystemPassThru->SetWhitelistSpewFlags( spewFlags ); } virtual void InstallDirtyDiskReportFunc( FSDirtyDiskReportFunc_t func ) { m_pFileSystemPassThru->InstallDirtyDiskReportFunc( func ); } + virtual bool IsLaunchedFromXboxHDD() { return m_pFileSystemPassThru->IsLaunchedFromXboxHDD(); } + virtual bool IsInstalledToXboxHDDCache() { return m_pFileSystemPassThru->IsInstalledToXboxHDDCache(); } + virtual bool IsDVDHosted() { return m_pFileSystemPassThru->IsDVDHosted(); } + virtual bool IsInstallAllowed() { return m_pFileSystemPassThru->IsInstallAllowed(); } + virtual void GetSearchPathID( char *a, int b ) { m_pFileSystemPassThru->GetSearchPathID(a, b); } + virtual bool FixupSearchPathsAfterInstall() { return m_pFileSystemPassThru->FixupSearchPathsAfterInstall(); } + virtual FSDirtyDiskReportFunc_t GetDirtyDiskReportFunc() { return m_pFileSystemPassThru->GetDirtyDiskReportFunc(); } + virtual int AddVPKFile( const char *file ) { return m_pFileSystemPassThru->AddVPKFile(file); } protected: IFileSystem *m_pFileSystemPassThru; diff --git a/public/iclient.h b/public/iclient.h index bd5a70ec..8ba4bc02 100644 --- a/public/iclient.h +++ b/public/iclient.h @@ -23,7 +23,7 @@ public: virtual ~IClient() {} // connect client - virtual void Connect(const char * szName, int nUserID, INetChannel *pNetChannel, bool bFakePlayer) = 0; + virtual void Connect(const char * szName, int nUserID, INetChannel *pNetChannel, bool bFakePlayer, CUtlVector< NetMessageCvar_t > *) = 0; // set the client in a pending state waiting for a new game virtual void Inactivate( void ) = 0; @@ -80,6 +80,12 @@ public: virtual bool IsProximityHearingClient(int index) const = 0; virtual void SetMaxRoutablePayloadSize( int nMaxRoutablePayloadSize ) = 0; + + virtual bool IsSplitScreenUser( void ) = 0; + virtual bool CheckConnect ( void ) = 0; + virtual bool IsLowViolenceClient( void ) = 0; + virtual int GetSplitScreenOwner( void ) = 0; + virtual int GetNumPlayers( void ) = 0; }; #endif // ICLIENT_H diff --git a/public/icvar.h b/public/icvar.h index d3ee53af..cae71bc8 100644 --- a/public/icvar.h +++ b/public/icvar.h @@ -75,10 +75,6 @@ public: virtual ConCommand *FindCommand( const char *name ) = 0; virtual const ConCommand *FindCommand( const char *name ) const = 0; - // Get first ConCommandBase to allow iteration - virtual ConCommandBase *GetCommands( void ) = 0; - virtual const ConCommandBase *GetCommands( void ) const = 0; - // Install a global change callback (to be called when any convar changes) virtual void InstallGlobalChangeCallback( FnChangeCallback_t callback ) = 0; virtual void RemoveGlobalChangeCallback( FnChangeCallback_t callback ) = 0; @@ -102,9 +98,23 @@ public: #if defined( _X360 ) virtual void PublishToVXConsole( ) = 0; #endif + + virtual void SetMaxSplitScreenSlots( int ) = 0; + virtual int GetMaxSplitScreenSlots() const = 0; + virtual void AddSplitScreenConVars() = 0; + virtual void RemoveSplitScreenConVars( int ) = 0; + virtual int GetConsoleDisplayFuncCount() const = 0; + virtual void GetConsoleText( int, char *, unsigned int ) const = 0; + virtual bool IsMaterialThreadSetAllowed() const = 0; + virtual void QueueMaterialThreadSetValue( ConVar *, const char * ) = 0; + virtual void QueueMaterialThreadSetValue( ConVar *, int ) = 0; + virtual void QueueMaterialThreadSetValue( ConVar *, float ) = 0; + virtual bool HasQueuedMaterialThreadConVarSets() const = 0; + virtual int ProcessQueuedMaterialThreadConVarSets() = 0; + virtual void FactoryInternalIterator() = 0; }; -#define CVAR_INTERFACE_VERSION "VEngineCvar004" +#define CVAR_INTERFACE_VERSION "VEngineCvar007" //----------------------------------------------------------------------------- diff --git a/public/igameevents.h b/public/igameevents.h index f5a90fe6..f4924770 100644 --- a/public/igameevents.h +++ b/public/igameevents.h @@ -93,6 +93,10 @@ public: // FireEvent is called by EventManager if event just occured // KeyValue memory will be freed by manager if not needed anymore virtual void FireGameEvent( IGameEvent *event ) = 0; + virtual int GetEventDebugID( void ) + { + return 0; + } }; abstract_class IGameEventManager2 : public IBaseInterface @@ -117,7 +121,7 @@ public: // create an event by name, but doesn't fire it. returns NULL is event is not // known or no listener is registered for it. bForce forces the creation even if no listener is active - virtual IGameEvent *CreateEvent( const char *name, bool bForce = false ) = 0; + virtual IGameEvent *CreateEvent( const char *name, bool bForce = false, int *unknown=NULL) = 0; // fires a server event created earlier, if bDontBroadcast is set, event is not send to clients virtual bool FireEvent( IGameEvent *event, bool bDontBroadcast = false ) = 0; diff --git a/public/networkstringtabledefs.h b/public/networkstringtabledefs.h index a0eeaf52..0f3ede04 100644 --- a/public/networkstringtabledefs.h +++ b/public/networkstringtabledefs.h @@ -58,6 +58,24 @@ public: virtual void SetStringChangedCallback( void *object, pfnStringChanged changeFunc ) = 0; }; +class INetworkStringDict +{ +public: + + virtual ~INetworkStringDict( void ) {}; + + virtual int Count( void ) = 0; + virtual void Purge( void ) = 0; + virtual const char *String( int index ) = 0; + virtual bool IsValidIndex( int index ) = 0; + virtual int Insert( const char *string ) = 0; + virtual int Find( const char *string ) = 0; + virtual void UpdateDictionary( int ) = 0; + virtual int DictionaryIndex( int ) = 0; + virtual int Element( int ) = 0; + virtual int Element( int ) const = 0; +}; + class INetworkStringTableContainer { public: @@ -65,7 +83,7 @@ public: virtual ~INetworkStringTableContainer( void ) {}; // table creation/destruction - virtual INetworkStringTable *CreateStringTable( const char *tableName, int maxentries, int userdatafixedsize = 0, int userdatanetworkbits = 0 ) = 0; + virtual INetworkStringTable *CreateStringTable( const char *tableName, int maxentries, int userdatafixedsize = 0, int userdatanetworkbits = 0, int ) = 0; virtual void RemoveAllTables( void ) = 0; // table infos @@ -73,8 +91,8 @@ public: virtual INetworkStringTable *GetTable( TABLEID stringTable ) const = 0; virtual int GetNumTables( void ) const = 0; - virtual INetworkStringTable *CreateStringTableEx( const char *tableName, int maxentries, int userdatafixedsize = 0, int userdatanetworkbits = 0, bool bIsFilenames = false ) = 0; virtual void SetAllowClientSideAddString( INetworkStringTable *table, bool bAllowClientSideAddString ) = 0; + virtual INetworkStringDict *CreateDictionary( const char *dictName ) = 0; }; #endif // NETWORKSTRINGTABLEDEFS_H diff --git a/public/tier1/convar.h b/public/tier1/convar.h index ebeee2eb..34b10f91 100644 --- a/public/tier1/convar.h +++ b/public/tier1/convar.h @@ -120,6 +120,10 @@ public: virtual bool IsFlagSet( int flag ) const; // Set flag virtual void AddFlags( int flags ); + // Remove flag + virtual void RemoveFlags( int flags ); + // Get flags + virtual int GetFlags( void ) const; // Return name of cvar virtual const char *GetName( void ) const; @@ -342,13 +346,14 @@ public: virtual ~ConVar( void ); + virtual bool IsCommand( void ) const; virtual bool IsFlagSet( int flag ) const; + virtual void AddFlags( int flags ); + virtual int GetFlags( void ) const; + virtual const char *GetName( void ) const; virtual const char* GetHelpText( void ) const; virtual bool IsRegistered( void ) const; - virtual const char *GetName( void ) const; - virtual void AddFlags( int flags ); - virtual bool IsCommand( void ) const; - + // Install a change callback (there shouldn't already be one....) void InstallChangeCallback( FnChangeCallback_t callback ); @@ -357,6 +362,12 @@ public: FORCEINLINE_CVAR int GetInt( void ) const; FORCEINLINE_CVAR bool GetBool() const { return !!GetInt(); } FORCEINLINE_CVAR char const *GetString( void ) const; + + // Used internally by OneTimeInit to initialize. + virtual void Init(); + + virtual const char *GetBaseName( void ) const; + virtual int GetSplitScreenPlayerSlot ( void ) const; // Any function that allocates/frees memory needs to be virtual or else you'll have crashes // from alloc/free across dll/exe boundaries. @@ -388,9 +399,6 @@ private: const char *pHelpString = 0, bool bMin = false, float fMin = 0.0, bool bMax = false, float fMax = false, FnChangeCallback_t callback = 0 ); - // Used internally by OneTimeInit to initialize. - virtual void Init(); - private: // This either points to "this" or it points to the original declaration of a ConVar. diff --git a/public/tier1/iconvar.h b/public/tier1/iconvar.h index 53a7e126..d673b027 100644 --- a/public/tier1/iconvar.h +++ b/public/tier1/iconvar.h @@ -104,10 +104,13 @@ public: // Return name of command virtual const char *GetName( void ) const = 0; + virtual const char *GetBaseName( void ) const = 0; // Accessors.. not as efficient as using GetState()/GetInfo() // if you call these methods multiple times on the same IConVar virtual bool IsFlagSet( int nFlag ) const = 0; + + virtual int GetSplitScreenPlayerSlot( void ) const = 0; }; diff --git a/tier1/convar.cpp b/tier1/convar.cpp index 5b693937..3a1b6696 100644 --- a/tier1/convar.cpp +++ b/tier1/convar.cpp @@ -241,6 +241,16 @@ void ConCommandBase::AddFlags( int flags ) #endif } +void ConCommandBase::RemoveFlags( int flags ) +{ + m_nFlags &= ~flags; +} + +int ConCommandBase::GetFlags( void ) const +{ + return m_nFlags; +} + //----------------------------------------------------------------------------- // Purpose: @@ -715,6 +725,11 @@ void ConVar::AddFlags( int flags ) #endif } +int ConVar::GetFlags( void ) const +{ + return m_pParent->m_nFlags; +} + bool ConVar::IsRegistered( void ) const { return m_pParent->m_bRegistered; @@ -743,6 +758,16 @@ void ConVar::Init() BaseClass::Init(); } +const char *ConVar::GetBaseName( void ) const +{ + return m_pParent->m_pszName; +} + +int ConVar::GetSplitScreenPlayerSlot( void ) const +{ + return 0; +} + //----------------------------------------------------------------------------- // Purpose: // Input : *value -