Files @ r656:44c757c66b53
Branch filter:

Location: cpp/openttd-patchpack/source/airport_movement.h

truelight
(svn r1090) -Fix: Made the _openttd_revision variable global, and with that
hopefully killed the windows-revision problem. If WITH_REV is defined,
for both Windows as *nix system _openttd_revision is filled with normal
info, else _openttd_revision is set to 'norev000'
-Fix: Small possible server-crash
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
#ifndef AIRPORT_MOVEMENT_H
#define AIRPORT_MOVEMENT_H

#include "stdafx.h"
#include "macros.h"

// don't forget to change the airport_depots too for larger mapsizes. TILE_X_BITS 16
// won't fit in uint16 for example and overflow will occur in the checking code!
// TrueLight -- So make it a TileIndex..

typedef struct AirportMovingData {
	int x,y;
	byte flag;
	byte direction;
} AirportMovingData;

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

enum {
	AMED_NOSPDCLAMP	= 1<<0,
	AMED_TAKEOFF		= 1<<1,
	AMED_SLOWTURN		= 1<<2,
	AMED_LAND				= 1<<3,
	AMED_EXACTPOS		= 1<<4,
	AMED_BRAKE			= 1<<5,
	AMED_HELI_RAISE	= 1<<6,
	AMED_HELI_LOWER	= 1<<7,
};

enum {MAX_ELEMENTS = 255};
enum {MAX_HEADINGS = 18};

///////////////////////////////////////////////////////////////////////
///////***********Movement States on Airports********************//////
// headings target
enum {
	TO_ALL = 0,
	HANGAR = 1,
	TERM1 = 2,
	TERM2 = 3,
	TERM3 = 4,
	TERM4 = 5,
	TERM5 = 6,
	TERM6 = 7,
	HELIPAD1 = 8,
	HELIPAD2 = 9,
	TAKEOFF = 10,
	STARTTAKEOFF = 11,
	ENDTAKEOFF = 12,
	HELITAKEOFF = 13,
	FLYING = 14,
	LANDING = 15,
	ENDLANDING = 16,
	HELILANDING = 17,
	HELIENDLANDING = 18
};

///////////////////////////////////////////////////////////////////////
///////**********Movement Blocks on Airports*********************//////
// blocks (eg_airport_flags)
enum {
	TERM1_block								= 1 << 0,
	TERM2_block								= 1 << 1,
	TERM3_block								= 1 << 2,
	TERM4_block								= 1 << 3,
	TERM5_block								= 1 << 4,
	TERM6_block								= 1 << 5,
	HELIPAD1_block						= 1 << 6,
	HELIPAD2_block						= 1 << 7,
	RUNWAY_IN_OUT_block				= 1 << 8,
	RUNWAY_IN_block						= 1 << 8,
	AIRPORT_BUSY_block				= 1 << 8,
	RUNWAY_OUT_block					= 1 << 9,
	TAXIWAY_BUSY_block				= 1 << 10,
	OUT_WAY_block							= 1 << 11,
	IN_WAY_block							= 1 << 12,
	AIRPORT_ENTRANCE_block		= 1 << 13,
	TERM_GROUP1_block					= 1 << 14,
	TERM_GROUP2_block					= 1 << 15,
	HANGAR2_AREA_block				= 1 << 16,
	TERM_GROUP2_ENTER1_block	= 1 << 17,
	TERM_GROUP2_ENTER2_block	= 1 << 18,
	TERM_GROUP2_EXIT1_block		= 1 << 19,
	TERM_GROUP2_EXIT2_block		= 1 << 20,
	PRE_HELIPAD_block					= 1 << 21,
	NOTHING_block							= 1 << 30
};

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

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

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

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

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

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

///////////////////////////////////////////////////////////////////////
/////**********Movement Machine on Airports*********************///////
// first element of depots 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 const TileIndex _airport_depots_country[] = {1, TILE_XY(3,0)};
static const 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 const TileIndex _airport_depots_city[] = {1, TILE_XY(5,0)};
static const 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,16},
	{16,0,RUNWAY_IN_OUT_block,17},
	{17,ENDLANDING,IN_WAY_block,7},
	// In Air
	{18,0,NOTHING_block,19},
	{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},
	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
};

static const TileIndex _airport_depots_metropolitan[] = {1, TILE_XY(5,0)};
static const 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 const TileIndex _airport_depots_international[] = {2, TILE_XY(0,3), TILE_XY(6,1)};
static const 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
};

static const TileIndex _airport_depots_heliport_oilrig[] = {0};
static const 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
};

static const AirportMovingData * const _airport_moving_datas[6] = {
	_airport_moving_data_country,				// Country Airfield (small) 4x3
	_airport_moving_data_town,					// City Airport (large) 6x6
	_airport_moving_data_heliport,			// Heliport
	_airport_moving_data_metropolitan,	// Metropolitain Airport (large) - 2 runways
	_airport_moving_data_international,	// International Airport (xlarge) - 2 runways
	_airport_moving_data_oilrig					// Oilrig
};

#endif /* AIRPORT_MOVEMENT_H */