2021-12-25 22:36:38 +01:00
|
|
|
#pragma once
|
|
|
|
#include "mathlib/vector.h"
|
|
|
|
|
|
|
|
enum class HostStates_t : int
|
|
|
|
{
|
|
|
|
HS_NEW_GAME = 0x0,
|
|
|
|
HS_LOAD_GAME = 0x1,
|
|
|
|
HS_CHANGE_LEVEL_SP = 0x2,
|
|
|
|
HS_CHANGE_LEVEL_MP = 0x3,
|
|
|
|
HS_RUN = 0x4,
|
|
|
|
HS_GAME_SHUTDOWN = 0x5,
|
|
|
|
HS_SHUTDOWN = 0x6,
|
|
|
|
HS_RESTART = 0x7,
|
|
|
|
};
|
|
|
|
|
|
|
|
class CHostState
|
|
|
|
{
|
|
|
|
public:
|
2022-04-12 02:48:46 +02:00
|
|
|
|
|
|
|
FORCEINLINE static void FrameUpdate(CHostState* rcx, void* rdx, float time);
|
2022-02-27 19:47:29 +01:00
|
|
|
FORCEINLINE void LoadConfig(void) const;
|
2022-02-19 02:31:16 +01:00
|
|
|
|
2022-04-12 02:48:46 +02:00
|
|
|
FORCEINLINE void Init(void);
|
2022-02-24 01:51:11 +01:00
|
|
|
FORCEINLINE void Setup(void) const;
|
2022-02-27 19:47:29 +01:00
|
|
|
FORCEINLINE void Think(void) const;
|
2022-02-19 02:31:16 +01:00
|
|
|
|
2022-02-24 01:51:11 +01:00
|
|
|
FORCEINLINE void GameShutDown(void);
|
2022-03-01 02:39:46 +01:00
|
|
|
FORCEINLINE void UnloadPakFile(void);
|
2022-02-19 02:31:16 +01:00
|
|
|
|
2022-03-01 02:39:46 +01:00
|
|
|
FORCEINLINE void State_NewGame(void);
|
2022-02-24 01:51:11 +01:00
|
|
|
FORCEINLINE void State_ChangeLevelSP(void);
|
|
|
|
FORCEINLINE void State_ChangeLevelMP(void);
|
2022-02-19 02:31:16 +01:00
|
|
|
|
|
|
|
public:
|
|
|
|
HostStates_t m_iCurrentState; //0x0000
|
|
|
|
HostStates_t m_iNextState; //0x0004
|
|
|
|
Vector3 m_vecLocation; //0x0008
|
|
|
|
QAngle m_angLocation; //0x0014
|
|
|
|
char m_levelName[64]; //0x0020
|
|
|
|
char m_mapGroupName[256]; //0x0060
|
|
|
|
char m_landMarkName[256]; //0x0160
|
|
|
|
float m_flShortFrameTime; //0x0260
|
|
|
|
bool m_bActiveGame; //0x0264
|
|
|
|
bool m_bRememberLocation; //0x0265
|
|
|
|
bool m_bBackgroundLevel; //0x0266
|
|
|
|
bool m_bWaitingForConnection; //0x0267
|
|
|
|
bool m_bSplitScreenConnect; //0x0268
|
|
|
|
bool m_bGameHasShutDownAndFlushedMemory; //0x0269
|
|
|
|
bool m_bWorkshopMapDownloadPending; //0x026A
|
2021-12-25 22:36:38 +01:00
|
|
|
};
|
|
|
|
|
2022-04-09 02:18:57 +02:00
|
|
|
/* ==== CHOSTSTATE ====================================================================================================================================================== */
|
2022-04-12 02:48:46 +02:00
|
|
|
inline CMemory p_CHostState_FrameUpdate = nullptr; /*48 89 5C 24 08 48 89 6C 24 20 F3 0F 11 54 24 18*/
|
|
|
|
inline auto CHostState_FrameUpdate = p_CHostState_FrameUpdate.RCast<void(*)(CHostState* rcx, void* rdx, float time)>();
|
2021-12-25 22:36:38 +01:00
|
|
|
|
2022-04-12 02:48:46 +02:00
|
|
|
inline CMemory p_CHostState_State_Run = nullptr; /*48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 0F 29 70 C8 45 33 E4*/
|
|
|
|
inline auto CHostState_State_Run = p_CHostState_State_Run.RCast<void(*)(HostStates_t* pState, void* pUnused, float flFrameTime)>();
|
|
|
|
|
|
|
|
inline CMemory p_CHostState_GameShutDown = nullptr; /*48 89 5C 24 ? 57 48 83 EC 20 48 8B D9 E8 ? ? ? ? 48 8B 0D ? ? ? ?*/
|
|
|
|
inline auto CHostState_GameShutDown = p_CHostState_GameShutDown.RCast<void(*)(CHostState* thisptr)>();
|
2021-12-25 22:36:38 +01:00
|
|
|
|
2022-03-01 02:39:46 +01:00
|
|
|
extern bool g_bLevelResourceInitialized;
|
2022-02-19 02:31:16 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
2021-12-25 22:36:38 +01:00
|
|
|
void CHostState_Attach();
|
|
|
|
void CHostState_Detach();
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
extern CHostState* g_pHostState;
|
|
|
|
|
2022-04-12 02:48:46 +02:00
|
|
|
//48 8B C4 ?? 41 54 41 ?? 48 81 EC ? ? ? ? F2 0F 10 05 ? ? ? ?, xxx?xxx?xxx????xxxx????
|
2021-12-25 22:36:38 +01:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class HHostState : public IDetour
|
|
|
|
{
|
2022-04-11 01:44:30 +02:00
|
|
|
virtual void GetAdr(void) const
|
2021-12-25 22:36:38 +01:00
|
|
|
{
|
2022-04-12 02:48:46 +02:00
|
|
|
std::cout << "| FUN: CHostState::FrameUpdate : 0x" << std::hex << std::uppercase << p_CHostState_FrameUpdate.GetPtr() << std::setw(nPad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: CHostState::State_Run : 0x" << std::hex << std::uppercase << p_CHostState_State_Run.GetPtr() << std::setw(nPad) << " |" << std::endl;
|
|
|
|
std::cout << "| FUN: CHostState::GameShutDown : 0x" << std::hex << std::uppercase << p_CHostState_GameShutDown.GetPtr() << std::setw(nPad) << " |" << std::endl;
|
|
|
|
std::cout << "| VAR: g_pHostState : 0x" << std::hex << std::uppercase << g_pHostState << std::setw(0) << " |" << std::endl;
|
2021-12-25 22:36:38 +01:00
|
|
|
std::cout << "+----------------------------------------------------------------+" << std::endl;
|
|
|
|
}
|
2022-04-12 02:48:46 +02:00
|
|
|
virtual void GetFun(void) const
|
|
|
|
{
|
|
|
|
p_CHostState_FrameUpdate = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x89\x5C\x24\x08\x48\x89\x6C\x24\x20\xF3\x0F\x11\x54\x24\x18"), "xxxxxxxxxxxxxxxx");
|
|
|
|
CHostState_FrameUpdate = p_CHostState_FrameUpdate.RCast<void(*)(CHostState*, void*, float)>();
|
|
|
|
p_CHostState_State_Run = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x8B\xC4\x48\x89\x58\x10\x48\x89\x70\x18\x48\x89\x78\x20\x55\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8D\xA8\x00\x00\x00\x00\x48\x81\xEC\x00\x00\x00\x00\x0F\x29\x70\xC8\x45\x33\xE4"), "xxxxxxxxxxxxxxxxxxxxxxxxxxx????xxx????xxxxxxx");
|
|
|
|
CHostState_State_Run = p_CHostState_State_Run.RCast<void(*)(HostStates_t*, void*, float)>();
|
|
|
|
|
|
|
|
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
|
|
|
|
p_CHostState_GameShutDown = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x89\x5C\x24\x00\x56\x48\x83\xEC\x20\x8B\x05\x00\x00\x00\x00\x48\x8B\xF1"), "xxxx?xxxxxxx????xxx");
|
|
|
|
CHostState_GameShutDown = p_CHostState_GameShutDown.RCast<void(*)(CHostState* thisptr)>();
|
|
|
|
#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
|
|
|
|
p_CHostState_GameShutDown = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x89\x5C\x24\x00\x57\x48\x83\xEC\x20\x48\x8B\xD9\xE8\x00\x00\x00\x00\x48\x8B\x0D\x00\x00\x00\x00"), "xxxx?xxxxxxxxx????xxx????");
|
|
|
|
CHostState_GameShutDown = p_CHostState_GameShutDown.RCast<void(*)(CHostState* thisptr)>();
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
virtual void GetVar(void) const
|
|
|
|
{
|
|
|
|
g_pHostState = p_CHostState_FrameUpdate.FindPatternSelf("48 8D ?? ?? ?? ?? 01", CMemory::Direction::DOWN, 100).ResolveRelativeAddressSelf(0x3, 0x7).RCast<CHostState*>();
|
|
|
|
}
|
2022-04-11 01:44:30 +02:00
|
|
|
virtual void GetCon(void) const { }
|
|
|
|
virtual void Attach(void) const { }
|
|
|
|
virtual void Detach(void) const { }
|
2021-12-25 22:36:38 +01:00
|
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
REGISTER(HHostState);
|