# HG changeset patch # User frosch # Date 2008-04-15 13:10:01 # Node ID 7d5195a782eb4b95ea7f4f6437663297707c959e # Parent 810ccf87dc7de6dd90125c51f3b685324fb75c96 (svn r12717) -Fix (r11107): Check the TILE_NOT_SLOPED flag of the _north_ tile of multi-tile houses to decide if autoslope is allowed. diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1992,6 +1992,33 @@ static void DoClearTownHouseHelper(TileI 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 @@ void ClearTownHouse(Town *t, TileIndex t 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 @@ static CommandCost TerraformTile_Town(Ti { 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 */