From 7d927ecfd877d084a4c0d026f279f956c4f2b6ec Mon Sep 17 00:00:00 2001 From: praydog Date: Fri, 1 Nov 2024 16:47:49 -0700 Subject: [PATCH] Renderer: Fix root layer lookup in Wilds --- shared/sdk/Renderer.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/shared/sdk/Renderer.cpp b/shared/sdk/Renderer.cpp index 021a094b..4a1e80aa 100644 --- a/shared/sdk/Renderer.cpp +++ b/shared/sdk/Renderer.cpp @@ -812,6 +812,27 @@ RenderLayer* get_root_layer() { if (get_output_layer_fn == nullptr) { spdlog::error("[Renderer] Failed to find getOutputLayer"); + + // Hacky fix for >= TDB74 + for (uint32_t i = 0; i < 0x10000; i += sizeof(void*)) { + const auto ptr = *(REManagedObject**)((uintptr_t)renderer + i); + + if (ptr == nullptr) { + continue; + } + + if (!utility::re_managed_object::is_managed_object(ptr)) { + continue; + } + + if (utility::re_managed_object::is_a(ptr, "via.render.RenderLayer")) { + root_layer_offset = i; + return *(RenderLayer**)((uintptr_t)renderer + root_layer_offset); + } + } + + spdlog::error("[Renderer] Failed to find root_layer_offset with fallback"); + return nullptr; }