summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-03-22 21:27:13 +0000
committerfrosch <frosch@openttd.org>2013-03-22 21:27:13 +0000
commit30f601d685196464cb86b32f2f3f2b13019f0735 (patch)
treec5a2834af593e935abc6c6426861a5f1b2edc66f /src
parent9eab26a1a1bdccb4da54f598e861f029aa72f41f (diff)
downloadopenttd-30f601d685196464cb86b32f2f3f2b13019f0735.tar.xz
(svn r25115) -Fix (r8973) [FS#5492-ish]: [NewGRF] Acceleration of NewGRF aircraft was too fast, while acceleration of default aircraft was way too slow. I.e. choose wisely who to let write the software for your orbiter.
Diffstat (limited to 'src')
-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)
*/