diff --git a/src/road_map.h b/src/road_map.h index 94e900290c..181d199d38 100644 --- a/src/road_map.h +++ b/src/road_map.h @@ -46,6 +46,24 @@ inline bool MayHaveRoad(TileIndex t) } } +/** + * Test whether a tile type can have road/tram types. + * @param type Tile type. + * @return true if tile type can have road/tram types. + */ +inline bool MayTileTypeHaveRoad(TileType type) +{ + switch (type) { + case MP_ROAD: + case MP_STATION: + case MP_TUNNELBRIDGE: + return true; + + default: + return false; + } +} + /** * Get the type of the road tile. * @param t Tile to query. diff --git a/src/sl/vehicle_sl.cpp b/src/sl/vehicle_sl.cpp index c586398413..52597f6d1a 100644 --- a/src/sl/vehicle_sl.cpp +++ b/src/sl/vehicle_sl.cpp @@ -441,7 +441,12 @@ void AfterLoadVehicles(bool part_of_load) for (RoadVehicle *u = rv; u != nullptr; u = u->Next()) { u->roadtype = rv->roadtype; u->compatible_roadtypes = rv->compatible_roadtypes; - if (GetRoadType(u->tile, GetRoadTramType(u->roadtype)) == INVALID_ROADTYPE) is_invalid = true; + if (IsSavegameVersionBefore(SLV_62)) { + /* Use simplified check before trams were introduced */ + if (!MayTileTypeHaveRoad(GetTileType(u->tile))) is_invalid = true; + } else { + if (!MayHaveRoad(u->tile) || GetRoadType(u->tile, GetRoadTramType(u->roadtype)) == INVALID_ROADTYPE) is_invalid = true; + } } if (is_invalid && part_of_load) {