diff -r 31fcaa5375a1 -r e72987579514 src/tile.cpp --- a/src/tile.cpp Fri Aug 03 19:16:36 2007 +0000 +++ b/src/tile.cpp Fri Aug 03 22:09:42 2007 +0000 @@ -23,11 +23,11 @@ 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 @@ 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; + if (TileX(t) == MapMaxX() || TileY(t) == MapMaxY()) return 0; - 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; + 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; }