From e9612338ff90a30af170641a07d2c581fe813189 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 14 Dec 2023 19:11:12 +0000 Subject: [PATCH] Fix condition for extending train reverse distance due to overspeed --- src/train_cmd.cpp | 11 ++++------- src/vehicle_gui.cpp | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index ad08a80504..61a74e97be 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1097,7 +1097,7 @@ Train::MaxSpeedInfo Train::GetCurrentMaxSpeedInfoInternal(bool update_state) con if (this->signal_speed_restriction != 0 && _settings_game.vehicle.train_speed_adaptation && !HasBit(this->flags, VRF_SPEED_ADAPTATION_EXEMPT)) { advisory_max_speed = std::min(advisory_max_speed, this->signal_speed_restriction); } - if (this->reverse_distance > 1) { + if (this->reverse_distance >= 1) { advisory_max_speed = std::min(advisory_max_speed, ReversingDistanceTargetSpeed(this)); } @@ -4109,7 +4109,7 @@ static bool IsReservationLookAheadLongEnough(const Train *v, const ChooseTrainTr if (HasBit(lookahead_state.flags, CTTLASF_STOP_FOUND) || HasBit(v->lookahead->flags, TRLF_DEPOT_END)) return true; - if (v->reverse_distance > 1) { + if (v->reverse_distance >= 1) { if (v->lookahead->reservation_end_position >= v->lookahead->current_position + v->reverse_distance - 1) return true; } @@ -5394,10 +5394,6 @@ inline void DecreaseReverseDistance(Train *v) { if (v->reverse_distance > 1) { v->reverse_distance--; - if (unlikely(v->reverse_distance == 1 && v->cur_speed > 15 && _settings_game.vehicle.train_acceleration_model == AM_REALISTIC)) { - /* Train is still moving too fast, extend the reversing point */ - v->reverse_distance++; - } } } @@ -5480,7 +5476,8 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) direction_changed = true; }; - if (reverse && v->reverse_distance == 1) { + if (reverse && v->reverse_distance == 1 && (v->cur_speed <= 15 || !v->UsingRealisticBraking())) { + /* Train is not moving too fast and reversing distance has been reached */ goto reverse_train_direction; } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index ca62ac4f8f..25ab92b87e 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -3797,7 +3797,7 @@ public: } } else if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_TRAIN_STUCK) && !v->current_order.IsType(OT_LOADING) && !mouse_over_start_stop) { str = HasBit(Train::From(v)->flags, VRF_WAITING_RESTRICTION) ? STR_VEHICLE_STATUS_TRAIN_STUCK_WAIT_RESTRICTION : STR_VEHICLE_STATUS_TRAIN_STUCK; - } else if (v->type == VEH_TRAIN && Train::From(v)->reverse_distance > 1) { + } else if (v->type == VEH_TRAIN && Train::From(v)->reverse_distance >= 1) { if (Train::From(v)->track == TRACK_BIT_DEPOT) { str = STR_VEHICLE_STATUS_TRAIN_MOVING_DEPOT; } else {