FS#5833 - small changes to names in state machine

Attached to Project: OpenTTD
Opened by Hans (hackalittlebit) - Thursday, 19 December 2013, 02:39 GMT
Last edited by andythenorth (andythenorth) - Thursday, 24 August 2017, 19:11 GMT
Type Patch
Category Core
Status Closed
Assigned To No-one
Operating System All
Severity Low
Priority Normal
Reported Version trunk
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No


I am tinkering with the state machine for planes.
I had some difficulties understanding the code.
For my self I changed some var names to make the code more readable.
The changes give a better idea what the plane wants or is doing.
So why not share it. ;-)

Very little changes:
AircraftEventHandler_StartTakeOff ==> AircraftEventHandler_StartClimb
AircraftEventHandler_EndTakeOff ==> AircraftEventHandler_StartCruise
AircraftEventHandler_Flying ==> AircraftEventHandler_StartDescent
AircraftEventHandler_Landing ==> AircraftEventHandler_TouchDown
AircraftEventHandler_EndLanding ==> AircraftEventHandler_PlatformArrive


Apply the attached patch and things will fall in place.

Regards Hans

This task depends upon

Closed by  andythenorth (andythenorth)
Thursday, 24 August 2017, 19:11 GMT
Reason for closing:  Won't implement
Additional comments about closing:  Mass closure of patch tickets with no recent commentary. Goal is to reduce patch queue as an experiment to see if it aids faster reviewing and rejection/acceptance (it may not). If this offends you and the patch is maintained and compiles with current trunk, discuss with andythenorth in irc. (andythenorth has no ability to review patches but can re-open tickets). Thanks for the patch, sorry it didn't make it.
Comment by Alberth (Alberth) - Thursday, 19 December 2013, 12:35 GMT
Sorry, but this is unlikely to happen. Names that make sense for one make no sense for someone else, and it's pretty much impossible to get universal agreement on it.
If we add this, someone else might make a patch with other names that you don't like, in the worst case leading to rename wars.
It's good for the commit count, but otherwise mostly just a waste of time.

Secondly, we avoid doing changes for the sake of changes. It's however usually fine to re-organize names as a part of changing or extending functionality.

When I find names not making a lot of sense, I usually add doxygen documentation with a good explanation (in my view :) ), or keep a piece of paper with the meaning in my words. In time, I find that the names used in the code do get the meaning they have without needing that piece of paper :)
Comment by Hans (hackalittlebit) - Thursday, 19 December 2013, 14:32 GMT
Albert said "When I find names not making a lot of sense, I usually add doxygen documentation with a good explanation (in my view :) ), or keep a piece of paper with the meaning in my words. In time, I find that the names used in the code do get the meaning they have without needing that piece of paper :)"

I know, I just had a little hope you guys would swallow this one without to much work.:-)
I am busy with little patch to improve flying behaviour.
When I submit I will give full explanation.
Thanks Hans
Comment by Hans (hackalittlebit) - Sunday, 22 December 2013, 15:42 GMT
Hello hereby explanations about modifications:
Vars for helicopters were not changed.

in airport.h changed vars.

TAKEOFF => DEPART Depart was chosen because aircraft want to leave terminal to taxi to take-off runway.
STARTTAKEOFF => TAKEOFFROLL Plane is requesting to enter take-off runway. (Limiting the amount of times word TAKEOFF is used)
ENDTAKEOFF => TAKEOFF Moment aircraft is losing conact with the runway.

LANDING => DESCEND Plane is requesting free runway to make final aproach (e.g. descend till runway).
ENDLANDING => LANDING Point of touchdown and breaking.

In patch line 184 you can see type (%Vehicle is flying in the air.)
Some comments are improved.

event procs:

In sequential order
AircraftEventHandler_TakeOff => AircraftEventHandler_TakeOffRoll
AircraftEventHandler_StartTakeOff => AircraftEventHandler_TakeOffClimb
AircraftEventHandler_EndTakeOff => AircraftEventHandler_TopOfClimb (Official IAA abraviation is TOC)
Were Confusing

AircraftEventHandler_Flying => AircraftEventHandler_StartDescend (Called when permission to make final approach)
AircraftEventHandler_EndLanding => AircraftEventHandler_PlatformArrive

See all.png to see sequential calling of procs.

And have a look at mindbogeling plane speed on the runway. (Good for the tire factories)
Included setting png show plane settings
no aditional grfs used see included savegame

Hope to be of any help.
Regards Hans

Comment by Hans (hackalittlebit) - Friday, 27 December 2013, 23:07 GMT
Ok some more patches for airports.
The holding pattern is improved with this patch.
Entry points are added for most of the airplane airports.
So now a true holding pattern with speed limit is established over each airport.
See PDF.
yellow: entry points
blue: holding points
Helicopter setting were not touched.
1. Length of climb and descend , should this e equal for every airport?
Maybe city airports with short take off and landing capacity?
2. Intercontinental airports should have other holding pattern.
Holding and starting plane are crossing and does not look good.
I did not manage to use points 69 and 76 also for holding.
If I would be allowed to use those points a better holding pattern could be estabelished.
3. Overhead by introdusing more points.
4. If length between entrypoint and first holding point would be standard,
let say 10 tiles then that space could be used to decelerate the plane to holding speed.

