summaryrefslogtreecommitdiff
path: root/src/train_cmd.cpp
diff options
context:
space:
mode:
authormichi_cc <michi_cc@openttd.org>2010-07-09 14:14:17 +0000
committermichi_cc <michi_cc@openttd.org>2010-07-09 14:14:17 +0000
commit811f0db597b3967a4e7c4bf0b56a96c8ab48dd72 (patch)
tree2672fe5e716140c5a0bfa7aadb5708a14ec8410a /src/train_cmd.cpp
parent82fc340a0a608eb1edf8c079b4585cf0880733df (diff)
downloadopenttd-811f0db597b3967a4e7c4bf0b56a96c8ab48dd72.tar.xz
(svn r20098) -Fix [FS#3898]: A train reversing in a station would sometimes fail to release its reserved path.
Diffstat (limited to 'src/train_cmd.cpp')
-rw-r--r--src/train_cmd.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 848efb8d1..c252f1f0b 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -3808,8 +3808,17 @@ static bool TrainLocoHandler(Train *v, bool mode)
v->wait_counter = 0;
v->cur_speed = 0;
v->subspeed = 0;
+ ClrBit(v->flags, VRF_LEAVING_STATION);
ReverseTrainDirection(v);
return true;
+ } else if (HasBit(v->flags, VRF_LEAVING_STATION)) {
+ /* Try to reserve a path when leaving the station as we
+ * might not be marked as wanting a reservation, e.g.
+ * when an overlength train gets turned around in a station. */
+ if (UpdateSignalsOnSegment(v->tile, TrackdirToExitdir(v->GetVehicleTrackdir()), v->owner) == SIGSEG_PBS || _settings_game.pf.reserve_paths) {
+ TryPathReserve(v, true, true);
+ }
+ ClrBit(v->flags, VRF_LEAVING_STATION);
}
v->HandleLoading(mode);