mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Use actual pakLoadApi pointer
Actual pakLoadApi pointer used internally.
This commit is contained in:
parent
f0bbc7dbf0
commit
9cfc2b4b6a
@ -384,7 +384,7 @@ Pak_RequestLoad_f
|
||||
*/
|
||||
void Pak_RequestLoad_f(const CCommand& args)
|
||||
{
|
||||
g_pakLoadApi->LoadAsync(args.Arg(1));
|
||||
g_pakLoadApi->LoadAsync(args.Arg(1), AlignedMemAlloc(), NULL, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -431,7 +431,7 @@ void Pak_Swap_f(const CCommand& args)
|
||||
while (pakInfo->m_nStatus != RPakStatus_t::PAK_STATUS_FREED) // Wait till this slot gets free'd.
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
|
||||
g_pakLoadApi->LoadAsync(pakName.c_str());
|
||||
g_pakLoadApi->LoadAsync(pakName.c_str(), AlignedMemAlloc(), NULL, 0);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
|
@ -387,5 +387,5 @@ void RuntimePtc_Init() /* .TEXT */
|
||||
#endif
|
||||
};
|
||||
|
||||
p_CPakFile_OpenFileOffset.Patch(starPakOpenFile);
|
||||
p_Pak_OpenFileOffset.Patch(starPakOpenFile);
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ InitReturnVal_t CMaterialSystem::Init(CMaterialSystem* thisptr)
|
||||
#ifdef MATERIALSYSTEM_NODX
|
||||
// Only load the 'startup.rpak' file, as 'common_early.rpak' has assets
|
||||
// that references assets in 'startup.rpak'.
|
||||
RPakHandle_t pakHandle = g_pakLoadApi->LoadAsync("startup.rpak", AlignedMemAlloc(), 5);
|
||||
RPakHandle_t pakHandle = g_pakLoadApi->LoadAsync("startup.rpak", AlignedMemAlloc(), 5, 0);
|
||||
g_pakLoadApi->WaitAsync(pakHandle);
|
||||
|
||||
// Trick: return INIT_FAILED to disable the loading of hardware
|
||||
|
@ -24,7 +24,7 @@ CUtlVector<RPakHandle_t> g_vLoadedPakHandle;
|
||||
// bUnk -
|
||||
// Output : pak file handle on success, INVALID_PAK_HANDLE on failure
|
||||
//-----------------------------------------------------------------------------
|
||||
RPakHandle_t CPakFile::LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pMalloc, int nIdx, bool bUnk)
|
||||
RPakHandle_t Pak_LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pMalloc, int nIdx, bool bUnk)
|
||||
{
|
||||
RPakHandle_t pakHandle = INVALID_PAK_HANDLE;
|
||||
|
||||
@ -37,7 +37,7 @@ RPakHandle_t CPakFile::LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pM
|
||||
if (FileExists(pakOverridePath.Get()) || FileExists(pakBasePath.Get()))
|
||||
{
|
||||
Msg(eDLL_T::RTECH, "Loading pak file: '%s'\n", szPakFileName);
|
||||
pakHandle = CPakFile_LoadAsync(szPakFileName, pMalloc, nIdx, bUnk);
|
||||
pakHandle = v_Pak_LoadAsync(szPakFileName, pMalloc, nIdx, bUnk);
|
||||
|
||||
if (pakHandle == INVALID_PAK_HANDLE)
|
||||
{
|
||||
@ -56,7 +56,7 @@ RPakHandle_t CPakFile::LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pM
|
||||
// Purpose: unloads loaded pak files
|
||||
// Input : handle -
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPakFile::UnloadPak(RPakHandle_t handle)
|
||||
void Pak_UnloadPak(RPakHandle_t handle)
|
||||
{
|
||||
RPakLoadedInfo_t* pakInfo = g_pRTech->GetPakLoadedInfo(handle);
|
||||
|
||||
@ -68,20 +68,20 @@ void CPakFile::UnloadPak(RPakHandle_t handle)
|
||||
s_bBasePaksInitialized = false;
|
||||
}
|
||||
|
||||
CPakFile_UnloadPak(handle);
|
||||
v_Pak_UnloadPak(handle);
|
||||
}
|
||||
|
||||
void V_RTechGame::Attach() const
|
||||
{
|
||||
DetourAttach(&CPakFile_LoadAsync, &CPakFile::LoadAsync);
|
||||
DetourAttach(&CPakFile_UnloadPak, &CPakFile::UnloadPak);
|
||||
DetourAttach(&v_Pak_LoadAsync, &Pak_LoadAsync);
|
||||
DetourAttach(&v_Pak_UnloadPak, &Pak_UnloadPak);
|
||||
}
|
||||
|
||||
void V_RTechGame::Detach() const
|
||||
{
|
||||
DetourDetach(&CPakFile_LoadAsync, &CPakFile::LoadAsync);
|
||||
DetourDetach(&CPakFile_UnloadPak, &CPakFile::UnloadPak);
|
||||
DetourDetach(&v_Pak_LoadAsync, &Pak_LoadAsync);
|
||||
DetourDetach(&v_Pak_UnloadPak, &Pak_UnloadPak);
|
||||
}
|
||||
|
||||
// Symbols taken from R2 dll's.
|
||||
CPakFile* g_pakLoadApi = new CPakFile();
|
||||
PakLoadFuncs_t* g_pakLoadApi = nullptr;
|
||||
|
@ -1,31 +1,67 @@
|
||||
#pragma once
|
||||
#include "tier0/tslist.h"
|
||||
#include "launcher/launcher.h"
|
||||
#include "public/rtech/ipakfile.h"
|
||||
|
||||
/* ==== RTECH_GAME ====================================================================================================================================================== */
|
||||
inline CMemory p_CPakFile_LoadAsync;
|
||||
inline RPakHandle_t(*CPakFile_LoadAsync)(const char* szPakFileName, CAlignedMemAlloc* pMalloc, int nIdx, bool bUnk);
|
||||
inline CMemory p_Pak_LoadAsync;
|
||||
inline RPakHandle_t(*v_Pak_LoadAsync)(const char* szPakFileName, CAlignedMemAlloc* pMalloc, int nIdx, bool bUnk);
|
||||
|
||||
inline CMemory p_CPakFile_WaitAsync;
|
||||
inline RPakStatus_t(*CPakFile_WaitAsync)(RPakHandle_t handle, void* pFinishCallback);
|
||||
inline CMemory p_Pak_WaitAsync;
|
||||
inline RPakStatus_t(*v_Pak_WaitAsync)(RPakHandle_t handle, void* pFinishCallback);
|
||||
|
||||
inline CMemory p_CPakFile_LoadPak;
|
||||
inline unsigned int (*CPakFile_LoadPak)(void* thisptr, void* a2, uint64_t a3);
|
||||
inline CMemory p_Pak_LoadPak;
|
||||
inline unsigned int (*v_Pak_LoadPak)(void* thisptr, void* a2, uint64_t a3);
|
||||
|
||||
inline CMemory p_CPakFile_UnloadPak;
|
||||
inline void(*CPakFile_UnloadPak)(RPakHandle_t handle);
|
||||
inline CMemory p_Pak_UnloadPak;
|
||||
inline void(*v_Pak_UnloadPak)(RPakHandle_t handle);
|
||||
|
||||
inline CMemory p_CPakFile_OpenFileOffset; // Offset to inlined 'CPakFile::LoadPak_OpenFile'.
|
||||
inline CMemory p_Pak_OpenFileOffset; // Offset to inlined 'Pak_OpenFile'.
|
||||
|
||||
class CPakFile
|
||||
inline RPakStatus_t WaitAsync(RPakHandle_t handle, void* pFinishCallback = nullptr) { return v_Pak_WaitAsync(handle, pFinishCallback); }
|
||||
|
||||
typedef struct PakLoadFuncs_s
|
||||
{
|
||||
public:
|
||||
static RPakHandle_t LoadAsync(const char* szPakFileName, CAlignedMemAlloc* pMalloc = AlignedMemAlloc(), int nIdx = NULL, bool bUnk = false);
|
||||
static inline RPakStatus_t WaitAsync(RPakHandle_t handle, void* pFinishCallback = nullptr) { return CPakFile_WaitAsync(handle, pFinishCallback); }
|
||||
static void UnloadPak(RPakHandle_t handle);
|
||||
};
|
||||
void* LoadPatches;
|
||||
void* RegisterAsset;
|
||||
char unknown0[8];
|
||||
RPakHandle_t (*LoadAsync)(const char* pakFileName, CAlignedMemAlloc* allocator, int nIdx, bool bUnk);
|
||||
void* Func4;
|
||||
void (*UnloadPak)(RPakHandle_t handle);
|
||||
void* Func6;
|
||||
char unknown2[16];
|
||||
void* Func7;
|
||||
void* Func8;
|
||||
RPakStatus_t(*WaitAsync)(RPakHandle_t handle);
|
||||
void* Func10;
|
||||
void* Func11;
|
||||
void* FindByGUID;
|
||||
void* FindByName;
|
||||
char unknown3[8];
|
||||
void* Func14;
|
||||
void* Func15;
|
||||
void* Func16;
|
||||
void* Func17;
|
||||
void* Func18;
|
||||
void* IncrementStreamingAssetCount;
|
||||
void* DecrementStreamingAssetCount;
|
||||
void* IsFullStreamingInstall;
|
||||
char unknown4[48];
|
||||
void* OpenFile;
|
||||
void* CloseFile;
|
||||
void* Func24;
|
||||
void* Func25;
|
||||
void* Func26;
|
||||
void* QueueAsyncFileRead;
|
||||
void* Func28;
|
||||
void* Func29;
|
||||
void* WaitForAsyncFileRead;
|
||||
void* Func31;
|
||||
void* Func32;
|
||||
void* Func33;
|
||||
} PakLoadFuncs_t;
|
||||
|
||||
extern CPakFile* g_pakLoadApi;
|
||||
extern PakLoadFuncs_t* g_pakLoadApi;
|
||||
extern CUtlVector<RPakHandle_t> g_vLoadedPakHandle;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -33,30 +69,34 @@ class V_RTechGame : public IDetour
|
||||
{
|
||||
virtual void GetAdr(void) const
|
||||
{
|
||||
LogFunAdr("CPakFile::LoadAsync", p_CPakFile_LoadAsync.GetPtr());
|
||||
LogFunAdr("CPakFile::WaitAsync", p_CPakFile_WaitAsync.GetPtr());
|
||||
LogFunAdr("CPakFile::LoadPak", p_CPakFile_LoadPak.GetPtr());
|
||||
LogFunAdr("CPakFile::UnloadPak", p_CPakFile_UnloadPak.GetPtr());
|
||||
LogFunAdr("CPakFile::OpenFile", p_CPakFile_OpenFileOffset.GetPtr());
|
||||
LogFunAdr("Pak_LoadAsync", p_Pak_LoadAsync.GetPtr());
|
||||
LogFunAdr("Pak_WaitAsync", p_Pak_WaitAsync.GetPtr());
|
||||
LogFunAdr("Pak_LoadPak", p_Pak_LoadPak.GetPtr());
|
||||
LogFunAdr("Pak_UnloadPak", p_Pak_UnloadPak.GetPtr());
|
||||
LogFunAdr("Pak_OpenFile", p_Pak_OpenFileOffset.GetPtr());
|
||||
LogVarAdr("g_pakLoadApi", reinterpret_cast<uintptr_t>(g_pakLoadApi));
|
||||
}
|
||||
virtual void GetFun(void) const
|
||||
{
|
||||
p_CPakFile_LoadAsync = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 89 03 8B 0B").FollowNearCallSelf();
|
||||
CPakFile_LoadAsync = p_CPakFile_LoadAsync.RCast<RPakHandle_t(*)(const char*, CAlignedMemAlloc*, int, bool)>();
|
||||
p_Pak_LoadAsync = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 89 03 8B 0B").FollowNearCallSelf();
|
||||
v_Pak_LoadAsync = p_Pak_LoadAsync.RCast<RPakHandle_t(*)(const char*, CAlignedMemAlloc*, int, bool)>();
|
||||
|
||||
p_CPakFile_WaitAsync = g_GameDll.FindPatternSIMD("40 53 55 48 83 EC 38 48 89 74 24 ??");
|
||||
CPakFile_WaitAsync = p_CPakFile_WaitAsync.RCast<RPakStatus_t(*)(RPakHandle_t, void*)>();
|
||||
p_Pak_WaitAsync = g_GameDll.FindPatternSIMD("40 53 55 48 83 EC 38 48 89 74 24 ??");
|
||||
v_Pak_WaitAsync = p_Pak_WaitAsync.RCast<RPakStatus_t(*)(RPakHandle_t, void*)>();
|
||||
|
||||
p_CPakFile_LoadPak = g_GameDll.FindPatternSIMD("48 89 4C 24 ?? 56 41 55 48 81 EC ?? ?? ?? ?? 4C");
|
||||
CPakFile_LoadPak = p_CPakFile_LoadPak.RCast<unsigned int (*)(void*, void*, uint64_t)>();
|
||||
p_Pak_LoadPak = g_GameDll.FindPatternSIMD("48 89 4C 24 ?? 56 41 55 48 81 EC ?? ?? ?? ?? 4C");
|
||||
v_Pak_LoadPak = p_Pak_LoadPak.RCast<unsigned int (*)(void*, void*, uint64_t)>();
|
||||
|
||||
p_CPakFile_UnloadPak = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 85 FF 74 0C").FollowNearCallSelf();
|
||||
CPakFile_UnloadPak = p_CPakFile_UnloadPak.RCast<void (*)(RPakHandle_t)>();
|
||||
p_Pak_UnloadPak = g_GameDll.FindPatternSIMD("E8 ?? ?? ?? ?? 85 FF 74 0C").FollowNearCallSelf();
|
||||
v_Pak_UnloadPak = p_Pak_UnloadPak.RCast<void (*)(RPakHandle_t)>();
|
||||
}
|
||||
virtual void GetVar(void) const
|
||||
{
|
||||
g_pakLoadApi = p_LauncherMain.Offset(0x800).FindPatternSelf("48 8D").ResolveRelativeAddressSelf(0x3, 0x7).RCast<PakLoadFuncs_t*>();
|
||||
}
|
||||
virtual void GetVar(void) const { }
|
||||
virtual void GetCon(void) const
|
||||
{
|
||||
p_CPakFile_OpenFileOffset = g_GameDll.FindPatternSIMD("48 89 7C 24 30 C7 44 24 28 ?? ?? ?? 40");
|
||||
p_Pak_OpenFileOffset = g_GameDll.FindPatternSIMD("48 89 7C 24 30 C7 44 24 28 ?? ?? ?? 40");
|
||||
}
|
||||
virtual void Attach(void) const;
|
||||
virtual void Detach(void) const;
|
||||
|
@ -108,8 +108,8 @@ class V_RTechUtils : public IDetour
|
||||
s_pFileHandles = p_StreamDB_Init.Offset(0x70).FindPatternSelf("4C 8D", CMemory::Direction::DOWN, 512, 1).ResolveRelativeAddress(0x3, 0x7).RCast<pFileHandleTracker_t*>();
|
||||
s_pFileArrayMutex = p_StreamDB_Init.Offset(0x70).FindPatternSelf("48 8D 0D", CMemory::Direction::DOWN, 512, 1).ResolveRelativeAddress(0x3, 0x7).RCast<PSRWLOCK*>();
|
||||
|
||||
g_pLoadedPakInfo = p_CPakFile_UnloadPak.FindPattern("48 8D 05", CMemory::Direction::DOWN).ResolveRelativeAddressSelf(0x3, 0x7).RCast<RPakLoadedInfo_t*>();
|
||||
g_pRequestedPakCount = p_CPakFile_UnloadPak.FindPattern("66 89", CMemory::Direction::DOWN, 450).ResolveRelativeAddressSelf(0x3, 0x7).RCast<int16_t*>();
|
||||
g_pLoadedPakInfo = p_Pak_UnloadPak.FindPattern("48 8D 05", CMemory::Direction::DOWN).ResolveRelativeAddressSelf(0x3, 0x7).RCast<RPakLoadedInfo_t*>();
|
||||
g_pRequestedPakCount = p_Pak_UnloadPak.FindPattern("66 89", CMemory::Direction::DOWN, 450).ResolveRelativeAddressSelf(0x3, 0x7).RCast<int16_t*>();
|
||||
g_pLoadedPakCount = &*g_pRequestedPakCount - 1; // '-1' shifts it back with sizeof(int16_t).
|
||||
|
||||
g_pPakGlobals = g_GameDll.FindPatternSIMD("48 8D 1D ?? ?? ?? ?? 45 8D 5A 0E").ResolveRelativeAddressSelf(0x3, 0x7).RCast<RPakGlobals_t*>(); /*48 8D 1D ? ? ? ? 45 8D 5A 0E*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user