diff options
author | frosch <frosch@openttd.org> | 2013-03-22 21:27:13 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2013-03-22 21:27:13 +0000 |
commit | 30f601d685196464cb86b32f2f3f2b13019f0735 (patch) | |
tree | c5a2834af593e935abc6c6426861a5f1b2edc66f /src | |
parent | 9eab26a1a1bdccb4da54f598e861f029aa72f41f (diff) | |
download | openttd-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.cpp | 9 | ||||
-rw-r--r-- | src/newgrf.cpp | 10 | ||||
-rw-r--r-- | src/saveload/afterload.cpp | 11 | ||||
-rw-r--r-- | src/table/engines.h | 4 |
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) */ |