src/airport_movement.h
author richk
Tue, 24 Jul 2007 21:54:45 +0000
branchNewGRF_ports
changeset 6737 2b971fcc9a08
parent 6734 6e4db2fda167
child 6769 32594799d0bc
permissions -rw-r--r--
(svn r10682) [NewGRF_ports] -Feature: Added code to import FSM from within the newgrf, and allocate to compatible structures within Airport. Eventually, it will load to its own dedicated structures.
You can now build an aircraft in a hangar of the Commuter airport. Do not try to start the aircraft. Block handling is completely crippled atm.
opntitle.dat is disabled as existing state machines have been disabled, and it crashes. A load translator will be written later.
rb_airport2.grf updated.
/* $Id$ */

/** @file airport_movement.h Heart of the airports and their finite state machines */

#ifndef AIRPORT_MOVEMENT_H
#define AIRPORT_MOVEMENT_H

#include "airport_states.h"

// state machine input struct (from external file, etc.)
// Finite sTate mAchine --> FTA
struct AirportFTAbuildup {
	byte position; // the position that an airplane is at
	byte heading;  // the current orders (eg. TAKEOFF, HANGAR, ENDLANDING, etc.)
	uint64 block;  // the block this position is on on the airport (st->airport_flags)
	byte next;     // next position from this position
};

///////////////////////////////////////////////////////////////////////
/////*********Movement Positions on Airports********************///////

