diff --git a/src/heightmap.cpp b/src/heightmap.cpp --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -364,8 +364,7 @@ static void GrayscaleToMapHeights(uint i SetTileHeight(tile, map[img_row * img_width + img_col] / 16); } /* Only clear the tiles within the map area. */ - if (TileX(tile) != MapMaxX() && TileY(tile) != MapMaxY() && - (!_settings_game.construction.freeform_edges || (TileX(tile) != 0 && TileY(tile) != 0))) { + if (IsInnerTile(tile)) { MakeClear(tile, CLEAR_GRASS, 3); } } diff --git a/src/tgp.cpp b/src/tgp.cpp --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -950,8 +950,7 @@ static void TgenSetTileHeight(TileIndex SetTileHeight(tile, height); /* Only clear the tiles within the map area. */ - if (TileX(tile) != MapMaxX() && TileY(tile) != MapMaxY() && - (!_settings_game.construction.freeform_edges || (TileX(tile) != 0 && TileY(tile) != 0))) { + if (IsInnerTile(tile)) { MakeClear(tile, CLEAR_GRASS, 3); } } diff --git a/src/tile_map.cpp b/src/tile_map.cpp --- a/src/tile_map.cpp +++ b/src/tile_map.cpp @@ -22,11 +22,7 @@ Slope GetTileSlope(TileIndex tile, int * { assert(tile < MapSize()); - uint x = TileX(tile); - uint y = TileY(tile); - - if (x == MapMaxX() || y == MapMaxY() || - ((x == 0 || y == 0) && _settings_game.construction.freeform_edges)) { + if (!IsInnerTile(tile)) { if (h != NULL) *h = TileHeight(tile); return SLOPE_FLAT; } diff --git a/src/tile_map.h b/src/tile_map.h --- a/src/tile_map.h +++ b/src/tile_map.h @@ -78,6 +78,23 @@ static inline TileType GetTileType(TileI } /** + * Check if a tile is within the map (not a border) + * + * @param tile The tile to check + * @return Whether the tile is in the interior of the map + * @pre tile < MapSize() + */ +static inline bool IsInnerTile(TileIndex tile) +{ + assert(tile < MapSize()); + + uint x = TileX(tile); + uint y = TileY(tile); + + return x < MapMaxX() && y < MapMaxY() && ((x > 0 && y > 0) || !_settings_game.construction.freeform_edges); +} + +/** * Set the type of a tile * * This functions sets the type of a tile. If the type @@ -95,7 +112,7 @@ static inline void SetTileType(TileIndex /* VOID tiles (and no others) are exactly allowed at the lower left and right * edges of the map. If _settings_game.construction.freeform_edges is true, * the upper edges of the map are also VOID tiles. */ - assert((TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY() || (_settings_game.construction.freeform_edges && (TileX(tile) == 0 || TileY(tile) == 0))) == (type == MP_VOID)); + assert(IsInnerTile(tile) == (type != MP_VOID)); SB(_m[tile].type_height, 4, 4, type); }