diff --git a/src/road.cpp b/src/road.cpp index 3700629ef6..8cf4e353c7 100644 --- a/src/road.cpp +++ b/src/road.cpp @@ -47,7 +47,7 @@ RoadBits CleanUpRoadBits(const TileIndex tile, RoadBits org_rb) { if (!IsValidTile(tile)) return ROAD_NONE; for (DiagDirection dir = DIAGDIR_BEGIN; dir < DIAGDIR_END; dir++) { - const TileIndex neighbor_tile = TileAddByDiagDir(tile, dir); + TileIndex neighbor_tile = TileAddByDiagDir(tile, dir); /* Get the Roadbit pointing to the neighbor_tile */ const RoadBits target_rb = DiagDirToRoadBits(dir); @@ -57,6 +57,7 @@ RoadBits CleanUpRoadBits(const TileIndex tile, RoadBits org_rb) bool connective = false; const RoadBits mirrored_rb = MirrorRoadBits(target_rb); + test_tile: if (IsValidTile(neighbor_tile)) { switch (GetTileType(neighbor_tile)) { /* Always connective ones */ @@ -79,9 +80,14 @@ RoadBits CleanUpRoadBits(const TileIndex tile, RoadBits org_rb) } break; - case MP_RAILWAY: - connective = IsPossibleCrossing(neighbor_tile, DiagDirToAxis(dir)); + case MP_RAILWAY: { + if (IsPossibleCrossing(neighbor_tile, DiagDirToAxis(dir))) { + /* Check far side of crossing */ + neighbor_tile = TileAddByDiagDir(neighbor_tile, dir); + goto test_tile; + } break; + } case MP_WATER: /* Check for real water tile */