changeset 8942:a1797e9f9173 draft

(svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed.
author frosch <frosch@openttd.org>
date Tue, 15 Apr 2008 13:10:01 +0000
parents 3b0ffce16526
children d5c75b8f3503
files src/town_cmd.cpp
diffstat 1 files changed, 29 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/town_cmd.cpp
+++ b/src/town_cmd.cpp
@@ -1992,6 +1992,33 @@
 	DeleteAnimatedTile(tile);
 }
 
+/**
+ * Determines if a given HouseID is part of a multitile house.
+ * The given ID is set to the ID of the north tile and the TileDiff to the north tile is returned.
+ *
+ * @param house Is changed to the HouseID of the north tile of the same house
+ * @return TileDiff from the tile of the given HouseID to the north tile
+ */
+static TileIndex GetHouseNorthPart(HouseID &house)
+{
+	if (house >= 3) { // house id 0,1,2 MUST be single tile houses, or this code breaks.
+		if (GetHouseSpecs(house - 1)->building_flags & TILE_SIZE_2x1) {
+			house--;
+			return TileDiffXY(-1, 0);
+		} else if (GetHouseSpecs(house - 1)->building_flags & BUILDING_2_TILES_Y) {
+			house--;
+			return TileDiffXY(0, -1);
+		} else if (GetHouseSpecs(house - 2)->building_flags & BUILDING_HAS_4_TILES) {
+			house -= 2;
+			return TileDiffXY(-1, 0);
+		} else if (GetHouseSpecs(house - 3)->building_flags & BUILDING_HAS_4_TILES) {
+			house -= 3;
+			return TileDiffXY(-1, -1);
+		}
+	}
+	return 0;
+}
+
 void ClearTownHouse(Town *t, TileIndex tile)
 {
 	assert(IsTileType(tile, MP_HOUSE));
@@ -1999,21 +2026,7 @@
 	HouseID house = GetHouseType(tile);
 
 	/* need to align the tile to point to the upper left corner of the house */
-	if (house >= 3) { // house id 0,1,2 MUST be single tile houses, or this code breaks.
-		if (GetHouseSpecs(house-1)->building_flags & TILE_SIZE_2x1) {
-			house--;
-			tile += TileDiffXY(-1, 0);
-		} else if (GetHouseSpecs(house-1)->building_flags & BUILDING_2_TILES_Y) {
-			house--;
-			tile += TileDiffXY(0, -1);
-		} else if (GetHouseSpecs(house-2)->building_flags & BUILDING_HAS_4_TILES) {
-			house-=2;
-			tile += TileDiffXY(-1, 0);
-		} else if (GetHouseSpecs(house-3)->building_flags & BUILDING_HAS_4_TILES) {
-			house-=3;
-			tile += TileDiffXY(-1, -1);
-		}
-	}
+	tile += GetHouseNorthPart(house); // modifies house to the ID of the north tile
 
 	const HouseSpec *hs = GetHouseSpecs(house);
 
@@ -2536,6 +2549,7 @@
 {
 	if (AutoslopeEnabled()) {
 		HouseID house = GetHouseType(tile);
+		GetHouseNorthPart(house); // modifies house to the ID of the north tile
 		const HouseSpec *hs = GetHouseSpecs(house);
 
 		/* Here we differ from TTDP by checking TILE_NOT_SLOPED */