diff --git a/src/bridge_map.h b/src/bridge_map.h index b97a6ff5d8..2f67e2b37d 100644 --- a/src/bridge_map.h +++ b/src/bridge_map.h @@ -148,20 +148,13 @@ static inline void MakeBridgeRamp(TileIndex t, Owner o, BridgeType bridgetype, D * @param d the direction this ramp must be facing * @param road_rt the road type of the bridge * @param tram_rt the tram type of the bridge - * @param upgrade whether the bridge is an upgrade instead of a totally new bridge */ -static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadType road_rt, RoadType tram_rt, bool upgrade) +static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, Owner owner_road, Owner owner_tram, BridgeType bridgetype, DiagDirection d, RoadType road_rt, RoadType tram_rt) { - // Backup custom bridgehead data. - uint custom_bridge_head_backup = GB(_m[t].m2, 0, 8); - MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD); SetRoadOwner(t, RTT_ROAD, owner_road); if (owner_tram != OWNER_TOWN) SetRoadOwner(t, RTT_TRAM, owner_tram); SetRoadTypes(t, road_rt, tram_rt); - - // Restore custom bridgehead data if we're upgrading an existing bridge. - if (upgrade) SB(_m[t].m2, 0, 8, custom_bridge_head_backup); } /** diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index c07f4e2ae0..fb6de32e3e 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -639,10 +639,17 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u Owner owner_road = hasroad ? GetRoadOwner(t, RTT_ROAD) : company; Owner owner_tram = hastram ? GetRoadOwner(t, RTT_TRAM) : company; - MakeRoadBridgeRamp(t, owner, owner_road, owner_tram, bridge_type, d, road_rt, tram_rt, is_upgrade); + if (is_upgrade) { - if (road_rt != INVALID_ROADTYPE) SetCustomBridgeHeadRoadBits(t, RTT_ROAD, GetCustomBridgeHeadRoadBits(t, RTT_ROAD) | DiagDirToRoadBits(d)); - if (tram_rt != INVALID_ROADTYPE) SetCustomBridgeHeadRoadBits(t, RTT_TRAM, GetCustomBridgeHeadRoadBits(t, RTT_TRAM) | DiagDirToRoadBits(d)); + 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); + } else { + MakeRoadBridgeRamp(t, owner, owner_road, owner_tram, bridge_type, d, road_rt, tram_rt); } }; make_bridge_ramp(tile_start, dir);