////////////////////////////////////////////////////////////////////// // // Game source code // // File: Game.h // // History: // -August 02,2001: Create by Alberto Demichelis // -Sep 24,2001 Modified by Petar Kotevski // ////////////////////////////////////////////////////////////////////// #ifndef GAME_GAME_H #define GAME_GAME_H #if _MSC_VER > 1000 # pragma once #endif ////////////////////////////////////////////////////////////////////// #ifdef FARCRYDLL_EXPORTS #define GAMEAPI __declspec(dllexport) #else #define GAMEAPI __declspec(dllimport) #endif ////////////////////////////////////////////////////////////////////////////////////////////// // Version of the game #define GAME_MAIN_VERSION 1 //!< [0..255] #define GAME_SUB_VERSION 3 //!< [0..255] patch version number, shown in menu #define GAME_PATCH_VERSION 3 //!< [0..256*256[ #define SERVERINFO_FORMAT_VERSION 87 //!< [0..255] bump if server info format changes (old version won't show up any more) #define NETWORK_FORMAT_VERSION 5 //!< [0..2^32] bump if netcode stream format changes #define SAVEVERSION 23 // [Petar] Do not bump this value anymore it shows the release version of the savegame - it will always be supported #define PATCH1_SAVEVERSION 24 // [Kirill] Do not bump this value anymore it shows the Patch 1 version of the savegame - it will always be supported #define PATCH2_SAVEVERSION 36 //!< bump this if the savegame format changes and we are still working on patch 2 #define GAME_VERSION_SUFIX "F" //!< A - alpha, B - beta, RC - release candidate, F - final #define MAKE_GAME_VERSION(m,s,p) (((m)<<24)|((s)<<16)|(p)) #define GAME_VERSION MAKE_GAME_VERSION(GAME_MAIN_VERSION,GAME_SUB_VERSION,GAME_PATCH_VERSION) #define ENTITYTYPE_PLAYER 0x00000001 #define ENTITYTYPE_WAYPOINT 0x00000002 #define ENTITYTYPE_OWNTEAM 0x00000004 #define SAVEMAGIC "CRYLEVELSAVE" // game states enum { CGS_INPROGRESS=0, CGS_COUNTDOWN=1, CGS_PREWAR=2, CGS_INTERMISSION=3 }; #include "XNetwork.h" #include "BitStream_Base.h" // CBitStream_Base #include "BitStream_Compressed.h" // CBitStream_Compressed //forward declarations ////////////////////////////////////////////////////////////////////// class CScriptObjectGame; class CScriptObjectInput; class CScriptObjectBoids; class CScriptObjectGUI; struct ISystem; struct I3DEngine; class CXServer; class CXClient; class CUIHud; class CXServerRules; class CWeaponSystemEx; class CVehicleSystem; class CPlayerSystem; class CFlockManager; class CTagPoint; struct ITagPoint; class CScriptObjectAI; class CIngameDialogMgr; class CViewLayer; class CScriptTimerMgr; class CTeamMgr; class CPlayer; class CMovieUser; class CTimeDemoRecorder; class CUISystem; class CXGame; class CGameMods; enum EventType { EVENT_MOVECMD=0,EVENT_EXPLOSION=1,EVENT_IMPULSE=2,EVENT_VEHDAMAGE=3 }; enum ActionType { ACTIONTYPE_MOVEMENT = 1, ACTIONTYPE_COMBAT, ACTIONTYPE_GAME, ACTIONTYPE_MULTIPLAYER, ACTIONTYPE_DEBUG}; struct BaseEvent { int nRefCount; virtual EventType GetType() = 0; virtual void Write(CStream &stm,int iPhysicalTime, IBitStream *pBitStream ) = 0; virtual void Read(CStream &stm,int &iPhysicalTime, IBitStream *pBitStream ) = 0; virtual void Execute(CXGame *pGame) = 0; }; struct GameEvent { GameEvent() {} GameEvent(const GameEvent &src) { iPhysTime = src.iPhysTime; idx = src.idx; (pEvent = src.pEvent)->nRefCount++; } ~GameEvent() { if (--pEvent->nRefCount<=0) delete pEvent; } GameEvent& operator=(const GameEvent &src) { iPhysTime = src.iPhysTime; idx = src.idx; (pEvent = src.pEvent)->nRefCount++; return *this; } int iPhysTime; int idx; BaseEvent *pEvent; }; #include "XEntityProcessingCmd.h" struct EventPlayerCmd : BaseEvent { EntityId idEntity; CXEntityProcessingCmd cmd; virtual EventType GetType() { return EVENT_MOVECMD; } void Write(CStream &stm, int iPhysicalTime, IBitStream *pBitStream ); void Read(CStream &stm, int &iPhysicalTime, IBitStream *pBitStream ); void Execute(CXGame *pGame); }; struct EventExplosion : BaseEvent { Vec3 pos; float damage; float rmin,rmax,radius; float impulsivePressure; int nTerrainDecalId; int32 nShooterSSID; //!< clientID - neeeded for MP score calculations, -1 if unknown uint16 iImpactForceMul; uint16 iImpactForceMulFinal; uint16 iImpactForceMulFinalTorso; EntityId idShooter; EntityId idWeapon; uint8 shakeFactor; //!< 0..1 uint8 deafnessRadius; //!< 0..20 uint8 deafnessTime; //!< *0.25 to get float uint8 rminOcc; //!< 0..1 uint8 nOccRes; uint8 nGrow; uint8 terrainDefSize; //!< 0..20 virtual EventType GetType() { return EVENT_EXPLOSION; } void Write(CStream &stm, int iPhysicalTime, IBitStream *pBitStream ); void Read(CStream &stm, int &iPhysicalTime, IBitStream *pBitStream ); void Execute(CXGame *pGame); }; struct EventPhysImpulse : BaseEvent { int idPhysEnt; Vec3 impulse; Vec3 pt; Vec3 momentum; bool bHasPt; bool bHasMomentum; virtual EventType GetType() { return EVENT_IMPULSE; } virtual void Write(CStream &stm,int iPhysicalTime, IBitStream *pBitStream ); virtual void Read(CStream &stm,int &iPhysicalTime, IBitStream *pBitStream ); void Execute(CXGame *pGame); }; struct EventVehicleDamage : BaseEvent { EntityId idVehicle; uint8 damage; virtual EventType GetType() { return EVENT_VEHDAMAGE; } virtual void Write(CStream &stm,int iPhysicalTime, IBitStream *pBitStream ); virtual void Read(CStream &stm,int &iPhysicalTime, IBitStream *pBitStream ); void Execute(CXGame *pGame); }; //#define _INTERNET_SIMULATOR //memory stats class ICrySizer; typedef std::vector Vec2Str; typedef Vec2Str::iterator Vec2StrIt; typedef std::list ListOfPlayers; #include "IInput.h" // XActionActivationMode struct ActionInfo { int nId; string sDesc; bool bConfigurable; XActionActivationMode ActivationMode; Vec2Str vecSetToActionMap; // if it is configured via "BindActionMultipleMaps" it will set the key-bindings to all action-maps in this array and leaves the others untouched int nType; }; typedef std::map ActionsEnumMap; typedef ActionsEnumMap::iterator ActionsEnumMapItor; typedef std::multimap TagPointMap; typedef std::map ServerInfosMap; typedef ServerInfosMap::iterator ServerInfosVecItor; struct PreviewMapParams { PreviewMapParams() { bRound=false; SectorsX=0; SectorsY=0; } bool bRound; int SectorsX, SectorsY; }; ////////////////////////////////////////////////////////////////////// #include "IGame.h" #include #include #include #include "EntityClassRegistry.h" #include "StringTableMgr.h" #include "XSurfaceMgr.h" #include "XDemoMgr.h" #include "XArea.h" ////////////////////////////////////////////////////////////////////// class CXGame; class CScriptObjectStream; ////////////////////////////////////////////////////////////////////// typedef std::queue StringQueue; typedef std::set StringSet; class CXGame : public IXGame, public IServerSnooperSink, public INETServerSnooperSink, public IPhysicsStreamer, public IPhysicsEventClient { public: CXGame(); virtual ~CXGame(); void Reset(); void SoftReset(); // interface IGame ---------------------------------------------------------- bool Init(struct ISystem *pSystem,bool bDedicatedSrv,bool bInEditor,const char *szGameMod); bool InitClassRegistry(); bool Update(); bool Run(bool &bRelaunch); void Release() { delete this; } const char *IsMODLoaded(); IGameMods* GetModsInterface(); void AllowQuicksave(bool bAllow) {m_bAllowQuicksave = bAllow;}; bool IsQuicksaveAllowed(void) {return m_bAllowQuicksave;} //! \return 0 before was initialized, otherwise point to the GameMods CGameMods *GetModsList() { return(m_pGameMods); } bool IsSoundPotentiallyHearable(Vec3d &SoundPos, float fClipRadius); void SetTerrainSurface(const char *sMaterial,int nSurfaceID){m_XSurfaceMgr.SetTerrainSurface(sMaterial,nSurfaceID);} //! load level for the editor bool LoadLevelForEditor(const char *pszLevelDirectory,const char *pszMissionName); bool GetLevelMissions( const char *szLevelDir,std::vector &missions ); virtual void UpdateDuringLoading(); IScriptObject *GetScriptObject(); // load level for the game void LoadLevelCS(bool reconnect, const char *szMapName, const char *szMissionName, bool listen); IEntity *GetMyPlayer(); // tagpoint management functions ITagPoint *CreateTagPoint( const string &name, const Vec3 &pos, const Vec3 &angles); virtual ITagPoint *GetTagPoint(const string &name); void RemoveTagPoint(ITagPoint *pPoint); bool RenameTagPoint(const string &oldname, const string &newname); //real internal load level //return true if is loading a saved singleplayer level(this should disappear) bool IsLoadingLevelFromFile(){ return m_bIsLoadingLevelFromFile; } ISystem *GetSystem() { return m_pSystem; } IScriptSystem *GetScriptSystem(){return m_pScriptSystem;} virtual IEntityClassRegistry *GetClassRegistry() { return &m_EntityClassRegistry;} CUIHud* GetHud() const { return (CUIHud*)m_pUIHud; } CXServerRules* GetRules() const; IActionMapManager *GetActionMapManager(){ return m_pIActionMapManager; } IXSystem *GetXSystem(); bool IsOK() { return m_bOK; } void OnSetVar(ICVar *pVar); // Servers management bool StartupServer(bool listen, const char *szName = NULL); void ShutdownServer(); // Client management bool StartupClient(); bool StartupLocalClient(); void ShutdownClient(); void MarkClientForDestruct(); bool IsSynchronizing() { return m_bSynchronizing; } void AdvanceReceivedEntities(int iPhysicalWorldTime); bool HasScheduledEvents(); void ScheduleEvent(int iPhysTime, BaseEvent *pEvent); void ScheduleEvent(IEntity *pEnt, CXEntityProcessingCmd &cmd); //! \param shooterSSID clientID 0..255 or -1 if unknown void ScheduleEvent(int iPhysTime, const Vec3& pos,float fDamage,float rmin,float rmax,float radius,float fImpulsivePressure, float fShakeFactor,float fDeafnessRadius,float fDeafnessTime,float fImpactForceMul, float fImpactForceMulFinal,float fImpactForceMulFinalTorso, float rMinOcc,int nOccRes,int nOccGrow, IEntity *pShooter, int shooterSSID, IEntity *pWeapon, float fTerrainDefSize,int nTerrainDecalId); void ScheduleEvent(int iPhysTime, IEntity *pVehicle,float fDamage); void ScheduleEvent(int iPhysTime, IPhysicalEntity *pPhysEnt,pe_action_impulse *pai); virtual void ExecuteScheduledEvents(); void WriteScheduledEvents(CStream &stm, int &iLastEventWritten, int iTimeDelta=0); void ReadScheduledEvents(CStream &stm); bool UseFixedStep() { return m_iFixedStep2TimeGran!=0; } int GetiFixedStep() { return m_iFixedStep2TimeGran; } float GetFixedStep() { return g_MP_fixed_timestep->GetFVal(); } int QuantizeTime(float fTime) { return (int)(fTime*m_frTimeGran+0.5f*sgn(fTime)); } int SnapTime(float fTime,float fOffset=0.5f) { return m_iFixedStep2TimeGran ? (int)(fTime*m_frFixedStep+0.5f*sgn(fTime))*m_iFixedStep2TimeGran : (int)(fTime*m_frTimeGran+0.5f*sgn(fTime)); } int SnapTime(int iTime,float fOffset=0.5f) { return m_iFixedStep2TimeGran ? (int)(iTime*m_fTimeGran2FixedStep+0.5f*sgn(iTime))*m_iFixedStep2TimeGran : iTime; } //! \param shooterSSID clientID 0..255 or -1 if unknown void CreateExplosion(const Vec3& pos,float fDamage,float rmin,float rmax,float radius,float fImpulsivePressure, float fShakeFactor,float fDeafnessRadius,float fDeafnessTime, float fImpactForceMul,float fImpactForceMulFinal,float fImpactForceMulFinalTorso, float rMinOcc,int nOccRes,int nOccGrow, IEntity *pShooter, int shooterSSID, IEntity *pWeapon, float fTerrainDefSize,int nTerrainDecalId, bool bScheduled=false); //! IPhysicsStreamer (physics-on-demand) callback functions int CreatePhysicalEntity(void *pForeignData,int iForeignData,int iForeignFlags); int DestroyPhysicalEntity(IPhysicalEntity *pent); const char *GetForeignName(void *pForeignData,int iForeignData,int iForeignFlags); ////////////////////////////////////////////////////////////////////////// //! physical events callback functions void OnBBoxOverlap(IPhysicalEntity *pEntity, void *pForeignData,int iForeignData, IPhysicalEntity *pCollider, void *pColliderForeignData,int iColliderForeignData); void OnStateChange(IPhysicalEntity *pEntity, void *pForeignData,int iForeignData, int iOldSimClass,int iNewSimClass); void OnCollision(IPhysicalEntity *pEntity, void *pForeignData,int iForeignData, coll_history_item *pCollision); int OnImpulse(IPhysicalEntity *pEntity, void *pForeignData,int iForeignData, pe_action_impulse *action); void OnPostStep(IPhysicalEntity *pEntity, void *pForeignData,int iForeignData, float fTimeInterval); virtual IPhysicsStreamer *GetPhysicsStreamer() { return this; } virtual IPhysicsEventClient *GetPhysicsEventClient() { return this; } bool ConstrainToSandbox(IEntity *pEntity); // Ingame Dialogs CIngameDialogMgr *GetIngameDialogManager() { return m_pIngameDialogMgr; } void BindAction(const char *sAction,const char *sKeys,const char *sActionMap=NULL, int iKeyPos = -1); void BindActionMultipleMaps(const char *sAction,const char *sKeys, int iKeyPos = -1); bool CheckForAction(const char *sAction); void ClearAction(const char *sAction); // Stuffs... void ProcessPMessages(const char *szMsg); // Return the version of the game const char *GetVersion(); //! functions to know if the current terminal is a server and/or a client //@{ bool IsServer() { return m_pServer!=NULL; } bool IsClient(); bool IsMultiplayer(); // can be used for disabling cheats, or disabling features which cannot be synchronised over a network game bool IsDevModeEnable(); //@} //! save/laod game bool SaveToStream(CStream &stm, Vec3 *pos, Vec3 *angles,string sFilename); bool LoadFromStream(CStream &stm, bool isdemo); bool LoadFromStream_RELEASEVERSION(CStream &str, bool isdemo, CScriptObjectStream &scriptStream); bool LoadFromStream_PATCH_1(CStream &str, bool isdemo, CScriptObjectStream &scriptStream); void Save(string sFileName, Vec3 *pos, Vec3 *angles,bool bFirstCheckpoint=false ); bool Load(string sFileName); void LoadConfiguration(const string &sSystemCfg,const string &sGameCfg); void SaveConfiguration( const char *sSystemCfg,const char *sGameCfg,const char *sProfile); void RemoveConfiguration(string &sSystemCfg,string &sGameCfg,const char *sProfile); void LoadLatest(); virtual CXServer* GetServer() { return m_pServer; } CXClient* GetClient() { return m_pClient; } void SetViewAngles(const Vec3 &angles); CWeaponSystemEx *GetWeaponSystemEx(){ return m_pWeaponSystemEx; } CUISystem *GetUISystem(){ return m_pUISystem; }; void ReloadWeaponScripts(); CVehicleSystem *GetVehicleSystem(){ return m_pVehicleSystem; } CPlayerSystem *GetPlayerSystem(){ return m_pPlayerSystem; } IClient *CreateClient(IClientSink *pSink,bool bLocal=false) { return m_pNetwork->CreateClient(pSink,bLocal); } IServer *CreateServer(IServerSlotFactory *pSink,WORD nPort, bool listen){return m_pNetwork->CreateServer(pSink,nPort,listen);} bool GetPreviewMapPosition(float &x, float &y, float mapx, float mapy, float sizex, float sizey, float zoom, float center_x, float center_y, bool bRound); int GetSector(int nSectorsX, int nSectorsY, float x, float y); void DrawMapPreview(float mapx, float mapy, float sizex, float sizey, float zoom, float center_x, float center_y, float alpha, struct PreviewMapParams *pParams=NULL); void DrawRadar(float x, float y, float w, float h, float fRange, INT_PTR *pRadarTextures, _SmartScriptObject *pEntities, char *pRadarObjective); // Demo recording stuff ------------------------------------------------ bool StartRecording(const char *sFileName); void StopRecording(); bool AddDemoChunk(CStream &stm); void StartDemoPlay(const char *sFileName); void StopDemoPlay(); void PlaybackChunk(); // Weapons ------------------------------------------------------------- INameIterator * GetAvailableWeaponNames(); INameIterator * GetAvailableProjectileNames(); bool AddWeapon(const char *pszName); bool RemoveWeapon(const char *pszName); void RemoveAllWeapons(); bool AddEquipPack(XDOM::IXMLDOMNode *pPack); bool AddEquipPack(const char *pszXML); void SetPlayerEquipPackName(const char *pszPackName); void RestoreWeaponPacks(); // Network ------------------------------------------------------------- //! void RefreshServerList(); //! void OnServerFound(CIPAddress &ip, const string &szServerInfoString, int ping); //! void OnNETServerFound(const CIPAddress &ip, const string &szServerInfoString, int ping); //! void OnNETServerTimeout(const CIPAddress &ip); //! \return might be 0 INETServerSnooper *GetNETSnooper() { return m_pNETServerSnooper; }; //! \return might be 0 IRConSystem *GetIRConSystem() { return m_pRConSystem; }; void SendMessage(const char *str){ m_qMessages.push(str); } bool ExecuteScript(const char *sPath,bool bForceReload=false); void EnableUIOverlay(bool bEnable, bool bExclusiveInput); bool IsUIOverlay(); bool IsInMenu() { return m_bMenuOverlay; }; //!< checks if we are in menu or not void GotoMenu(bool bTriggerOnSwitch = false); //!< arranges the message queue so that the game goes to the menu void GotoGame(bool bTriggerOnSwitch = false); //!< arranges the message queue so that the game goes out of the menu void MenuOn(); //!< enables menu instantly (no message) void MenuOff(); //!< disables menu instantly (no message) void DeleteMessage(const char *szMessage); //!< deletes all occurrences of a specified message from the message queue const char *GetLevelName() { return m_currentLevel.c_str(); } void ResetInputMap(); string GetLevelsFolder() const; protected: void SetConfigToActionMap(const char *pszActionName, ...); //bool LoadMaterials(string sFolder); void InitInputMap(); void InitConsoleCommands(); void InitConsoleVars(); bool IsInPause(IProcess *pProcess); //everything related to vehicle will be in another file //Marco's NOTE: should be the same for other cvars, code and includes, void InitVehicleCvars(); //set the common key bindings for the specified action map. //it reduces code redundancy and makes things more clear. void SetCommonKeyBindings(IActionMap *pActionMap); void OnCollectUserData(INT_PTR nValue,int nCookie); //AMD Port public: void ClearTagPoints(); void SetCurrentUI(CUIHud *pUI); vector2f GetSubtitleSize(const string &szMessage, float sizex, float sizey, const string &szFontName = "default", const string &szFontEffect = "default"); void WriteSubtitle(const string &szMessage, float x, float y, float sizex, float sizey, const color4f &cColor, const string &szFontName = "default", const string &szFontEffect = "default"); bool m_bIsLoadingLevelFromFile;//!< struct IActionMapManager* m_pIActionMapManager; //!< bool m_bDedicatedServer; //!< bool m_bOK; //!< bool m_bUpdateRet; //!< bool m_bRelaunch; //!< bool m_bMovieSystemPaused; ISystem * m_pSystem; //!< The system interface ILog * m_pLog; //!< I3DEngine * m_p3DEngine; //!< The 3D engine interface CXServer * m_pServer; //!< The server of this computer CXClient * m_pClient; //!< The client of this computer int m_nDEBUG_TIMING; float m_fDEBUG_STARTTIMER; //! The dummy client of this computer, required to get the list of servers if //! theres not a real client actually connected and playing IServerSnooper * m_pServerSnooper; //!< used for LAN Multiplayer, to remove control servers INETServerSnooper * m_pNETServerSnooper; //!< used for Internet Multiplayer, to remove control servers IRConSystem * m_pRConSystem; //!< used for Multiplayer, to remote control servers string m_szLastAddress; bool m_bLastDoLateSwitch; bool m_bLastCDAuthentication; CUIHud * m_pUIHud; //!< Hud CUIHud * m_pCurrentUI; //!< for the current ui string m_currentLevel; //!< Name of current level. string m_currentMission; //!< Name of current mission. string m_currentLevelFolder; //!< Folder of the current level. // console variables ----------------------------------------------------------- #ifdef _INTERNET_SIMULATOR ICVar* g_internet_simulator_minping; ICVar* g_internet_simulator_maxping; ICVar* g_internet_simulator_packetloss; #endif ICVar* g_MP_fixed_timestep; ICVar* g_maxfps; ICVar* cl_ThirdPersonRange; ICVar* cl_ThirdPersonRangeBoat; ICVar* cl_ThirdPersonAngle; ICVar* cl_ThirdPersonOffs; ICVar* cl_ThirdPersonOffsAngHor; ICVar* cl_ThirdPersonOffsAngVert; ICVar* cl_scope_flare; ICVar* cl_lazy_weapon; ICVar* cl_weapon_fx; ICVar* cl_projectile_light; ICVar* cl_weapon_light; ICVar* w_underwaterbubbles; ICVar* cl_ViewFace; ICVar* cl_display_hud; ICVar* cl_motiontracker; ICVar* cl_msg_notification; ICVar* cl_hud_name; ICVar* cl_hud_pickup_icons; ICVar* ai_num_of_bots; ICVar* p_name; ICVar* p_color; ICVar* p_model; ICVar* mp_model; ICVar* p_always_run; ICVar* g_language; ICVar* g_playerprofile; ICVar* g_serverprofile; ICVar* g_Render; ICVar* g_GC_Frequence; ICVar* g_GameType; ICVar* g_LeftHanded; ICVar* g_Gore; ICVar* g_InstallerVersion; ICVar* p_speed_run; ICVar* p_sprint_scale; ICVar* p_sprint_decoy; ICVar* p_sprint_restore_run; // restore rate when normal run ICVar* p_sprint_restore_idle; // restore rate whwen not running ICVar* p_speed_walk; ICVar* p_speed_crouch; ICVar* p_speed_prone; ICVar* p_jump_force; ICVar* p_jump_walk_time; ICVar* p_jump_run_time; ICVar* p_jump_walk_d; ICVar* p_jump_walk_h; ICVar* p_jump_run_d; ICVar* p_jump_run_h; ICVar* p_gravity_modifier; //[KIRILL] this console variable makes lean global - it has to be player's per-instance property // to fix bug in MP with leaning // ICVar* p_lean; // lean angle ICVar* p_lean_offset; ICVar* p_bob_pitch; ICVar* p_bob_roll; ICVar* p_bob_length; ICVar* p_bob_weapon; ICVar* p_bob_fcoeff; ICVar* p_waterbob_pitch; ICVar* p_waterbob_pitchspeed; ICVar* p_waterbob_roll; ICVar* p_waterbob_rollspeed; ICVar* p_waterbob_mindepth; ICVar* p_weapon_switch; ICVar* p_deathtime; ICVar* p_restorehalfhealth; ICVar* p_ai_runspeedmult; //combat stance ICVar* p_ai_crouchspeedmult; ICVar* p_ai_pronespeedmult; ICVar* p_ai_rrunspeedmult; //relaxed stance ICVar* p_ai_rwalkspeedmult; ICVar* p_ai_xrunspeedmult; //stealth stance ICVar* p_ai_xwalkspeedmult; ICVar* p_lightrange; ICVar* p_lightfrustum; // player animation control parametrs ICVar* pa_leg_velmoving; ICVar* pa_leg_velidle; ICVar* pa_leg_idletime; ICVar* pa_leg_limitaim; ICVar* pa_leg_limitidle; ICVar* pa_blend0; ICVar* pa_blend1; ICVar* pa_blend2; ICVar* pa_forcerelax; ICVar* pa_spine; ICVar* pa_spine1; ICVar* m_pCVarCheatMode; // limping state ICVar* p_limp; // flashlight stuff ICVar* pl_force; ICVar* pl_dist; ICVar* pl_intensity; ICVar* pl_fadescale; ICVar* pl_head; //mutants jump parameters ICVar* m_jump_vel; ICVar* m_jump_arc; // boat //* ICVar* b_dump; //angular velocity - waiving ICVar* b_dumpRot; //angular velocity - turning ICVar* b_dumpV; //velocity ICVar* b_dumpVH; //velocity ICVar* b_stand; ICVar* b_turn; ICVar* b_tilt; ICVar* b_speedV; ICVar* b_accelerationV; ICVar* b_float; ICVar* b_speedMinTurn; // water waves param ICVar* b_wscale; ICVar* b_wscalew; ICVar* b_wmomentum; // camera mode ICVar* b_camera; /* //fire/burnable ICVar* f_update; ICVar* f_draw; ICVar* f_drawDbg; */ ICVar* g_LevelName; ICVar* g_StartLevel; ICVar* g_StartMission; ICVar *sv_port; ICVar *sv_mapcyclefile; ICVar *sv_cheater_kick; ICVar *sv_cheater_ban; ICVar *sv_timeout; ICVar *cl_timeout; ICVar *cl_loadtimeout; ICVar *cl_snooptimeout; ICVar *cl_snoopretries; ICVar *cl_snoopcount; ICVar* p_CameraSmoothVLimit; ICVar* p_CameraSmoothTime; ICVar* p_CameraSmoothScale; ICVar* p_LeaveVehicleImpuls; ICVar* p_LeaveVehicleBrake; ICVar* p_LeaveVehicleBrakeDelay; ICVar* p_AutoCenterDelay; ICVar* p_AutoCenterSpeed; ICVar* p_HitImpulse; ICVar* p_DeadBody; ICVar* p_RotateHead; ICVar* p_RotateMove; ICVar* p_HeadCamera; ICVar* p_EyeFire; ICVar* a_DrawArea; ICVar* a_LogArea; ICVar* cv_game_Difficulty; ICVar* cv_game_Aggression; ICVar* cv_game_Accuracy; ICVar* cv_game_Health; ICVar* cv_game_AllowAIMovement; ICVar* cv_game_AllAIInvulnerable; ICVar* cv_game_GliderGravity; ICVar* cv_game_GliderBackImpulse; ICVar* cv_game_GliderDamping; ICVar* cv_game_GliderStartGravity; ICVar* cv_game_physics_quality; ICVar* cv_game_subtitles; ICVar* g_timedemo_file; ICVar* h_drawbelow; // show bboxes for static objects below helicopter ICVar* pl_JumpNegativeImpulse; //!< this represent the downward impulse power applied when the player reach the max height of the jump, 0 means no impulse. ICVar* e_deformable_terrain; //!< the Cvar is created in cry3dengine, this is just a pointer float w_recoil_speed_up; float w_recoil_speed_down; float w_recoil_max_degree; float w_accuracy_decay_speed; float w_accuracy_gain_scale; int w_recoil_vertical_only; CStringTableMgr m_StringTableMgr; CXSurfaceMgr m_XSurfaceMgr; CScriptTimerMgr *m_pScriptTimerMgr; // IXArea *CreateArea( const Vec3 *vPoints, const int count, const char** names, const int ncount, const int type=0, const float width=0.0f); IXArea *CreateArea( const Vec3 *vPoints, const int count, const std::vector &names, const int type=0, const int groupId=-1, const float width=0.0f, const float height=0.0f ); IXArea *CreateArea( const Vec3& min, const Vec3& max, const Matrix44& TM, const std::vector &names, const int type=0, const int groupId=-1, const float width=0.0f); IXArea *CreateArea( const Vec3& center, const float radius, const std::vector &names, const int type=0, const int groupId=-1, const float width=0.0f); void DeleteArea( const IXArea *pArea ); IXArea *GetArea( const Vec3 &point ); //! detect areas the listener is in before system update void CheckSoundVisAreas(); //! retrigger them if necessary after system update void RetriggerAreas(); ILipSync* CreateLipSync(); //! plays a cutscene sequence void PlaySequence(const char *pszName,bool bResetFX); //! stops the current cutscene void StopCurrentCutscene(); ActionsEnumMap& GetActionsEnumMap() { return m_mapActionsEnum; } CXAreaMgr m_XAreaMgr; ServerInfosMap m_ServersInfos; //!< Infos about the avaible servers string m_strLastSaveGame; bool m_bEditor; tPlayerPersistentData m_tPlayerPersistentData; //! Rendering callback, called at render of frame. static void OnRenderCallback( void *pGame ); private: // ------------------------------------------------------------ bool ParseLevelName(const char *szLevelName,char *szLevel,char *szMission); float m_fFadingStartTime; char m_szLoadMsg[512]; bool m_bAllowQuicksave; CEntityClassRegistry m_EntityClassRegistry; IScriptSystem * m_pScriptSystem; IRenderer * m_pRenderer; IEntitySystem * m_pEntitySystem; CScriptObjectGame * m_pScriptObjectGame; CScriptObjectInput * m_pScriptObjectInput; CScriptObjectBoids * m_pScriptObjectBoids; CScriptObjectLanguage * m_pScriptObjectLanguage; CScriptObjectAI * m_pScriptObjectAI; CWeaponSystemEx * m_pWeaponSystemEx; CVehicleSystem * m_pVehicleSystem; CPlayerSystem * m_pPlayerSystem; CIngameDialogMgr * m_pIngameDialogMgr; CFlockManager * m_pFlockManager; CMovieUser * m_pMovieUser; CTimeDemoRecorder * m_pTimeDemoRecorder; int m_nPlayerIconTexId; int m_nVehicleIconTexId; int m_nBuildingIconTexId; int m_nUnknownIconTexId; ActionsEnumMap m_mapActionsEnum; //!< Input Stuff(is for the client only but must be here) TagPointMap m_mapTagPoints; //!< Map of tag points by name INetwork * m_pNetwork; CXDemoMgr m_XDemoMgr; StringQueue m_qMessages; bool m_bMenuInitialized; std::vector m_lstEvents; float m_fTimeGran; float m_fFixedStep; float m_fTimeGran2FixedStep; float m_frFixedStep; float m_frTimeGran; int m_iFixedStep2TimeGran; int m_iLastCmdIdx; bool m_bSynchronizing; CBitStream_Base m_BitStreamBase; //!< for little compressed readwrite operation with CStreams (savegame,singleplayer,exported games,demo recording) CBitStream_Compressed m_BitStreamCompressed; //!< for compressed readwrite operation with CStreams (multiplayer) //! Name of the last saved checkpoint. string m_sLastSavedCheckpointFilename; /* //! Time in seconds left to save thumbnail for the last saved checkpoint. //! Only used when saving first checkpoint, when at time of checkpoint save nothing is yet visibly on screen. float m_fTimeToSaveThumbnail; */ CGameMods * m_pGameMods; //!< might be 0 (before game init) public: void LoadingError(const char *szError); bool GetCDPath(string &szCDPath); ////////////////////////////////////////////////////////////////////////// // DevMode. ////////////////////////////////////////////////////////////////////////// void DevModeInit(); void DevModeUpdate(); void DevMode_SavePlayerPos( int index,const char *sTagName=NULL,const char *sDescription=NULL ); void DevMode_LoadPlayerPos( int index,const char *sTagName=NULL ); ////////////////////////////////////////////////////////////////////////// // interface IGame --------------------------------------------------------- virtual void GetMemoryStatistics(ICrySizer *pSizer); virtual void SetViewMode(bool bThirdPerson); //Timur[10/2/2002]void SetScriptGlobalVariables(void); virtual void AddRespawnPoint(ITagPoint *pPoint); virtual void RemoveRespawnPoint(ITagPoint *pPoint); virtual void ResetState(void); virtual void HideLocalPlayer( bool hide,bool bEditor ); virtual void ReloadScripts(); virtual bool GoreOn() const; virtual IBitStream *GetIBitStream(); //! sets a timer for a generic script object table int AddTimer(IScriptObject *pTable,unsigned int nStartTimer,unsigned int nTimer,IScriptObject *pUserData,bool bUpdateDuringPause); void PlaySubtitle(ISound * pSound); bool OpenPacks(const char *szFolder); bool ClosePacks(const char *szFolder); ListOfPlayers m_PlayersWithLighs; //!< bool m_bHideLocalPlayer; //!< CUISystem * m_pUISystem; bool m_bMenuOverlay; //!< bool m_bUIOverlay; //!< bool m_bUIExclusiveInput; //!< bool m_bMapLoadedFromCheckpoint; //!< ListOfPlayers m_DeadPlayers; virtual IXAreaMgr* GetAreaManager() { return &m_XAreaMgr; }; virtual ITagPointManager* GetTagPointManager(); ITagPointManager *m_pTagPointManager; string m_sGameName; virtual int GetInterfaceVersion() { return 1; }; virtual string& GetName() { return m_sGameName; }; virtual bool GetModuleState( EGameCapability eCap ) { switch ( eCap ) { case EGameMultiplayer: return IsMultiplayer(); case EGameClient: return IsClient(); case EGameServer: return IsServer(); case EGameDevMode: return IsDevModeEnable(); default: return false; } }; }; #endif // GAME_GAME_H