summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tile.cpp37
-rw-r--r--src/tunnel_map.cpp6
2 files changed, 21 insertions, 22 deletions
diff --git a/src/tile.cpp b/src/tile.cpp
index 128c16128..449156465 100644
--- a/src/tile.cpp
+++ b/src/tile.cpp
@@ -23,11 +23,11 @@ Slope GetTileSlope(TileIndex tile, uint *h)
min = a = TileHeight(tile);
b = TileHeight(tile + TileDiffXY(1, 0));
- if (min >= b) min = b;
+ if (min > b) min = b;
c = TileHeight(tile + TileDiffXY(0, 1));
- if (min >= c) min = c;
+ if (min > c) min = c;
d = TileHeight(tile + TileDiffXY(1, 1));
- if (min >= d) min = d;
+ if (min > d) min = d;
r = SLOPE_FLAT;
if ((a -= min) != 0) r += (--a << 4) + SLOPE_N;
@@ -42,24 +42,25 @@ Slope GetTileSlope(TileIndex tile, uint *h)
uint GetTileZ(TileIndex tile)
{
- uint h;
- GetTileSlope(tile, &h);
- return h;
+ if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0;
+
+ uint h = TileHeight(tile);
+ h = min(h, TileHeight(tile + TileDiffXY(1, 0)));
+ h = min(h, TileHeight(tile + TileDiffXY(0, 1)));
+ h = min(h, TileHeight(tile + TileDiffXY(1, 1)));
+
+ return h * TILE_HEIGHT;
}
uint GetTileMaxZ(TileIndex t)
{
- uint max;
- uint h;
-
- h = TileHeight(t);
- max = h;
- h = TileHeight(t + TileDiffXY(1, 0));
- if (h > max) max = h;
- h = TileHeight(t + TileDiffXY(0, 1));
- if (h > max) max = h;
- h = TileHeight(t + TileDiffXY(1, 1));
- if (h > max) max = h;
- return max * 8;
+ if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0;
+
+ uint h = TileHeight(t);
+ h = max(h, TileHeight(t + TileDiffXY(1, 0)));
+ h = max(h, TileHeight(t + TileDiffXY(0, 1)));
+ h = max(h, TileHeight(t + TileDiffXY(1, 1)));
+
+ return h * TILE_HEIGHT;
}
diff --git a/src/tunnel_map.cpp b/src/tunnel_map.cpp
index 8d75735b6..593d3fe6b 100644
--- a/src/tunnel_map.cpp
+++ b/src/tunnel_map.cpp
@@ -64,8 +64,6 @@ bool IsTunnelInWayDir(TileIndex tile, uint z, DiagDirection dir)
bool IsTunnelInWay(TileIndex tile, uint z)
{
return
- IsTunnelInWayDir(tile, z, DIAGDIR_NE) ||
- IsTunnelInWayDir(tile, z, DIAGDIR_SE) ||
- IsTunnelInWayDir(tile, z, DIAGDIR_SW) ||
- IsTunnelInWayDir(tile, z, DIAGDIR_NW);
+ IsTunnelInWayDir(tile, z, (TileX(tile) > (MapMaxX() / 2)) ? DIAGDIR_NE : DIAGDIR_SW) ||
+ IsTunnelInWayDir(tile, z, (TileY(tile) > (MapMaxY() / 2)) ? DIAGDIR_NW : DIAGDIR_SE);
}