Mercurial > hg > openttd
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 */