summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/aircraft_cmd.cpp9
-rw-r--r--src/newgrf.cpp10
-rw-r--r--src/saveload/afterload.cpp11
-rw-r--r--src/table/engines.h4
4 files changed, 23 insertions, 11 deletions
diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp
index cad674a20..71d8d3bb2 100644
--- a/src/aircraft_cmd.cpp
+++ b/src/aircraft_cmd.cpp
@@ -598,7 +598,14 @@ enum AircraftSpeedLimits {
*/
static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, bool hard_limit = true)
{
- uint spd = v->acceleration * 16;
+ /**
+ * 'acceleration' has the unit 3/8 mph/tick. This function is called twice per tick.
+ * So the speed amount we need to accelerate is:
+ * acceleration * 3 / 16 mph = acceleration * 3 / 16 * 16 / 10 km-ish/h
+ * = acceleration * 3 / 10 * 256 * (km-ish/h / 256)
+ * ~ acceleration * 77 (km-ish/h / 256)
+ */
+ uint spd = v->acceleration * 77;
byte t;
/* Adjust speed limits by plane speed factor to prevent taxiing
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 848903324..854ad165e 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -1618,15 +1618,9 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int
avi->max_speed = (buf->ReadByte() * 128) / 10;
break;
- case 0x0D: { // Acceleration
- uint acceleration = (buf->ReadByte() * 128) / 10;
- if (acceleration > UINT8_MAX) {
- grfmsg(1, "Acceleration property of aircraft %d is too big.", engine + i);
- acceleration = UINT8_MAX;
- }
- avi->acceleration = acceleration;
+ case 0x0D: // Acceleration
+ avi->acceleration = buf->ReadByte();
break;
- }
case PROP_AIRCRAFT_RUNNING_COST_FACTOR: // 0x0E Running cost factor
avi->running_cost = buf->ReadByte();
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index 15c44d392..a3837942c 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -2761,6 +2761,17 @@ bool AfterLoadGame()
_settings_game.script.settings_profile = IsInsideMM(_old_diff_level, SP_BEGIN, SP_END) ? _old_diff_level : (uint)SP_MEDIUM;
}
+ if (IsSavegameVersionBefore(182)) {
+ Aircraft *v;
+ /* Aircraft acceleration variable was bonkers */
+ FOR_ALL_AIRCRAFT(v) {
+ if (v->subtype <= AIR_AIRCRAFT) {
+ const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type);
+ v->acceleration = avi->acceleration;
+ }
+ }
+ }
+
/* Road stops is 'only' updating some caches */
AfterLoadRoadStops();
AfterLoadLabelMaps();
diff --git a/src/table/engines.h b/src/table/engines.h
index 102d8d79c..b79733c7a 100644
--- a/src/table/engines.h
+++ b/src/table/engines.h
@@ -580,8 +580,8 @@ static const ShipVehicleInfo _orig_ship_vehicle_info[] = {
* @param c running_Cost
* @param d subtype (bit 0 - plane, bit 1 - large plane)
* @param e sound effect
- * @param f acceleration
- * @param g max_speed (1 unit = 8 mph = 12.8 km-ish/h)
+ * @param f acceleration (1 unit = 3/8 mph/tick = 3/5 km-ish/h/tick) (stays the same in the variable)
+ * @param g max_speed (1 unit = 8 mph = 12.8 km-ish/h) (is converted to km-ish/h by the macro)
* @param h mail_capacity (bags)
* @param i passenger_capacity (persons)
*/