Index: src/tunnelbridge_cmd.cpp =================================================================== --- src/tunnelbridge_cmd.cpp (wersja 24818) +++ src/tunnelbridge_cmd.cpp (kopia robocza) @@ -454,18 +454,32 @@ SetTunnelBridgeReservation(tile_end, pbs_reservation); break; - case TRANSPORT_ROAD: + case TRANSPORT_ROAD: { + RoadTypes prev_roadtypes = IsBridgeTile(tile_start) ? GetRoadTypes(tile_start) : ROADTYPES_NONE; + RoadType rt; + if (c != NULL) { /* Add all new road types to the company infrastructure counter. */ - RoadType new_rt; - FOR_EACH_SET_ROADTYPE(new_rt, roadtypes ^ (IsBridgeTile(tile_start) ? GetRoadTypes(tile_start) : ROADTYPES_NONE)) { + FOR_EACH_SET_ROADTYPE(rt, roadtypes ^ prev_roadtypes) { /* A full diagonal road tile has two road bits. */ - Company::Get(owner)->infrastructure.road[new_rt] += (bridge_len + 2) * 2 * TUNNELBRIDGE_TRACKBIT_FACTOR; + Company::Get(owner)->infrastructure.road[rt] += (bridge_len + 2) * 2 * TUNNELBRIDGE_TRACKBIT_FACTOR; } } + + /* Remember previous owners */ + Owner prev_owners[ROADTYPE_END]; + FOR_EACH_SET_ROADTYPE(rt, prev_roadtypes) prev_owners[rt] = GetRoadOwner(tile_start, rt); + MakeRoadBridgeRamp(tile_start, owner, bridge_type, dir, roadtypes); MakeRoadBridgeRamp(tile_end, owner, bridge_type, ReverseDiagDir(dir), roadtypes); + + /* Restore previous owners */ + FOR_EACH_SET_ROADTYPE(rt, prev_roadtypes) { + SetRoadOwner(tile_start, rt, prev_owners[rt]); + SetRoadOwner(tile_end, rt, prev_owners[rt]); + } break; + } case TRANSPORT_WATER: if (!IsBridgeTile(tile_start) && c != NULL) c->infrastructure.water += (bridge_len + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR;