diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index 52a1a8f90c..06afc15f25 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -195,6 +195,9 @@ STR_CONFIG_SETTING_REALISTIC_BRAKING_ASPECT_LIMITED_HELPTEXT :In the realisti STR_CONFIG_SETTING_LIMIT_TRAIN_ACCELERATION :Limit train acceleration: {STRING2} STR_CONFIG_SETTING_LIMIT_TRAIN_ACCELERATION_HELPTEXT :When using the realistic train braking model, also limit the maximum acceleration of trains. This is to prevent passengers from spilling their drinks due to some train types otherwise accelerating excessively quickly. +STR_CONFIG_SETTING_TRACK_EDIT_IGNORE_REALISTIC_BRAKING :Track editing ignores realistic braking: {STRING2} +STR_CONFIG_SETTING_TRACK_EDIT_IGNORE_REALISTIC_BRAKING_HELPTEXT :Allow track editing to ignore the realistic train braking model. When enabled, restrictions on editing/removing the reservation of moving trains are not enforced. This may result in non-realistic train braking behaviour. + STR_CONFIG_SETTING_THROUGH_LOAD_SPEED_LIMIT :Train through load maximum speed: {STRING2} STR_CONFIG_SETTING_THROUGH_LOAD_SPEED_LIMIT_HELPTEXT :The maximum permitted speed for trains when through loading at a station diff --git a/src/pbs.cpp b/src/pbs.cpp index eaf14c9f05..5608c059fc 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -1353,7 +1353,7 @@ Train *GetTrainForReservation(TileIndex tile, Track track) CommandCost CheckTrainReservationPreventsTrackModification(TileIndex tile, Track track) { - if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC) { + if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC && !_settings_game.vehicle.track_edit_ignores_realistic_braking) { return CheckTrainReservationPreventsTrackModification(GetTrainForReservation(tile, track)); } return CommandCost(); @@ -1361,7 +1361,8 @@ CommandCost CheckTrainReservationPreventsTrackModification(TileIndex tile, Track CommandCost CheckTrainReservationPreventsTrackModification(const Train *v) { - if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC && v != nullptr && v->UsingRealisticBraking() && (v->cur_speed > 0 || !(v->vehstatus & (VS_STOPPED | VS_CRASHED)))) { + if (_settings_game.vehicle.train_braking_model == TBM_REALISTIC && !_settings_game.vehicle.track_edit_ignores_realistic_braking && + v != nullptr && v->UsingRealisticBraking() && (v->cur_speed > 0 || !(v->vehstatus & (VS_STOPPED | VS_CRASHED)))) { return_cmd_error(STR_ERROR_CANNOT_MODIFY_TRACK_TRAIN_APPROACHING); } return CommandCost(); @@ -1376,7 +1377,7 @@ static Vehicle *TrainInTunnelBridgePreventsTrackModificationEnum(Vehicle *v, voi CommandCost CheckTrainInTunnelBridgePreventsTrackModification(TileIndex start, TileIndex end) { - if (_settings_game.vehicle.train_braking_model != TBM_REALISTIC) return CommandCost(); + if (_settings_game.vehicle.train_braking_model != TBM_REALISTIC || _settings_game.vehicle.track_edit_ignores_realistic_braking) return CommandCost(); if (HasVehicleOnPos(start, VEH_TRAIN, nullptr, &TrainInTunnelBridgePreventsTrackModificationEnum) || HasVehicleOnPos(end, VEH_TRAIN, nullptr, &TrainInTunnelBridgePreventsTrackModificationEnum)) { diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index faf1fc35bc..98beb33aea 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2445,6 +2445,7 @@ static SettingsContainer &GetSettingsTree() physics->Add(new SettingEntry("vehicle.train_braking_model")); physics->Add(new ConditionallyHiddenSettingEntry("vehicle.realistic_braking_aspect_limited", []() -> bool { return GetGameSettings().vehicle.train_braking_model != TBM_REALISTIC; })); physics->Add(new ConditionallyHiddenSettingEntry("vehicle.limit_train_acceleration", []() -> bool { return GetGameSettings().vehicle.train_braking_model != TBM_REALISTIC; })); + physics->Add(new ConditionallyHiddenSettingEntry("vehicle.track_edit_ignores_realistic_braking", []() -> bool { return GetGameSettings().vehicle.train_braking_model != TBM_REALISTIC; })); physics->Add(new SettingEntry("vehicle.train_slope_steepness")); physics->Add(new SettingEntry("vehicle.wagon_speed_limits")); physics->Add(new SettingEntry("vehicle.train_speed_adaptation")); diff --git a/src/settings_type.h b/src/settings_type.h index ab84ff4769..7f3adbc3b4 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -694,6 +694,7 @@ struct VehicleSettings { uint8_t train_braking_model; ///< braking model for trains uint8_t realistic_braking_aspect_limited; ///< realistic braking lookahead is aspect limited bool limit_train_acceleration; ///< when using realistic braking, also limit train acceleration + bool track_edit_ignores_realistic_braking; ///< when using realistic braking, allow track editing operations to ignore realistic braking restrictions uint8_t roadveh_acceleration_model; ///< realistic acceleration for road vehicles uint8_t train_slope_steepness; ///< Steepness of hills for trains when using realistic acceleration uint8_t roadveh_slope_steepness; ///< Steepness of hills for road vehicles when using realistic acceleration diff --git a/src/table/settings/game_settings.ini b/src/table/settings/game_settings.ini index 7b08935aaa..cd0fe4ae29 100644 --- a/src/table/settings/game_settings.ini +++ b/src/table/settings/game_settings.ini @@ -319,6 +319,14 @@ strhelp = STR_CONFIG_SETTING_LIMIT_TRAIN_ACCELERATION_HELPTEXT cat = SC_EXPERT patxname = ""realistic_braking.vehicle.limit_train_acceleration"" +[SDT_BOOL] +var = vehicle.track_edit_ignores_realistic_braking +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_TRACK_EDIT_IGNORE_REALISTIC_BRAKING +strhelp = STR_CONFIG_SETTING_TRACK_EDIT_IGNORE_REALISTIC_BRAKING_HELPTEXT +cat = SC_EXPERT + [SDT_VAR] var = vehicle.roadveh_acceleration_model type = SLE_UINT8