From af0a3a4dafc6e90b545299fc5d73d6734ca29fc2 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 9 Feb 2026 00:41:19 -0800 Subject: [PATCH] Fix jump collision and WMO doodad rotation bugs Prevent character from being yanked down during upward jump movement, and correct quaternion rotation for holiday decorations. --- src/rendering/camera_controller.cpp | 4 ++-- src/rendering/terrain_manager.cpp | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/rendering/camera_controller.cpp b/src/rendering/camera_controller.cpp index c1cb3d6a..278c60e0 100644 --- a/src/rendering/camera_controller.cpp +++ b/src/rendering/camera_controller.cpp @@ -964,8 +964,8 @@ void CameraController::update(float deltaTime) { float fallCatch = 3.0f; float dz = *groundH - feetZ; - if (dz <= stepUp && dz >= -fallCatch && - (verticalVelocity <= 0.0f || *groundH > feetZ)) { + // Only snap to ground when falling/landing (not when jumping up) + if (dz <= stepUp && dz >= -fallCatch && verticalVelocity <= 0.0f) { newPos.z = *groundH + eyeHeight; verticalVelocity = 0.0f; grounded = true; diff --git a/src/rendering/terrain_manager.cpp b/src/rendering/terrain_manager.cpp index df9d4d61..cc4134d4 100644 --- a/src/rendering/terrain_manager.cpp +++ b/src/rendering/terrain_manager.cpp @@ -451,9 +451,12 @@ std::shared_ptr TerrainManager::prepareTile(int x, int y) { // Build doodad's local transform (WoW coordinates) // WMO doodads use quaternion rotation + // Fix: WoW quaternions need X/Y swap for correct orientation + glm::quat fixedRotation(doodad.rotation.w, doodad.rotation.y, doodad.rotation.x, doodad.rotation.z); + glm::mat4 doodadLocal(1.0f); doodadLocal = glm::translate(doodadLocal, doodad.position); - doodadLocal *= glm::mat4_cast(doodad.rotation); + doodadLocal *= glm::mat4_cast(fixedRotation); doodadLocal = glm::scale(doodadLocal, glm::vec3(doodad.scale)); // Full world transform = WMO world transform * doodad local transform