From 6d213ad49b8eb3a0d2ca4250af0b4fd1297155f6 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Sun, 22 Feb 2026 02:31:16 -0800 Subject: [PATCH] =?UTF-8?q?Fix=20M2=20game=20object=20orientation=20to=20u?= =?UTF-8?q?se=20+90=C2=B0=20render=20yaw=20like=20characters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit M2 game objects (signs, posts) were using orientation - 90° while characters/NPCs use orientation + 90° for the canonical-to-render yaw conversion. Both renderers build model matrices identically, so they need the same offset. The old -90° was calibrated when terrain was rotated 90°; with correct terrain the signs appeared sideways. --- src/core/application.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/core/application.cpp b/src/core/application.cpp index 8ff52812..bce86039 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -1722,7 +1722,7 @@ void Application::setupUICallbacks() { if (auto* mr = renderer->getM2Renderer()) { glm::mat4 transform(1.0f); transform = glm::translate(transform, renderPos); - transform = glm::rotate(transform, orientation - glm::radians(90.0f), glm::vec3(0, 0, 1)); + transform = glm::rotate(transform, orientation + glm::radians(90.0f), glm::vec3(0, 0, 1)); mr->setInstanceTransform(info.instanceId, transform); } } @@ -5452,9 +5452,8 @@ void Application::spawnOnlineGameObject(uint64_t guid, uint32_t entry, uint32_t if (auto* mr = renderer->getM2Renderer()) { glm::mat4 transform(1.0f); transform = glm::translate(transform, renderPos); - // M2 gameobjects use model-forward alignment like character M2s. - // Apply -90deg in render space to match world-facing orientation. - transform = glm::rotate(transform, orientation - glm::radians(90.0f), glm::vec3(0, 0, 1)); + // M2 gameobjects use the same canonical→render yaw as characters. + transform = glm::rotate(transform, orientation + glm::radians(90.0f), glm::vec3(0, 0, 1)); mr->setInstanceTransform(info.instanceId, transform); } } @@ -5509,7 +5508,7 @@ void Application::spawnOnlineGameObject(uint64_t guid, uint32_t entry, uint32_t glm::vec3 renderPos = core::coords::canonicalToRender(glm::vec3(x, y, z)); const float renderYawWmo = orientation; - const float renderYawM2 = orientation - glm::radians(90.0f); + const float renderYawM2 = orientation + glm::radians(90.0f); bool loadedAsWmo = false; if (isWmo) {