diff --git a/src/lang/english.txt b/src/lang/english.txt index bc37f70876..476ade1a93 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2199,6 +2199,9 @@ STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_HELPTEXT :Limit the lengt STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_VALUE :{NUM} tile{P "" s} STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_ZERO :No limit +STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES :Towns are allowed to build bridges: {STRING2} +STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES_HELPTEXT :Enabling this setting allows towns to build bridges + STR_CONFIG_SETTING_NOISE_LEVEL :Allow town controlled noise level for airports: {STRING2} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :With this setting disabled, there can be two airports in each town. With this setting enabled, the number of airports in a town is limited by the noise acceptance of the town, which depends on population and airport size and distance @@ -4521,12 +4524,13 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Fund th STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations.{}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bribe the local authority to increase your rating, at the risk of a severe penalty if caught.{}Cost: {CURRENCY_LONG} -###length 5 +###length 6 STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_ALLOW_ROADS :Allowed to build roads STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_ALLOW_LEVEL_CROSSINGS :Allowed to build level crossings STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_TUNNELS :Allowed to build tunnels STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_MAX_ROAD_SLOPE :Limit building continuous inclined roads STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_TOWN_GROWTH :Town growth speed +STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_BRIDGES :Allowed to build bridges STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_DEFAULT :Default ({STRING1}) STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_STR :{STRING}: {PUSH_COLOUR}{YELLOW}{STRING2}{POP_COLOUR} diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index e10065d527..99d7c15834 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2233,6 +2233,7 @@ static SettingsContainer &GetSettingsTree() towns->Add(new SettingEntry("economy.town_zone_calc_mode")); towns->Add(new SettingEntry("economy.allow_town_roads")); towns->Add(new SettingEntry("economy.allow_town_level_crossings")); + towns->Add(new SettingEntry("economy.allow_town_bridges")); towns->Add(new SettingEntry("economy.town_build_tunnels")); towns->Add(new SettingEntry("economy.town_max_road_slope")); towns->Add(new SettingEntry("economy.found_town")); diff --git a/src/settings_type.h b/src/settings_type.h index 96a7128892..a24738885d 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -695,6 +695,7 @@ struct EconomySettings { bool allow_town_level_crossings; ///< towns are allowed to build level crossings TownTunnelMode town_build_tunnels; ///< if/when towns are allowed to build road tunnels uint8 town_max_road_slope; ///< maximum number of consecutive sloped road tiles which towns are allowed to build + bool allow_town_bridges; ///< towns are allowed to build bridges int8 old_town_cargo_factor; ///< old power-of-two multiplier for town (passenger, mail) generation. May be negative. int16 town_cargo_scale_factor; ///< scaled power-of-two multiplier for town (passenger, mail) generation. May be negative. int16 industry_cargo_scale_factor; ///< scaled power-of-two multiplier for primary industry generation. May be negative. diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 092e59e920..ae06f8375f 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -993,6 +993,14 @@ strval = STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_VALUE cat = SC_BASIC patxname = ""economy.town_max_road_slope"" +[SDT_BOOL] +var = economy.allow_town_bridges +def = true +str = STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES +strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES_HELPTEXT +cat = SC_BASIC +patxname = ""economy.allow_town_bridges"" + [SDT_XREF] xref = ""economy.old_town_cargo_factor"" extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP) diff --git a/src/town.h b/src/town.h index 18266a9194..1ad66eb610 100644 --- a/src/town.h +++ b/src/town.h @@ -66,6 +66,7 @@ enum TownSettingOverrideFlags { TSOF_OVERRIDE_BUILD_TUNNELS = 2, TSOF_OVERRIDE_BUILD_INCLINED_ROADS = 3, TSOF_OVERRIDE_GROWTH = 4, + TSOF_OVERRIDE_BUILD_BRIDGES = 5, }; /** Town data structure. */ @@ -203,6 +204,11 @@ struct Town : TownPool::PoolItem<&_town_pool> { return HasBit(this->override_flags, TSOF_OVERRIDE_BUILD_LEVEL_CROSSINGS) ? HasBit(this->override_values, TSOF_OVERRIDE_BUILD_LEVEL_CROSSINGS) : _settings_game.economy.allow_town_level_crossings; } + inline bool GetAllowBuildBridges() const + { + return HasBit(this->override_flags, TSOF_OVERRIDE_BUILD_BRIDGES) ? HasBit(this->override_values, TSOF_OVERRIDE_BUILD_BRIDGES) : _settings_game.economy.allow_town_bridges; + } + inline TownTunnelMode GetBuildTunnelMode() const { return HasBit(this->override_flags, TSOF_OVERRIDE_BUILD_TUNNELS) ? this->build_tunnels : _settings_game.economy.town_build_tunnels; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 6dd356b734..6797d7f8f2 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1352,6 +1352,8 @@ static bool GrowTownWithBridge(const Town *t, const TileIndex tile, const DiagDi { assert(bridge_dir < DIAGDIR_END); + if (!t->GetAllowBuildBridges()) return false; + const Slope slope = GetTileSlope(tile); /* Make sure the direction is compatible with the slope. @@ -3828,6 +3830,7 @@ CommandCost CmdOverrideTownSetting(TileIndex tile, DoCommandFlag flags, uint32 p break; case TSOF_OVERRIDE_BUILD_ROADS: case TSOF_OVERRIDE_BUILD_LEVEL_CROSSINGS: + case TSOF_OVERRIDE_BUILD_BRIDGES: if (is_override && value != 0 && value != 1) return CMD_ERROR; break; case TSOF_OVERRIDE_BUILD_TUNNELS: @@ -3848,6 +3851,7 @@ CommandCost CmdOverrideTownSetting(TileIndex tile, DoCommandFlag flags, uint32 p break; case TSOF_OVERRIDE_BUILD_ROADS: case TSOF_OVERRIDE_BUILD_LEVEL_CROSSINGS: + case TSOF_OVERRIDE_BUILD_BRIDGES: SB(t->override_values, setting, 1, value & 1); break; case TSOF_OVERRIDE_BUILD_TUNNELS: diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 690fde2de2..c79d2d5628 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -113,7 +113,7 @@ private: !(_local_company != COMPANY_SPECTATOR && _settings_game.difficulty.override_town_settings_in_multiplayer); } - static const uint SETTING_OVERRIDE_COUNT = 5; + static const uint SETTING_OVERRIDE_COUNT = 6; public: TownAuthorityWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc), sel_index(-1), displayed_actions_on_previous_painting(0) @@ -219,6 +219,7 @@ public: switch (idx) { case TSOF_OVERRIDE_BUILD_ROADS: case TSOF_OVERRIDE_BUILD_LEVEL_CROSSINGS: + case TSOF_OVERRIDE_BUILD_BRIDGES: SetDParam(0, HasBit(this->town->override_values, idx) ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF); break; case TSOF_OVERRIDE_BUILD_TUNNELS: @@ -261,6 +262,9 @@ public: case TSOF_OVERRIDE_GROWTH: SetDParam(1, STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT); break; + case TSOF_OVERRIDE_BUILD_BRIDGES: + SetDParam(1, STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES_HELPTEXT); + break; } text = STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_TEXT; SetDParam(0, STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_ALLOW_ROADS + this->sel_index - 0x100); @@ -324,6 +328,10 @@ public: case TSOF_OVERRIDE_GROWTH: SetDParam(1, overriden ? STR_CONFIG_SETTING_TOWN_GROWTH_NONE : STR_COLOUR_DEFAULT); break; + + case TSOF_OVERRIDE_BUILD_BRIDGES: + SetDParam(2, this->town->GetAllowBuildBridges() ? STR_CONFIG_SETTING_ON : STR_CONFIG_SETTING_OFF); + break; } DrawString(ir.left, ir.right, y, STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_STR, tc); @@ -411,7 +419,8 @@ public: uint8 idx = this->sel_index - 0x100; switch (idx) { case TSOF_OVERRIDE_BUILD_ROADS: - case TSOF_OVERRIDE_BUILD_LEVEL_CROSSINGS: { + case TSOF_OVERRIDE_BUILD_LEVEL_CROSSINGS: + case TSOF_OVERRIDE_BUILD_BRIDGES: { int value = HasBit(this->town->override_flags, idx) ? (HasBit(this->town->override_values, idx) ? 2 : 1) : 0; const StringID names[] = { STR_COLOUR_DEFAULT,