From 8c3d1b1c4565a065aa1cfbf4958f9574bbe04af3 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 11 Apr 2019 01:48:02 +0100 Subject: [PATCH] Convert secondary rail types in AfterLoadLabelMaps Handle missing rail types --- src/saveload/labelmaps_sl.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/saveload/labelmaps_sl.cpp b/src/saveload/labelmaps_sl.cpp index dd71f1c3e7..11d851bb82 100644 --- a/src/saveload/labelmaps_sl.cpp +++ b/src/saveload/labelmaps_sl.cpp @@ -42,36 +42,45 @@ static bool NeedRailTypeConversion() void AfterLoadLabelMaps() { if (NeedRailTypeConversion()) { - std::vector railtype_conversion_map; + RailType railtype_conversion_map[RAILTYPE_END]; for (uint i = 0; i < _railtype_list.size(); i++) { RailType r = GetRailTypeByLabel(_railtype_list[i]); if (r == INVALID_RAILTYPE) r = RAILTYPE_BEGIN; - railtype_conversion_map.push_back(r); + railtype_conversion_map[i] = r; } + for (uint i = _railtype_list.size(); i < RAILTYPE_END; i++) { + railtype_conversion_map[i] = RAILTYPE_RAIL; + } + + auto convert = [&](TileIndex t) { + SetRailType(t, railtype_conversion_map[GetRailType(t)]); + RailType secondary = GetTileSecondaryRailTypeIfValid(t); + if (secondary != INVALID_RAILTYPE) SetSecondaryRailType(t, railtype_conversion_map[secondary]); + }; for (TileIndex t = 0; t < MapSize(); t++) { switch (GetTileType(t)) { case MP_RAILWAY: - SetRailType(t, railtype_conversion_map[GetRailType(t)]); + convert(t); break; case MP_ROAD: if (IsLevelCrossing(t)) { - SetRailType(t, railtype_conversion_map[GetRailType(t)]); + convert(t); } break; case MP_STATION: if (HasStationRail(t)) { - SetRailType(t, railtype_conversion_map[GetRailType(t)]); + convert(t); } break; case MP_TUNNELBRIDGE: if (GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL) { - SetRailType(t, railtype_conversion_map[GetRailType(t)]); + convert(t); } break;