Fix road/tram type load check for savegame versions before 62

This commit is contained in:
Jonathan G Rennison
2024-01-15 19:37:54 +00:00
parent da71a58a84
commit a6b467cf45
2 changed files with 24 additions and 1 deletions

View File

@@ -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. * Get the type of the road tile.
* @param t Tile to query. * @param t Tile to query.

View File

@@ -441,7 +441,12 @@ void AfterLoadVehicles(bool part_of_load)
for (RoadVehicle *u = rv; u != nullptr; u = u->Next()) { for (RoadVehicle *u = rv; u != nullptr; u = u->Next()) {
u->roadtype = rv->roadtype; u->roadtype = rv->roadtype;
u->compatible_roadtypes = rv->compatible_roadtypes; 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) { if (is_invalid && part_of_load) {