From e138d3564beefae1773c4a05ed3fc88d4f5f0b1b Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 21 Jun 2017 23:40:19 +0100 Subject: [PATCH] Fix tram reversing on custom bridge head tiles. (cherry picked from commit 0a345efc27d967d3ec5dd465ac6aa6044fa8bc91) --- src/roadveh_cmd.cpp | 4 ++-- src/tunnelbridge_cmd.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 1072c72d41..c8ae6f518a 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1097,7 +1097,7 @@ static Trackdir FollowPreviousRoadVehicle(const RoadVehicle *v, const RoadVehicl }; RoadBits required = required_roadbits[dir & 0x07]; - if ((required & GetAnyRoadBits(tile, v->roadtype, true)) == ROAD_NONE) { + if ((required & GetAnyRoadBits(tile, v->roadtype, false)) == ROAD_NONE) { dir = INVALID_TRACKDIR; } @@ -1348,7 +1348,7 @@ again: Trackdir dir; uint turn_around_start_frame = RVC_TURN_AROUND_START_FRAME; - if (v->roadtype == ROADTYPE_TRAM && !IsRoadDepotTile(v->tile) && HasExactlyOneBit(GetAnyRoadBits(v->tile, ROADTYPE_TRAM, true))) { + if (v->roadtype == ROADTYPE_TRAM && !IsRoadDepotTile(v->tile) && HasExactlyOneBit(GetAnyRoadBits(v->tile, ROADTYPE_TRAM, false))) { /* * The tram is turning around with one tram 'roadbit'. This means that * it is using the 'big' corner 'drive data'. However, to support the diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 630c95da68..a5a6dd83e9 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1895,6 +1895,12 @@ static VehicleEnterTileStatus VehicleEnter_TunnelBridge(Vehicle *v, TileIndex ti case VEH_ROAD: { RoadVehicle *rv = RoadVehicle::From(v); + if (IsRoadCustomBridgeHeadTile(tile)) { + RoadBits bits = ROAD_NONE; + if (rv->compatible_roadtypes & ROADTYPES_TRAM) bits |= GetCustomBridgeHeadRoadBits(tile, ROADTYPE_TRAM); + if (rv->compatible_roadtypes & ROADTYPES_ROAD) bits |= GetCustomBridgeHeadRoadBits(tile, ROADTYPE_ROAD); + if (!(bits & DiagDirToRoadBits(GetTunnelBridgeDirection(tile)))) return VETSB_CONTINUE; + } rv->state = RVSB_WORMHOLE; /* There are no slopes inside bridges / tunnels. */ ClrBit(rv->gv_flags, GVF_GOINGUP_BIT);