diff options
Diffstat (limited to 'road_cmd.c')
-rw-r--r-- | road_cmd.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/road_cmd.c b/road_cmd.c index fa3ea30f1..b4e9774da 100644 --- a/road_cmd.c +++ b/road_cmd.c @@ -6,6 +6,7 @@ #include "player.h" #include "town.h" #include "gfx.h" +#include "table/directions.h" /* When true, GetTrackStatus for roads will treat roads under reconstruction * as normal roads instead of impassable. This is used when detecting whether @@ -119,7 +120,7 @@ bool IsRoadDepotTile(TileIndex tile) uint GetRoadBitsByTile(TileIndex tile) { - uint32 r = GetTileTrackStatus(tile, 2); + uint32 r = GetTileTrackStatus(tile, TRANSPORT_ROAD); return (byte)(r | (r >> 8)); } @@ -1023,18 +1024,20 @@ static const byte _road_trackbits[16] = { 0x0, 0x0, 0x0, 0x10, 0x0, 0x2, 0x8, 0x1A, 0x0, 0x4, 0x1, 0x15, 0x20, 0x26, 0x29, 0x3F, }; -static uint32 GetTileTrackStatus_Road(uint tile, int mode) { - if (mode == 0) { +static uint32 GetTileTrackStatus_Road(uint tile, TransportType mode) { + if (mode == TRANSPORT_RAIL) { if ((_map5[tile] & 0xF0) != 0x10) return 0; return _map5[tile] & 8 ? 0x101 : 0x202; - } else if (mode == 2) { + } else if (mode == TRANSPORT_ROAD) { byte b = _map5[tile]; if ((b & 0xF0) == 0) { + /* Ordinary road */ if (!_road_special_gettrackstatus && (_map2[tile]&7) >= 6) return 0; return _road_trackbits[b&0xF] * 0x101; - } else if ((b&0xE0) == 0) { + } else if ((b&0xF0) == 0x10) { + /* Crossing */ uint32 r = 0x101; if (b&8) r <<= 1; @@ -1042,6 +1045,13 @@ static uint32 GetTileTrackStatus_Road(uint tile, int mode) { r *= 0x10001; } return r; + } else if ((b&0xF0) == 0x20) { + /* Depot */ + /* We reverse the dir because it points out of the + * exit, and we want to get in. Maybe we should return + * both dirs here? */ + byte dir = _reverse_dir[b&3]; + return 1 << _dir_to_straight_trackdir[dir]; } } return 0; |