From bd1bb3adc8ecb0b42d419a870d2e1270c187169c Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 19 Apr 2026 19:16:55 +0100 Subject: [PATCH] Fix: Force proceed behaviour when driving backwards (#15510) --- src/train_cmd.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index c619854b34..dd69450b0c 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2201,9 +2201,10 @@ static TrainForceProceeding DetermineNextTrainForceProceeding(const Train *t) if (t->vehstatus.Test(VehState::Crashed) || t->force_proceed == TFP_SIGNAL) return TFP_NONE; if (!t->flags.Test(VehicleRailFlag::Stuck)) return t->IsChainInDepot() ? TFP_STUCK : TFP_SIGNAL; - TileIndex next_tile = TileAddByDiagDir(t->tile, TrackdirToExitdir(t->GetVehicleTrackdir())); + const Train *moving_front = t->GetMovingFront(); + TileIndex next_tile = TileAddByDiagDir(moving_front->tile, TrackdirToExitdir(moving_front->GetVehicleTrackdir())); if (next_tile == INVALID_TILE || !IsTileType(next_tile, TileType::Railway) || !HasSignals(next_tile)) return TFP_STUCK; - TrackBits new_tracks = DiagdirReachesTracks(TrackdirToExitdir(t->GetVehicleTrackdir())) & GetTrackBits(next_tile); + TrackBits new_tracks = DiagdirReachesTracks(TrackdirToExitdir(moving_front->GetVehicleTrackdir())) & GetTrackBits(next_tile); return new_tracks != TRACK_BIT_NONE && HasSignalOnTrack(next_tile, FindFirstTrack(new_tracks)) ? TFP_SIGNAL : TFP_STUCK; }