|
@@ -30,27 +30,33 @@ static BuildingCounts _building_count
|
|
|
static HouseClassMapping _class_mapping[HOUSE_CLASS_MAX];
|
|
|
|
|
|
HouseOverrideManager _house_mngr(NEW_HOUSE_OFFSET, HOUSE_MAX, INVALID_HOUSE_ID);
|
|
|
|
|
|
void CheckHouseIDs()
|
|
|
{
|
|
|
Town *town;
|
|
|
InitializeBuildingCounts();
|
|
|
|
|
|
/* Reset town population */
|
|
|
FOR_ALL_TOWNS(town) town->population = 0;
|
|
|
|
|
|
for (TileIndex t = 0; t < MapSize(); t++) {
|
|
|
HouseID house_id;
|
|
|
|
|
|
if (!IsTileType(t, MP_HOUSE)) continue;
|
|
|
|
|
|
house_id = GetHouseType(t);
|
|
|
if (!GetHouseSpecs(house_id)->enabled && house_id >= NEW_HOUSE_OFFSET) {
|
|
|
/* The specs for this type of house are not available any more, so
|
|
|
* replace it with the substitute original house type. */
|
|
|
house_id = _house_mngr.GetSubstituteID(house_id);
|
|
|
SetHouseType(t, house_id);
|
|
|
}
|
|
|
IncreaseBuildingCount(GetTownByTile(t), house_id);
|
|
|
town = GetTownByTile(t);
|
|
|
IncreaseBuildingCount(town, house_id);
|
|
|
if (IsHouseCompleted(t)) town->population += GetHouseSpecs(house_id)->population;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
HouseClassID AllocateHouseClassID(byte grf_class_id, uint32 grfid)
|
|
|
{
|
|
|
/* Start from 1 because 0 means that no class has been assigned. */
|
|
@@ -119,28 +125,12 @@ void DecreaseBuildingCount(Town *t, Hous
|
|
|
if (class_id == HOUSE_NO_CLASS) return;
|
|
|
|
|
|
if (t->building_counts.class_count[class_id] > 0) t->building_counts.class_count[class_id]--;
|
|
|
if (_building_counts.class_count[class_id] > 0) _building_counts.class_count[class_id]--;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* AfterLoadCountBuildings()
|
|
|
*
|
|
|
* After a savegame has been loaded, count the number of buildings on the map.
|
|
|
*/
|
|
|
void AfterLoadCountBuildings()
|
|
|
{
|
|
|
if (!_loaded_newgrf_features.has_newhouses) return;
|
|
|
|
|
|
for (TileIndex t = 0; t < MapSize(); t++) {
|
|
|
if (!IsTileType(t, MP_HOUSE)) continue;
|
|
|
IncreaseBuildingCount(GetTownByTile(t), GetHouseType(t));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
static uint32 HouseGetRandomBits(const ResolverObject *object)
|
|
|
{
|
|
|
const TileIndex tile = object->u.house.tile;
|
|
|
return (tile == INVALID_TILE || !IsTileType(tile, MP_HOUSE)) ? 0 : GetHouseRandomBits(tile);
|
|
|
}
|
|
|
|