diff --git a/src/newgrf_extension.cpp b/src/newgrf_extension.cpp index c19400b5db..9389ffed26 100644 --- a/src/newgrf_extension.cpp +++ b/src/newgrf_extension.cpp @@ -63,6 +63,7 @@ extern const GRFFeatureInfo _grf_feature_list[] = { GRFFeatureInfo("more_objects_per_grf", 1, GFTOF_MORE_OBJECTS_PER_GRF), GRFFeatureInfo("more_action2_ids", 1, GFTOF_MORE_ACTION2_IDS), GRFFeatureInfo("town_feature", 1), + GRFFeatureInfo("town_uncapped_variables", 1), GRFFeatureInfo(), }; @@ -167,6 +168,13 @@ extern const GRFVariableMapDefinition _grf_action2_remappable_variables[] = { GRFVariableMapDefinition(GSF_SIGNALS, A2VRI_SIGNALS_SIGNAL_CONTEXT, "signals_signal_context"), GRFVariableMapDefinition(GSF_SIGNALS, A2VRI_SIGNALS_SIGNAL_STYLE, "signals_signal_style"), GRFVariableMapDefinition(GSF_SIGNALS, A2VRI_SIGNALS_SIGNAL_SIDE, "signals_signal_side"), + GRFVariableMapDefinition(GSF_FAKE_TOWNS, A2VRI_TOWNS_HOUSE_COUNT, "town_house_count"), + GRFVariableMapDefinition(GSF_FAKE_TOWNS, A2VRI_TOWNS_POPULATION, "town_population"), + GRFVariableMapDefinition(GSF_FAKE_TOWNS, A2VRI_ZONE_0, "town_zone_0_radius_square"), + GRFVariableMapDefinition(GSF_FAKE_TOWNS, A2VRI_ZONE_1, "town_zone_1_radius_square"), + GRFVariableMapDefinition(GSF_FAKE_TOWNS, A2VRI_ZONE_2, "town_zone_2_radius_square"), + GRFVariableMapDefinition(GSF_FAKE_TOWNS, A2VRI_ZONE_3, "town_zone_3_radius_square"), + GRFVariableMapDefinition(GSF_FAKE_TOWNS, A2VRI_ZONE_4, "town_zone_4_radius_square"), GRFVariableMapDefinition(GSF_NEWLANDSCAPE, 0x40, "newlandscape_terrain_type"), GRFVariableMapDefinition(GSF_NEWLANDSCAPE, 0x41, "newlandscape_tile_slope"), GRFVariableMapDefinition(GSF_NEWLANDSCAPE, 0x42, "newlandscape_tile_height"), diff --git a/src/newgrf_extension.h b/src/newgrf_extension.h index 9cc6705473..ef8f009356 100644 --- a/src/newgrf_extension.h +++ b/src/newgrf_extension.h @@ -87,6 +87,13 @@ enum Action2VariableRemapIds { A2VRI_SIGNALS_SIGNAL_CONTEXT, A2VRI_SIGNALS_SIGNAL_STYLE, A2VRI_SIGNALS_SIGNAL_SIDE, + A2VRI_TOWNS_HOUSE_COUNT, + A2VRI_TOWNS_POPULATION, + A2VRI_ZONE_0, + A2VRI_ZONE_1, + A2VRI_ZONE_2, + A2VRI_ZONE_3, + A2VRI_ZONE_4, }; enum GRFFeatureTestObservationFlag : uint8 { diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp index df708e74d6..e45fd09714 100644 --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -109,6 +109,15 @@ case 0xD3: return GB(this->t->received[TE_WATER].old_act, 8, 8); case 0xD4: return this->t->road_build_months; case 0xD5: return this->t->fund_buildings_months; + case A2VRI_TOWNS_HOUSE_COUNT: return this->t->cache.num_houses; + case A2VRI_TOWNS_POPULATION: return this->t->cache.population; + + case A2VRI_ZONE_0: + case A2VRI_ZONE_1: + case A2VRI_ZONE_2: + case A2VRI_ZONE_3: + case A2VRI_ZONE_4: + return this->t->cache.squared_town_zone_radius[variable - A2VRI_ZONE_0]; } DEBUG(grf, 1, "Unhandled town variable 0x%X", variable); @@ -163,6 +172,13 @@ case 0xC3: case 0xC4: case 0xC5: case 0xC6: case 0xC7: case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF: case 0xD0: case 0xD1: case 0xD2: case 0xD3: case 0xD4: case 0xD5: + case A2VRI_TOWNS_HOUSE_COUNT: + case A2VRI_TOWNS_POPULATION: + case A2VRI_ZONE_0: + case A2VRI_ZONE_1: + case A2VRI_ZONE_2: + case A2VRI_ZONE_3: + case A2VRI_ZONE_4: return 0; } diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 8b91da9337..18c09e427b 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -1581,6 +1581,13 @@ static const NIVariable _niv_towns[] = { NIV(0x9A, "zone radius 3"), NIV(0x9C, "zone radius 4"), NIV(0xB6, "number of buildings"), + NIV(A2VRI_TOWNS_HOUSE_COUNT, "number of buildings (uncapped)"), + NIV(A2VRI_TOWNS_POPULATION, "population (uncapped)"), + NIV(A2VRI_ZONE_0, "zone radius 0 (uncapped)"), + NIV(A2VRI_ZONE_1, "zone radius 1 (uncapped)"), + NIV(A2VRI_ZONE_2, "zone radius 2 (uncapped)"), + NIV(A2VRI_ZONE_3, "zone radius 3 (uncapped)"), + NIV(A2VRI_ZONE_4, "zone radius 4 (uncapped)"), NIV_END() };