diff --git a/src/settings.cpp b/src/settings.cpp index f2019fdbde..3b49a45649 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1022,6 +1022,14 @@ static bool RoadVehAccelerationModelChanged(int32 p1) } } } + if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL || !_settings_game.vehicle.improved_breakdowns) { + RoadVehicle *rv; + FOR_ALL_ROADVEHICLES(rv) { + if (rv->IsFrontEngine()) { + rv->breakdown_chance = 128; + } + } + } /* These windows show acceleration values only when realistic acceleration is on. They must be redrawn after a setting change. */ SetWindowClassesDirty(WC_ENGINE_PREVIEW); diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index f5ec95485e..2cba5c951f 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -485,8 +485,13 @@ void Train::UpdateAcceleration() assert(weight != 0); this->acceleration = Clamp(power / weight * 4, 1, 255); - /* for non-realistic acceleration, breakdown chance is 128, corrected by the multiengine factor of 3/(n+2) */ - this->breakdown_chance = min(128 * 3 / (this->tcache.cached_num_engines + 2), 5); + if (_settings_game.vehicle.improved_breakdowns) { + if (_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) { + this->breakdown_chance = max(128 * 3 / (this->tcache.cached_num_engines + 2), 5); + } + } else { + this->breakdown_chance = 128; + } } /** diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 508d6c98ef..b85b265665 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -118,8 +118,6 @@ void VehicleServiceInDepot(Vehicle *v) v->reliability = e->reliability; v->breakdown_ctr = 0; v->vehstatus &= ~VS_AIRCRAFT_BROKEN; - /* Prevent vehicles from breaking down directly after exiting the depot. */ - v->breakdown_chance /= 4; SetWindowDirty(WC_VEHICLE_DETAILS, v->index); // ensure that last service date and reliability are updated do { @@ -157,8 +155,6 @@ void VehicleServiceInDepot(Vehicle *v) v->breakdowns_since_last_service = 0; v->reliability = v->GetEngine()->reliability; - /* Prevent vehicles from breaking down directly after exiting the depot. */ - v->breakdown_chance /= 4; v = v->Next(); } while (v != NULL && v->HasEngineType()); }