diff options
Diffstat (limited to 'rail_cmd.c')
-rw-r--r-- | rail_cmd.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/rail_cmd.c b/rail_cmd.c index 9137e3888..c6f3c944b 100644 --- a/rail_cmd.c +++ b/rail_cmd.c @@ -36,19 +36,28 @@ enum { /* These values are bitmasks for the map5 byte */ RAIL_DEPOT_TRACK_MASK = 1, RAIL_DEPOT_DIR = 3, - RAIL_DEPOT_UNUSED_BITS = 0x3C, RAIL_TYPE_WAYPOINT = 0xC4, RAIL_WAYPOINT_TRACK_MASK = 1, - RAIL_WAYPOINT_UNUSED_BITS = 0x3E, RAIL_SUBTYPE_MASK = 0x3C, RAIL_SUBTYPE_DEPOT = 0x00, RAIL_SUBTYPE_WAYPOINT = 0x04 }; -#define IS_RAIL_DEPOT(x) (((x) & (RAIL_TYPE_DEPOT|RAIL_DEPOT_UNUSED_BITS)) == RAIL_TYPE_DEPOT) -#define IS_RAIL_WAYPOINT(x) (((x) & (RAIL_TYPE_WAYPOINT|RAIL_WAYPOINT_UNUSED_BITS)) == RAIL_TYPE_WAYPOINT) +static inline bool IsRailDepot(byte m5) +{ + return + (m5 & RAIL_TYPE_MASK) == RAIL_TYPE_DEPOT && + (m5 & RAIL_SUBTYPE_MASK) == RAIL_SUBTYPE_DEPOT; +} + +static inline bool IsRailWaypoint(byte m5) +{ + return + (m5 & RAIL_TYPE_MASK) == RAIL_TYPE_DEPOT && + (m5 & RAIL_SUBTYPE_MASK) == RAIL_SUBTYPE_WAYPOINT; +} /* Format of rail map5 byte. * 00 abcdef => Normal rail @@ -800,7 +809,7 @@ static int32 RemoveTrainWaypoint(uint tile, uint32 flags, bool justremove) Waypoint *cp; // make sure it's a waypoint - if (!IsTileType(tile, MP_RAILWAY) || !IS_RAIL_WAYPOINT(_map5[tile])) + if (!IsTileType(tile, MP_RAILWAY) || !IsRailWaypoint(_map5[tile])) return CMD_ERROR; if (!CheckTileOwnership(tile) && !(_current_player==17)) @@ -1621,7 +1630,7 @@ static void DrawTile_Track(TileInfo *ti) if (ti->tileh != 0) { DrawFoundation(ti, ti->tileh); } - if (!IS_RAIL_DEPOT(m5) && IS_RAIL_WAYPOINT(m5) && _map3_lo[ti->tile]&16) { + if (IsRailWaypoint(m5) && _map3_lo[ti->tile] & 16) { // look for customization StationSpec *stat = GetCustomStation(STAT_CLASS_WAYP, _map3_hi[ti->tile]); @@ -1813,7 +1822,7 @@ static bool SetSignalsEnumProc(uint tile, SetSignalsData *ssd, int track, uint l return true; } - } else if (IS_RAIL_DEPOT(_map5[tile])) + } else if (IsRailDepot(_map5[tile])) return true; // don't look further if the tile is a depot } return false; @@ -2163,9 +2172,9 @@ static uint32 GetTileTrackStatus_Track(uint tile, TransportType mode) { static void ClickTile_Track(uint tile) { - if (IS_RAIL_DEPOT(_map5[tile])) + if (IsRailDepot(_map5[tile])) ShowTrainDepotWindow(tile); - else if (IS_RAIL_WAYPOINT(_map5[tile])) + else if (IsRailWaypoint(_map5[tile])) ShowRenameWaypointWindow(&_waypoints[GetWaypointByTile(tile)]); } @@ -2221,7 +2230,7 @@ static uint32 VehicleEnter_Track(Vehicle *v, uint tile, int x, int y) int dir; // this routine applies only to trains in depot tiles - if (v->type != VEH_Train || !IS_RAIL_DEPOT(_map5[tile])) + if (v->type != VEH_Train || !IsRailDepot(_map5[tile])) return 0; /* depot direction */ |