Included are a zipfile that holds some games for testing.
The patches have to be applied in sequential order.


Comment by Hans (hackalittlebit) - Monday, 27 January 2014, 14:30 GMT
Ok a new try.

Please consider the above code null and void.
This time an attempt to improve airplane behavior.
I realized that controlling any code changes in the state machine is tedious and time consuming.
Therefore I made a tool that makes it much more easy to check the various points at airports.
Attached in the zipfile (airport_movement.7z) you will find a scalable vector graphics (SVG) representation of the airports in ottd.
Also included is Perl file that will generate that file.
The best program for opening the SVG file is Firefox. I tested on Opera also.
Moving with the mouse over a point will show you the relations.
When you toggle F12 in FF you get the console.
If you click on a point and hit c key, the information about that point is shown in the console.
Move the points with key's 'w, a, s, d'.

To make the Perl file work you have to change the path parameters.
Point $path_org to original airport_movement.h and $path_new to patched version.
I opted for an external JavaScript file to make it possible to generate the points file automatically with
an other program.
Maybe this SVG file should be included in the docs file.

The patches: (patchqueue.7z)

In general an attempt has been made to standardize plane behavior around airports.
This means equal approach distance, equal takeoff distance, the same setoff on landing and take of strips, equal holding height.
I saw that you tried to rotate airports.
The points should be in the middle or centre line of the tile eg 8 for tile 16 or 16 for tile 32. (7 or 15)
This would give the newgrf designers a chance to uniformisize the sprite offset.(It must have been a headache for them)
The offsets in this patch are not on the ideal place. (see SVG)
I tried to find a optimum and they are the same for each airport.
It is however relatively easy to shift the points all together (e.g. all airports) some pixels
in any direction.
To do this however would need the consensus including the grf designers.
Maybe it is possible to do a batch change for the offsets in each grf??? I don't know. Nor do I know if it possible.

The way I see aircraft behavior is that it has 11 different stages.
1 Taxi to runway. (fixed speed)
2 Accelerate. (increase speed)
3 Take off with steep climb. (increase speed, height)
4 Ascend till cruise altitude. (increase speed, height)
5 Cruise. (fixed speed, height)
6 Slow descent and prepare for holding.(reduce speed, height)
7 Holding till landing slot found. (fixed speed, height) (All Aircraft!!)
8 Steep descent and touch down. (fixed speed, reduce height)
9 Decelerate on landing strip. (reduce speed)
10 Taxi to terminal or hangar. (fixed speed)
11 Loading unloading. (zero speed)

The altitude thingy I took care of in my patches.
The way the things are in trunk now is that, if airplane takes off on mountain, it keeps a different
cruise altitude then from a plane that took of at sea level.(resulting in funny landings)
Cruise altitude is now equal regardless of take-off height.
For most airports I added extra points that are airport entry points.
Once reached the plane goes in a 'holding stage' until suitable landing strip is found.
Holding pattern above airports are all the same height regardless of altitude.
I took 184 as minimum height to avoid 911 effect. (makes me think that towns should not be allowed to build high-rise in front of landing strip)
This was fixed with the new var 'platformheight'.
Planes will slowly rise after take off and descend when coming closer to destination.

The acceleration is an other pain in the a..
I would like to see only one! :-)
I understand that this will be not so easy. (maybe another batch update in the various nwgrf's?)
I still have difficulties to understand that piece of code. :-(

So now some points of doubt and detail.
1. var 'platformheight' this I introduced to reduce the amount of iterations to determine platform height.
and for code readability.
Doubts that I have is the way I initialized it in 'int platformheight = MIN_FLIGHT_ALTITUDE'.
This was done in order to have a descent height when airport has invalid tile.

2. I changed 2 points from the intercontinental airport.
Point 69 and 76.
They are now the same as all other airports.(but have to be checked)
This gave two more point for the holding pattern.
I am not happy with the holding pattern at this airport because planes are crossing each other after take-off.

3. I used 'v->tick_counter & 1' to change altitude every other tick. (I am not sure if this is legal)

4. I introduced the var 'AMED_TAXI' value = 1 << 9.
I did not use it and can be taken out.
However it would be nice to change 0 into AMED_TAXI if you want i'll do it. just ask.


AMED_SLOWTURN I see is allways used when plane is flying.
Maybe it could be taken out and it should be standard behavior.
only when AMED_LAND is used it should be combined with AMED_EXACTPOS to point aircraft in the right direction.
What do you think of that?

As you can see I made some minor changes to the naming of some procedures and vars.
AircraftEventHandler_TakeOff and AircraftEventHandler_StartTakeOff are absolutely confusing.
and were changed into AircraftEventHandler_TakeOffRoll and AircraftEventHandler_TakeOff respectively.
I myself are not yet 100% happy with the proc names.
I think it should be something like trytoland, trytostart etc.(AircraftEventHandlerTry maybe?)

Please have a look at that again.

The patches have a short description included and were made with Mercurial.

Regards Hans