From ea8b0d93052f0c556b918752318a8b2b46166df9 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Tue, 31 Mar 2026 01:27:32 -0700 Subject: [PATCH] fix: reduce warmup ground-check timeout from 20s to 5s The warmup loop waited up to 20 seconds for getHeightAt() to return a terrain height within 15 units of spawn Z before accepting the ground as ready. In practice, the terrain was loaded and the character was visibly standing on it, but the height sample didn't match closely enough (terrain LOD, chunk boundary, or server Z vs client height mismatch). Reduce the tile-count fallback timeout from 20s to 5s: if at least 4 tiles are loaded after 5 seconds, accept the ground as ready. The exact height check still runs in the first 5 seconds for fast-path cases where it does match. --- src/core/application.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/application.cpp b/src/core/application.cpp index 4da62a1c..c0038782 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -5385,8 +5385,12 @@ void Application::loadOnlineWorldTerrain(uint32_t mapId, float x, float y, float } } } - // After 20s, accept any loaded terrain (fallback for unusual spawns) - if (!groundReady && elapsed >= 20.0f) { + // After 5s with enough tiles loaded, accept terrain as ready even if + // the height sample doesn't match spawn Z exactly. This handles cases + // where getHeightAt returns a slightly different value than the server's + // spawn Z (e.g. terrain LOD, MCNK chunk boundaries, or spawn inside a + // building where floor height differs from terrain below). + if (!groundReady && elapsed >= 5.0f) { if (auto* tm = renderer->getTerrainManager()) { if (tm->getLoadedTileCount() >= 4) { groundReady = true;