OpenTTD
airport_movement.h
Go to the documentation of this file.
1 /* $Id$ */
2 
3 /*
4  * This file is part of OpenTTD.
5  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
8  */
9 
12 #ifndef AIRPORT_MOVEMENT_H
13 #define AIRPORT_MOVEMENT_H
14 
15 
21  byte position;
22  byte heading;
23  uint64 block;
24  byte next;
25 };
26 
29 
37 #define AMD(x, y, flags, dir) { x, y, flags, dir }
38 
43  AMD( 96, 96, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ),
45 };
46 
49  AMD( 53, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
50  AMD( 53, 27, 0, DIR_N ), // 01 Taxi to right outside depot
51  AMD( 32, 23, AMED_EXACTPOS, DIR_NW), // 02 Terminal 1
52  AMD( 10, 23, AMED_EXACTPOS, DIR_NW), // 03 Terminal 2
53  AMD( 43, 37, 0, DIR_N ), // 04 Going towards terminal 2
54  AMD( 24, 37, 0, DIR_N ), // 05 Going towards terminal 2
55  AMD( 53, 37, 0, DIR_N ), // 06 Going for takeoff
56  AMD( 61, 40, AMED_EXACTPOS, DIR_NE), // 07 Taxi to start of runway (takeoff)
57  AMD( 3, 40, AMED_NOSPDCLAMP, DIR_N ), // 08 Accelerate to end of runway
58  AMD( -79, 40, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 09 Take off
59  AMD( 177, 40, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 10 Fly to landing position in air
60  AMD( 56, 40, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 11 Going down for land
61  AMD( 3, 40, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 12 Just landed, brake until end of runway
62  AMD( 7, 40, 0, DIR_N ), // 13 Just landed, turn around and taxi 1 square
63  AMD( 53, 40, 0, DIR_N ), // 14 Taxi from runway to crossing
64  AMD( 1, 193, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 15 Fly around waiting for a landing spot (north-east)
65  AMD( 1, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 16 Fly around waiting for a landing spot (north-west)
66  AMD( 257, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 17 Fly around waiting for a landing spot (south-west)
67  AMD( 273, 47, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 18 Fly around waiting for a landing spot (south)
68  AMD( 44, 37, AMED_HELI_RAISE, DIR_N ), // 19 Helicopter takeoff
69  AMD( 44, 40, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 20 In position above landing spot helicopter
70  AMD( 44, 40, AMED_HELI_LOWER, DIR_N ), // 21 Helicopter landing
71 };
72 
75  AMD( 69, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
76  AMD( 72, 22, 0, DIR_N ), // 01 Taxi to right outside depot
77  AMD( 8, 22, AMED_EXACTPOS, DIR_SW), // 02 Taxi to right outside depot
78  AMD( 24, 36, AMED_EXACTPOS, DIR_SE), // 03 Terminal 1
79  AMD( 40, 36, AMED_EXACTPOS, DIR_SE), // 04 Terminal 2
80  AMD( 56, 36, AMED_EXACTPOS, DIR_SE), // 05 Terminal 3
81  AMD( 40, 8, AMED_EXACTPOS, DIR_NE), // 06 Helipad 1
82  AMD( 56, 8, AMED_EXACTPOS, DIR_NE), // 07 Helipad 2
83  AMD( 24, 22, 0, DIR_SW), // 08 Taxiing
84  AMD( 40, 22, 0, DIR_SW), // 09 Taxiing
85  AMD( 56, 22, 0, DIR_SW), // 10 Taxiing
86  AMD( 72, 40, 0, DIR_SE), // 11 Airport OUTWAY
87  AMD( 72, 54, AMED_EXACTPOS, DIR_NE), // 12 Accelerate to end of runway
88  AMD( 7, 54, AMED_NOSPDCLAMP, DIR_N ), // 13 Release control of runway, for smoother movement
89  AMD( 5, 54, AMED_NOSPDCLAMP, DIR_N ), // 14 End of runway
90  AMD( -79, 54, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 15 Take off
91  AMD( 145, 54, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 16 Fly to landing position in air
92  AMD( 73, 54, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 17 Going down for land
93  AMD( 3, 54, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 18 Just landed, brake until end of runway
94  AMD( 12, 54, AMED_SLOWTURN, DIR_NW), // 19 Just landed, turn around and taxi
95  AMD( 8, 32, 0, DIR_NW), // 20 Taxi from runway to crossing
96  AMD( 1, 149, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 21 Fly around waiting for a landing spot (north-east)
97  AMD( 1, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 22 Fly around waiting for a landing spot (north-west)
98  AMD( 193, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 23 Fly around waiting for a landing spot (south-west)
99  AMD( 225, 62, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 24 Fly around waiting for a landing spot (south)
100  /* Helicopter */
101  AMD( 80, 0, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 25 Bufferspace before helipad
102  AMD( 80, 0, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 26 Bufferspace before helipad
103  AMD( 32, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 27 Get in position for Helipad1
104  AMD( 48, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 28 Get in position for Helipad2
105  AMD( 32, 8, AMED_HELI_LOWER, DIR_N ), // 29 Land at Helipad1
106  AMD( 48, 8, AMED_HELI_LOWER, DIR_N ), // 30 Land at Helipad2
107  AMD( 32, 8, AMED_HELI_RAISE, DIR_N ), // 31 Takeoff Helipad1
108  AMD( 48, 8, AMED_HELI_RAISE, DIR_N ), // 32 Takeoff Helipad2
109  AMD( 64, 22, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 33 Go to position for Hangarentrance in air
110  AMD( 64, 22, AMED_HELI_LOWER, DIR_N ), // 34 Land in front of hangar
111  AMD( 40, 8, AMED_EXACTPOS, DIR_N ), // 35 pre-helitakeoff helipad 1
112  AMD( 56, 8, AMED_EXACTPOS, DIR_N ), // 36 pre-helitakeoff helipad 2
113  AMD( 64, 25, AMED_HELI_RAISE, DIR_N ), // 37 Take off in front of hangar
114 };
115 
118  AMD( 85, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
119  AMD( 85, 22, 0, DIR_N ), // 01 Taxi to right outside depot
120  AMD( 26, 41, AMED_EXACTPOS, DIR_SW), // 02 Terminal 1
121  AMD( 56, 22, AMED_EXACTPOS, DIR_SE), // 03 Terminal 2
122  AMD( 38, 8, AMED_EXACTPOS, DIR_SW), // 04 Terminal 3
123  AMD( 65, 6, 0, DIR_N ), // 05 Taxi to right in infront of terminal 2/3
124  AMD( 80, 27, 0, DIR_N ), // 06 Taxiway terminals 2-3
125  AMD( 44, 63, 0, DIR_N ), // 07 Taxi to Airport center
126  AMD( 58, 71, 0, DIR_N ), // 08 Towards takeoff
127  AMD( 72, 85, 0, DIR_N ), // 09 Taxi to runway (takeoff)
128  AMD( 89, 85, AMED_EXACTPOS, DIR_NE), // 10 Taxi to start of runway (takeoff)
129  AMD( 3, 85, AMED_NOSPDCLAMP, DIR_N ), // 11 Accelerate to end of runway
130  AMD( -79, 85, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 12 Take off
131  AMD( 177, 87, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 13 Fly to landing position in air
132  AMD( 89, 87, AMED_HOLD | AMED_LAND, DIR_N ), // 14 Going down for land
133  AMD( 20, 87, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 15 Just landed, brake until end of runway
134  AMD( 20, 87, 0, DIR_N ), // 16 Just landed, turn around and taxi 1 square // NOT USED
135  AMD( 36, 71, 0, DIR_N ), // 17 Taxi from runway to crossing
136  AMD( 160, 87, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 18 Fly around waiting for a landing spot (north-east)
137  AMD( 140, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 19 Final approach fix
138  AMD( 257, 1, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 20 Fly around waiting for a landing spot (south-west)
139  AMD( 273, 49, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 21 Fly around waiting for a landing spot (south)
140  AMD( 44, 63, AMED_HELI_RAISE, DIR_N ), // 22 Helicopter takeoff
141  AMD( 28, 74, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 23 In position above landing spot helicopter
142  AMD( 28, 74, AMED_HELI_LOWER, DIR_N ), // 24 Helicopter landing
143  AMD( 145, 1, AMED_HOLD | AMED_SLOWTURN, DIR_N ), // 25 Fly around waiting for a landing spot (north-west)
144  AMD( -32, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 26 Initial approach fix (north)
145  AMD( 300, -48, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 27 Initial approach fix (south)
146  AMD( 140, -48, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 28 Intermediate Approach fix (south), IAF (west)
147  AMD( -32, 120, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 29 Initial approach fix (east)
148 };
149 
152  AMD( 85, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar
153  AMD( 85, 22, 0, DIR_N ), // 01 Taxi to right outside depot
154  AMD( 26, 41, AMED_EXACTPOS, DIR_SW), // 02 Terminal 1
155  AMD( 56, 22, AMED_EXACTPOS, DIR_SE), // 03 Terminal 2
156  AMD( 38, 8, AMED_EXACTPOS, DIR_SW), // 04 Terminal 3
157  AMD( 65, 6, 0, DIR_N ), // 05 Taxi to right in infront of terminal 2/3
158  AMD( 80, 27, 0, DIR_N ), // 06 Taxiway terminals 2-3
159  AMD( 49, 58, 0, DIR_N ), // 07 Taxi to Airport center
160  AMD( 72, 58, 0, DIR_N ), // 08 Towards takeoff
161  AMD( 72, 69, 0, DIR_N ), // 09 Taxi to runway (takeoff)
162  AMD( 89, 69, AMED_EXACTPOS, DIR_NE), // 10 Taxi to start of runway (takeoff)
163  AMD( 3, 69, AMED_NOSPDCLAMP, DIR_N ), // 11 Accelerate to end of runway
164  AMD( -79, 69, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 12 Take off
165  AMD( 177, 85, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 13 Fly to landing position in air
166  AMD( 89, 85, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 14 Going down for land
167  AMD( 3, 85, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 15 Just landed, brake until end of runway
168  AMD( 21, 85, 0, DIR_N ), // 16 Just landed, turn around and taxi 1 square
169  AMD( 21, 69, 0, DIR_N ), // 17 On Runway-out taxiing to In-Way
170  AMD( 21, 58, AMED_EXACTPOS, DIR_SW), // 18 Taxi from runway to crossing
171  AMD( 1, 193, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 19 Fly around waiting for a landing spot (north-east)
172  AMD( 1, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 20 Fly around waiting for a landing spot (north-west)
173  AMD( 257, 1, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 21 Fly around waiting for a landing spot (south-west)
174  AMD( 273, 49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 22 Fly around waiting for a landing spot (south)
175  AMD( 44, 58, 0, DIR_N ), // 23 Helicopter takeoff spot on ground (to clear airport sooner)
176  AMD( 44, 63, AMED_HELI_RAISE, DIR_N ), // 24 Helicopter takeoff
177  AMD( 15, 54, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 25 Get in position above landing spot helicopter
178  AMD( 15, 54, AMED_HELI_LOWER, DIR_N ), // 26 Helicopter landing
179  AMD( 21, 58, AMED_EXACTPOS, DIR_SW), // 27 Transitions after landing to on-ground movement
180 };
181 
184  AMD( 7, 55, AMED_EXACTPOS, DIR_SE), // 00 In Hangar 1
185  AMD( 100, 21, AMED_EXACTPOS, DIR_SE), // 01 In Hangar 2
186  AMD( 7, 70, 0, DIR_N ), // 02 Taxi to right outside depot (Hangar 1)
187  AMD( 100, 36, 0, DIR_N ), // 03 Taxi to right outside depot (Hangar 2)
188  AMD( 38, 70, AMED_EXACTPOS, DIR_SW), // 04 Terminal 1
189  AMD( 38, 54, AMED_EXACTPOS, DIR_SW), // 05 Terminal 2
190  AMD( 38, 38, AMED_EXACTPOS, DIR_SW), // 06 Terminal 3
191  AMD( 70, 70, AMED_EXACTPOS, DIR_NE), // 07 Terminal 4
192  AMD( 70, 54, AMED_EXACTPOS, DIR_NE), // 08 Terminal 5
193  AMD( 70, 38, AMED_EXACTPOS, DIR_NE), // 09 Terminal 6
194  AMD( 104, 71, AMED_EXACTPOS, DIR_NE), // 10 Helipad 1
195  AMD( 104, 55, AMED_EXACTPOS, DIR_NE), // 11 Helipad 2
196  AMD( 22, 87, 0, DIR_N ), // 12 Towards Terminals 4/5/6, Helipad 1/2
197  AMD( 60, 87, 0, DIR_N ), // 13 Towards Terminals 4/5/6, Helipad 1/2
198  AMD( 66, 87, 0, DIR_N ), // 14 Towards Terminals 4/5/6, Helipad 1/2
199  AMD( 86, 87, AMED_EXACTPOS, DIR_NW), // 15 Towards Terminals 4/5/6, Helipad 1/2
200  AMD( 86, 70, 0, DIR_N ), // 16 In Front of Terminal 4 / Helipad 1
201  AMD( 86, 54, 0, DIR_N ), // 17 In Front of Terminal 5 / Helipad 2
202  AMD( 86, 38, 0, DIR_N ), // 18 In Front of Terminal 6
203  AMD( 86, 22, 0, DIR_N ), // 19 Towards Terminals Takeoff (Taxiway)
204  AMD( 66, 22, 0, DIR_N ), // 20 Towards Terminals Takeoff (Taxiway)
205  AMD( 60, 22, 0, DIR_N ), // 21 Towards Terminals Takeoff (Taxiway)
206  AMD( 38, 22, 0, DIR_N ), // 22 Towards Terminals Takeoff (Taxiway)
207  AMD( 22, 70, 0, DIR_N ), // 23 In Front of Terminal 1
208  AMD( 22, 58, 0, DIR_N ), // 24 In Front of Terminal 2
209  AMD( 22, 38, 0, DIR_N ), // 25 In Front of Terminal 3
210  AMD( 22, 22, AMED_EXACTPOS, DIR_NW), // 26 Going for Takeoff
211  AMD( 22, 6, 0, DIR_N ), // 27 On Runway-out, prepare for takeoff
212  AMD( 3, 6, AMED_EXACTPOS, DIR_SW), // 28 Accelerate to end of runway
213  AMD( 60, 6, AMED_NOSPDCLAMP, DIR_N ), // 29 Release control of runway, for smoother movement
214  AMD( 105, 6, AMED_NOSPDCLAMP, DIR_N ), // 30 End of runway
215  AMD( 190, 6, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 31 Take off
216  AMD( 193, 104, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 32 Fly to landing position in air
217  AMD( 105, 104, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 33 Going down for land
218  AMD( 3, 104, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 34 Just landed, brake until end of runway
219  AMD( 12, 104, AMED_SLOWTURN, DIR_N ), // 35 Just landed, turn around and taxi 1 square
220  AMD( 7, 84, 0, DIR_N ), // 36 Taxi from runway to crossing
221  AMD( 1, 209, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 37 Fly around waiting for a landing spot (north-east)
222  AMD( 1, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 38 Fly around waiting for a landing spot (north-west)
223  AMD( 273, 6, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 39 Fly around waiting for a landing spot (south-west)
224  AMD( 305, 81, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 40 Fly around waiting for a landing spot (south)
225  /* Helicopter */
226  AMD( 128, 80, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 41 Bufferspace before helipad
227  AMD( 128, 80, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 42 Bufferspace before helipad
228  AMD( 96, 71, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 43 Get in position for Helipad1
229  AMD( 96, 55, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 44 Get in position for Helipad2
230  AMD( 96, 71, AMED_HELI_LOWER, DIR_N ), // 45 Land at Helipad1
231  AMD( 96, 55, AMED_HELI_LOWER, DIR_N ), // 46 Land at Helipad2
232  AMD( 104, 71, AMED_HELI_RAISE, DIR_N ), // 47 Takeoff Helipad1
233  AMD( 104, 55, AMED_HELI_RAISE, DIR_N ), // 48 Takeoff Helipad2
234  AMD( 104, 32, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 49 Go to position for Hangarentrance in air
235  AMD( 104, 32, AMED_HELI_LOWER, DIR_N ), // 50 Land in HANGAR2_AREA to go to hangar
236  AMD( 7, 70, AMED_HELI_RAISE, DIR_N ), // 51 Takeoff from HANGAR1_AREA
237  AMD( 100, 36, AMED_HELI_RAISE, DIR_N ), // 52 Takeoff from HANGAR2_AREA
238 };
239 
242  AMD( 8, 87, AMED_EXACTPOS, DIR_SE), // 00 In Hangar 1
243  AMD( 136, 72, AMED_EXACTPOS, DIR_SE), // 01 In Hangar 2
244  AMD( 8, 104, 0, DIR_N ), // 02 Taxi to right outside depot 1
245  AMD( 136, 88, 0, DIR_N ), // 03 Taxi to right outside depot 2
246  AMD( 56, 120, AMED_EXACTPOS, DIR_W ), // 04 Terminal 1
247  AMD( 56, 104, AMED_EXACTPOS, DIR_SW), // 05 Terminal 2
248  AMD( 56, 88, AMED_EXACTPOS, DIR_SW), // 06 Terminal 3
249  AMD( 56, 72, AMED_EXACTPOS, DIR_SW), // 07 Terminal 4
250  AMD( 88, 120, AMED_EXACTPOS, DIR_N ), // 08 Terminal 5
251  AMD( 88, 104, AMED_EXACTPOS, DIR_NE), // 09 Terminal 6
252  AMD( 88, 88, AMED_EXACTPOS, DIR_NE), // 10 Terminal 7
253  AMD( 88, 72, AMED_EXACTPOS, DIR_NE), // 11 Terminal 8
254  AMD( 88, 56, AMED_EXACTPOS, DIR_SE), // 12 Helipad 1
255  AMD( 72, 56, AMED_EXACTPOS, DIR_NE), // 13 Helipad 2
256  AMD( 40, 136, 0, DIR_N ), // 14 Term group 2 enter 1 a
257  AMD( 56, 136, 0, DIR_N ), // 15 Term group 2 enter 1 b
258  AMD( 88, 136, 0, DIR_N ), // 16 Term group 2 enter 2 a
259  AMD( 104, 136, 0, DIR_N ), // 17 Term group 2 enter 2 b
260  AMD( 104, 120, 0, DIR_N ), // 18 Term group 2 - opp term 5
261  AMD( 104, 104, 0, DIR_N ), // 19 Term group 2 - opp term 6 & exit2
262  AMD( 104, 88, 0, DIR_N ), // 20 Term group 2 - opp term 7 & hangar area 2
263  AMD( 104, 72, 0, DIR_N ), // 21 Term group 2 - opp term 8
264  AMD( 104, 56, 0, DIR_N ), // 22 Taxi Term group 2 exit a
265  AMD( 104, 40, 0, DIR_N ), // 23 Taxi Term group 2 exit b
266  AMD( 56, 40, 0, DIR_N ), // 24 Term group 2 exit 2a
267  AMD( 40, 40, 0, DIR_N ), // 25 Term group 2 exit 2b
268  AMD( 40, 120, 0, DIR_N ), // 26 Term group 1 - opp term 1
269  AMD( 40, 104, 0, DIR_N ), // 27 Term group 1 - opp term 2 & hangar area 1
270  AMD( 40, 88, 0, DIR_N ), // 28 Term group 1 - opp term 3
271  AMD( 40, 72, 0, DIR_N ), // 29 Term group 1 - opp term 4
272  AMD( 18, 72, 0, DIR_NW), // 30 Outway 1
273  AMD( 8, 40, 0, DIR_NW), // 31 Airport OUTWAY
274  AMD( 8, 24, AMED_EXACTPOS, DIR_SW), // 32 Accelerate to end of runway
275  AMD( 119, 24, AMED_NOSPDCLAMP, DIR_N ), // 33 Release control of runway, for smoother movement
276  AMD( 117, 24, AMED_NOSPDCLAMP, DIR_N ), // 34 End of runway
277  AMD( 197, 24, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 35 Take off
278  AMD( 254, 84, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 36 Flying to landing position in air
279  AMD( 117, 168, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 37 Going down for land
280  AMD( 8, 168, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 38 Just landed, brake until end of runway
281  AMD( 8, 168, 0, DIR_N ), // 39 Just landed, turn around and taxi
282  AMD( 8, 144, 0, DIR_NW), // 40 Taxi from runway
283  AMD( 8, 128, 0, DIR_NW), // 41 Taxi from runway
284  AMD( 8, 120, AMED_EXACTPOS, DIR_NW), // 42 Airport entrance
285  AMD( 56, 344, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 43 Fly around waiting for a landing spot (north-east)
286  AMD( -200, 88, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 44 Fly around waiting for a landing spot (north-west)
287  AMD( 56, -168, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 45 Fly around waiting for a landing spot (south-west)
288  AMD( 312, 88, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 46 Fly around waiting for a landing spot (south)
289  /* Helicopter */
290  AMD( 96, 40, AMED_NOSPDCLAMP, DIR_N ), // 47 Bufferspace before helipad
291  AMD( 96, 40, AMED_NOSPDCLAMP, DIR_N ), // 48 Bufferspace before helipad
292  AMD( 82, 54, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 49 Get in position for Helipad1
293  AMD( 64, 56, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 50 Get in position for Helipad2
294  AMD( 81, 55, AMED_HELI_LOWER, DIR_N ), // 51 Land at Helipad1
295  AMD( 64, 56, AMED_HELI_LOWER, DIR_N ), // 52 Land at Helipad2
296  AMD( 80, 56, AMED_HELI_RAISE, DIR_N ), // 53 Takeoff Helipad1
297  AMD( 64, 56, AMED_HELI_RAISE, DIR_N ), // 54 Takeoff Helipad2
298  AMD( 136, 96, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 55 Go to position for Hangarentrance in air
299  AMD( 136, 96, AMED_HELI_LOWER, DIR_N ), // 56 Land in front of hangar2
300  AMD( 126, 104, 0, DIR_SE), // 57 Outway 2
301  AMD( 136, 136, 0, DIR_NE), // 58 Airport OUTWAY 2
302  AMD( 136, 152, AMED_EXACTPOS, DIR_NE), // 59 Accelerate to end of runway2
303  AMD( 16, 152, AMED_NOSPDCLAMP, DIR_N ), // 60 Release control of runway2, for smoother movement
304  AMD( 20, 152, AMED_NOSPDCLAMP, DIR_N ), // 61 End of runway2
305  AMD( -56, 152, AMED_NOSPDCLAMP | AMED_TAKEOFF, DIR_N ), // 62 Take off2
306  AMD( 24, 8, AMED_NOSPDCLAMP | AMED_LAND, DIR_N ), // 63 Going down for land2
307  AMD( 136, 8, AMED_NOSPDCLAMP | AMED_BRAKE, DIR_N ), // 64 Just landed, brake until end of runway2in
308  AMD( 136, 8, 0, DIR_N ), // 65 Just landed, turn around and taxi
309  AMD( 136, 24, 0, DIR_SE), // 66 Taxi from runway 2in
310  AMD( 136, 40, 0, DIR_SE), // 67 Taxi from runway 2in
311  AMD( 136, 56, AMED_EXACTPOS, DIR_NE), // 68 Airport entrance2
312  AMD( -56, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 69 Fly to landing position in air2
313  AMD( 88, 40, 0, DIR_N ), // 70 Taxi Term group 2 exit - opp heli1
314  AMD( 72, 40, 0, DIR_N ), // 71 Taxi Term group 2 exit - opp heli2
315  AMD( 88, 57, AMED_EXACTPOS, DIR_SE), // 72 pre-helitakeoff helipad 1
316  AMD( 71, 56, AMED_EXACTPOS, DIR_NE), // 73 pre-helitakeoff helipad 2
317  AMD( 8, 120, AMED_HELI_RAISE, DIR_N ), // 74 Helitakeoff outside depot 1
318  AMD( 136, 104, AMED_HELI_RAISE, DIR_N ), // 75 Helitakeoff outside depot 2
319  AMD( 197, 168, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 76 Fly to landing position in air1
320 };
321 
322 
325  AMD( 5, 9, AMED_EXACTPOS, DIR_NE), // 0 - At heliport terminal
326  AMD( 2, 9, AMED_HELI_RAISE, DIR_N ), // 1 - Take off (play sound)
327  AMD( -3, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 2 - In position above landing spot helicopter
328  AMD( -3, 9, AMED_HELI_LOWER, DIR_N ), // 3 - Land
329  AMD( 2, 9, 0, DIR_N ), // 4 - Goto terminal on ground
330  AMD( -31, 59, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 5 - Circle #1 (north-east)
331  AMD( -31, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 6 - Circle #2 (north-west)
332  AMD( 49, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 7 - Circle #3 (south-west)
333  AMD( 70, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 8 - Circle #4 (south)
334 };
335 
338  AMD( 24, 4, AMED_EXACTPOS, DIR_NE), // 0 - At depot
339  AMD( 24, 28, 0, DIR_N ), // 1 Taxi to right outside depot
340  AMD( 5, 38, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 2 Flying
341  AMD( -15, -15, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 3 - Circle #1 (north-east)
342  AMD( -15, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 4 - Circle #2 (north-west)
343  AMD( 49, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 5 - Circle #3 (south-west)
344  AMD( 49, -15, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 6 - Circle #4 (south-east)
345  AMD( 8, 32, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 7 - PreHelipad
346  AMD( 8, 32, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 8 - Helipad
347  AMD( 8, 16, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 9 - Land
348  AMD( 8, 16, AMED_HELI_LOWER, DIR_NW), // 10 - Land
349  AMD( 8, 24, AMED_HELI_RAISE, DIR_N ), // 11 - Take off (play sound)
350  AMD( 32, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NW), // 12 Air to above hangar area
351  AMD( 32, 24, AMED_HELI_LOWER, DIR_NW), // 13 Taxi to right outside depot
352  AMD( 8, 24, AMED_EXACTPOS, DIR_NW), // 14 - on helipad1
353  AMD( 24, 28, AMED_HELI_RAISE, DIR_N ), // 15 Takeoff right outside depot
354  AMD( 8, 24, AMED_HELI_RAISE, DIR_SW), // 16 - Take off (play sound)
355  AMD( 8, 24, AMED_SLOWTURN | AMED_EXACTPOS, DIR_E ), // 17 - turn on helipad1 for takeoff
356 };
357 
360  AMD( 8, 3, AMED_EXACTPOS, DIR_SE), // 00 In Hangar2
361  AMD( 8, 22, 0, DIR_N ), // 01 outside hangar 2
362  AMD( 116, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 02 Fly to landing position in air
363  AMD( 14, 22, AMED_HELI_RAISE, DIR_N ), // 03 Helitakeoff outside hangar1(play sound)
364  AMD( 24, 22, 0, DIR_N ), // 04 taxiing
365  AMD( 40, 22, 0, DIR_N ), // 05 taxiing
366  AMD( 40, 8, AMED_EXACTPOS, DIR_NE), // 06 Helipad 1
367  AMD( 56, 8, AMED_EXACTPOS, DIR_NE), // 07 Helipad 2
368  AMD( 56, 24, AMED_EXACTPOS, DIR_NE), // 08 Helipad 3
369  AMD( 40, 8, AMED_EXACTPOS, DIR_N ), // 09 pre-helitakeoff helipad 1
370  AMD( 56, 8, AMED_EXACTPOS, DIR_N ), // 10 pre-helitakeoff helipad 2
371  AMD( 56, 24, AMED_EXACTPOS, DIR_N ), // 11 pre-helitakeoff helipad 3
372  AMD( 32, 8, AMED_HELI_RAISE, DIR_N ), // 12 Takeoff Helipad1
373  AMD( 48, 8, AMED_HELI_RAISE, DIR_N ), // 13 Takeoff Helipad2
374  AMD( 48, 24, AMED_HELI_RAISE, DIR_N ), // 14 Takeoff Helipad3
375  AMD( 84, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 15 Bufferspace before helipad
376  AMD( 68, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 16 Bufferspace before helipad
377  AMD( 32, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 17 Get in position for Helipad1
378  AMD( 48, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 18 Get in position for Helipad2
379  AMD( 48, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_NE), // 19 Get in position for Helipad3
380  AMD( 40, 8, AMED_HELI_LOWER, DIR_N ), // 20 Land at Helipad1
381  AMD( 48, 8, AMED_HELI_LOWER, DIR_N ), // 21 Land at Helipad2
382  AMD( 48, 24, AMED_HELI_LOWER, DIR_N ), // 22 Land at Helipad3
383  AMD( 0, 22, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 23 Go to position for Hangarentrance in air
384  AMD( 0, 22, AMED_HELI_LOWER, DIR_N ), // 24 Land in front of hangar
385  AMD( 148, -8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 25 Fly around waiting for a landing spot (south-east)
386  AMD( 148, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 26 Fly around waiting for a landing spot (south-west)
387  AMD( 132, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 27 Fly around waiting for a landing spot (south-west)
388  AMD( 100, 24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 28 Fly around waiting for a landing spot (north-east)
389  AMD( 84, 8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 29 Fly around waiting for a landing spot (south-east)
390  AMD( 84, -8, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 30 Fly around waiting for a landing spot (south-west)
391  AMD( 100, -24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 31 Fly around waiting for a landing spot (north-west)
392  AMD( 132, -24, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 32 Fly around waiting for a landing spot (north-east)
393 };
394 
397  AMD( 31, 9, AMED_EXACTPOS, DIR_NE), // 0 - At oilrig terminal
398  AMD( 28, 9, AMED_HELI_RAISE, DIR_N ), // 1 - Take off (play sound)
399  AMD( 23, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 2 - In position above landing spot helicopter
400  AMD( 23, 9, AMED_HELI_LOWER, DIR_N ), // 3 - Land
401  AMD( 28, 9, 0, DIR_N ), // 4 - Goto terminal on ground
402  AMD( -31, 69, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 5 - circle #1 (north-east)
403  AMD( -31, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 6 - circle #2 (north-west)
404  AMD( 69, -49, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 7 - circle #3 (south-west)
405  AMD( 69, 9, AMED_NOSPDCLAMP | AMED_SLOWTURN, DIR_N ), // 8 - circle #4 (south)
406 };
407 
408 #undef AMD
409 
412 static const byte _airport_entries_dummy[] = {0, 1, 2, 3};
413 static const AirportFTAbuildup _airport_fta_dummy[] = {
414  { 0, TO_ALL, 0, 3},
415  { 1, TO_ALL, 0, 0},
416  { 2, TO_ALL, 0, 1},
417  { 3, TO_ALL, 0, 2},
418  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
419 };
420 
421 /* First element of terminals array tells us how many depots there are (to know size of array)
422  * this may be changed later when airports are moved to external file */
423 static const HangarTileTable _airport_depots_country[] = { {{3, 0}, DIR_SE, 0} };
424 static const byte _airport_terminal_country[] = {1, 2};
425 static const byte _airport_entries_country[] = {16, 15, 18, 17};
426 static const AirportFTAbuildup _airport_fta_country[] = {
427  { 0, HANGAR, NOTHING_block, 1 },
428  { 1, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM1, TERM1_block, 2 }, { 1, TERM2, 0, 4 }, { 1, HELITAKEOFF, 0, 19 }, { 1, TO_ALL, 0, 6 },
429  { 2, TERM1, TERM1_block, 1 },
430  { 3, TERM2, TERM2_block, 5 },
431  { 4, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 4, TERM2, 0, 5 }, { 4, HANGAR, 0, 1 }, { 4, TAKEOFF, 0, 6 }, { 4, HELITAKEOFF, 0, 1 },
432  { 5, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TO_ALL, 0, 4 },
433  { 6, 0, AIRPORT_BUSY_block, 7 },
434  /* takeoff */
435  { 7, TAKEOFF, AIRPORT_BUSY_block, 8 },
436  { 8, STARTTAKEOFF, NOTHING_block, 9 },
437  { 9, ENDTAKEOFF, NOTHING_block, 0 },
438  /* landing */
439  { 10, FLYING, NOTHING_block, 15 }, { 10, LANDING, 0, 11 }, { 10, HELILANDING, 0, 20 },
440  { 11, LANDING, AIRPORT_BUSY_block, 12 },
441  { 12, TO_ALL, AIRPORT_BUSY_block, 13 },
442  { 13, ENDLANDING, AIRPORT_BUSY_block, 14 }, { 13, TERM2, 0, 5 }, { 13, TO_ALL, 0, 14 },
443  { 14, TO_ALL, AIRPORT_BUSY_block, 1 },
444  /* In air */
445  { 15, TO_ALL, NOTHING_block, 16 },
446  { 16, TO_ALL, NOTHING_block, 17 },
447  { 17, TO_ALL, NOTHING_block, 18 },
448  { 18, TO_ALL, NOTHING_block, 10 },
449  { 19, HELITAKEOFF, NOTHING_block, 0 },
450  { 20, HELILANDING, AIRPORT_BUSY_block, 21 },
451  { 21, HELIENDLANDING, AIRPORT_BUSY_block, 1 },
452  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
453 };
454 
455 static const HangarTileTable _airport_depots_commuter[] = { {{4, 0}, DIR_SE, 0} };
456 static const byte _airport_terminal_commuter[] = { 1, 3 };
457 static const byte _airport_entries_commuter[] = {22, 21, 24, 23};
458 static const AirportFTAbuildup _airport_fta_commuter[] = {
459  { 0, HANGAR, NOTHING_block, 1 }, { 0, HELITAKEOFF, TAXIWAY_BUSY_block, 1 }, { 0, TO_ALL, 0, 1 },
460  { 1, TERMGROUP, 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, 37 }, { 1, TO_ALL, 0, 0 },
461  { 2, TERMGROUP, 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, TO_ALL, 0, 2 },
462  { 3, TERM1, TERM1_block, 8 }, { 3, HANGAR, 0, 8 }, { 3, TAKEOFF, 0, 8 }, { 3, TO_ALL, 0, 3 },
463  { 4, TERM2, TERM2_block, 9 }, { 4, HANGAR, 0, 9 }, { 4, TAKEOFF, 0, 9 }, { 4, TO_ALL, 0, 4 },
464  { 5, TERM3, TERM3_block, 10 }, { 5, HANGAR, 0, 10 }, { 5, TAKEOFF, 0, 10 }, { 5, TO_ALL, 0, 5 },
465  { 6, HELIPAD1, HELIPAD1_block, 6 }, { 6, HANGAR, TAXIWAY_BUSY_block, 9 }, { 6, HELITAKEOFF, 0, 35 },
466  { 7, HELIPAD2, HELIPAD2_block, 7 }, { 7, HANGAR, TAXIWAY_BUSY_block, 10 }, { 7, HELITAKEOFF, 0, 36 },
467  { 8, TERMGROUP, TAXIWAY_BUSY_block, 8 }, { 8, TAKEOFF, TAXIWAY_BUSY_block, 9 }, { 8, HANGAR, TAXIWAY_BUSY_block, 9 }, { 8, TERM1, TERM1_block, 3 }, { 8, TO_ALL, TAXIWAY_BUSY_block, 9 },
468  { 9, TERMGROUP, 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, TO_ALL, TAXIWAY_BUSY_block, 10 },
469  { 10, TERMGROUP, TAXIWAY_BUSY_block, 10 }, { 10, TERM3, TERM3_block, 5 }, { 10, HELIPAD1, 0, 9 }, { 10, HELIPAD2, HELIPAD2_block, 7 }, { 10, HELITAKEOFF, 0, 1 }, { 10, TAKEOFF, TAXIWAY_BUSY_block, 1 }, { 10, HANGAR, TAXIWAY_BUSY_block, 1 }, { 10, TO_ALL, TAXIWAY_BUSY_block, 9 },
470  { 11, TO_ALL, OUT_WAY_block, 12 },
471  /* takeoff */
472  { 12, TAKEOFF, RUNWAY_IN_OUT_block, 13 },
473  { 13, TO_ALL, RUNWAY_IN_OUT_block, 14 },
474  { 14, STARTTAKEOFF, RUNWAY_IN_OUT_block, 15 },
475  { 15, ENDTAKEOFF, NOTHING_block, 0 },
476  /* landing */
477  { 16, FLYING, NOTHING_block, 21 }, { 16, LANDING, IN_WAY_block, 17 }, { 16, HELILANDING, 0, 25 },
478  { 17, LANDING, RUNWAY_IN_OUT_block, 18 },
479  { 18, TO_ALL, RUNWAY_IN_OUT_block, 19 },
480  { 19, TO_ALL, RUNWAY_IN_OUT_block, 20 },
481  { 20, ENDLANDING, IN_WAY_block, 2 },
482  /* In Air */
483  { 21, TO_ALL, NOTHING_block, 22 },
484  { 22, TO_ALL, NOTHING_block, 23 },
485  { 23, TO_ALL, NOTHING_block, 24 },
486  { 24, TO_ALL, NOTHING_block, 16 },
487  /* Helicopter -- stay in air in special place as a buffer to choose from helipads */
488  { 25, HELILANDING, PRE_HELIPAD_block, 26 },
489  { 26, HELIENDLANDING, PRE_HELIPAD_block, 26 }, { 26, HELIPAD1, 0, 27 }, { 26, HELIPAD2, 0, 28 }, { 26, HANGAR, 0, 33 },
490  { 27, TO_ALL, NOTHING_block, 29 }, // helipad1 approach
491  { 28, TO_ALL, NOTHING_block, 30 },
492  /* landing */
493  { 29, TERMGROUP, NOTHING_block, 0 }, { 29, HELIPAD1, HELIPAD1_block, 6 },
494  { 30, TERMGROUP, NOTHING_block, 0 }, { 30, HELIPAD2, HELIPAD2_block, 7 },
495  /* Helicopter -- takeoff */
496  { 31, HELITAKEOFF, NOTHING_block, 0 },
497  { 32, HELITAKEOFF, NOTHING_block, 0 },
498  { 33, TO_ALL, TAXIWAY_BUSY_block, 34 }, // need to go to hangar when waiting in air
499  { 34, TO_ALL, TAXIWAY_BUSY_block, 1 },
500  { 35, TO_ALL, HELIPAD1_block, 31 },
501  { 36, TO_ALL, HELIPAD2_block, 32 },
502  { 37, HELITAKEOFF, NOTHING_block, 0 },
503  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
504 };
505 
506 static const HangarTileTable _airport_depots_city[] = { {{5, 0}, DIR_SE, 0} };
507 static const byte _airport_terminal_city[] = { 1, 3 };
508 static const byte _airport_entries_city[] = {26, 29, 27, 28};
509 static const AirportFTAbuildup _airport_fta_city[] = {
510  { 0, HANGAR, NOTHING_block, 1 }, { 0, TAKEOFF, OUT_WAY_block, 1 }, { 0, TO_ALL, 0, 1 },
511  { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, TO_ALL, 0, 7 }, // for all else, go to 7
512  { 2, TERM1, TERM1_block, 7 }, { 2, TAKEOFF, OUT_WAY_block, 7 }, { 2, TO_ALL, 0, 7 },
513  { 3, TERM2, TERM2_block, 5 }, { 3, TAKEOFF, OUT_WAY_block, 6 }, { 3, TO_ALL, 0, 6 },
514  { 4, TERM3, TERM3_block, 5 }, { 4, TAKEOFF, OUT_WAY_block, 5 }, { 4, TO_ALL, 0, 5 },
515  { 5, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, TO_ALL, 0, 6 },
516  { 6, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, TERM2_block, 3 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, TO_ALL, 0, 7 },
517  { 7, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, OUT_WAY_block, 8 }, { 7, HELITAKEOFF, 0, 22 }, { 7, HANGAR, 0, 1 }, { 7, TO_ALL, 0, 6 },
518  { 8, 0, OUT_WAY_block, 9 },
519  { 9, 0, RUNWAY_IN_OUT_block, 10 },
520  /* takeoff */
521  { 10, TAKEOFF, RUNWAY_IN_OUT_block, 11 },
522  { 11, STARTTAKEOFF, NOTHING_block, 12 },
523  { 12, ENDTAKEOFF, NOTHING_block, 0 },
524  /* landing */
525  { 13, FLYING, NOTHING_block, 18 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 23 },
526  { 14, LANDING, RUNWAY_IN_OUT_block, 15 },
527  { 15, TO_ALL, RUNWAY_IN_OUT_block, 17 },
528  { 16, TO_ALL, RUNWAY_IN_OUT_block, 17 }, // not used, left for compatibility
529  { 17, ENDLANDING, IN_WAY_block, 7 },
530  /* In Air */
531  { 18, TO_ALL, NOTHING_block, 25 },
532  { 19, TO_ALL, NOTHING_block, 20 },
533  { 20, TO_ALL, NOTHING_block, 21 },
534  { 21, TO_ALL, NOTHING_block, 13 },
535  /* helicopter */
536  { 22, HELITAKEOFF, NOTHING_block, 0 },
537  { 23, HELILANDING, IN_WAY_block, 24 },
538  { 24, HELIENDLANDING, IN_WAY_block, 17 },
539  { 25, TO_ALL, NOTHING_block, 20},
540  { 26, TO_ALL, NOTHING_block, 19},
541  { 27, TO_ALL, NOTHING_block, 28},
542  { 28, TO_ALL, NOTHING_block, 19},
543  { 29, TO_ALL, NOTHING_block, 26},
544  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
545 };
546 
547 static const HangarTileTable _airport_depots_metropolitan[] = { {{5, 0}, DIR_SE, 0} };
548 static const byte _airport_terminal_metropolitan[] = { 1, 3 };
549 static const byte _airport_entries_metropolitan[] = {20, 19, 22, 21};
550 static const AirportFTAbuildup _airport_fta_metropolitan[] = {
551  { 0, HANGAR, NOTHING_block, 1 },
552  { 1, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, TERM2, 0, 6 }, { 1, TERM3, 0, 6 }, { 1, TO_ALL, 0, 7 }, // for all else, go to 7
553  { 2, TERM1, TERM1_block, 7 },
554  { 3, TERM2, TERM2_block, 6 },
555  { 4, TERM3, TERM3_block, 5 },
556  { 5, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 5, TERM2, TERM2_block, 3 }, { 5, TERM3, TERM3_block, 4 }, { 5, TO_ALL, 0, 6 },
557  { 6, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 6, TERM2, TERM2_block, 3 }, { 6, TERM3, 0, 5 }, { 6, HANGAR, 0, 1 }, { 6, TO_ALL, 0, 7 },
558  { 7, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 7, TERM1, TERM1_block, 2 }, { 7, TAKEOFF, 0, 8 }, { 7, HELITAKEOFF, 0, 23 }, { 7, HANGAR, 0, 1 }, { 7, TO_ALL, 0, 6 },
559  { 8, 0, OUT_WAY_block, 9 },
560  { 9, 0, RUNWAY_OUT_block, 10 },
561  /* takeoff */
562  { 10, TAKEOFF, RUNWAY_OUT_block, 11 },
563  { 11, STARTTAKEOFF, NOTHING_block, 12 },
564  { 12, ENDTAKEOFF, NOTHING_block, 0 },
565  /* landing */
566  { 13, FLYING, NOTHING_block, 19 }, { 13, LANDING, 0, 14 }, { 13, HELILANDING, 0, 25 },
567  { 14, LANDING, RUNWAY_IN_block, 15 },
568  { 15, TO_ALL, RUNWAY_IN_block, 16 },
569  { 16, TERMGROUP, RUNWAY_IN_block, 0 }, { 16, ENDLANDING, IN_WAY_block, 17 },
570  { 17, TERMGROUP, RUNWAY_OUT_block, 0 }, { 17, ENDLANDING, IN_WAY_block, 18 },
571  { 18, ENDLANDING, IN_WAY_block, 27 },
572  /* In Air */
573  { 19, TO_ALL, NOTHING_block, 20 },
574  { 20, TO_ALL, NOTHING_block, 21 },
575  { 21, TO_ALL, NOTHING_block, 22 },
576  { 22, TO_ALL, NOTHING_block, 13 },
577  /* helicopter */
578  { 23, TO_ALL, NOTHING_block, 24 },
579  { 24, HELITAKEOFF, NOTHING_block, 0 },
580  { 25, HELILANDING, IN_WAY_block, 26 },
581  { 26, HELIENDLANDING, IN_WAY_block, 18 },
582  { 27, TERMGROUP, TAXIWAY_BUSY_block, 27 }, { 27, TERM1, TERM1_block, 2 }, { 27, TO_ALL, 0, 7 },
583  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
584 };
585 
586 static const HangarTileTable _airport_depots_international[] = { {{0, 3}, DIR_SE, 0}, {{6, 1}, DIR_SE, 1} };
587 static const byte _airport_terminal_international[] = { 2, 3, 3 };
588 static const byte _airport_entries_international[] = { 38, 37, 40, 39 };
589 static const AirportFTAbuildup _airport_fta_international[] = {
590  { 0, HANGAR, NOTHING_block, 2 }, { 0, TERMGROUP, TERM_GROUP1_block, 0 }, { 0, TERMGROUP, TERM_GROUP2_ENTER1_block, 1 }, { 0, HELITAKEOFF, AIRPORT_ENTRANCE_block, 2 }, { 0, TO_ALL, 0, 2 },
591  { 1, HANGAR, NOTHING_block, 3 }, { 1, TERMGROUP, HANGAR2_AREA_block, 1 }, { 1, HELITAKEOFF, HANGAR2_AREA_block, 3 }, { 1, TO_ALL, 0, 3 },
592  { 2, TERMGROUP, 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, 51 }, { 2, TO_ALL, 0, 23 },
593  { 3, TERMGROUP, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, HELITAKEOFF, 0, 52 }, { 3, TO_ALL, 0, 18 },
594  { 4, TERM1, TERM1_block, 23 }, { 4, HANGAR, AIRPORT_ENTRANCE_block, 23 }, { 4, TO_ALL, 0, 23 },
595  { 5, TERM2, TERM2_block, 24 }, { 5, HANGAR, AIRPORT_ENTRANCE_block, 24 }, { 5, TO_ALL, 0, 24 },
596  { 6, TERM3, TERM3_block, 25 }, { 6, HANGAR, AIRPORT_ENTRANCE_block, 25 }, { 6, TO_ALL, 0, 25 },
597  { 7, TERM4, TERM4_block, 16 }, { 7, HANGAR, HANGAR2_AREA_block, 16 }, { 7, TO_ALL, 0, 16 },
598  { 8, TERM5, TERM5_block, 17 }, { 8, HANGAR, HANGAR2_AREA_block, 17 }, { 8, TO_ALL, 0, 17 },
599  { 9, TERM6, TERM6_block, 18 }, { 9, HANGAR, HANGAR2_AREA_block, 18 }, { 9, TO_ALL, 0, 18 },
600  { 10, HELIPAD1, HELIPAD1_block, 10 }, { 10, HANGAR, HANGAR2_AREA_block, 16 }, { 10, HELITAKEOFF, 0, 47 },
601  { 11, HELIPAD2, HELIPAD2_block, 11 }, { 11, HANGAR, HANGAR2_AREA_block, 17 }, { 11, HELITAKEOFF, 0, 48 },
602  { 12, TO_ALL, TERM_GROUP2_ENTER1_block, 13 },
603  { 13, TO_ALL, TERM_GROUP2_ENTER1_block, 14 },
604  { 14, TO_ALL, TERM_GROUP2_ENTER2_block, 15 },
605  { 15, TO_ALL, TERM_GROUP2_ENTER2_block, 16 },
606  { 16, TERMGROUP, TERM_GROUP2_block, 0 }, { 16, TERM4, TERM4_block, 7 }, { 16, HELIPAD1, HELIPAD1_block, 10 }, { 16, HELITAKEOFF, HELIPAD1_block, 10 }, { 16, TO_ALL, 0, 17 },
607  { 17, TERMGROUP, 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, TO_ALL, 0, 18 },
608  { 18, TERMGROUP, TERM_GROUP2_block, 0 }, { 18, TERM6, TERM6_block, 9 }, { 18, TAKEOFF, 0, 19 }, { 18, HANGAR, HANGAR2_AREA_block, 3 }, { 18, TO_ALL, 0, 17 },
609  { 19, TO_ALL, TERM_GROUP2_EXIT1_block, 20 },
610  { 20, TO_ALL, TERM_GROUP2_EXIT1_block, 21 },
611  { 21, TO_ALL, TERM_GROUP2_EXIT2_block, 22 },
612  { 22, TO_ALL, TERM_GROUP2_EXIT2_block, 26 },
613  { 23, TERMGROUP, TERM_GROUP1_block, 0 }, { 23, TERM1, TERM1_block, 4 }, { 23, HANGAR, AIRPORT_ENTRANCE_block, 2 }, { 23, TO_ALL, 0, 24 },
614  { 24, TERMGROUP, TERM_GROUP1_block, 0 }, { 24, TERM2, TERM2_block, 5 }, { 24, TERM1, 0, 23 }, { 24, HANGAR, 0, 23 }, { 24, TO_ALL, 0, 25 },
615  { 25, TERMGROUP, TERM_GROUP1_block, 0 }, { 25, TERM3, TERM3_block, 6 }, { 25, TAKEOFF, 0, 26 }, { 25, TO_ALL, 0, 24 },
616  { 26, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 26, TAKEOFF, 0, 27 }, { 26, TO_ALL, 0, 25 },
617  { 27, TO_ALL, OUT_WAY_block, 28 },
618  /* takeoff */
619  { 28, TAKEOFF, OUT_WAY_block, 29 },
620  { 29, TO_ALL, RUNWAY_OUT_block, 30 },
621  { 30, STARTTAKEOFF, NOTHING_block, 31 },
622  { 31, ENDTAKEOFF, NOTHING_block, 0 },
623  /* landing */
624  { 32, FLYING, NOTHING_block, 37 }, { 32, LANDING, 0, 33 }, { 32, HELILANDING, 0, 41 },
625  { 33, LANDING, RUNWAY_IN_block, 34 },
626  { 34, TO_ALL, RUNWAY_IN_block, 35 },
627  { 35, TO_ALL, RUNWAY_IN_block, 36 },
628  { 36, ENDLANDING, IN_WAY_block, 36 }, { 36, TERMGROUP, TERM_GROUP1_block, 0 }, { 36, TERMGROUP, TERM_GROUP2_ENTER1_block, 1 }, { 36, TERM4, 0, 12 }, { 36, TERM5, 0, 12 }, { 36, TERM6, 0, 12 }, { 36, TO_ALL, 0, 2 },
629  /* In Air */
630  { 37, TO_ALL, NOTHING_block, 38 },
631  { 38, TO_ALL, NOTHING_block, 39 },
632  { 39, TO_ALL, NOTHING_block, 40 },
633  { 40, TO_ALL, NOTHING_block, 32 },
634  /* Helicopter -- stay in air in special place as a buffer to choose from helipads */
635  { 41, HELILANDING, PRE_HELIPAD_block, 42 },
636  { 42, HELIENDLANDING, PRE_HELIPAD_block, 42 }, { 42, HELIPAD1, 0, 43 }, { 42, HELIPAD2, 0, 44 }, { 42, HANGAR, 0, 49 },
637  { 43, TO_ALL, NOTHING_block, 45 },
638  { 44, TO_ALL, NOTHING_block, 46 },
639  /* landing */
640  { 45, TERMGROUP, NOTHING_block, 0 }, { 45, HELIPAD1, HELIPAD1_block, 10 },
641  { 46, TERMGROUP, NOTHING_block, 0 }, { 46, HELIPAD2, HELIPAD2_block, 11 },
642  /* Helicopter -- takeoff */
643  { 47, HELITAKEOFF, NOTHING_block, 0 },
644  { 48, HELITAKEOFF, NOTHING_block, 0 },
645  { 49, TO_ALL, HANGAR2_AREA_block, 50 }, // need to go to hangar when waiting in air
646  { 50, TO_ALL, HANGAR2_AREA_block, 3 },
647  { 51, HELITAKEOFF, NOTHING_block, 0 },
648  { 52, HELITAKEOFF, NOTHING_block, 0 },
649  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
650 };
651 
652 /* intercontinental */
653 static const HangarTileTable _airport_depots_intercontinental[] = { {{0, 5}, DIR_SE, 0}, {{8, 4}, DIR_SE, 1} };
654 static const byte _airport_terminal_intercontinental[] = { 2, 4, 4 };
655 static const byte _airport_entries_intercontinental[] = { 44, 43, 46, 45 };
656 static const AirportFTAbuildup _airport_fta_intercontinental[] = {
657  { 0, HANGAR, NOTHING_block, 2 }, { 0, TERMGROUP, HANGAR1_AREA_block | TERM_GROUP1_block, 0 }, { 0, TERMGROUP, HANGAR1_AREA_block | TERM_GROUP1_block, 1 }, { 0, TAKEOFF, HANGAR1_AREA_block | TERM_GROUP1_block, 2 }, { 0, TO_ALL, 0, 2 },
658  { 1, HANGAR, NOTHING_block, 3 }, { 1, TERMGROUP, HANGAR2_AREA_block, 1 }, { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, TO_ALL, 0, 3 },
659  { 2, TERMGROUP, HANGAR1_AREA_block, 0 }, { 2, TERMGROUP, TERM_GROUP1_block, 0 }, { 2, TERMGROUP, 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, TO_ALL, 0, 27 },
660  { 3, TERMGROUP, HANGAR2_AREA_block, 0 }, { 3, HANGAR, 0, 1 }, { 3, HELITAKEOFF, 0, 75 }, {3, TAKEOFF, 0, 59}, { 3, TO_ALL, 0, 20 },
661  { 4, TERM1, TERM1_block, 26 }, { 4, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 26 }, { 4, TO_ALL, 0, 26 },
662  { 5, TERM2, TERM2_block, 27 }, { 5, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 27 }, { 5, TO_ALL, 0, 27 },
663  { 6, TERM3, TERM3_block, 28 }, { 6, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 28 }, { 6, TO_ALL, 0, 28 },
664  { 7, TERM4, TERM4_block, 29 }, { 7, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 7, TO_ALL, 0, 29 },
665  { 8, TERM5, TERM5_block, 18 }, { 8, HANGAR, HANGAR2_AREA_block, 18 }, { 8, TO_ALL, 0, 18 },
666  { 9, TERM6, TERM6_block, 19 }, { 9, HANGAR, HANGAR2_AREA_block, 19 }, { 9, TO_ALL, 0, 19 },
667  { 10, TERM7, TERM7_block, 20 }, { 10, HANGAR, HANGAR2_AREA_block, 20 }, { 10, TO_ALL, 0, 20 },
668  { 11, TERM8, TERM8_block, 21 }, { 11, HANGAR, HANGAR2_AREA_block, 21 }, { 11, TO_ALL, 0, 21 },
669  { 12, HELIPAD1, HELIPAD1_block, 12 }, { 12, HANGAR, 0, 70 }, { 12, HELITAKEOFF, 0, 72 },
670  { 13, HELIPAD2, HELIPAD2_block, 13 }, { 13, HANGAR, 0, 71 }, { 13, HELITAKEOFF, 0, 73 },
671  { 14, TO_ALL, TERM_GROUP2_ENTER1_block, 15 },
672  { 15, TO_ALL, TERM_GROUP2_ENTER1_block, 16 },
673  { 16, TO_ALL, TERM_GROUP2_ENTER2_block, 17 },
674  { 17, TO_ALL, TERM_GROUP2_ENTER2_block, 18 },
675  { 18, TERMGROUP, TERM_GROUP2_block, 0 }, { 18, TERM5, TERM5_block, 8 }, { 18, TAKEOFF, 0, 19 }, { 18, HELITAKEOFF, HELIPAD1_block, 19 }, { 18, TO_ALL, TERM_GROUP2_EXIT1_block, 19 },
676  { 19, TERMGROUP, TERM_GROUP2_block, 0 }, { 19, TERM6, TERM6_block, 9 }, { 19, TERM5, 0, 18 }, { 19, TAKEOFF, 0, 57 }, { 19, HELITAKEOFF, HELIPAD1_block, 20 }, { 19, TO_ALL, TERM_GROUP2_EXIT1_block, 20 }, // add exit to runway out 2
677  { 20, TERMGROUP, 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, TO_ALL, TERM_GROUP2_EXIT1_block, 21 },
678  { 21, TERMGROUP, 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, TO_ALL, TERM_GROUP2_EXIT1_block, 22 },
679  { 22, TERMGROUP, 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, TO_ALL, 0, 23 },
680  { 23, TO_ALL, TERM_GROUP2_EXIT1_block, 70 },
681  { 24, TO_ALL, TERM_GROUP2_EXIT2_block, 25 },
682  { 25, TERMGROUP, TERM_GROUP2_EXIT2_block, 0 }, { 25, HANGAR, HANGAR1_AREA_block | TERM_GROUP1_block, 29 }, { 25, TO_ALL, 0, 29 },
683  { 26, TERMGROUP, 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, TO_ALL, 0, 27 },
684  { 27, TERMGROUP, 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, TO_ALL, 0, 28 },
685  { 28, TERMGROUP, 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, TO_ALL, 0, 29 },
686  { 29, TERMGROUP, TERM_GROUP1_block, 0 }, { 29, TERM4, TERM4_block, 7 }, { 29, HANGAR, HANGAR1_AREA_block, 27 }, { 29, TAKEOFF, 0, 30 }, { 29, TO_ALL, 0, 28 },
687  { 30, TO_ALL, OUT_WAY_block2, 31 },
688  { 31, TO_ALL, OUT_WAY_block, 32 },
689  /* takeoff */
690  { 32, TAKEOFF, RUNWAY_OUT_block, 33 },
691  { 33, TO_ALL, RUNWAY_OUT_block, 34 },
692  { 34, STARTTAKEOFF, NOTHING_block, 35 },
693  { 35, ENDTAKEOFF, NOTHING_block, 0 },
694  /* landing */
695  { 36, TO_ALL, 0, 0 },
696  { 37, LANDING, RUNWAY_IN_block, 38 },
697  { 38, TO_ALL, RUNWAY_IN_block, 39 },
698  { 39, TO_ALL, RUNWAY_IN_block, 40 },
699  { 40, ENDLANDING, RUNWAY_IN_block, 41 },
700  { 41, TO_ALL, IN_WAY_block, 42 },
701  { 42, TERMGROUP, IN_WAY_block, 0 }, { 42, TERMGROUP, TERM_GROUP1_block, 0 }, { 42, TERMGROUP, TERM_GROUP1_block, 1 }, { 42, HANGAR, 0, 2 }, { 42, TO_ALL, 0, 26 },
702  /* In Air */
703  { 43, TO_ALL, 0, 44 },
704  { 44, FLYING, 0, 45 }, { 44, HELILANDING, 0, 47 }, { 44, LANDING, 0, 69 }, { 44, TO_ALL, 0, 45 },
705  { 45, TO_ALL, 0, 46 },
706  { 46, FLYING, 0, 43 }, { 46, LANDING, 0, 76 }, { 46, TO_ALL, 0, 43 },
707  /* Helicopter -- stay in air in special place as a buffer to choose from helipads */
708  { 47, HELILANDING, PRE_HELIPAD_block, 48 },
709  { 48, HELIENDLANDING, PRE_HELIPAD_block, 48 }, { 48, HELIPAD1, 0, 49 }, { 48, HELIPAD2, 0, 50 }, { 48, HANGAR, 0, 55 },
710  { 49, TO_ALL, NOTHING_block, 51 },
711  { 50, TO_ALL, NOTHING_block, 52 },
712  /* landing */
713  { 51, TERMGROUP, NOTHING_block, 0 }, { 51, HELIPAD1, HELIPAD1_block, 12 }, { 51, HANGAR, 0, 55 }, { 51, TO_ALL, 0, 12 },
714  { 52, TERMGROUP, NOTHING_block, 0 }, { 52, HELIPAD2, HELIPAD2_block, 13 }, { 52, HANGAR, 0, 55 }, { 52, TO_ALL, 0, 13 },
715  /* Helicopter -- takeoff */
716  { 53, HELITAKEOFF, NOTHING_block, 0 },
717  { 54, HELITAKEOFF, NOTHING_block, 0 },
718  { 55, TO_ALL, HANGAR2_AREA_block, 56 }, // need to go to hangar when waiting in air
719  { 56, TO_ALL, HANGAR2_AREA_block, 3 },
720  /* runway 2 out support */
721  { 57, TERMGROUP, OUT_WAY2_block, 0 }, { 57, TAKEOFF, 0, 58 }, { 57, TO_ALL, 0, 58 },
722  { 58, TO_ALL, OUT_WAY2_block, 59 },
723  { 59, TAKEOFF, RUNWAY_OUT2_block, 60 }, // takeoff
724  { 60, TO_ALL, RUNWAY_OUT2_block, 61 },
725  { 61, STARTTAKEOFF, NOTHING_block, 62 },
726  { 62, ENDTAKEOFF, NOTHING_block, 0 },
727  /* runway 2 in support */
728  { 63, LANDING, RUNWAY_IN2_block, 64 },
729  { 64, TO_ALL, RUNWAY_IN2_block, 65 },
730  { 65, TO_ALL, RUNWAY_IN2_block, 66 },
731  { 66, ENDLANDING, RUNWAY_IN2_block, 0 }, { 66, TERMGROUP, 0, 1 }, { 66, TERMGROUP, 0, 0 }, { 66, TO_ALL, 0, 67 },
732  { 67, TO_ALL, IN_WAY2_block, 68 },
733  { 68, TERMGROUP, IN_WAY2_block, 0 }, { 68, TERMGROUP, TERM_GROUP2_block, 1 }, { 68, TERMGROUP, TERM_GROUP1_block, 0 }, { 68, HANGAR, HANGAR2_AREA_block, 22 }, { 68, TO_ALL, 0, 22 },
734  { 69, TERMGROUP, RUNWAY_IN2_block, 0 }, { 69, TO_ALL, RUNWAY_IN2_block, 63 },
735  { 70, TERMGROUP, TERM_GROUP2_EXIT1_block, 0 }, { 70, HELIPAD1, HELIPAD1_block, 12 }, { 70, HELITAKEOFF, HELIPAD1_block, 12 }, { 70, TO_ALL, 0, 71 },
736  { 71, TERMGROUP, TERM_GROUP2_EXIT1_block, 0 }, { 71, HELIPAD2, HELIPAD2_block, 13 }, { 71, HELITAKEOFF, HELIPAD1_block, 12 }, { 71, TO_ALL, 0, 24 },
737  { 72, TO_ALL, HELIPAD1_block, 53 },
738  { 73, TO_ALL, HELIPAD2_block, 54 },
739  { 74, HELITAKEOFF, NOTHING_block, 0 },
740  { 75, HELITAKEOFF, NOTHING_block, 0 },
741  { 76, TERMGROUP, RUNWAY_IN_block, 0 }, { 76, TO_ALL, RUNWAY_IN_block, 37 },
742  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
743 };
744 
745 
746 /* heliports, oilrigs don't have depots */
747 static const byte _airport_entries_heliport[] = { 7, 7, 7, 7 };
748 static const AirportFTAbuildup _airport_fta_heliport[] = {
749  { 0, HELIPAD1, HELIPAD1_block, 1 },
750  { 1, HELITAKEOFF, NOTHING_block, 0 }, // takeoff
751  { 2, TERMGROUP, AIRPORT_BUSY_block, 0 }, { 2, HELILANDING, 0, 3 }, { 2, HELITAKEOFF, 0, 1 },
752  { 3, HELILANDING, AIRPORT_BUSY_block, 4 },
753  { 4, HELIENDLANDING, AIRPORT_BUSY_block, 4 }, { 4, HELIPAD1, HELIPAD1_block, 0 }, { 4, HELITAKEOFF, 0, 2 },
754  /* In Air */
755  { 5, TO_ALL, NOTHING_block, 6 },
756  { 6, TO_ALL, NOTHING_block, 7 },
757  { 7, TO_ALL, NOTHING_block, 8 },
758  { 8, FLYING, NOTHING_block, 5 }, { 8, HELILANDING, HELIPAD1_block, 2 }, // landing
759  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
760 };
761 #define _airport_entries_oilrig _airport_entries_heliport
762 #define _airport_fta_oilrig _airport_fta_heliport
763 
764 /* helidepots */
765 static const HangarTileTable _airport_depots_helidepot[] = { {{1, 0}, DIR_SE, 0} };
766 static const byte _airport_entries_helidepot[] = { 4, 4, 4, 4 };
767 static const AirportFTAbuildup _airport_fta_helidepot[] = {
768  { 0, HANGAR, NOTHING_block, 1 },
769  { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELIPAD1, HELIPAD1_block, 14 }, { 1, HELITAKEOFF, 0, 15 }, { 1, TO_ALL, 0, 0 },
770  { 2, FLYING, NOTHING_block, 3 }, { 2, HELILANDING, PRE_HELIPAD_block, 7 }, { 2, HANGAR, 0, 12 }, { 2, HELITAKEOFF, NOTHING_block, 16 },
771  /* In Air */
772  { 3, 0, NOTHING_block, 4 },
773  { 4, 0, NOTHING_block, 5 },
774  { 5, 0, NOTHING_block, 6 },
775  { 6, 0, NOTHING_block, 2 },
776  /* Helicopter -- stay in air in special place as a buffer to choose from helipads */
777  { 7, HELILANDING, PRE_HELIPAD_block, 8 },
778  { 8, HELIENDLANDING, PRE_HELIPAD_block, 8 }, { 8, HELIPAD1, 0, 9 }, { 8, HANGAR, 0, 12 }, { 8, TO_ALL, 0, 2 },
779  { 9, 0, NOTHING_block, 10 },
780  /* landing */
781  { 10, TERMGROUP, NOTHING_block, 10 }, { 10, HELIPAD1, HELIPAD1_block, 14 }, { 10, HANGAR, 0, 1 }, { 10, TO_ALL, 0, 14 },
782  /* Helicopter -- takeoff */
783  { 11, HELITAKEOFF, NOTHING_block, 0 },
784  { 12, TO_ALL, HANGAR2_AREA_block, 13 }, // need to go to hangar when waiting in air
785  { 13, TO_ALL, HANGAR2_AREA_block, 1 },
786  { 14, HELIPAD1, HELIPAD1_block, 14 }, { 14, HANGAR, 0, 1 }, { 14, HELITAKEOFF, 0, 17 },
787  { 15, HELITAKEOFF, NOTHING_block, 0 }, // takeoff outside depot
788  { 16, HELITAKEOFF, 0, 14 },
789  { 17, TO_ALL, NOTHING_block, 11 },
790  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
791 };
792 
793 /* helistation */
794 static const HangarTileTable _airport_depots_helistation[] = { {{0, 0}, DIR_SE, 0} };
795 static const byte _airport_entries_helistation[] = { 25, 25, 25, 25 };
796 static const AirportFTAbuildup _airport_fta_helistation[] = {
797  { 0, HANGAR, NOTHING_block, 8 }, { 0, HELIPAD1, 0, 1 }, { 0, HELIPAD2, 0, 1 }, { 0, HELIPAD3, 0, 1 }, { 0, HELITAKEOFF, 0, 1 }, { 0, TO_ALL, 0, 0 },
798  { 1, TERMGROUP, HANGAR2_AREA_block, 0 }, { 1, HANGAR, 0, 0 }, { 1, HELITAKEOFF, 0, 3 }, { 1, TO_ALL, 0, 4 },
799  /* landing */
800  { 2, FLYING, NOTHING_block, 28 }, { 2, HELILANDING, 0, 15 }, { 2, TO_ALL, 0, 28 },
801  /* helicopter side */
802  { 3, HELITAKEOFF, NOTHING_block, 0 }, // helitakeoff outside hangar2
803  { 4, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 4, HANGAR, HANGAR2_AREA_block, 1 }, { 4, HELITAKEOFF, 0, 1 }, { 4, TO_ALL, 0, 5 },
804  { 5, TERMGROUP, TAXIWAY_BUSY_block, 0 }, { 5, HELIPAD1, HELIPAD1_block, 6 }, { 5, HELIPAD2, HELIPAD2_block, 7 }, { 5, HELIPAD3, HELIPAD3_block, 8 }, { 5, TO_ALL, 0, 4 },
805  { 6, HELIPAD1, HELIPAD1_block, 5 }, { 6, HANGAR, HANGAR2_AREA_block, 5 }, { 6, HELITAKEOFF, 0, 9 }, { 6, TO_ALL, 0, 6 },
806  { 7, HELIPAD2, HELIPAD2_block, 5 }, { 7, HANGAR, HANGAR2_AREA_block, 5 }, { 7, HELITAKEOFF, 0, 10 }, { 7, TO_ALL, 0, 7 },
807  { 8, HELIPAD3, HELIPAD3_block, 5 }, { 8, HANGAR, HANGAR2_AREA_block, 5 }, { 8, HELITAKEOFF, 0, 11 }, { 8, TO_ALL, 0, 8 },
808  { 9, 0, HELIPAD1_block, 12 },
809  { 10, TO_ALL, HELIPAD2_block, 13 },
810  { 11, TO_ALL, HELIPAD3_block, 14 },
811  { 12, HELITAKEOFF, NOTHING_block, 0 },
812  { 13, HELITAKEOFF, NOTHING_block, 0 },
813  { 14, HELITAKEOFF, NOTHING_block, 0 },
814  /* heli - in flight moves */
815  { 15, HELILANDING, PRE_HELIPAD_block, 16 },
816  { 16, HELIENDLANDING, PRE_HELIPAD_block, 16 }, { 16, HELIPAD1, 0, 17 }, { 16, HELIPAD2, 0, 18 }, { 16, HELIPAD3, 0, 19 }, { 16, HANGAR, 0, 23 },
817  { 17, TO_ALL, NOTHING_block, 20 },
818  { 18, TO_ALL, NOTHING_block, 21 },
819  { 19, TO_ALL, NOTHING_block, 22 },
820  /* heli landing */
821  { 20, TERMGROUP, NOTHING_block, 0 }, { 20, HELIPAD1, HELIPAD1_block, 6 }, { 20, HANGAR, 0, 23 }, { 20, TO_ALL, 0, 6 },
822  { 21, TERMGROUP, NOTHING_block, 0 }, { 21, HELIPAD2, HELIPAD2_block, 7 }, { 21, HANGAR, 0, 23 }, { 21, TO_ALL, 0, 7 },
823  { 22, TERMGROUP, NOTHING_block, 0 }, { 22, HELIPAD3, HELIPAD3_block, 8 }, { 22, HANGAR, 0, 23 }, { 22, TO_ALL, 0, 8 },
824  { 23, TO_ALL, HANGAR2_AREA_block, 24 }, // need to go to helihangar when waiting in air
825  { 24, TO_ALL, HANGAR2_AREA_block, 1 },
826  { 25, TO_ALL, NOTHING_block, 26 },
827  { 26, TO_ALL, NOTHING_block, 27 },
828  { 27, TO_ALL, NOTHING_block, 2 },
829  { 28, TO_ALL, NOTHING_block, 29 },
830  { 29, TO_ALL, NOTHING_block, 30 },
831  { 30, TO_ALL, NOTHING_block, 31 },
832  { 31, TO_ALL, NOTHING_block, 32 },
833  { 32, TO_ALL, NOTHING_block, 25 },
834  { MAX_ELEMENTS, TO_ALL, 0, 0 } // end marker. DO NOT REMOVE
835 };
836 
837 #endif /* AIRPORT_MOVEMENT_H */
Airplane wants to leave the airport.
Definition: airport.h:73
Heading for hangar.
Definition: airport.h:64
Heading for terminal 1.
Definition: airport.h:65
Airplane has reached end-point of the take-off runway.
Definition: airport.h:75
Heading for helipad 2.
Definition: airport.h:72
Takeoff movement.
Definition: airport.h:51
static const uint64 HELIPAD1_block
Block belonging to helipad 1.
Definition: airport.h:97
A single location on an airport where aircraft can move to.
Definition: airport.h:133
static const uint64 TERM6_block
Block belonging to terminal 6.
Definition: airport.h:96
No speed restrictions.
Definition: airport.h:50
Heading for terminal 6.
Definition: airport.h:70
West.
Helicopter landing.
Definition: airport.h:57
Taxiing at the airport.
Definition: airport.h:55
static const AirportMovingData _airport_moving_data_oilrig[9]
Oilrig.
static const AirportMovingData _airport_moving_data_heliport[9]
Heliport (heliport).
State machine input struct (from external file, etc.) Finite sTate mAchine –> FTA.
static const AirportMovingData _airport_moving_data_commuter[38]
Commuter Airfield (small) 5x4.
Vehicle is flying in the air.
Definition: airport.h:77
static const AirportMovingData _airport_moving_data_metropolitan[28]
Metropolitan Airport (metropolitan) - 2 runways.
A list of all hangar tiles in an airport.
static const uint64 HELIPAD3_block
Block belonging to helipad 3.
Definition: airport.h:119
Helicopter wants to land.
Definition: airport.h:80
byte next
Next position from this position.
Go exactly to the destination coordinates.
Definition: airport.h:54
Southwest.
North.
static const AirportMovingData _airport_moving_data_city[]
City Airport (large) 6x6.
Holding pattern movement (above the airport).
Definition: airport.h:58
static const uint64 HELIPAD2_block
Block belonging to helipad 2.
Definition: airport.h:98
Turn slowly (mostly used in the air).
Definition: airport.h:52
static const AirportMovingData _airport_moving_data_international[53]
International Airport (international) - 2 runways, 6 terminals, dedicated helipad.
#define AMD(x, y, flags, dir)
Airport movement data creation macro.
Heading for terminal 7.
Definition: airport.h:82
East.
Southeast.
Heading for terminal 2.
Definition: airport.h:66
byte position
The position that an airplane is at.
Heading for helipad 3.
Definition: airport.h:84
Heading for terminal 3.
Definition: airport.h:67
Airplane has arrived at a runway for take-off.
Definition: airport.h:74
static const AirportMovingData _airport_moving_data_helistation[33]
HeliDepot 2x2 (heliport).
byte heading
The current orders (eg. TAKEOFF, HANGAR, ENDLANDING, etc.).
Aircraft is looking for a free terminal in a terminalgroup.
Definition: airport.h:86
static const AirportMovingData _airport_moving_data_intercontinental[77]
Intercontinental Airport - 4 runways, 8 terminals, 2 dedicated helipads.
Go in this direction for every target.
Definition: airport.h:63
static const uint MAX_ELEMENTS
maximum number of aircraft positions at airport
Definition: airport.h:21
static const uint64 TERM7_block
Block belonging to terminal 7.
Definition: airport.h:117
Airplane wants to land.
Definition: airport.h:78
static const uint64 TERM1_block
Movement Blocks on Airports blocks (eg_airport_flags).
Definition: airport.h:91
Heading for terminal 8.
Definition: airport.h:83
static const uint64 TERM8_block
Block belonging to terminal 8.
Definition: airport.h:118
Northwest.
static const uint64 TERM4_block
Block belonging to terminal 4.
Definition: airport.h:94
Northeast.
Heading for terminal 5.
Definition: airport.h:69
static const AirportMovingData _airport_moving_data_helidepot[18]
HeliDepot 2x2 (heliport).
static const uint64 RUNWAY_OUT2_block
Definition: airport.h:124
Heading for terminal 4.
Definition: airport.h:68
Landing onto landing strip.
Definition: airport.h:53
Heading for helipad 1.
Definition: airport.h:71
Helicopter wants to finish landing.
Definition: airport.h:81
Helicopter take-off.
Definition: airport.h:56
static const AirportMovingData _airport_moving_data_dummy[]
Dummy airport.
static const uint64 TERM3_block
Block belonging to terminal 3.
Definition: airport.h:93
static const uint64 TERM2_block
Block belonging to terminal 2.
Definition: airport.h:92
static const AirportMovingData _airport_moving_data_country[22]
Country Airfield (small) 4x3.
Airplane wants to finish landing.
Definition: airport.h:79
uint64 block
The block this position is on on the airport (st->airport.flags).
Helicopter wants to leave the airport.
Definition: airport.h:76
static const uint64 TERM5_block
Block belonging to terminal 5.
Definition: airport.h:95