From 7e4898ad42f6a0d117c70f20fa81dfd94a579c8f Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 21 Feb 2016 02:00:21 +0000 Subject: [PATCH] Fix PBS reservation from bridge/tunnel exit when next tile not a junction. --- src/train_cmd.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index af4ec021f0..1276d827d8 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3219,6 +3219,14 @@ static bool CheckTrainStayInWormHolePathReserve(Train *t, TileIndex tile) { TileIndex veh_orig = t->tile; t->tile = tile; + CFollowTrackRail ft(GetTileOwner(tile), GetRailTypeInfo(t->railtype)->compatible_railtypes); + if (ft.Follow(t->tile, DiagDirToDiagTrackdir(ReverseDiagDir(GetTunnelBridgeDirection(tile))))) { + TrackdirBits reserved = ft.m_new_td_bits & TrackBitsToTrackdirBits(GetReservedTrackbits(ft.m_new_tile)); + if (reserved == TRACKDIR_BIT_NONE) { + /* next tile is not reserved, so reserve the exit tile */ + SetTunnelBridgeReservation(tile, true); + } + } bool ok = TryPathReserve(t); t->tile = veh_orig; return ok;