#ifndef __GAME_H__ #define __GAME_H__ /* =============================================================================== Public game interface with methods to run the game. =============================================================================== */ // RAVEN BEGIN // bgeisler: moved into scripts directory // default scripts #define SCRIPT_DEFAULTDEFS "scripts/defs.script" #define SCRIPT_DEFAULT "scripts/main.script" // RAVEN END #define SCRIPT_DEFAULTFUNC "doom_main" struct gameReturn_t { char sessionCommand[MAX_STRING_CHARS]; // "map", "disconnect", "victory", etc int consistencyHash; // used to check for network game divergence int health; int heartRate; int stamina; int combat; bool syncNextGameFrame; // used when cinematics are skipped to prevent session from simulating several game frames to // keep the game time in sync with real time }; enum allowReply_t { ALLOW_YES = 0, ALLOW_BADPASS, // core will prompt for password and connect again ALLOW_NOTYET, // core will wait with transmitted message ALLOW_NO // core will abort with transmitted message }; enum escReply_t { ESC_IGNORE = 0, // do nothing ESC_MAIN, // start main menu GUI ESC_GUI // set an explicit GUI }; enum demoState_t { DEMO_NONE, DEMO_RECORDING, DEMO_PLAYING }; enum demoReliableGameMessage_t { DEMO_RECORD_CLIENTNUM, DEMO_RECORD_EXCLUDE, DEMO_RECORD_COUNT }; // // these defines work for all startsounds from all entity types // make sure to change script/doom_defs.script if you add any channels, or change their order // typedef enum { SND_CHANNEL_ANY = SCHANNEL_ANY, SND_CHANNEL_VOICE = SCHANNEL_ONE, SND_CHANNEL_VOICE2, SND_CHANNEL_BODY, SND_CHANNEL_BODY2, SND_CHANNEL_BODY3, SND_CHANNEL_WEAPON, SND_CHANNEL_ITEM, SND_CHANNEL_HEART, SND_CHANNEL_DEMONIC, SND_CHANNEL_RADIO, // internal use only. not exposed to script or framecommands. SND_CHANNEL_AMBIENT, SND_CHANNEL_DAMAGE // RAVEN BEGIN // bdube: added custom to tell us where the end of the predefined list is , SND_CHANNEL_POWERUP, SND_CHANNEL_POWERUP_IDLE, SND_CHANNEL_MP_ANNOUNCER, SND_CHANNEL_CUSTOM // RAVEN END } gameSoundChannel_t; // RAVEN BEGIN // bdube: forward reference class rvClientEffect; // RAVEN END struct ClientStats_t { bool isLastPredictFrame; bool isLagged; bool isNewFrame; }; typedef struct userOrigin_s { idVec3 origin; int followClient; } userOrigin_t; class idGame { public: virtual ~idGame() {} // Initialize the game for the first time. // RAVEN BEGIN // jsinger: attempt to eliminate cross-DLL allocation issues #ifdef RV_UNIFIED_ALLOCATOR virtual void Init( void *(*allocator)( size_t size ), void (*deallocator)( void *ptr ), size_t (*msize)( void *ptr ) ) = 0; #else virtual void Init( void ) = 0; #endif // Shut down the entire game. virtual void Shutdown( void ) = 0; // Set the local client number. Distinguishes listen ( == 0 ) / dedicated ( == -1 ) virtual void SetLocalClient( int clientNum ) = 0; // Sets the user info for a client. // The game can modify the user info in the returned dictionary pointer, server will forward back. virtual const idDict * SetUserInfo( int clientNum, const idDict &userInfo, bool isClient ) = 0; // Retrieve the game's userInfo dict for a client. virtual const idDict * GetUserInfo( int clientNum ) = 0; // Sets the user info for a viewer. // The game can modify the user info in the returned dictionary pointer. virtual const idDict * RepeaterSetUserInfo( int clientNum, const idDict &userInfo ) = 0; // Checks to see if a client is active virtual bool IsClientActive( int clientNum ) = 0; // The game gets a chance to alter userinfo before they are emitted to server. virtual void ThrottleUserInfo( void ) = 0; // Sets the serverinfo at map loads and when it changes. virtual void SetServerInfo( const idDict &serverInfo ) = 0; // The session calls this before moving the single player game to a new level. virtual const idDict & GetPersistentPlayerInfo( int clientNum ) = 0; // The session calls this right before a new level is loaded. virtual void SetPersistentPlayerInfo( int clientNum, const idDict &playerInfo ) = 0; // Loads a map and spawns all the entities. virtual void InitFromNewMap( const char *mapName, idRenderWorld *renderWorld, bool isServer, bool isClient, int randseed ) = 0; // Loads a map from a savegame file. virtual bool InitFromSaveGame( const char *mapName, idRenderWorld *renderWorld, idFile *saveGameFile ) = 0; // Saves the current game state, the session may have written some data to the file already. // RAVEN BEGIN // mekberg: added saveTypes virtual void SaveGame( idFile *saveGameFile, saveType_t saveType = ST_REGULAR ) = 0; // RAVEN END // Shut down the current map. virtual void MapShutdown( void ) = 0; // Caches media referenced from in key/value pairs in the given dictionary. virtual void CacheDictionaryMedia( const idDict *dict ) = 0; // Spawns the player entity to be used by the client. virtual void SpawnPlayer( int clientNum ) = 0; // RAVEN BEGIN // Runs a game frame, may return a session command for level changing, etc // lastCatchupFrame is always true except if we are running several game frames in a row and this one is not the last one // subsystems which can tolerate skipping frames will not run during those catchup frames // several game frames in a row happen when game + renderer time goes above the tick time ( 16ms ) virtual gameReturn_t RunFrame( const usercmd_t *clientCmds, int activeEditors, bool lastCatchupFrame, int serverGameFrame ) = 0; virtual void MenuFrame( void ) = 0; // RAVEN END // Runs a repeater frame virtual void RepeaterFrame( const userOrigin_t *clientOrigins, bool lastCatchupFrame, int serverGameFrame ) = 0; // Makes rendering and sound system calls to display for a given clientNum. virtual bool Draw( int clientNum ) = 0; // Let the game do it's own UI when ESCAPE is used virtual escReply_t HandleESC( idUserInterface **gui ) = 0; // get the games menu if appropriate ( multiplayer ) virtual idUserInterface * StartMenu() = 0; // When the game is running it's own UI fullscreen, GUI commands are passed through here // return NULL once the fullscreen UI mode should stop, or "main" to go to main menu virtual const char * HandleGuiCommands( const char *menuCommand ) = 0; // main menu commands not caught in the engine are passed here virtual void HandleMainMenuCommands( const char *menuCommand, idUserInterface *gui ) = 0; // Early check to deny connect. virtual allowReply_t ServerAllowClient( int clientId, int numClients, const char *IP, const char *guid, const char *password, const char *privatePassword, char reason[MAX_STRING_CHARS] ) = 0; // Connects a client. virtual void ServerClientConnect( int clientNum, const char *guid ) = 0; // Spawns the player entity to be used by the client. virtual void ServerClientBegin( int clientNum ) = 0; // Disconnects a client and removes the player entity from the game. virtual void ServerClientDisconnect( int clientNum ) = 0; // Writes initial reliable messages a client needs to recieve when first joining the game. virtual void ServerWriteInitialReliableMessages( int clientNum ) = 0; // Early check to deny connect. virtual allowReply_t RepeaterAllowClient( int clientId, int numClients, const char *IP, const char *guid, bool repeater, const char *password, const char *privatePassword, char reason[MAX_STRING_CHARS] ) = 0; // Connects a client. virtual void RepeaterClientConnect( int clientNum ) = 0; // Spawns the player entity to be used by the client. virtual void RepeaterClientBegin( int clientNum ) = 0; // Disconnects a client and removes the player entity from the game. virtual void RepeaterClientDisconnect( int clientNum ) = 0; // Writes initial reliable messages a client needs to recieve when first joining the game. virtual void RepeaterWriteInitialReliableMessages( int clientNum ) = 0; // Writes a snapshot of the server game state for the given client. virtual void ServerWriteSnapshot( int clientNum, int sequence, idBitMsg &msg, dword *clientInPVS, int numPVSClients, int lastSnapshotFrame ) = 0; // Patches the network entity states at the server with a snapshot for the given client. virtual bool ServerApplySnapshot( int clientNum, int sequence ) = 0; // Processes a reliable message from a client. virtual void ServerProcessReliableMessage( int clientNum, const idBitMsg &msg ) = 0; // Patches the network entity states at the server with a snapshot for the given client. virtual bool RepeaterApplySnapshot( int clientNum, int sequence ) = 0; // Processes a reliable message from a client. virtual void RepeaterProcessReliableMessage( int clientNum, const idBitMsg &msg ) = 0; // Reads a snapshot and updates the client game state. virtual void ClientReadSnapshot( int clientNum, int snapshotSequence, const int gameFrame, const int gameTime, const int dupeUsercmds, const int aheadOfServer, const idBitMsg &msg ) = 0; // Patches the network entity states at the client with a snapshot. virtual bool ClientApplySnapshot( int clientNum, int sequence ) = 0; // Processes a reliable message from the server. virtual void ClientProcessReliableMessage( int clientNum, const idBitMsg &msg ) = 0; // Runs prediction on entities at the client. virtual gameReturn_t ClientPrediction( int clientNum, const usercmd_t *clientCmds, bool lastPredictFrame = true, ClientStats_t *cs = NULL ) = 0; // RAVEN BEGIN // ddynerman: client game frame virtual void ClientRun( void ) = 0; virtual void ClientEndFrame( void ) = 0; // jshepard: rcon password check virtual void ProcessRconReturn( bool success ) = 0; // RAVEN END virtual bool ValidateServerSettings( const char *map, const char *gameType ) = 0; // Returns a summary of stats for a given client virtual void GetClientStats( int clientNum, char *data, const int len ) = 0; // Switch a player to a particular team virtual void SwitchTeam( int clientNum, int team ) = 0; virtual bool DownloadRequest( const char *IP, const char *guid, const char *paks, char urls[ MAX_STRING_CHARS ] ) = 0; // return true to allow download from the built-in http server virtual bool HTTPRequest( const char *IP, const char *file, bool isGamePak ) = 0; // RAVEN BEGIN // jscott: for the effects system virtual void StartViewEffect( int type, float time, float scale ) = 0; virtual rvClientEffect* PlayEffect( const idDecl *effect, const idVec3& origin, const idMat3& axis, bool loop = false, const idVec3& endOrigin = vec3_origin, bool broadcast = false, bool predictBit = false, effectCategory_t category = EC_IGNORE, const idVec4& effectTint = vec4_one ) = 0; virtual void GetPlayerView( idVec3 &origin, idMat3 &axis ) = 0; virtual const idVec3 GetCurrentGravity( const idVec3& origin, const idMat3& axis ) const = 0; virtual void Translation( trace_t &trace, idVec3 &source, idVec3 &dest, idTraceModel *trm, int clipMask ) = 0; virtual void SpawnClientMoveable ( const char* name, int lifetime, const idVec3& origin, const idMat3& axis, const idVec3& velocity, const idVec3& angular_velocity ) = 0; // bdube: debugging stuff virtual void DebugSetString ( const char* name, const char* value ) = 0; virtual void DebugSetFloat ( const char* name, float value ) = 0; virtual void DebugSetInt ( const char* name, int value ) = 0; virtual const char* DebugGetStatString ( const char* name ) = 0; virtual int DebugGetStatInt ( const char* name ) = 0; virtual float DebugGetStatFloat ( const char* name ) = 0; virtual bool IsDebugHudActive ( void ) const = 0; // rjohnson: for new note taking mechanism virtual bool GetPlayerInfo( idVec3 &origin, idMat3 &axis, int PlayerNum = -1, idAngles *deltaViewAngles = NULL, int reqClientNum = -1 ) = 0; virtual void SetPlayerInfo( idVec3 &origin, idMat3 &axis, int PlayerNum = -1 ) = 0; virtual bool PlayerChatDisabled( int clientNum ) = 0; virtual void SetViewComments( const char *text = 0 ) = 0; // ddynerman: utility functions virtual void GetPlayerName( int clientNum, char* name ) = 0; virtual void GetPlayerClan( int clientNum, char* clan ) = 0; virtual void SetFriend( int clientNum, bool isFriend ) = 0; virtual const char* GetLongGametypeName( const char* gametype ) = 0; virtual void ReceiveRemoteConsoleOutput( const char* output ) = 0; // rjohnson: entity usage stats virtual void ListEntityStats( const idCmdArgs &args ) = 0; // shouchard: for ban lists virtual void RegisterClientGuid( int clientNum, const char *guid ) = 0; virtual bool IsMultiplayer( void ) = 0; // mekberg: added virtual bool InCinematic( void ) = 0; // mekberg: so banlist can be populated outside of multiplayer game virtual void PopulateBanList( idUserInterface* hud ) = 0; virtual void RemoveGuidFromBanList( const char *guid ) = 0; // mekberg: interface virtual void AddGuidToBanList( const char *guid ) = 0; virtual const char* GetGuidByClientNum( int clientNum ) = 0; // jshepard: updating player post-menu virtual void UpdatePlayerPostMainMenu( void ) = 0; virtual void ResetRconGuiStatus( void ) = 0; // RAVEN END // RAVEN BEGIN // mwhitlock: Dynamic memory consolidation #if defined(_RV_MEM_SYS_SUPPORT) virtual void FlushBeforelevelLoad( void ) = 0; #endif // RAVEN END // Set the demo state. virtual void SetDemoState( demoState_t state, bool serverDemo, bool timeDemo ) = 0; // Set the repeater state; engine will call this with true for isRepeater if this is a repeater, and true for serverIsRepeater if we are connected to a repeater virtual void SetRepeaterState( bool isRepeater, bool serverIsRepeater ) = 0; // Writes current network info to a file (used as initial state for demo recording). virtual void WriteNetworkInfo( idFile* file, int clientNum ) = 0; // Reads current network info from a file (used as initial state for demo playback). virtual void ReadNetworkInfo( int gameTime, idFile* file, int clientNum ) = 0; // Let gamecode decide if it wants to accept demos from older releases of the engine. virtual bool ValidateDemoProtocol( int minor_ref, int minor ) = 0; // Write a snapshot for server demo recording. virtual void ServerWriteServerDemoSnapshot( int sequence, idBitMsg &msg, int lastSnapshotFrame ) = 0; // Read a snapshot from a server demo stream. virtual void ClientReadServerDemoSnapshot( int sequence, const int gameFrame, const int gameTime, const idBitMsg &msg ) = 0; // Write a snapshot for repeater clients. virtual void RepeaterWriteSnapshot( int clientNum, int sequence, idBitMsg &msg, dword *clientInPVS, int numPVSClients, const userOrigin_t &pvs_origin, int lastSnapshotFrame ) = 0; // Done writing snapshots for repeater clients. virtual void RepeaterEndSnapshots( void ) = 0; // Read a snapshot from a repeater stream. virtual void ClientReadRepeaterSnapshot( int sequence, const int gameFrame, const int gameTime, const int aheadOfServer, const idBitMsg &msg ) = 0; // Get the currently followed client in demo playback virtual int GetDemoFollowClient( void ) = 0; // Build a bot's userCmd virtual void GetBotInput( int clientNum, usercmd_t &userCmd ) = 0; // Return the name of a gui to override the loading screen virtual const char * GetLoadingGui( const char *mapDeclName ) = 0; // Set any additional gui variables needed by the loading screen virtual void SetupLoadingGui( idUserInterface *gui ) = 0; }; extern idGame * game; /* =============================================================================== Public game interface with methods for in-game editing. =============================================================================== */ struct refSound_t { // RAVEN BEGIN int referenceSoundHandle; // this is the interface to the sound system, created // with idSoundWorld::AllocSoundEmitter() when needed // RAVEN END idVec3 origin; // RAVEN BEGIN // jscott: for Miles doppler idVec3 velocity; // RAVEN END int listenerId; // SSF_PRIVATE_SOUND only plays if == listenerId from PlaceListener // no spatialization will be performed if == listenerID const idSoundShader * shader; // this really shouldn't be here, it is a holdover from single channel behavior float diversity; // 0.0 to 1.0 value used to select which // samples in a multi-sample list from the shader are used bool waitfortrigger; // don't start it at spawn time soundShaderParms_t parms; // override volume, flags, etc }; enum { TEST_PARTICLE_MODEL = 0, TEST_PARTICLE_IMPACT, TEST_PARTICLE_MUZZLE, TEST_PARTICLE_FLIGHT, TEST_PARTICLE_SELECTED }; class idEntity; class idMD5Anim; // RAVEN BEGIN // bdube: more forward declarations class idProgram; class idInterpreter; class idThread; typedef void (*debugInfoProc_t) ( const char* classname, const char* name, const char* value, void *userdata ); // RAVEN END // FIXME: this interface needs to be reworked but it properly separates code for the time being class idGameEdit { public: virtual ~idGameEdit( void ) {} // These are the canonical idDict to parameter parsing routines used by both the game and tools. virtual bool ParseSpawnArgsToRenderLight( const idDict *args, renderLight_t *renderLight ); virtual void ParseSpawnArgsToRenderEntity( const idDict *args, renderEntity_t *renderEntity ); virtual void ParseSpawnArgsToRefSound( const idDict *args, refSound_t *refSound ); // Animation system calls for non-game based skeletal rendering. virtual idRenderModel * ANIM_GetModelFromEntityDef( const char *classname ); virtual const idVec3 &ANIM_GetModelOffsetFromEntityDef( const char *classname ); virtual idRenderModel * ANIM_GetModelFromEntityDef( const idDict *args ); virtual idRenderModel * ANIM_GetModelFromName( const char *modelName ); virtual const idMD5Anim * ANIM_GetAnimFromEntityDef( const char *classname, const char *animname ); // RAVEN BEGIN // bdube: added // scork: added 'const' qualifiers so other stuff would compile virtual const idMD5Anim * ANIM_GetAnimFromEntity( const idEntity* ent, int animNum ); virtual float ANIM_GetAnimPlaybackRateFromEntity ( idEntity* ent, int animNum ); virtual const char* ANIM_GetAnimNameFromEntity ( const idEntity* ent, int animNum ); // RAVEN END virtual int ANIM_GetNumAnimsFromEntityDef( const idDict *args ); virtual const char * ANIM_GetAnimNameFromEntityDef( const idDict *args, int animNum ); virtual const idMD5Anim * ANIM_GetAnim( const char *fileName ); virtual int ANIM_GetLength( const idMD5Anim *anim ); virtual int ANIM_GetNumFrames( const idMD5Anim *anim ); // RAVEN BEGIN // bdube: added virtual const char * ANIM_GetFilename( const idMD5Anim* anim ); virtual int ANIM_ConvertFrameToTime ( const idMD5Anim* anim, int frame ); virtual int ANIM_ConvertTimeToFrame ( const idMD5Anim* anim, int time ); // RAVEN END virtual void ANIM_CreateAnimFrame( const idRenderModel *model, const idMD5Anim *anim, int numJoints, idJointMat *frame, int time, const idVec3 &offset, bool remove_origin_offset ); virtual idRenderModel * ANIM_CreateMeshForAnim( idRenderModel *model, const char *classname, const char *animname, int frame, bool remove_origin_offset ); // RAVEN BEGIN // mekberg: access to animationlib functions for radiant virtual void FlushUnusedAnims( void ); // RAVEN END // Articulated Figure calls for AF editor and Radiant. virtual bool AF_SpawnEntity( const char *fileName ); virtual void AF_UpdateEntities( const char *fileName ); virtual void AF_UndoChanges( void ); virtual idRenderModel * AF_CreateMesh( const idDict &args, idVec3 &meshOrigin, idMat3 &meshAxis, bool &poseIsSet ); // Entity selection. virtual void ClearEntitySelection( void ); virtual int GetSelectedEntities( idEntity *list[], int max ); virtual void AddSelectedEntity( idEntity *ent ); // Selection methods virtual void TriggerSelected(); // Entity defs and spawning. virtual const idDict * FindEntityDefDict( const char *name, bool makeDefault = true ) const; virtual void SpawnEntityDef( const idDict &args, idEntity **ent ); virtual idEntity * FindEntity( const char *name ) const; virtual const char * GetUniqueEntityName( const char *classname ) const; // Entity methods. virtual void EntityGetOrigin( idEntity *ent, idVec3 &org ) const; virtual void EntityGetAxis( idEntity *ent, idMat3 &axis ) const; virtual void EntitySetOrigin( idEntity *ent, const idVec3 &org ); virtual void EntitySetAxis( idEntity *ent, const idMat3 &axis ); virtual void EntityTranslate( idEntity *ent, const idVec3 &org ); // RAVEN BEGIN // scork: const-qualified 'ent' so other things would compile virtual const idDict * EntityGetSpawnArgs( const idEntity *ent ) const; // RAVEN END virtual void EntityUpdateChangeableSpawnArgs( idEntity *ent, const idDict *dict ); virtual void EntityChangeSpawnArgs( idEntity *ent, const idDict *newArgs ); virtual void EntityUpdateVisuals( idEntity *ent ); virtual void EntitySetModel( idEntity *ent, const char *val ); virtual void EntityStopSound( idEntity *ent ); virtual void EntityDelete( idEntity *ent ); virtual void EntitySetColor( idEntity *ent, const idVec3 color ); // RAVEN BEGIN // bdube: added virtual const char* EntityGetName ( idEntity* ent ) const; virtual int EntityToSafeId( idEntity* ent ) const; virtual idEntity * EntityFromSafeId( int safeID) const; virtual void EntitySetSkin ( idEntity *ent, const char* temp ) const; virtual void EntityClearSkin ( idEntity *ent ) const; virtual void EntityShow ( idEntity* ent ) const; virtual void EntityHide ( idEntity* ent ) const; virtual void EntityGetBounds ( idEntity* ent, idBounds &bounds ) const; virtual int EntityPlayAnim ( idEntity* ent, int animNum, int time, int blendtime ); virtual void EntitySetFrame ( idEntity* ent, int animNum, int frame, int time, int blendtime ); virtual void EntityStopAllEffects ( idEntity* ent ); virtual void EntityGetDelta ( idEntity* ent, int fromTime, int toTime, idVec3& delta ); virtual void EntityRemoveOriginOffset ( idEntity* ent, bool remove ); virtual const char* EntityGetClassname ( idEntity* ent ) const; virtual bool EntityIsDerivedFrom ( idEntity* ent, const char* classname ) const; virtual renderEntity_t* EntityGetRenderEntity ( idEntity* ent ); // scork: accessor functions for various utils virtual idEntity * EntityGetNextTeamEntity( idEntity *pEnt ) const; virtual void GetPlayerInfo( idVec3 &v3Origin, idMat3 &mat3Axis, int PlayerNum = -1, idAngles *deltaViewAngles = NULL ) const; virtual void SetPlayerInfo( idVec3 &v3Origin, idMat3 &mat3Axis, int PlayerNum = -1 ) const; virtual void EntitySetName( idEntity* pEnt, const char *psName ); // RAVEN END // Player methods. virtual bool PlayerIsValid() const; virtual void PlayerGetOrigin( idVec3 &org ) const; virtual void PlayerGetAxis( idMat3 &axis ) const; virtual void PlayerGetViewAngles( idAngles &angles ) const; virtual void PlayerGetEyePosition( idVec3 &org ) const; // RAVEN BEGIN // bdube: new game edit stuff virtual bool PlayerTraceFromEye ( trace_t &results, float length, int contentMask ); // Effect methods virtual void EffectRefreshTemplate ( const idDecl *effect ) const; // Light entity methods virtual void LightSetParms ( idEntity* ent, int maxLevel, int currentLevel, float radius ); // Common editing functions virtual int GetGameTime ( int *previous = NULL ) const; virtual void SetGameTime ( int time ) const; virtual bool TracePoint ( trace_t &results, const idVec3 &start, const idVec3 &end, int contentMask ) const; virtual void CacheDictionaryMedia ( const idDict* dict ) const; virtual void SetCamera ( idEntity* camera ) const; // RAVEN BEGIN // bdube: added virtual int GetGameEntityRegisterTime ( void ) const; virtual idEntity* GetFirstSpawnedEntity ( void ) const; virtual idEntity* GetNextSpawnedEntity ( idEntity* from ) const; // jscott: added virtual void DrawPlaybackDebugInfo( void ); virtual void RecordPlayback( const usercmd_t &cmd, idEntity *source ); virtual bool PlayPlayback( void ); virtual void ShutdownPlaybacks( void ); // RAVEN END // Script methods virtual int ScriptGetStatementLineNumber ( idProgram* program, int instructionPointer ) const; virtual const char* ScriptGetStatementFileName ( idProgram* program, int instructionPointer ) const; virtual int ScriptGetStatementOperator ( idProgram* program, int instructionPointer ) const; virtual void* ScriptGetCurrentFunction ( idInterpreter* interpreter ) const; virtual const char* ScriptGetCurrentFunctionName ( idInterpreter* interpreter ) const; virtual int ScriptGetCallstackDepth ( idInterpreter* interpreter ) const; virtual void* ScriptGetCallstackFunction ( idInterpreter* interpreter, int depth ) const; virtual const char* ScriptGetCallstackFunctionName ( idInterpreter* interpreter, int depth ) const; virtual int ScriptGetCallstackStatement ( idInterpreter* interpreter, int depth ) const; virtual bool ScriptIsReturnOperator ( int op ) const; virtual const char* ScriptGetRegisterValue ( idInterpreter* interpreter, const char* varname, int callstackDepth ) const; virtual idThread* ScriptGetThread ( idInterpreter* interpreter ) const; // Thread methods virtual int ThreadGetCount ( void ); virtual idThread* ThreadGetThread ( int index ); virtual const char* ThreadGetName ( idThread* thread ); virtual int ThreadGetNumber ( idThread* thread ); virtual const char* ThreadGetState ( idThread* thread ); // Class externals for entity viewer virtual void GetClassDebugInfo ( const idEntity* entity, debugInfoProc_t proc, void* userdata ); // In game map editing support. virtual const idDict * MapGetEntityDict( const char *name ) const; virtual void MapSave( const char *path = NULL ) const; // RAVEN BEGIN // rjohnson: added entity export virtual bool MapHasExportEntities( void ) const; // scork: simple func for the sound editor virtual const char* MapLoaded( void ) const; // cdr: AASTactical virtual idAASFile* GetAASFile( int i ); // jscott: added entries for memory tracking virtual void PrintMemInfo( MemInfo *mi ); virtual size_t ScriptSummary( const idCmdArgs &args ) const; virtual size_t ClassSummary( const idCmdArgs &args ) const; virtual size_t EntitySummary( const idCmdArgs &args ) const; // RAVEN END virtual void MapSetEntityKeyVal( const char *name, const char *key, const char *val ) const ; virtual void MapCopyDictToEntity( const char *name, const idDict *dict ) const; virtual int MapGetUniqueMatchingKeyVals( const char *key, const char *list[], const int max ) const; virtual void MapAddEntity( const idDict *dict ) const; virtual int MapGetEntitiesMatchingClassWithString( const char *classname, const char *match, const char *list[], const int max ) const; virtual void MapRemoveEntity( const char *name ) const; virtual void MapEntityTranslate( const char *name, const idVec3 &v ) const; }; extern idGameEdit * gameEdit; // RAVEN BEGIN // bdube: game logging /* =============================================================================== Game Log. =============================================================================== */ class rvGameLog { public: virtual ~rvGameLog( void ) {} virtual void Init ( void ) = 0; virtual void Shutdown ( void ) = 0; virtual void BeginFrame ( int time ) = 0; virtual void EndFrame ( void ) = 0; virtual void Set ( const char* keyword, int value ) = 0; virtual void Set ( const char* keyword, float value ) = 0; virtual void Set ( const char* keyword, const char* value ) = 0; virtual void Set ( const char* keyword, bool value ) = 0; virtual void Add ( const char* keyword, int value ) = 0; virtual void Add ( const char* keyword, float value ) = 0; }; extern rvGameLog * gameLog; #define GAMELOG_SET(x,y) {if(g_gamelog.GetBool())gameLog->Set ( x, y );} #define GAMELOG_ADD(x,y) {if(g_gamelog.GetBool())gameLog->Add ( x, y );} #define GAMELOG_SET_IF(x,y,z) {if(g_gamelog.GetBool()&&(z))gameLog->Set ( x, y );} #define GAMELOG_ADD_IF(x,y,z) {if(g_gamelog.GetBool()&&(z))gameLog->Add ( x, y );} // RAVEN END /* =============================================================================== Game API. =============================================================================== */ // 4: network demos // 5: fix idNetworkSystem ( memory / DLL boundary related ) // 6: more network demo APIs // 7: cleanups // 8: added some demo functions to the FS class // 9: bump up for 1.1 patch // 9: Q4 Gold // 10: Patch 2 changes // 14: 1.3 // 26: 1.4 beta // 30: 1.4 // 37: 1.4.2 const int GAME_API_VERSION = 37; struct gameImport_t { int version; // API version idSys * sys; // non-portable system services idCommon * common; // common idCmdSystem * cmdSystem; // console command system idCVarSystem * cvarSystem; // console variable system idFileSystem * fileSystem; // file system idNetworkSystem * networkSystem; // network system idRenderSystem * renderSystem; // render system idSoundSystem * soundSystem; // sound system idRenderModelManager * renderModelManager; // render model manager idUserInterfaceManager * uiManager; // user interface manager idDeclManager * declManager; // declaration manager idAASFileManager * AASFileManager; // AAS file manager idCollisionModelManager * collisionModelManager; // collision model manager // RAVEN BEGIN // jscott: rvBSEManager * bse; // Raven effects system // RAVEN END // RAVEN BEGIN // dluetscher: added the following members to exchange memory system data #ifdef _RV_MEM_SYS_SUPPORT rvHeapArena * heapArena; // main heap arena that all other heaps use rvHeap * systemHeapArray[MAX_SYSTEM_HEAPS]; // array of pointers to rvHeaps that are common to idLib, Game, and executable #endif // RAVEN END }; struct gameExport_t { int version; // API version idGame * game; // interface to run the game idGameEdit * gameEdit; // interface for in-game editing // RAVEN BEGIN // bdube: added rvGameLog * gameLog; // interface for game logging // RAVEN END }; extern "C" { typedef gameExport_t * (*GetGameAPI_t)( gameImport_t *import ); } #endif /* !__GAME_H__ */