From 4a71111ceb15abe26f611ed79dbee7934fed2b3c Mon Sep 17 00:00:00 2001 From: J0anJosep Date: Wed, 17 Jul 2024 00:23:40 +0200 Subject: [PATCH] Add: Settings for controlling depot spread. # Conflicts: # src/saveload/saveload.h --- src/depot.cpp | 3 +++ src/depot_type.h | 2 ++ src/lang/english.txt | 7 +++++++ src/saveload/afterload.cpp | 5 +++++ src/saveload/saveload.h | 1 + src/settings_gui.cpp | 6 ++++++ src/settings_type.h | 7 +++++++ src/table/settings/game_settings.ini | 19 +++++++++++++++++++ 8 files changed, 50 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/depot_type.h b/src/depot_type.h index 4e61c1bcbd..4eaf93473c 100644 --- a/src/depot_type.h +++ b/src/depot_type.h @@ -17,4 +17,6 @@ static const DepotID INVALID_DEPOT = UINT16_MAX; static const uint MAX_LENGTH_DEPOT_NAME_CHARS = 32; ///< The maximum length of a depot name in characters including '\0' +static const uint DEF_MAX_DEPOT_SPREAD = 12; + #endif /* DEPOT_TYPE_H */ diff --git a/src/lang/english.txt b/src/lang/english.txt index 87a8d3c594..fd806beb75 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 b52bef2d83..578e461b8f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -799,6 +799,11 @@ bool AfterLoadGame() _settings_game.linkgraph.recalc_time *= CalendarTime::SECONDS_PER_DAY; } + if (IsSavegameVersionBefore(SLV_DEPOT_SPREAD)) { + _settings_game.depot.depot_spread = DEF_MAX_DEPOT_SPREAD; + _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 422104cadb..22cd1c980a 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -388,6 +388,7 @@ enum SaveLoadVersion : uint16_t { SLV_DEPOTID_IN_HANGAR_ORDERS, ///< 340 PR#10691 Go to hangar orders store the DepotID instead of StationID. SLV_DEPOTID_BACKUP_ORDERS, ///< 341 PR#XXXXX Backup orders are indexed through DepotIDs. SLV_ADD_MEMBERS_TO_DEPOT_STRUCT, ///< 342 PR#XXXXX Add some members to depot struct. + SLV_DEPOT_SPREAD, ///< 343 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..6938578466 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -570,6 +570,12 @@ 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 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 +609,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..6426080857 100644 --- a/src/table/settings/game_settings.ini +++ b/src/table/settings/game_settings.ini @@ -145,6 +145,25 @@ 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.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 = DEF_MAX_DEPOT_SPREAD +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