From e46456d605b299942e55f9f7016163fca1e22466 Mon Sep 17 00:00:00 2001 From: ArtiomGusev Date: Sun, 1 Jun 2025 12:40:00 +0300 Subject: [PATCH 1/2] Fix: Prevent duplicate train reversal when already reversing --- src/train_cmd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index ab2472af15..8f0e87866d 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1973,6 +1973,8 @@ static bool IsWholeTrainInsideDepot(const Train *v) */ void ReverseTrainDirection(Train *v) { + DEBUG(driver, 1, "Reversing train %d on tile %d", v->index, v->tile); + if (IsRailDepotTile(v->tile)) { if (IsWholeTrainInsideDepot(v)) return; InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); From 4c7ea26238b9a65f5d96eba3c43fc024ab88b183 Mon Sep 17 00:00:00 2001 From: ArtiomGusev Date: Sun, 1 Jun 2025 12:41:34 +0300 Subject: [PATCH 2/2] Fix: Prevent duplicate train reversal when already reversing --- src/train_cmd.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 8f0e87866d..dbf3ee8077 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1973,7 +1973,7 @@ static bool IsWholeTrainInsideDepot(const Train *v) */ void ReverseTrainDirection(Train *v) { - DEBUG(driver, 1, "Reversing train %d on tile %d", v->index, v->tile); + //DEBUG(driver, 1, "Reversing train %d on tile %d", v->index, v->tile); if (IsRailDepotTile(v->tile)) { if (IsWholeTrainInsideDepot(v)) return; @@ -3868,6 +3868,9 @@ static TileIndex TrainApproachingCrossingTile(const Train *v) */ static bool TrainCheckIfLineEnds(Train *v, bool reverse) { + + if (v->flags.Test(VehicleRailFlag::Reversing)) return false; + /* First, handle broken down train */ int t = v->breakdown_ctr; @@ -3917,6 +3920,7 @@ static bool TrainCheckIfLineEnds(Train *v, bool reverse) } + static bool TrainLocoHandler(Train *v, bool mode) { /* train has crashed? */