From c6e69c03c9674d841c8b35e6b3252b733d438f41 Mon Sep 17 00:00:00 2001 From: J0anJosep Date: Fri, 25 Aug 2023 16:41:55 +0200 Subject: [PATCH] Add: Settings for controlling depot spread. --- src/depot.cpp | 3 +++ src/lang/english.txt | 7 +++++++ src/saveload/afterload.cpp | 6 ++++++ src/saveload/saveload.h | 1 + src/settings_gui.cpp | 6 ++++++ src/settings_type.h | 8 ++++++++ src/table/settings/game_settings.ini | 25 +++++++++++++++++++++++++ 7 files changed, 56 insertions(+) diff --git a/src/depot.cpp b/src/depot.cpp index bc5f62c8bd..dfcdc5c1fd 100644 --- a/src/depot.cpp +++ b/src/depot.cpp @@ -68,6 +68,9 @@ CommandCost Depot::BeforeAddTiles(TileArea ta) ta.Add(TileAddXY(this->ta.tile, this->ta.w - 1, this->ta.h - 1)); } + if ((ta.w > _settings_game.depot.depot_spread) || (ta.h > _settings_game.depot.depot_spread)) { + return_cmd_error(STR_ERROR_DEPOT_TOO_SPREAD_OUT); + } return CommandCost(); } diff --git a/src/lang/english.txt b/src/lang/english.txt index 87a8d3c594..244437da1f 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1615,6 +1615,11 @@ STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :The height leve STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}One or more tiles at the northern edge are not empty STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}One or more tiles at one of the edges is not water +STR_CONFIG_SETTING_DISTANT_JOIN_DEPOTS :Allow to join depot parts not directly adjacent: {STRING2} +STR_CONFIG_SETTING_DISTANT_JOIN_DEPOTS_HELPTEXT :Allow adding parts to a depot without directly touching the existing parts. Needs Ctrl+Click while placing the new parts +STR_CONFIG_SETTING_DEPOT_SPREAD :Maximum depot spread: {STRING2} +STR_CONFIG_SETTING_DEPOT_SPREAD_HELPTEXT :Maximum area the parts of a single depot may be spread out on. + STR_CONFIG_SETTING_STATION_SPREAD :Maximum station spread: {STRING2} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maximum area the parts of a single station may be spread out on. Note that high values will slow the game @@ -2137,6 +2142,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_TREES :Trees STR_CONFIG_SETTING_AI :Competitors STR_CONFIG_SETTING_AI_NPC :Computer players STR_CONFIG_SETTING_NETWORK :Network +STR_CONFIG_SETTING_DEPOTS :Depots STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatic reversing at signals: {STRING2} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Allow trains to reverse on a signal, if they waited there a long time @@ -5132,6 +5138,7 @@ STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}The rear STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Unable to find route to local depot STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Unable to find local depot +STR_ERROR_DEPOT_TOO_SPREAD_OUT :{WHITE}... depot too spread out STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Wrong depot type # Depot unbunching related errors diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 4c13d6985f..42e605ffaa 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -808,6 +808,12 @@ bool AfterLoadGame() _settings_game.linkgraph.recalc_time *= CalendarTime::SECONDS_PER_DAY; } + if (IsSavegameVersionBefore(SLV_DEPOT_SPREAD)) { + _settings_game.depot.depot_spread = 1; + _settings_game.depot.adjacent_depots = true; + _settings_game.depot.distant_join_depots = true; + } + /* Load the sprites */ GfxLoadSprites(); LoadStringWidthTable(); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 6e4b830836..9affcf9e3d 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -392,6 +392,7 @@ enum SaveLoadVersion : uint16_t { SLV_ALIGN_WATER_BITS, ///< 315 PR#XXXXX Align some water bits in the map array. SLV_DEPOTS_ALIGN_RAIL_DEPOT_BITS, ///< 316 PR#XXXXX Align one bit for rail depots. SLV_ADD_MEMBERS_TO_DEPOT_STRUCT, ///< 317 PR#XXXXX Add some members to depot struct. + SLV_DEPOT_SPREAD, ///< 318 PR#XXXXX Add a setting for max depot spread. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index fb5c08ec86..1b3fd4a8fe 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2145,6 +2145,12 @@ static SettingsContainer &GetSettingsTree() SettingsPage *limitations = main->Add(new SettingsPage(STR_CONFIG_SETTING_LIMITATIONS)); { + SettingsPage *depots = limitations->Add(new SettingsPage(STR_CONFIG_SETTING_DEPOTS)); + { + depots->Add(new SettingEntry("depot.depot_spread")); + depots->Add(new SettingEntry("depot.distant_join_depots")); + } + limitations->Add(new SettingEntry("construction.command_pause_level")); limitations->Add(new SettingEntry("construction.autoslope")); limitations->Add(new SettingEntry("construction.extra_dynamite")); diff --git a/src/settings_type.h b/src/settings_type.h index ae6f22c42e..22b1a44bdd 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -570,6 +570,13 @@ struct StationSettings { uint8_t station_spread; ///< amount a station may spread }; +/** Settings related to depots. */ +struct DepotSettings { + uint8_t depot_spread; ///< amount a depot may spread + bool adjacent_depots; ///< allow depots to be built directly adjacent to other depots + bool distant_join_depots; ///< allow to join non-adjacent depots +}; + /** Default settings for vehicles. */ struct VehicleDefaultSettings { bool servint_ispercent; ///< service intervals are in percents @@ -603,6 +610,7 @@ struct GameSettings { EconomySettings economy; ///< settings to change the economy LinkGraphSettings linkgraph; ///< settings for link graph calculations StationSettings station; ///< settings related to station management + DepotSettings depot; ///< settings related to depot management LocaleSettings locale; ///< settings related to used currency/unit system in the current game }; diff --git a/src/table/settings/game_settings.ini b/src/table/settings/game_settings.ini index 07adda5cc9..0ad82ace3e 100644 --- a/src/table/settings/game_settings.ini +++ b/src/table/settings/game_settings.ini @@ -145,6 +145,31 @@ str = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT post_cb = [](auto) { CloseWindowById(WC_SELECT_STATION, 0); } +[SDT_BOOL] +var = depot.adjacent_depots +from = SLV_DEPOT_SPREAD +def = true +cat = SC_EXPERT + +[SDT_BOOL] +var = depot.distant_join_depots +from = SLV_DEPOT_SPREAD +def = true +str = STR_CONFIG_SETTING_DISTANT_JOIN_DEPOTS +strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_DEPOTS_HELPTEXT + +[SDT_VAR] +var = depot.depot_spread +type = SLE_UINT8 +from = SLV_DEPOT_SPREAD +def = 1 +min = 1 +max = 64 +str = STR_CONFIG_SETTING_DEPOT_SPREAD +strhelp = STR_CONFIG_SETTING_DEPOT_SPREAD_HELPTEXT +strval = STR_CONFIG_SETTING_TILE_LENGTH +cat = SC_BASIC + [SDT_OMANY] var = vehicle.road_side type = SLE_UINT8