From d1dfb276992e309d54c55a07ef79aa600a38b8f4 Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 10 Nov 2010 20:15:48 +0000 Subject: [PATCH] (svn r21136) -Fix [FS#4213]: bridge speed limits should apply to all wagons of a vehicle, not just the head of the vehicle --- src/roadveh_cmd.cpp | 3 ++- src/train_cmd.cpp | 4 ++-- src/tunnelbridge_cmd.cpp | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 188deb8769..5fa6949099 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -669,7 +669,8 @@ static int RoadVehAccelerate(RoadVehicle *v) /* Apply bridge speed limit */ if (v->state == RVSB_WORMHOLE && !(v->vehstatus & VS_HIDDEN)) { - v->cur_speed = min(v->cur_speed, GetBridgeSpec(GetBridgeType(v->tile))->speed * 2); + RoadVehicle *first = v->First(); + first->cur_speed = min(first->cur_speed, GetBridgeSpec(GetBridgeType(v->tile))->speed * 2); } /* Update statusbar only if speed has changed to save CPU time */ diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 399fd8253d..ca09c07aca 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3296,8 +3296,8 @@ static void TrainController(Train *v, Vehicle *nomove) * - for tunnels, only the part when the vehicle is not visible (part of enter/exit tile too) * - for bridges, only the middle part - without the bridge heads */ if (!(v->vehstatus & VS_HIDDEN)) { - v->cur_speed = - min(v->cur_speed, GetBridgeSpec(GetBridgeType(v->tile))->speed); + Train *first = v->First(); + first->cur_speed = min(first->cur_speed, GetBridgeSpec(GetBridgeType(v->tile))->speed); } if (IsTileType(gp.new_tile, MP_TUNNELBRIDGE) && HasBit(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) { diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index f7645b26f8..22973d62d8 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -1562,13 +1562,13 @@ static VehicleEnterTileStatus VehicleEnter_TunnelBridge(Vehicle *v, TileIndex ti } } } else { // IsBridge(tile) - - if (v->IsPrimaryVehicle() && v->type != VEH_SHIP) { + if (v->type != VEH_SHIP) { /* modify speed of vehicle */ uint16 spd = GetBridgeSpec(GetBridgeType(tile))->speed; if (v->type == VEH_ROAD) spd *= 2; - if (v->cur_speed > spd) v->cur_speed = spd; + Vehicle *first = v->First(); + first->cur_speed = min(first->cur_speed, spd); } if (vdir == dir) {