summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openttd.c4
-rw-r--r--rail_cmd.c2
-rw-r--r--road_cmd.c14
-rw-r--r--road_map.h12
-rw-r--r--town_cmd.c3
5 files changed, 22 insertions, 13 deletions
diff --git a/openttd.c b/openttd.c
index d1bb13c76..bc928779f 100644
--- a/openttd.c
+++ b/openttd.c
@@ -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);