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/>.
10 /** @file airport_movement.h Heart of the airports and their finite state machines */
12 #ifndef AIRPORT_MOVEMENT_H
13 #define AIRPORT_MOVEMENT_H
16 ///////////////////////////////////////////////////////////////////////
17 /////**********Movement Machine on Airports*********************///////
18 static const byte _airport_entries_dummy
[] = {0, 1, 2, 3};
19 static const AirportFTA::Position _airport_fta_dummy
[] = {
20 { 0, 0, 3, 0, 0, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
},
21 { 0, 0, 0, 0, 96, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
},
22 { 0, 0, 1, 96, 96, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
},
23 { 0, 0, 2, 96, 0, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
},
26 static const AirportFTA::Hangar _airport_depots_country
[] = { { 3, 0, DIR_SE
, 0 } };
27 static const byte _airport_terminal_country
[] = { 1, 0, 2 };
28 static const byte _airport_entries_country
[] = {16, 15, 18, 17};
30 static const AirportFTA::Transition _airport_fta_country_1
[] = {
31 { 0, HANGAR
, 0, false },
32 { TERM1_block
, TERM1
, 2, false },
33 { 0, TERM2
, 4, false },
34 { 0, HELITAKEOFF
, 19, false },
37 static const AirportFTA::Transition _airport_fta_country_4
[] = {
38 { 0, TERM2
, 5, false },
39 { 0, HANGAR
, 1, false },
40 { 0, TAKEOFF
, 6, false },
41 { 0, HELITAKEOFF
, 1, true }
43 static const AirportFTA::Transition _airport_fta_country_5
[] = {
44 { TERM2_block
, TERM2
, 3, false },
47 static const AirportFTA::Transition _airport_fta_country_10
[] = {
48 { 0, LANDING
, 11, false },
49 { 0, HELILANDING
, 20, true }
51 static const AirportFTA::Transition _airport_fta_country_13
[] = {
52 { 0, TERM2
, 5, false },
55 static const AirportFTA::Position _airport_fta_country
[22] = {
56 { NOTHING_block
, HANGAR
, 1, 53, 3, DIR_SE
| AMED_EXACTPOS
, NULL
}, // 00 In Hangar
57 { AIRPORT_BUSY_block
, 255, 0, 53, 27, DIR_N
, _airport_fta_country_1
}, // 01 Taxi to right outside depot
58 { TERM1_block
, TERM1
, 1, 32, 23, DIR_NW
| AMED_EXACTPOS
, NULL
}, // 02 Terminal 1
59 { TERM2_block
, TERM2
, 5, 10, 23, DIR_NW
| AMED_EXACTPOS
, NULL
}, // 03 Terminal 2
60 { AIRPORT_BUSY_block
, 255, 0, 43, 37, DIR_N
, _airport_fta_country_4
}, // 04 Going towards terminal 2
61 { AIRPORT_BUSY_block
, 255, 0, 24, 37, DIR_N
, _airport_fta_country_5
}, // 05 Going towards terminal 2
62 { AIRPORT_BUSY_block
, 0, 7, 53, 37, DIR_N
, NULL
}, // 06 Going for takeoff
64 { AIRPORT_BUSY_block
, TAKEOFF
, 8, 61, 40, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 07 Taxi to start of runway (takeoff)
65 { NOTHING_block
, STARTTAKEOFF
, 9, 3, 40, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 08 Accelerate to end of runway
66 { NOTHING_block
, ENDTAKEOFF
, 0, -79, 40, DIR_N
| AMED_NOSPDCLAMP
| AMED_TAKEOFF
, NULL
}, // 09 Take off
68 { NOTHING_block
, FLYING
, 15, 177, 40, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_country_10
}, // 10 Fly to landing position in air
69 { AIRPORT_BUSY_block
, LANDING
, 12, 56, 40, DIR_N
| AMED_NOSPDCLAMP
| AMED_LAND
, NULL
}, // 11 Going down for land
70 { AIRPORT_BUSY_block
, 0, 13, 3, 40, DIR_N
| AMED_NOSPDCLAMP
| AMED_BRAKE
, NULL
}, // 12 Just landed, brake until end of runway
71 { AIRPORT_BUSY_block
, ENDLANDING
, 14, 7, 40, DIR_N
, _airport_fta_country_13
}, // 13 Just landed, turn around and taxi 1 square
72 { AIRPORT_BUSY_block
, 0, 1, 53, 40, DIR_N
, NULL
}, // 14 Taxi from runway to crossing
74 { NOTHING_block
, 0, 16, 1, 193, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 15 Fly around waiting for a landing spot (north-east)
75 { NOTHING_block
, 0, 17, 1, 1, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 16 Fly around waiting for a landing spot (north-west)
76 { NOTHING_block
, 0, 18, 257, 1, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 17 Fly around waiting for a landing spot (south-west)
77 { NOTHING_block
, 0, 10, 273, 47, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 18 Fly around waiting for a landing spot (south)
78 { NOTHING_block
, HELITAKEOFF
, 0, 44, 37, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 19 Helicopter takeoff
79 { AIRPORT_BUSY_block
, HELILANDING
, 21, 44, 40, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 20 In position above landing spot helicopter
80 { AIRPORT_BUSY_block
, HELIENDLANDING
, 1, 44, 40, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 21 Helicopter landing
83 static const AirportFTA::Hangar _airport_depots_commuter
[] = { { 4, 0, DIR_SE
, 0 } };
84 static const byte _airport_terminal_commuter
[] = { 1, 0, 3 };
85 static const byte _airport_entries_commuter
[] = {22, 21, 24, 23};
87 static const AirportFTA::Transition _airport_fta_commuter_0
[] = {
88 { HELIPAD2_block
, HELITAKEOFF
, 1, false },
91 static const AirportFTA::Transition _airport_fta_commuter_1
[] = {
92 { 0, HANGAR
, 0, false },
93 { 0, TAKEOFF
, 11, false },
94 { TAXIWAY_BUSY_block
, TERM1
, 10, false },
95 { TAXIWAY_BUSY_block
, TERM2
, 10, false },
96 { TAXIWAY_BUSY_block
, TERM3
, 10, false },
97 { TAXIWAY_BUSY_block
, HELIPAD1
, 10, false },
98 { TAXIWAY_BUSY_block
, HELIPAD2
, 10, false },
99 { TAXIWAY_BUSY_block
, HELITAKEOFF
, 10, false },
102 static const AirportFTA::Transition _airport_fta_commuter_2
[] = {
103 { 0, HANGAR
, 8, false },
104 { 0, TERM1
, 8, false },
105 { 0, TERM2
, 8, false },
106 { 0, TERM3
, 8, false },
107 { 0, HELIPAD1
, 8, false },
108 { 0, HELIPAD2
, 8, false },
109 { 0, HELITAKEOFF
, 8, false },
112 static const AirportFTA::Transition _airport_fta_commuter_3
[] = {
113 { 0, HANGAR
, 8, false },
114 { 0, TAKEOFF
, 8, false },
117 static const AirportFTA::Transition _airport_fta_commuter_4
[] = {
118 { 0, HANGAR
, 9, false },
119 { 0, TAKEOFF
, 9, false },
122 static const AirportFTA::Transition _airport_fta_commuter_5
[] = {
123 { 0, HANGAR
, 10, false },
124 { 0, TAKEOFF
, 10, false },
127 static const AirportFTA::Transition _airport_fta_commuter_6
[] = {
128 { TAXIWAY_BUSY_block
, HANGAR
, 9, false },
129 { 0, HELITAKEOFF
, 35, true }
131 static const AirportFTA::Transition _airport_fta_commuter_7
[] = {
132 { TAXIWAY_BUSY_block
, HANGAR
, 10, false },
133 { 0, HELITAKEOFF
, 36, true }
135 static const AirportFTA::Transition _airport_fta_commuter_8
[] = {
136 { TAXIWAY_BUSY_block
, TAKEOFF
, 9, false },
137 { TAXIWAY_BUSY_block
, HANGAR
, 9, false },
138 { TERM1_block
, TERM1
, 3, false },
139 { TAXIWAY_BUSY_block
, 0, 9, true }
141 static const AirportFTA::Transition _airport_fta_commuter_9
[] = {
142 { TAXIWAY_BUSY_block
, TAKEOFF
, 10, false },
143 { TAXIWAY_BUSY_block
, HANGAR
, 10, false },
144 { TERM2_block
, TERM2
, 4, false },
145 { HELIPAD1_block
, HELIPAD1
, 6, false },
146 { HELIPAD1_block
, HELITAKEOFF
, 6, false },
147 { TAXIWAY_BUSY_block
, TERM1
, 8, false },
148 { TAXIWAY_BUSY_block
, 0, 10, true }
150 static const AirportFTA::Transition _airport_fta_commuter_10
[] = {
151 { TERM3_block
, TERM3
, 5, false },
152 { 0, HELIPAD1
, 9, false },
153 { HELIPAD2_block
, HELIPAD2
, 7, false },
154 { HELIPAD2_block
, HELITAKEOFF
, 7, false },
155 { TAXIWAY_BUSY_block
, TAKEOFF
, 1, false },
156 { TAXIWAY_BUSY_block
, HANGAR
, 1, false },
157 { TAXIWAY_BUSY_block
, 0, 9, true }
159 static const AirportFTA::Transition _airport_fta_commuter_16
[] = {
160 { IN_WAY_block
, LANDING
, 17, false },
161 { 0, HELILANDING
, 25, true }
163 static const AirportFTA::Transition _airport_fta_commuter_26
[] = {
164 { 0, HELIPAD1
, 27, false },
165 { 0, HELIPAD2
, 28, false },
166 { 0, HANGAR
, 33, true }
168 static const AirportFTA::Transition _airport_fta_commuter_29
[] = {
169 { HELIPAD1_block
, HELIPAD1
, 6, true }
171 static const AirportFTA::Transition _airport_fta_commuter_30
[] = {
172 { HELIPAD2_block
, HELIPAD2
, 7, true }
174 static const AirportFTA::Position _airport_fta_commuter
[37] = {
175 { NOTHING_block
, HANGAR
, 1, 69, 3, DIR_SE
| AMED_EXACTPOS
, _airport_fta_commuter_0
}, // 00 In Hangar
176 { TAXIWAY_BUSY_block
, 255, 0, 72, 22, DIR_N
, _airport_fta_commuter_1
}, // 01 Taxi to right outside depot
177 { AIRPORT_ENTRANCE_block
, 255, 2, 8, 22, DIR_SW
| AMED_EXACTPOS
, _airport_fta_commuter_2
}, // 01 Taxi to right outside depot
178 { TERM1_block
, TERM1
, 8, 24, 36, DIR_SE
| AMED_EXACTPOS
, _airport_fta_commuter_3
}, // 03 Terminal 1
179 { TERM2_block
, TERM2
, 9, 40, 36, DIR_SE
| AMED_EXACTPOS
, _airport_fta_commuter_4
}, // 04 Terminal 2
180 { TERM3_block
, TERM3
, 10, 56, 36, DIR_SE
| AMED_EXACTPOS
, _airport_fta_commuter_5
}, // 05 Terminal 3
181 { HELIPAD1_block
, HELIPAD1
, 6, 40, 8, DIR_NE
| AMED_EXACTPOS
, _airport_fta_commuter_6
}, // 06 Helipad 1
182 { HELIPAD2_block
, HELIPAD2
, 7, 56, 8, DIR_NE
| AMED_EXACTPOS
, _airport_fta_commuter_7
}, // 07 Helipad 2
183 { TAXIWAY_BUSY_block
, 255, 8, 24, 22, DIR_SW
, _airport_fta_commuter_8
}, // 08 Taxiing
184 { TAXIWAY_BUSY_block
, 255, 9, 40, 22, DIR_SW
, _airport_fta_commuter_9
}, // 09 Taxiing
185 { TAXIWAY_BUSY_block
, 255, 10, 56, 22, DIR_SW
, _airport_fta_commuter_10
}, // 10 Taxiing
186 { OUT_WAY_block
, 0, 12, 72, 40, DIR_SE
, NULL
}, // 11 Airport OUTWAY
188 { RUNWAY_IN_OUT_block
, TAKEOFF
, 13, 72, 54, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 12 Accelerate to end of runway
189 { RUNWAY_IN_OUT_block
, 0, 14, 7, 54, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 13 Release control of runway, for smoother movement
190 { RUNWAY_IN_OUT_block
, STARTTAKEOFF
, 15, 5, 54, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 14 End of runway
191 { NOTHING_block
, ENDTAKEOFF
, 0, -79, 54, DIR_N
| AMED_NOSPDCLAMP
| AMED_TAKEOFF
, NULL
}, // 15 Take off
193 { NOTHING_block
, FLYING
, 21, 145, 54, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_commuter_16
}, // 16 Fly to landing position in air
194 { RUNWAY_IN_OUT_block
, LANDING
, 18, 73, 54, DIR_N
| AMED_NOSPDCLAMP
| AMED_LAND
, NULL
}, // 17 Going down for land
195 { RUNWAY_IN_OUT_block
, 0, 19, 3, 54, DIR_N
| AMED_NOSPDCLAMP
| AMED_BRAKE
, NULL
}, // 18 Just landed, brake until end of runway
196 { RUNWAY_IN_OUT_block
, 0, 20, 12, 54, DIR_NW
| AMED_SLOWTURN
, NULL
}, // 19 Just landed, turn around and taxi
197 { IN_WAY_block
, ENDLANDING
, 2, 8, 32, DIR_NW
, NULL
}, // 20 Taxi from runway to crossing
199 { NOTHING_block
, 0, 22, 1, 149, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 21 Fly around waiting for a landing spot (north-east)
200 { NOTHING_block
, 0, 23, 1, 6, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 22 Fly around waiting for a landing spot (north-west)
201 { NOTHING_block
, 0, 24, 193, 6, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 23 Fly around waiting for a landing spot (south-west)
202 { NOTHING_block
, 0, 16, 225, 62, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 24 Fly around waiting for a landing spot (south)
203 /* helicopter -- stay in air in special place as a buffer to choose from helipads */
204 { PRE_HELIPAD_block
, HELILANDING
, 26, 80, 0, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 25 Bufferspace before helipad
205 { PRE_HELIPAD_block
, HELIENDLANDING
, 26, 80, 0, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_commuter_26
}, // 26 Bufferspace before helipad
206 { NOTHING_block
, 0, 29, 32, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 27 Get in position for Helipad1
207 { NOTHING_block
, 0, 30, 48, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 28 Get in position for Helipad2
209 { NOTHING_block
, 255, 0, 32, 8, DIR_N
| AMED_HELI_LOWER
, _airport_fta_commuter_29
}, // 29 Land at Helipad1
210 { NOTHING_block
, 255, 0, 48, 8, DIR_N
| AMED_HELI_LOWER
, _airport_fta_commuter_30
}, // 30 Land at Helipad2
211 /* helicopter takeoff */
212 { NOTHING_block
, HELITAKEOFF
, 0, 32, 8, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 31 Takeoff Helipad1
213 { NOTHING_block
, HELITAKEOFF
, 0, 48, 8, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 32 Takeoff Helipad2
214 { TAXIWAY_BUSY_block
, 0, 34, 64, 22, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 33 Go to position for Hangarentrance in air
215 { TAXIWAY_BUSY_block
, 0, 1, 64, 22, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 34 Land in front of hangar
216 { HELIPAD1_block
, 0, 31, 40, 8, DIR_N
| AMED_EXACTPOS
, NULL
}, // 35 pre-helitakeoff helipad 1
217 { HELIPAD2_block
, 0, 32, 56, 8, DIR_N
| AMED_EXACTPOS
, NULL
}, // 36 pre-helitakeoff helipad 2
220 static const AirportFTA::Hangar _airport_depots_city
[] = { { 5, 0, DIR_SE
, 0 } };
221 static const byte _airport_terminal_city
[] = { 1, 0, 3 };
222 static const byte _airport_entries_city
[] = {26, 29, 27, 28};
224 static const AirportFTA::Transition _airport_fta_city_0
[] = {
225 { OUT_WAY_block
, TAKEOFF
, 1, false },
228 static const AirportFTA::Transition _airport_fta_city_1
[] = {
229 { 0, HANGAR
, 0, false },
230 { 0, TERM2
, 6, false },
231 { 0, TERM3
, 6, false },
232 { 0, 0, 7, true } // for all else, go to 7
234 static const AirportFTA::Transition _airport_fta_city_2
[] = {
235 { OUT_WAY_block
, TAKEOFF
, 7, false },
238 static const AirportFTA::Transition _airport_fta_city_3
[] = {
239 { OUT_WAY_block
, TAKEOFF
, 6, false },
242 static const AirportFTA::Transition _airport_fta_city_4
[] = {
243 { OUT_WAY_block
, TAKEOFF
, 5, false },
246 static const AirportFTA::Transition _airport_fta_city_5
[] = {
247 { TERM2_block
, TERM2
, 3, false },
248 { TERM3_block
, TERM3
, 4, false },
251 static const AirportFTA::Transition _airport_fta_city_6
[] = {
252 { TERM2_block
, TERM2
, 3, false },
253 { 0, TERM3
, 5, false },
254 { 0, HANGAR
, 1, false },
257 static const AirportFTA::Transition _airport_fta_city_7
[] = {
258 { TERM1_block
, TERM1
, 2, false },
259 { OUT_WAY_block
, TAKEOFF
, 8, false },
260 { 0, HELITAKEOFF
, 22, false },
261 { 0, HANGAR
, 1, false },
264 static const AirportFTA::Transition _airport_fta_city_13
[] = {
265 { 0, LANDING
, 14, false },
266 { 0, HELILANDING
, 23, true }
268 static const AirportFTA::Position _airport_fta_city
[] = {
269 { NOTHING_block
, HANGAR
, 1, 85, 3, DIR_SE
| AMED_EXACTPOS
, _airport_fta_city_0
}, // 00 In Hangar
270 { TAXIWAY_BUSY_block
, 255, 0, 85, 22, DIR_N
, _airport_fta_city_1
}, // 01 Taxi to right outside depot
271 { TERM1_block
, TERM1
, 7, 26, 41, DIR_SW
| AMED_EXACTPOS
, _airport_fta_city_2
}, // 02 Terminal 1
272 { TERM2_block
, TERM2
, 5, 56, 22, DIR_SE
| AMED_EXACTPOS
, _airport_fta_city_3
}, // 03 Terminal 2
273 { TERM3_block
, TERM3
, 5, 38, 8, DIR_SW
| AMED_EXACTPOS
, _airport_fta_city_4
}, // 04 Terminal 3
274 { TAXIWAY_BUSY_block
, 255, 0, 65, 6, DIR_N
, _airport_fta_city_5
}, // 05 Taxi to right in infront of terminal 2/3
275 { TAXIWAY_BUSY_block
, 255, 0, 80, 27, DIR_N
, _airport_fta_city_6
}, // 06 Taxiway terminals 2-3
276 { TAXIWAY_BUSY_block
, 255, 0, 44, 63, DIR_N
, _airport_fta_city_7
}, // 07 Taxi to Airport center
277 { OUT_WAY_block
, 0, 9, 58, 71, DIR_N
, NULL
}, // 08 Towards takeoff
278 { RUNWAY_IN_OUT_block
, 0, 10, 72, 85, DIR_N
, NULL
}, // 09 Taxi to runway (takeoff)
280 { RUNWAY_IN_OUT_block
, TAKEOFF
, 11, 89, 85, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 10 Taxi to start of runway (takeoff)
281 { NOTHING_block
, STARTTAKEOFF
, 12, 3, 85, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 11 Accelerate to end of runway
282 { NOTHING_block
, ENDTAKEOFF
, 0, -79, 85, DIR_N
| AMED_NOSPDCLAMP
| AMED_TAKEOFF
, NULL
}, // 12 Take off
284 { NOTHING_block
, FLYING
, 18, 177, 87, DIR_N
| AMED_HOLD
| AMED_SLOWTURN
, _airport_fta_city_13
}, // 13 Fly to landing position in air
285 { RUNWAY_IN_OUT_block
, LANDING
, 15, 89, 87, DIR_N
| AMED_HOLD
| AMED_LAND
, NULL
}, // 14 Going down for land
286 { RUNWAY_IN_OUT_block
, 0, 17, 20, 87, DIR_N
| AMED_NOSPDCLAMP
| AMED_BRAKE
, NULL
}, // 15 Just landed, brake until end of runway
287 { RUNWAY_IN_OUT_block
, 0, 17, 20, 87, DIR_N
, NULL
}, // 16 Just landed, turn around and taxi 1 square // not used, left for compatibility
288 { IN_WAY_block
, ENDLANDING
, 7, 36, 71, DIR_N
, NULL
}, // 17 Taxi from runway to crossing
290 { NOTHING_block
, 0, 25, 160, 87, DIR_N
| AMED_HOLD
| AMED_SLOWTURN
, NULL
}, // 18 Fly around waiting for a landing spot (north-east)
291 { NOTHING_block
, 0, 20, 140, 1, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 19 Final approach fix
292 { NOTHING_block
, 0, 21, 257, 1, DIR_N
| AMED_HOLD
| AMED_SLOWTURN
, NULL
}, // 20 Fly around waiting for a landing spot (south-west)
293 { NOTHING_block
, 0, 13, 273, 49, DIR_N
| AMED_HOLD
| AMED_SLOWTURN
, NULL
}, // 21 Fly around waiting for a landing spot (south)
295 { NOTHING_block
, HELITAKEOFF
, 0, 44, 63, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 22 Helicopter takeoff
296 { IN_WAY_block
, HELILANDING
, 24, 28, 74, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 23 In position above landing spot helicopter
297 { IN_WAY_block
, HELIENDLANDING
, 17, 28, 74, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 24 Helicopter landing
298 { NOTHING_block
, 0, 20, 145, 1, DIR_N
| AMED_HOLD
| AMED_SLOWTURN
, NULL
}, // 25 Fly around waiting for a landing spot (north-west)
299 { NOTHING_block
, 0, 19, -32, 1, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 26 Initial approach fix (north)
300 { NOTHING_block
, 0, 28, 300, -48, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 27 Initial approach fix (south)
301 { NOTHING_block
, 0, 19, 140, -48, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 28 Intermediate Approach fix (south), IAF (west)
302 { NOTHING_block
, 0, 26, -32, 120, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 29 Initial approach fix (east)
305 static const AirportFTA::Hangar _airport_depots_metropolitan
[] = { { 5, 0, DIR_SE
, 0 } };
306 static const byte _airport_terminal_metropolitan
[] = { 1, 0, 3 };
307 static const byte _airport_entries_metropolitan
[] = {20, 19, 22, 21};
309 static const AirportFTA::Transition _airport_fta_metropolitan_1
[] = {
310 { 0, HANGAR
, 0, false },
311 { 0, TERM2
, 6, false },
312 { 0, TERM3
, 6, false },
313 { 0, 0, 7, true } // for all else, go to 7
315 static const AirportFTA::Transition _airport_fta_metropolitan_5
[] = {
316 { TERM2_block
, TERM2
, 3, false },
317 { TERM3_block
, TERM3
, 4, false },
320 static const AirportFTA::Transition _airport_fta_metropolitan_6
[] = {
321 { TERM2_block
, TERM2
, 3, false },
322 { 0, TERM3
, 5, false },
323 { 0, HANGAR
, 1, false },
326 static const AirportFTA::Transition _airport_fta_metropolitan_7
[] = {
327 { TERM1_block
, TERM1
, 2, false },
328 { 0, TAKEOFF
, 8, false },
329 { 0, HELITAKEOFF
, 23, false },
330 { 0, HANGAR
, 1, false },
333 static const AirportFTA::Transition _airport_fta_metropolitan_13
[] = {
334 { 0, LANDING
, 14, false },
335 { 0, HELILANDING
, 25, true }
337 static const AirportFTA::Transition _airport_fta_metropolitan_16
[] = {
338 { IN_WAY_block
, ENDLANDING
, 17, true }
340 static const AirportFTA::Transition _airport_fta_metropolitan_17
[] = {
341 { IN_WAY_block
, ENDLANDING
, 18, true }
343 static const AirportFTA::Transition _airport_fta_metropolitan_27
[] = {
344 { TERM1_block
, TERM1
, 2, false },
347 static const AirportFTA::Position _airport_fta_metropolitan
[28] = {
348 { NOTHING_block
, HANGAR
, 1, 85, 3, DIR_SE
| AMED_EXACTPOS
, NULL
}, // 00 In Hangar
349 { TAXIWAY_BUSY_block
, 255, 0, 85, 22, DIR_N
, _airport_fta_metropolitan_1
}, // 01 Taxi to right outside depot
350 { TERM1_block
, TERM1
, 7, 26, 41, DIR_SW
| AMED_EXACTPOS
, NULL
}, // 02 Terminal 1
351 { TERM2_block
, TERM2
, 6, 56, 22, DIR_SE
| AMED_EXACTPOS
, NULL
}, // 03 Terminal 2
352 { TERM3_block
, TERM3
, 5, 38, 8, DIR_SW
| AMED_EXACTPOS
, NULL
}, // 04 Terminal 3
353 { TAXIWAY_BUSY_block
, 255, 0, 65, 6, DIR_N
, _airport_fta_metropolitan_5
}, // 05 Taxi to right in infront of terminal 2/3
354 { TAXIWAY_BUSY_block
, 255, 0, 80, 27, DIR_N
, _airport_fta_metropolitan_6
}, // 06 Taxiway terminals 2-3
355 { TAXIWAY_BUSY_block
, 255, 0, 49, 58, DIR_N
, _airport_fta_metropolitan_7
}, // 07 Taxi to Airport center
356 { OUT_WAY_block
, 0, 9, 72, 58, DIR_N
, NULL
}, // 08 Towards takeoff
357 { RUNWAY_OUT_block
, 0, 10, 72, 69, DIR_N
, NULL
}, // 09 Taxi to runway (takeoff)
359 { RUNWAY_OUT_block
, TAKEOFF
, 11, 89, 69, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 10 Taxi to start of runway (takeoff)
360 { NOTHING_block
, STARTTAKEOFF
, 12, 3, 69, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 11 Accelerate to end of runway
361 { NOTHING_block
, ENDTAKEOFF
, 0, -79, 69, DIR_N
| AMED_NOSPDCLAMP
| AMED_TAKEOFF
, NULL
}, // 12 Take off
363 { NOTHING_block
, FLYING
, 19, 177, 85, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_metropolitan_13
}, // 13 Fly to landing position in air
364 { RUNWAY_IN_block
, LANDING
, 15, 89, 85, DIR_N
| AMED_NOSPDCLAMP
| AMED_LAND
, NULL
}, // 14 Going down for land
365 { RUNWAY_IN_block
, 0, 16, 3, 85, DIR_N
| AMED_NOSPDCLAMP
| AMED_BRAKE
, NULL
}, // 15 Just landed, brake until end of runway
366 { RUNWAY_IN_block
, 255, 0, 21, 85, DIR_N
, _airport_fta_metropolitan_16
}, // 16 Just landed, turn around and taxi 1 square
367 { RUNWAY_OUT_block
, 255, 0, 21, 69, DIR_N
, _airport_fta_metropolitan_17
}, // 17 On Runway-out taxiing to In-Way
368 { IN_WAY_block
, ENDLANDING
, 27, 21, 58, DIR_SW
| AMED_EXACTPOS
, NULL
}, // 18 Taxi from runway to crossing
370 { NOTHING_block
, 0, 20, 1, 193, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 19 Fly around waiting for a landing spot (north-east)
371 { NOTHING_block
, 0, 21, 1, 1, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 20 Fly around waiting for a landing spot (north-west)
372 { NOTHING_block
, 0, 22, 257, 1, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 21 Fly around waiting for a landing spot (south-west)
373 { NOTHING_block
, 0, 13, 273, 49, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 22 Fly around waiting for a landing spot (south)
375 { NOTHING_block
, 0, 24, 44, 58, DIR_N
, NULL
}, // 23 Helicopter takeoff spot on ground (to clear airport sooner)
376 { NOTHING_block
, HELITAKEOFF
, 0, 44, 63, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 24 Helicopter takeoff
377 { IN_WAY_block
, HELILANDING
, 26, 15, 54, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 25 Get in position above landing spot helicopter
378 { IN_WAY_block
, HELIENDLANDING
, 18, 15, 54, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 26 Helicopter landing
379 { TAXIWAY_BUSY_block
, 255, 27, 21, 58, DIR_SW
| AMED_EXACTPOS
, _airport_fta_metropolitan_27
}, // 27 Transitions after landing to on-ground movement
382 static const AirportFTA::Hangar _airport_depots_international
[] = { { 0, 3, DIR_SE
, 0 }, { 6, 1, DIR_SE
, 1 } };
383 static const byte _airport_terminal_international
[] = { 2, 0, 3, 6 };
384 static const byte _airport_entries_international
[] = { 38, 37, 40, 39 };
386 static const AirportFTA::Transition _airport_fta_international_0
[] = {
387 { TERM_GROUP1_block
, 255, 0, false },
388 { TERM_GROUP2_ENTER1_block
, 255, 1, false },
389 { HELIPAD1_block
, HELITAKEOFF
, 2, false },
392 static const AirportFTA::Transition _airport_fta_international_1
[] = {
393 { HANGAR2_AREA_block
, 255, 1, false },
394 { HELIPAD2_block
, HELITAKEOFF
, 3, false },
397 static const AirportFTA::Transition _airport_fta_international_2
[] = {
398 { 0, HANGAR
, 0, false },
399 { 0, TERM4
, 12, false },
400 { 0, TERM5
, 12, false },
401 { 0, TERM6
, 12, false },
402 { 0, HELIPAD1
, 12, false },
403 { 0, HELIPAD2
, 12, false },
404 { 0, HELITAKEOFF
, 12, false },
407 static const AirportFTA::Transition _airport_fta_international_3
[] = {
408 { 0, HANGAR
, 1, false },
411 static const AirportFTA::Transition _airport_fta_international_4
[] = {
412 { AIRPORT_ENTRANCE_block
, HANGAR
, 23, false },
415 static const AirportFTA::Transition _airport_fta_international_5
[] = {
416 { AIRPORT_ENTRANCE_block
, HANGAR
, 24, false },
419 static const AirportFTA::Transition _airport_fta_international_6
[] = {
420 { AIRPORT_ENTRANCE_block
, HANGAR
, 25, false },
423 static const AirportFTA::Transition _airport_fta_international_7
[] = {
424 { HANGAR2_AREA_block
, HANGAR
, 16, false },
427 static const AirportFTA::Transition _airport_fta_international_8
[] = {
428 { HANGAR2_AREA_block
, HANGAR
, 17, false },
431 static const AirportFTA::Transition _airport_fta_international_9
[] = {
432 { HANGAR2_AREA_block
, HANGAR
, 18, false },
435 static const AirportFTA::Transition _airport_fta_international_10
[] = {
436 { HANGAR2_AREA_block
, HANGAR
, 16, false },
437 { 0, HELITAKEOFF
, 47, true }
439 static const AirportFTA::Transition _airport_fta_international_11
[] = {
440 { HANGAR2_AREA_block
, HANGAR
, 17, false },
441 { 0, HELITAKEOFF
, 48, true }
443 static const AirportFTA::Transition _airport_fta_international_16
[] = {
444 { TERM4_block
, TERM4
, 7, false },
445 { HELIPAD1_block
, HELIPAD1
, 10, false },
446 { HELIPAD1_block
, HELITAKEOFF
, 10, false },
449 static const AirportFTA::Transition _airport_fta_international_17
[] = {
450 { TERM5_block
, TERM5
, 8, false },
451 { 0, TERM4
, 16, false },
452 { 0, HELIPAD1
, 16, false },
453 { HELIPAD2_block
, HELIPAD2
, 11, false },
454 { HELIPAD2_block
, HELITAKEOFF
, 11, false },
457 static const AirportFTA::Transition _airport_fta_international_18
[] = {
458 { TERM6_block
, TERM6
, 9, false },
459 { 0, TAKEOFF
, 19, false },
460 { HANGAR2_AREA_block
, HANGAR
, 3, false },
463 static const AirportFTA::Transition _airport_fta_international_23
[] = {
464 { TERM1_block
, TERM1
, 4, false },
465 { AIRPORT_ENTRANCE_block
, HANGAR
, 2, false },
468 static const AirportFTA::Transition _airport_fta_international_24
[] = {
469 { TERM2_block
, TERM2
, 5, false },
470 { 0, TERM1
, 23, false },
471 { 0, HANGAR
, 23, false },
474 static const AirportFTA::Transition _airport_fta_international_25
[] = {
475 { TERM3_block
, TERM3
, 6, false },
476 { 0, TAKEOFF
, 26, false },
479 static const AirportFTA::Transition _airport_fta_international_26
[] = {
480 { 0, TAKEOFF
, 27, false },
483 static const AirportFTA::Transition _airport_fta_international_32
[] = {
484 { 0, LANDING
, 33, false },
485 { 0, HELILANDING
, 41, true }
487 static const AirportFTA::Transition _airport_fta_international_36
[] = {
488 { TERM_GROUP1_block
, 255, 0, false },
489 { TERM_GROUP2_ENTER1_block
, 255, 1, false },
490 { 0, TERM4
, 12, false },
491 { 0, TERM5
, 12, false },
492 { 0, TERM6
, 12, false },
495 static const AirportFTA::Transition _airport_fta_international_42
[] = {
496 { 0, HELIPAD1
, 43, false },
497 { 0, HELIPAD2
, 44, false },
498 { 0, HANGAR
, 49, true }
500 static const AirportFTA::Transition _airport_fta_international_45
[] = {
501 { HELIPAD1_block
, HELIPAD1
, 10, true }
503 static const AirportFTA::Transition _airport_fta_international_46
[] = {
504 { HELIPAD2_block
, HELIPAD2
, 11, true }
506 static const AirportFTA::Position _airport_fta_international
[51] = {
507 { NOTHING_block
, HANGAR
, 2, 7, 55, DIR_SE
| AMED_EXACTPOS
, _airport_fta_international_0
}, // 00 In Hangar 1
508 { NOTHING_block
, HANGAR
, 3, 100, 21, DIR_SE
| AMED_EXACTPOS
, _airport_fta_international_1
}, // 01 In Hangar 2
509 { AIRPORT_ENTRANCE_block
, 255, 0, 7, 70, DIR_N
, _airport_fta_international_2
}, // 02 Taxi to right outside depot
510 { HANGAR2_AREA_block
, 255, 0, 100, 36, DIR_N
, _airport_fta_international_3
}, // 03 Taxi to right outside depot
511 { TERM1_block
, TERM1
, 23, 38, 70, DIR_SW
| AMED_EXACTPOS
, _airport_fta_international_4
}, // 04 Terminal 1
512 { TERM2_block
, TERM2
, 24, 38, 54, DIR_SW
| AMED_EXACTPOS
, _airport_fta_international_5
}, // 05 Terminal 2
513 { TERM3_block
, TERM3
, 25, 38, 38, DIR_SW
| AMED_EXACTPOS
, _airport_fta_international_6
}, // 06 Terminal 3
514 { TERM4_block
, TERM4
, 16, 70, 70, DIR_NE
| AMED_EXACTPOS
, _airport_fta_international_7
}, // 07 Terminal 4
515 { TERM5_block
, TERM5
, 17, 70, 54, DIR_NE
| AMED_EXACTPOS
, _airport_fta_international_8
}, // 08 Terminal 5
516 { TERM6_block
, TERM6
, 18, 70, 38, DIR_NE
| AMED_EXACTPOS
, _airport_fta_international_9
}, // 09 Terminal 6
517 { HELIPAD1_block
, HELIPAD1
, 10, 104, 71, DIR_NE
| AMED_EXACTPOS
, _airport_fta_international_10
}, // 10 Helipad 1
518 { HELIPAD2_block
, HELIPAD2
, 11, 104, 55, DIR_NE
| AMED_EXACTPOS
, _airport_fta_international_11
}, // 11 Helipad 2
519 { TERM_GROUP2_ENTER1_block
, 0, 13, 22, 87, DIR_N
, NULL
}, // 12 Towards Terminals 4/5/6, Helipad 1/2
520 { TERM_GROUP2_ENTER1_block
, 0, 14, 60, 87, DIR_N
, NULL
}, // 13 Towards Terminals 4/5/6, Helipad 1/2
521 { TERM_GROUP2_ENTER2_block
, 0, 15, 66, 87, DIR_N
, NULL
}, // 14 Towards Terminals 4/5/6, Helipad 1/2
522 { TERM_GROUP2_ENTER2_block
, 0, 16, 86, 87, DIR_NW
| AMED_EXACTPOS
, NULL
}, // 15 Towards Terminals 4/5/6, Helipad 1/2
523 { TERM_GROUP2_block
, 255, 0, 86, 70, DIR_N
, _airport_fta_international_16
}, // 16 In Front of Terminal 4 / Helipad 1
524 { TERM_GROUP2_block
, 255, 0, 86, 54, DIR_N
, _airport_fta_international_17
}, // 17 In Front of Terminal 5 / Helipad 2
525 { TERM_GROUP2_block
, 255, 0, 86, 38, DIR_N
, _airport_fta_international_18
}, // 18 In Front of Terminal 6
526 { TERM_GROUP2_EXIT1_block
, 0, 20, 86, 22, DIR_N
, NULL
}, // 19 Towards Terminals Takeoff (Taxiway)
527 { TERM_GROUP2_EXIT1_block
, 0, 21, 66, 22, DIR_N
, NULL
}, // 20 Towards Terminals Takeoff (Taxiway)
528 { TERM_GROUP2_EXIT2_block
, 0, 22, 60, 22, DIR_N
, NULL
}, // 21 Towards Terminals Takeoff (Taxiway)
529 { TERM_GROUP2_EXIT2_block
, 0, 26, 38, 22, DIR_N
, NULL
}, // 22 Towards Terminals Takeoff (Taxiway)
530 { TERM_GROUP1_block
, 255, 0, 22, 70, DIR_N
, _airport_fta_international_23
}, // 23 In Front of Terminal 1
531 { TERM_GROUP1_block
, 255, 0, 22, 58, DIR_N
, _airport_fta_international_24
}, // 24 In Front of Terminal 2
532 { TERM_GROUP1_block
, 255, 0, 22, 38, DIR_N
, _airport_fta_international_25
}, // 25 In Front of Terminal 3
533 { TAXIWAY_BUSY_block
, 255, 0, 22, 22, DIR_NW
| AMED_EXACTPOS
, _airport_fta_international_26
}, // 26 Going for Takeoff
534 { OUT_WAY_block
, 0, 28, 22, 6, DIR_N
, NULL
}, // 27 On Runway-out, prepare for takeoff
536 { OUT_WAY_block
, TAKEOFF
, 29, 3, 6, DIR_SW
| AMED_EXACTPOS
, NULL
}, // 28 Accelerate to end of runway
537 { RUNWAY_OUT_block
, 0, 30, 60, 6, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 29 Release control of runway, for smoother movement
538 { NOTHING_block
, STARTTAKEOFF
, 31, 105, 6, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 30 End of runway
539 { NOTHING_block
, ENDTAKEOFF
, 0, 190, 6, DIR_N
| AMED_NOSPDCLAMP
| AMED_TAKEOFF
, NULL
}, // 31 Take off
541 { NOTHING_block
, FLYING
, 37, 193, 104, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_international_32
}, // 32 Fly to landing position in air
542 { RUNWAY_IN_block
, LANDING
, 34, 105, 104, DIR_N
| AMED_NOSPDCLAMP
| AMED_LAND
, NULL
}, // 33 Going down for land
543 { RUNWAY_IN_block
, 0, 35, 3, 104, DIR_N
| AMED_NOSPDCLAMP
| AMED_BRAKE
, NULL
}, // 34 Just landed, brake until end of runway
544 { RUNWAY_IN_block
, 0, 36, 12, 104, DIR_N
| AMED_SLOWTURN
, NULL
}, // 35 Just landed, turn around and taxi 1 square
545 { IN_WAY_block
, ENDLANDING
, 36, 7, 84, DIR_N
, _airport_fta_international_36
}, // 36 Taxi from runway to crossing
547 { NOTHING_block
, 0, 38, 1, 209, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 37 Fly around waiting for a landing spot (north-east)
548 { NOTHING_block
, 0, 39, 1, 6, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 38 Fly around waiting for a landing spot (north-west)
549 { NOTHING_block
, 0, 40, 273, 6, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 39 Fly around waiting for a landing spot (south-west)
550 { NOTHING_block
, 0, 32, 305, 81, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 40 Fly around waiting for a landing spot (south)
551 /* helicopter -- stay in air in special place as a buffer to choose from helipads */
552 { PRE_HELIPAD_block
, HELILANDING
, 42, 128, 80, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 41 Bufferspace before helipad
553 { PRE_HELIPAD_block
, HELIENDLANDING
, 42, 128, 80, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_international_42
}, // 42 Bufferspace before helipad
554 { NOTHING_block
, 0, 45, 96, 71, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 43 Get in position for Helipad1
555 { NOTHING_block
, 0, 46, 96, 55, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 44 Get in position for Helipad2
557 { NOTHING_block
, 255, 0, 96, 71, DIR_N
| AMED_HELI_LOWER
, _airport_fta_international_45
}, // 45 Land at Helipad1
558 { NOTHING_block
, 255, 0, 96, 55, DIR_N
| AMED_HELI_LOWER
, _airport_fta_international_46
}, // 46 Land at Helipad2
559 /* helicopter takeoff */
560 { NOTHING_block
, HELITAKEOFF
, 0, 104, 71, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 47 Takeoff Helipad1
561 { NOTHING_block
, HELITAKEOFF
, 0, 104, 55, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 48 Takeoff Helipad2
562 { HANGAR2_AREA_block
, 0, 50, 104, 32, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 49 Go to position for Hangarentrance in air
563 { HANGAR2_AREA_block
, 0, 3, 104, 32, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 50 Land in HANGAR2_AREA to go to hangar
566 /* intercontinental */
567 static const AirportFTA::Hangar _airport_depots_intercontinental
[] = { { 0, 5, DIR_SE
, 0 }, { 8, 4, DIR_SE
, 1 } };
568 static const byte _airport_terminal_intercontinental
[] = { 2, 0, 4, 8 };
569 static const byte _airport_entries_intercontinental
[] = { 44, 43, 46, 45 };
571 static const AirportFTA::Transition _airport_fta_intercontinental_0
[] = {
572 { HANGAR1_AREA_block
| TERM_GROUP1_block
, 255, 0, false },
573 { HANGAR1_AREA_block
| TERM_GROUP1_block
, 255, 1, false },
574 { HANGAR1_AREA_block
| TERM_GROUP1_block
, TAKEOFF
, 2, false },
577 static const AirportFTA::Transition _airport_fta_intercontinental_1
[] = {
578 { HANGAR2_AREA_block
, 255, 1, false },
579 { HANGAR2_AREA_block
, 255, 0, false },
582 static const AirportFTA::Transition _airport_fta_intercontinental_2
[] = {
583 { TERM_GROUP1_block
, 255, 0, false },
584 { TERM_GROUP1_block
, 255, 1, false },
585 { 0, HANGAR
, 0, false },
586 { TERM_GROUP1_block
, TAKEOFF
, 27, false },
587 { 0, TERM5
, 26, false },
588 { 0, TERM6
, 26, false },
589 { 0, TERM7
, 26, false },
590 { 0, TERM8
, 26, false },
591 { 0, HELIPAD1
, 26, false },
592 { 0, HELIPAD2
, 26, false },
593 { 0, HELITAKEOFF
, 74, false },
596 static const AirportFTA::Transition _airport_fta_intercontinental_3
[] = {
597 { 0, HANGAR
, 1, false },
598 { 0, HELITAKEOFF
, 75, false },
599 { 0, TAKEOFF
, 59, false },
602 static const AirportFTA::Transition _airport_fta_intercontinental_4
[] = {
603 { HANGAR1_AREA_block
| TERM_GROUP1_block
, HANGAR
, 26, false },
606 static const AirportFTA::Transition _airport_fta_intercontinental_5
[] = {
607 { HANGAR1_AREA_block
| TERM_GROUP1_block
, HANGAR
, 27, false },
610 static const AirportFTA::Transition _airport_fta_intercontinental_6
[] = {
611 { HANGAR1_AREA_block
| TERM_GROUP1_block
, HANGAR
, 28, false },
614 static const AirportFTA::Transition _airport_fta_intercontinental_7
[] = {
615 { HANGAR1_AREA_block
| TERM_GROUP1_block
, HANGAR
, 29, false },
618 static const AirportFTA::Transition _airport_fta_intercontinental_8
[] = {
619 { HANGAR2_AREA_block
, HANGAR
, 18, false },
622 static const AirportFTA::Transition _airport_fta_intercontinental_9
[] = {
623 { HANGAR2_AREA_block
, HANGAR
, 19, false },
626 static const AirportFTA::Transition _airport_fta_intercontinental_10
[] = {
627 { HANGAR2_AREA_block
, HANGAR
, 20, false },
630 static const AirportFTA::Transition _airport_fta_intercontinental_11
[] = {
631 { HANGAR2_AREA_block
, HANGAR
, 21, false },
634 static const AirportFTA::Transition _airport_fta_intercontinental_12
[] = {
635 { 0, HANGAR
, 70, false },
636 { 0, HELITAKEOFF
, 72, true }
638 static const AirportFTA::Transition _airport_fta_intercontinental_13
[] = {
639 { 0, HANGAR
, 71, false },
640 { 0, HELITAKEOFF
, 73, true }
642 static const AirportFTA::Transition _airport_fta_intercontinental_18
[] = {
643 { TERM5_block
, TERM5
, 8, false },
644 { 0, TAKEOFF
, 19, false },
645 { HELIPAD1_block
, HELITAKEOFF
, 19, false },
646 { TERM_GROUP2_EXIT1_block
, 0, 19, true }
648 static const AirportFTA::Transition _airport_fta_intercontinental_19
[] = {
649 { TERM6_block
, TERM6
, 9, false },
650 { 0, TERM5
, 18, false },
651 { 0, TAKEOFF
, 57, false },
652 { HELIPAD1_block
, HELITAKEOFF
, 20, false },
653 { TERM_GROUP2_EXIT1_block
, 0, 20, true } // add exit to runway out 2
655 static const AirportFTA::Transition _airport_fta_intercontinental_20
[] = {
656 { TERM7_block
, TERM7
, 10, false },
657 { 0, TERM5
, 19, false },
658 { 0, TERM6
, 19, false },
659 { HANGAR2_AREA_block
, HANGAR
, 3, false },
660 { 0, TAKEOFF
, 19, false },
661 { TERM_GROUP2_EXIT1_block
, 0, 21, true }
663 static const AirportFTA::Transition _airport_fta_intercontinental_21
[] = {
664 { TERM8_block
, TERM8
, 11, false },
665 { HANGAR2_AREA_block
, HANGAR
, 20, false },
666 { 0, TERM5
, 20, false },
667 { 0, TERM6
, 20, false },
668 { 0, TERM7
, 20, false },
669 { 0, TAKEOFF
, 20, false },
670 { TERM_GROUP2_EXIT1_block
, 0, 22, true }
672 static const AirportFTA::Transition _airport_fta_intercontinental_22
[] = {
673 { 0, HANGAR
, 21, false },
674 { 0, TERM5
, 21, false },
675 { 0, TERM6
, 21, false },
676 { 0, TERM7
, 21, false },
677 { 0, TERM8
, 21, false },
678 { 0, TAKEOFF
, 21, false },
681 static const AirportFTA::Transition _airport_fta_intercontinental_25
[] = {
682 { HANGAR1_AREA_block
| TERM_GROUP1_block
, HANGAR
, 29, false },
685 static const AirportFTA::Transition _airport_fta_intercontinental_26
[] = {
686 { TERM1_block
, TERM1
, 4, false },
687 { HANGAR1_AREA_block
, HANGAR
, 27, false },
688 { TERM_GROUP2_ENTER1_block
, TERM5
, 14, false },
689 { TERM_GROUP2_ENTER1_block
, TERM6
, 14, false },
690 { TERM_GROUP2_ENTER1_block
, TERM7
, 14, false },
691 { TERM_GROUP2_ENTER1_block
, TERM8
, 14, false },
692 { TERM_GROUP2_ENTER1_block
, HELIPAD1
, 14, false },
693 { TERM_GROUP2_ENTER1_block
, HELIPAD2
, 14, false },
694 { TERM_GROUP2_ENTER1_block
, HELITAKEOFF
, 14, false },
697 static const AirportFTA::Transition _airport_fta_intercontinental_27
[] = {
698 { TERM2_block
, TERM2
, 5, false },
699 { HANGAR1_AREA_block
, HANGAR
, 2, false },
700 { 0, TERM1
, 26, false },
701 { 0, TERM5
, 26, false },
702 { 0, TERM6
, 26, false },
703 { 0, TERM7
, 26, false },
704 { 0, TERM8
, 26, false },
705 { 0, HELIPAD1
, 14, false },
706 { 0, HELIPAD2
, 14, false },
709 static const AirportFTA::Transition _airport_fta_intercontinental_28
[] = {
710 { TERM3_block
, TERM3
, 6, false },
711 { HANGAR1_AREA_block
, HANGAR
, 27, false },
712 { 0, TERM1
, 27, false },
713 { 0, TERM2
, 27, false },
714 { 0, TERM4
, 29, false },
715 { 0, TERM5
, 14, false },
716 { 0, TERM6
, 14, false },
717 { 0, TERM7
, 14, false },
718 { 0, TERM8
, 14, false },
719 { 0, HELIPAD1
, 14, false },
720 { 0, HELIPAD2
, 14, false },
723 static const AirportFTA::Transition _airport_fta_intercontinental_29
[] = {
724 { TERM4_block
, TERM4
, 7, false },
725 { HANGAR1_AREA_block
, HANGAR
, 27, false },
726 { 0, TAKEOFF
, 30, false },
729 static const AirportFTA::Transition _airport_fta_intercontinental_42
[] = {
730 { TERM_GROUP1_block
, 255, 0, false },
731 { TERM_GROUP1_block
, 255, 1, false },
732 { 0, HANGAR
, 2, false },
735 static const AirportFTA::Transition _airport_fta_intercontinental_44
[] = {
736 { 0, HELILANDING
, 47, false },
737 { 0, LANDING
, 69, false },
740 static const AirportFTA::Transition _airport_fta_intercontinental_46
[] = {
741 { 0, LANDING
, 76, false },
744 static const AirportFTA::Transition _airport_fta_intercontinental_48
[] = {
745 { 0, HELIPAD1
, 49, false },
746 { 0, HELIPAD2
, 50, false },
747 { 0, HANGAR
, 55, true }
749 static const AirportFTA::Transition _airport_fta_intercontinental_51
[] = {
750 { HELIPAD1_block
, HELIPAD1
, 12, false },
751 { 0, HANGAR
, 55, false },
754 static const AirportFTA::Transition _airport_fta_intercontinental_52
[] = {
755 { HELIPAD2_block
, HELIPAD2
, 13, false },
756 { 0, HANGAR
, 55, false },
759 static const AirportFTA::Transition _airport_fta_intercontinental_57
[] = {
760 { 0, TAKEOFF
, 58, false },
763 static const AirportFTA::Transition _airport_fta_intercontinental_66
[] = {
764 { 0, 255, 1, false },
765 { 0, 255, 0, false },
768 static const AirportFTA::Transition _airport_fta_intercontinental_68
[] = {
769 { TERM_GROUP2_block
, 255, 1, false },
770 { TERM_GROUP1_block
, 255, 0, false },
771 { HANGAR2_AREA_block
, HANGAR
, 22, false },
774 static const AirportFTA::Transition _airport_fta_intercontinental_69
[] = {
775 { RUNWAY_IN2_block
, 0, 63, true }
777 static const AirportFTA::Transition _airport_fta_intercontinental_70
[] = {
778 { HELIPAD1_block
, HELIPAD1
, 12, false },
779 { HELIPAD1_block
, HELITAKEOFF
, 12, false },
782 static const AirportFTA::Transition _airport_fta_intercontinental_71
[] = {
783 { HELIPAD2_block
, HELIPAD2
, 13, false },
784 { HELIPAD1_block
, HELITAKEOFF
, 12, false },
787 static const AirportFTA::Transition _airport_fta_intercontinental_76
[] = {
788 { RUNWAY_IN_block
, 0, 37, true }
790 static const AirportFTA::Position _airport_fta_intercontinental
[77] = {
791 { NOTHING_block
, HANGAR
, 2, 8, 87, DIR_SE
| AMED_EXACTPOS
, _airport_fta_intercontinental_0
}, // 00 In Hangar 1
792 { NOTHING_block
, HANGAR
, 3, 136, 72, DIR_SE
| AMED_EXACTPOS
, _airport_fta_intercontinental_1
}, // 01 In Hangar 2
793 { HANGAR1_AREA_block
, 255, 0, 8, 104, DIR_N
, _airport_fta_intercontinental_2
}, // 02 Taxi to right outside depot 1
794 { HANGAR2_AREA_block
, 255, 0, 136, 88, DIR_N
, _airport_fta_intercontinental_3
}, // 03 Taxi to right outside depot 2
795 { TERM1_block
, TERM1
, 26, 56, 120, DIR_W
| AMED_EXACTPOS
, _airport_fta_intercontinental_4
}, // 04 Terminal 1
796 { TERM2_block
, TERM2
, 27, 56, 104, DIR_SW
| AMED_EXACTPOS
, _airport_fta_intercontinental_5
}, // 05 Terminal 2
797 { TERM3_block
, TERM3
, 28, 56, 88, DIR_SW
| AMED_EXACTPOS
, _airport_fta_intercontinental_6
}, // 06 Terminal 3
798 { TERM4_block
, TERM4
, 29, 56, 72, DIR_SW
| AMED_EXACTPOS
, _airport_fta_intercontinental_7
}, // 07 Terminal 4
799 { TERM5_block
, TERM5
, 18, 88, 120, DIR_N
| AMED_EXACTPOS
, _airport_fta_intercontinental_8
}, // 08 Terminal 5
800 { TERM6_block
, TERM6
, 19, 88, 104, DIR_NE
| AMED_EXACTPOS
, _airport_fta_intercontinental_9
}, // 09 Terminal 6
801 { TERM7_block
, TERM7
, 20, 88, 88, DIR_NE
| AMED_EXACTPOS
, _airport_fta_intercontinental_10
}, // 10 Terminal 7
802 { TERM8_block
, TERM8
, 21, 88, 72, DIR_NE
| AMED_EXACTPOS
, _airport_fta_intercontinental_11
}, // 11 Terminal 8
803 { HELIPAD1_block
, HELIPAD1
, 12, 88, 56, DIR_SE
| AMED_EXACTPOS
, _airport_fta_intercontinental_12
}, // 12 Helipad 1
804 { HELIPAD2_block
, HELIPAD2
, 13, 72, 56, DIR_NE
| AMED_EXACTPOS
, _airport_fta_intercontinental_13
}, // 13 Helipad 2
805 { TERM_GROUP2_ENTER1_block
, 0, 15, 40, 136, DIR_N
, NULL
}, // 14 Term group 2 enter 1 a
806 { TERM_GROUP2_ENTER1_block
, 0, 16, 56, 136, DIR_N
, NULL
}, // 15 Term group 2 enter 1 b
807 { TERM_GROUP2_ENTER2_block
, 0, 17, 88, 136, DIR_N
, NULL
}, // 16 Term group 2 enter 2 a
808 { TERM_GROUP2_ENTER2_block
, 0, 18, 104, 136, DIR_N
, NULL
}, // 17 Term group 2 enter 2 b
809 { TERM_GROUP2_block
, 255, 0, 104, 120, DIR_N
, _airport_fta_intercontinental_18
}, // 18 Term group 2 - opp term 5
810 { TERM_GROUP2_block
, 255, 0, 104, 104, DIR_N
, _airport_fta_intercontinental_19
}, // 19 Term group 2 - opp term 6 & exit2
811 { TERM_GROUP2_block
, 255, 0, 104, 88, DIR_N
, _airport_fta_intercontinental_20
}, // 20 Term group 2 - opp term 7 & hangar area 2
812 { TERM_GROUP2_block
, 255, 0, 104, 72, DIR_N
, _airport_fta_intercontinental_21
}, // 21 Term group 2 - opp term 8
813 { TERM_GROUP2_block
, 255, 0, 104, 56, DIR_N
, _airport_fta_intercontinental_22
}, // 22 Taxi Term group 2 exit a
814 { TERM_GROUP2_EXIT1_block
, 0, 70, 104, 40, DIR_N
, NULL
}, // 23 Taxi Term group 2 exit b
815 { TERM_GROUP2_EXIT2_block
, 0, 25, 56, 40, DIR_N
, NULL
}, // 24 Term group 2 exit 2a
816 { TERM_GROUP2_EXIT2_block
, 255, 0, 40, 40, DIR_N
, _airport_fta_intercontinental_25
}, // 25 Term group 2 exit 2b
817 { TERM_GROUP1_block
, 255, 0, 40, 120, DIR_N
, _airport_fta_intercontinental_26
}, // 26 Term group 1 - opp term 1
818 { TERM_GROUP1_block
, 255, 0, 40, 104, DIR_N
, _airport_fta_intercontinental_27
}, // 27 Term group 1 - opp term 2 & hangar area 1
819 { TERM_GROUP1_block
, 255, 0, 40, 88, DIR_N
, _airport_fta_intercontinental_28
}, // 28 Term group 1 - opp term 3
820 { TERM_GROUP1_block
, 255, 0, 40, 72, DIR_N
, _airport_fta_intercontinental_29
}, // 29 Term group 1 - opp term 4
821 { OUT_WAY_block2
, 0, 31, 18, 72, DIR_NW
, NULL
}, // 30 Outway 1
822 { OUT_WAY_block
, 0, 32, 8, 40, DIR_NW
, NULL
}, // 31 Airport OUTWAY
824 { RUNWAY_OUT_block
, TAKEOFF
, 33, 8, 24, DIR_SW
| AMED_EXACTPOS
, NULL
}, // 32 Accelerate to end of runway
825 { RUNWAY_OUT_block
, 0, 34, 119, 24, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 33 Release control of runway, for smoother movement
826 { NOTHING_block
, STARTTAKEOFF
, 35, 117, 24, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 34 End of runway
827 { NOTHING_block
, ENDTAKEOFF
, 0, 197, 24, DIR_N
| AMED_NOSPDCLAMP
| AMED_TAKEOFF
, NULL
}, // 35 Take off
829 { 0, 0, 0, 254, 84, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 36 Flying to landing position in air
830 { RUNWAY_IN_block
, LANDING
, 38, 117, 168, DIR_N
| AMED_NOSPDCLAMP
| AMED_LAND
, NULL
}, // 37 Going down for land
831 { RUNWAY_IN_block
, 0, 39, 8, 168, DIR_N
| AMED_NOSPDCLAMP
| AMED_BRAKE
, NULL
}, // 38 Just landed, brake until end of runway
832 { RUNWAY_IN_block
, 0, 40, 8, 168, DIR_N
, NULL
}, // 39 Just landed, turn around and taxi
833 { RUNWAY_IN_block
, ENDLANDING
, 41, 8, 144, DIR_NW
, NULL
}, // 40 Taxi from runway
834 { IN_WAY_block
, 0, 42, 8, 128, DIR_NW
, NULL
}, // 41 Taxi from runway
835 { IN_WAY_block
, 255, 0, 8, 120, DIR_NW
| AMED_EXACTPOS
, _airport_fta_intercontinental_42
}, // 42 Airport entrance
837 { 0, 0, 44, 56, 344, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 43 Fly around waiting for a landing spot (north-east)
838 { 0, FLYING
, 45, -200, 88, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_intercontinental_44
}, // 44 Fly around waiting for a landing spot (north-west)
839 { 0, 0, 46, 56, -168, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 45 Fly around waiting for a landing spot (south-west)
840 { 0, FLYING
, 43, 312, 88, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_intercontinental_46
}, // 46 Fly around waiting for a landing spot (south)
841 /* helicopter -- stay in air in special place as a buffer to choose from helipads */
842 { PRE_HELIPAD_block
, HELILANDING
, 48, 96, 40, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 47 Bufferspace before helipad
843 { PRE_HELIPAD_block
, HELIENDLANDING
, 48, 96, 40, DIR_N
| AMED_NOSPDCLAMP
, _airport_fta_intercontinental_48
}, // 48 Bufferspace before helipad
844 { NOTHING_block
, 0, 51, 82, 54, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 49 Get in position for Helipad1
845 { NOTHING_block
, 0, 52, 64, 56, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 50 Get in position for Helipad2
847 { NOTHING_block
, 255, 0, 81, 55, DIR_N
| AMED_HELI_LOWER
, _airport_fta_intercontinental_51
}, // 51 Land at Helipad1
848 { NOTHING_block
, 255, 0, 64, 56, DIR_N
| AMED_HELI_LOWER
, _airport_fta_intercontinental_52
}, // 52 Land at Helipad2
849 /* helicopter takeoff */
850 { NOTHING_block
, HELITAKEOFF
, 0, 80, 56, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 53 Takeoff Helipad1
851 { NOTHING_block
, HELITAKEOFF
, 0, 64, 56, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 54 Takeoff Helipad2
852 { HANGAR2_AREA_block
, 0, 56, 136, 96, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 55 Go to position for Hangarentrance in air
853 { HANGAR2_AREA_block
, 0, 3, 136, 96, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 56 Land in front of hangar2
854 /* runway 2 out support */
855 { OUT_WAY2_block
, 255, 0, 126, 104, DIR_SE
, _airport_fta_intercontinental_57
}, // 57 Outway 2
856 { OUT_WAY2_block
, 0, 59, 136, 136, DIR_NE
, NULL
}, // 58 Airport OUTWAY 2
857 { RUNWAY_OUT2_block
, TAKEOFF
, 60, 136, 152, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 59 Accelerate to end of runway2
858 { RUNWAY_OUT2_block
, 0, 61, 16, 152, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 60 Release control of runway2, for smoother movement
859 { NOTHING_block
, STARTTAKEOFF
, 62, 20, 152, DIR_N
| AMED_NOSPDCLAMP
, NULL
}, // 61 End of runway2
860 { NOTHING_block
, ENDTAKEOFF
, 0, -56, 152, DIR_N
| AMED_NOSPDCLAMP
| AMED_TAKEOFF
, NULL
}, // 62 Take off2
861 /* runway 2 in support */
862 { RUNWAY_IN2_block
, LANDING
, 64, 24, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_LAND
, NULL
}, // 63 Going down for land2
863 { RUNWAY_IN2_block
, 0, 65, 136, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_BRAKE
, NULL
}, // 64 Just landed, brake until end of runway2in
864 { RUNWAY_IN2_block
, 0, 66, 136, 8, DIR_N
, NULL
}, // 65 Just landed, turn around and taxi
865 { RUNWAY_IN2_block
, ENDLANDING
, 0, 136, 24, DIR_SE
, _airport_fta_intercontinental_66
}, // 66 Taxi from runway 2in
866 { IN_WAY2_block
, 0, 68, 136, 40, DIR_SE
, NULL
}, // 67 Taxi from runway 2in
867 { IN_WAY2_block
, 255, 0, 136, 56, DIR_NE
| AMED_EXACTPOS
, _airport_fta_intercontinental_68
}, // 68 Airport entrance2
868 { RUNWAY_IN2_block
, 255, 0, -56, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_intercontinental_69
}, // 69 Fly to landing position in air2
869 { TERM_GROUP2_EXIT1_block
, 255, 0, 88, 40, DIR_N
, _airport_fta_intercontinental_70
}, // 70 Taxi Term group 2 exit - opp heli1
870 { TERM_GROUP2_EXIT1_block
, 255, 0, 72, 40, DIR_N
, _airport_fta_intercontinental_71
}, // 71 Taxi Term group 2 exit - opp heli2
871 { HELIPAD1_block
, 0, 53, 88, 57, DIR_SE
| AMED_EXACTPOS
, NULL
}, // 72 pre-helitakeoff helipad 1
872 { HELIPAD2_block
, 0, 54, 71, 56, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 73 pre-helitakeoff helipad 2
873 { NOTHING_block
, HELITAKEOFF
, 0, 8, 120, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 74 Helitakeoff outside depot 1
874 { NOTHING_block
, HELITAKEOFF
, 0, 136, 104, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 75 Helitakeoff outside depot 2
875 { RUNWAY_IN_block
, 255, 0, 197, 168, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_intercontinental_76
}, // 76 Fly to landing position in air1
879 /* heliports, oilrigs don't have depots */
880 static const byte _airport_entries_heliport
[] = { 7, 7, 7, 7 };
882 static const AirportFTA::Transition _airport_fta_heliport_2
[] = {
883 { 0, HELILANDING
, 3, false },
884 { 0, HELITAKEOFF
, 1, true }
886 static const AirportFTA::Transition _airport_fta_heliport_4
[] = {
887 { HELIPAD1_block
, HELIPAD1
, 0, false },
888 { 0, HELITAKEOFF
, 2, true }
890 static const AirportFTA::Transition _airport_fta_heliport_8
[] = {
891 { HELIPAD1_block
, HELILANDING
, 2, true }
893 static const AirportFTA::Position _airport_fta_heliport
[9] = {
894 { HELIPAD1_block
, HELIPAD1
, 1, 5, 9, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 0 - At heliport terminal
895 { NOTHING_block
, HELITAKEOFF
, 0, 2, 9, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 1 - Take off (play sound)
896 { AIRPORT_BUSY_block
, 255, 0, -3, 9, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_heliport_2
}, // 2 - In position above landing spot helicopter
897 { AIRPORT_BUSY_block
, HELILANDING
, 4, -3, 9, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 3 - Land
898 { AIRPORT_BUSY_block
, HELIENDLANDING
, 4, 2, 9, DIR_N
, _airport_fta_heliport_4
}, // 4 - Goto terminal on ground
900 { NOTHING_block
, 0, 6, -31, 59, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 5 - Circle #1 (north-east)
901 { NOTHING_block
, 0, 7, -31, -49, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 6 - Circle #2 (north-west)
902 { NOTHING_block
, 0, 8, 49, -49, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 7 - Circle #3 (south-west)
903 { NOTHING_block
, FLYING
, 5, 70, 9, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_heliport_8
}, // 8 - Circle #4 (south)
906 #define _airport_entries_oilrig _airport_entries_heliport
908 static const AirportFTA::Position _airport_fta_oilrig
[9] = {
909 { HELIPAD1_block
, HELIPAD1
, 1, 31, 9, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 0 - At oilrig terminal
910 { NOTHING_block
, HELITAKEOFF
, 0, 28, 9, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 1 - Take off (play sound)
911 { AIRPORT_BUSY_block
, 255, 0, 23, 9, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_heliport_2
}, // 2 - In position above landing spot helicopter
912 { AIRPORT_BUSY_block
, HELILANDING
, 4, 23, 9, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 3 - Land
913 { AIRPORT_BUSY_block
, HELIENDLANDING
, 4, 28, 9, DIR_N
, _airport_fta_heliport_4
}, // 4 - Goto terminal on ground
915 { NOTHING_block
, 0, 6, -31, 69, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 5 - circle #1 (north-east)
916 { NOTHING_block
, 0, 7, -31, -49, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 6 - circle #2 (north-west)
917 { NOTHING_block
, 0, 8, 69, -49, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 7 - circle #3 (south-west)
918 { NOTHING_block
, FLYING
, 5, 69, 9, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_heliport_8
}, // 8 - circle #4 (south)
922 static const AirportFTA::Hangar _airport_depots_helidepot
[] = { { 1, 0, DIR_SE
, 0 } };
923 static const byte _airport_entries_helidepot
[] = { 4, 4, 4, 4 };
925 static const AirportFTA::Transition _airport_fta_helidepot_1
[] = {
926 { 0, HANGAR
, 0, false },
927 { HELIPAD1_block
, HELIPAD1
, 14, false },
928 { 0, HELITAKEOFF
, 15, false },
931 static const AirportFTA::Transition _airport_fta_helidepot_2
[] = {
932 { PRE_HELIPAD_block
, HELILANDING
, 7, false },
933 { 0, HANGAR
, 12, false },
934 { NOTHING_block
, HELITAKEOFF
, 16, true }
936 static const AirportFTA::Transition _airport_fta_helidepot_8
[] = {
937 { 0, HELIPAD1
, 9, false },
938 { 0, HANGAR
, 12, false },
941 static const AirportFTA::Transition _airport_fta_helidepot_10
[] = {
942 { HELIPAD1_block
, HELIPAD1
, 14, false },
943 { 0, HANGAR
, 1, false },
946 static const AirportFTA::Transition _airport_fta_helidepot_14
[] = {
947 { 0, HANGAR
, 1, false },
948 { 0, HELITAKEOFF
, 17, true }
950 static const AirportFTA::Position _airport_fta_helidepot
[18] = {
951 { NOTHING_block
, HANGAR
, 1, 24, 4, DIR_NE
| AMED_EXACTPOS
, NULL
}, // 0 - At depot
952 { HANGAR2_AREA_block
, 255, 0, 24, 28, DIR_N
, _airport_fta_helidepot_1
}, // 1 Taxi to right outside depot
953 { NOTHING_block
, FLYING
, 3, 5, 38, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_helidepot_2
}, // 2 Flying
955 { NOTHING_block
, 0, 4, -15, -15, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 3 - Circle #1 (north-east)
956 { NOTHING_block
, 0, 5, -15, -49, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 4 - Circle #2 (north-west)
957 { NOTHING_block
, 0, 6, 49, -49, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 5 - Circle #3 (south-west)
958 { NOTHING_block
, 0, 2, 49, -15, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 6 - Circle #4 (south-east)
959 /* helicopter -- stay in air in special place as a buffer to choose from helipads */
960 { PRE_HELIPAD_block
, HELILANDING
, 8, 8, 32, DIR_NW
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 7 - PreHelipad
961 { PRE_HELIPAD_block
, HELIENDLANDING
, 8, 8, 32, DIR_NW
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_helidepot_8
}, // 8 - Helipad
962 { NOTHING_block
, 0, 10, 8, 16, DIR_NW
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 9 - Land
964 { NOTHING_block
, 255, 10, 8, 16, DIR_NW
| AMED_HELI_LOWER
, _airport_fta_helidepot_10
}, // 10 - Land
965 /* helicopter takeoff */
966 { NOTHING_block
, HELITAKEOFF
, 0, 8, 24, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 11 - Take off (play sound)
967 { HANGAR2_AREA_block
, 0, 13, 32, 24, DIR_NW
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 12 Air to above hangar area
968 { HANGAR2_AREA_block
, 0, 1, 32, 24, DIR_NW
| AMED_HELI_LOWER
, NULL
}, // 13 Taxi to right outside depot
969 { HELIPAD1_block
, HELIPAD1
, 14, 8, 24, DIR_NW
| AMED_EXACTPOS
, _airport_fta_helidepot_14
}, // 14 - on helipad1
970 { NOTHING_block
, HELITAKEOFF
, 0, 24, 28, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 15 Takeoff right outside depot
971 { 0, HELITAKEOFF
, 14, 8, 24, DIR_SW
| AMED_HELI_RAISE
, NULL
}, // 16 - Take off (play sound)
972 { NOTHING_block
, 0, 11, 8, 24, DIR_E
| AMED_SLOWTURN
| AMED_EXACTPOS
, NULL
}, // 17 - turn on helipad1 for takeoff
976 static const AirportFTA::Hangar _airport_depots_helistation
[] = { { 0, 0, DIR_SE
, 0 } };
977 static const byte _airport_entries_helistation
[] = { 25, 25, 25, 25 };
979 static const AirportFTA::Transition _airport_fta_helistation_0
[] = {
980 { 0, HELIPAD1
, 1, false },
981 { 0, HELIPAD2
, 1, false },
982 { 0, HELIPAD3
, 1, false },
983 { 0, HELITAKEOFF
, 1, false },
986 static const AirportFTA::Transition _airport_fta_helistation_1
[] = {
987 { 0, HANGAR
, 0, false },
988 { 0, HELITAKEOFF
, 3, false },
991 static const AirportFTA::Transition _airport_fta_helistation_2
[] = {
992 { 0, HELILANDING
, 15, false },
995 static const AirportFTA::Transition _airport_fta_helistation_4
[] = {
996 { HANGAR2_AREA_block
, HANGAR
, 1, false },
997 { 0, HELITAKEOFF
, 1, false },
1000 static const AirportFTA::Transition _airport_fta_helistation_5
[] = {
1001 { HELIPAD1_block
, HELIPAD1
, 6, false },
1002 { HELIPAD2_block
, HELIPAD2
, 7, false },
1003 { HELIPAD3_block
, HELIPAD3
, 8, false },
1006 static const AirportFTA::Transition _airport_fta_helistation_6
[] = {
1007 { HANGAR2_AREA_block
, HANGAR
, 5, false },
1008 { 0, HELITAKEOFF
, 9, false },
1011 static const AirportFTA::Transition _airport_fta_helistation_7
[] = {
1012 { HANGAR2_AREA_block
, HANGAR
, 5, false },
1013 { 0, HELITAKEOFF
, 10, false },
1016 static const AirportFTA::Transition _airport_fta_helistation_8
[] = {
1017 { HANGAR2_AREA_block
, HANGAR
, 5, false },
1018 { 0, HELITAKEOFF
, 11, false },
1021 static const AirportFTA::Transition _airport_fta_helistation_16
[] = {
1022 { 0, HELIPAD1
, 17, false },
1023 { 0, HELIPAD2
, 18, false },
1024 { 0, HELIPAD3
, 19, false },
1025 { 0, HANGAR
, 23, true }
1027 static const AirportFTA::Transition _airport_fta_helistation_20
[] = {
1028 { HELIPAD1_block
, HELIPAD1
, 6, false },
1029 { 0, HANGAR
, 23, false },
1032 static const AirportFTA::Transition _airport_fta_helistation_21
[] = {
1033 { HELIPAD2_block
, HELIPAD2
, 7, false },
1034 { 0, HANGAR
, 23, false },
1037 static const AirportFTA::Transition _airport_fta_helistation_22
[] = {
1038 { HELIPAD3_block
, HELIPAD3
, 8, false },
1039 { 0, HANGAR
, 23, false },
1042 static const AirportFTA::Position _airport_fta_helistation
[33] = {
1043 { NOTHING_block
, HANGAR
, 8, 8, 3, DIR_SE
| AMED_EXACTPOS
, _airport_fta_helistation_0
}, // 00 In Hangar2
1044 { HANGAR2_AREA_block
, 255, 0, 8, 22, DIR_N
, _airport_fta_helistation_1
}, // 01 outside hangar 2
1046 { NOTHING_block
, FLYING
, 28, 116, 24, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_helistation_2
}, // 02 Fly to landing position in air
1047 /* helicopter side */
1048 { NOTHING_block
, HELITAKEOFF
, 0, 14, 22, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 03 Helitakeoff outside hangar1 (play sound)
1049 { TAXIWAY_BUSY_block
, 255, 0, 24, 22, DIR_N
, _airport_fta_helistation_4
}, // 04 taxiing
1050 { TAXIWAY_BUSY_block
, 255, 0, 40, 22, DIR_N
, _airport_fta_helistation_5
}, // 05 taxiing
1051 { HELIPAD1_block
, HELIPAD1
, 5, 40, 8, DIR_NE
| AMED_EXACTPOS
, _airport_fta_helistation_6
}, // 06 Helipad 1
1052 { HELIPAD2_block
, HELIPAD2
, 5, 56, 8, DIR_NE
| AMED_EXACTPOS
, _airport_fta_helistation_7
}, // 07 Helipad 2
1053 { HELIPAD3_block
, HELIPAD3
, 5, 56, 24, DIR_NE
| AMED_EXACTPOS
, _airport_fta_helistation_8
}, // 08 Helipad 3
1054 { HELIPAD1_block
, 0, 12, 40, 8, DIR_N
| AMED_EXACTPOS
, NULL
}, // 09 pre-helitakeoff helipad 1
1055 { HELIPAD2_block
, 0, 13, 56, 8, DIR_N
| AMED_EXACTPOS
, NULL
}, // 10 pre-helitakeoff helipad 2
1056 { HELIPAD3_block
, 0, 14, 56, 24, DIR_N
| AMED_EXACTPOS
, NULL
}, // 11 pre-helitakeoff helipad 3
1057 { NOTHING_block
, HELITAKEOFF
, 0, 32, 8, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 12 Takeoff Helipad1
1058 { NOTHING_block
, HELITAKEOFF
, 0, 48, 8, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 13 Takeoff Helipad2
1059 { NOTHING_block
, HELITAKEOFF
, 0, 48, 24, DIR_N
| AMED_HELI_RAISE
, NULL
}, // 14 Takeoff Helipad3
1061 { PRE_HELIPAD_block
, HELILANDING
, 16, 84, 24, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 15 Bufferspace before helipad
1062 { PRE_HELIPAD_block
, HELIENDLANDING
, 16, 68, 24, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, _airport_fta_helistation_16
}, // 16 Bufferspace before helipad
1063 { NOTHING_block
, 0, 20, 32, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 17 Get in position for Helipad1
1064 { NOTHING_block
, 0, 21, 48, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 18 Get in position for Helipad2
1065 { NOTHING_block
, 0, 22, 48, 24, DIR_NE
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 19 Get in position for Helipad3
1066 /* helicopter landing */
1067 { NOTHING_block
, 255, 0, 40, 8, DIR_N
| AMED_HELI_LOWER
, _airport_fta_helistation_20
}, // 20 Land at Helipad1
1068 { NOTHING_block
, 255, 0, 48, 8, DIR_N
| AMED_HELI_LOWER
, _airport_fta_helistation_21
}, // 21 Land at Helipad2
1069 { NOTHING_block
, 255, 0, 48, 24, DIR_N
| AMED_HELI_LOWER
, _airport_fta_helistation_22
}, // 22 Land at Helipad3
1070 { HANGAR2_AREA_block
, 0, 24, 0, 22, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 23 Go to position for Hangarentrance in air
1071 { HANGAR2_AREA_block
, 0, 1, 0, 22, DIR_N
| AMED_HELI_LOWER
, NULL
}, // 24 Land in front of hangar
1072 { NOTHING_block
, 0, 26, 148, -8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 25 Fly around waiting for a landing spot (south-east)
1073 { NOTHING_block
, 0, 27, 148, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 26 Fly around waiting for a landing spot (south-west)
1074 { NOTHING_block
, 0, 2, 132, 24, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 27 Fly around waiting for a landing spot (south-west)
1075 { NOTHING_block
, 0, 29, 100, 24, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 28 Fly around waiting for a landing spot (north-east)
1076 { NOTHING_block
, 0, 30, 84, 8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 29 Fly around waiting for a landing spot (south-east)
1077 { NOTHING_block
, 0, 31, 84, -8, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 30 Fly around waiting for a landing spot (south-west)
1078 { NOTHING_block
, 0, 32, 100, -24, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 31 Fly around waiting for a landing spot (north-west)
1079 { NOTHING_block
, 0, 25, 132, -24, DIR_N
| AMED_NOSPDCLAMP
| AMED_SLOWTURN
, NULL
}, // 32 Fly around waiting for a landing spot (north-east)
1082 #endif /* AIRPORT_MOVEMENT_H */