diff options
-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 ); |