mirror of
https://github.com/R2Northstar/NorthstarLauncher
synced 2026-08-23 20:26:04 -04:00
Remove uses of Autohook from clientvideooverrides.cpp (#784)
Run callbacks for nested modules, and prevent running callbacks multiple times for the same module. Manually hook BinkOpen Remove AUTOHOOK_INIT and AUTOHOOK_DISPATCH
This commit is contained in:
parent
aec239ddd7
commit
3a930e481a
1 changed files with 10 additions and 10 deletions
|
|
@ -1,11 +1,7 @@
|
|||
#include "mods/modmanager.h"
|
||||
|
||||
AUTOHOOK_INIT()
|
||||
|
||||
// clang-format off
|
||||
AUTOHOOK_PROCADDRESS(BinkOpen, bink2w64.dll, BinkOpen,
|
||||
void*, __fastcall, (const char* path, uint32_t flags))
|
||||
// clang-format on
|
||||
static void* (*__fastcall o_pBinkOpen)(const char* path, uint32_t flags) = nullptr;
|
||||
static void* __fastcall h_BinkOpen(const char* path, uint32_t flags)
|
||||
{
|
||||
std::string filename(fs::path(path).filename().string());
|
||||
spdlog::info("BinkOpen {}", filename);
|
||||
|
|
@ -25,16 +21,20 @@ void*, __fastcall, (const char* path, uint32_t flags))
|
|||
{
|
||||
// create new path
|
||||
fs::path binkPath(fileOwner->m_ModDirectory / "media" / filename);
|
||||
return BinkOpen(binkPath.string().c_str(), flags);
|
||||
return o_pBinkOpen(binkPath.string().c_str(), flags);
|
||||
}
|
||||
else
|
||||
return BinkOpen(path, flags);
|
||||
return o_pBinkOpen(path, flags);
|
||||
}
|
||||
|
||||
ON_DLL_LOAD_CLIENT("bink2w64.dll", BinkRead, (CModule module))
|
||||
{
|
||||
o_pBinkOpen = module.GetExportedFunction("BinkOpen").RCast<decltype(o_pBinkOpen)>();
|
||||
HookAttach(&(PVOID&)o_pBinkOpen, (PVOID)h_BinkOpen);
|
||||
}
|
||||
|
||||
ON_DLL_LOAD_CLIENT("engine.dll", BinkVideo, (CModule module))
|
||||
{
|
||||
AUTOHOOK_DISPATCH()
|
||||
|
||||
// remove engine check for whether the bik we're trying to load exists in r2/media, as this will fail for biks in mods
|
||||
// note: the check in engine is actually unnecessary, so it's just useless in practice and we lose nothing by removing it
|
||||
module.Offset(0x459AD).NOP(6);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue