diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index ad867ba2e5..613a686ce8 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -203,7 +203,13 @@ static void UpdateFences(TileIndex tile) /** Convert to or from snowy tiles. */ static void TileLoopClearAlps(TileIndex tile) { - int k = GetTileZ(tile) - GetSnowLine() + 1; + int k; + if ((int)TileHeight(tile) < GetSnowLine() - 1) { + /* Fast path to avoid needing to check all 4 corners */ + k = -1; + } else { + k = GetTileZ(tile) - GetSnowLine() + 1; + } if (k < 0) { /* Below the snow line, do nothing if no snow. */ diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 0d2795e426..85575b677b 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -745,7 +745,13 @@ static void TileLoopTreesDesert(TileIndex tile) static void TileLoopTreesAlps(TileIndex tile) { - int k = GetTileZ(tile) - GetSnowLine() + 1; + int k; + if ((int)TileHeight(tile) < GetSnowLine() - 1) { + /* Fast path to avoid needing to check all 4 corners */ + k = -1; + } else { + k = GetTileZ(tile) - GetSnowLine() + 1; + } if (k < 0) { switch (GetTreeGround(tile)) {