static AirportMovingData _airport_moving_data_dummy[] = {
	{    0,    0, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
	{    0,   96, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
	{   96,   96, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
	{   96,    0, AMED_NOSPDCLAMP | AMED_SLOWTURN,     {DIR_N} },
};

// Country Airfield (small) 4x3
static AirportMovingData _airport_moving_data_country[22] = {
	{   53,    3, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar
	{   53,   27, 0,                               {DIR_N} }, // 01 Taxi to right outside depot
	{   32,   23, AMED_EXACTPOS,                   {DIR_NW} }, // 02 Terminal 1
	{   10,   23, AMED_EXACTPOS,                   {DIR_NW} }, // 03 Terminal 2
	{   43,   37, 0,                               {DIR_N} }, // 04 Going towards terminal 2
	{   24,   37, 0,                               {DIR_N} }, // 05 Going towards terminal 2
	{   53,   37, 0,                               {DIR_N} }, // 06 Going for takeoff
	{   61,   40, AMED_EXACTPOS,                   {DIR_NE} }, // 07 Taxi to start of runway (takeoff)
	{    3,   40, AMED_NOSPDCLAMP,                 {DIR_N} }, // 08 Accelerate to end of runway
	{  -79,   40, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 09 Take off
	{  177,   40, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 10 Fly to landing position in air
	{   56,   40, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 11 Going down for land
	{    3,   40, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 12 Just landed, brake until end of runway
	{    7,   40, 0,                               {DIR_N} }, // 13 Just landed, turn around and taxi 1 square
	{   53,   40, 0,                               {DIR_N} }, // 14 Taxi from runway to crossing
	{  -31,  193, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 15 Fly around waiting for a landing spot (north-east)
	{    1,    1, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 16 Fly around waiting for a landing spot (north-west)
	{  257,    1, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 17 Fly around waiting for a landing spot (south-west)
	{  273,   49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 18 Fly around waiting for a landing spot (south)
	{   44,   37, AMED_HELI_RAISE,                 {DIR_N} }, // 19 Helicopter takeoff
	{   44,   40, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 20 In position above landing spot helicopter
	{   44,   40, AMED_HELI_LOWER,                 {DIR_N} }, // 21 Helicopter landing
};

// Commuter Airfield (small) 5x4
static AirportMovingData _airport_moving_data_commuter[37] = {
	{   69,    3, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar
	{   72,   22, 0,                               {DIR_N} }, // 01 Taxi to right outside depot
	{    8,   22, AMED_EXACTPOS,                   {DIR_SW} }, // 01 Taxi to right outside depot
	{   24,   36, AMED_EXACTPOS,                   {DIR_SE} }, // 03 Terminal 1
	{   40,   36, AMED_EXACTPOS,                   {DIR_SE} }, // 04 Terminal 2
	{   56,   36, AMED_EXACTPOS,                   {DIR_SE} }, // 05 Terminal 3
	{   40,    8, AMED_EXACTPOS,                   {DIR_NE} }, // 06 Helipad 1
	{   56,    8, AMED_EXACTPOS,                   {DIR_NE} }, // 07 Helipad 2
	{   24,   22, 0,                               {DIR_SW} }, // 08 Taxiing
	{   40,   22, 0,                               {DIR_SW} }, // 09 Taxiing
	{   56,   22, 0,                               {DIR_SW} }, // 10 Taxiing
	{   72,   40, 0,                               {DIR_SE} }, // 11 Airport OUTWAY
	{   72,   54, AMED_EXACTPOS,                   {DIR_NE} }, // 12 Accelerate to end of runway
	{    7,   54, AMED_NOSPDCLAMP,                 {DIR_N} }, // 13 Release control of runway, for smoother movement
	{    5,   54, AMED_NOSPDCLAMP,                 {DIR_N} }, // 14 End of runway
	{  -79,   54, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 15 Take off
	{  145,   54, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 16 Fly to landing position in air
	{   73,   54, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 17 Going down for land
	{    3,   54, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 18 Just landed, brake until end of runway
	{   12,   54, 0,                               {DIR_NW} }, // 19 Just landed, turn around and taxi
	{    8,   32, 0,                               {DIR_NW} }, // 20 Taxi from runway to crossing
	{  -31,  149, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 21 Fly around waiting for a landing spot (north-east)
	{    1,    6, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 22 Fly around waiting for a landing spot (north-west)
	{  193,    6, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 23 Fly around waiting for a landing spot (south-west)
	{  225,   81, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 24 Fly around waiting for a landing spot (south)
	// Helicopter
	{   80,    0, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 25 Bufferspace before helipad
	{   80,    0, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 26 Bufferspace before helipad
	{   32,    8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 27 Get in position for Helipad1
	{   48,    8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 28 Get in position for Helipad2
	{   32,    8, AMED_HELI_LOWER,                 {DIR_N} }, // 29 Land at Helipad1
	{   48,    8, AMED_HELI_LOWER,                 {DIR_N} }, // 30 Land at Helipad2
	{   32,    8, AMED_HELI_RAISE,                 {DIR_N} }, // 31 Takeoff Helipad1
	{   48,    8, AMED_HELI_RAISE,                 {DIR_N} }, // 32 Takeoff Helipad2
	{   64,   22, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 33 Go to position for Hangarentrance in air
	{   64,   22, AMED_HELI_LOWER,                 {DIR_N} }, // 34 Land in front of hangar
	{   40,    8, AMED_EXACTPOS,                   {DIR_N} }, // pre-helitakeoff helipad 1
	{   56,    8, AMED_EXACTPOS,                   {DIR_N} }, // pre-helitakeoff helipad 2
};

// City Airport (large) 6x6
static AirportMovingData _airport_moving_data_town[] = {
	{   85,    3, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar
	{   85,   27, 0,                               {DIR_N} }, // 01 Taxi to right outside depot
	{   26,   41, AMED_EXACTPOS,                   {DIR_SW} }, // 02 Terminal 1
	{   56,   20, AMED_EXACTPOS,                   {DIR_SE} }, // 03 Terminal 2
	{   38,    8, AMED_EXACTPOS,                   {DIR_SW} }, // 04 Terminal 3
	{   65,    6, 0,                               {DIR_N} }, // 05 Taxi to right in infront of terminal 2/3
	{   80,   27, 0,                               {DIR_N} }, // 06 Taxiway terminals 2-3
	{   44,   63, 0,                               {DIR_N} }, // 07 Taxi to Airport center
	{   58,   71, 0,                               {DIR_N} }, // 08 Towards takeoff
	{   72,   85, 0,                               {DIR_N} }, // 09 Taxi to runway (takeoff)
	{   89,   85, AMED_EXACTPOS,                   {DIR_NE} }, // 10 Taxi to start of runway (takeoff)
	{    3,   85, AMED_NOSPDCLAMP,                 {DIR_N} }, // 11 Accelerate to end of runway
	{  -79,   85, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 12 Take off
	{  177,   87, AMED_HOLD       | AMED_SLOWTURN, {DIR_N} }, // 13 Fly to landing position in air
	{   89,   87, AMED_HOLD       | AMED_LAND,     {DIR_N} }, // 14 Going down for land
	{   20,   87, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 15 Just landed, brake until end of runway
	{   20,   87, 0,                               {DIR_N} }, // 16 Just landed, turn around and taxi 1 square /* NOT USED */
	{   36,   71, 0,                               {DIR_N} }, // 17 Taxi from runway to crossing
	{  160,   87, AMED_HOLD       | AMED_SLOWTURN, {DIR_N} }, // 18 Fly around waiting for a landing spot (north-east)
	{  140,    1, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 19 Final approach fix
	{  257,    1, AMED_HOLD       | AMED_SLOWTURN, {DIR_N} }, // 20 Fly around waiting for a landing spot (south-west)
	{  273,   49, AMED_HOLD       | AMED_SLOWTURN, {DIR_N} }, // 21 Fly around waiting for a landing spot (south)
	{   44,   63, AMED_HELI_RAISE,                 {DIR_N} }, // 22 Helicopter takeoff
	{   28,   74, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 23 In position above landing spot helicopter
	{   28,   74, AMED_HELI_LOWER,                 {DIR_N} }, // 24 Helicopter landing
	{  145,    1, AMED_HOLD       | AMED_SLOWTURN, {DIR_N} }, // 25 Fly around waiting for a landing spot (north-west)
	{  -32,    1, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 26 Initial approach fix (north)
	{  300,  -48, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 27 Initial approach fix (south)
	{  140,  -48, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 28 Intermediadate Approach fix (south), IAF (west)
	{  -32,  120, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 29 Initial approach fix (east)
};

// Metropolitan Airport (metropolitan) - 2 runways
static AirportMovingData _airport_moving_data_metropolitan[27] = {
	{   85,    3, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar
	{   85,   27, 0,                               {DIR_N} }, // 01 Taxi to right outside depot
	{   26,   41, AMED_EXACTPOS,                   {DIR_SW} }, // 02 Terminal 1
	{   56,   20, AMED_EXACTPOS,                   {DIR_SE} }, // 03 Terminal 2
	{   38,    8, AMED_EXACTPOS,                   {DIR_SW} }, // 04 Terminal 3
	{   65,    6, 0,                               {DIR_N} }, // 05 Taxi to right in infront of terminal 2/3
	{   70,   33, 0,                               {DIR_N} }, // 06 Taxiway terminals 2-3
	{   44,   58, 0,                               {DIR_N} }, // 07 Taxi to Airport center
	{   72,   58, 0,                               {DIR_N} }, // 08 Towards takeoff
	{   72,   69, 0,                               {DIR_N} }, // 09 Taxi to runway (takeoff)
	{   89,   69, AMED_EXACTPOS,                   {DIR_NE} }, // 10 Taxi to start of runway (takeoff)
	{    3,   69, AMED_NOSPDCLAMP,                 {DIR_N} }, // 11 Accelerate to end of runway
	{  -79,   69, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 12 Take off
	{  177,   85, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 13 Fly to landing position in air
	{   89,   85, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 14 Going down for land
	{    3,   85, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 15 Just landed, brake until end of runway
	{   21,   85, 0,                               {DIR_N} }, // 16 Just landed, turn around and taxi 1 square
	{   21,   69, 0,                               {DIR_N} }, // 17 On Runway-out taxiing to In-Way
	{   21,   54, AMED_EXACTPOS,                   {DIR_SW} }, // 18 Taxi from runway to crossing
	{  -31,  193, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 19 Fly around waiting for a landing spot (north-east)
	{    1,    1, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 20 Fly around waiting for a landing spot (north-west)
	{  257,    1, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 21 Fly around waiting for a landing spot (south-west)
	{  273,   49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 22 Fly around waiting for a landing spot (south)
	{   44,   58, 0,                               {DIR_N} }, // 23 Helicopter takeoff spot on ground (to clear airport sooner)
	{   44,   63, AMED_HELI_RAISE,                 {DIR_N} }, // 24 Helicopter takeoff
	{   15,   54, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 25 Get in position above landing spot helicopter
	{   15,   54, AMED_HELI_LOWER,                 {DIR_N} }, // 26 Helicopter landing
};

// International Airport (international) - 2 runways, 6 terminals, dedicated helipod
static AirportMovingData _airport_moving_data_international[51] = {
	{    7,   55, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar 1
	{  100,   21, AMED_EXACTPOS,                   {DIR_SE} }, // 01 In Hangar 2
	{    7,   70, 0,                               {DIR_N} }, // 02 Taxi to right outside depot
	{  100,   36, 0,                               {DIR_N} }, // 03 Taxi to right outside depot
	{   38,   70, AMED_EXACTPOS,                   {DIR_SW} }, // 04 Terminal 1
	{   38,   54, AMED_EXACTPOS,                   {DIR_SW} }, // 05 Terminal 2
	{   38,   38, AMED_EXACTPOS,                   {DIR_SW} }, // 06 Terminal 3
	{   70,   70, AMED_EXACTPOS,                   {DIR_NE} }, // 07 Terminal 4
	{   70,   54, AMED_EXACTPOS,                   {DIR_NE} }, // 08 Terminal 5
	{   70,   38, AMED_EXACTPOS,                   {DIR_NE} }, // 09 Terminal 6
	{  104,   71, AMED_EXACTPOS,                   {DIR_NE} }, // 10 Helipad 1
	{  104,   55, AMED_EXACTPOS,                   {DIR_NE} }, // 11 Helipad 2
	{   22,   87, 0,                               {DIR_N} }, // 12 Towards Terminals 4/5/6, Helipad 1/2
	{   60,   87, 0,                               {DIR_N} }, // 13 Towards Terminals 4/5/6, Helipad 1/2
	{   66,   87, 0,                               {DIR_N} }, // 14 Towards Terminals 4/5/6, Helipad 1/2
	{   86,   87, AMED_EXACTPOS,                   {DIR_NW} }, // 15 Towards Terminals 4/5/6, Helipad 1/2
	{   86,   70, 0,                               {DIR_N} }, // 16 In Front of Terminal 4 / Helipad 1
	{   86,   54, 0,                               {DIR_N} }, // 17 In Front of Terminal 5 / Helipad 2
	{   86,   38, 0,                               {DIR_N} }, // 18 In Front of Terminal 6
	{   86,   22, 0,                               {DIR_N} }, // 19 Towards Terminals Takeoff (Taxiway)
	{   66,   22, 0,                               {DIR_N} }, // 20 Towards Terminals Takeoff (Taxiway)
	{   60,   22, 0,                               {DIR_N} }, // 21 Towards Terminals Takeoff (Taxiway)
	{   38,   22, 0,                               {DIR_N} }, // 22 Towards Terminals Takeoff (Taxiway)
	{   22,   70, 0,                               {DIR_N} }, // 23 In Front of Terminal 1
	{   22,   58, 0,                               {DIR_N} }, // 24 In Front of Terminal 2
	{   22,   38, 0,                               {DIR_N} }, // 25 In Front of Terminal 3
	{   22,   22, AMED_EXACTPOS,                   {DIR_NW} }, // 26 Going for Takeoff
	{   22,    6, 0,                               {DIR_N} }, // 27 On Runway-out, prepare for takeoff
	{    3,    6, AMED_EXACTPOS,                   {DIR_SW} }, // 28 Accelerate to end of runway
	{   60,    6, AMED_NOSPDCLAMP,                 {DIR_N} }, // 29 Release control of runway, for smoother movement
	{  105,    6, AMED_NOSPDCLAMP,                 {DIR_N} }, // 30 End of runway
	{  190,    6, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 31 Take off
	{  193,  104, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 32 Fly to landing position in air
	{  105,  104, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 33 Going down for land
	{    8,  104, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 34 Just landed, brake until end of runway
	{    7,  104, AMED_SLOWTURN,                   {DIR_N} }, // 35 Just landed, turn around and taxi 1 square
	{    7,   84, 0,                               {DIR_N} }, // 36 Taxi from runway to crossing
	{  -31,  209, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 37 Fly around waiting for a landing spot (north-east)
	{    1,    6, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 38 Fly around waiting for a landing spot (north-west)
	{  273,    6, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 39 Fly around waiting for a landing spot (south-west)
	{  305,   81, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 40 Fly around waiting for a landing spot (south)
	// Helicopter
	{  128,   80, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 41 Bufferspace before helipad
	{  128,   80, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 42 Bufferspace before helipad
	{   96,   71, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 43 Get in position for Helipad1
	{   96,   55, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 44 Get in position for Helipad2
	{   96,   71, AMED_HELI_LOWER,                 {DIR_N} }, // 45 Land at Helipad1
	{   96,   55, AMED_HELI_LOWER,                 {DIR_N} }, // 46 Land at Helipad2
	{  104,   71, AMED_HELI_RAISE,                 {DIR_N} }, // 47 Takeoff Helipad1
	{  104,   55, AMED_HELI_RAISE,                 {DIR_N} }, // 48 Takeoff Helipad2
	{  104,   32, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 49 Go to position for Hangarentrance in air
	{  104,   32, AMED_HELI_LOWER,                 {DIR_N} }, // 50 Land in HANGAR2_AREA to go to hangar
};

// Intercontinental Airport - 4 runways, 8 terminals, 2 dedicated helipads
static AirportMovingData _airport_moving_data_intercontinental[77] = {
	{    7,   87, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar 1
	{  135,   72, AMED_EXACTPOS,                   {DIR_SE} }, // 01 In Hangar 2
	{    7,  104, 0,                               {DIR_N} }, // 02 Taxi to right outside depot 1
	{  135,   88, 0,                               {DIR_N} }, // 03 Taxi to right outside depot 2
	{   56,  120, AMED_EXACTPOS,                   {DIR_W} }, // 04 Terminal 1
	{   56,  104, AMED_EXACTPOS,                   {DIR_SW} }, // 05 Terminal 2
	{   56,   88, AMED_EXACTPOS,                   {DIR_SW} }, // 06 Terminal 3
	{   56,   72, AMED_EXACTPOS,                   {DIR_SW} }, // 07 Terminal 4
	{   88,  120, AMED_EXACTPOS,                   {DIR_N} }, // 08 Terminal 5
	{   88,  104, AMED_EXACTPOS,                   {DIR_NE} }, // 09 Terminal 6
	{   88,   88, AMED_EXACTPOS,                   {DIR_NE} }, // 10 Terminal 7
	{   88,   72, AMED_EXACTPOS,                   {DIR_NE} }, // 11 Terminal 8
	{   88,   56, AMED_EXACTPOS,                   {DIR_SE} }, // 12 Helipad 1
	{   72,   56, AMED_EXACTPOS,                   {DIR_NE} }, // 13 Helipad 2
	{   40,  136, 0,                               {DIR_N} }, // 14 Term group 2 enter 1 a
	{   56,  136, 0,                               {DIR_N} }, // 15 Term group 2 enter 1 b
	{   88,  136, 0,                               {DIR_N} }, // 16 Term group 2 enter 2 a
	{  104,  136, 0,                               {DIR_N} }, // 17 Term group 2 enter 2 b
	{  104,  120, 0,                               {DIR_N} }, // 18 Term group 2 - opp term 5
	{  104,  104, 0,                               {DIR_N} }, // 19 Term group 2 - opp term 6 & exit2
	{  104,   88, 0,                               {DIR_N} }, // 20 Term group 2 - opp term 7 & hangar area 2
	{  104,   72, 0,                               {DIR_N} }, // 21 Term group 2 - opp term 8
	{  104,   56, 0,                               {DIR_N} }, // 22 Taxi Term group 2 exit a
	{  104,   40, 0,                               {DIR_N} }, // 23 Taxi Term group 2 exit b
	{   56,   40, 0,                               {DIR_N} }, // 24 Term group 2 exit 2a
	{   40,   40, 0,                               {DIR_N} }, // 25 Term group 2 exit 2b
	{   40,  120, 0,                               {DIR_N} }, // 26 Term group 1 - opp term 1
	{   40,  104, 0,                               {DIR_N} }, // 27 Term group 1 - opp term 2 & hangar area 1
	{   40,   88, 0,                               {DIR_N} }, // 28 Term group 1 - opp term 3
	{   40,   72, 0,                               {DIR_N} }, // 29 Term group 1 - opp term 4
	{   18,   72, 0,                               {DIR_NW} }, // 30 Outway 1
	{    8,   40, 0,                               {DIR_NW} }, // 31 Airport OUTWAY
	{    8,   24, AMED_EXACTPOS,                   {DIR_SW} }, // 32 Accelerate to end of runway
	{  119,   24, AMED_NOSPDCLAMP,                 {DIR_N} }, // 33 Release control of runway, for smoother movement
	{  117,   24, AMED_NOSPDCLAMP,                 {DIR_N} }, // 34 End of runway
	{  197,   24, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 35 Take off
	{  254,   84, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 36 Flying to landing position in air
	{  117,  168, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 37 Going down for land
	{    3,  168, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 38 Just landed, brake until end of runway
	{    8,  168, 0,                               {DIR_N} }, // 39 Just landed, turn around and taxi
	{    8,  144, 0,                               {DIR_NW} }, // 40 Taxi from runway
	{    8,  128, 0,                               {DIR_NW} }, // 41 Taxi from runway
	{    8,  120, AMED_EXACTPOS,                   {DIR_SW} }, // 42 Airport entrance
	{   56,  344, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 43 Fly around waiting for a landing spot (north-east)
	{ -200,   88, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 44 Fly around waiting for a landing spot (north-west)
	{   56, -168, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 45 Fly around waiting for a landing spot (south-west)
	{  312,   88, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 46 Fly around waiting for a landing spot (south)
	// Helicopter
	{   96,   40, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 47 Bufferspace before helipad
	{   96,   40, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 48 Bufferspace before helipad
	{   82,   54, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 49 Get in position for Helipad1
	{   64,   56, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 50 Get in position for Helipad2
	{   81,   55, AMED_HELI_LOWER,                 {DIR_N} }, // 51 Land at Helipad1
	{   64,   56, AMED_HELI_LOWER,                 {DIR_N} }, // 52 Land at Helipad2
	{   80,   56, AMED_HELI_RAISE,                 {DIR_N} }, // 53 Takeoff Helipad1
	{   64,   56, AMED_HELI_RAISE,                 {DIR_N} }, // 54 Takeoff Helipad2
	{  136,   96, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 55 Go to position for Hangarentrance in air
	{  136,   96, AMED_HELI_LOWER,                 {DIR_N} }, // 56 Land in front of hangar2
	{  126,  104, 0,                               {DIR_SE} }, // 57 Outway 2
	{  136,  136, 0,                               {DIR_NE} }, // 58 Airport OUTWAY 2
	{  136,  152, AMED_EXACTPOS,                   {DIR_NE} }, // 59 Accelerate to end of runway2
	{   16,  152, AMED_NOSPDCLAMP,                 {DIR_N} }, // 60 Release control of runway2, for smoother movement
	{   20,  152, AMED_NOSPDCLAMP,                 {DIR_N} }, // 61 End of runway2
	{  -56,  152, AMED_NOSPDCLAMP | AMED_TAKEOFF,  {DIR_N} }, // 62 Take off2
	{   24,    8, AMED_NOSPDCLAMP | AMED_LAND,     {DIR_N} }, // 63 Going down for land2
	{  136,    8, AMED_NOSPDCLAMP | AMED_BRAKE,    {DIR_N} }, // 64 Just landed, brake until end of runway2in
	{  136,    8, 0,                               {DIR_N} }, // 65 Just landed, turn around and taxi
	{  136,   24, 0,                               {DIR_SE} }, // 66 Taxi from runway 2in
	{  136,   40, 0,                               {DIR_SE} }, // 67 Taxi from runway 2in
	{  136,   56, AMED_EXACTPOS,                   {DIR_NE} }, // 68 Airport entrance2
	{  -56,    8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 69 Fly to landing position in air2
	{   88,   40, 0,                               {DIR_N} }, // 70 Taxi Term group 2 exit - opp heli1
	{   72,   40, 0,                               {DIR_N} }, // 71 Taxi Term group 2 exit - opp heli2
	{   88,   57, AMED_EXACTPOS,                   {DIR_SE} }, // 72 pre-helitakeoff helipad 1
	{   71,   56, AMED_EXACTPOS,                   {DIR_NE} }, // 73 pre-helitakeoff helipad 2
	{    8,  120, AMED_HELI_RAISE,                 {DIR_N} }, // 74 Helitakeoff outside depot 1
	{  136,  104, AMED_HELI_RAISE,                 {DIR_N} }, // 75 Helitakeoff outside depot 2
	{  197,  168, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 76 Fly to landing position in air1
};


// Heliport (heliport)
static AirportMovingData _airport_moving_data_heliport[9] = {
	{    5,    9, AMED_EXACTPOS,                   {DIR_NE} }, // 0 - At heliport terminal
	{    2,    9, AMED_HELI_RAISE,                 {DIR_N} }, // 1 - Take off (play sound)
	{   -3,    9, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 2 - In position above landing spot helicopter
	{   -3,    9, AMED_HELI_LOWER,                 {DIR_N} }, // 3 - Land
	{    2,    9, 0,                               {DIR_N} }, // 4 - Goto terminal on ground
	{  -31,   59, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 5 - Circle #1 (north-east)
	{  -31,  -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 6 - Circle #2 (north-west)
	{   49,  -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 7 - Circle #3 (south-west)
	{   70,    9, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 8 - Circle #4 (south)
};

// HeliDepot 2x2 (heliport)
static AirportMovingData _airport_moving_data_helidepot[18] = {
	{   24,    4, AMED_EXACTPOS,                   {DIR_NE} }, // 0 - At depot
	{   24,   28, 0,                               {DIR_N} }, // 1 Taxi to right outside depot
	{    5,   38, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 2 Flying
	{  -15,  -15, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 3 - Circle #1 (north-east)
	{  -15,  -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 4 - Circle #2 (north-west)
	{   49,  -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 5 - Circle #3 (south-west)
	{   49,  -15, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 6 - Circle #4 (south-east)
	{    8,   32, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_NW} }, // 7 - PreHelipad
	{    8,   32, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_NW} }, // 8 - Helipad
	{    8,   16, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_NW} }, // 9 - Land
	{    8,   16, AMED_HELI_LOWER,                 {DIR_NW} }, // 10 - Land
	{    8,   24, AMED_HELI_RAISE,                 {DIR_N} }, // 11 - Take off (play sound)
	{   32,   24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_NW} }, // 12 Air to above hangar area
	{   32,   24, AMED_HELI_LOWER,                 {DIR_NW} }, // 13 Taxi to right outside depot
	{    8,   24, AMED_EXACTPOS,                   {DIR_NW} }, // 14 - on helipad1
	{   24,   28, AMED_HELI_RAISE,                 {DIR_N} }, // 15 Takeoff right outside depot
	{    8,   24, AMED_HELI_RAISE,                 {DIR_SW} }, // 16 - Take off (play sound)
	{    8,   24, AMED_SLOWTURN | AMED_EXACTPOS,   {DIR_E} }, // 17 - turn on helipad1 for takeoff
};

// HeliDepot 2x2 (heliport)
static AirportMovingData _airport_moving_data_helistation[33] = {
	{    8,    3, AMED_EXACTPOS,                   {DIR_SE} }, // 00 In Hangar2
	{    8,   22, 0,                               {DIR_N} }, // 01 outside hangar 2
	{  116,   24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 02 Fly to landing position in air
	{   14,   22, AMED_HELI_RAISE,                 {DIR_N} }, // 03 Helitakeoff outside hangar1(play sound)
	{   24,   22, 0,                               {DIR_N} }, // 04 taxiing
	{   40,   22, 0,                               {DIR_N} }, // 05 taxiing
	{   40,    8, AMED_EXACTPOS,                   {DIR_NE} }, // 06 Helipad 1
	{   56,    8, AMED_EXACTPOS,                   {DIR_NE} }, // 07 Helipad 2
	{   56,   24, AMED_EXACTPOS,                   {DIR_NE} }, // 08 Helipad 3
	{   40,    8, AMED_EXACTPOS,                   {DIR_N} }, // 09 pre-helitakeoff helipad 1
	{   56,    8, AMED_EXACTPOS,                   {DIR_N} }, // 10 pre-helitakeoff helipad 2
	{   56,   24, AMED_EXACTPOS,                   {DIR_N} }, // 11 pre-helitakeoff helipad 3
	{   32,    8, AMED_HELI_RAISE,                 {DIR_N} }, // 12 Takeoff Helipad1
	{   48,    8, AMED_HELI_RAISE,                 {DIR_N} }, // 13 Takeoff Helipad2
	{   48,   24, AMED_HELI_RAISE,                 {DIR_N} }, // 14 Takeoff Helipad3
	{   84,   24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 15 Bufferspace before helipad
	{   68,   24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 16 Bufferspace before helipad
	{   32,    8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 17 Get in position for Helipad1
	{   48,    8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 18 Get in position for Helipad2
	{   48,   24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_NE} }, // 19 Get in position for Helipad3
	{   40,    8, AMED_HELI_LOWER,                 {DIR_N} }, // 20 Land at Helipad1
	{   48,    8, AMED_HELI_LOWER,                 {DIR_N} }, // 21 Land at Helipad2
	{   48,   24, AMED_HELI_LOWER,                 {DIR_N} }, // 22 Land at Helipad3
	{    0,   22, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 23 Go to position for Hangarentrance in air
	{    0,   22, AMED_HELI_LOWER,                 {DIR_N} }, // 24 Land in front of hangar
	{  148,   -8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 25 Fly around waiting for a landing spot (south-east)
	{  148,    8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 26 Fly around waiting for a landing spot (south-west)
	{  132,   24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 27 Fly around waiting for a landing spot (south-west)
	{  100,   24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 28 Fly around waiting for a landing spot (north-east)
	{   84,    8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 29 Fly around waiting for a landing spot (south-east)
	{   84,   -8, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 30 Fly around waiting for a landing spot (south-west)
	{  100,  -24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 31 Fly around waiting for a landing spot (north-west)
	{  132,  -24, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 32 Fly around waiting for a landing spot (north-east)
};

// Oilrig
static AirportMovingData _airport_moving_data_oilrig[9] = {
	{   31,    9, AMED_EXACTPOS,                   {DIR_NE} }, // 0 - At oilrig terminal
	{   28,    9, AMED_HELI_RAISE,                 {DIR_N} }, // 1 - Take off (play sound)
	{   23,    9, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 2 - In position above landing spot helicopter
	{   23,    9, AMED_HELI_LOWER,                 {DIR_N} }, // 3 - Land
	{   28,    9, 0,                               {DIR_N} }, // 4 - Goto terminal on ground
	{  -31,   69, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 5 - circle #1 (north-east)
	{  -31,  -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 6 - circle #2 (north-west)
	{   69,  -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 7 - circle #3 (south-west)
	{   69,    9, AMED_NOSPDCLAMP | AMED_SLOWTURN, {DIR_N} }, // 8 - circle #4 (south)
};

///////////////////////////////////////////////////////////////////////
/////**********Movement Machine on Airports*********************///////
static byte _airport_entries_dummy[] = {0, 1, 2, 3};
static AirportFTAbuildup _airport_fta_dummy[] = {
	{ 0, 0, 0, 3},
	{ 1, 0, 0, 0},
	{ 2, 0, 0, 1},
	{ 3, 0, 0, 2},
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

/* First element of terminals array tells us how many depots there are (to know size of array)
 * this may be changed later when airports are moved to external file  */
static TileIndexDiffC _airport_depots_country[] = {{3, 0}};
static byte _airport_terminal_country[] = {1, 2};
static byte _airport_entries_country[] = {16, 16, 16, 16};
static AirportFTAbuildup _airport_fta_country[] = {
	{  0, HANGAR, NOTHING_block, 1 },
	{  1, 255, AIRPORT_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM1, TERM1_block, 2 }, { 1, TERM2, 0, 4 }, { 1, HELITAKEOFF, 0, 19 }, { 1, 0, 0, 6 },
	{  2, TERM1, TERM1_block, 1 },
	{  3, TERM2, TERM2_block, 5 },
	{  4, 255, AIRPORT_BUSY_block, 0 }, { 4, TERM2, 0, 5 }, { 4, HANGAR, 0, 1 }, { 4, TAKEOFF, 0, 6 }, { 4, HELITAKEOFF, 0, 1 },
	{  5, 255, AIRPORT_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, 0, 0, 4 },
	{  6, 0, AIRPORT_BUSY_block, 7 },
	// takeoff
	{  7, TAKEOFF, AIRPORT_BUSY_block, 8 },
	{  8, STARTTAKEOFF, NOTHING_block, 9 },
	{  9, ENDTAKEOFF, NOTHING_block, 0 },
	// landing
	{ 10, FLYING, NOTHING_block, 15 }, { 10, LANDING, 0, 11 }, { 10, HELILANDING, 0, 20 },
	{ 11, LANDING, AIRPORT_BUSY_block, 12 },
	{ 12, 0, AIRPORT_BUSY_block, 13 },
	{ 13, ENDLANDING, AIRPORT_BUSY_block, 14 }, { 13, TERM2, 0, 5 }, { 13, 0, 0, 14 },
	{ 14, 0, AIRPORT_BUSY_block, 1 },
	// In air
	{ 15, 0, NOTHING_block, 16 },
	{ 16, 0, NOTHING_block, 17 },
	{ 17, 0, NOTHING_block, 18 },
	{ 18, 0, NOTHING_block, 10 },
	{ 19, HELITAKEOFF, NOTHING_block, 0 },
	{ 20, HELILANDING, AIRPORT_BUSY_block, 21 },
	{ 21, HELIENDLANDING, AIRPORT_BUSY_block, 1 },
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

static TileIndexDiffC _airport_depots_commuter[] = { { 4, 0 } };
static byte _airport_terminal_commuter[] = { 1, 3 };
static byte _airport_helipad_commuter[] = { 1, 2 };
static byte _airport_entries_commuter[] = {21, 21, 21, 21};
static AirportFTAbuildup _airport_fta_commuter[] = {
	{  0, HANGAR, NOTHING_block, 1 }, { 0, HELITAKEOFF, HELIPAD2_block, 1 }, { 0, 0, 0, 1 },
	{  1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TAKEOFF, 0, 11 }, { 1, TERM1, TAXIWAY_BUSY_block, 10 }, { 1, TERM2, TAXIWAY_BUSY_block, 10 }, { 1, TERM3, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD1, TAXIWAY_BUSY_block, 10 }, { 1, HELIPAD2, TAXIWAY_BUSY_block, 10 }, { 1, HELITAKEOFF, TAXIWAY_BUSY_block, 10 }, { 1, 0, 0, 0 },
	{  2, 255, AIRPORT_ENTRANCE_block, 2 }, { 2, HANGAR, 0, 8 }, { 2, TERM1, 0, 8 }, { 2, TERM2, 0, 8 }, { 2, TERM3, 0, 8 }, { 2, HELIPAD1, 0, 8 }, { 2, HELIPAD2, 0, 8 }, { 2, HELITAKEOFF, 0, 8 }, { 2, 0, 0, 2 },
	{  3, TERM1, TERM1_block, 8 }, { 3, HANGAR, 0, 8 }, { 3, TAKEOFF, 0, 8 }, { 3, 0, 0, 3 },
	{  4, TERM2, TERM2_block, 9 }, { 4, HANGAR, 0, 9 }, { 4, TAKEOFF, 0, 9 }, { 4, 0, 0, 4 },
	{  5, TERM3, TERM3_block, 10 }, { 5, HANGAR, 0, 10 }, { 5, TAKEOFF, 0, 10 }, { 5, 0, 0, 5 },
	{  6, HELIPAD1, HELIPAD1_block, 6 }, { 6, HANGAR, TAXIWAY_BUSY_block, 9 }, { 6, HELITAKEOFF, 0, 35 },
	{  7, HELIPAD2, HELIPAD2_block, 7 }, { 7, HANGAR, TAXIWAY_BUSY_block, 10 }, { 7, HELITAKEOFF, 0, 36 },
	{  8, 255, TAXIWAY_BUSY_block, 8 }, { 8, TAKEOFF, TAXIWAY_BUSY_block, 9 }, { 8, HANGAR, TAXIWAY_BUSY_block, 9 }, { 8, TERM1, TERM1_block, 3 }, { 8, 0, TAXIWAY_BUSY_block, 9 },
	{  9, 255, TAXIWAY_BUSY_block, 9 }, { 9, TAKEOFF, TAXIWAY_BUSY_block, 10 }, { 9, HANGAR, TAXIWAY_BUSY_block, 10 }, { 9, TERM2, TERM2_block, 4 }, { 9, HELIPAD1, HELIPAD1_block, 6 }, { 9, HELITAKEOFF, HELIPAD1_block, 6 }, { 9, TERM1, TAXIWAY_BUSY_block, 8 }, { 9, 0, TAXIWAY_BUSY_block, 10 },
	{ 10, 255, TAXIWAY_BUSY_block, 10 }, { 10, TERM3, TERM3_block, 5 }, { 10, HELIPAD1, 0, 9 }, { 10, HELIPAD2, HELIPAD2_block, 7 }, { 10, HELITAKEOFF, HELIPAD2_block, 7 }, { 10, TAKEOFF, TAXIWAY_BUSY_block, 1 }, { 10, HANGAR, TAXIWAY_BUSY_block, 1 }, { 10, 0, TAXIWAY_BUSY_block, 9 },
	{ 11, 0, OUT_WAY_block, 12 },
	// takeoff
	{ 12, TAKEOFF, RUNWAY_IN_OUT_block, 13 },
	{ 13, 0, RUNWAY_IN_OUT_block, 14 },
	{ 14, STARTTAKEOFF, RUNWAY_IN_OUT_block, 15 },
	{ 15, ENDTAKEOFF, NOTHING_block, 0 },
	// landing
	{ 16, FLYING, NOTHING_block, 21 }, { 16, LANDING, IN_WAY_block, 17 }, { 16, HELILANDING, 0, 25 },
	{ 17, LANDING, RUNWAY_IN_OUT_block, 18 },
	{ 18, 0, RUNWAY_IN_OUT_block, 19 },
	{ 19, 0, RUNWAY_IN_OUT_block, 20 },
	{ 20, ENDLANDING, IN_WAY_block, 2 },
	// In Air
	{ 21, 0, NOTHING_block, 22 },
	{ 22, 0, NOTHING_block, 23 },
	{ 23, 0, NOTHING_block, 24 },
	{ 24, 0, NOTHING_block, 16 },
	// Helicopter -- stay in air in special place as a buffer to choose from helipads
	{ 25, HELILANDING, PRE_HELIPAD_block, 26 },
	{ 26, HELIENDLANDING, PRE_HELIPAD_block, 26 }, { 26, HELIPAD1, 0, 27 }, { 26, HELIPAD2, 0, 28 }, { 26, HANGAR, 0, 33 },
	{ 27, 0, NOTHING_block, 29 }, //helipad1 approach
	{ 28, 0, NOTHING_block, 30 },
	// landing
	{ 29, 255, NOTHING_block, 0 }, { 29, HELIPAD1, HELIPAD1_block, 6 },
	{ 30, 255, NOTHING_block, 0 }, { 30, HELIPAD2, HELIPAD2_block, 7 },
	// Helicopter -- takeoff
	{ 31, HELITAKEOFF, NOTHING_block, 0 },
	{ 32, HELITAKEOFF, NOTHING_block, 0 },
	{ 33, 0, TAXIWAY_BUSY_block, 34 }, // need to go to hangar when waiting in air
	{ 34, 0, TAXIWAY_BUSY_block, 1 },
	{ 35, 0, HELIPAD1_block, 31 },
	{ 36, 0, HELIPAD2_block, 32 },
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

static TileIndexDiffC _airport_depots_city[] = { { 5, 0 } };
static byte _airport_terminal_city[] = { 1, 3 };
static byte _airport_entries_city[] = {26, 29, 27, 28};
static AirportFTAbuildup _airport_fta_city[] = {
	{  0, HANGAR, NOTHING_block, 1 }, { 0, TAKEOFF, OUT_WAY_block, 1 }, { 0, 0, 0, 1 },
	{  1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, 0, 0, 7 }, // for all else, go to 7
	{  2, TERM1, TERM1_block, 7 }, { 2, TAKEOFF, OUT_WAY_block, 7 }, { 2, 0, 0, 7 },
	{  3, TERM2, TERM2_block, 5 }, { 3, TAKEOFF, OUT_WAY_block, 5 }, { 3, 0, 0, 5 },
	{  4, TERM3, TERM3_block, 5 }, { 4, TAKEOFF, OUT_WAY_block, 5 }, { 4, 0, 0, 5 },
	{  5, 255, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, 0, 0, 6 },
	{  6, 255, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, 0, 5 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, 0, 0, 7 },
	{  7, 255, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, OUT_WAY_block, 8 }, { 7, HELITAKEOFF, 0, 22 }, { 7, HANGAR, 0, 1 }, { 7, 0, 0, 6 },
	{  8, 0, OUT_WAY_block, 9 },
	{  9, 0, RUNWAY_IN_OUT_block, 10 },
	// takeoff
	{ 10, TAKEOFF, RUNWAY_IN_OUT_block, 11 },
	{ 11, STARTTAKEOFF, NOTHING_block, 12 },
	{ 12, ENDTAKEOFF, NOTHING_block, 0 },
	// landing
	{ 13, FLYING, NOTHING_block, 18 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 23 },
	{ 14, LANDING, RUNWAY_IN_OUT_block, 15 },
	{ 15, 0, RUNWAY_IN_OUT_block, 17 },
	{ 16, 0, RUNWAY_IN_OUT_block, 17 }, /* not used, left for compatibility */
	{ 17, ENDLANDING, IN_WAY_block, 7 },
	// In Air
	{ 18, 0, NOTHING_block, 25 },
	{ 19, 0, NOTHING_block, 20 },
	{ 20, 0, NOTHING_block, 21 },
	{ 21, 0, NOTHING_block, 13 },
	// helicopter
	{ 22, HELITAKEOFF, NOTHING_block, 0 },
	{ 23, HELILANDING, IN_WAY_block, 24 },
	{ 24, HELIENDLANDING, IN_WAY_block, 17 },
	{ 25, 0, NOTHING_block, 20},
	{ 26, 0, NOTHING_block, 19},
	{ 27, 0, NOTHING_block, 28},
	{ 28, 0, NOTHING_block, 19},
	{ 29, 0, NOTHING_block, 26},
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

static TileIndexDiffC _airport_depots_metropolitan[] = { { 5, 0 } };
static byte _airport_terminal_metropolitan[] = { 1, 3 };
static byte _airport_entries_metropolitan[] = {20, 20, 20, 20};
static AirportFTAbuildup _airport_fta_metropolitan[] = {
	{  0, HANGAR, NOTHING_block, 1 },
	{  1, 255, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, 0, 0, 7 }, // for all else, go to 7
	{  2, TERM1, TERM1_block, 7 },
	{  3, TERM2, TERM2_block, 5 },
	{  4, TERM3, TERM3_block, 5 },
	{  5, 255, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, 0, 0, 6 },
	{  6, 255, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, 0, 5 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, 0, 0, 7 },
	{  7, 255, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, 0, 8 }, { 7, HELITAKEOFF, 0, 23 }, { 7, HANGAR, 0, 1 }, { 7, 0, 0, 6 },
	{  8, 0, OUT_WAY_block, 9 },
	{  9, 0, RUNWAY_OUT_block, 10 },
	// takeoff
	{ 10, TAKEOFF, RUNWAY_OUT_block, 11 },
	{ 11, STARTTAKEOFF, NOTHING_block, 12 },
	{ 12, ENDTAKEOFF, NOTHING_block, 0 },
	// landing
	{ 13, FLYING, NOTHING_block, 19 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 25 },
	{ 14, LANDING, RUNWAY_IN_block, 15 },
	{ 15, 0, RUNWAY_IN_block, 16 },
	{ 16, 255, RUNWAY_IN_block, 0 }, { 16, ENDLANDING, IN_WAY_block, 17 },
	{ 17, 255, RUNWAY_OUT_block, 0 }, { 17, ENDLANDING, IN_WAY_block, 18 },
	{ 18, ENDLANDING, IN_WAY_block, 7 },
	// In Air
	{ 19, 0, NOTHING_block, 20 },
	{ 20, 0, NOTHING_block, 21 },
	{ 21, 0, NOTHING_block, 22 },
	{ 22, 0, NOTHING_block, 13 },
	// helicopter
	{ 23, 0, NOTHING_block, 24 },
	{ 24, HELITAKEOFF, NOTHING_block, 0 },
	{ 25, HELILANDING, IN_WAY_block, 26 },
	{ 26, HELIENDLANDING, IN_WAY_block, 18 },
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

static TileIndexDiffC _airport_depots_international[] = { { 0, 3 }, { 6, 1 } };
static byte _airport_terminal_international[] = { 2, 3, 3 };
static byte _airport_helipad_international[] = { 1, 2 };
static byte _airport_entries_international[] = { 37, 37, 37, 37 };
static AirportFTAbuildup _airport_fta_international[] = {
	{  0, HANGAR, NOTHING_block, 2 }, { 0, 255, TERM_GROUP1_block, 0 }, { 0, 255, TERM_GROUP2_ENTER1_block, 1 }, { 0, HELITAKEOFF, HELIPAD1_block, 2 }, { 0, 0, 0, 2 },
	{  1, HANGAR, NOTHING_block, 3 }, { 1, 255, HANGAR2_AREA_block, 1 }, { 1, HELITAKEOFF, HELIPAD2_block, 3 }, { 1, 0, 0, 3 },
	{  2, 255, AIRPORT_ENTRANCE_block, 0 }, { 2, HANGAR, 0, 0 }, { 2, TERM4, 0, 12 }, { 2, TERM5, 0, 12 }, { 2, TERM6, 0, 12 }, { 2, HELIPAD1, 0, 12 }, { 2, HELIPAD2, 0, 12 }, { 2, HELITAKEOFF, 0, 12 }, { 2, 0, 0, 23 },
	{  3, 255, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, 0, 0, 18 },
	{  4, TERM1, TERM1_block, 23 }, { 4, HANGAR, AIRPORT_ENTRANCE_block, 23 }, { 4, 0, 0, 23 },
	{  5, TERM2, TERM2_block, 24 }, { 5, HANGAR, AIRPORT_ENTRANCE_block, 24 }, { 5, 0, 0, 24 },
	{  6, TERM3, TERM3_block, 25 }, { 6, HANGAR, AIRPORT_ENTRANCE_block, 25 }, { 6, 0, 0, 25 },
	{  7, TERM4, TERM4_block, 16 }, { 7, HANGAR, HANGAR2_AREA_block, 16 }, { 7, 0, 0, 16 },
	{  8, TERM5, TERM5_block, 17 }, { 8, HANGAR, HANGAR2_AREA_block, 17 }, { 8, 0, 0, 17 },
	{  9, TERM6, TERM6_block, 18 }, { 9, HANGAR, HANGAR2_AREA_block, 18 }, { 9, 0, 0, 18 },
	{ 10, HELIPAD1, HELIPAD1_block, 10 }, { 10, HANGAR, HANGAR2_AREA_block, 16 }, { 10, HELITAKEOFF, 0, 47 },
	{ 11, HELIPAD2, HELIPAD2_block, 11 }, { 11, HANGAR, HANGAR2_AREA_block, 17 }, { 11, HELITAKEOFF, 0, 48 },
	{ 12, 0, TERM_GROUP2_ENTER1_block, 13 },
	{ 13, 0, TERM_GROUP2_ENTER1_block, 14 },
	{ 14, 0, TERM_GROUP2_ENTER2_block, 15 },
	{ 15, 0, TERM_GROUP2_ENTER2_block, 16 },
	{ 16, 255, TERM_GROUP2_block, 0 }, { 16, TERM4, TERM4_block, 7 }, { 16, HELIPAD1, HELIPAD1_block, 10 }, { 16, HELITAKEOFF, HELIPAD1_block, 10 }, { 16, 0, 0, 17 },
	{ 17, 255, TERM_GROUP2_block, 0 }, { 17, TERM5, TERM5_block, 8 }, { 17, TERM4, 0, 16 }, { 17, HELIPAD1, 0, 16 }, { 17, HELIPAD2, HELIPAD2_block, 11 }, { 17, HELITAKEOFF, HELIPAD2_block, 11 }, { 17, 0, 0, 18 },
	{ 18, 255, TERM_GROUP2_block, 0 }, { 18, TERM6, TERM6_block, 9 }, { 18, TAKEOFF, 0, 19 }, { 18, HANGAR, HANGAR2_AREA_block, 3 }, { 18, 0, 0, 17 },
	{ 19, 0, TERM_GROUP2_EXIT1_block, 20 },
	{ 20, 0, TERM_GROUP2_EXIT1_block, 21 },
	{ 21, 0, TERM_GROUP2_EXIT2_block, 22 },
	{ 22, 0, TERM_GROUP2_EXIT2_block, 26 },
	{ 23, 255, TERM_GROUP1_block, 0 }, { 23, TERM1, TERM1_block, 4 }, { 23, HANGAR, AIRPORT_ENTRANCE_block, 2 }, { 23, 0, 0, 24 },
	{ 24, 255, TERM_GROUP1_block, 0 }, { 24, TERM2, TERM2_block, 5 }, { 24, TERM1, 0, 23 }, { 24, HANGAR, 0, 23 }, { 24, 0, 0, 25 },
	{ 25, 255, TERM_GROUP1_block, 0 }, { 25, TERM3, TERM3_block, 6 }, { 25, TAKEOFF, 0, 26 }, { 25, 0, 0, 24 },
	{ 26, 255, TAXIWAY_BUSY_block, 0 }, { 26, TAKEOFF, 0, 27 }, { 26, 0, 0, 25 },
	{ 27, 0, OUT_WAY_block, 28 },
	// takeoff
	{ 28, TAKEOFF, OUT_WAY_block, 29 },
	{ 29, 0, RUNWAY_OUT_block, 30 },
	{ 30, STARTTAKEOFF, NOTHING_block, 31 },
	{ 31, ENDTAKEOFF, NOTHING_block, 0 },
	// landing
	{ 32, FLYING, NOTHING_block, 37 }, { 32, LANDING, 0, 33 }, { 32, HELILANDING, 0, 41 },
	{ 33, LANDING, RUNWAY_IN_block, 34 },
	{ 34, 0, RUNWAY_IN_block, 35 },
	{ 35, 0, RUNWAY_IN_block, 36 },
	{ 36, ENDLANDING, IN_WAY_block, 36 }, { 36, 255, TERM_GROUP1_block, 0 }, { 36, 255, TERM_GROUP2_ENTER1_block, 1 }, { 36, TERM4, 0, 12 }, { 36, TERM5, 0, 12 }, { 36, TERM6, 0, 12 }, { 36, 0, 0, 2 },
	// In Air
	{ 37, 0, NOTHING_block, 38 },
	{ 38, 0, NOTHING_block, 39 },
	{ 39, 0, NOTHING_block, 40 },
	{ 40, 0, NOTHING_block, 32 },
	// Helicopter -- stay in air in special place as a buffer to choose from helipads
	{ 41, HELILANDING, PRE_HELIPAD_block, 42 },
	{ 42, HELIENDLANDING, PRE_HELIPAD_block, 42 }, { 42, HELIPAD1, 0, 43 }, { 42, HELIPAD2, 0, 44 }, { 42, HANGAR, 0, 49 },
	{ 43, 0, NOTHING_block, 45 },
	{ 44, 0, NOTHING_block, 46 },
	// landing
	{ 45, 255, NOTHING_block, 0 }, { 45, HELIPAD1, HELIPAD1_block, 10 },
	{ 46, 255, NOTHING_block, 0 }, { 46, HELIPAD2, HELIPAD2_block, 11 },
	// Helicopter -- takeoff
	{ 47, HELITAKEOFF, NOTHING_block, 0 },
	{ 48, HELITAKEOFF, NOTHING_block, 0 },
	{ 49, 0, HANGAR2_AREA_block, 50 }, // need to go to hangar when waiting in air
	{ 50, 0, HANGAR2_AREA_block, 3 },
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

// intercontinental
static TileIndexDiffC _airport_depots_intercontinental[] = { { 0, 5 }, { 8, 4 } };
static byte _airport_terminal_intercontinental[] = { 2, 4, 4 };
static byte _airport_helipad_intercontinental[] = { 1, 2 };
static byte _airport_entries_intercontinental[] = { 43, 43, 43, 43 };
static AirportFTAbuildup _airport_fta_intercontinental[] = {
	{  0, HANGAR, NOTHING_block, 2 }, { 0, 255, HANGAR1_AREA_block | TERM_GROUP1_block, 0 }, { 0, 255, HANGAR1_AREA_block | TERM_GROUP1_block, 1 }, { 0, TAKEOFF, HANGAR1_AREA_block | TERM_GROUP1_block, 2 }, { 0, 0, 0, 2 },
	{  1, HANGAR, NOTHING_block, 3 }, { 1, 255, HANGAR2_AREA_block, 1 }, { 1, 255, HANGAR2_AREA_block, 0 }, { 1, 0, 0, 3 },
	{  2, 255, HANGAR1_AREA_block, 0 }, { 2, 255, TERM_GROUP1_block, 0 }, { 2, 255, TERM_GROUP1_block, 1 }, { 2, HANGAR, 0, 0 }, { 2, TAKEOFF, TERM_GROUP1_block, 27 }, { 2, TERM5, 0, 26 }, { 2, TERM6, 0, 26 }, { 2, TERM7, 0, 26 }, { 2, TERM8, 0, 26 }, { 2, HELIPAD1, 0, 26 }, { 2, HELIPAD2, 0, 26 }, { 2, HELITAKEOFF, 0, 74 }, { 2, 0, 0, 27 },
	{  3, 255, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, HELITAKEOFF, 0, 75 }, { 3, 0, 0, 20 },
	{  4, TERM1, TERM1_block, 26 }, { 4, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 26 }, { 4, 0, 0, 26 },
	{  5, TERM2, TERM2_block, 27 }, { 5, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 27 }, { 5, 0, 0, 27 },
	{  6, TERM3, TERM3_block, 28 }, { 6, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 28 }, { 6, 0, 0, 28 },
	{  7, TERM4, TERM4_block, 29 }, { 7, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 7, 0, 0, 29 },
	{  8, TERM5, TERM5_block, 18 }, { 8, HANGAR, HANGAR2_AREA_block, 18 }, { 8, 0, 0, 18 },
	{  9, TERM6, TERM6_block, 19 }, { 9, HANGAR, HANGAR2_AREA_block, 19 }, { 9, 0, 0, 19 },
	{ 10, TERM7, TERM7_block, 20 }, { 10, HANGAR, HANGAR2_AREA_block, 20 }, { 10, 0, 0, 20 },
	{ 11, TERM8, TERM8_block, 21 }, { 11, HANGAR, HANGAR2_AREA_block, 21 }, { 11, 0, 0, 21 },
	{ 12, HELIPAD1, HELIPAD1_block, 12 }, { 12, HANGAR, 0, 70 }, { 12, HELITAKEOFF, 0, 72 },
	{ 13, HELIPAD2, HELIPAD2_block, 13 }, { 13, HANGAR, 0, 71 }, { 13, HELITAKEOFF, 0, 73 },
	{ 14, 0, TERM_GROUP2_ENTER1_block, 15 },
	{ 15, 0, TERM_GROUP2_ENTER1_block, 16 },
	{ 16, 0, TERM_GROUP2_ENTER2_block, 17 },
	{ 17, 0, TERM_GROUP2_ENTER2_block, 18 },
	{ 18, 255, TERM_GROUP2_block, 0 }, { 18, TERM5, TERM5_block, 8 }, { 18, TAKEOFF, 0, 19 }, { 18, HELITAKEOFF, HELIPAD1_block, 19 }, { 18, 0, TERM_GROUP2_EXIT1_block, 19 },
	{ 19, 255, TERM_GROUP2_block, 0 }, { 19, TERM6, TERM6_block, 9 }, { 19, TERM5, 0, 18 }, { 19, TAKEOFF, 0, 57 }, { 19, HELITAKEOFF, HELIPAD1_block, 20 }, { 19, 0, TERM_GROUP2_EXIT1_block, 20 }, // add exit to runway out 2
	{ 20, 255, TERM_GROUP2_block, 0 }, { 20, TERM7, TERM7_block, 10 }, { 20, TERM5, 0, 19 }, { 20, TERM6, 0, 19 }, { 20, HANGAR, HANGAR2_AREA_block, 3 }, { 20, TAKEOFF, 0, 19 }, { 20, 0, TERM_GROUP2_EXIT1_block, 21 },
	{ 21, 255, TERM_GROUP2_block, 0 }, { 21, TERM8, TERM8_block, 11 }, { 21, HANGAR, HANGAR2_AREA_block, 20 }, { 21, TERM5, 0, 20 }, { 21, TERM6, 0, 20 }, { 21, TERM7, 0, 20 }, { 21, TAKEOFF, 0, 20 }, { 21, 0, TERM_GROUP2_EXIT1_block, 22 },
	{ 22, 255, TERM_GROUP2_block, 0 }, { 22, HANGAR, 0, 21 }, { 22, TERM5, 0, 21 }, { 22, TERM6, 0, 21 }, { 22, TERM7, 0, 21 }, { 22, TERM8, 0, 21 }, { 22, TAKEOFF, 0, 21 }, { 22, 0, 0, 23 },
	{ 23, 0, TERM_GROUP2_EXIT1_block, 70 },
	{ 24, 0, TERM_GROUP2_EXIT2_block, 25 },
	{ 25, 255, TERM_GROUP2_EXIT2_block, 0 }, { 25, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 25, 0, 0, 29 },
	{ 26, 255, TERM_GROUP1_block, 0 }, { 26, TERM1, TERM1_block, 4 }, { 26, HANGAR, HANGAR1_AREA_block, 27 }, { 26, TERM5, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM6, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM7, TERM_GROUP2_ENTER1_block, 14 }, { 26, TERM8, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELIPAD1, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELIPAD2, TERM_GROUP2_ENTER1_block, 14 }, { 26, HELITAKEOFF, TERM_GROUP2_ENTER1_block, 14 }, { 26, 0, 0, 27 },
	{ 27, 255, TERM_GROUP1_block, 0 }, { 27, TERM2, TERM2_block, 5 }, { 27, HANGAR, HANGAR1_AREA_block, 2 }, { 27, TERM1, 0, 26 }, { 27, TERM5, 0, 26 }, { 27, TERM6, 0, 26 }, { 27, TERM7, 0, 26 }, { 27, TERM8, 0, 26 }, { 27, HELIPAD1, 0, 14 }, { 27, HELIPAD2, 0, 14 }, { 27, 0, 0, 28 },
	{ 28, 255, TERM_GROUP1_block, 0 }, { 28, TERM3, TERM3_block, 6 }, { 28, HANGAR, HANGAR1_AREA_block, 27 }, { 28, TERM1, 0, 27 }, { 28, TERM2, 0, 27 }, { 28, TERM4, 0, 29 }, { 28, TERM5, 0, 14 }, { 28, TERM6, 0, 14 }, { 28, TERM7, 0, 14 }, { 28, TERM8, 0, 14 }, { 28, HELIPAD1, 0, 14 }, { 28, HELIPAD2, 0, 14 }, { 28, 0, 0, 29 },
	{ 29, 255, TERM_GROUP1_block, 0 }, { 29, TERM4, TERM4_block, 7 }, { 29, HANGAR, HANGAR1_AREA_block, 27 }, { 29, TAKEOFF, 0, 30 }, { 29, 0, 0, 28 },
	{ 30, 0, OUT_WAY_block2, 31 },
	{ 31, 0, OUT_WAY_block, 32 },
	// takeoff
	{ 32, TAKEOFF, RUNWAY_OUT_block, 33 },
	{ 33, 0, RUNWAY_OUT_block, 34 },
	{ 34, STARTTAKEOFF, NOTHING_block, 35 },
	{ 35, ENDTAKEOFF, NOTHING_block, 0 },
	// landing
	{ 36, 0, 0, 0 },
	{ 37, LANDING, RUNWAY_IN_block, 38 },
	{ 38, 0, RUNWAY_IN_block, 39 },
	{ 39, 0, RUNWAY_IN_block, 40 },
	{ 40, ENDLANDING, RUNWAY_IN_block, 41 },
	{ 41, 0, IN_WAY_block, 42 },
	{ 42, 255, IN_WAY_block, 0 }, { 42, 255, TERM_GROUP1_block, 0 }, { 42, 255, TERM_GROUP1_block, 1 }, { 42, HANGAR, 0, 2 }, { 42, 0, 0, 26 },
	// In Air
	{ 43, 0, 0, 44 },
	{ 44, FLYING, 0, 45 }, { 44, HELILANDING, 0, 47 }, { 44, LANDING, 0, 69 }, { 44, 0, 0, 45 },
	{ 45, 0, 0, 46 },
	{ 46, FLYING, 0, 43 }, { 46, LANDING, 0, 76 }, { 46, 0, 0, 43 },
	// Helicopter -- stay in air in special place as a buffer to choose from helipads
	{ 47, HELILANDING, PRE_HELIPAD_block, 48 },
	{ 48, HELIENDLANDING, PRE_HELIPAD_block, 48 }, { 48, HELIPAD1, 0, 49 }, { 48, HELIPAD2, 0, 50 }, { 48, HANGAR, 0, 55 },
	{ 49, 0, NOTHING_block, 51 },
	{ 50, 0, NOTHING_block, 52 },
	// landing
	{ 51, 255, NOTHING_block, 0 }, { 51, HELIPAD1, HELIPAD1_block, 12 }, { 51, HANGAR, 0, 55 }, { 51, 0, 0, 12 },
	{ 52, 255, NOTHING_block, 0 }, { 52, HELIPAD2, HELIPAD2_block, 13 }, { 52, HANGAR, 0, 55 }, { 52, 0, 0, 13 },
	// Helicopter -- takeoff
	{ 53, HELITAKEOFF, NOTHING_block, 0 },
	{ 54, HELITAKEOFF, NOTHING_block, 0 },
	{ 55, 0, HANGAR2_AREA_block, 56 }, // need to go to hangar when waiting in air
	{ 56, 0, HANGAR2_AREA_block, 3 },
	// runway 2 out support
	{ 57, 255, OUT_WAY2_block, 0 }, { 57, TAKEOFF, 0, 58 }, { 57, 0, 0, 58 },
	{ 58, 0, OUT_WAY2_block, 59 },
	{ 59, TAKEOFF, RUNWAY_OUT2_block, 60 }, // takeoff
	{ 60, 0, RUNWAY_OUT2_block, 61 },
	{ 61, STARTTAKEOFF, NOTHING_block, 62 },
	{ 62, ENDTAKEOFF, NOTHING_block, 0 },
	// runway 2 in support
	{ 63, LANDING, RUNWAY_IN2_block, 64 },
	{ 64, 0, RUNWAY_IN2_block, 65 },
	{ 65, 0, RUNWAY_IN2_block, 66 },
	{ 66, ENDLANDING, RUNWAY_IN2_block, 0 }, { 66, 255, 0, 1 }, { 66, 255, 0, 0 }, { 66, 0, 0, 67 },
	{ 67, 0, IN_WAY2_block, 68 },
	{ 68, 255, IN_WAY2_block, 0 }, { 68, 255, TERM_GROUP2_block, 1 }, { 68, 255, TERM_GROUP1_block, 0 }, { 68, HANGAR, HANGAR2_AREA_block, 22 }, { 68, 0, 0, 22 },
	{ 69, 255, RUNWAY_IN2_block, 0 }, { 69, 0, RUNWAY_IN2_block, 63 },
	{ 70, 255, TERM_GROUP2_EXIT1_block, 0 }, { 70, HELIPAD1, HELIPAD1_block, 12 }, { 70, HELITAKEOFF, HELIPAD1_block, 12 }, { 70, 0, 0, 71 },
	{ 71, 255, TERM_GROUP2_EXIT1_block, 0 }, { 71, HELIPAD2, HELIPAD2_block, 13 }, { 71, HELITAKEOFF, HELIPAD1_block, 12 }, { 71, 0, 0, 24 },
	{ 72, 0, HELIPAD1_block, 53 },
	{ 73, 0, HELIPAD2_block, 54 },
	{ 74, HELITAKEOFF, NOTHING_block, 0 },
	{ 75, HELITAKEOFF, NOTHING_block, 0 },
	{ 76, 255, RUNWAY_IN_block, 0 }, { 76, 0, RUNWAY_IN_block, 37 },
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};


// heliports, oilrigs don't have depots
static byte _airport_helipad_heliport_oilrig[] = { 1, 1 };
static byte _airport_entries_heliport_oilrig[] = { 7, 7, 7, 7 };
static AirportFTAbuildup _airport_fta_heliport_oilrig[] = {
	{ 0, HELIPAD1, HELIPAD1_block, 1 },
	{ 1, HELITAKEOFF, NOTHING_block, 0 }, // takeoff
	{ 2, 255, AIRPORT_BUSY_block, 0 }, { 2, HELILANDING, 0, 3 }, { 2, HELITAKEOFF, 0, 1 },
	{ 3, HELILANDING, AIRPORT_BUSY_block, 4 },
	{ 4, HELIENDLANDING, AIRPORT_BUSY_block, 4 }, { 4, HELIPAD1, HELIPAD1_block, 0 }, { 4, HELITAKEOFF, 0, 2 },
	// In Air
	{ 5, 0, NOTHING_block, 6 },
	{ 6, 0, NOTHING_block, 7 },
	{ 7, 0, NOTHING_block, 8 },
	{ 8, FLYING, NOTHING_block, 5 }, { 8, HELILANDING, HELIPAD1_block, 2 }, // landing
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

// helidepots
static TileIndexDiffC _airport_depots_helidepot[] = { { 1, 0 } };
static byte _airport_helipad_helidepot[] = { 1, 1 };
static byte _airport_entries_helidepot[] = { 4, 4, 4, 4 };
static AirportFTAbuildup _airport_fta_helidepot[] = {
	{  0, HANGAR, NOTHING_block, 1 },
	{  1, 255, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELIPAD1, HELIPAD1_block, 14 }, { 1, HELITAKEOFF, 0, 15 }, { 1, 0, 0, 0 },
	{  2, FLYING, NOTHING_block, 3 }, { 2, HELILANDING, PRE_HELIPAD_block, 7 }, { 2, HANGAR, 0, 12 }, { 2, HELITAKEOFF, NOTHING_block, 16 },
	// In Air
	{  3, 0, NOTHING_block, 4 },
	{  4, 0, NOTHING_block, 5 },
	{  5, 0, NOTHING_block, 6 },
	{  6, 0, NOTHING_block, 2 },
	// Helicopter -- stay in air in special place as a buffer to choose from helipads
	{  7, HELILANDING, PRE_HELIPAD_block, 8 },
	{  8, HELIENDLANDING, PRE_HELIPAD_block, 8 }, { 8, HELIPAD1, 0, 9 }, { 8, HANGAR, 0, 12 }, { 8, 0, 0, 2 },
	{  9, 0, NOTHING_block, 10 },
	// landing
	{ 10, 255, NOTHING_block, 10 }, { 10, HELIPAD1, HELIPAD1_block, 14 }, { 10, HANGAR, 0, 1 }, { 10, 0, 0, 14 },
	// Helicopter -- takeoff
	{ 11, HELITAKEOFF, NOTHING_block, 0 },
	{ 12, 0, HANGAR2_AREA_block, 13 }, // need to go to hangar when waiting in air
	{ 13, 0, HANGAR2_AREA_block, 1 },
	{ 14, HELIPAD1, HELIPAD1_block, 14 }, { 14, HANGAR, 0, 1 }, { 14, HELITAKEOFF, 0, 17 },
	{ 15, HELITAKEOFF, NOTHING_block, 0 }, // takeoff outside depot
	{ 16, HELITAKEOFF, 0, 14 },
	{ 17, 0, NOTHING_block, 11 },
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

// helistation
static TileIndexDiffC _airport_depots_helistation[] = { { 0, 0 } };
static byte _airport_helipad_helistation[] = { 1, 3 };
static byte _airport_entries_helistation[] = { 25, 25, 25, 25 };
static AirportFTAbuildup _airport_fta_helistation[] = {
	{  0, HANGAR, NOTHING_block, 8 },    { 0, HELIPAD1, 0, 1 }, { 0, HELIPAD2, 0, 1 }, { 0, HELIPAD3, 0, 1 }, { 0, HELITAKEOFF, 0, 1 }, { 0, 0, 0, 0 },
	{  1, 255, HANGAR2_AREA_block, 0 },  { 1, HANGAR, 0, 0 }, { 1, HELITAKEOFF, 0, 3 }, { 1, 0, 0, 4 },
	// landing
	{  2, FLYING, NOTHING_block, 28 },   { 2, HELILANDING, 0, 15 }, { 2, 0, 0, 28 },
	// helicopter side
	{  3, HELITAKEOFF, NOTHING_block, 0 }, // helitakeoff outside hangar2
	{  4, 255, TAXIWAY_BUSY_block, 0 },  { 4, HANGAR, HANGAR2_AREA_block, 1 }, { 4, HELITAKEOFF, 0, 1 }, { 4, 0, 0, 5 },
	{  5, 255, TAXIWAY_BUSY_block, 0 },  { 5, HELIPAD1, HELIPAD1_block, 6 }, { 5, HELIPAD2, HELIPAD2_block, 7 }, { 5, HELIPAD3, HELIPAD3_block, 8 }, { 5, 0, 0, 4 },
	{  6, HELIPAD1, HELIPAD1_block, 5 }, { 6, HANGAR, HANGAR2_AREA_block, 5 }, { 6, HELITAKEOFF, 0, 9 }, { 6, 0, 0, 6 },
	{  7, HELIPAD2, HELIPAD2_block, 5 }, { 7, HANGAR, HANGAR2_AREA_block, 5 }, { 7, HELITAKEOFF, 0, 10 }, { 7, 0, 0, 7 },
	{  8, HELIPAD3, HELIPAD3_block, 5 }, { 8, HANGAR, HANGAR2_AREA_block, 5 }, { 8, HELITAKEOFF, 0, 11 }, { 8, 0, 0, 8 },
	{  9, 0, HELIPAD1_block, 12 },
	{ 10, 0, HELIPAD2_block, 13 },
	{ 11, 0, HELIPAD3_block, 14 },
	{ 12, HELITAKEOFF, NOTHING_block, 0 },
	{ 13, HELITAKEOFF, NOTHING_block, 0 },
	{ 14, HELITAKEOFF, NOTHING_block, 0 },
	// heli - in flight moves
	{ 15, HELILANDING, PRE_HELIPAD_block, 16 },
	{ 16, HELIENDLANDING, PRE_HELIPAD_block, 16 }, { 16, HELIPAD1, 0, 17 }, { 16, HELIPAD2, 0, 18 }, { 16, HELIPAD3, 0, 19 }, { 16, HANGAR, 0, 23 },
	{ 17, 0, NOTHING_block, 20 },
	{ 18, 0, NOTHING_block, 21 },
	{ 19, 0, NOTHING_block, 22 },
	// heli landing
	{ 20, 255, NOTHING_block, 0 }, { 20, HELIPAD1, HELIPAD1_block, 6 }, { 20, HANGAR, 0, 23 }, { 20, 0, 0, 6 },
	{ 21, 255, NOTHING_block, 0 }, { 21, HELIPAD2, HELIPAD2_block, 7 }, { 21, HANGAR, 0, 23 }, { 21, 0, 0, 7 },
	{ 22, 255, NOTHING_block, 0 }, { 22, HELIPAD3, HELIPAD3_block, 8 }, { 22, HANGAR, 0, 23 }, { 22, 0, 0, 8 },
	{ 23, 0, HANGAR2_AREA_block, 24 }, // need to go to helihangar when waiting in air
	{ 24, 0, HANGAR2_AREA_block, 1 },
	{ 25, 0, NOTHING_block, 26 },
	{ 26, 0, NOTHING_block, 27 },
	{ 27, 0, NOTHING_block, 2 },
	{ 28, 0, NOTHING_block, 29 },
	{ 29, 0, NOTHING_block, 30 },
	{ 30, 0, NOTHING_block, 31 },
	{ 31, 0, NOTHING_block, 32 },
	{ 32, 0, NOTHING_block, 25 },
	{ MAX_ELEMENTS, 0, 0, 0 } // end marker. DO NOT REMOVE
};

#endif /* AIRPORT_MOVEMENT_H */