From d521c6736750981e3931163aa3e9036b8f9d4ab4 Mon Sep 17 00:00:00 2001 From: rexx <67599507+r-ex@users.noreply.github.com> Date: Fri, 19 May 2023 20:21:11 +0100 Subject: [PATCH] Hook CMapLoadHelper ctor This will be used for enabling bsp_lump file loading in the future --- r5dev/engine/modelloader.cpp | 9 +++++++++ r5dev/engine/modelloader.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/r5dev/engine/modelloader.cpp b/r5dev/engine/modelloader.cpp index 04e06749..4bfe7b96 100644 --- a/r5dev/engine/modelloader.cpp +++ b/r5dev/engine/modelloader.cpp @@ -55,15 +55,24 @@ uint64_t CModelLoader::Map_LoadModelGuts(CModelLoader* loader, model_t* model) return CModelLoader__Map_LoadModelGuts(loader, model); } +void CMapLoadHelper::Constructor(CMapLoadHelper* helper, int lumpToLoad) +{ + CMapLoadHelper__CMapLoadHelper(helper, lumpToLoad); +} + /////////////////////////////////////////////////////////////////////////////// void VModelLoader::Attach() const { DetourAttach((LPVOID*)&CModelLoader__LoadModel, &CModelLoader::LoadModel); DetourAttach((LPVOID*)&CModelLoader__Map_LoadModelGuts, &CModelLoader::Map_LoadModelGuts); + + DetourAttach((LPVOID*)&CMapLoadHelper__CMapLoadHelper, &CMapLoadHelper::Constructor); } void VModelLoader::Detach() const { DetourDetach((LPVOID*)&CModelLoader__LoadModel, &CModelLoader::LoadModel); DetourDetach((LPVOID*)&CModelLoader__Map_LoadModelGuts, &CModelLoader::Map_LoadModelGuts); + + DetourDetach((LPVOID*)&CMapLoadHelper__CMapLoadHelper, &CMapLoadHelper::Constructor); } \ No newline at end of file diff --git a/r5dev/engine/modelloader.h b/r5dev/engine/modelloader.h index daa58c68..25384f16 100644 --- a/r5dev/engine/modelloader.h +++ b/r5dev/engine/modelloader.h @@ -50,6 +50,27 @@ public: static uint64_t Map_LoadModelGuts(CModelLoader* loader, model_t* model); }; +class CMapLoadHelper +{ +public: + static void Constructor(CMapLoadHelper* helper, int lumpToLoad); + + +public: + int m_nLumpSize; + int m_nLumpOffset; + int m_nLumpVersion; + unsigned __int8* m_pRawData; + char* m_pData; + unsigned __int8* m_pUncompressedData; + char gap_28[5]; + bool m_bExternal; + bool m_bUnk; + char gap_2F; + int m_nLumpID; + char m_szLumpFilename[260]; +}; + inline CMemory p_CModelLoader__FindModel; inline auto CModelLoader__FindModel = p_CModelLoader__FindModel.RCast(); @@ -68,6 +89,9 @@ inline auto CModelLoader__Map_LoadModelGuts = p_CModelLoader__Map_LoadModelGuts. inline CMemory p_CModelLoader__Map_IsValid; inline auto CModelLoader__Map_IsValid = p_CModelLoader__Map_IsValid.RCast(); +inline CMemory p_CMapLoadHelper__CMapLoadHelper; +inline auto CMapLoadHelper__CMapLoadHelper = p_CMapLoadHelper__CMapLoadHelper.RCast(); + //inline CMemory p_GetSpriteInfo; // DEDICATED PATCH! //inline auto GetSpriteInfo = p_GetSpriteInfo.RCast(); @@ -111,6 +135,10 @@ class VModelLoader : public IDetour //p_GetSpriteInfo = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 41 54 41 55 41 56 41 57 48 83 EC 30 4C 8B BC 24 ?? ?? ?? ??"); #endif //p_BuildSpriteLoadName = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 48 89 7C 24 ?? 41 56 48 81 EC ?? ?? ?? ?? 4D 8B F1 48 8B F2"); + + p_CMapLoadHelper__CMapLoadHelper = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 7C 24 ?? 41 56 48 81 EC 60"); + + CMapLoadHelper__CMapLoadHelper = p_CMapLoadHelper__CMapLoadHelper.RCast(); CModelLoader__FindModel = p_CModelLoader__FindModel.RCast(); CModelLoader__LoadModel = p_CModelLoader__LoadModel.RCast();