diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -512,11 +512,10 @@ static int DrawRailWagonPurchaseInfo(int static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi) { const Engine *e = GetEngine(engine_number); - uint weight = e->GetDisplayWeight(); /* Purchase Cost - Engine weight */ SetDParam(0, e->GetCost()); - SetDParam(1, weight); + SetDParam(1, e->GetDisplayWeight()); DrawString(x, y, STR_PURCHASE_INFO_COST_WEIGHT, TC_FROMSTRING); y += 10; @@ -528,7 +527,7 @@ static int DrawRailEnginePurchaseInfo(in /* Max tractive effort - not applicable if old acceleration or maglev */ if (_settings_game.vehicle.train_acceleration_model != TAM_ORIGINAL && rvi->railtype != RAILTYPE_MAGLEV) { - SetDParam(0, (weight * 10 * GetEngineProperty(engine_number, 0x1F, rvi->tractive_effort)) / 256); + SetDParam(0, e->GetDisplayMaxTractiveEffort()); DrawString(x, y, STR_PURCHASE_INFO_MAX_TE, TC_FROMSTRING); y += 10; } diff --git a/src/engine.cpp b/src/engine.cpp --- a/src/engine.cpp +++ b/src/engine.cpp @@ -204,6 +204,22 @@ uint Engine::GetDisplayWeight() const } } +/** + * Returns the tractive effort for display purposes. + * For dual-headed train-engines this is the tractive effort of both heads + * @return tractive effort in display units kN + */ +uint Engine::GetDisplayMaxTractiveEffort() const +{ + /* Currently only trains have 'tractive effort' */ + switch (this->type) { + case VEH_TRAIN: + return (10 * this->GetDisplayWeight() * GetEngineProperty(this->index, 0x1F, this->u.rail.tractive_effort)) / 256; + + default: NOT_REACHED(); + } +} + /** Sets cached values in Company::num_vehicles and Group::num_vehicles */ void SetCachedEngineCounts() diff --git a/src/engine_base.h b/src/engine_base.h --- a/src/engine_base.h +++ b/src/engine_base.h @@ -55,6 +55,7 @@ struct Engine : PoolItem