From 24b7be856bb6200f234f8ac2e6d3d365a4cf6aad Mon Sep 17 00:00:00 2001 From: michi_cc Date: Sat, 17 Dec 2011 02:02:28 +0000 Subject: (svn r23564) -Fix [FS#4888]: Extending a path reservation starting at a partially reserved rail station could fail. --- src/pbs.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/pbs.cpp') diff --git a/src/pbs.cpp b/src/pbs.cpp index 5c6a0fbcb..01e7b2f37 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -191,7 +191,21 @@ static PBSTileInfo FollowReservation(Owner o, RailTypes rts, TileIndex tile, Tra TrackdirBits reserved = ft.m_new_td_bits & TrackBitsToTrackdirBits(GetReservedTrackbits(ft.m_new_tile)); /* No reservation --> path end found */ - if (reserved == TRACKDIR_BIT_NONE) break; + if (reserved == TRACKDIR_BIT_NONE) { + if (ft.m_is_station) { + /* Check skipped station tiles as well, maybe our reservation ends inside the station. */ + TileIndexDiff diff = TileOffsByDiagDir(ft.m_exitdir); + while (ft.m_tiles_skipped-- > 0) { + ft.m_new_tile -= diff; + if (HasStationReservation(ft.m_new_tile)) { + tile = ft.m_new_tile; + trackdir = DiagDirToDiagTrackdir(ft.m_exitdir); + break; + } + } + } + break; + } /* Can't have more than one reserved trackdir */ Trackdir new_trackdir = FindFirstTrackdir(reserved); -- cgit v1.2.3-54-g00ecf