Fix 5db883f: Railtype bits were moved too late, leading to rails under bridges losing their type

(cherry picked from commit 63a7df027d)
pull/88/head
Charles Pigott 5 years ago committed by Jonathan G Rennison
parent e334f7db30
commit 10c8104e70

@ -1296,6 +1296,44 @@ bool AfterLoadGame()
}
}
/* Railtype moved from m3 to m8 in version SLV_EXTEND_RAILTYPES. */
if (IsSavegameVersionBefore(SLV_EXTEND_RAILTYPES)) {
const bool has_extra_bit = SlXvIsFeaturePresent(XSLFI_MORE_RAIL_TYPES, 1, 1);
auto update_railtype = [&](TileIndex t) {
uint rt = GB(_m[t].m3, 0, 4);
if (has_extra_bit) rt |= (GB(_m[t].m1, 7, 1) << 4);
SetRailType(t, (RailType)rt);
};
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_RAILWAY:
update_railtype(t);
break;
case MP_ROAD:
if (IsLevelCrossing(t)) {
update_railtype(t);
}
break;
case MP_STATION:
if (HasStationRail(t)) {
update_railtype(t);
}
break;
case MP_TUNNELBRIDGE:
if (GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL) {
update_railtype(t);
}
break;
default:
break;
}
}
}
if (IsSavegameVersionBefore(SLV_42)) {
Vehicle *v;
@ -1377,44 +1415,6 @@ bool AfterLoadGame()
}
}
/* Railtype moved from m3 to m8 in version SLV_EXTEND_RAILTYPES. */
if (IsSavegameVersionBefore(SLV_EXTEND_RAILTYPES)) {
const bool has_extra_bit = SlXvIsFeaturePresent(XSLFI_MORE_RAIL_TYPES, 1, 1);
auto update_railtype = [&](TileIndex t) {
uint rt = GB(_m[t].m3, 0, 4);
if (has_extra_bit) rt |= (GB(_m[t].m1, 7, 1) << 4);
SetRailType(t, (RailType)rt);
};
for (TileIndex t = 0; t < map_size; t++) {
switch (GetTileType(t)) {
case MP_RAILWAY:
update_railtype(t);
break;
case MP_ROAD:
if (IsLevelCrossing(t)) {
update_railtype(t);
}
break;
case MP_STATION:
if (HasStationRail(t)) {
update_railtype(t);
}
break;
case MP_TUNNELBRIDGE:
if (GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL) {
update_railtype(t);
}
break;
default:
break;
}
}
}
if (SlXvIsFeatureMissing(XSLFI_DUAL_RAIL_TYPES)) {
/* Introduced dual rail types. */
for (TileIndex t = 0; t < map_size; t++) {

Loading…
Cancel
Save