diff options
author | truelight <truelight@openttd.org> | 2004-12-21 16:02:14 +0000 |
---|---|---|
committer | truelight <truelight@openttd.org> | 2004-12-21 16:02:14 +0000 |
commit | 63611e19f5696a5e7ddd5923c1952e6e9d231e86 (patch) | |
tree | bd60a10d7bef73e4f35348da0e6b62882d69d762 | |
parent | d78ddb39bb7d47ea14961084a646ff23495c4a5c (diff) | |
download | openttd-63611e19f5696a5e7ddd5923c1952e6e9d231e86.tar.xz |
(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 :) :) :))
-rw-r--r-- | train_cmd.c | 19 |
1 files changed, 19 insertions, 0 deletions
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 ); |