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;
|
||||
|
Reference in New Issue
Block a user