Check for broken custom bridge head states, and bump save version
This commit is contained in:
@@ -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 },
|
||||
|
Reference in New Issue
Block a user