123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- /*
- ===========================================================================
- Doom 3 BFG Edition GPL Source Code
- Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
- Doom 3 BFG Edition Source Code 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 3 of the License, or
- (at your option) any later version.
- Doom 3 BFG Edition Source Code 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 Doom 3 BFG Edition Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below.
- If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
- ===========================================================================
- */
- #ifndef __GAME_H__
- #define __GAME_H__
- /*
- ===============================================================================
- Public game interface with methods to run the game.
- ===============================================================================
- */
- // default scripts
- #define SCRIPT_DEFAULTDEFS "script/doom_defs.script"
- #define SCRIPT_DEFAULT "script/doom_main.script"
- #define SCRIPT_DEFAULTFUNC "doom_main"
- struct gameReturn_t {
- gameReturn_t() :
- syncNextGameFrame( false ),
- vibrationLow( 0 ),
- vibrationHigh( 0 ) {
- }
- char sessionCommand[MAX_STRING_CHARS]; // "map", "disconnect", "victory", etc
- 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
- int vibrationLow;
- int vibrationHigh;
- };
- #define TIME_GROUP1 0
- #define TIME_GROUP2 1
- class idGame {
- public:
- virtual ~idGame() {}
- // Initialize the game for the first time.
- virtual void Init() = 0;
- // Shut down the entire game.
- virtual void Shutdown() = 0;
- // Sets the serverinfo at map loads and when it changes.
- virtual void SetServerInfo( const idDict &serverInfo ) = 0;
- // Gets the serverinfo, common calls this before saving the game
- virtual const idDict & GetServerInfo() = 0;
- // Interpolated server time
- virtual void SetServerGameTimeMs( const int time ) = 0;
- // Interpolated server time
- virtual int GetServerGameTimeMs() const = 0;
- virtual int GetSSEndTime() const = 0;
- virtual int GetSSStartTime() const = 0;
- // common calls this before moving the single player game to a new level.
- virtual const idDict & GetPersistentPlayerInfo( int clientNum ) = 0;
- // common 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, idSoundWorld *soundWorld, int gameMode, int randseed ) = 0;
- // Loads a map from a savegame file.
- virtual bool InitFromSaveGame( const char *mapName, idRenderWorld *renderWorld, idSoundWorld *soundWorld, idFile *saveGameFile, idFile *stringTableFile, int saveGameVersion ) = 0;
- // Saves the current game state, common may have written some data to the file already.
- virtual void SaveGame( idFile *saveGameFile, idFile *stringTableFile ) = 0;
- // Pulls the current player location from the game information
- virtual void GetSaveGameDetails( idSaveGameDetails & gameDetails ) = 0;
- // Shut down the current map.
- virtual void MapShutdown() = 0;
- // Caches media referenced from in key/value pairs in the given dictionary.
- virtual void CacheDictionaryMedia( const idDict *dict ) = 0;
- virtual void Preload( const idPreloadManifest &manifest ) = 0;
- // Runs a game frame, may return a session command for level changing, etc
- virtual void RunFrame( idUserCmdMgr & cmdMgr, gameReturn_t & gameReturn ) = 0;
- // Makes rendering and sound system calls to display for a given clientNum.
- virtual bool Draw( int clientNum ) = 0;
- virtual bool HandlePlayerGuiEvent( const sysEvent_t * ev ) = 0;
- // Writes a snapshot of the server game state.
- virtual void ServerWriteSnapshot( idSnapShot & ss ) = 0;
- // Processes a reliable message
- virtual void ProcessReliableMessage( int clientNum, int type, const idBitMsg &msg ) = 0;
- virtual void SetInterpolation( const float fraction, const int serverGameMS, const int ssStartTime, const int ssEndTime ) = 0;
- // Reads a snapshot and updates the client game state.
- virtual void ClientReadSnapshot( const idSnapShot & ss ) = 0;
- // Runs prediction on entities at the client.
- virtual void ClientRunFrame( idUserCmdMgr & cmdMgr, bool lastPredictFrame, gameReturn_t & ret ) = 0;
- // Used to manage divergent time-lines
- virtual int GetTimeGroupTime( int timeGroup ) = 0;
- // Returns a list of available multiplayer game modes
- virtual int GetMPGameModes( const char *** gameModes, const char *** gameModesDisplay ) = 0;
- // Returns a summary of stats for a given client
- virtual void GetClientStats( int clientNum, char *data, const int len ) = 0;
- virtual bool IsInGame() const = 0;
- // Get the player entity number for a network peer.
- virtual int MapPeerToClient( int peer ) const = 0;
- // Get the player entity number of the local player.
- virtual int GetLocalClientNum() const = 0;
- // compute an angle offset to be applied to the given client's aim
- virtual void GetAimAssistAngles( idAngles & angles ) = 0;
- virtual float GetAimAssistSensitivity() = 0;
- // Release the mouse when the PDA is open
- virtual bool IsPDAOpen() const = 0;
- virtual bool IsPlayerChatting() const = 0;
-
- // Creates leaderboards for each map/mode defined.
- virtual void Leaderboards_Init() = 0;
- virtual void Leaderboards_Shutdown() = 0;
- // MAIN MENU FUNCTIONS
- virtual bool InhibitControls() = 0;
- virtual void Shell_Init( const char * filename, idSoundWorld * sw ) = 0;
- virtual void Shell_Cleanup() = 0;
- virtual void Shell_CreateMenu( bool inGame ) = 0;
- virtual void Shell_ClosePause() = 0;
- virtual void Shell_Show( bool show ) = 0;
- virtual bool Shell_IsActive() const = 0;
- virtual bool Shell_HandleGuiEvent( const sysEvent_t * sev ) = 0;
- virtual void Shell_Render() = 0;
- virtual void Shell_ResetMenu() = 0;
- virtual void Shell_SyncWithSession() = 0;
- virtual void Shell_UpdateSavedGames() = 0;
- virtual void Shell_SetCanContinue( bool valid ) = 0;
- virtual void Shell_UpdateClientCountdown( int countdown ) = 0;
- virtual void Shell_UpdateLeaderboard( const idLeaderboardCallback * callback ) = 0;
- virtual void Shell_SetGameComplete() = 0;
- };
- extern idGame * game;
- /*
- ===============================================================================
- Public game interface with methods for in-game editing.
- ===============================================================================
- */
- typedef struct {
- idSoundEmitter * referenceSound; // this is the interface to the sound system, created
- // with idSoundWorld::AllocSoundEmitter() when needed
- idVec3 origin;
- 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
- } refSound_t;
- enum {
- TEST_PARTICLE_MODEL = 0,
- TEST_PARTICLE_IMPACT,
- TEST_PARTICLE_MUZZLE,
- TEST_PARTICLE_FLIGHT,
- TEST_PARTICLE_SELECTED
- };
- class idEntity;
- class idMD5Anim;
- // FIXME: this interface needs to be reworked but it properly separates code for the time being
- class idGameEdit {
- public:
- virtual ~idGameEdit() {}
- // These are the canonical idDict to parameter parsing routines used by both the game and tools.
- virtual void 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 );
- 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 );
- 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 );
- // 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();
- virtual idRenderModel * AF_CreateMesh( const idDict &args, idVec3 &meshOrigin, idMat3 &meshAxis, bool &poseIsSet );
- // Entity selection.
- virtual void ClearEntitySelection();
- 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 );
- virtual const idDict * EntityGetSpawnArgs( idEntity *ent ) const;
- 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 );
- // 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;
- // In game map editing support.
- virtual const idDict * MapGetEntityDict( const char *name ) const;
- virtual void MapSave( const char *path = NULL ) const;
- 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;
- /*
- ===============================================================================
- Game API.
- ===============================================================================
- */
- const int GAME_API_VERSION = 8;
- typedef struct {
- 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
- 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
- } gameImport_t;
- typedef struct {
- int version; // API version
- idGame * game; // interface to run the game
- idGameEdit * gameEdit; // interface for in-game editing
- } gameExport_t;
- extern "C" {
- typedef gameExport_t * (*GetGameAPI_t)( gameImport_t *import );
- }
- #endif /* !__GAME_H__ */
|