diff --git a/src/aircraft.h b/src/aircraft.h index a7d7761a1b..cc9dd8641b 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -91,6 +91,7 @@ struct Aircraft : public SpecializedVehicle { SpriteID GetImage(Direction direction) const; int GetDisplaySpeed() const { return this->cur_speed; } int GetDisplayMaxSpeed() const { return this->max_speed; } + int GetSpeedOldUnits() const { return this->max_speed * 10 / 128; } Money GetRunningCost() const; bool IsInDepot() const { return (this->vehstatus & VS_HIDDEN) != 0 && IsHangarTile(this->tile); } bool Tick(); diff --git a/src/economy.cpp b/src/economy.cpp index f0530c3dac..810e997011 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1231,7 +1231,7 @@ static void LoadUnloadVehicle(Vehicle *v, int *cargo_left) case VEH_TRAIN: t = Train::From(u)->tcache.cached_max_speed; break; case VEH_ROAD: t = u->max_speed / 2; break; case VEH_SHIP: t = u->max_speed; break; - case VEH_AIRCRAFT: t = u->max_speed * 10 / 128; break; // convert to old units + case VEH_AIRCRAFT: t = Aircraft::From(u)->GetSpeedOldUnits(); break; // Convert to old units. default: NOT_REACHED(); } diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 33479cabd8..1d683430c6 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -715,8 +715,20 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by case 0x17: return v->tick_counter; case 0x18: case 0x19: { - uint max_speed = v->type == VEH_TRAIN ? Train::From(v)->tcache.cached_max_speed : v->max_speed; - if (v->type == VEH_AIRCRAFT) max_speed = max_speed * 10 / 128; + uint max_speed; + switch (v->type) { + case VEH_TRAIN: + max_speed = Train::From(v)->tcache.cached_max_speed; + break; + + case VEH_AIRCRAFT: + max_speed = Aircraft::From(v)->GetSpeedOldUnits(); // Convert to old units. + break; + + default: + max_speed = v->max_speed; + break; + } return (variable - 0x80) == 0x18 ? max_speed : GB(max_speed, 8, 8); } case 0x1A: return v->x_pos;