From fa8fd28f2ce3f4ce9207783a586ff707f563619d Mon Sep 17 00:00:00 2001
From: pv
Date: Thu, 29 Feb 2024 20:48:37 +0300
Subject: [PATCH 1/2] Prevent excessive address resolving
---
include/RED4ext/CNamePool-inl.hpp | 8 +--
include/RED4ext/CString-inl.hpp | 14 ++---
include/RED4ext/DynArray.hpp | 2 +-
include/RED4ext/GameEngine-inl.hpp | 2 +-
include/RED4ext/Handle.hpp | 2 +-
include/RED4ext/ISerializable-inl.hpp | 10 ++--
include/RED4ext/JobQueue-inl.hpp | 20 +++----
include/RED4ext/Memory/Allocators.hpp | 14 ++---
include/RED4ext/Memory/SharedPtr.hpp | 2 +-
include/RED4ext/Memory/Vault-inl.hpp | 2 +-
include/RED4ext/RTTISystem-inl.hpp | 4 +-
include/RED4ext/RTTITypes-inl.hpp | 56 +++++++++----------
include/RED4ext/RTTITypes.hpp | 6 +-
include/RED4ext/ResourceDepot-inl.hpp | 2 +-
include/RED4ext/ResourceLoader-inl.hpp | 2 +-
include/RED4ext/ResourceLoader.hpp | 12 ++--
include/RED4ext/Scripting/Functions-inl.hpp | 8 +--
include/RED4ext/Scripting/Functions.hpp | 4 +-
include/RED4ext/Scripting/IScriptable-inl.hpp | 4 +-
.../RED4ext/Scripting/OpcodeHandlers-inl.hpp | 2 +-
include/RED4ext/Scripting/Stack-inl.hpp | 2 +-
include/RED4ext/SortedArray.hpp | 2 +-
include/RED4ext/SystemUpdate-inl.hpp | 4 +-
include/RED4ext/TweakDB-inl.hpp | 6 +-
24 files changed, 95 insertions(+), 95 deletions(-)
diff --git a/include/RED4ext/CNamePool-inl.hpp b/include/RED4ext/CNamePool-inl.hpp
index bf3d11a9f..b44d8814c 100644
--- a/include/RED4ext/CNamePool-inl.hpp
+++ b/include/RED4ext/CNamePool-inl.hpp
@@ -12,7 +12,7 @@ RED4EXT_INLINE RED4ext::CName RED4ext::CNamePool::Add(const char* aText)
{
CName result;
- UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCstr);
+ static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCstr);
func(result, aText);
return result;
}
@@ -21,14 +21,14 @@ RED4EXT_INLINE RED4ext::CName RED4ext::CNamePool::Add(const CString& aText)
{
CName result;
- UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCString);
+ static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCString);
func(result, aText);
return result;
}
RED4EXT_INLINE void RED4ext::CNamePool::Add(const CName& aName, const char* aText)
{
- UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddPair);
+ static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddPair);
func(aName, aText);
}
@@ -39,7 +39,7 @@ RED4EXT_INLINE void RED4ext::CNamePool::Add(const CName& aName, const CString& a
RED4EXT_INLINE const char* RED4ext::CNamePool::Get(const CName& aName)
{
- UniversalRelocFunc func(Detail::AddressHashes::CNamePool_Get);
+ static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_Get);
auto result = func(aName);
if (result)
{
diff --git a/include/RED4ext/CString-inl.hpp b/include/RED4ext/CString-inl.hpp
index e41dd48f3..dacf28c62 100644
--- a/include/RED4ext/CString-inl.hpp
+++ b/include/RED4ext/CString-inl.hpp
@@ -19,41 +19,41 @@ RED4EXT_INLINE RED4ext::CString::CString(Memory::IAllocator* aAllocator)
RED4EXT_INLINE RED4ext::CString::CString(const char* aText, Memory::IAllocator* aAllocator)
: CString(aAllocator)
{
- UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str);
+ static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str);
func(this, aText);
}
RED4EXT_INLINE RED4ext::CString::CString(const char* aText, uint32_t aLength, Memory::IAllocator* aAllocator)
: CString(aAllocator)
{
- UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span);
+ static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span);
func(this, aText, aLength);
}
RED4EXT_INLINE RED4ext::CString::CString(const std::string& aText, Memory::IAllocator* aAllocator)
: CString(aAllocator)
{
- UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str);
+ static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str);
func(this, aText.data());
}
RED4EXT_INLINE RED4ext::CString::CString(const std::string_view& aText, Memory::IAllocator* aAllocator)
: CString(aAllocator)
{
- UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span);
+ static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span);
func(this, aText.data(), static_cast(aText.size()));
}
RED4EXT_INLINE RED4ext::CString::CString(const CString& aOther)
: CString()
{
- UniversalRelocFunc func(Detail::AddressHashes::CString_copy);
+ static UniversalRelocFunc func(Detail::AddressHashes::CString_copy);
func(this, aOther);
}
RED4EXT_INLINE RED4ext::CString::~CString()
{
- UniversalRelocFunc func(Detail::AddressHashes::CString_dtor);
+ static UniversalRelocFunc func(Detail::AddressHashes::CString_dtor);
func(this);
}
@@ -70,7 +70,7 @@ RED4EXT_INLINE RED4ext::CString::CString(CString&& aOther) noexcept
RED4EXT_INLINE RED4ext::CString& RED4ext::CString::operator=(const CString& aRhs)
{
- UniversalRelocFunc func(Detail::AddressHashes::CString_copy);
+ static UniversalRelocFunc func(Detail::AddressHashes::CString_copy);
func(this, aRhs);
return *this;
}
diff --git a/include/RED4ext/DynArray.hpp b/include/RED4ext/DynArray.hpp
index 1c912118c..d278ace77 100644
--- a/include/RED4ext/DynArray.hpp
+++ b/include/RED4ext/DynArray.hpp
@@ -188,7 +188,7 @@ struct DynArray
using func_t = void (*)(DynArray * aThis, uint32_t aCapacity, uint32_t aElementSize, uint32_t aAlignment,
void (*a5)(int64_t, int64_t, int64_t, int64_t));
- UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc);
+ static UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc);
func(this, newCapacity, sizeof(T), alignment, nullptr);
}
diff --git a/include/RED4ext/GameEngine-inl.hpp b/include/RED4ext/GameEngine-inl.hpp
index 6d6f677f4..6092f477d 100644
--- a/include/RED4ext/GameEngine-inl.hpp
+++ b/include/RED4ext/GameEngine-inl.hpp
@@ -9,6 +9,6 @@
RED4EXT_INLINE RED4ext::CGameEngine* RED4ext::CGameEngine::Get()
{
- UniversalRelocPtr ptr(Detail::AddressHashes::CGameEngine);
+ static UniversalRelocPtr ptr(Detail::AddressHashes::CGameEngine);
return ptr;
}
diff --git a/include/RED4ext/Handle.hpp b/include/RED4ext/Handle.hpp
index c24c9757a..197c191fb 100644
--- a/include/RED4ext/Handle.hpp
+++ b/include/RED4ext/Handle.hpp
@@ -26,7 +26,7 @@ class Handle : public SharedPtrWithAccess
explicit Handle(T* aPtr)
{
- UniversalRelocFunc ctor(Detail::AddressHashes::Handle_ctor);
+ static UniversalRelocFunc ctor(Detail::AddressHashes::Handle_ctor);
ctor(this, aPtr);
}
diff --git a/include/RED4ext/ISerializable-inl.hpp b/include/RED4ext/ISerializable-inl.hpp
index 0a5bfcf34..e0cacb8f3 100644
--- a/include/RED4ext/ISerializable-inl.hpp
+++ b/include/RED4ext/ISerializable-inl.hpp
@@ -29,7 +29,7 @@ RED4EXT_INLINE void RED4ext::ISerializable::sub_28()
RED4EXT_INLINE bool RED4ext::ISerializable::sub_30()
{
using func_t = bool (*)(ISerializable*);
- UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_30);
+ static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_30);
return func(this);
}
@@ -40,7 +40,7 @@ RED4EXT_INLINE void RED4ext::ISerializable::sub_38()
RED4EXT_INLINE bool RED4ext::ISerializable::sub_40(BaseStream* aStream)
{
using func_t = bool (*)(ISerializable*, BaseStream*);
- UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_40);
+ static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_40);
return func(this, aStream);
}
@@ -79,7 +79,7 @@ RED4EXT_INLINE bool RED4ext::ISerializable::sub_70()
RED4EXT_INLINE int64_t RED4ext::ISerializable::sub_78(int64_t a1, int64_t a2, uint8_t a3, int64_t a4, int64_t a5)
{
using func_t = int64_t (*)(ISerializable*, int64_t, int64_t, uint8_t, int64_t, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_78);
+ static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_78);
return func(this, a1, a2, a3, a4, a5);
}
@@ -106,7 +106,7 @@ RED4EXT_INLINE void* RED4ext::ISerializable::sub_A0()
{
// This is an allocation, but for what?
using func_t = void* (*)(ISerializable*);
- UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_A0);
+ static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_A0);
return func(this);
}
@@ -131,7 +131,7 @@ RED4EXT_INLINE RED4ext::CString RED4ext::ISerializable::sub_B8()
RED4EXT_INLINE void* RED4ext::ISerializable::sub_C0(void* a1)
{
using func_t = void* (*)(ISerializable*, void*);
- UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_C0);
+ static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_C0);
return func(this, a1);
}
diff --git a/include/RED4ext/JobQueue-inl.hpp b/include/RED4ext/JobQueue-inl.hpp
index 9ce38fdab..885bd6aea 100644
--- a/include/RED4ext/JobQueue-inl.hpp
+++ b/include/RED4ext/JobQueue-inl.hpp
@@ -42,7 +42,7 @@ RED4EXT_INLINE RED4ext::JobParamSet::JobParamSet() noexcept
RED4EXT_INLINE RED4ext::JobHandle::JobHandle(uintptr_t aUnk)
{
using func_t = void* (*)(void*, uintptr_t);
- UniversalRelocFunc func(Detail::AddressHashes::JobHandle_ctor);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobHandle_ctor);
unk00 = func(nullptr, aUnk);
}
@@ -50,7 +50,7 @@ RED4EXT_INLINE RED4ext::JobHandle::JobHandle(uintptr_t aUnk)
RED4EXT_INLINE RED4ext::JobHandle::~JobHandle()
{
using func_t = void (*)(JobHandle*);
- UniversalRelocFunc func(Detail::AddressHashes::JobHandle_dtor);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobHandle_dtor);
func(this);
}
@@ -58,7 +58,7 @@ RED4EXT_INLINE RED4ext::JobHandle::~JobHandle()
RED4EXT_INLINE void RED4ext::JobHandle::Join(const JobHandle& aOther)
{
using func_t = void (*)(JobHandle*, const JobHandle&);
- UniversalRelocFunc func(Detail::AddressHashes::JobHandle_Join);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobHandle_Join);
func(this, aOther);
}
@@ -66,7 +66,7 @@ RED4EXT_INLINE void RED4ext::JobHandle::Join(const JobHandle& aOther)
RED4EXT_INLINE RED4ext::JobQueue::JobQueue(const JobGroup& aGroup)
{
using func_t = JobQueue* (*)(JobQueue*, const JobGroup&);
- UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromGroup);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromGroup);
func(this, aGroup);
}
@@ -74,7 +74,7 @@ RED4EXT_INLINE RED4ext::JobQueue::JobQueue(const JobGroup& aGroup)
RED4EXT_INLINE RED4ext::JobQueue::JobQueue(JobParamSet aParams, uintptr_t aUnk)
{
using func_t = JobQueue* (*)(JobQueue*, uint8_t, uint8_t, uint64_t);
- UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromParams);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromParams);
func(this, aParams.unk00, aParams.unk01, aUnk);
}
@@ -82,7 +82,7 @@ RED4EXT_INLINE RED4ext::JobQueue::JobQueue(JobParamSet aParams, uintptr_t aUnk)
RED4EXT_INLINE RED4ext::JobQueue::~JobQueue()
{
using func_t = void (*)(JobQueue*);
- UniversalRelocFunc func(Detail::AddressHashes::JobQueue_dtor);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_dtor);
func(this);
}
@@ -95,7 +95,7 @@ RED4EXT_INLINE void RED4ext::JobQueue::Wait(JobHandle& aJob)
RED4EXT_INLINE [[nodiscard]] RED4ext::JobHandle RED4ext::JobQueue::Capture()
{
using func_t = JobHandle* (*)(JobQueue*, JobHandle*);
- UniversalRelocFunc func(Detail::AddressHashes::JobQueue_Capture);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_Capture);
JobHandle handle{};
func(this, &handle);
@@ -106,8 +106,8 @@ RED4EXT_INLINE [[nodiscard]] RED4ext::JobHandle RED4ext::JobQueue::Capture()
RED4EXT_INLINE void RED4ext::JobQueue::DispatchJob(const JobInstance& aJob)
{
using func_t = uint32_t (*)(void*, const JobInstance&, uint8_t, JobHandle, JobHandle);
- UniversalRelocFunc func(Detail::AddressHashes::JobDispatcher_DispatchJob);
- UniversalRelocPtr dispatcher(Detail::AddressHashes::JobDispatcher);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobDispatcher_DispatchJob);
+ static UniversalRelocPtr dispatcher(Detail::AddressHashes::JobDispatcher);
func(dispatcher, aJob, params.unk00, unk10, unk18);
}
@@ -115,7 +115,7 @@ RED4EXT_INLINE void RED4ext::JobQueue::DispatchJob(const JobInstance& aJob)
RED4EXT_INLINE void RED4ext::JobQueue::SyncWait()
{
using func_t = void (*)(JobQueue*);
- UniversalRelocFunc func(Detail::AddressHashes::JobQueue_SyncWait);
+ static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_SyncWait);
func(this);
}
diff --git a/include/RED4ext/Memory/Allocators.hpp b/include/RED4ext/Memory/Allocators.hpp
index 86f61ea76..645a819e6 100644
--- a/include/RED4ext/Memory/Allocators.hpp
+++ b/include/RED4ext/Memory/Allocators.hpp
@@ -78,7 +78,7 @@ struct Allocator : IAllocator
virtual AllocationResult Alloc(uint32_t aSize) override
{
using alloc_t = void(__fastcall*)(Vault*, AllocationResult*, uint32_t);
- UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_Alloc);
+ static UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_Alloc);
auto pool = T::Get();
auto storage = pool->storage->GetAllocatorStorage();
@@ -96,7 +96,7 @@ struct Allocator : IAllocator
virtual AllocationResult AllocAligned(uint32_t aSize, uint32_t aAlignment) override
{
using alloc_t = void (*)(Vault*, AllocationResult*, uint32_t, uint32_t);
- UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_AllocAligned);
+ static UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_AllocAligned);
auto pool = T::Get();
auto storage = pool->storage->GetAllocatorStorage();
@@ -114,7 +114,7 @@ struct Allocator : IAllocator
virtual AllocationResult Realloc(AllocationResult& aAllocation, uint32_t aSize) override
{
using realloc_t = void (*)(Vault*, AllocationResult*, AllocationResult&, uint32_t);
- UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_Realloc);
+ static UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_Realloc);
auto pool = T::Get();
auto storage = pool->storage->GetAllocatorStorage();
@@ -132,7 +132,7 @@ struct Allocator : IAllocator
virtual AllocationResult ReallocAligned(AllocationResult& aAllocation, uint32_t aSize, uint32_t aAlignment) override
{
using realloc_t = void (*)(Vault*, AllocationResult*, AllocationResult&, uint32_t, uint32_t);
- UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_ReallocAligned);
+ static UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_ReallocAligned);
auto pool = T::Get();
auto storage = pool->storage->GetAllocatorStorage();
@@ -150,7 +150,7 @@ struct Allocator : IAllocator
virtual void Free(AllocationResult& aAllocation) override
{
using func_t = void (*)(Vault*, AllocationResult&);
- UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Free);
+ static UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Free);
auto pool = T::Get();
auto storage = pool->storage->GetAllocatorStorage();
@@ -160,7 +160,7 @@ struct Allocator : IAllocator
virtual void sub_28(void* a2) override
{
using func_t = void (*)(Vault*, void*);
- UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Unk1);
+ static UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Unk1);
auto pool = T::Get();
auto storage = pool->storage->GetAllocatorStorage();
@@ -184,7 +184,7 @@ struct Allocator : IAllocator
inline void OOM(uint32_t aSize, uint32_t aAlignment)
{
using oom_t = AllocationResult (*)(PoolStorage*, uint32_t, uint32_t);
- UniversalRelocFunc oom(Detail::AddressHashes::Memory_PoolStorage_OOM);
+ static UniversalRelocFunc oom(Detail::AddressHashes::Memory_PoolStorage_OOM);
auto pool = T::Get();
oom(pool->storage, aSize, aAlignment);
diff --git a/include/RED4ext/Memory/SharedPtr.hpp b/include/RED4ext/Memory/SharedPtr.hpp
index fba4902b9..5acbd93ef 100644
--- a/include/RED4ext/Memory/SharedPtr.hpp
+++ b/include/RED4ext/Memory/SharedPtr.hpp
@@ -178,7 +178,7 @@ class SharedPtrBase
if (refCount)
{
// This function also deallocates RefCnt when weakRefs reaches 0.
- UniversalRelocFunc decWeakRefFn(Detail::AddressHashes::Handle_DecWeakRef);
+ static UniversalRelocFunc decWeakRefFn(Detail::AddressHashes::Handle_DecWeakRef);
decWeakRefFn(this);
}
}
diff --git a/include/RED4ext/Memory/Vault-inl.hpp b/include/RED4ext/Memory/Vault-inl.hpp
index 3c333e9c6..94799f638 100644
--- a/include/RED4ext/Memory/Vault-inl.hpp
+++ b/include/RED4ext/Memory/Vault-inl.hpp
@@ -9,6 +9,6 @@
RED4EXT_INLINE RED4ext::Memory::Vault* RED4ext::Memory::Vault::Get()
{
- UniversalRelocPtr ptr(Detail::AddressHashes::Memory_Vault);
+ static UniversalRelocPtr ptr(Detail::AddressHashes::Memory_Vault);
return reinterpret_cast(ptr.GetAddr());
}
diff --git a/include/RED4ext/RTTISystem-inl.hpp b/include/RED4ext/RTTISystem-inl.hpp
index ab127e043..59e009b96 100644
--- a/include/RED4ext/RTTISystem-inl.hpp
+++ b/include/RED4ext/RTTISystem-inl.hpp
@@ -9,7 +9,7 @@
RED4EXT_INLINE RED4ext::CRTTISystem* RED4ext::CRTTISystem::Get()
{
- UniversalRelocFunc func(Detail::AddressHashes::CRTTISystem_Get);
+ static UniversalRelocFunc func(Detail::AddressHashes::CRTTISystem_Get);
return func();
}
@@ -35,6 +35,6 @@ RED4EXT_INLINE void RED4ext::RTTIRegistrator::Add(CallbackFunc aRegFunc, Callbac
RED4EXT_INLINE const uint32_t RED4ext::RTTIRegistrator::GetNextId()
{
- UniversalRelocPtr ptr(Detail::AddressHashes::CRTTIRegistrator_RTTIAsyncId);
+ static UniversalRelocPtr ptr(Detail::AddressHashes::CRTTIRegistrator_RTTIAsyncId);
return InterlockedIncrement(ptr.GetAddr());
}
diff --git a/include/RED4ext/RTTITypes-inl.hpp b/include/RED4ext/RTTITypes-inl.hpp
index 5cb781d17..3d6584a00 100644
--- a/include/RED4ext/RTTITypes-inl.hpp
+++ b/include/RED4ext/RTTITypes-inl.hpp
@@ -132,21 +132,21 @@ RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_78()
RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_80(int64_t a1, ScriptInstance aInstance)
{
using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance);
- UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_80);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_80);
return func(this, a1, aInstance);
}
RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_88(int64_t a1, ScriptInstance aInstance)
{
using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance);
- UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_88);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_88);
return func(this, a1, aInstance);
}
RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_90(int64_t a1, ScriptInstance aInstance, CString& a3, int64_t a4)
{
using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance, CString&, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_90);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_90);
return func(this, a1, aInstance, a3, a4);
}
@@ -154,14 +154,14 @@ RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_98(int64_t a1, ScriptInstance aI
bool a5)
{
using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance, CString&, int64_t, bool);
- UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_98);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_98);
return func(this, a1, aInstance, a3, a4, a5);
}
RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_A0(int64_t a1, CString& a2, bool a3)
{
using func_t = bool (*)(CBaseRTTIType*, int64_t, CString&, bool);
- UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_A0);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_A0);
return func(this, a1, a2, a3);
}
@@ -250,35 +250,35 @@ RED4EXT_INLINE void RED4ext::CClass::Destruct(ScriptInstance aMemory) const
RED4EXT_INLINE bool RED4ext::CClass::Unserialize(BaseStream* aStream, ScriptInstance aInstance, int64_t a3) const
{
using func_t = bool (*)(const CClass*, BaseStream*, ScriptInstance, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_Unserialize);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_Unserialize);
return func(this, aStream, aInstance, a3);
}
RED4EXT_INLINE bool RED4ext::CClass::ToString(const ScriptInstance aInstance, CString& aOut) const
{
using func_t = bool (*)(const CClass*, ScriptInstance, CString&);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_ToString);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_ToString);
return func(this, aInstance, aOut);
}
RED4EXT_INLINE bool RED4ext::CClass::sub_80(int64_t a1, ScriptInstance aInstance)
{
using func_t = bool (*)(const CClass*, int64_t, ScriptInstance);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_80);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_80);
return func(this, a1, aInstance);
}
RED4EXT_INLINE bool RED4ext::CClass::sub_88(int64_t a1, ScriptInstance aInstance)
{
using func_t = bool (*)(const CClass*, int64_t, ScriptInstance);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_88);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_88);
return func(this, a1, aInstance);
}
RED4EXT_INLINE bool RED4ext::CClass::sub_90(int64_t a1, ScriptInstance aInstance, CString& a3, int64_t a4)
{
using func_t = bool (*)(const CClass*, int64_t, ScriptInstance, CString&, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90);
return func(this, a1, aInstance, a3, a4);
}
@@ -287,49 +287,49 @@ RED4EXT_INLINE bool RED4ext::CClass::sub_98(int64_t a1, ScriptInstance aInstance
RED4EXT_UNUSED_PARAMETER(a5);
using func_t = bool (*)(const CClass*, int64_t, ScriptInstance, CString&, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90);
return func(this, a1, aInstance, a3, a4);
}
RED4EXT_INLINE bool RED4ext::CClass::sub_A0(int64_t a1, CString& a2, bool a3)
{
using func_t = bool (*)(const CClass*, int64_t, CString&, bool);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_A0);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_A0);
return func(this, a1, a2, a3);
}
RED4EXT_INLINE void RED4ext::CClass::sub_B0(int64_t a1, int64_t a2)
{
using func_t = bool (*)(const CClass*, int64_t, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_B0);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_B0);
func(this, a1, a2);
}
RED4EXT_INLINE void RED4ext::CClass::sub_C0()
{
using func_t = void (*)(CClass*);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_C0);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_C0);
func(this);
}
RED4EXT_INLINE uint32_t RED4ext::CClass::GetMaxAlignment() const
{
using func_t = uint32_t (*)(const CClass*);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_GetMaxAlignment);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_GetMaxAlignment);
return func(this);
}
RED4EXT_INLINE bool RED4ext::CClass::sub_D0() const
{
using func_t = bool (*)(const CClass*);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_D0);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_D0);
return func(this);
}
RED4EXT_INLINE RED4ext::ScriptInstance RED4ext::CClass::CreateInstance(bool aZeroMemory) const
{
using func_t = ScriptInstance (*)(const CClass*, uint32_t, bool);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_CreateInstance);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_CreateInstance);
return func(this, GetSize(), aZeroMemory);
}
@@ -354,16 +354,16 @@ RED4EXT_INLINE RED4ext::CProperty* RED4ext::CClass::GetProperty(CName aName)
// they do.
using func_t = CProperty* (*)(CClass*, CName);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperty);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperty);
return func(this, aName);
}
RED4EXT_INLINE void RED4ext::CClass::InitializeProperties(ScriptInstance aInstance)
{
- UniversalRelocFunc initializeProperties(Detail::AddressHashes::CClass_InitializeProperties);
+ static UniversalRelocFunc initializeProperties(Detail::AddressHashes::CClass_InitializeProperties);
initializeProperties(this, aInstance);
- UniversalRelocFunc assignDefaultValuesToProperties(
+ static UniversalRelocFunc assignDefaultValuesToProperties(
Detail::AddressHashes::CClass_AssignDefaultValuesToProperties);
assignDefaultValuesToProperties(this, aInstance);
}
@@ -371,7 +371,7 @@ RED4EXT_INLINE void RED4ext::CClass::InitializeProperties(ScriptInstance aInstan
RED4EXT_INLINE void RED4ext::CClass::GetProperties(DynArray& aProps)
{
using func_t = CProperty* (*)(CClass*, DynArray&);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperties);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperties);
func(this, aProps);
}
@@ -416,7 +416,7 @@ RED4EXT_INLINE void RED4ext::CClass::RegisterFunction(CClassFunction* aFunc)
RED4EXT_INLINE void RED4ext::CClass::ClearScriptedData()
{
using func_t = void (*)(CClass*);
- UniversalRelocFunc func(Detail::AddressHashes::CClass_ClearScriptedData);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClass_ClearScriptedData);
func(this);
}
@@ -524,21 +524,21 @@ RED4EXT_INLINE void RED4ext::CEnum::Assign(ScriptInstance aLhs, const ScriptInst
RED4EXT_INLINE bool RED4ext::CEnum::Unserialize(BaseStream* aStream, ScriptInstance aInstance, int64_t a3) const
{
using func_t = bool (*)(const CEnum*, BaseStream*, ScriptInstance, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::CEnum_Unserialize);
+ static UniversalRelocFunc func(Detail::AddressHashes::CEnum_Unserialize);
return func(this, aStream, aInstance, a3);
}
RED4EXT_INLINE bool RED4ext::CEnum::ToString(const ScriptInstance aInstance, CString& aOut) const
{
using func_t = bool (*)(const CEnum*, const ScriptInstance, CString&);
- UniversalRelocFunc func(Detail::AddressHashes::CEnum_ToString);
+ static UniversalRelocFunc func(Detail::AddressHashes::CEnum_ToString);
return func(this, aInstance, aOut);
}
RED4EXT_INLINE bool RED4ext::CEnum::FromString(ScriptInstance aInstance, const CString& aString) const
{
using func_t = bool (*)(const CEnum*, ScriptInstance, const CString&);
- UniversalRelocFunc func(Detail::AddressHashes::CEnum_FromString);
+ static UniversalRelocFunc func(Detail::AddressHashes::CEnum_FromString);
return func(this, aInstance, aString);
}
@@ -644,20 +644,20 @@ RED4EXT_INLINE void RED4ext::CBitfield::Assign(ScriptInstance aLhs, const Script
RED4EXT_INLINE bool RED4ext::CBitfield::Unserialize(BaseStream* aStream, ScriptInstance aInstance, int64_t a3) const
{
using func_t = bool (*)(const CBitfield*, BaseStream*, ScriptInstance, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::CBitfield_Unserialize);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBitfield_Unserialize);
return func(this, aStream, aInstance, a3);
}
RED4EXT_INLINE bool RED4ext::CBitfield::ToString(const ScriptInstance aInstance, CString& aOut) const
{
using func_t = bool (*)(const CBitfield*, ScriptInstance, CString&);
- UniversalRelocFunc func(Detail::AddressHashes::CBitfield_ToString);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBitfield_ToString);
return func(this, aInstance, aOut);
}
RED4EXT_INLINE bool RED4ext::CBitfield::FromString(ScriptInstance aInstance, const CString& aString) const
{
using func_t = bool (*)(const CBitfield*, ScriptInstance, const CString&);
- UniversalRelocFunc func(Detail::AddressHashes::CBitfield_FromString);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBitfield_FromString);
return func(this, aInstance, aString);
}
diff --git a/include/RED4ext/RTTITypes.hpp b/include/RED4ext/RTTITypes.hpp
index d81ad0e3b..5da7c79d5 100644
--- a/include/RED4ext/RTTITypes.hpp
+++ b/include/RED4ext/RTTITypes.hpp
@@ -254,7 +254,7 @@ struct TTypedClass : CClass
{
// This is doing something extra beside comparing properties, using the native func until we figure it out.
using func_t = bool (*)(TTypedClass*, const ScriptInstance, const ScriptInstance, uint32_t);
- UniversalRelocFunc func(Detail::AddressHashes::TTypedClass_IsEqual);
+ static UniversalRelocFunc func(Detail::AddressHashes::TTypedClass_IsEqual);
return func(this, aLhs, aRhs, a3);
}
@@ -483,7 +483,7 @@ struct CRTTIScriptReferenceType : CBaseRTTIType
static CRTTIScriptReferenceType* New(void* aMemory, void* aUnknownArg = nullptr)
{
using func_t = void (*)(void*, void*);
- UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_ctor);
+ static UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_ctor);
func(aMemory, aUnknownArg);
return (CRTTIScriptReferenceType*)aMemory;
@@ -493,7 +493,7 @@ struct CRTTIScriptReferenceType : CBaseRTTIType
void Set(CBaseRTTIType* aBaseType, const T* aValue)
{
using func_t = void (*)(CRTTIScriptReferenceType*, CBaseRTTIType*, const T*);
- UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_Set);
+ static UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_Set);
func(this, aBaseType, aValue);
}
diff --git a/include/RED4ext/ResourceDepot-inl.hpp b/include/RED4ext/ResourceDepot-inl.hpp
index 7ba858782..13e45f92c 100644
--- a/include/RED4ext/ResourceDepot-inl.hpp
+++ b/include/RED4ext/ResourceDepot-inl.hpp
@@ -9,6 +9,6 @@
RED4EXT_INLINE RED4ext::ResourceDepot* RED4ext::ResourceDepot::Get()
{
- UniversalRelocPtr ptr(Detail::AddressHashes::ResourceDepot);
+ static UniversalRelocPtr ptr(Detail::AddressHashes::ResourceDepot);
return ptr;
}
diff --git a/include/RED4ext/ResourceLoader-inl.hpp b/include/RED4ext/ResourceLoader-inl.hpp
index 103aed497..7b8a69a46 100644
--- a/include/RED4ext/ResourceLoader-inl.hpp
+++ b/include/RED4ext/ResourceLoader-inl.hpp
@@ -9,6 +9,6 @@
RED4EXT_INLINE RED4ext::ResourceLoader* RED4ext::ResourceLoader::Get()
{
- UniversalRelocPtr ptr(Detail::AddressHashes::ResourceLoader);
+ static UniversalRelocPtr ptr(Detail::AddressHashes::ResourceLoader);
return ptr;
}
diff --git a/include/RED4ext/ResourceLoader.hpp b/include/RED4ext/ResourceLoader.hpp
index 61836dd41..23d1f7224 100644
--- a/include/RED4ext/ResourceLoader.hpp
+++ b/include/RED4ext/ResourceLoader.hpp
@@ -31,12 +31,12 @@ struct ResourceToken
if (!IsFinished())
{
using CancelUnk38_t = void (*)(void*);
- UniversalRelocFunc CancelUnk38(Detail::AddressHashes::ResourceToken_CancelUnk38);
+ static UniversalRelocFunc CancelUnk38(Detail::AddressHashes::ResourceToken_CancelUnk38);
CancelUnk38(unk38);
}
using DestructUnk38_t = void (*)(void**);
- UniversalRelocFunc DestructUnk38(Detail::AddressHashes::ResourceToken_DestructUnk38);
+ static UniversalRelocFunc DestructUnk38(Detail::AddressHashes::ResourceToken_DestructUnk38);
DestructUnk38(&unk38);
}
@@ -48,7 +48,7 @@ struct ResourceToken
void OnLoaded(LoadedCallback&& aCallback)
{
using OnLoaded_t = JobHandle* (*)(ResourceToken*, JobHandle*, LoadedCallback*);
- RED4ext::UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_OnLoaded);
+ static UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_OnLoaded);
JobHandle handle{};
func(this, &handle, &aCallback);
@@ -62,7 +62,7 @@ struct ResourceToken
Handle& Fetch()
{
using Fetch_t = Handle& (*)(ResourceToken*);
- UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_Fetch);
+ static UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_Fetch);
return func(this);
}
@@ -125,7 +125,7 @@ struct ResourceLoader
SharedPtr> LoadAsync(ResourcePath aPath)
{
using LoadAsync_t = uintptr_t (*)(ResourceLoader*, SharedPtr>*, ResourcePath);
- UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_LoadAsync);
+ static UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_LoadAsync);
SharedPtr> token;
func(this, &token, aPath);
@@ -137,7 +137,7 @@ struct ResourceLoader
SharedPtr> FindToken(ResourcePath aPath)
{
using FindToken_t = uintptr_t (*)(ResourceLoader*, SharedPtr>*, ResourcePath);
- UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_FindTokenFast);
+ static UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_FindTokenFast);
std::shared_lock _(tokenLock);
diff --git a/include/RED4ext/Scripting/Functions-inl.hpp b/include/RED4ext/Scripting/Functions-inl.hpp
index ded58bce9..469a43d31 100644
--- a/include/RED4ext/Scripting/Functions-inl.hpp
+++ b/include/RED4ext/Scripting/Functions-inl.hpp
@@ -56,12 +56,12 @@ RED4EXT_INLINE bool RED4ext::CBaseFunction::Execute(CStack* aStack)
if (!flags.isNative)
{
using executeScriptedFn_t = bool (*)(CBaseFunction*, CStack*, void*);
- UniversalRelocFunc executeScriptedFn(Detail::AddressHashes::CBaseFunction_ExecuteScripted);
+ static UniversalRelocFunc executeScriptedFn(Detail::AddressHashes::CBaseFunction_ExecuteScripted);
return executeScriptedFn(this, aStack, nullptr);
}
using executeNativeFn_t = bool (*)(CBaseFunction*, CStack*);
- UniversalRelocFunc executeNativeFn(Detail::AddressHashes::CBaseFunction_ExecuteNative);
+ static UniversalRelocFunc executeNativeFn(Detail::AddressHashes::CBaseFunction_ExecuteNative);
return executeNativeFn(this, aStack);
}
@@ -70,7 +70,7 @@ RED4EXT_INLINE bool RED4ext::CBaseFunction::Execute_(CStack* aStack)
if (!flags.isNative)
{
using func_t = bool (*)(CBaseFunction*, CStack*);
- UniversalRelocFunc func(Detail::AddressHashes::CBaseFunction_ExecuteScripted);
+ static UniversalRelocFunc func(Detail::AddressHashes::CBaseFunction_ExecuteScripted);
return func(this, aStack);
}
@@ -83,7 +83,7 @@ RED4EXT_INLINE bool RED4ext::CBaseFunction::Execute_(CStack* aStack)
RED4EXT_INLINE RED4ext::CBaseFunction::Handler_t RED4ext::CBaseFunction::GetHandler(uint32_t aIndex)
{
- UniversalRelocPtr handlers(Detail::AddressHashes::CBaseFunction_Handlers);
+ static UniversalRelocPtr handlers(Detail::AddressHashes::CBaseFunction_Handlers);
return handlers[aIndex];
}
diff --git a/include/RED4ext/Scripting/Functions.hpp b/include/RED4ext/Scripting/Functions.hpp
index 6953baab0..9159c39ca 100644
--- a/include/RED4ext/Scripting/Functions.hpp
+++ b/include/RED4ext/Scripting/Functions.hpp
@@ -112,7 +112,7 @@ struct CGlobalFunction : CBaseFunction
auto shortName = CNamePool::Add(aShortName);
using func_t = CGlobalFunction* (*)(CGlobalFunction*, CName, CName, ScriptingFunction_t);
- UniversalRelocFunc func(Detail::AddressHashes::CGlobalFunction_ctor);
+ static UniversalRelocFunc func(Detail::AddressHashes::CGlobalFunction_ctor);
func(memory, fullName, shortName, aFunc);
}
@@ -138,7 +138,7 @@ struct CClassFunction : CBaseFunction
auto shortName = CNamePool::Add(aShortName);
using func_t = CClassFunction* (*)(CClassFunction*, CClass*, CName, CName, ScriptingFunction_t, Flags);
- UniversalRelocFunc func(Detail::AddressHashes::CClassFunction_ctor);
+ static UniversalRelocFunc func(Detail::AddressHashes::CClassFunction_ctor);
func(memory, aParent, fullName, shortName, aFunc, aFlags);
}
diff --git a/include/RED4ext/Scripting/IScriptable-inl.hpp b/include/RED4ext/Scripting/IScriptable-inl.hpp
index 0cdfd1983..3b6da039c 100644
--- a/include/RED4ext/Scripting/IScriptable-inl.hpp
+++ b/include/RED4ext/Scripting/IScriptable-inl.hpp
@@ -32,7 +32,7 @@ RED4EXT_INLINE RED4ext::CClass* RED4ext::IScriptable::GetType()
RED4EXT_INLINE void RED4ext::IScriptable::sub_D8(int64_t a1, int64_t a2)
{
using func_t = void (*)(ISerializable*, int64_t, int64_t);
- UniversalRelocFunc func(Detail::AddressHashes::IScriptable_sub_D8);
+ static UniversalRelocFunc func(Detail::AddressHashes::IScriptable_sub_D8);
func(this, a1, a2);
}
@@ -76,7 +76,7 @@ RED4EXT_INLINE void* RED4ext::IScriptable::GetValueHolder()
RED4EXT_INLINE void RED4ext::IScriptable::DestructValueHolder()
{
using func_t = void* (*)(IScriptable*);
- UniversalRelocFunc func(Detail::AddressHashes::IScriptable_DestructValueHolder);
+ static UniversalRelocFunc func(Detail::AddressHashes::IScriptable_DestructValueHolder);
func(this);
}
diff --git a/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp b/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp
index 14c2e771b..7f8543d16 100644
--- a/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp
+++ b/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp
@@ -9,7 +9,7 @@
RED4EXT_INLINE RED4ext::OpcodeHandlers::Handler_t RED4ext::OpcodeHandlers::Get(uint8_t aOpcode)
{
- UniversalRelocPtr opcodes(Detail::AddressHashes::OpcodeHandlers);
+ static UniversalRelocPtr opcodes(Detail::AddressHashes::OpcodeHandlers);
return opcodes.GetAddr()[aOpcode];
}
diff --git a/include/RED4ext/Scripting/Stack-inl.hpp b/include/RED4ext/Scripting/Stack-inl.hpp
index 28a23fb3a..d5f3c6ab7 100644
--- a/include/RED4ext/Scripting/Stack-inl.hpp
+++ b/include/RED4ext/Scripting/Stack-inl.hpp
@@ -45,7 +45,7 @@ RED4EXT_INLINE RED4ext::CStack::CStack(ScriptInstance aContext, CStackType* aArg
, argsCount(aArgsCount)
, result(aResult)
{
- UniversalRelocVtbl vtbl(Detail::AddressHashes::CStack_vtbl);
+ static UniversalRelocVtbl vtbl(Detail::AddressHashes::CStack_vtbl);
*reinterpret_cast(this) = vtbl;
}
diff --git a/include/RED4ext/SortedArray.hpp b/include/RED4ext/SortedArray.hpp
index d1ccf33af..cac050cb8 100644
--- a/include/RED4ext/SortedArray.hpp
+++ b/include/RED4ext/SortedArray.hpp
@@ -176,7 +176,7 @@ struct SortedArray
using func_t = void (*)(SortedArray * aThis, uint32_t aCapacity, uint32_t aElementSize, uint32_t aAlignment,
void (*a5)(int64_t, int64_t, int64_t, int64_t));
- UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc);
+ static UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc);
func(this, newCapacity, sizeof(T), alignment, nullptr);
}
diff --git a/include/RED4ext/SystemUpdate-inl.hpp b/include/RED4ext/SystemUpdate-inl.hpp
index 67b80e89f..b93c8b05d 100644
--- a/include/RED4ext/SystemUpdate-inl.hpp
+++ b/include/RED4ext/SystemUpdate-inl.hpp
@@ -13,7 +13,7 @@ RED4EXT_INLINE void RED4ext::UpdateRegistrar::RegisterUpdate(UpdateTickGroup aGr
const char* aName, GroupUpdateCallback&& aCallback)
{
using func_t = void (*)(UpdateRegistrar*, UpdateTickGroup, CClass*, const char*, GroupUpdateCallback&&, uint32_t);
- UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterGroupUpdate);
+ static UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterGroupUpdate);
func(this, aGroup, aSystem->GetNativeType(), aName, std::forward(aCallback), 0);
}
@@ -24,7 +24,7 @@ RED4EXT_INLINE void RED4ext::UpdateRegistrar::RegisterUpdate(UpdateBucketMask aB
{
using func_t = void (*)(UpdateRegistrar*, UpdateBucketMask, UpdateBucketStage, CClass*, const char*,
BucketUpdateCallback&&, uint32_t);
- UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterBucketUpdate);
+ static UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterBucketUpdate);
func(this, aBuckets, aStage, aSystem->GetNativeType(), aName, std::forward(aCallback), 0);
}
diff --git a/include/RED4ext/TweakDB-inl.hpp b/include/RED4ext/TweakDB-inl.hpp
index 41d9011c8..0ba04af5a 100644
--- a/include/RED4ext/TweakDB-inl.hpp
+++ b/include/RED4ext/TweakDB-inl.hpp
@@ -163,7 +163,7 @@ RED4EXT_INLINE bool RED4ext::TweakDB::UpdateRecord(gamedataTweakDBRecord* aRecor
// Meaning we have to pass our own TweakDB class. sorry -Sombra
using CreateTDBRecord_t = void (*)(TweakDB*, uint32_t aBaseMurmur3, TweakDBID aDBID);
- UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord);
+ static UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord);
TweakDB fakeTweakDB;
struct FakeAllocator : Memory::IAllocator
@@ -253,7 +253,7 @@ RED4EXT_INLINE bool RED4ext::TweakDB::CreateRecord(TweakDBID aDBID, CBaseRTTITyp
RED4EXT_INLINE bool RED4ext::TweakDB::CreateRecord(TweakDBID aDBID, uint32_t aTweakBaseHash)
{
using CreateTDBRecord_t = void (*)(TweakDB*, uint32_t aBaseMurmur3, TweakDBID aDBID);
- UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord);
+ static UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord);
if (!aDBID.IsValid())
return false;
@@ -452,7 +452,7 @@ RED4EXT_INLINE const RED4ext::TweakDB::FlatValue* RED4ext::TweakDB::GetDefaultFl
RED4EXT_INLINE RED4ext::TweakDB* RED4ext::TweakDB::Get()
{
using Get_t = TweakDB* (*)();
- UniversalRelocFunc func(Detail::AddressHashes::TweakDB_Get);
+ static UniversalRelocFunc func(Detail::AddressHashes::TweakDB_Get);
return func();
}
From 8d43db9704a3b62dda9262b240ac4b8b04cedbbe Mon Sep 17 00:00:00 2001
From: pv
Date: Thu, 29 Feb 2024 23:06:33 +0300
Subject: [PATCH 2/2] Fix addresses
---
include/RED4ext/Detail/AddressHashes.hpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/RED4ext/Detail/AddressHashes.hpp b/include/RED4ext/Detail/AddressHashes.hpp
index 74164b227..718c647ea 100644
--- a/include/RED4ext/Detail/AddressHashes.hpp
+++ b/include/RED4ext/Detail/AddressHashes.hpp
@@ -37,12 +37,12 @@ constexpr std::uint32_t CClass_sub_90 = 0xA26D374E;
constexpr std::uint32_t CClass_sub_98 = 0x48C020CA;
constexpr std::uint32_t CClass_sub_A0 = 0x15F21D6F;
constexpr std::uint32_t CClass_sub_B0 = 0xA0911974;
-constexpr std::uint32_t CClass_sub_C0 = 0x7DD010C3;
+constexpr std::uint32_t CClass_sub_C0 = 3523744305UL;
constexpr std::uint32_t CClass_GetMaxAlignment = 0xD14E1230;
constexpr std::uint32_t CClass_sub_D0 = 0x37750EBF;
constexpr std::uint32_t CClass_CreateInstance = 0x5A800F1D;
constexpr std::uint32_t CClass_GetProperty = 0x8F031512;
-constexpr std::uint32_t CClass_GetProperties = 0xB412121B;
+constexpr std::uint32_t CClass_GetProperties = 1652956141UL;
constexpr std::uint32_t CClass_ClearScriptedData = 0x31F20E93;
constexpr std::uint32_t CClass_InitializeProperties = 0xF4AC12B0;
constexpr std::uint32_t CClass_AssignDefaultValuesToProperties = 0x97DF1590;
@@ -124,7 +124,7 @@ constexpr std::uint32_t ISerializable_sub_C0 = 0x80201C35;
#pragma endregion
#pragma region JobDispatcher
-constexpr std::uint32_t JobDispatcher = 0xBAD50B3D;
+constexpr std::uint32_t JobDispatcher = 1508445968UL;
constexpr std::uint32_t JobDispatcher_DispatchJob = 0x9C441E82;
#pragma endregion