OpenTTD Source 20250529-master-g10c159a79f
airport_defaults.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * 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.
4 * 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.
5 * 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/>.
6 */
7
10#ifndef AIRPORT_DEFAULTS_H
11#define AIRPORT_DEFAULTS_H
12
13#include "../timer/timer_game_calendar.h"
14
23#define MK(x, y, m) {{x, y}, m}
24
26static const std::initializer_list<AirportTileTable> _tile_table_country_0 = {
27 MK(0, 0, APT_SMALL_BUILDING_1),
28 MK(1, 0, APT_SMALL_BUILDING_2),
29 MK(2, 0, APT_SMALL_BUILDING_3),
30 MK(3, 0, APT_SMALL_DEPOT_SE),
31 MK(0, 1, APT_GRASS_FENCE_NE_FLAG),
32 MK(1, 1, APT_GRASS_1),
33 MK(2, 1, APT_GRASS_2),
34 MK(3, 1, APT_GRASS_FENCE_SW),
35 MK(0, 2, APT_RUNWAY_SMALL_FAR_END),
36 MK(1, 2, APT_RUNWAY_SMALL_MIDDLE),
37 MK(2, 2, APT_RUNWAY_SMALL_MIDDLE),
38 MK(3, 2, APT_RUNWAY_SMALL_NEAR_END),
39};
40
41static const std::initializer_list<AirportTileLayout> _tile_table_country = {
43};
44
46static const std::initializer_list<AirportTileTable> _tile_table_commuter_0 = {
47 MK(0, 0, APT_TOWER),
48 MK(1, 0, APT_BUILDING_3),
49 MK(2, 0, APT_HELIPAD_2_FENCE_NW),
50 MK(3, 0, APT_HELIPAD_2_FENCE_NW),
51 MK(4, 0, APT_DEPOT_SE),
52 MK(0, 1, APT_APRON_FENCE_NE),
53 MK(1, 1, APT_APRON),
54 MK(2, 1, APT_APRON),
55 MK(3, 1, APT_APRON),
56 MK(4, 1, APT_APRON_FENCE_SW),
57 MK(0, 2, APT_APRON_FENCE_NE),
58 MK(1, 2, APT_STAND),
59 MK(2, 2, APT_STAND),
60 MK(3, 2, APT_STAND),
61 MK(4, 2, APT_APRON_FENCE_SW),
62 MK(0, 3, APT_RUNWAY_END_FENCE_SE),
63 MK(1, 3, APT_RUNWAY_2),
64 MK(2, 3, APT_RUNWAY_2),
65 MK(3, 3, APT_RUNWAY_2),
66 MK(4, 3, APT_RUNWAY_END_FENCE_SE),
67};
68
69static const std::initializer_list<AirportTileLayout> _tile_table_commuter = {
71};
72
74static const std::initializer_list<AirportTileTable> _tile_table_city_0 = {
75 MK(0, 0, APT_BUILDING_1),
76 MK(1, 0, APT_APRON_FENCE_NW),
77 MK(2, 0, APT_STAND_1),
78 MK(3, 0, APT_APRON_FENCE_NW),
79 MK(4, 0, APT_APRON_FENCE_NW),
80 MK(5, 0, APT_DEPOT_SE),
81 MK(0, 1, APT_BUILDING_2),
82 MK(1, 1, APT_PIER),
83 MK(2, 1, APT_ROUND_TERMINAL),
84 MK(3, 1, APT_STAND_PIER_NE),
85 MK(4, 1, APT_APRON),
86 MK(5, 1, APT_APRON_FENCE_SW),
87 MK(0, 2, APT_BUILDING_3),
88 MK(1, 2, APT_STAND),
89 MK(2, 2, APT_PIER_NW_NE),
90 MK(3, 2, APT_APRON_S),
91 MK(4, 2, APT_APRON_HOR),
92 MK(5, 2, APT_APRON_N_FENCE_SW),
93 MK(0, 3, APT_RADIO_TOWER_FENCE_NE),
94 MK(1, 3, APT_APRON_W),
95 MK(2, 3, APT_APRON_VER_CROSSING_S),
96 MK(3, 3, APT_APRON_HOR_CROSSING_E),
97 MK(4, 3, APT_ARPON_N),
98 MK(5, 3, APT_TOWER_FENCE_SW),
99 MK(0, 4, APT_EMPTY_FENCE_NE),
100 MK(1, 4, APT_APRON_S),
101 MK(2, 4, APT_APRON_HOR_CROSSING_W),
102 MK(3, 4, APT_APRON_VER_CROSSING_N),
103 MK(4, 4, APT_APRON_E),
104 MK(5, 4, APT_RADAR_GRASS_FENCE_SW),
105 MK(0, 5, APT_RUNWAY_END_FENCE_SE),
106 MK(1, 5, APT_RUNWAY_1),
107 MK(2, 5, APT_RUNWAY_2),
108 MK(3, 5, APT_RUNWAY_3),
109 MK(4, 5, APT_RUNWAY_4),
110 MK(5, 5, APT_RUNWAY_END_FENCE_SE),
111};
112
113static const std::initializer_list<AirportTileLayout> _tile_table_city = {
115};
116
118static const std::initializer_list<AirportTileTable> _tile_table_metropolitan_0 = {
119 MK(0, 0, APT_BUILDING_1),
120 MK(1, 0, APT_APRON_FENCE_NW),
121 MK(2, 0, APT_STAND_1),
122 MK(3, 0, APT_APRON_FENCE_NW),
123 MK(4, 0, APT_APRON_FENCE_NW),
124 MK(5, 0, APT_DEPOT_SE),
125 MK(0, 1, APT_BUILDING_2),
126 MK(1, 1, APT_PIER),
127 MK(2, 1, APT_ROUND_TERMINAL),
128 MK(3, 1, APT_STAND_PIER_NE),
129 MK(4, 1, APT_APRON),
130 MK(5, 1, APT_APRON_FENCE_SW),
131 MK(0, 2, APT_BUILDING_3),
132 MK(1, 2, APT_STAND),
133 MK(2, 2, APT_PIER_NW_NE),
134 MK(3, 2, APT_APRON_S),
135 MK(4, 2, APT_APRON_HOR),
136 MK(5, 2, APT_APRON_N_FENCE_SW),
137 MK(0, 3, APT_RADAR_FENCE_NE),
138 MK(1, 3, APT_APRON),
139 MK(2, 3, APT_APRON),
140 MK(3, 3, APT_APRON),
141 MK(4, 3, APT_APRON),
142 MK(5, 3, APT_TOWER_FENCE_SW),
143 MK(0, 4, APT_RUNWAY_END),
144 MK(1, 4, APT_RUNWAY_5),
145 MK(2, 4, APT_RUNWAY_5),
146 MK(3, 4, APT_RUNWAY_5),
147 MK(4, 4, APT_RUNWAY_5),
148 MK(5, 4, APT_RUNWAY_END),
149 MK(0, 5, APT_RUNWAY_END_FENCE_SE),
150 MK(1, 5, APT_RUNWAY_2),
151 MK(2, 5, APT_RUNWAY_2),
152 MK(3, 5, APT_RUNWAY_2),
153 MK(4, 5, APT_RUNWAY_2),
154 MK(5, 5, APT_RUNWAY_END_FENCE_SE),
155};
156
157static const std::initializer_list<AirportTileLayout> _tile_table_metropolitan = {
159};
160
162static const std::initializer_list<AirportTileTable> _tile_table_international_0 = {
163 MK(0, 0, APT_RUNWAY_END_FENCE_NW),
164 MK(1, 0, APT_RUNWAY_FENCE_NW),
165 MK(2, 0, APT_RUNWAY_FENCE_NW),
166 MK(3, 0, APT_RUNWAY_FENCE_NW),
167 MK(4, 0, APT_RUNWAY_FENCE_NW),
168 MK(5, 0, APT_RUNWAY_FENCE_NW),
169 MK(6, 0, APT_RUNWAY_END_FENCE_NW),
170 MK(0, 1, APT_RADIO_TOWER_FENCE_NE),
171 MK(1, 1, APT_APRON),
172 MK(2, 1, APT_APRON),
173 MK(3, 1, APT_APRON),
174 MK(4, 1, APT_APRON),
175 MK(5, 1, APT_APRON),
176 MK(6, 1, APT_DEPOT_SE),
177 MK(0, 2, APT_BUILDING_3),
178 MK(1, 2, APT_APRON),
179 MK(2, 2, APT_STAND),
180 MK(3, 2, APT_BUILDING_2),
181 MK(4, 2, APT_STAND),
182 MK(5, 2, APT_APRON),
183 MK(6, 2, APT_APRON_FENCE_SW),
184 MK(0, 3, APT_DEPOT_SE),
185 MK(1, 3, APT_APRON),
186 MK(2, 3, APT_STAND),
187 MK(3, 3, APT_BUILDING_2),
188 MK(4, 3, APT_STAND),
189 MK(5, 3, APT_APRON),
190 MK(6, 3, APT_HELIPAD_1),
191 MK(0, 4, APT_APRON_FENCE_NE),
192 MK(1, 4, APT_APRON),
193 MK(2, 4, APT_STAND),
194 MK(3, 4, APT_TOWER),
195 MK(4, 4, APT_STAND),
196 MK(5, 4, APT_APRON),
197 MK(6, 4, APT_HELIPAD_1),
198 MK(0, 5, APT_APRON_FENCE_NE),
199 MK(1, 5, APT_APRON),
200 MK(2, 5, APT_APRON),
201 MK(3, 5, APT_APRON),
202 MK(4, 5, APT_APRON),
203 MK(5, 5, APT_APRON),
204 MK(6, 5, APT_RADAR_FENCE_SW),
205 MK(0, 6, APT_RUNWAY_END_FENCE_SE),
206 MK(1, 6, APT_RUNWAY_2),
207 MK(2, 6, APT_RUNWAY_2),
208 MK(3, 6, APT_RUNWAY_2),
209 MK(4, 6, APT_RUNWAY_2),
210 MK(5, 6, APT_RUNWAY_2),
211 MK(6, 6, APT_RUNWAY_END_FENCE_SE),
212};
213
214static const std::initializer_list<AirportTileLayout> _tile_table_international = {
216};
217
219static const std::initializer_list<AirportTileTable> _tile_table_intercontinental_0 = {
220 MK(0, 0, APT_RADAR_FENCE_NE),
221 MK(1, 0, APT_RUNWAY_END_FENCE_NE_NW),
222 MK(2, 0, APT_RUNWAY_FENCE_NW),
223 MK(3, 0, APT_RUNWAY_FENCE_NW),
224 MK(4, 0, APT_RUNWAY_FENCE_NW),
225 MK(5, 0, APT_RUNWAY_FENCE_NW),
226 MK(6, 0, APT_RUNWAY_FENCE_NW),
227 MK(7, 0, APT_RUNWAY_FENCE_NW),
228 MK(8, 0, APT_RUNWAY_END_FENCE_NW_SW),
229 MK(0, 1, APT_RUNWAY_END_FENCE_NE_NW),
230 MK(1, 1, APT_RUNWAY_2),
231 MK(2, 1, APT_RUNWAY_2),
232 MK(3, 1, APT_RUNWAY_2),
233 MK(4, 1, APT_RUNWAY_2),
234 MK(5, 1, APT_RUNWAY_2),
235 MK(6, 1, APT_RUNWAY_2),
236 MK(7, 1, APT_RUNWAY_END_FENCE_SE_SW),
237 MK(8, 1, APT_APRON_FENCE_NE_SW),
238 MK(0, 2, APT_APRON_FENCE_NE_SW),
239 MK(1, 2, APT_EMPTY),
240 MK(2, 2, APT_APRON_FENCE_NE),
241 MK(3, 2, APT_APRON),
242 MK(4, 2, APT_APRON),
243 MK(5, 2, APT_APRON),
244 MK(6, 2, APT_APRON),
245 MK(7, 2, APT_RADIO_TOWER_FENCE_NE),
246 MK(8, 2, APT_APRON_FENCE_NE_SW),
247 MK(0, 3, APT_APRON_FENCE_NE),
248 MK(1, 3, APT_APRON_HALF_EAST),
249 MK(2, 3, APT_APRON_FENCE_NE),
250 MK(3, 3, APT_TOWER),
251 MK(4, 3, APT_HELIPAD_2),
252 MK(5, 3, APT_HELIPAD_2),
253 MK(6, 3, APT_APRON),
254 MK(7, 3, APT_APRON_FENCE_NW),
255 MK(8, 3, APT_APRON_FENCE_SW),
256 MK(0, 4, APT_APRON_FENCE_NE),
257 MK(1, 4, APT_APRON),
258 MK(2, 4, APT_APRON),
259 MK(3, 4, APT_STAND),
260 MK(4, 4, APT_BUILDING_1),
261 MK(5, 4, APT_STAND),
262 MK(6, 4, APT_APRON),
263 MK(7, 4, APT_LOW_BUILDING),
264 MK(8, 4, APT_DEPOT_SE),
265 MK(0, 5, APT_DEPOT_SE),
266 MK(1, 5, APT_LOW_BUILDING),
267 MK(2, 5, APT_APRON),
268 MK(3, 5, APT_STAND),
269 MK(4, 5, APT_BUILDING_2),
270 MK(5, 5, APT_STAND),
271 MK(6, 5, APT_APRON),
272 MK(7, 5, APT_APRON),
273 MK(8, 5, APT_APRON_FENCE_SW),
274 MK(0, 6, APT_APRON_FENCE_NE),
275 MK(1, 6, APT_APRON),
276 MK(2, 6, APT_APRON),
277 MK(3, 6, APT_STAND),
278 MK(4, 6, APT_BUILDING_3),
279 MK(5, 6, APT_STAND),
280 MK(6, 6, APT_APRON),
281 MK(7, 6, APT_APRON),
282 MK(8, 6, APT_APRON_FENCE_SW),
283 MK(0, 7, APT_APRON_FENCE_NE),
284 MK(1, 7, APT_APRON_FENCE_SE),
285 MK(2, 7, APT_APRON),
286 MK(3, 7, APT_STAND),
287 MK(4, 7, APT_ROUND_TERMINAL),
288 MK(5, 7, APT_STAND),
289 MK(6, 7, APT_APRON_FENCE_SW),
290 MK(7, 7, APT_APRON_HALF_WEST),
291 MK(8, 7, APT_APRON_FENCE_SW),
292 MK(0, 8, APT_APRON_FENCE_NE),
293 MK(1, 8, APT_GRASS_FENCE_NE_FLAG_2),
294 MK(2, 8, APT_APRON_FENCE_NE),
295 MK(3, 8, APT_APRON),
296 MK(4, 8, APT_APRON),
297 MK(5, 8, APT_APRON),
298 MK(6, 8, APT_APRON_FENCE_SW),
299 MK(7, 8, APT_EMPTY),
300 MK(8, 8, APT_APRON_FENCE_NE_SW),
301 MK(0, 9, APT_APRON_FENCE_NE),
302 MK(1, 9, APT_RUNWAY_END_FENCE_NE_NW),
303 MK(2, 9, APT_RUNWAY_FENCE_NW),
304 MK(3, 9, APT_RUNWAY_FENCE_NW),
305 MK(4, 9, APT_RUNWAY_FENCE_NW),
306 MK(5, 9, APT_RUNWAY_FENCE_NW),
307 MK(6, 9, APT_RUNWAY_FENCE_NW),
308 MK(7, 9, APT_RUNWAY_FENCE_NW),
309 MK(8, 9, APT_RUNWAY_END_FENCE_SE_SW),
310 MK(0, 10, APT_RUNWAY_END_FENCE_NE_SE),
311 MK(1, 10, APT_RUNWAY_2),
312 MK(2, 10, APT_RUNWAY_2),
313 MK(3, 10, APT_RUNWAY_2),
314 MK(4, 10, APT_RUNWAY_2),
315 MK(5, 10, APT_RUNWAY_2),
316 MK(6, 10, APT_RUNWAY_2),
317 MK(7, 10, APT_RUNWAY_END_FENCE_SE_SW),
318 MK(8, 10, APT_EMPTY),
319};
320
321static const std::initializer_list<AirportTileLayout> _tile_table_intercontinental = {
323};
324
326static const std::initializer_list<AirportTileTable> _tile_table_heliport_0 = {
327 MK(0, 0, APT_HELIPORT),
328};
329
330static const std::initializer_list<AirportTileLayout> _tile_table_heliport = {
332};
333
335static const std::initializer_list<AirportTileTable> _tile_table_helidepot_0 = {
336 MK(0, 0, APT_LOW_BUILDING_FENCE_N),
337 MK(1, 0, APT_DEPOT_SE),
338 MK(0, 1, APT_HELIPAD_2_FENCE_NE_SE),
339 MK(1, 1, APT_APRON_FENCE_SE_SW),
340};
341
342static const std::initializer_list<AirportTileLayout> _tile_table_helidepot = {
344};
345
347static const std::initializer_list<AirportTileTable> _tile_table_helistation_0 = {
348 MK(0, 0, APT_DEPOT_SE),
349 MK(1, 0, APT_LOW_BUILDING_FENCE_NW),
350 MK(2, 0, APT_HELIPAD_3_FENCE_NW),
351 MK(3, 0, APT_HELIPAD_3_FENCE_NW_SW),
352 MK(0, 1, APT_APRON_FENCE_NE_SE),
353 MK(1, 1, APT_APRON_FENCE_SE),
354 MK(2, 1, APT_APRON_FENCE_SE),
355 MK(3, 1, APT_HELIPAD_3_FENCE_SE_SW),
356};
357
358static const std::initializer_list<AirportTileLayout> _tile_table_helistation = {
360};
361
362#undef MK
363
365#define AS_GENERIC(fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, enabled) \
366 {{class_id, 0}, fsm, layouts, depots, size_x, size_y, noise, catchment, TimerGameCalendar::Year{min_year}, TimerGameCalendar::Year{max_year}, name, ttdpatch_type, preview, maint_cost, enabled, SubstituteGRFFileProps(AT_INVALID), {}}
367
369#define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \
370 AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, {}, \
371 size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, true)
372
374#define AS(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \
375 AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _airport_depots_##ap_name, \
376 size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, true)
377
378/* The helidepot and helistation have ATP_TTDP_SMALL because they are at ground level */
379extern const AirportSpec _origin_airport_specs[] = {
380 AS(country, 4, 3, 0, 1959, 4, 3, 7, ATP_TTDP_SMALL, APC_SMALL, STR_AIRPORT_SMALL, SPR_AIRPORT_PREVIEW_SMALL),
381 AS(city, 6, 6, 1955, CalendarTime::MAX_YEAR, 5, 5, 24, ATP_TTDP_LARGE, APC_LARGE, STR_AIRPORT_CITY, SPR_AIRPORT_PREVIEW_LARGE),
382 AS_ND(heliport, 1, 1, 1963, CalendarTime::MAX_YEAR, 4, 1, 4, ATP_TTDP_HELIPORT, APC_HELIPORT, STR_AIRPORT_HELIPORT, SPR_AIRPORT_PREVIEW_HELIPORT),
383 AS(metropolitan, 6, 6, 1980, CalendarTime::MAX_YEAR, 6, 8, 28, ATP_TTDP_LARGE, APC_LARGE, STR_AIRPORT_METRO, SPR_AIRPORT_PREVIEW_METROPOLITAN),
384 AS(international, 7, 7, 1990, CalendarTime::MAX_YEAR, 8, 17, 42, ATP_TTDP_LARGE, APC_HUB, STR_AIRPORT_INTERNATIONAL, SPR_AIRPORT_PREVIEW_INTERNATIONAL),
385 AS(commuter, 5, 4, 1983, CalendarTime::MAX_YEAR, 4, 4, 20, ATP_TTDP_SMALL, APC_SMALL, STR_AIRPORT_COMMUTER, SPR_AIRPORT_PREVIEW_COMMUTER),
386 AS(helidepot, 2, 2, 1976, CalendarTime::MAX_YEAR, 4, 2, 7, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELIDEPOT, SPR_AIRPORT_PREVIEW_HELIDEPOT),
387 AS(intercontinental, 9, 11, 2002, CalendarTime::MAX_YEAR, 10, 25, 72, ATP_TTDP_LARGE, APC_HUB, STR_AIRPORT_INTERCONTINENTAL, SPR_AIRPORT_PREVIEW_INTERCONTINENTAL),
388 AS(helistation, 4, 2, 1980, CalendarTime::MAX_YEAR, 4, 3, 14, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELISTATION, SPR_AIRPORT_PREVIEW_HELISTATION),
389 AS_GENERIC(&_airportfta_oilrig, {}, {}, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false),
390};
391
392static_assert(NEW_AIRPORT_OFFSET == lengthof(_origin_airport_specs));
393
394const AirportSpec AirportSpec::dummy = AS_GENERIC(&_airportfta_dummy, {}, {}, 0, 0, 0, 0, CalendarTime::MIN_YEAR, CalendarTime::MIN_YEAR, 0, ATP_TTDP_LARGE, APC_BEGIN, STR_NULL, 0, false);
395
396#undef AS
397#undef AS_ND
398#undef AS_GENERIC
399
400#endif /* AIRPORT_DEFAULTS_H */
@ NEW_AIRPORT_OFFSET
Number of the first newgrf airport.
Definition airport.h:39
#define MK(x, y, m)
Definition of an airport tiles layout.
static const std::initializer_list< AirportTileTable > _tile_table_heliport_0
Tiles for Heliport.
static const std::initializer_list< AirportTileTable > _tile_table_helidepot_0
Tiles for Helidepot.
static const std::initializer_list< AirportTileTable > _tile_table_metropolitan_0
Tiles for Metropolitain Airport (large) - 2 runways.
#define AS_GENERIC(fsm, layouts, depots, size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, enabled)
General AirportSpec definition.
#define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview)
AirportSpec definition for airports without any depot.
static const std::initializer_list< AirportTileTable > _tile_table_international_0
Tiles for International Airport (large) - 2 runways.
#define AS(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview)
AirportSpec definition for airports with at least one depot.
static const std::initializer_list< AirportTileTable > _tile_table_intercontinental_0
Tiles for International Airport (large) - 2 runways.
static const std::initializer_list< AirportTileTable > _tile_table_city_0
Tiles for City Airport (large)
static const std::initializer_list< AirportTileTable > _tile_table_commuter_0
Tiles for Commuter Airfield (small)
static const std::initializer_list< AirportTileTable > _tile_table_helistation_0
Tiles for Helistation.
static const std::initializer_list< AirportTileTable > _tile_table_country_0
Tiles for Country Airfield (small)
static constexpr TimerGame< struct Calendar >::Year MIN_YEAR
The absolute minimum year in OTTD.
static constexpr TimerGame< struct Calendar >::Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date,...
@ DIR_N
North.
@ APC_HELIPORT
id for heliports
@ APC_SMALL
id for small airports class
@ APC_BEGIN
Lowest valid airport class id.
@ APC_LARGE
id for large airports class
@ APC_HUB
id for hub airports class
@ ATP_TTDP_HELIPORT
Same as AT_HELIPORT.
@ ATP_TTDP_OILRIG
Same as AT_OILRIG.
@ ATP_TTDP_SMALL
Same as AT_SMALL.
@ ATP_TTDP_LARGE
Same as AT_LARGE.
#define lengthof(array)
Return the length of an fixed size array.
Definition stdafx.h:271
Defines the data structure for an airport.
static const AirportSpec dummy
The dummy airport.