diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -25,7 +25,7 @@ #include "safeguards.h" static BuildingCounts _building_counts; -static HouseClassMapping _class_mapping[HOUSE_CLASS_MAX]; +static std::array _class_mapping; HouseOverrideManager _house_mngr(NEW_HOUSE_OFFSET, NUM_HOUSES, INVALID_HOUSE_ID); @@ -72,6 +72,11 @@ uint32_t HouseResolverObject::GetDebugID return HouseSpec::Get(this->house_scope.house_id)->grf_prop.local_id; } +void ResetHouseClassIDs() +{ + _class_mapping = {}; +} + HouseClassID AllocateHouseClassID(byte grf_class_id, uint32_t grfid) { /* Start from 1 because 0 means that no class has been assigned. */ diff --git a/src/newgrf_house.h b/src/newgrf_house.h --- a/src/newgrf_house.h +++ b/src/newgrf_house.h @@ -87,6 +87,7 @@ struct HouseClassMapping { uint8_t class_id; ///< The class id within the grf file }; +void ResetHouseClassIDs(); HouseClassID AllocateHouseClassID(byte grf_class_id, uint32_t grfid); void InitializeBuildingCounts(); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3842,6 +3842,8 @@ HouseSpec _house_specs[NUM_HOUSES]; void ResetHouses() { + ResetHouseClassIDs(); + auto insert = std::copy(std::begin(_original_house_specs), std::end(_original_house_specs), std::begin(_house_specs)); std::fill(insert, std::end(_house_specs), HouseSpec{});