From 8ee37e7b4749f1a21ca90d97f462a14106e79f88 Mon Sep 17 00:00:00 2001 From: truelight Date: Tue, 21 Dec 2004 16:02:14 +0000 Subject: (svn r1199) -Fix: [ 958098 ] No longer road/rail crossing signals hang when a train is reversed at the wrong moment (Yeah, our longest open bug finally fixed :) :) :)) --- train_cmd.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'train_cmd.c') diff --git a/train_cmd.c b/train_cmd.c index fdaeea335..626398585 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -963,6 +963,25 @@ static void ReverseTrainDirection(Vehicle *v) if (IsTrainDepotTile(v->tile)) InvalidateWindow(WC_VEHICLE_DEPOT, v->tile); + /* Check if we were approaching a rail/road-crossing */ + { + TileIndex tile = v->tile; + int t; + /* Determine the non-diagonal direction in which we will exit this tile */ + t = v->direction >> 1; + if (!(v->direction & 1) && v->u.rail.track != _state_dir_table[t]) { + t = (t - 1) & 3; + } + /* Calculate next tile */ + tile += _tileoffs_by_dir[t]; + if (IS_TILETYPE(tile, MP_STREET) && (_map5[tile] & 0xF0)==0x10) { + if (_map5[tile] & 4) { + _map5[tile] &= ~4; + MarkTileDirtyByTile(tile); + } + } + } + // count number of vehicles u = v; do r++; while ( (u = u->next) != NULL ); -- cgit v1.2.3-54-g00ecf