mirror of
https://github.com/OpenTTD/OpenTTD
synced 2026-01-17 09:22:42 +01:00
(svn r13688) [0.6] -Backport from trunk:
- Fix: If the first bridge can not be build for a given length, then none of the other bridges can. Effectively meaning that if someone replaces the first bridge with a bridge that can be only 3 tiles longs then only other bridges that can be 3 tiles long will be buildable, but only if they are 3 tiles long [FS#2100] (r13611) - Fix: [OSX] 10.5 failed to switch to fullscreen (r13584) - Fix: Properly count number of non-north housetiles [FS#2083] (r13518) - Fix: Drawing of zoomed out partial sprites could cause deadlocks or crashes (r13502)
This commit is contained in:
@@ -1614,7 +1614,7 @@ HouseZonesBits GetTownRadiusGroup(const Town* t, TileIndex tile)
|
||||
* @param random_bits required for newgrf houses
|
||||
* @pre house can be built here
|
||||
*/
|
||||
static inline void ClearMakeHouseTile(TileIndex tile, TownID tid, byte counter, byte stage, HouseID type, byte random_bits)
|
||||
static inline void ClearMakeHouseTile(TileIndex tile, Town *t, byte counter, byte stage, HouseID type, byte random_bits)
|
||||
{
|
||||
#if !defined(NDEBUG) || defined(WITH_ASSERT)
|
||||
CommandCost cc =
|
||||
@@ -1624,7 +1624,8 @@ static inline void ClearMakeHouseTile(TileIndex tile, TownID tid, byte counter,
|
||||
|
||||
assert(CmdSucceeded(cc));
|
||||
|
||||
MakeHouseTile(tile, tid, counter, stage, type, random_bits);
|
||||
IncreaseBuildingCount(t, type);
|
||||
MakeHouseTile(tile, t->index, counter, stage, type, random_bits);
|
||||
}
|
||||
|
||||
|
||||
@@ -1638,14 +1639,14 @@ static inline void ClearMakeHouseTile(TileIndex tile, TownID tid, byte counter,
|
||||
* @param random_bits required for newgrf houses
|
||||
* @pre house can be built here
|
||||
*/
|
||||
static void MakeTownHouse(TileIndex t, TownID tid, byte counter, byte stage, HouseID type, byte random_bits)
|
||||
static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, HouseID type, byte random_bits)
|
||||
{
|
||||
BuildingFlags size = GetHouseSpecs(type)->building_flags;
|
||||
|
||||
ClearMakeHouseTile(t, tid, counter, stage, type, random_bits);
|
||||
if (size & BUILDING_2_TILES_Y) ClearMakeHouseTile(t + TileDiffXY(0, 1), tid, counter, stage, ++type, random_bits);
|
||||
if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(t + TileDiffXY(1, 0), tid, counter, stage, ++type, random_bits);
|
||||
if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), tid, counter, stage, ++type, random_bits);
|
||||
ClearMakeHouseTile(t, town, counter, stage, type, random_bits);
|
||||
if (size & BUILDING_2_TILES_Y) ClearMakeHouseTile(t + TileDiffXY(0, 1), town, counter, stage, ++type, random_bits);
|
||||
if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(t + TileDiffXY(1, 0), town, counter, stage, ++type, random_bits);
|
||||
if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), town, counter, stage, ++type, random_bits);
|
||||
}
|
||||
|
||||
|
||||
@@ -1938,7 +1939,6 @@ static bool BuildTownHouse(Town *t, TileIndex tile)
|
||||
|
||||
/* build the house */
|
||||
t->num_houses++;
|
||||
IncreaseBuildingCount(t, house);
|
||||
|
||||
/* Special houses that there can be only one of. */
|
||||
t->flags12 |= oneof;
|
||||
@@ -1959,7 +1959,7 @@ static bool BuildTownHouse(Town *t, TileIndex tile)
|
||||
}
|
||||
}
|
||||
|
||||
MakeTownHouse(tile, t->index, construction_counter, construction_stage, house, Random());
|
||||
MakeTownHouse(tile, t, construction_counter, construction_stage, house, Random());
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1968,9 +1968,10 @@ static bool BuildTownHouse(Town *t, TileIndex tile)
|
||||
}
|
||||
|
||||
|
||||
static void DoClearTownHouseHelper(TileIndex tile)
|
||||
static void DoClearTownHouseHelper(TileIndex tile, Town *t, HouseID house)
|
||||
{
|
||||
assert(IsTileType(tile, MP_HOUSE));
|
||||
DecreaseBuildingCount(t, house);
|
||||
DoClearSquare(tile);
|
||||
DeleteAnimatedTile(tile);
|
||||
}
|
||||
@@ -2021,7 +2022,6 @@ void ClearTownHouse(Town *t, TileIndex tile)
|
||||
}
|
||||
|
||||
t->num_houses--;
|
||||
DecreaseBuildingCount(t, house);
|
||||
|
||||
/* Clear flags for houses that only may exist once/town. */
|
||||
if (hs->building_flags & BUILDING_IS_CHURCH) {
|
||||
@@ -2032,10 +2032,10 @@ void ClearTownHouse(Town *t, TileIndex tile)
|
||||
|
||||
/* Do the actual clearing of tiles */
|
||||
eflags = hs->building_flags;
|
||||
DoClearTownHouseHelper(tile);
|
||||
if (eflags & BUILDING_2_TILES_X) DoClearTownHouseHelper(tile + TileDiffXY(1, 0));
|
||||
if (eflags & BUILDING_2_TILES_Y) DoClearTownHouseHelper(tile + TileDiffXY(0, 1));
|
||||
if (eflags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1));
|
||||
DoClearTownHouseHelper(tile, t, house);
|
||||
if (eflags & BUILDING_2_TILES_Y) DoClearTownHouseHelper(tile + TileDiffXY(0, 1), t, ++house);
|
||||
if (eflags & BUILDING_2_TILES_X) DoClearTownHouseHelper(tile + TileDiffXY(1, 0), t, ++house);
|
||||
if (eflags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1), t, ++house);
|
||||
}
|
||||
|
||||
static bool IsUniqueTownName(const char *name)
|
||||
|
||||
Reference in New Issue
Block a user