From 6583ce9c57ff98b1bcb71006eafb9e421ef47568 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 9 Mar 2026 16:19:38 -0700 Subject: [PATCH] Use server zone ID (SMSG_INIT_WORLD_STATES) for zone music selection In online mode, SMSG_INIT_WORLD_STATES delivers the server-authoritative zone ID when entering a new area. Prefer this over the tile-based fallback so music transitions are accurate for small zones (city districts, caves, dungeon entrances) that don't align with 533-unit tile boundaries. --- src/rendering/renderer.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index fbf8b60b..52a33b72 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -3040,9 +3040,12 @@ void Renderer::update(float deltaTime) { // Update zone detection and music if (zoneManager && musicManager && terrainManager && camera) { - // First check tile-based zone + // Prefer server-authoritative zone ID (from SMSG_INIT_WORLD_STATES); + // fall back to tile-based lookup for single-player / offline mode. + const auto* gh = core::Application::getInstance().getGameHandler(); + uint32_t serverZoneId = gh ? gh->getWorldStateZoneId() : 0; auto tile = terrainManager->getCurrentTile(); - uint32_t zoneId = zoneManager->getZoneId(tile.x, tile.y); + uint32_t zoneId = (serverZoneId != 0) ? serverZoneId : zoneManager->getZoneId(tile.x, tile.y); bool insideTavern = false; bool insideBlacksmith = false;