From 05915b21297f7c7893cbcf85f82026dc95b3bde4 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 1 Jun 2024 19:22:11 +0100 Subject: [PATCH] Fix handling of reservations when reserving at one way tunnel-bridge exit --- src/train_cmd.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 1d0adc0cd7..127ee5cc49 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3781,6 +3781,8 @@ void FreeTrainTrackReservation(Train *v, TileIndex origin, Trackdir orig_td) TileIndex end = GetOtherTunnelBridgeEnd(tile); bool free = TunnelBridgeIsFree(tile, end, v, TBIFM_ACROSS_ONLY).Succeeded(); if (!free) break; + } else if (IsTunnelBridgeWithSignalSimulation(tile) && IsTunnelBridgeSignalSimulationExitOnly(tile) && TrackdirEntersTunnelBridge(tile, td)) { + break; } /* Don't free first station/bridge/tunnel if we are on it. */ @@ -5723,6 +5725,9 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) return false; } goto reverse_train_direction; + } else if (!(v->track & TRACK_BIT_WORMHOLE) && IsTunnelBridgeWithSignalSimulation(gp.new_tile) && + IsTunnelBridgeSignalSimulationExitOnly(gp.new_tile) && v->force_proceed == TFP_NONE) { + goto reverse_train_direction; } else { TryReserveRailTrack(gp.new_tile, TrackBitsToTrack(chosen_track), false);