diff options
-rw-r--r-- | openttd.c | 4 | ||||
-rw-r--r-- | rail_cmd.c | 2 | ||||
-rw-r--r-- | road_cmd.c | 14 | ||||
-rw-r--r-- | road_map.h | 12 | ||||
-rw-r--r-- | town_cmd.c | 3 |
5 files changed, 22 insertions, 13 deletions
@@ -1002,7 +1002,9 @@ static void ConvertTownOwner(void) for (tile = 0; tile != MapSize(); tile++) { if (IsTileType(tile, MP_STREET)) { - if (IsLevelCrossing(tile) && _m[tile].m3 & 0x80) _m[tile].m3 = OWNER_TOWN; + if (IsLevelCrossing(tile) && GetCrossingRoadOwner(tile) & 0x80) { + SetCrossingRoadOwner(tile, OWNER_TOWN); + } if (_m[tile].m1 & 0x80) SetTileOwner(tile, OWNER_TOWN); } else if (IsTileType(tile, MP_TUNNELBRIDGE)) { diff --git a/rail_cmd.c b/rail_cmd.c index eaec7bee9..d1a5c3380 100644 --- a/rail_cmd.c +++ b/rail_cmd.c @@ -417,7 +417,7 @@ int32 CmdRemoveSingleRail(int x, int y, uint32 flags, uint32 p1, uint32 p2) } if (flags & DC_EXEC) { - MakeRoadNormal(tile, _m[tile].m3, GetCrossingRoadBits(tile), _m[tile].m2); + MakeRoadNormal(tile, GetCrossingRoadOwner(tile), GetCrossingRoadBits(tile), _m[tile].m2); } break; } diff --git a/road_cmd.c b/road_cmd.c index 3108c4536..363ecfaa6 100644 --- a/road_cmd.c +++ b/road_cmd.c @@ -34,9 +34,8 @@ static bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, bool* edge_roa // Only do the special processing for actual players. if (_current_player >= MAX_PLAYERS) return true; - // A railway crossing has the road owner in the map3_lo byte. if (IsTileType(tile, MP_STREET) && IsLevelCrossing(tile)) { - owner = _m[tile].m3; + owner = GetCrossingRoadOwner(tile); } else { owner = GetTileOwner(tile); } @@ -106,9 +105,7 @@ int32 CmdRemoveRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (!IsTileType(tile, MP_STREET) && !IsTileType(tile, MP_TUNNELBRIDGE)) return CMD_ERROR; - // owner for railroad crossing is stored somewhere else - // XXX - Fix this so for a given tiletype the owner of the type is in the same variable - owner = IsLevelCrossing(tile) ? _m[tile].m3 : GetTileOwner(tile); + owner = IsLevelCrossing(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile); if (owner == OWNER_TOWN && _game_mode != GM_EDITOR) { if (IsTileType(tile, MP_TUNNELBRIDGE)) { // index of town is not saved for bridge (no space) @@ -1127,9 +1124,8 @@ static void VehicleLeave_Road(Vehicle *v, TileIndex tile, int x, int y) static void ChangeTileOwner_Road(TileIndex tile, PlayerID old_player, PlayerID new_player) { - // road/rail crossing where the road is owned by the current player? - if (old_player == _m[tile].m3 && IsLevelCrossing(tile)) { - _m[tile].m3 = (new_player == OWNER_SPECTATOR) ? OWNER_NONE : new_player; + if (IsLevelCrossing(tile) && GetCrossingRoadOwner(tile) == old_player) { + SetCrossingRoadOwner(tile, new_player == OWNER_SPECTATOR ? OWNER_NONE : new_player); } if (!IsTileOwner(tile, old_player)) return; @@ -1143,7 +1139,7 @@ static void ChangeTileOwner_Road(TileIndex tile, PlayerID old_player, PlayerID n break; case ROAD_CROSSING: - MakeRoadNormal(tile, _m[tile].m3, GetCrossingRoadBits(tile), _m[tile].m2); + MakeRoadNormal(tile, GetCrossingRoadOwner(tile), GetCrossingRoadBits(tile), _m[tile].m2); break; default: diff --git a/road_map.h b/road_map.h index 3e506bf72..feb7656cb 100644 --- a/road_map.h +++ b/road_map.h @@ -55,6 +55,18 @@ static inline TrackBits GetCrossingRailBits(TileIndex tile) } +// TODO swap owner of road and rail +static inline Owner GetCrossingRoadOwner(TileIndex t) +{ + return (Owner)_m[t].m3; +} + +static inline void SetCrossingRoadOwner(TileIndex t, Owner o) +{ + _m[t].m3 = o; +} + + typedef enum RoadType { ROAD_NORMAL, ROAD_CROSSING, diff --git a/town_cmd.c b/town_cmd.c index 73102547b..86bf54124 100644 --- a/town_cmd.c +++ b/town_cmd.c @@ -1828,10 +1828,9 @@ Town *ClosestTownFromTile(TileIndex tile, uint threshold) uint dist, best = threshold; Town *best_town = NULL; - // XXX - Fix this so for a given tiletype the owner of the type is in the same variable if (IsTileType(tile, MP_HOUSE) || ( IsTileType(tile, MP_STREET) && - (IsLevelCrossing(tile) ? _m[tile].m3 : GetTileOwner(tile)) == OWNER_TOWN + (IsLevelCrossing(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile)) == OWNER_TOWN )) return GetTown(_m[tile].m2); |