From c9fe6e7b8fde3a23f6aab3b55fd8cca639d49696 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 23 Mar 2019 11:17:27 +0100 Subject: [PATCH] Fix #7371: Avoid dependency on foundations of town tile during saveload --- src/viewport.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 8a1319072c..da1e01feb9 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2183,7 +2183,9 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeTown(TownID id) item.id.town = id; const Town *town = Town::Get(id); - Point pt = RemapCoords2(TileX(town->xy) * TILE_SIZE, TileY(town->xy) * TILE_SIZE); + /* Avoid using RemapCoords2, it has dependency on the foundations status of the tile, and that can be unavailable during saveload, leading to crashes. + * Instead "fake" foundations by taking the highest Z coordinate of any corner of the tile. */ + Point pt = RemapCoords(TileX(town->xy) * TILE_SIZE, TileY(town->xy) * TILE_SIZE, GetTileMaxZ(town->xy) * TILE_HEIGHT); pt.y -= 24 * ZOOM_LVL_BASE;