diff --git a/src/pbs.cpp b/src/pbs.cpp index 35cd42e2ac..17a1e4054d 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -133,10 +133,10 @@ bool TryReserveRailTrack(TileIndex tile, Track t, bool trigger_stations) if (IsCrossingOccupiedByRoadVehicle(tile)) return false; if (_settings_game.vehicle.adjacent_crossings) { const Axis axis = GetCrossingRoadAxis(tile); - for (TileIndex t = tile; IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, AxisToDiagDir(GetCrossingRoadAxis(t)))) { + for (TileIndex t = tile; t < MapSize() && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, AxisToDiagDir(GetCrossingRoadAxis(t)))) { if (IsCrossingOccupiedByRoadVehicle(t)) return false; } - for (TileIndex t = tile; IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, ReverseDiagDir(AxisToDiagDir(GetCrossingRoadAxis(t))))) { + for (TileIndex t = tile; t < MapSize() && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, ReverseDiagDir(AxisToDiagDir(GetCrossingRoadAxis(t))))) { if (IsCrossingOccupiedByRoadVehicle(t)) return false; } } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 753726d74f..acc9db8b5e 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2593,19 +2593,19 @@ void UpdateLevelCrossing(TileIndex tile, bool sound, bool force_close) const bool adjacent_crossings = _settings_game.vehicle.adjacent_crossings; if (adjacent_crossings) { - for (TileIndex t = tile; !forced_state && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, dir)) { + for (TileIndex t = tile; !forced_state && t < MapSize() && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, dir)) { forced_state |= CheckLevelCrossing(t); } - for (TileIndex t = TileAddByDiagDir(tile, reverse_dir); !forced_state && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, reverse_dir)) { + for (TileIndex t = TileAddByDiagDir(tile, reverse_dir); !forced_state && t < MapSize() && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, reverse_dir)) { forced_state |= CheckLevelCrossing(t); } } UpdateLevelCrossingTile(tile, sound, adjacent_crossings || force_close, forced_state); - for (TileIndex t = TileAddByDiagDir(tile, dir); IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, dir)) { + for (TileIndex t = TileAddByDiagDir(tile, dir); t < MapSize() && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, dir)) { UpdateLevelCrossingTile(t, sound, adjacent_crossings, forced_state); } - for (TileIndex t = TileAddByDiagDir(tile, reverse_dir); IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, reverse_dir)) { + for (TileIndex t = TileAddByDiagDir(tile, reverse_dir); t < MapSize() && IsLevelCrossingTile(t) && GetCrossingRoadAxis(t) == axis; t = TileAddByDiagDir(t, reverse_dir)) { UpdateLevelCrossingTile(t, sound, adjacent_crossings, forced_state); } }