From beda7ebb39c78b9822018b05565b4d9b56a9506a Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 4 Jan 2018 19:05:18 +0000 Subject: [PATCH] Set minimum speed for train critical breakdown reduction. --- src/train_cmd.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 5e90db53b2..4cf2952cbf 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -151,12 +151,17 @@ void CheckBreakdownFlags(Train *v) uint16 GetTrainVehicleMaxSpeed(const Train *u, const RailVehicleInfo *rvi_u, const Train *front) { - uint16 speed = GetVehicleProperty(u, PROP_TRAIN_SPEED, rvi_u->max_speed); + const uint16 base_speed = GetVehicleProperty(u, PROP_TRAIN_SPEED, rvi_u->max_speed); + uint16 speed = base_speed; if (HasBit(u->flags, VRF_NEED_REPAIR) && front->IsFrontEngine()) { for (uint i = 0; i < u->critical_breakdown_count; i++) { speed = min(speed - (speed / (front->tcache.cached_num_engines + 2)) + 1, speed); } } + + /* clamp speed to be no less than lower of 5mph and 1/8 of base speed */ + speed = max(speed, min(5, (base_speed + 7) >> 3)); + if (HasBit(u->flags, VRF_HAS_HIT_RV) && front->IsFrontEngine()) { speed = min(speed, 30); }