Check for broken custom bridge head states, and bump save version

pull/221/head
Jonathan G Rennison 3 years ago
parent b931df9934
commit c37beb78ee

@ -1542,6 +1542,48 @@ bool AfterLoadGame()
}
}
if (SlXvIsFeaturePresent(XSLFI_CUSTOM_BRIDGE_HEADS, 1, 3)) {
/* fix any mismatched road/tram bits */
for (TileIndex t = 0; t < map_size; t++) {
if (IsBridgeTile(t) && GetTunnelBridgeTransportType(t) == TRANSPORT_ROAD) {
for (RoadTramType rtt : { RTT_TRAM, RTT_ROAD }) {
RoadType rt = GetRoadType(t, rtt);
if (rt == INVALID_ROADTYPE) continue;
RoadBits rb = GetCustomBridgeHeadRoadBits(t, rtt);
DiagDirection dir = GetTunnelBridgeDirection(t);
if (!(rb & DiagDirToRoadBits(dir))) continue;
if (HasAtMostOneBit(rb)) {
DEBUG(misc, 0, "Fixing road bridge head state (case A) at tile 0x%X", t);
rb |= DiagDirToRoadBits(ReverseDiagDir(dir));
SetCustomBridgeHeadRoadBits(t, rtt, rb);
}
TileIndex end = GetOtherBridgeEnd(t);
if (GetRoadType(end, rtt) == INVALID_ROADTYPE) {
DEBUG(misc, 0, "Fixing road bridge head state (case B) at tile 0x%X -> 0x%X", t, end);
SetRoadType(end, rtt, rt);
SetCustomBridgeHeadRoadBits(end, rtt, AxisToRoadBits(DiagDirToAxis(dir)));
continue;
}
if (GetRoadType(end, rtt) != rt) {
DEBUG(misc, 0, "Fixing road bridge head state (case C) at tile 0x%X -> 0x%X", t, end);
SetRoadType(end, rtt, rt);
}
RoadBits end_rb = GetCustomBridgeHeadRoadBits(end, rtt);
if (!(end_rb & DiagDirToRoadBits(ReverseDiagDir(dir)))) {
DEBUG(misc, 0, "Fixing road bridge head state (case D) at tile 0x%X -> 0x%X", t, end);
end_rb |= DiagDirToRoadBits(ReverseDiagDir(dir));
if (HasAtMostOneBit(end_rb)) end_rb |= DiagDirToRoadBits(dir);
SetCustomBridgeHeadRoadBits(end, rtt, end_rb);
}
}
}
}
}
/* Elrails got added in rev 24 */
if (IsSavegameVersionBefore(SLV_24)) {
RailType min_rail = RAILTYPE_ELECTRIC;

@ -103,7 +103,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
{ XSLFI_CARGO_TYPE_ORDERS, XSCF_NULL, 3, 3, "cargo_type_orders", nullptr, nullptr, "ORDX,VEOX" },
{ XSLFI_EXTENDED_GAMELOG, XSCF_NULL, 1, 1, "extended_gamelog", nullptr, nullptr, nullptr },
{ XSLFI_STATION_CATCHMENT_INC, XSCF_NULL, 1, 1, "station_catchment_inc", nullptr, nullptr, nullptr },
{ XSLFI_CUSTOM_BRIDGE_HEADS, XSCF_NULL, 3, 3, "custom_bridge_heads", nullptr, nullptr, nullptr },
{ XSLFI_CUSTOM_BRIDGE_HEADS, XSCF_NULL, 4, 4, "custom_bridge_heads", nullptr, nullptr, nullptr },
{ XSLFI_CHUNNEL, XSCF_NULL, 2, 2, "chunnel", nullptr, nullptr, "TUNN" },
{ XSLFI_SCHEDULED_DISPATCH, XSCF_NULL, 2, 2, "scheduled_dispatch", nullptr, nullptr, nullptr },
{ XSLFI_MORE_TOWN_GROWTH_RATES, XSCF_NULL, 1, 1, "more_town_growth_rates", nullptr, nullptr, nullptr },

Loading…
Cancel
Save