diff options
Diffstat (limited to 'NorthstarDedicatedTest/filesystem.cpp')
-rw-r--r-- | NorthstarDedicatedTest/filesystem.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/NorthstarDedicatedTest/filesystem.cpp b/NorthstarDedicatedTest/filesystem.cpp new file mode 100644 index 00000000..135201b6 --- /dev/null +++ b/NorthstarDedicatedTest/filesystem.cpp @@ -0,0 +1,53 @@ +#include "pch.h" +#include "filesystem.h" +#include "hooks.h" +#include "hookutils.h" +#include "sourceinterface.h" + +// hook forward declares +typedef FileHandle_t(*ReadFileFromVPKType)(VPKData* vpkInfo, __int64* b, const char* filename); +ReadFileFromVPKType readFileFromVPK; +FileHandle_t ReadFileFromVPKHook(VPKData* vpkInfo, __int64* b, const char* filename); + +typedef bool(*ReadFromCacheType)(IFileSystem* filesystem, const char* path, void* result); +ReadFromCacheType readFromCache; +bool ReadFromCacheHook(IFileSystem* filesystem, const char* path, void* result); + +SourceInterface<IFileSystem>* g_Filesystem; + +void InitialiseFilesystem(HMODULE baseAddress) +{ + g_Filesystem = new SourceInterface<IFileSystem>("filesystem_stdio.dll", "VFileSystem017"); + + // create hooks + HookEnabler hook; + ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x5CBA0, &ReadFileFromVPKHook, reinterpret_cast<LPVOID*>(&readFileFromVPK)); + ENABLER_CREATEHOOK(hook, (*g_Filesystem)->m_vtable->ReadFromCache, &ReadFromCacheHook, reinterpret_cast<LPVOID*>(&readFromCache)); +} + +bool ShouldReplaceFile(const char* path) +{ + return false; +} + +FileHandle_t ReadFileFromVPKHook(VPKData* vpkInfo, __int64* b, const char* filename) +{ + // move this to a convar at some point when we can read them in native + //spdlog::info("ReadFileFromVPKHook {} {}", filename, vpkInfo->path); + if (ShouldReplaceFile(filename)) + { + *b = -1; + return b; + } + + return readFileFromVPK(vpkInfo, b, filename); +} + +bool ReadFromCacheHook(IFileSystem* filesystem, const char* path, void* result) +{ + // move this to a convar at some point when we can read them in native + //spdlog::info("ReadFromCacheHook {}", path); + + + return readFromCache(filesystem, path, result); +}
\ No newline at end of file |