Fix road/tram type handling when loading JokerPP v1.27 savegames

See #123
pull/128/head
Jonathan G Rennison 4 years ago
parent 09a8eee9b4
commit f0754b007e

@ -1451,6 +1451,44 @@ bool AfterLoadGame()
SB(_me[t].m7, 6, 2, 0); // Clear pre-NRT road type bits.
}
}
} else if (SlXvIsFeaturePresent(XSLFI_JOKERPP, SL_JOKER_1_27)) {
uint next_road_type = 0;
uint next_tram_type = 0;
RoadType road_types[32];
RoadType tram_types[32];
MemSetT(road_types, ROADTYPE_ROAD, 31);
MemSetT(tram_types, ROADTYPE_TRAM, 31);
road_types[31] = INVALID_ROADTYPE;
tram_types[31] = INVALID_ROADTYPE;
for (RoadType rt = ROADTYPE_BEGIN; rt < ROADTYPE_END; rt++) {
if (RoadTypeIsRoad(rt)) {
if (next_road_type < 31) road_types[next_road_type++] = rt;
} else {
if (next_tram_type < 31) tram_types[next_tram_type++] = rt;
}
}
for (TileIndex t = 0; t < map_size; t++) {
bool has_road = false;
switch (GetTileType(t)) {
case MP_ROAD:
has_road = true;
break;
case MP_STATION:
has_road = IsRoadStop(t);
break;
case MP_TUNNELBRIDGE:
has_road = GetTunnelBridgeTransportType(t) == TRANSPORT_ROAD;
break;
default:
break;
}
if (has_road) {
RoadType road_rt = road_types[(GB(_me[t].m7, 6, 1) << 4) | GB(_m[t].m4, 0, 4)];
RoadType tram_rt = tram_types[(GB(_me[t].m7, 7, 1) << 4) | GB(_m[t].m4, 4, 4)];
SetRoadTypes(t, road_rt, tram_rt);
SB(_me[t].m7, 6, 2, 0);
}
}
}
if (SlXvIsFeatureMissing(XSLFI_DUAL_RAIL_TYPES)) {

Loading…
Cancel
Save