From 1d05bb0f134a8ef380a7f3ef2eecb09b03502b40 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Wed, 6 May 2026 03:55:14 -0700 Subject: [PATCH] fix(terrain): main game also propagates MODF scale to WMO instances Mirrors the editor's WMO scale fix. WMOReady gains a scale field that is computed from the loaded MODF placement.scale (u16 / 1024) and forwarded to wmoRenderer->createInstance(). Without this the main game ignored MODF scale even on WotLK ADTs that use it. --- include/rendering/terrain_manager.hpp | 1 + src/rendering/terrain_manager.cpp | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/rendering/terrain_manager.hpp b/include/rendering/terrain_manager.hpp index 1a182796..588694e1 100644 --- a/include/rendering/terrain_manager.hpp +++ b/include/rendering/terrain_manager.hpp @@ -99,6 +99,7 @@ struct PendingTile { pipeline::WMOModel model; glm::vec3 position; glm::vec3 rotation; + float scale = 1.0f; }; std::vector wmoModels; diff --git a/src/rendering/terrain_manager.cpp b/src/rendering/terrain_manager.cpp index 4287fa1d..5ea6b940 100644 --- a/src/rendering/terrain_manager.cpp +++ b/src/rendering/terrain_manager.cpp @@ -860,6 +860,8 @@ std::shared_ptr TerrainManager::prepareTile(int x, int y) { ready.model = std::move(wmoModel); ready.position = pos; ready.rotation = rot; + ready.scale = placement.scale > 0 + ? static_cast(placement.scale) / 1024.0f : 1.0f; pending->wmoModels.push_back(std::move(ready)); } } @@ -1103,7 +1105,8 @@ bool TerrainManager::advanceFinalization(FinalizingTile& ft) { } // Create the instance on first visit (liquidGroupIndex == 0) if (ft.wmoLiquidGroupIndex == 0) { - uint32_t wmoInstId = wmoRenderer->createInstance(wmoReady.modelId, wmoReady.position, wmoReady.rotation); + uint32_t wmoInstId = wmoRenderer->createInstance( + wmoReady.modelId, wmoReady.position, wmoReady.rotation, wmoReady.scale); if (!wmoInstId) { ft.wmoInstanceIndex++; continue;