Engine: detour function CEngineAPI::OnStartup()

Allows for initializing SDK code before or after CEngineAPI::OnStartup().
This commit is contained in:
Kawe Mazidjatari 2024-11-15 13:49:29 +01:00
parent 7114bc6a40
commit bc54931408
2 changed files with 15 additions and 1 deletions

View File

@ -97,7 +97,7 @@ bool CEngineAPI::VModInit(CEngineAPI* pEngineAPI, const char* pModName, const ch
// Register new Pak Assets here! // Register new Pak Assets here!
//RTech_RegisterAsset(0, 1, "", nullptr, nullptr, nullptr, CMemory(0x1660AD0A8).RCast<void**>(), 8, 8, 8, 0, 0xFFFFFFC); //RTech_RegisterAsset(0, 1, "", nullptr, nullptr, nullptr, CMemory(0x1660AD0A8).RCast<void**>(), 8, 8, 8, 0, 0xFFFFFFC);
bool results = CEngineAPI__ModInit(pEngineAPI, pModName, pGameDir); const bool results = CEngineAPI__ModInit(pEngineAPI, pModName, pGameDir);
if (!IsValveMod(pModName) && !IsRespawnMod(pModName)) if (!IsValveMod(pModName) && !IsRespawnMod(pModName))
{ {
#ifndef DEDICATED #ifndef DEDICATED
@ -109,6 +109,15 @@ bool CEngineAPI::VModInit(CEngineAPI* pEngineAPI, const char* pModName, const ch
return results; return results;
} }
//-----------------------------------------------------------------------------
// One-time setup, based on the initially selected mod
//-----------------------------------------------------------------------------
bool CEngineAPI::OnStartup(CEngineAPI* pEngineAPI, void* pInstance, const char* pStartupModName)
{
const bool results = CEngineAPI__OnStartup(pEngineAPI, pInstance, pStartupModName);
return results;
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Sets startup info // Sets startup info
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -297,6 +306,7 @@ void VSys_Dll2::Detour(const bool bAttach) const
{ {
DetourSetup(&CEngineAPI__Init, &CEngineAPI::VInit, bAttach); DetourSetup(&CEngineAPI__Init, &CEngineAPI::VInit, bAttach);
DetourSetup(&CEngineAPI__ModInit, &CEngineAPI::VModInit, bAttach); DetourSetup(&CEngineAPI__ModInit, &CEngineAPI::VModInit, bAttach);
DetourSetup(&CEngineAPI__OnStartup, &CEngineAPI::OnStartup, bAttach);
DetourSetup(&CEngineAPI__PumpMessages, &CEngineAPI::PumpMessages, bAttach); DetourSetup(&CEngineAPI__PumpMessages, &CEngineAPI::PumpMessages, bAttach);
DetourSetup(&CEngineAPI__MainLoop, &CEngineAPI::MainLoop, bAttach); DetourSetup(&CEngineAPI__MainLoop, &CEngineAPI::MainLoop, bAttach);
DetourSetup(&CEngineAPI__SetStartupInfo, &CEngineAPI::VSetStartupInfo, bAttach); DetourSetup(&CEngineAPI__SetStartupInfo, &CEngineAPI::VSetStartupInfo, bAttach);

View File

@ -32,6 +32,7 @@ public:
static InitReturnVal_t VInit(CEngineAPI* thisp); static InitReturnVal_t VInit(CEngineAPI* thisp);
static bool VModInit(CEngineAPI* pEngineAPI, const char* pModName, const char* pGameDir); static bool VModInit(CEngineAPI* pEngineAPI, const char* pModName, const char* pGameDir);
static bool OnStartup(CEngineAPI* pEngineAPI, void* pInstance, const char* pStartupModName);
static void VSetStartupInfo(CEngineAPI* pEngineAPI, StartupInfo_t* pStartupInfo); static void VSetStartupInfo(CEngineAPI* pEngineAPI, StartupInfo_t* pStartupInfo);
static void PumpMessages(); static void PumpMessages();
@ -49,6 +50,7 @@ inline InitReturnVal_t(*CEngineAPI__Init)(CEngineAPI* thisp);
inline void(*CEngineAPI__Shutdown)(void); inline void(*CEngineAPI__Shutdown)(void);
inline bool(*CEngineAPI__Connect)(CEngineAPI* thisptr, CreateInterfaceFn factory); inline bool(*CEngineAPI__Connect)(CEngineAPI* thisptr, CreateInterfaceFn factory);
inline bool(*CEngineAPI__ModInit)(CEngineAPI* pEngineAPI, const char* pModName, const char* pGameDir); inline bool(*CEngineAPI__ModInit)(CEngineAPI* pEngineAPI, const char* pModName, const char* pGameDir);
inline bool(*CEngineAPI__OnStartup)(CEngineAPI* pEngineAPI, void* pInstance, const char* pStartupModName);
inline bool(*CEngineAPI__MainLoop)(void); inline bool(*CEngineAPI__MainLoop)(void);
inline void(*CEngineAPI__PumpMessages)(void); inline void(*CEngineAPI__PumpMessages)(void);
inline void(*CEngineAPI__SetStartupInfo)(CEngineAPI* pEngineAPI, StartupInfo_t* pStartupInfo); inline void(*CEngineAPI__SetStartupInfo)(CEngineAPI* pEngineAPI, StartupInfo_t* pStartupInfo);
@ -69,6 +71,7 @@ class VSys_Dll2 : public IDetour
LogFunAdr("CEngineAPI::Shutdown", CEngineAPI__Shutdown); LogFunAdr("CEngineAPI::Shutdown", CEngineAPI__Shutdown);
LogFunAdr("CEngineAPI::Connect", CEngineAPI__Connect); LogFunAdr("CEngineAPI::Connect", CEngineAPI__Connect);
LogFunAdr("CEngineAPI::ModInit", CEngineAPI__ModInit); LogFunAdr("CEngineAPI::ModInit", CEngineAPI__ModInit);
LogFunAdr("CEngineAPI::OnStartup", CEngineAPI__OnStartup);
LogFunAdr("CEngineAPI::MainLoop", CEngineAPI__MainLoop); LogFunAdr("CEngineAPI::MainLoop", CEngineAPI__MainLoop);
LogFunAdr("CEngineAPI::PumpMessages", CEngineAPI__PumpMessages); LogFunAdr("CEngineAPI::PumpMessages", CEngineAPI__PumpMessages);
LogFunAdr("CEngineAPI::SetStartupInfo", CEngineAPI__SetStartupInfo); LogFunAdr("CEngineAPI::SetStartupInfo", CEngineAPI__SetStartupInfo);
@ -85,6 +88,7 @@ class VSys_Dll2 : public IDetour
g_GameDll.FindPatternSIMD("48 83 EC 28 48 8B 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 85 C0 48 89 15").GetPtr(CEngineAPI__Connect); g_GameDll.FindPatternSIMD("48 83 EC 28 48 8B 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 85 C0 48 89 15").GetPtr(CEngineAPI__Connect);
g_GameDll.FindPatternSIMD("48 83 EC 28 48 8B 0D ?? ?? ?? ?? 33 D2 48 8B 01 FF 90 ?? ?? ?? ?? B1 01").GetPtr(CEngineAPI__Shutdown); g_GameDll.FindPatternSIMD("48 83 EC 28 48 8B 0D ?? ?? ?? ?? 33 D2 48 8B 01 FF 90 ?? ?? ?? ?? B1 01").GetPtr(CEngineAPI__Shutdown);
g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 4C 24 ?? 55 56 57 41 54 41 55 41 56 41 57 48 81 EC ?? ?? ?? ?? 4D 8B F8").GetPtr(CEngineAPI__ModInit); g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 4C 24 ?? 55 56 57 41 54 41 55 41 56 41 57 48 81 EC ?? ?? ?? ?? 4D 8B F8").GetPtr(CEngineAPI__ModInit);
g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 81 EC ?? ?? ?? ?? 49 8B F8 48 8B DA").GetPtr(CEngineAPI__OnStartup);
g_GameDll.FindPatternSIMD("4C 8B DC 49 89 4B 08 48 81 EC ?? ?? ?? ?? 8B 05 ?? ?? ?? ??").GetPtr(CEngineAPI__MainLoop); g_GameDll.FindPatternSIMD("4C 8B DC 49 89 4B 08 48 81 EC ?? ?? ?? ?? 8B 05 ?? ?? ?? ??").GetPtr(CEngineAPI__MainLoop);
g_GameDll.FindPatternSIMD("44 88 44 24 ?? 53 55 56 57").GetPtr(v_PakFile_Init); g_GameDll.FindPatternSIMD("44 88 44 24 ?? 53 55 56 57").GetPtr(v_PakFile_Init);
g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 55 48 81 EC ?? ?? ?? ?? 45 33 C9").GetPtr(CEngineAPI__PumpMessages); g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 55 48 81 EC ?? ?? ?? ?? 45 33 C9").GetPtr(CEngineAPI__PumpMessages);