From fdeb75e3c8d90f70be74992dcc491844c9462c8e Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 14 Feb 2021 06:36:58 +0000 Subject: [PATCH] Fix upgrading road bridge with opposite road/tram type producing broken ramp road bits --- src/tunnelbridge_cmd.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 9fc28a3836..e9d2f11125 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -730,11 +730,16 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u if (is_upgrade) { RoadBits road_bits = GetCustomBridgeHeadRoadBits(t, RTT_ROAD); RoadBits tram_bits = GetCustomBridgeHeadRoadBits(t, RTT_TRAM); - if (RoadTypeIsRoad(roadtype)) road_bits |= DiagDirToRoadBits(d); - if (RoadTypeIsTram(roadtype)) tram_bits |= DiagDirToRoadBits(d); MakeRoadBridgeRamp(t, owner, owner_road, owner_tram, bridge_type, d, road_rt, tram_rt); - if (road_rt != INVALID_ROADTYPE) SetCustomBridgeHeadRoadBits(t, RTT_ROAD, road_bits); - if (tram_rt != INVALID_ROADTYPE) SetCustomBridgeHeadRoadBits(t, RTT_TRAM, tram_bits); + auto add_road_bits = [roadtype, d, t](RoadTramType rtt, RoadBits bits, RoadType build_rt) { + if (GetRoadTramType(roadtype) == rtt) { + bits |= DiagDirToRoadBits(d); + if (HasAtMostOneBit(bits)) bits |= DiagDirToRoadBits(ReverseDiagDir(d)); + } + if (build_rt != INVALID_ROADTYPE) SetCustomBridgeHeadRoadBits(t, rtt, bits); + }; + add_road_bits(RTT_ROAD, road_bits, road_rt); + add_road_bits(RTT_TRAM, tram_bits, tram_rt); } else { MakeRoadBridgeRamp(t, owner, owner_road, owner_tram, bridge_type, d, road_rt, tram_rt); }