mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-08 23:19:40 +00:00
Codechange: Use EnumBitSet for BuildingFlags.
This commit is contained in:
parent
113205c540
commit
95bd53ddf1
32
src/house.h
32
src/house.h
@ -33,23 +33,23 @@ static const HouseID NUM_HOUSES_PER_GRF = NUM_HOUSES; ///< Number of supported h
|
||||
static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile
|
||||
static const uint HOUSE_ORIGINAL_NUM_ACCEPTS = 3; ///< Original number of accepted cargo types.
|
||||
|
||||
enum BuildingFlags : uint8_t {
|
||||
TILE_NO_FLAG = 0,
|
||||
TILE_SIZE_1x1 = 1U << 0,
|
||||
TILE_NOT_SLOPED = 1U << 1,
|
||||
TILE_SIZE_2x1 = 1U << 2,
|
||||
TILE_SIZE_1x2 = 1U << 3,
|
||||
TILE_SIZE_2x2 = 1U << 4,
|
||||
BUILDING_IS_ANIMATED = 1U << 5,
|
||||
BUILDING_IS_CHURCH = 1U << 6,
|
||||
BUILDING_IS_STADIUM = 1U << 7,
|
||||
BUILDING_HAS_1_TILE = TILE_SIZE_1x1 | TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
|
||||
BUILDING_HAS_2_TILES = TILE_SIZE_2x1 | TILE_SIZE_1x2 | TILE_SIZE_2x2,
|
||||
BUILDING_2_TILES_X = TILE_SIZE_2x1 | TILE_SIZE_2x2,
|
||||
BUILDING_2_TILES_Y = TILE_SIZE_1x2 | TILE_SIZE_2x2,
|
||||
BUILDING_HAS_4_TILES = TILE_SIZE_2x2,
|
||||
enum class BuildingFlag : uint8_t {
|
||||
Size1x1 = 0,
|
||||
NotSloped = 1,
|
||||
Size2x1 = 2,
|
||||
Size1x2 = 3,
|
||||
Size2x2 = 4,
|
||||
IsAnimated = 5,
|
||||
IsChurch = 6,
|
||||
IsStadium = 7,
|
||||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(BuildingFlags)
|
||||
using BuildingFlags = EnumBitSet<BuildingFlag, uint8_t>;
|
||||
|
||||
static constexpr BuildingFlags BUILDING_HAS_1_TILE = {BuildingFlag::Size1x1, BuildingFlag::Size2x1, BuildingFlag::Size1x2, BuildingFlag::Size2x2};
|
||||
static constexpr BuildingFlags BUILDING_HAS_2_TILES = {BuildingFlag::Size2x1, BuildingFlag::Size1x2, BuildingFlag::Size2x2};
|
||||
static constexpr BuildingFlags BUILDING_2_TILES_X = {BuildingFlag::Size2x1, BuildingFlag::Size2x2};
|
||||
static constexpr BuildingFlags BUILDING_2_TILES_Y = {BuildingFlag::Size1x2, BuildingFlag::Size2x2};
|
||||
static constexpr BuildingFlags BUILDING_HAS_4_TILES = {BuildingFlag::Size2x2};
|
||||
|
||||
enum HouseZonesBits : uint8_t {
|
||||
HZB_BEGIN = 0,
|
||||
|
@ -2502,7 +2502,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint first, uint last, int prop, Byt
|
||||
housespec->random_colour[3] = COLOUR_GREEN;
|
||||
|
||||
/* House flags 40 and 80 are exceptions; these flags are never set automatically. */
|
||||
housespec->building_flags &= ~(BUILDING_IS_CHURCH | BUILDING_IS_STADIUM);
|
||||
housespec->building_flags.Reset(BuildingFlag::IsChurch).Reset(BuildingFlag::IsStadium);
|
||||
|
||||
/* Make sure that the third cargo type is valid in this
|
||||
* climate. This can cause problems when copying the properties
|
||||
@ -9332,11 +9332,11 @@ void FinaliseCargoArray()
|
||||
*/
|
||||
static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseSpec *next2, const HouseSpec *next3, const std::string &filename)
|
||||
{
|
||||
if (((hs->building_flags & BUILDING_HAS_2_TILES) != 0 &&
|
||||
(next1 == nullptr || !next1->enabled || (next1->building_flags & BUILDING_HAS_1_TILE) != 0)) ||
|
||||
((hs->building_flags & BUILDING_HAS_4_TILES) != 0 &&
|
||||
(next2 == nullptr || !next2->enabled || (next2->building_flags & BUILDING_HAS_1_TILE) != 0 ||
|
||||
next3 == nullptr || !next3->enabled || (next3->building_flags & BUILDING_HAS_1_TILE) != 0))) {
|
||||
if ((hs->building_flags.Any(BUILDING_HAS_2_TILES) &&
|
||||
(next1 == nullptr || !next1->enabled || next1->building_flags.Any(BUILDING_HAS_1_TILE))) ||
|
||||
(hs->building_flags.Any(BUILDING_HAS_4_TILES) &&
|
||||
(next2 == nullptr || !next2->enabled || next2->building_flags.Any(BUILDING_HAS_1_TILE) ||
|
||||
next3 == nullptr || !next3->enabled || next3->building_flags.Any(BUILDING_HAS_1_TILE)))) {
|
||||
hs->enabled = false;
|
||||
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines house {} as multitile, but no suitable tiles follow. Disabling house.", filename, hs->grf_prop.local_id);
|
||||
return false;
|
||||
@ -9345,8 +9345,8 @@ static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseS
|
||||
/* Some places sum population by only counting north tiles. Other places use all tiles causing desyncs.
|
||||
* As the newgrf specs define population to be zero for non-north tiles, we just disable the offending house.
|
||||
* If you want to allow non-zero populations somewhen, make sure to sum the population of all tiles in all places. */
|
||||
if (((hs->building_flags & BUILDING_HAS_2_TILES) != 0 && next1->population != 0) ||
|
||||
((hs->building_flags & BUILDING_HAS_4_TILES) != 0 && (next2->population != 0 || next3->population != 0))) {
|
||||
if ((hs->building_flags.Any(BUILDING_HAS_2_TILES) && next1->population != 0) ||
|
||||
(hs->building_flags.Any(BUILDING_HAS_4_TILES) && (next2->population != 0 || next3->population != 0))) {
|
||||
hs->enabled = false;
|
||||
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines multitile house {} with non-zero population on additional tiles. Disabling house.", filename, hs->grf_prop.local_id);
|
||||
return false;
|
||||
@ -9361,7 +9361,7 @@ static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseS
|
||||
}
|
||||
|
||||
/* Make sure that additional parts of multitile houses are not available. */
|
||||
if ((hs->building_flags & BUILDING_HAS_1_TILE) == 0 && (hs->building_availability & HZ_ZONALL) != 0 && (hs->building_availability & HZ_CLIMALL) != 0) {
|
||||
if (!hs->building_flags.Any(BUILDING_HAS_1_TILE) && (hs->building_availability & HZ_ZONALL) != 0 && (hs->building_availability & HZ_CLIMALL) != 0) {
|
||||
hs->enabled = false;
|
||||
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines house {} without a size but marked it as available. Disabling house.", filename, hs->grf_prop.local_id);
|
||||
return false;
|
||||
@ -9447,7 +9447,7 @@ static void FinaliseHouseArray()
|
||||
* don't want to have them influencing valid tiles. As such set
|
||||
* building_flags to zero here to make sure any house following
|
||||
* this one in the pool is properly handled as 1x1 house. */
|
||||
hs->building_flags = TILE_NO_FLAG;
|
||||
hs->building_flags = {};
|
||||
}
|
||||
|
||||
/* Apply default cargo translation map for unset cargo slots */
|
||||
|
@ -646,7 +646,7 @@ bool NewHouseTileLoop(TileIndex tile)
|
||||
}
|
||||
|
||||
TriggerHouse(tile, HOUSE_TRIGGER_TILE_LOOP);
|
||||
if (hs->building_flags & BUILDING_HAS_1_TILE) TriggerHouse(tile, HOUSE_TRIGGER_TILE_LOOP_TOP);
|
||||
if (hs->building_flags.Any(BUILDING_HAS_1_TILE)) TriggerHouse(tile, HOUSE_TRIGGER_TILE_LOOP_TOP);
|
||||
|
||||
if (hs->callback_mask.Test(HouseCallbackMask::AnimationStartStop)) {
|
||||
/* If this house is marked as having a synchronised callback, all the
|
||||
@ -656,10 +656,10 @@ bool NewHouseTileLoop(TileIndex tile)
|
||||
if (hs->extra_flags.Test(HouseExtraFlag::SynchronisedCallback1B)) {
|
||||
uint16_t random = GB(Random(), 0, 16);
|
||||
|
||||
if (hs->building_flags & BUILDING_HAS_1_TILE) AnimationControl(tile, random);
|
||||
if (hs->building_flags & BUILDING_2_TILES_Y) AnimationControl(TileAddXY(tile, 0, 1), random);
|
||||
if (hs->building_flags & BUILDING_2_TILES_X) AnimationControl(TileAddXY(tile, 1, 0), random);
|
||||
if (hs->building_flags & BUILDING_HAS_4_TILES) AnimationControl(TileAddXY(tile, 1, 1), random);
|
||||
if (hs->building_flags.Any(BUILDING_HAS_1_TILE)) AnimationControl(tile, random);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_Y)) AnimationControl(TileAddXY(tile, 0, 1), random);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_X)) AnimationControl(TileAddXY(tile, 1, 0), random);
|
||||
if (hs->building_flags.Any(BUILDING_HAS_4_TILES)) AnimationControl(TileAddXY(tile, 1, 1), random);
|
||||
} else {
|
||||
AnimationControl(tile, 0);
|
||||
}
|
||||
@ -719,9 +719,9 @@ static void DoTriggerHouse(TileIndex tile, HouseTrigger trigger, uint8_t base_ra
|
||||
break;
|
||||
}
|
||||
/* Random value of first tile already set. */
|
||||
if (hs->building_flags & BUILDING_2_TILES_Y) DoTriggerHouse(TileAddXY(tile, 0, 1), trigger, random_bits, false);
|
||||
if (hs->building_flags & BUILDING_2_TILES_X) DoTriggerHouse(TileAddXY(tile, 1, 0), trigger, random_bits, false);
|
||||
if (hs->building_flags & BUILDING_HAS_4_TILES) DoTriggerHouse(TileAddXY(tile, 1, 1), trigger, random_bits, false);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_Y)) DoTriggerHouse(TileAddXY(tile, 0, 1), trigger, random_bits, false);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_X)) DoTriggerHouse(TileAddXY(tile, 1, 0), trigger, random_bits, false);
|
||||
if (hs->building_flags.Any(BUILDING_HAS_4_TILES)) DoTriggerHouse(TileAddXY(tile, 1, 1), trigger, random_bits, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -769,8 +769,8 @@ void WatchedCargoCallback(TileIndex tile, CargoTypes trigger_cargoes)
|
||||
hs = HouseSpec::Get(id);
|
||||
|
||||
DoWatchedCargoCallback(north, tile, trigger_cargoes, r);
|
||||
if (hs->building_flags & BUILDING_2_TILES_Y) DoWatchedCargoCallback(TileAddXY(north, 0, 1), tile, trigger_cargoes, r);
|
||||
if (hs->building_flags & BUILDING_2_TILES_X) DoWatchedCargoCallback(TileAddXY(north, 1, 0), tile, trigger_cargoes, r);
|
||||
if (hs->building_flags & BUILDING_HAS_4_TILES) DoWatchedCargoCallback(TileAddXY(north, 1, 1), tile, trigger_cargoes, r);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_Y)) DoWatchedCargoCallback(TileAddXY(north, 0, 1), tile, trigger_cargoes, r);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_X)) DoWatchedCargoCallback(TileAddXY(north, 1, 0), tile, trigger_cargoes, r);
|
||||
if (hs->building_flags.Any(BUILDING_HAS_4_TILES)) DoWatchedCargoCallback(TileAddXY(north, 1, 1), tile, trigger_cargoes, r);
|
||||
}
|
||||
|
||||
|
@ -84,13 +84,13 @@ void UpdateHousesAndTowns()
|
||||
if (t == north_tile) {
|
||||
const HouseSpec *hs = HouseSpec::Get(house_type);
|
||||
bool valid_house = true;
|
||||
if (hs->building_flags & TILE_SIZE_2x1) {
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x1)) {
|
||||
TileIndex tile = t + TileDiffXY(1, 0);
|
||||
if (!IsTileType(tile, MP_HOUSE) || GetCleanHouseType(tile) != house_type + 1) valid_house = false;
|
||||
} else if (hs->building_flags & TILE_SIZE_1x2) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size1x2)) {
|
||||
TileIndex tile = t + TileDiffXY(0, 1);
|
||||
if (!IsTileType(tile, MP_HOUSE) || GetCleanHouseType(tile) != house_type + 1) valid_house = false;
|
||||
} else if (hs->building_flags & TILE_SIZE_2x2) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size2x2)) {
|
||||
TileIndex tile = t + TileDiffXY(0, 1);
|
||||
if (!IsTileType(tile, MP_HOUSE) || GetCleanHouseType(tile) != house_type + 1) valid_house = false;
|
||||
tile = t + TileDiffXY(1, 0);
|
||||
|
@ -1833,443 +1833,443 @@ extern const HouseSpec _original_house_specs[] = {
|
||||
* | | | | | | | | | | |
|
||||
*/
|
||||
MS(1963, CalendarTime::MAX_YEAR, 187, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 70, 8, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 00
|
||||
MS(1957, CalendarTime::MAX_YEAR, 85, 140, STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1, 130, 55, 8, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 01
|
||||
MS(1968, CalendarTime::MAX_YEAR, 40, 100, STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1, 90, 20, 8, 3, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 02
|
||||
MS( 0, CalendarTime::MAX_YEAR, 5, 90, STR_TOWN_BUILDING_NAME_CHURCH_1, 230, 2, 2, 0, 0,
|
||||
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
|
||||
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
|
||||
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 03
|
||||
MS(1975, CalendarTime::MAX_YEAR, 220, 160, STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1, 160, 85, 10, 4, 6,
|
||||
BUILDING_IS_ANIMATED | TILE_SIZE_1x1,
|
||||
BuildingFlags({BuildingFlag::IsAnimated, BuildingFlag::Size1x1}),
|
||||
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 04
|
||||
MS(1975, CalendarTime::MAX_YEAR, 220, 160, STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1, 160, 85, 10, 4, 6,
|
||||
BUILDING_IS_ANIMATED | TILE_SIZE_1x1,
|
||||
BuildingFlags({BuildingFlag::IsAnimated, BuildingFlag::Size1x1}),
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 05
|
||||
MS( 0, CalendarTime::MAX_YEAR, 30, 80, STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1, 80, 12, 4, 1, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 06
|
||||
MS(1959, CalendarTime::MAX_YEAR, 140, 180, STR_TOWN_BUILDING_NAME_HOTEL_1, 150, 22, 6, 1, 2,
|
||||
TILE_SIZE_1x2,
|
||||
BuildingFlag::Size1x2,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 07
|
||||
MS(1959, CalendarTime::MAX_YEAR, 0, 180, STR_TOWN_BUILDING_NAME_HOTEL_1, 150, 22, 6, 1, 2,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 08
|
||||
MS(1945, CalendarTime::MAX_YEAR, 0, 65, STR_TOWN_BUILDING_NAME_STATUE_1, 40, 0, 2, 0, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 09
|
||||
MS(1945, CalendarTime::MAX_YEAR, 0, 65, STR_TOWN_BUILDING_NAME_FOUNTAIN_1, 40, 0, 2, 0, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0A
|
||||
MS( 0, CalendarTime::MAX_YEAR, 0, 60, STR_TOWN_BUILDING_NAME_PARK_1, 75, 0, 2, 0, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0B
|
||||
MS(1935, CalendarTime::MAX_YEAR, 0, 60, STR_TOWN_BUILDING_NAME_PARK_1, 75, 0, 2, 0, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0C
|
||||
MS(1951, CalendarTime::MAX_YEAR, 150, 130, STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_2, 110, 65, 8, 2, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0D
|
||||
MS(1930, 1960, 95, 110, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 100, 48, 6, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0E
|
||||
MS(1930, 1960, 95, 105, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 100, 48, 6, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 0F
|
||||
MS(1930, 1960, 95, 107, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 100, 48, 6, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 10
|
||||
MS(1977, CalendarTime::MAX_YEAR, 130, 200, STR_TOWN_BUILDING_NAME_MODERN_OFFICE_BUILDING_1, 150, 50, 10, 3, 6,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 11
|
||||
MS(1983, CalendarTime::MAX_YEAR, 6, 145, STR_TOWN_BUILDING_NAME_WAREHOUSE_1, 110, 10, 6, 3, 8,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 12
|
||||
MS(1985, CalendarTime::MAX_YEAR, 110, 155, STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_3, 110, 55, 6, 2, 6,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 13
|
||||
MS( 0, CalendarTime::MAX_YEAR, 65, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
|
||||
BUILDING_IS_STADIUM | TILE_SIZE_2x2,
|
||||
BuildingFlags({BuildingFlag::IsStadium, BuildingFlag::Size2x2}),
|
||||
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 14
|
||||
MS( 0, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 15
|
||||
MS( 0, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 16
|
||||
MS( 0, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_1, 300, 5, 4, 0, 0,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 17
|
||||
MS( 0, 1951, 15, 70, STR_TOWN_BUILDING_NAME_OLD_HOUSES_1, 75, 6, 3, 1, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 18
|
||||
MS( 0, 1952, 12, 75, STR_TOWN_BUILDING_NAME_COTTAGES_1, 75, 7, 3, 1, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 19
|
||||
MS(1931, CalendarTime::MAX_YEAR, 13, 71, STR_TOWN_BUILDING_NAME_HOUSES_1, 75, 8, 3, 1, 0,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1A
|
||||
MS(1935, CalendarTime::MAX_YEAR, 100, 135, STR_TOWN_BUILDING_NAME_FLATS_1, 100, 35, 7, 2, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1B
|
||||
MS(1963, CalendarTime::MAX_YEAR, 170, 145, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_2, 170, 50, 8, 3, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1C
|
||||
MS( 0, 1955, 100, 132, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_2, 135, 40, 6, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1D
|
||||
MS(1973, CalendarTime::MAX_YEAR, 180, 155, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_3, 180, 64, 8, 3, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1E
|
||||
MS( 0, CalendarTime::MAX_YEAR, 35, 220, STR_TOWN_BUILDING_NAME_THEATER_1, 230, 23, 8, 2, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 1F
|
||||
MS(1958, CalendarTime::MAX_YEAR, 65, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
|
||||
BUILDING_IS_STADIUM | TILE_SIZE_2x2,
|
||||
BuildingFlags({BuildingFlag::IsStadium, BuildingFlag::Size2x2}),
|
||||
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 20
|
||||
MS(1958, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 21
|
||||
MS(1958, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 22
|
||||
MS(1958, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_STADIUM_2, 300, 5, 4, 0, 0,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 23
|
||||
MS(2000, CalendarTime::MAX_YEAR, 140, 170, STR_TOWN_BUILDING_NAME_OFFICES_1, 250, 65, 8, 3, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 24
|
||||
MS( 0, 1960, 15, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 25
|
||||
MS( 0, 1960, 15, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 26
|
||||
MS(1945, CalendarTime::MAX_YEAR, 35, 210, STR_TOWN_BUILDING_NAME_CINEMA_1, 230, 23, 8, 2, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 27
|
||||
MS(1983, CalendarTime::MAX_YEAR, 180, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
|
||||
TILE_SIZE_2x2,
|
||||
BuildingFlag::Size2x2,
|
||||
HZ_TEMP | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 |HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 28
|
||||
MS(1983, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 29
|
||||
MS(1983, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 2A
|
||||
MS(1983, CalendarTime::MAX_YEAR, 0, 250, STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1, 300, 5, 8, 2, 3,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 2B
|
||||
MS( 0, CalendarTime::MAX_YEAR, 80, 100, STR_TOWN_BUILDING_NAME_FLATS_1, 90, 20, 5, 2, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2C
|
||||
MS( 0, CalendarTime::MAX_YEAR, 80, 100, STR_TOWN_BUILDING_NAME_FLATS_1, 90, 20, 5, 2, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2D
|
||||
MS( 0, CalendarTime::MAX_YEAR, 16, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2E
|
||||
MS( 0, CalendarTime::MAX_YEAR, 16, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 2F
|
||||
MS( 0, 1963, 14, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 30
|
||||
MS( 0, 1963, 14, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 70, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 31
|
||||
MS(1966, CalendarTime::MAX_YEAR, 135, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 120, 60, 8, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 32
|
||||
MS(1966, CalendarTime::MAX_YEAR, 135, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 120, 60, 8, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 33
|
||||
MS(1970, CalendarTime::MAX_YEAR, 170, 170, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 70, 9, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 34
|
||||
MS(1970, CalendarTime::MAX_YEAR, 170, 170, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 70, 9, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 35
|
||||
MS(1974, CalendarTime::MAX_YEAR, 210, 200, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 10, 3, 5,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 36
|
||||
MS(1974, CalendarTime::MAX_YEAR, 210, 200, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 10, 3, 5,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 37
|
||||
MS( 0, CalendarTime::MAX_YEAR, 10, 60, STR_TOWN_BUILDING_NAME_HOUSES_2, 60, 5, 2, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 38
|
||||
MS( 0, CalendarTime::MAX_YEAR, 10, 60, STR_TOWN_BUILDING_NAME_HOUSES_2, 60, 5, 2, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 39
|
||||
MS( 0, CalendarTime::MAX_YEAR, 25, 100, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 80, 20, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3A
|
||||
MS( 0, CalendarTime::MAX_YEAR, 25, 100, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 80, 20, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3B
|
||||
MS( 0, CalendarTime::MAX_YEAR, 6, 85, STR_TOWN_BUILDING_NAME_CHURCH_1, 230, 2, 2, 0, 0,
|
||||
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
|
||||
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
|
||||
HZ_SUBARTC_BELOW | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 3C
|
||||
MS( 0, CalendarTime::MAX_YEAR, 6, 85, STR_TOWN_BUILDING_NAME_CHURCH_1, 230, 2, 2, 0, 0,
|
||||
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
|
||||
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 3D
|
||||
MS( 0, CalendarTime::MAX_YEAR, 17, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 7, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3E
|
||||
MS( 0, CalendarTime::MAX_YEAR, 17, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 7, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 3F
|
||||
MS( 0, 1960, 90, 140, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 110, 45, 6, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 40
|
||||
MS( 0, 1960, 90, 140, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 110, 45, 6, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 41
|
||||
MS(1972, CalendarTime::MAX_YEAR, 140, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 3,
|
||||
TILE_SIZE_1x2,
|
||||
BuildingFlag::Size1x2,
|
||||
HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 42
|
||||
MS(1972, CalendarTime::MAX_YEAR, 0, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 2,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 43
|
||||
MS(1972, CalendarTime::MAX_YEAR, 140, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 3,
|
||||
TILE_SIZE_1x2,
|
||||
BuildingFlag::Size1x2,
|
||||
HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 44
|
||||
MS(1972, CalendarTime::MAX_YEAR, 0, 160, STR_TOWN_BUILDING_NAME_HOTEL_1, 160, 25, 6, 1, 2,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 45
|
||||
MS(1963, CalendarTime::MAX_YEAR, 105, 130, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 105, 50, 7, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 46
|
||||
MS(1963, CalendarTime::MAX_YEAR, 105, 130, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 105, 50, 7, 2, 3,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 47
|
||||
MS(1978, CalendarTime::MAX_YEAR, 190, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 135, 75, 9, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_BELOW | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 48
|
||||
MS(1978, CalendarTime::MAX_YEAR, 190, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 135, 75, 9, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 49
|
||||
MS(1967, CalendarTime::MAX_YEAR, 250, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
|
||||
TILE_SIZE_2x1,
|
||||
BuildingFlag::Size2x1,
|
||||
HZ_SUBARTC_BELOW| HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4A
|
||||
MS(1967, CalendarTime::MAX_YEAR, 0, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4B
|
||||
MS(1967, CalendarTime::MAX_YEAR, 250, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
|
||||
TILE_SIZE_2x1,
|
||||
BuildingFlag::Size2x1,
|
||||
HZ_SUBARTC_ABOVE | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4C
|
||||
MS(1967, CalendarTime::MAX_YEAR, 0, 140, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 200, 60, 7, 2, 2,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 4D
|
||||
MS( 0, CalendarTime::MAX_YEAR, 16, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 4E
|
||||
MS( 0, CalendarTime::MAX_YEAR, 16, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 4F
|
||||
MS( 0, CalendarTime::MAX_YEAR, 16, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 5, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 50
|
||||
MS( 0, CalendarTime::MAX_YEAR, 7, 30, STR_TOWN_BUILDING_NAME_HOUSES_2, 30, 4, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 51
|
||||
MS( 0, CalendarTime::MAX_YEAR, 45, 130, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 15, 6, 2, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 52
|
||||
MS( 0, CalendarTime::MAX_YEAR, 8, 90, STR_TOWN_BUILDING_NAME_CHURCH_1, 200, 3, 2, 0, 0,
|
||||
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
|
||||
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
|
||||
HZ_SUBTROPIC | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 53
|
||||
MS( 0, CalendarTime::MAX_YEAR, 18, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 7, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FOOD), // 54
|
||||
MS(1973, CalendarTime::MAX_YEAR, 90, 110, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 24, 6, 2, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 55
|
||||
MS(1962, CalendarTime::MAX_YEAR, 120, 120, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 25, 6, 2, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 56
|
||||
MS(1984, CalendarTime::MAX_YEAR, 250, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 8, 3, 4,
|
||||
TILE_SIZE_2x1,
|
||||
BuildingFlag::Size2x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 57
|
||||
MS(1984, CalendarTime::MAX_YEAR, 0, 190, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 140, 80, 8, 3, 4,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_SUBTROPIC,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 58
|
||||
MS( 0, CalendarTime::MAX_YEAR, 80, 110, STR_TOWN_BUILDING_NAME_FLATS_1, 95, 23, 6, 2, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 59
|
||||
MS(1993, CalendarTime::MAX_YEAR, 180, 180, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 150, 90, 8, 3, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_SUBTROPIC | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_GOODS), // 5A
|
||||
MS( 0, CalendarTime::MAX_YEAR, 8, 90, STR_TOWN_BUILDING_NAME_CHURCH_1, 200, 3, 2, 0, 0,
|
||||
BUILDING_IS_CHURCH | TILE_SIZE_1x1,
|
||||
BuildingFlags({BuildingFlag::IsChurch, BuildingFlag::Size1x1}),
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5B
|
||||
MS( 0, CalendarTime::MAX_YEAR, 18, 90, STR_TOWN_BUILDING_NAME_HOUSES_2, 90, 5, 6, 2, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5C
|
||||
MS( 0, CalendarTime::MAX_YEAR, 7, 70, STR_TOWN_BUILDING_NAME_HOUSES_2, 50, 3, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5D
|
||||
MS( 0, CalendarTime::MAX_YEAR, 15, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5E
|
||||
MS( 0, CalendarTime::MAX_YEAR, 17, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 5F
|
||||
MS( 0, CalendarTime::MAX_YEAR, 19, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 60
|
||||
MS( 0, CalendarTime::MAX_YEAR, 21, 80, STR_TOWN_BUILDING_NAME_HOUSES_2, 75, 6, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 61
|
||||
MS( 0, CalendarTime::MAX_YEAR, 75, 160, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 20, 8, 4, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 62
|
||||
MS( 0, CalendarTime::MAX_YEAR, 35, 90, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 9, 4, 1, 2,
|
||||
TILE_SIZE_1x2,
|
||||
BuildingFlag::Size1x2,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 63
|
||||
MS( 0, CalendarTime::MAX_YEAR, 0, 90, STR_TOWN_BUILDING_NAME_HOUSES_2, 80, 0, 4, 1, 2,
|
||||
TILE_NO_FLAG,
|
||||
{},
|
||||
HZ_NOZNS,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 64
|
||||
MS( 0, CalendarTime::MAX_YEAR, 85, 150, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 18, 8, 4, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 65
|
||||
MS( 0, CalendarTime::MAX_YEAR, 11, 60, STR_TOWN_BUILDING_NAME_IGLOO_1, 45, 3, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 66
|
||||
MS( 0, CalendarTime::MAX_YEAR, 10, 60, STR_TOWN_BUILDING_NAME_TEPEES_1, 45, 3, 3, 1, 1,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 67
|
||||
MS( 0, CalendarTime::MAX_YEAR, 67, 140, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 130, 22, 8, 4, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), // 68
|
||||
MS( 0, CalendarTime::MAX_YEAR, 86, 145, STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1, 130, 23, 8, 4, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), // 69
|
||||
MS( 0, CalendarTime::MAX_YEAR, 95, 165, STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_1, 130, 28, 8, 4, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 6A
|
||||
MS( 0, CalendarTime::MAX_YEAR, 30, 90, STR_TOWN_BUILDING_NAME_STATUE_1, 70, 10, 4, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 6B
|
||||
MS( 0, CalendarTime::MAX_YEAR, 25, 75, STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1, 65, 8, 3, 1, 2,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_CANDY), // 6C
|
||||
MS( 0, CalendarTime::MAX_YEAR, 18, 85, STR_TOWN_BUILDING_NAME_PIGGY_BANK_1, 95, 7, 3, 2, 4,
|
||||
TILE_SIZE_1x1,
|
||||
BuildingFlag::Size1x1,
|
||||
HZ_TOYLND | HZ_ZON5 | HZ_ZON4 | HZ_ZON3 | HZ_ZON2 | HZ_ZON1,
|
||||
CT_PASSENGERS, CT_MAIL, CT_FIZZY_DRINKS), // 6D
|
||||
};
|
||||
|
@ -360,7 +360,7 @@ static void AnimateTile_Town(TileIndex tile)
|
||||
* Not exactly sure when this happens, but probably when a house changes.
|
||||
* Before this was just a return...so it'd leak animated tiles..
|
||||
* That bug seems to have been here since day 1?? */
|
||||
if (!(HouseSpec::Get(GetHouseType(tile))->building_flags & BUILDING_IS_ANIMATED)) {
|
||||
if (!HouseSpec::Get(GetHouseType(tile))->building_flags.Test(BuildingFlag::IsAnimated)) {
|
||||
DeleteAnimatedTile(tile);
|
||||
return;
|
||||
}
|
||||
@ -479,9 +479,9 @@ static void RemoveNearbyStations(Town *t, TileIndex tile, BuildingFlags flags)
|
||||
const Station *st = *it;
|
||||
|
||||
bool covers_area = st->TileIsInCatchment(tile);
|
||||
if (flags & BUILDING_2_TILES_Y) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(0, 1));
|
||||
if (flags & BUILDING_2_TILES_X) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(1, 0));
|
||||
if (flags & BUILDING_HAS_4_TILES) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(1, 1));
|
||||
if (flags.Any(BUILDING_2_TILES_Y)) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(0, 1));
|
||||
if (flags.Any(BUILDING_2_TILES_X)) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(1, 0));
|
||||
if (flags.Any(BUILDING_HAS_4_TILES)) covers_area |= st->TileIsInCatchment(tile + TileDiffXY(1, 1));
|
||||
|
||||
if (covers_area && !st->CatchmentCoversTown(t->index)) {
|
||||
it = t->stations_near.erase(it);
|
||||
@ -520,11 +520,11 @@ static void AdvanceSingleHouseConstruction(TileIndex tile)
|
||||
*/
|
||||
static void AdvanceHouseConstruction(TileIndex tile)
|
||||
{
|
||||
uint flags = HouseSpec::Get(GetHouseType(tile))->building_flags;
|
||||
if (flags & BUILDING_HAS_1_TILE) AdvanceSingleHouseConstruction(TileAddXY(tile, 0, 0));
|
||||
if (flags & BUILDING_2_TILES_Y) AdvanceSingleHouseConstruction(TileAddXY(tile, 0, 1));
|
||||
if (flags & BUILDING_2_TILES_X) AdvanceSingleHouseConstruction(TileAddXY(tile, 1, 0));
|
||||
if (flags & BUILDING_HAS_4_TILES) AdvanceSingleHouseConstruction(TileAddXY(tile, 1, 1));
|
||||
BuildingFlags flags = HouseSpec::Get(GetHouseType(tile))->building_flags;
|
||||
if (flags.Any(BUILDING_HAS_1_TILE)) AdvanceSingleHouseConstruction(TileAddXY(tile, 0, 0));
|
||||
if (flags.Any(BUILDING_2_TILES_Y)) AdvanceSingleHouseConstruction(TileAddXY(tile, 0, 1));
|
||||
if (flags.Any(BUILDING_2_TILES_X)) AdvanceSingleHouseConstruction(TileAddXY(tile, 1, 0));
|
||||
if (flags.Any(BUILDING_HAS_4_TILES)) AdvanceSingleHouseConstruction(TileAddXY(tile, 1, 1));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -619,7 +619,7 @@ static void TileLoop_Town(TileIndex tile)
|
||||
const HouseSpec *hs = HouseSpec::Get(house_id);
|
||||
|
||||
/* If the lift has a destination, it is already an animated tile. */
|
||||
if ((hs->building_flags & BUILDING_IS_ANIMATED) &&
|
||||
if (hs->building_flags.Test(BuildingFlag::IsAnimated) &&
|
||||
house_id < NEW_HOUSE_OFFSET &&
|
||||
!LiftHasDestination(tile) &&
|
||||
Chance16(1, 2)) {
|
||||
@ -671,7 +671,7 @@ static void TileLoop_Town(TileIndex tile)
|
||||
|
||||
Backup<CompanyID> cur_company(_current_company, OWNER_TOWN);
|
||||
|
||||
if ((hs->building_flags & BUILDING_HAS_1_TILE) &&
|
||||
if (hs->building_flags.Any(BUILDING_HAS_1_TILE) &&
|
||||
HasBit(t->flags, TOWN_IS_GROWING) &&
|
||||
CanDeleteHouse(tile) &&
|
||||
GetHouseAge(tile) >= hs->minimum_life &&
|
||||
@ -685,18 +685,18 @@ static void TileLoop_Town(TileIndex tile)
|
||||
/* If we are multi-tile houses, make sure to replace the house
|
||||
* closest to city center. If we do not do this, houses tend to
|
||||
* wander away from roads and other houses. */
|
||||
if (hs->building_flags & BUILDING_HAS_2_TILES) {
|
||||
if (hs->building_flags.Any(BUILDING_HAS_2_TILES)) {
|
||||
/* House tiles are always the most north tile. Move the new
|
||||
* house to the south if we are north of the city center. */
|
||||
TileIndexDiffC grid_pos = TileIndexToTileIndexDiffC(t->xy, tile);
|
||||
int x = Clamp(grid_pos.x, 0, 1);
|
||||
int y = Clamp(grid_pos.y, 0, 1);
|
||||
|
||||
if (hs->building_flags & TILE_SIZE_2x2) {
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x2)) {
|
||||
tile = TileAddXY(tile, x, y);
|
||||
} else if (hs->building_flags & TILE_SIZE_1x2) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size1x2)) {
|
||||
tile = TileAddXY(tile, 0, y);
|
||||
} else if (hs->building_flags & TILE_SIZE_2x1) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size2x1)) {
|
||||
tile = TileAddXY(tile, x, 0);
|
||||
}
|
||||
}
|
||||
@ -2509,7 +2509,7 @@ static inline void ClearMakeHouseTile(TileIndex tile, Town *t, uint8_t counter,
|
||||
|
||||
IncreaseBuildingCount(t, type);
|
||||
MakeHouseTile(tile, t->index, counter, stage, type, random_bits);
|
||||
if (HouseSpec::Get(type)->building_flags & BUILDING_IS_ANIMATED) AddAnimatedTile(tile, false);
|
||||
if (HouseSpec::Get(type)->building_flags.Test(BuildingFlag::IsAnimated)) AddAnimatedTile(tile, false);
|
||||
|
||||
MarkTileDirtyByTile(tile);
|
||||
}
|
||||
@ -2530,11 +2530,11 @@ static void MakeTownHouse(TileIndex tile, Town *t, uint8_t counter, uint8_t stag
|
||||
BuildingFlags size = HouseSpec::Get(type)->building_flags;
|
||||
|
||||
ClearMakeHouseTile(tile, t, counter, stage, type, random_bits);
|
||||
if (size & BUILDING_2_TILES_Y) ClearMakeHouseTile(tile + TileDiffXY(0, 1), t, counter, stage, ++type, random_bits);
|
||||
if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(tile + TileDiffXY(1, 0), t, counter, stage, ++type, random_bits);
|
||||
if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(tile + TileDiffXY(1, 1), t, counter, stage, ++type, random_bits);
|
||||
if (size.Any(BUILDING_2_TILES_Y)) ClearMakeHouseTile(tile + TileDiffXY(0, 1), t, counter, stage, ++type, random_bits);
|
||||
if (size.Any(BUILDING_2_TILES_X)) ClearMakeHouseTile(tile + TileDiffXY(1, 0), t, counter, stage, ++type, random_bits);
|
||||
if (size.Any(BUILDING_HAS_4_TILES)) ClearMakeHouseTile(tile + TileDiffXY(1, 1), t, counter, stage, ++type, random_bits);
|
||||
|
||||
ForAllStationsAroundTiles(TileArea(tile, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), [t](Station *st, TileIndex) {
|
||||
ForAllStationsAroundTiles(TileArea(tile, size.Any(BUILDING_2_TILES_X) ? 2 : 1, size.Any(BUILDING_2_TILES_Y) ? 2 : 1), [t](Station *st, TileIndex) {
|
||||
t->stations_near.insert(st);
|
||||
return true;
|
||||
});
|
||||
@ -2844,23 +2844,23 @@ static bool TryBuildTownHouse(Town *t, TileIndex tile)
|
||||
/* Special houses that there can be only one of. */
|
||||
uint oneof = 0;
|
||||
|
||||
if (hs->building_flags & BUILDING_IS_CHURCH) {
|
||||
if (hs->building_flags.Test(BuildingFlag::IsChurch)) {
|
||||
SetBit(oneof, TOWN_HAS_CHURCH);
|
||||
} else if (hs->building_flags & BUILDING_IS_STADIUM) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::IsStadium)) {
|
||||
SetBit(oneof, TOWN_HAS_STADIUM);
|
||||
}
|
||||
|
||||
if (t->flags & oneof) continue;
|
||||
|
||||
/* Make sure there is no slope? */
|
||||
bool noslope = (hs->building_flags & TILE_NOT_SLOPED) != 0;
|
||||
bool noslope = hs->building_flags.Test(BuildingFlag::NotSloped);
|
||||
if (noslope && slope != SLOPE_FLAT) continue;
|
||||
|
||||
if (hs->building_flags & TILE_SIZE_2x2) {
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x2)) {
|
||||
if (!CheckTownBuild2x2House(&tile, t, maxz, noslope)) continue;
|
||||
} else if (hs->building_flags & TILE_SIZE_2x1) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size2x1)) {
|
||||
if (!CheckTownBuild2House(&tile, t, maxz, noslope, DIAGDIR_SW)) continue;
|
||||
} else if (hs->building_flags & TILE_SIZE_1x2) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size1x2)) {
|
||||
if (!CheckTownBuild2House(&tile, t, maxz, noslope, DIAGDIR_SE)) continue;
|
||||
} else {
|
||||
/* 1x1 house checks are already done */
|
||||
@ -2909,13 +2909,13 @@ CommandCost CmdPlaceHouse(DoCommandFlag flags, TileIndex tile, HouseID house)
|
||||
int maxz = GetTileMaxZ(tile);
|
||||
|
||||
/* Make sure there is no slope? */
|
||||
bool noslope = (hs->building_flags & TILE_NOT_SLOPED) != 0;
|
||||
bool noslope = hs->building_flags.Test(BuildingFlag::NotSloped);
|
||||
if (noslope && slope != SLOPE_FLAT) return CommandCost(STR_ERROR_FLAT_LAND_REQUIRED);
|
||||
|
||||
TileArea ta = tile;
|
||||
if (hs->building_flags & TILE_SIZE_2x2) ta.Add(TileAddXY(tile, 1, 1));
|
||||
if (hs->building_flags & TILE_SIZE_2x1) ta.Add(TileAddByDiagDir(tile, DIAGDIR_SW));
|
||||
if (hs->building_flags & TILE_SIZE_1x2) ta.Add(TileAddByDiagDir(tile, DIAGDIR_SE));
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x2)) ta.Add(TileAddXY(tile, 1, 1));
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x1)) ta.Add(TileAddByDiagDir(tile, DIAGDIR_SW));
|
||||
if (hs->building_flags.Test(BuildingFlag::Size1x2)) ta.Add(TileAddByDiagDir(tile, DIAGDIR_SE));
|
||||
|
||||
/* Check additonal tiles covered by this house. */
|
||||
for (const TileIndex &subtile : ta) {
|
||||
@ -2957,16 +2957,16 @@ static void DoClearTownHouseHelper(TileIndex tile, Town *t, HouseID house)
|
||||
TileIndexDiff GetHouseNorthPart(HouseID &house)
|
||||
{
|
||||
if (house >= 3) { // house id 0,1,2 MUST be single tile houses, or this code breaks.
|
||||
if (HouseSpec::Get(house - 1)->building_flags & TILE_SIZE_2x1) {
|
||||
if (HouseSpec::Get(house - 1)->building_flags.Test(BuildingFlag::Size2x1)) {
|
||||
house--;
|
||||
return TileDiffXY(-1, 0);
|
||||
} else if (HouseSpec::Get(house - 1)->building_flags & BUILDING_2_TILES_Y) {
|
||||
} else if (HouseSpec::Get(house - 1)->building_flags.Any(BUILDING_2_TILES_Y)) {
|
||||
house--;
|
||||
return TileDiffXY(0, -1);
|
||||
} else if (HouseSpec::Get(house - 2)->building_flags & BUILDING_HAS_4_TILES) {
|
||||
} else if (HouseSpec::Get(house - 2)->building_flags.Any(BUILDING_HAS_4_TILES)) {
|
||||
house -= 2;
|
||||
return TileDiffXY(-1, 0);
|
||||
} else if (HouseSpec::Get(house - 3)->building_flags & BUILDING_HAS_4_TILES) {
|
||||
} else if (HouseSpec::Get(house - 3)->building_flags.Any(BUILDING_HAS_4_TILES)) {
|
||||
house -= 3;
|
||||
return TileDiffXY(-1, -1);
|
||||
}
|
||||
@ -2998,17 +2998,17 @@ void ClearTownHouse(Town *t, TileIndex tile)
|
||||
t->cache.num_houses--;
|
||||
|
||||
/* Clear flags for houses that only may exist once/town. */
|
||||
if (hs->building_flags & BUILDING_IS_CHURCH) {
|
||||
if (hs->building_flags.Test(BuildingFlag::IsChurch)) {
|
||||
ClrBit(t->flags, TOWN_HAS_CHURCH);
|
||||
} else if (hs->building_flags & BUILDING_IS_STADIUM) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::IsStadium)) {
|
||||
ClrBit(t->flags, TOWN_HAS_STADIUM);
|
||||
}
|
||||
|
||||
/* Do the actual clearing of tiles */
|
||||
DoClearTownHouseHelper(tile, t, house);
|
||||
if (hs->building_flags & BUILDING_2_TILES_Y) DoClearTownHouseHelper(tile + TileDiffXY(0, 1), t, ++house);
|
||||
if (hs->building_flags & BUILDING_2_TILES_X) DoClearTownHouseHelper(tile + TileDiffXY(1, 0), t, ++house);
|
||||
if (hs->building_flags & BUILDING_HAS_4_TILES) DoClearTownHouseHelper(tile + TileDiffXY(1, 1), t, ++house);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_Y)) DoClearTownHouseHelper(tile + TileDiffXY(0, 1), t, ++house);
|
||||
if (hs->building_flags.Any(BUILDING_2_TILES_X)) DoClearTownHouseHelper(tile + TileDiffXY(1, 0), t, ++house);
|
||||
if (hs->building_flags.Any(BUILDING_HAS_4_TILES)) DoClearTownHouseHelper(tile + TileDiffXY(1, 1), t, ++house);
|
||||
|
||||
RemoveNearbyStations(t, tile, hs->building_flags);
|
||||
|
||||
@ -4090,8 +4090,8 @@ static CommandCost TerraformTile_Town(TileIndex tile, DoCommandFlag flags, int z
|
||||
GetHouseNorthPart(house); // modifies house to the ID of the north tile
|
||||
const HouseSpec *hs = HouseSpec::Get(house);
|
||||
|
||||
/* Here we differ from TTDP by checking TILE_NOT_SLOPED */
|
||||
if (((hs->building_flags & TILE_NOT_SLOPED) == 0) && !IsSteepSlope(tileh_new) &&
|
||||
/* Here we differ from TTDP by checking BuildingFlag::NotSloped */
|
||||
if (!hs->building_flags.Test(BuildingFlag::NotSloped) && !IsSteepSlope(tileh_new) &&
|
||||
(GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new))) {
|
||||
bool allow_terraform = true;
|
||||
|
||||
|
@ -1435,15 +1435,15 @@ void DrawHouseInGUI(int x, int y, HouseID house_id, int view)
|
||||
int y_delta = ScaleGUITrad(TILE_PIXELS / 2);
|
||||
|
||||
const HouseSpec *hs = HouseSpec::Get(house_id);
|
||||
if (hs->building_flags & TILE_SIZE_2x2) {
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x2)) {
|
||||
draw(x, y - y_delta - y_delta, house_id, view); // North corner.
|
||||
draw(x + x_delta, y - y_delta, house_id + 1, view); // West corner.
|
||||
draw(x - x_delta, y - y_delta, house_id + 2, view); // East corner.
|
||||
draw(x, y, house_id + 3, view); // South corner.
|
||||
} else if (hs->building_flags & TILE_SIZE_2x1) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size2x1)) {
|
||||
draw(x + x_delta / 2, y - y_delta, house_id, view); // North east tile.
|
||||
draw(x - x_delta / 2, y, house_id + 1, view); // South west tile.
|
||||
} else if (hs->building_flags & TILE_SIZE_1x2) {
|
||||
} else if (hs->building_flags.Test(BuildingFlag::Size1x2)) {
|
||||
draw(x - x_delta / 2, y - y_delta, house_id, view); // North west tile.
|
||||
draw(x + x_delta / 2, y, house_id + 1, view); // South east tile.
|
||||
} else {
|
||||
@ -1643,13 +1643,13 @@ struct BuildHouseWindow : public PickerWindow {
|
||||
ResetObjectToPlace();
|
||||
} else {
|
||||
SetObjectToPlaceWnd(SPR_CURSOR_TOWN, PAL_NONE, HT_RECT | HT_DIAGONAL, this);
|
||||
if (spec->building_flags & TILE_SIZE_2x2) {
|
||||
if (spec->building_flags.Test(BuildingFlag::Size2x2)) {
|
||||
SetTileSelectSize(2, 2);
|
||||
} else if (spec->building_flags & TILE_SIZE_2x1) {
|
||||
} else if (spec->building_flags.Test(BuildingFlag::Size2x1)) {
|
||||
SetTileSelectSize(2, 1);
|
||||
} else if (spec->building_flags & TILE_SIZE_1x2) {
|
||||
} else if (spec->building_flags.Test(BuildingFlag::Size1x2)) {
|
||||
SetTileSelectSize(1, 2);
|
||||
} else if (spec->building_flags & TILE_SIZE_1x1) {
|
||||
} else if (spec->building_flags.Test(BuildingFlag::Size1x1)) {
|
||||
SetTileSelectSize(1, 1);
|
||||
}
|
||||
}
|
||||
@ -1700,10 +1700,10 @@ struct BuildHouseWindow : public PickerWindow {
|
||||
line << "\n";
|
||||
|
||||
uint8_t size = 0;
|
||||
if ((hs->building_flags & TILE_SIZE_1x1) != 0) size = 0x11;
|
||||
if ((hs->building_flags & TILE_SIZE_2x1) != 0) size = 0x21;
|
||||
if ((hs->building_flags & TILE_SIZE_1x2) != 0) size = 0x12;
|
||||
if ((hs->building_flags & TILE_SIZE_2x2) != 0) size = 0x22;
|
||||
if (hs->building_flags.Test(BuildingFlag::Size1x1)) size = 0x11;
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x1)) size = 0x21;
|
||||
if (hs->building_flags.Test(BuildingFlag::Size1x2)) size = 0x12;
|
||||
if (hs->building_flags.Test(BuildingFlag::Size2x2)) size = 0x22;
|
||||
SetDParam(0, GB(size, 0, 4));
|
||||
SetDParam(1, GB(size, 4, 4));
|
||||
line << GetString(STR_HOUSE_PICKER_SIZE);
|
||||
|
Loading…
Reference in New Issue
Block a user