(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
authorrichk
Fri, 23 Jun 2006 22:05:40 +0000
changeset 4059 f1442dfe1c8a
parent 4058 019da48e79d3
child 4060 215196195b2a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
Commuter airport: Small. 5x4. 3 terminals, 2 helipads.
Intercontinental: massive. 9x11. 8 terminals, 2 helipads, 4 runways.
Helidepot: a small heliport with a depot for helis only.
Helistation: a large heliport with 3 helipads and a depot.
aircraft_cmd.c
airport.c
airport.h
airport_gui.c
airport_movement.h
data/airports.grf
gfxinit.c
lang/english.txt
newgrf_engine.c
saveload.c
station.h
station_cmd.c
station_map.h
table/sprites.h
table/station_land.h
--- a/aircraft_cmd.c	Thu Jun 22 21:31:09 2006 +0000
+++ b/aircraft_cmd.c	Fri Jun 23 22:05:40 2006 +0000
@@ -91,9 +91,8 @@
 	FOR_VEHICLE_ORDERS(v, order) {
 		const Station *st = GetStation(order->station);
 		if (st->owner == v->owner && st->facilities & FACIL_AIRPORT) {
-			// If an airport doesn't have terminals (so no landing space for airports),
-			// it surely doesn't have any hangars
-			if (GetAirport(st->airport_type)->terminals != NULL)
+			// If an airport doesn't have a hangar, skip it
+			if (GetAirport(st->airport_type)->nof_depots != 0)
 				return true;
 		}
 	}
@@ -197,6 +196,7 @@
 	Vehicle *vl[3], *v, *u, *w;
 	UnitID unit_num;
 	const AircraftVehicleInfo *avi;
+	const Station *st2;
 	Engine *e;
 
 	if (!IsEngineBuildable(p1, VEH_Aircraft)) return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
@@ -217,6 +217,12 @@
 		return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
 	}
 
+	// prevent building of aircraft in helidepot/helistation
+	st2 = GetStationByTile(tile);
+	if ((avi->subtype != 0) && (GetAirport(st2->airport_type)->acc_planes == HELICOPTERS_ONLY)) {
+		return_cmd_error(STR_ENGINE_NOT_BUILDABLE);
+	}
+
 	unit_num = (HASBIT(p2, 0) == true) ? 0 : GetFreeUnitNumber(VEH_Aircraft);
 	if (unit_num > _patches.max_aircraft)
 		return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
@@ -450,7 +456,7 @@
 	if (v->type != VEH_Aircraft || !CheckOwnership(v->owner)) return CMD_ERROR;
 
 	// cannot stop airplane when in flight, or when taking off / landing
-	if (v->u.air.state >= STARTTAKEOFF)
+	if (v->u.air.state >= STARTTAKEOFF && v->u.air.state < TERM7)
 		return_cmd_error(STR_A017_AIRCRAFT_IS_IN_FLIGHT);
 
 	if (flags & DC_EXEC) {
@@ -1082,6 +1088,8 @@
 		// small airports use AIRPORT_BUSY, city airports use RUNWAY_IN_OUT_block, etc.
 		// but they all share the same number
 		CLRBITS(st->airport_flags, RUNWAY_IN_block);
+		CLRBITS(st->airport_flags, RUNWAY_IN_OUT_block); // commuter airport
+		CLRBITS(st->airport_flags, RUNWAY_IN2_block); // intercontinental
 
 		BeginVehicleMove(v);
 		EndVehicleMove(v);
@@ -1272,7 +1280,7 @@
 
 	//FIXME -- MaybeCrashAirplane -> increase crashing chances of very modern airplanes on smaller than AT_METROPOLITAN airports
 	prob = 0x10000 / 1500;
-	if (st->airport_type == AT_SMALL && AircraftVehInfo(v->engine_type)->subtype & AIR_FAST && !_cheats.no_jetcrash.value) {
+	if (((st->airport_type == AT_SMALL) || (st->airport_type == AT_COMMUTER)) && (AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) {
 		prob = 0x10000 / 20;
 	}
 
@@ -1669,7 +1677,7 @@
 	if (v->current_order.type == OT_GOTO_STATION) {
 		if (AirportFindFreeHelipad(v, Airport)) return;
 	}
-	v->u.air.state = (Airport->terminals != NULL) ? HANGAR : HELITAKEOFF;
+	v->u.air.state = (Airport->nof_depots != 0) ? HANGAR : HELITAKEOFF;
 }
 
 typedef void AircraftStateHandler(Vehicle *v, const AirportFTAClass *Airport);
@@ -1693,6 +1701,10 @@
 	AircraftEventHandler_EndLanding,		// ENDLANDING     = 16
 	AircraftEventHandler_HeliLanding,		// HELILANDING    = 17
 	AircraftEventHandler_HeliEndLanding,// HELIENDLANDING = 18
+	AircraftEventHandler_AtTerminal,		// TERM7          =  19
+	AircraftEventHandler_AtTerminal,		// TERM8          =  20
+	AircraftEventHandler_AtTerminal,		// HELIPAD3       =  21
+	AircraftEventHandler_AtTerminal,		// HELIPAD4       =  22
 };
 
 static void AirportClearBlock(const Vehicle* v, const AirportFTAClass* Airport)
@@ -1796,10 +1808,9 @@
 	AirportFTA* current;
 
 	// if the next position is in another block, check it and wait until it is free
-	if (Airport->layout[current_pos->position].block != next->block) {
+	if ((Airport->layout[current_pos->position].block & next->block) != next->block) {
 		uint32 airport_flags = next->block;
 		Station* st = GetStation(v->u.air.targetairport);
-
 		//search for all all elements in the list with the same state, and blocks != N
 		// this means more blocks should be checked/set
 		current = current_pos;
@@ -1833,10 +1844,10 @@
 {
 	Station *st = GetStation(v->u.air.targetairport);
 	for (; i < last_terminal; i++) {
-		if (!HASBIT(st->airport_flags, i)) {
+		if (!HASBIT(st->airport_flags, _airport_terminal_flag[i])) {
 			// TERMINAL# HELIPAD#
-			v->u.air.state = i + TERM1; // start moving to that terminal/helipad
-			SETBIT(st->airport_flags, i); // occupy terminal/helipad
+			v->u.air.state = _airport_terminal_state[i]; // start moving to that terminal/helipad
+			SETBIT(st->airport_flags, _airport_terminal_flag[i]); // occupy terminal/helipad
 			return true;
 		}
 	}
--- a/airport.c	Thu Jun 22 21:31:09 2006 +0000
+++ b/airport.c	Fri Jun 23 22:05:40 2006 +0000
@@ -15,12 +15,16 @@
 static AirportFTAClass* Heliport;
 static AirportFTAClass* MetropolitanAirport;
 static AirportFTAClass* InternationalAirport;
+static AirportFTAClass* CommuterAirport;
+static AirportFTAClass* HeliDepot;
+static AirportFTAClass* IntercontinentalAirport;
+static AirportFTAClass* HeliStation;
 
 static void AirportFTAClass_Constructor(AirportFTAClass *Airport,
-																				const byte *terminals, const byte *helipads,
-																				const byte entry_point,  const byte acc_planes,
-																				const AirportFTAbuildup *FA,
-																				const TileIndexDiffC *depots, const byte nof_depots,
+	const byte *terminals, const byte *helipads,
+	const byte entry_point,  const byte acc_planes,
+	const AirportFTAbuildup *FA,
+	const TileIndexDiffC *depots, const byte nof_depots,
 	uint size_x, uint size_y
 );
 static void AirportFTAClass_Destructor(AirportFTAClass *Airport);
@@ -93,6 +97,21 @@
 		7, 7
 	);
 
+	// intercontintental airport
+	IntercontinentalAirport = (AirportFTAClass *)malloc(sizeof(AirportFTAClass));
+
+	AirportFTAClass_Constructor(
+		IntercontinentalAirport,
+		_airport_terminal_intercontinental,
+		_airport_helipad_intercontinental,
+		43,
+		ALL,
+		_airport_fta_intercontinental,
+		_airport_depots_intercontinental,
+		lengthof(_airport_depots_intercontinental),
+		9,11
+	);
+
 	// heliport, oilrig
 	Heliport = (AirportFTAClass *)malloc(sizeof(AirportFTAClass));
 
@@ -109,6 +128,52 @@
 	);
 
 	Oilrig = Heliport;  // exactly the same structure for heliport/oilrig, so share state machine
+
+	// commuter airport
+	CommuterAirport = malloc(sizeof(AirportFTAClass));
+
+	AirportFTAClass_Constructor(
+		CommuterAirport,
+		_airport_terminal_commuter,
+		_airport_helipad_commuter,
+		22,
+		ALL,
+		_airport_fta_commuter,
+		_airport_depots_commuter,
+		lengthof(_airport_depots_commuter),
+		5,4
+	);
+
+	// helidepot airport
+	HeliDepot = malloc(sizeof(AirportFTAClass));
+
+	AirportFTAClass_Constructor(
+		HeliDepot,
+		NULL,
+		_airport_helipad_helidepot,
+		4,
+		HELICOPTERS_ONLY,
+		_airport_fta_helidepot,
+		_airport_depots_helidepot,
+		lengthof(_airport_depots_helidepot),
+		2,2
+	);
+
+	// helistation airport
+	HeliStation = malloc(sizeof(AirportFTAClass));
+
+	AirportFTAClass_Constructor(
+		HeliStation,
+		NULL,
+		_airport_helipad_helistation,
+		25,
+		HELICOPTERS_ONLY,
+		_airport_fta_helistation,
+		_airport_depots_helistation,
+		lengthof(_airport_depots_helistation),
+		4,2
+	);
+
 }
 
 void UnInitializeAirports(void)
@@ -118,6 +183,10 @@
 	AirportFTAClass_Destructor(Heliport);
 	AirportFTAClass_Destructor(MetropolitanAirport);
 	AirportFTAClass_Destructor(InternationalAirport);
+	AirportFTAClass_Destructor(CommuterAirport);
+	AirportFTAClass_Destructor(HeliDepot);
+	AirportFTAClass_Destructor(IntercontinentalAirport);
+	AirportFTAClass_Destructor(HeliStation);
 }
 
 static void AirportFTAClass_Constructor(AirportFTAClass *Airport,
@@ -317,6 +386,10 @@
 	"ENDLANDING",
 	"HELILANDING",
 	"HELIENDLANDING",
+	"TERM7",
+	"TERM8",
+	"HELIPAD3",
+	"HELIPAD4",
 	"DUMMY"	// extra heading for 255
 };
 
@@ -369,17 +442,21 @@
 	//FIXME -- AircraftNextAirportPos_and_Order -> Needs something nicer, don't like this code
 	// needs constant change if more airports are added
 	switch (airport_type) {
-		case AT_SMALL: Airport = CountryAirport; break;
-		case AT_LARGE: Airport = CityAirport; break;
-		case AT_METROPOLITAN: Airport = MetropolitanAirport; break;
-		case AT_HELIPORT: Airport = Heliport; break;
-		case AT_OILRIG: Airport = Oilrig; break;
+		case AT_SMALL:         Airport = CountryAirport; break;
+		case AT_LARGE:         Airport = CityAirport; break;
+		case AT_METROPOLITAN:  Airport = MetropolitanAirport; break;
+		case AT_HELIPORT:      Airport = Heliport; break;
+		case AT_OILRIG:        Airport = Oilrig; break;
 		case AT_INTERNATIONAL: Airport = InternationalAirport; break;
+		case AT_COMMUTER:      Airport = CommuterAirport; break;
+		case AT_HELIDEPOT:     Airport = HeliDepot; break;
+		case AT_INTERCON:      Airport = IntercontinentalAirport; break;
+		case AT_HELISTATION:   Airport = HeliStation; break;
 		default:
 			#ifdef DEBUG__
 				printf("Airport AircraftNextAirportPos_and_Order not yet implemented\n");
 			#endif
-			assert(airport_type <= AT_INTERNATIONAL);
+			assert(airport_type <= AT_HELISTATION);
 	}
 	return Airport;
 }
@@ -399,5 +476,9 @@
 	// 1990-1-1 is --> 25568
 	if (_date >= 21915) SETBIT(bytemask, 3); // metropilitan airport 1980
 	if (_date >= 25568) SETBIT(bytemask, 4); // international airport 1990
+	if (_date >= 23011) SETBIT(bytemask, 5); // commuter airport 1983
+	if (_date >= 20455) SETBIT(bytemask, 6); // helidepot 1976
+	if (_date >= 29951) SETBIT(bytemask, 7); // intercontinental airport 2002
+	if (_date >= 21915) SETBIT(bytemask, 8); // helistation 1980
 	return bytemask;
 }
--- a/airport.h	Thu Jun 22 21:31:09 2006 +0000
+++ b/airport.h	Fri Jun 23 22:05:40 2006 +0000
@@ -3,10 +3,10 @@
 #ifndef AIRPORT_H
 #define AIRPORT_H
 
-enum {MAX_TERMINALS = 6};
-enum {MAX_HELIPADS  = 2};
+enum {MAX_TERMINALS = 10};
+enum {MAX_HELIPADS  = 4};
 enum {MAX_ELEMENTS  = 255};
-enum {MAX_HEADINGS  = 18};
+enum {MAX_HEADINGS  = 22};
 
 // Airport types
 enum {
@@ -15,7 +15,11 @@
 	AT_HELIPORT      = 2,
 	AT_METROPOLITAN  = 3,
 	AT_INTERNATIONAL = 4,
-	AT_OILRIG        = 15,
+	AT_COMMUTER      = 5,
+	AT_HELIDEPOT     = 6,
+	AT_INTERCON      = 7,
+	AT_HELISTATION   = 8,
+	AT_OILRIG        = 15
 };
 
 // do not change unless you change v->subtype too. This aligns perfectly with its current setting
@@ -38,27 +42,36 @@
 
 /* Movement States on Airports (headings target) */
 enum {
-	TO_ALL,
-	HANGAR,
-	TERM1,
-	TERM2,
-	TERM3,
-	TERM4,
-	TERM5,
-	TERM6,
-	HELIPAD1,
-	HELIPAD2,
-	TAKEOFF,
-	STARTTAKEOFF,
-	ENDTAKEOFF,
-	HELITAKEOFF,
-	FLYING,
-	LANDING,
-	ENDLANDING,
-	HELILANDING,
-	HELIENDLANDING,
+	TO_ALL         = 0,
+	HANGAR         = 1,
+	TERM1          = 2,
+	TERM2          = 3,
+	TERM3          = 4,
+	TERM4          = 5,
+	TERM5          = 6,
+	TERM6          = 7,
+	HELIPAD1       = 8,
+	HELIPAD2       = 9,
+	TAKEOFF        = 10,
+	STARTTAKEOFF   = 11,
+	ENDTAKEOFF     = 12,
+	HELITAKEOFF    = 13,
+	FLYING         = 14,
+	LANDING        = 15,
+	ENDLANDING     = 16,
+	HELILANDING    = 17,
+	HELIENDLANDING = 18,
+	TERM7          = 19,
+	TERM8          = 20,
+	HELIPAD3       = 21,
+	HELIPAD4       = 22
 };
 
+// this maps the terminal to its corresponding state and block flag
+// currently set for 10 terms, 4 helipads
+static const byte _airport_terminal_state[] = {2, 3, 4, 5, 6, 7, 19, 20, 0, 0, 8, 9, 21, 22};
+static const byte _airport_terminal_flag[] =  {0, 1, 2, 3, 4, 5, 22, 23, 0, 0, 6, 7, 24, 25};
+
 /* Movement Blocks on Airports */
 // blocks (eg_airport_flags)
 enum {
@@ -86,7 +99,24 @@
 	TERM_GROUP2_EXIT1_block  = 1 << 19,
 	TERM_GROUP2_EXIT2_block  = 1 << 20,
 	PRE_HELIPAD_block        = 1 << 21,
-	NOTHING_block            = 1 << 30,
+
+// blocks for new airports
+	TERM7_block              = 1 << 22,
+	TERM8_block              = 1 << 23,
+	TERM9_block              = 1 << 24,
+	HELIPAD3_block           = 1 << 24,
+	TERM10_block             = 1 << 25,
+	HELIPAD4_block           = 1 << 25,
+	HANGAR1_AREA_block       = 1 << 26,
+	OUT_WAY2_block           = 1 << 27,
+	IN_WAY2_block            = 1 << 28,
+	RUNWAY_IN2_block         = 1 << 29,
+	RUNWAY_OUT2_block        = 1 << 10,   // note re-uses TAXIWAY_BUSY
+	HELIPAD_GROUP_block      = 1 << 13,   // note re-uses AIRPORT_ENTRANCE
+	OUT_WAY_block2           = 1 << 31,
+// end of new blocks
+
+	NOTHING_block            = 1 << 30
 };
 
 typedef struct AirportMovingData {
--- a/airport_gui.c	Thu Jun 22 21:31:09 2006 +0000
+++ b/airport_gui.c	Fri Jun 23 22:05:40 2006 +0000
@@ -159,12 +159,12 @@
 
 		/* 'Country Airport' starts at widget 3, and if its bit is set, it is
 		 * available, so take its opposite value to set the disabled_state. There
-		 * are only 5 available airports, so XOR with 0x1F (1 1111) */
-		w->disabled_state = (avail_airports ^ 0x1F) << 3;
+		 * are 9 buildable airports, so XOR with 0x01FF (1 1111 1111) */
+		w->disabled_state = (avail_airports ^ 0x01FF) << 7;
 
 		_selected_airport_type = sel;
-		// select default the coverage area to 'Off' (8)
-		w->click_state = ((1<<3) << sel) | ((1<<8) << _station_show_coverage);
+		// select default the coverage area to 'Off' (16)
+		w->click_state = ((1<<7) << sel) | ((1<<16) << _station_show_coverage);
 		airport = GetAirport(sel);
 		SetTileSelectSize(airport->size_x, airport->size_y);
 
@@ -176,6 +176,10 @@
 				case AT_LARGE:         rad = CA_AIR_LARGE;    break;
 				case AT_METROPOLITAN:  rad = CA_AIR_METRO;    break;
 				case AT_INTERNATIONAL: rad = CA_AIR_INTER;    break;
+				case AT_COMMUTER:      rad = CA_AIR_COMMUTER; break;
+				case AT_HELIDEPOT:     rad = CA_AIR_HELIDEPOT; break;
+				case AT_INTERCON:      rad = CA_AIR_INTERCON; break;
+				case AT_HELISTATION:   rad = CA_AIR_HELISTATION; break;
 			}
 		}
 
@@ -183,21 +187,24 @@
 
 		DrawWindowWidgets(w);
     // strings such as 'Size' and 'Coverage Area'
-		DrawStringCentered(74, 16, STR_305B_SIZE, 0);
-		DrawStringCentered(74, 78, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0);
-		DrawStationCoverageAreaText(2, 104, (uint)-1, rad);
+		DrawStringCentered(74,  16, STR_SMALL_AIRPORTS, 0);
+		DrawStringCentered(74,  54, STR_LARGE_AIRPORTS, 0);
+		DrawStringCentered(74,  92, STR_HUB_AIRPORTS, 0);
+		DrawStringCentered(74, 130, STR_HELIPORTS, 0);
+		DrawStringCentered(74, 180, STR_3066_COVERAGE_AREA_HIGHLIGHT, 0);
+		DrawStationCoverageAreaText(2, 206, (uint)-1, rad);
 		break;
 	}
 
 	case WE_CLICK: {
 		switch (e->click.widget) {
-		case 3: case 4: case 5: case 6: case 7:
-			_selected_airport_type = e->click.widget - 3;
+		case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15:
+			_selected_airport_type = e->click.widget - 7;
 			SndPlayFx(SND_15_BEEP);
 			SetWindowDirty(w);
 			break;
-		case 8: case 9:
-			_station_show_coverage = e->click.widget - 8;
+		case 16: case 17:
+			_station_show_coverage = e->click.widget - 16;
 			SndPlayFx(SND_15_BEEP);
 			SetWindowDirty(w);
 			break;
@@ -220,21 +227,29 @@
 }
 
 static const Widget _build_airport_picker_widgets[] = {
-{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,										STR_018B_CLOSE_WINDOW},
-{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_3001_AIRPORT_SELECTION,	STR_018C_WINDOW_TITLE_DRAG_THIS},
-{      WWT_PANEL,   RESIZE_NONE,     7,     0,   147,    14,   130, 0x0,													STR_NULL},
-{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,    73,    27,    38, STR_3059_SMALL,							STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
-{WWT_NODISTXTBTN,   RESIZE_NONE,    14,    74,   145,    27,    38, STR_305A_LARGE,							STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
-{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,    63,    74, STR_306B_HELIPORT,						STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
-{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,    39,    50, STR_305AA_LARGE,	  					STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
-{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,    51,    62, STR_305AB_LARGE,	  					STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,    14,    73,    88,    98, STR_02DB_OFF,								STR_3065_DON_T_HIGHLIGHT_COVERAGE},
-{    WWT_TEXTBTN,   RESIZE_NONE,    14,    74,   133,    88,    98, STR_02DA_ON,									STR_3064_HIGHLIGHT_COVERAGE_AREA},
+{   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                      STR_018B_CLOSE_WINDOW},
+{    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_3001_AIRPORT_SELECTION,    STR_018C_WINDOW_TITLE_DRAG_THIS},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   147,    14,    52, 0x0,                           STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   147,    53,    89, 0x0,                           STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   147,    90,   127, 0x0,                           STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   147,   128,   177, 0x0,                           STR_NULL},
+{      WWT_PANEL,   RESIZE_NONE,     7,     0,   147,   178,   239, 0x0,                           STR_NULL},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,    27,    38, STR_SMALL_AIRPORT,             STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,    65,    76, STR_CITY_AIRPORT,              STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,   141,   152, STR_HELIPORT,                  STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,    77,    88, STR_METRO_AIRPORT ,            STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,   103,   114, STR_INTERNATIONAL_AIRPORT,     STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,    39,    50, STR_COMMUTER_AIRPORT,          STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,   165,   176, STR_HELIDEPOT,                 STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,   115,   126, STR_INTERCONTINENTAL_AIRPORT,  STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{WWT_NODISTXTBTN,   RESIZE_NONE,    14,     2,   145,   153,   164, STR_HELISTATION,               STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT},
+{    WWT_TEXTBTN,   RESIZE_NONE,    14,    14,    73,   191,   202, STR_02DB_OFF,                  STR_3065_DON_T_HIGHLIGHT_COVERAGE},
+{    WWT_TEXTBTN,   RESIZE_NONE,    14,    74,   133,   191,   202, STR_02DA_ON,                   STR_3064_HIGHLIGHT_COVERAGE_AREA},
 {   WIDGETS_END},
 };
 
 static const WindowDesc _build_airport_desc = {
-	-1, -1, 148, 131, // height, 130+1
+	-1, -1, 148, 240,
 	WC_BUILD_STATION,WC_BUILD_TOOLBAR,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
 	_build_airport_picker_widgets,
--- a/airport_movement.h	Thu Jun 22 21:31:09 2006 +0000
+++ b/airport_movement.h	Fri Jun 23 22:05:40 2006 +0000
@@ -13,7 +13,6 @@
 	byte next_in_chain;					// next position from this position
 } AirportFTAbuildup;
 
-
 ///////////////////////////////////////////////////////////////////////
 /////*********Movement Positions on Airports********************///////
 // Country Airfield (small) 4x3
@@ -42,6 +41,48 @@
 	{ 44, 40,AMED_HELI_LOWER,0}										// 21 Helicopter landing
 };
 
+// Commuter Airfield (small) 5x4
+static const AirportMovingData _airport_moving_data_commuter[37] = {
+	{ 69,  3, AMED_EXACTPOS,3},										// 00 In Hangar
+	{ 72, 22,0,0},																// 01 Taxi to right outside depot
+	{ 8,  22, AMED_EXACTPOS,5},																// 01 Taxi to right outside depot
+	{ 24, 36,AMED_EXACTPOS,3},			// 03 Terminal 1
+	{ 40, 36,AMED_EXACTPOS,3},			// 04 Terminal 2
+	{ 56, 36,AMED_EXACTPOS,3},			// 05 Terminal 3
+	{ 40, 8,AMED_EXACTPOS,1},			// 06 Helipad 1
+	{ 56, 8,AMED_EXACTPOS,1},			// 07 Helipad 2
+	{ 24, 22,0,5},					// 08 Taxiing
+	{ 40, 22,0,5},					// 09 Taxiing
+	{ 56, 22,0,5},					// 10 Taxiing
+	{ 72, 40,0,3},					// 11 Airport OUTWAY
+	{ 72, 54,AMED_EXACTPOS,1},			// 12 Accelerate to end of runway
+	{  7, 54,AMED_NOSPDCLAMP,0},			// 13 Release control of runway, for smoother movement
+	{  5, 54,AMED_NOSPDCLAMP,0},			// 14 End of runway
+	{-79, 54,AMED_NOSPDCLAMP | AMED_TAKEOFF,0},	// 15 Take off
+	{145, 54,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 16 Fly to landing position in air
+	{ 73, 54,AMED_NOSPDCLAMP | AMED_LAND,0},	// 17 Going down for land
+	{  3, 54,AMED_NOSPDCLAMP | AMED_BRAKE,0},	// 18 Just landed, brake until end of runway
+	{ 12, 54,0,7},					// 19 Just landed, turn around and taxi
+	{  8, 32,0,7},					// 20 Taxi from runway to crossing
+	{-31,149,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 21 Fly around waiting for a landing spot (north-east)
+	{  1,  6,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 22 Fly around waiting for a landing spot (north-west)
+	{193,  6,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 23 Fly around waiting for a landing spot (south-west)
+	{225, 81,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 24 Fly around waiting for a landing spot (south)
+	// Helicopter
+	{ 80, 0,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 25 Bufferspace before helipad
+	{ 80, 0,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 26 Bufferspace before helipad
+	{ 32, 8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 27 Get in position for Helipad1
+	{ 48, 8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 28 Get in position for Helipad2
+	{ 32, 8,AMED_HELI_LOWER,0},			// 29 Land at Helipad1
+	{ 48, 8,AMED_HELI_LOWER,0},			// 30 Land at Helipad2
+	{ 32, 8,AMED_HELI_RAISE,0},			// 31 Takeoff Helipad1
+	{ 48, 8,AMED_HELI_RAISE,0},			// 32 Takeoff Helipad2
+	{ 64, 22,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 33 Go to position for Hangarentrance in air
+	{ 64, 22,AMED_HELI_LOWER,0},			// 34 Land in front of hangar
+	{ 40, 8,AMED_EXACTPOS,0},			// pre-helitakeoff helipad 1
+	{ 56, 8,AMED_EXACTPOS,0}			// pre-helitakeoff helipad 2
+};
+
 // City Airport (large) 6x6
 static const AirportMovingData _airport_moving_data_town[25] = {
 	{ 85,  3,AMED_EXACTPOS,3},										// 00 In Hangar
@@ -158,6 +199,89 @@
 	{104, 32,AMED_HELI_LOWER,0}										// 50 Land in HANGAR2_AREA to go to hangar
 };
 
+// Intercontinental Airport - 4 runways, 8 terminals, 2 dedicated helipads
+static const AirportMovingData _airport_moving_data_intercontinental[77] = {
+	{  7, 87, AMED_EXACTPOS,3},			// 00 In Hangar 1
+	{135, 72, AMED_EXACTPOS,3},			// 01 In Hangar 2
+	{  7,104,0,0},					// 02 Taxi to right outside depot 1
+	{135, 88,0,0},					// 03 Taxi to right outside depot 2
+	{ 56,120,AMED_EXACTPOS,6},			// 04 Terminal 1
+	{ 56,104,AMED_EXACTPOS,5},			// 05 Terminal 2
+	{ 56, 88,AMED_EXACTPOS,5},			// 06 Terminal 3
+	{ 56, 72,AMED_EXACTPOS,5},			// 07 Terminal 4
+	{ 88,120,AMED_EXACTPOS,0},			// 08 Terminal 5
+	{ 88,104,AMED_EXACTPOS,1},			// 09 Terminal 6
+	{ 88, 88,AMED_EXACTPOS,1},			// 10 Terminal 7
+	{ 88, 72,AMED_EXACTPOS,1},			// 11 Terminal 8
+	{ 88, 56,AMED_EXACTPOS,3},			// 12 Helipad 1
+	{ 72, 56,AMED_EXACTPOS,1},			// 13 Helipad 2
+	{ 40,136,0,0},					// 14 Term group 2 enter 1 a
+	{ 56,136,0,0},					// 15 Term group 2 enter 1 b
+	{ 88,136,0,0},					// 16 Term group 2 enter 2 a
+	{104,136,0,0},					// 17 Term group 2 enter 2 b
+	{104,120,0,0},					// 18 Term group 2 - opp term 5
+	{104,104,0,0},					// 19 Term group 2 - opp term 6 & exit2
+	{104, 88,0,0},					// 20 Term group 2 - opp term 7 & hangar area 2
+	{104, 72,0,0},					// 21 Term group 2 - opp term 8
+	{104, 56,0,0},					// 22 Taxi Term group 2 exit a
+	{104, 40,0,0},					// 23 Taxi Term group 2 exit b
+	{ 56, 40,0,0},					// 24 Term group 2 exit 2a
+	{ 40, 40,0,0},					// 25 Term group 2 exit 2b
+	{ 40,120,0,0},					// 26 Term group 1 - opp term 1
+	{ 40,104,0,0},					// 27 Term group 1 - opp term 2 & hangar area 1
+	{ 40, 88,0,0},					// 28 Term group 1 - opp term 3
+	{ 40, 72,0,0},					// 29 Term group 1 - opp term 4
+	{ 18, 72,0,7},					// 30 Outway 1
+	{  8, 40,0,7},					// 31 Airport OUTWAY
+	{  8, 24,AMED_EXACTPOS,5},			// 32 Accelerate to end of runway
+	{119, 24,AMED_NOSPDCLAMP,0},			// 33 Release control of runway, for smoother movement
+	{117, 24,AMED_NOSPDCLAMP,0},			// 34 End of runway
+	{197, 24,AMED_NOSPDCLAMP | AMED_TAKEOFF,0},	// 35 Take off
+	{254, 84,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 36 Flying to landing position in air
+	{117,168,AMED_NOSPDCLAMP | AMED_LAND,0},	// 37 Going down for land
+	{  3,168,AMED_NOSPDCLAMP | AMED_BRAKE,0},	// 38 Just landed, brake until end of runway
+	{  8,168,0,0},					// 39 Just landed, turn around and taxi
+	{  8,144,0,7},					// 40 Taxi from runway
+	{  8,128,0,7},					// 41 Taxi from runway
+	{  8,120,AMED_EXACTPOS,5},			// 42 Airport entrance
+	{ 56,344,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 43 Fly around waiting for a landing spot (north-east)
+	{-200,88,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 44 Fly around waiting for a landing spot (north-west)
+	{ 56,-168,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 45 Fly around waiting for a landing spot (south-west)
+	{312, 88,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 46 Fly around waiting for a landing spot (south)
+	// Helicopter
+	{ 96,40,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 47 Bufferspace before helipad
+	{ 96,40,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 48 Bufferspace before helipad
+	{ 82,54,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 49 Get in position for Helipad1
+	{ 64,56,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 50 Get in position for Helipad2
+	{ 81,55,AMED_HELI_LOWER,0},			// 51 Land at Helipad1
+	{ 64,56,AMED_HELI_LOWER,0},			// 52 Land at Helipad2
+	{ 80,56,AMED_HELI_RAISE,0},			// 53 Takeoff Helipad1
+	{ 64,56,AMED_HELI_RAISE,0},			// 54 Takeoff Helipad2
+	{136,96,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 55 Go to position for Hangarentrance in air
+	{136,96,AMED_HELI_LOWER,0},			// 56 Land in front of hangar2
+	{126,104,0,3},					// 57 Outway 2
+	{136,136,0,1},					// 58 Airport OUTWAY 2
+	{136,152,AMED_EXACTPOS,5},			// 59 Accelerate to end of runway2
+	{ 16,152,AMED_NOSPDCLAMP,0},			// 60 Release control of runway2, for smoother movement
+	{ 20,152,AMED_NOSPDCLAMP,0},			// 61 End of runway2
+	{-56,152,AMED_NOSPDCLAMP | AMED_TAKEOFF,0},	// 62 Take off2
+	{ 24,  8,AMED_NOSPDCLAMP | AMED_LAND,0},	// 63 Going down for land2
+	{136,  8,AMED_NOSPDCLAMP | AMED_BRAKE,0},	// 64 Just landed, brake until end of runway2in
+	{136,  8,0,0},					// 65 Just landed, turn around and taxi
+	{136, 24,0,3},					// 66 Taxi from runway 2in
+	{136, 40,0,3},					// 67 Taxi from runway 2in
+	{136, 56,AMED_EXACTPOS,1},			// 68 Airport entrance2
+	{-56,  8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 69 Fly to landing position in air2
+	{ 88, 40,0,0},					// 70 Taxi Term group 2 exit - opp heli1
+	{ 72, 40,0,0},					// 71 Taxi Term group 2 exit - opp heli2
+	{ 88, 57,AMED_EXACTPOS,3},			// 72 pre-helitakeoff helipad 1
+	{ 71, 56,AMED_EXACTPOS,1},			// 73 pre-helitakeoff helipad 2
+	{  8,120,AMED_HELI_RAISE,0},			// 74 Helitakeoff outside depot 1
+	{136,104,AMED_HELI_RAISE,0},			// 75 Helitakeoff outside depot 2
+	{197,168,AMED_NOSPDCLAMP | AMED_SLOWTURN,0}	// 76 Fly to landing position in air1
+};
+
+
 // Heliport (heliport)
 static const AirportMovingData _airport_moving_data_heliport[9] = {
 	{  5,  9,AMED_EXACTPOS,1},										// 0 - At heliport terminal
@@ -171,6 +295,65 @@
 	{ 70,  9,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 8 - Circle #4 (south)
 };
 
+// HeliDepot 2x2 (heliport)
+static const AirportMovingData _airport_moving_data_helidepot[18] = {
+	{ 24, 4,AMED_EXACTPOS,1},			// 0 - At depot
+	{ 24, 28,0,0},					// 1 Taxi to right outside depot
+	{  5, 38,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 2 Flying
+	{-15,-15,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 3 - Circle #1 (north-east)
+	{-15,-49,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 4 - Circle #2 (north-west)
+	{ 49,-49,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 5 - Circle #3 (south-west)
+	{ 49,-15,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 6 - Circle #4 (south-east)
+	{  8, 32,AMED_NOSPDCLAMP | AMED_SLOWTURN,7},	// 7 - PreHelipad
+	{  8, 32,AMED_NOSPDCLAMP | AMED_SLOWTURN,7},	// 8 - Helipad
+	{  8, 16,AMED_NOSPDCLAMP | AMED_SLOWTURN,7},	// 9 - Land
+	{  8, 16,AMED_HELI_LOWER,7},			// 10 - Land
+	{  8, 24,AMED_HELI_RAISE,0},			// 11 - Take off (play sound)
+	{ 32, 24,AMED_NOSPDCLAMP | AMED_SLOWTURN,7},	// 12 Air to above hangar area
+	{ 32, 24,AMED_HELI_LOWER,7},			// 13 Taxi to right outside depot
+	{  8, 24,AMED_EXACTPOS,7},			// 14 - on helipad1
+	{ 24, 28,AMED_HELI_RAISE,0},			// 15 Takeoff right outside depot
+	{  8, 24,AMED_HELI_RAISE,5},			// 16 - Take off (play sound)
+	{  8, 24,AMED_SLOWTURN | AMED_EXACTPOS,2},	// 17 - turn on helipad1 for takeoff
+};
+
+// HeliDepot 2x2 (heliport)
+static const AirportMovingData _airport_moving_data_helistation[33] = {
+	{8, 3,AMED_EXACTPOS,3},				// 00 In Hangar2
+	{8, 22,0,0},					// 01 outside hangar 2
+	{116,24,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 02 Fly to landing position in air
+	{14, 22,AMED_HELI_RAISE,0},			// 03 Helitakeoff outside hangar1(play sound)
+	{24, 22,0,0},					// 04 taxiing
+	{40, 22,0,0},					// 05 taxiing
+	{40, 8,AMED_EXACTPOS,1},			// 06 Helipad 1
+	{56, 8,AMED_EXACTPOS,1},			// 07 Helipad 2
+	{56, 24,AMED_EXACTPOS,1},			// 08 Helipad 3
+	{40, 8,AMED_EXACTPOS,0},			// 09 pre-helitakeoff helipad 1
+	{56, 8,AMED_EXACTPOS,0},			// 10 pre-helitakeoff helipad 2
+	{56, 24,AMED_EXACTPOS,0},			// 11 pre-helitakeoff helipad 3
+	{32, 8,AMED_HELI_RAISE,0},			// 12 Takeoff Helipad1
+	{48, 8,AMED_HELI_RAISE,0},			// 13 Takeoff Helipad2
+	{48, 24,AMED_HELI_RAISE,0},			// 14 Takeoff Helipad3
+	{84, 24,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 15 Bufferspace before helipad
+	{68, 24,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 16 Bufferspace before helipad
+	{32, 8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 17 Get in position for Helipad1
+	{48, 8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 18 Get in position for Helipad2
+	{48, 24,AMED_NOSPDCLAMP | AMED_SLOWTURN,1},	// 19 Get in position for Helipad3
+	{40, 8,AMED_HELI_LOWER,0},			// 20 Land at Helipad1
+	{48, 8,AMED_HELI_LOWER,0},			// 21 Land at Helipad2
+	{48, 24,AMED_HELI_LOWER,0},			// 22 Land at Helipad3
+	{0, 22,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 23 Go to position for Hangarentrance in air
+	{0, 22,AMED_HELI_LOWER,0},			// 24 Land in front of hangar
+	{148,-8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 25 Fly around waiting for a landing spot (south-east)
+	{148,8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 26 Fly around waiting for a landing spot (south-west)
+	{132,24,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 27 Fly around waiting for a landing spot (south-west)
+	{100,24,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 28 Fly around waiting for a landing spot (north-east)
+	{84, 8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 29 Fly around waiting for a landing spot (south-east)
+	{84,-8,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 30 Fly around waiting for a landing spot (south-west)
+	{100,-24,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 31 Fly around waiting for a landing spot (north-west)
+	{132,-24,AMED_NOSPDCLAMP | AMED_SLOWTURN,0},	// 32 Fly around waiting for a landing spot (north-east)
+};
+
 // Oilrig
 static const AirportMovingData _airport_moving_data_oilrig[9] = {
 	{ 31,  9,AMED_EXACTPOS,1},										// 0 - At oilrig terminal
@@ -188,6 +371,7 @@
 /////**********Movement Machine on Airports*********************///////
 // first element of depots array tells us how many depots there are (to know size of array)
 // this may be changed later when airports are moved to external file
+
 static const TileIndexDiffC _airport_depots_country[] = {{3, 0}};
 static const byte _airport_terminal_country[] = {1, 2};
 static const AirportFTAbuildup _airport_fta_country[] = {
@@ -219,6 +403,56 @@
 	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
 };
 
+static const TileIndexDiffC _airport_depots_commuter[] = {{4, 0}};
+static const byte _airport_terminal_commuter[] = {1, 3};
+static const byte _airport_helipad_commuter[] = {1, 2};
+static const AirportFTAbuildup _airport_fta_commuter[] = {
+	{ 0,HANGAR,NOTHING_block,1}, {0,HELITAKEOFF,HELIPAD2_block,1}, {0,0,0,1},
+	{ 1,255,TAXIWAY_BUSY_block,0}, {1,HANGAR,0,0}, {1,TAKEOFF,0,11}, {1,TERM1,TAXIWAY_BUSY_block,10}, {1,TERM2,TAXIWAY_BUSY_block,10}, {1,TERM3,TAXIWAY_BUSY_block,10}, {1,HELIPAD1,TAXIWAY_BUSY_block,10}, {1,HELIPAD2,TAXIWAY_BUSY_block,10}, {1,HELITAKEOFF,TAXIWAY_BUSY_block,10}, {1,0,0,0},
+	{ 2,255,AIRPORT_ENTRANCE_block,2}, {2,HANGAR,0,8}, {2,TERM1,0,8}, {2,TERM2,0,8}, {2,TERM3,0,8}, {2,HELIPAD1,0,8}, {2,HELIPAD2,0,8}, {2,HELITAKEOFF,0,8}, {2,0,0,2},
+	{ 3,TERM1,TERM1_block,8}, {3,HANGAR,0,8}, {3,TAKEOFF,0,8}, {3,0,0,3},
+	{ 4,TERM2,TERM2_block,9}, {4,HANGAR,0,9}, {4,TAKEOFF,0,9}, {4,0,0,4},
+	{ 5,TERM3,TERM3_block,10}, {5,HANGAR,0,10}, {5,TAKEOFF,0,10}, {5,0,0,5},
+	{ 6,HELIPAD1,HELIPAD1_block,6}, {6,HANGAR,TAXIWAY_BUSY_block,9}, {6,HELITAKEOFF,0,35},
+	{ 7,HELIPAD2,HELIPAD2_block,7}, {7,HANGAR,TAXIWAY_BUSY_block,10}, {7,HELITAKEOFF,0,36},
+	{ 8,255,TAXIWAY_BUSY_block,8}, {8,TAKEOFF,TAXIWAY_BUSY_block,9}, {8,HANGAR,TAXIWAY_BUSY_block,9}, {8,TERM1,TERM1_block,3}, {8,0,TAXIWAY_BUSY_block,9},
+	{ 9,255,TAXIWAY_BUSY_block,9}, {9,TAKEOFF,TAXIWAY_BUSY_block,10}, {9,HANGAR,TAXIWAY_BUSY_block,10}, {9,TERM2,TERM2_block,4}, {9,HELIPAD1,HELIPAD1_block,6}, {9,HELITAKEOFF,HELIPAD1_block,6}, {9,TERM1,TAXIWAY_BUSY_block,8}, {9,0,TAXIWAY_BUSY_block,10},
+	{10,255,TAXIWAY_BUSY_block,10}, {10,TERM3,TERM3_block,5}, {10,HELIPAD1,0,9}, {10,HELIPAD2,HELIPAD2_block,7}, {10,HELITAKEOFF,HELIPAD2_block,7}, {10,TAKEOFF,TAXIWAY_BUSY_block,1}, {10,HANGAR,TAXIWAY_BUSY_block,1}, {10,0,TAXIWAY_BUSY_block,9},
+	{11,0,OUT_WAY_block,12},
+	// takeoff
+	{12,TAKEOFF,RUNWAY_IN_OUT_block,13},
+	{13,0,RUNWAY_IN_OUT_block,14},
+	{14,STARTTAKEOFF,RUNWAY_IN_OUT_block,15},
+	{15,ENDTAKEOFF,NOTHING_block,0},
+	// landing
+	{16,FLYING,NOTHING_block,21}, {16,LANDING,IN_WAY_block,17}, {16,HELILANDING,0,25},
+	{17,LANDING,RUNWAY_IN_OUT_block,18},
+	{18,0,RUNWAY_IN_OUT_block,19},
+	{19,0,RUNWAY_IN_OUT_block,20},
+	{20,ENDLANDING,IN_WAY_block,20}, {20,255,IN_WAY_block,2}, {20,TERM1,0,2}, {20,TERM2,0,2}, {20,TERM3,0,2}, {20,HANGAR,0,2}, {20,0,0,2},
+	// In Air
+	{21,0,NOTHING_block,22},
+	{22,0,NOTHING_block,23},
+	{23,0,NOTHING_block,24},
+	{24,0,NOTHING_block,16},
+	// Helicopter -- stay in air in special place as a buffer to choose from helipads
+	{25,HELILANDING,PRE_HELIPAD_block,26},
+	{26,HELIENDLANDING,PRE_HELIPAD_block,26}, {26,HELIPAD1,0,27}, {26,HELIPAD2,0,28}, {26,HANGAR,0,33},
+	{27,0,NOTHING_block,29}, //helipad1 approach
+	{28,0,NOTHING_block,30},
+	// landing
+	{29,255,NOTHING_block,0}, {29,HELIPAD1,HELIPAD1_block,6},
+	{30,255,NOTHING_block,0}, {30,HELIPAD2,HELIPAD2_block,7},
+	// Helicopter -- takeoff
+	{31,HELITAKEOFF,NOTHING_block,0},
+	{32,HELITAKEOFF,NOTHING_block,0},
+	{33,0,TAXIWAY_BUSY_block,34}, // need to go to hangar when waiting in air
+	{34,0,TAXIWAY_BUSY_block,1},
+	{35,0,HELIPAD1_block,31},
+	{36,0,HELIPAD2_block,32},
+	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
+};
+
 static const TileIndexDiffC _airport_depots_city[] = {{5, 0}};
 static const byte _airport_terminal_city[] = {1, 3};
 static const AirportFTAbuildup _airport_fta_city[] = {
@@ -355,6 +589,100 @@
 	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
 };
 
+// intercontinental
+static const TileIndexDiffC _airport_depots_intercontinental[] = {{0, 5}, {8, 4}};
+static const byte _airport_terminal_intercontinental[] = {2, 4, 4};
+static const byte _airport_helipad_intercontinental[] = {1, 2};
+static const AirportFTAbuildup _airport_fta_intercontinental[] = {
+	{ 0,HANGAR,NOTHING_block,2}, {0,255,HANGAR1_AREA_block | TERM_GROUP1_block,0}, {0,255,HANGAR1_AREA_block | TERM_GROUP1_block,1}, {0,TAKEOFF,HANGAR1_AREA_block | TERM_GROUP1_block,2}, {0,0,0,2},
+	{ 1,HANGAR,NOTHING_block,3}, {1,255,HANGAR2_AREA_block,1}, {1,255,HANGAR2_AREA_block,0}, {1,0,0,3},
+	{ 2,255,HANGAR1_AREA_block,0}, {2,255,TERM_GROUP1_block,0}, {2,255,TERM_GROUP1_block,1}, {2,HANGAR,0,0}, {2,TAKEOFF,TERM_GROUP1_block,27}, {2,TERM5,0,26}, {2,TERM6,0,26}, {2,TERM7,0,26}, {2,TERM8,0,26}, {2,HELIPAD1,0,26}, {2,HELIPAD2,0,26}, {2,HELITAKEOFF,0,74}, {2,0,0,27},
+	{ 3,255,HANGAR2_AREA_block,0}, {3,HANGAR,0,1}, {3,HELITAKEOFF,0,75}, {3,0,0,20},
+	{ 4,TERM1,TERM1_block,26}, {4,HANGAR,HANGAR1_AREA_block | TERM_GROUP1_block,26}, {4,0,0,26},
+	{ 5,TERM2,TERM2_block,27}, {5,HANGAR,HANGAR1_AREA_block | TERM_GROUP1_block,27}, {5,0,0,27},
+	{ 6,TERM3,TERM3_block,28}, {6,HANGAR,HANGAR1_AREA_block | TERM_GROUP1_block,28}, {6,0,0,28},
+	{ 7,TERM4,TERM4_block,29}, {7,HANGAR,HANGAR1_AREA_block | TERM_GROUP1_block,29}, {7,0,0,29},
+	{ 8,TERM5,TERM5_block,18}, {8,HANGAR,HANGAR2_AREA_block,18}, {8,0,0,18},
+	{ 9,TERM6,TERM6_block,19}, {9,HANGAR,HANGAR2_AREA_block,19}, {9,0,0,19},
+	{10,TERM7,TERM7_block,20}, {10,HANGAR,HANGAR2_AREA_block,20}, {10,0,0,20},
+	{11,TERM8,TERM8_block,21}, {11,HANGAR,HANGAR2_AREA_block,21}, {11,0,0,21},
+	{12,HELIPAD1,HELIPAD1_block,12}, {12,HANGAR,0,70}, {12,HELITAKEOFF,0,72},
+	{13,HELIPAD2,HELIPAD2_block,13}, {13,HANGAR,0,71}, {13,HELITAKEOFF,0,73},
+	{14,0,TERM_GROUP2_ENTER1_block,15},
+	{15,0,TERM_GROUP2_ENTER1_block,16},
+	{16,0,TERM_GROUP2_ENTER2_block,17},
+	{17,0,TERM_GROUP2_ENTER2_block,18},
+	{18,255,TERM_GROUP2_block,0}, {18,TERM5,TERM5_block,8}, {18,TAKEOFF,0,19}, {18,HELITAKEOFF,HELIPAD1_block,19}, {18,0,TERM_GROUP2_EXIT1_block,19},
+	{19,255,TERM_GROUP2_block,0}, {19,TERM6,TERM6_block,9}, {19,TERM5,0,18}, {19,TAKEOFF,0,57}, {19,HELITAKEOFF,HELIPAD1_block,20}, {19,0,TERM_GROUP2_EXIT1_block,20}, // add exit to runway out 2
+	{20,255,TERM_GROUP2_block,0}, {20,TERM7,TERM7_block,10}, {20,TERM5,0,19}, {20,TERM6,0,19}, {20,HANGAR,HANGAR2_AREA_block,3}, {20,TAKEOFF,0,19}, {20,0,TERM_GROUP2_EXIT1_block,21},
+	{21,255,TERM_GROUP2_block,0}, {21,TERM8,TERM8_block,11}, {21,HANGAR,HANGAR2_AREA_block,20}, {21,TERM5,0,20}, {21,TERM6,0,20}, {21,TERM7,0,20}, {21,TAKEOFF,0,20}, {21,0,TERM_GROUP2_EXIT1_block,22},
+	{22,255,TERM_GROUP2_block,0}, {22,HANGAR,0,21}, {22,TERM5,0,21}, {22,TERM6,0,21}, {22,TERM7,0,21}, {22,TERM8,0,21}, {22,TAKEOFF,0,21}, {22,0,0,23},
+	{23,255,TERM_GROUP2_EXIT1_block,0}, {23,0,0,70},
+	{24,0,TERM_GROUP2_EXIT2_block,25},
+	{25,255,TERM_GROUP2_EXIT2_block,0}, {25,HANGAR,HANGAR1_AREA_block | TERM_GROUP1_block,29}, {25,0,0,29},
+	{26,255,TERM_GROUP1_block,0}, {26,TERM1,TERM1_block,4}, {26,HANGAR,HANGAR1_AREA_block,27}, {26,TERM5,TERM_GROUP2_ENTER1_block,14}, {26,TERM6,TERM_GROUP2_ENTER1_block,14}, {26,TERM7,TERM_GROUP2_ENTER1_block,14}, {26,TERM8,TERM_GROUP2_ENTER1_block,14}, {26,HELIPAD1,TERM_GROUP2_ENTER1_block,14}, {26,HELIPAD2,TERM_GROUP2_ENTER1_block,14}, {26,HELITAKEOFF,TERM_GROUP2_ENTER1_block,14}, {26,0,0,27},
+	{27,255,TERM_GROUP1_block,0}, {27,TERM2,TERM2_block,5}, {27,HANGAR,HANGAR1_AREA_block,2}, {27,TERM1,0,26}, {27,TERM5,0,26}, {27,TERM6,0,26}, {27,TERM7,0,26}, {27,TERM8,0,26}, {27,HELIPAD1,0,14}, {27,HELIPAD2,0,14}, {27,0,0,28},
+	{28,255,TERM_GROUP1_block,0}, {28,TERM3,TERM3_block,6}, {28,HANGAR,HANGAR1_AREA_block,27}, {28,TERM1,0,27}, {28,TERM2,0,27}, {28,TERM4,0,29}, {28,TERM5,0,14}, {28,TERM6,0,14}, {28,TERM7,0,14}, {28,TERM8,0,14}, {28,HELIPAD1,0,14}, {28,HELIPAD2,0,14}, {28,0,0,29},
+	{29,255,TERM_GROUP1_block,0}, {29,TERM4,TERM4_block,7}, {29,HANGAR,HANGAR1_AREA_block,27}, {29,TAKEOFF,0,30}, {29,0,0,28},
+	{30,255,OUT_WAY_block2,0}, {30,0,0,31},
+	{31,255,OUT_WAY_block,32},
+	// takeoff
+	{32,TAKEOFF,RUNWAY_OUT_block,33},
+	{33,0,RUNWAY_OUT_block,34},
+	{34,STARTTAKEOFF,NOTHING_block,35},
+	{35,ENDTAKEOFF,NOTHING_block,0},
+	// landing
+	{36,0,0,0},
+	{37,LANDING,RUNWAY_IN_block,38},
+	{38,0,RUNWAY_IN_block,39},
+	{39,0,RUNWAY_IN_block,40},
+	{40,ENDLANDING,RUNWAY_IN_block,41},
+	{41,0,IN_WAY_block,42},
+	{42,255,IN_WAY_block,0}, {42,255,TERM_GROUP1_block,0}, {42,255,TERM_GROUP1_block,1}, {42,HANGAR,0,2}, {42,0,0,26},
+	// In Air
+	{43,0,0,44},
+	{44,FLYING,0,45}, {44,HELILANDING,0,47}, {44,LANDING,0,69}, {44,0,0,45},
+	{45,0,0,46},
+	{46,FLYING,0,43}, {46,LANDING,0,76}, {46,0,0,43},
+	// Helicopter -- stay in air in special place as a buffer to choose from helipads
+	{47,HELILANDING,PRE_HELIPAD_block,48},
+	{48,HELIENDLANDING,PRE_HELIPAD_block,48}, {48,HELIPAD1,0,49}, {48,HELIPAD2,0,50}, {48,HANGAR,0,55},
+	{49,0,NOTHING_block,51},
+	{50,0,NOTHING_block,52},
+	// landing
+	{51,255,NOTHING_block,0}, {51,HELIPAD1,HELIPAD1_block,12}, {51,HANGAR,0,55}, {51,0,0,12},
+	{52,255,NOTHING_block,0}, {52,HELIPAD2,HELIPAD2_block,13}, {52,HANGAR,0,55}, {52,0,0,13},
+	// Helicopter -- takeoff
+	{53,HELITAKEOFF,NOTHING_block,0},
+	{54,HELITAKEOFF,NOTHING_block,0},
+	{55,0,HANGAR2_AREA_block,56}, // need to go to hangar when waiting in air
+	{56,0,HANGAR2_AREA_block,3},
+	// runway 2 out support
+	{57,255,OUT_WAY2_block,0}, {57,TAKEOFF,0,58}, {57,0,0,58},
+	{58,0,OUT_WAY2_block,59},
+	{59,TAKEOFF,RUNWAY_OUT2_block,60}, // takeoff
+	{60,0,RUNWAY_OUT2_block,61},
+	{61,STARTTAKEOFF,NOTHING_block,62},
+	{62,ENDTAKEOFF,NOTHING_block,0},
+	// runway 2 in support
+	{63,LANDING,RUNWAY_IN2_block,64},
+	{64,0,RUNWAY_IN2_block,65},
+	{65,0,RUNWAY_IN2_block,66},
+	{66,ENDLANDING,RUNWAY_IN2_block,0}, {66,255,0,1}, {66,255,0,0}, {66,0,0,67},
+	{67,0,IN_WAY2_block,68},
+	{68,255,IN_WAY2_block,0}, {68,255,TERM_GROUP2_block,1}, {68,255,TERM_GROUP1_block,0}, {68,HANGAR,HANGAR2_AREA_block,22}, {68,0,0,22},
+	{69,255,RUNWAY_IN2_block,0}, {69,0,RUNWAY_IN2_block,63},
+	{70,255,TERM_GROUP2_EXIT1_block,0}, {70,HELIPAD1,HELIPAD1_block,12}, {70,HELITAKEOFF,HELIPAD1_block,12}, {70,0,0,71},
+	{71,255,TERM_GROUP2_EXIT1_block,0}, {71,HELIPAD2,HELIPAD2_block,13}, {71,HELITAKEOFF,HELIPAD1_block,12}, {71,0,0,24},
+	{72,0,HELIPAD1_block,53},
+	{73,0,HELIPAD2_block,54},
+	{74,HELITAKEOFF,NOTHING_block,0},
+	{75,HELITAKEOFF,NOTHING_block,0},
+	{76,255,RUNWAY_IN_block,0}, {76,0,RUNWAY_IN_block,37},
+	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
+};
+
+
 // heliports, oilrigs don't have depots
 static const byte _airport_helipad_heliport_oilrig[] = {1, 1};
 static const AirportFTAbuildup _airport_fta_heliport_oilrig[] = {
@@ -371,23 +699,97 @@
 	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
 };
 
+// helidepots
+static const TileIndexDiffC _airport_depots_helidepot[] = {{1, 0}};
+static const byte _airport_helipad_helidepot[] = {1, 1};
+static const AirportFTAbuildup _airport_fta_helidepot[] = {
+	{ 0,HANGAR,NOTHING_block,1},
+	{ 1,255,HANGAR2_AREA_block,0}, {1,HANGAR,0,0}, {1,HELIPAD1,HELIPAD1_block,14}, {1,HELITAKEOFF,0,15}, {1,0,0,0},
+	{ 2,FLYING,NOTHING_block,3}, {2,HELILANDING,PRE_HELIPAD_block,7}, {2,HANGAR,0,12}, {2,HELITAKEOFF,NOTHING_block,16},
+	// In Air
+	{ 3,0,NOTHING_block,4},
+	{ 4,0,NOTHING_block,5},
+	{ 5,0,NOTHING_block,6},
+	{ 6,0,NOTHING_block,2},
+	// Helicopter -- stay in air in special place as a buffer to choose from helipads
+	{ 7,HELILANDING,PRE_HELIPAD_block,8},
+	{ 8,HELIENDLANDING,PRE_HELIPAD_block,8}, {8,HELIPAD1,0,9}, {8,HANGAR,0,12}, {8,0,0,2},
+	{ 9,0,NOTHING_block,10},
+	// landing
+	{10,255,NOTHING_block,10}, {10,HELIPAD1,HELIPAD1_block,14}, {10,HANGAR,0,1}, {10,0,0,14},
+	// Helicopter -- takeoff
+	{11,HELITAKEOFF,NOTHING_block,0},
+	{12,0,HANGAR2_AREA_block,13}, // need to go to hangar when waiting in air
+	{13,0,HANGAR2_AREA_block,1},
+	{14,HELIPAD1,HELIPAD1_block,14}, {14,HANGAR,0,1}, {14,HELITAKEOFF,0,17},
+	{15,HELITAKEOFF,NOTHING_block,0}, // takeoff outside depot
+	{16,HELITAKEOFF,0,14},
+	{17,0,NOTHING_block,11},
+	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
+};
+
+// helistation
+static const TileIndexDiffC _airport_depots_helistation[] = {{0, 0}};
+static const byte _airport_helipad_helistation[] = {1, 3};
+static const AirportFTAbuildup _airport_fta_helistation[] = {
+	{ 0,HANGAR,NOTHING_block,8}, {0,HELIPAD1,0,1}, {0,HELIPAD2,0,1}, {0,HELIPAD3,0,1}, {0,HELITAKEOFF,0,1}, {0,0,0,0},
+	{ 1,255,HANGAR2_AREA_block,0}, {1,HANGAR,0,0}, {1,HELITAKEOFF,0,3}, {1,0,0,4},
+	// landing
+	{ 2,FLYING,NOTHING_block,28}, {2,HELILANDING,0,15}, {2,0,0,28},
+	// helicopter side
+	{3,HELITAKEOFF,NOTHING_block,0}, // helitakeoff outside hangar2
+	{4,255,TAXIWAY_BUSY_block,0}, {4,HANGAR,HANGAR2_AREA_block,1}, {4,HELITAKEOFF,0,1}, {4,0,0,5},
+	{5,255,TAXIWAY_BUSY_block,0}, {5,HELIPAD1,HELIPAD1_block,6}, {5,HELIPAD2,HELIPAD2_block,7}, {5,HELIPAD3,HELIPAD3_block,8}, {5,0,0,4},
+	{6,HELIPAD1,HELIPAD1_block,5}, {6,HANGAR, HANGAR2_AREA_block,5}, {6,HELITAKEOFF,0,9}, {6,0,0,6},
+	{7,HELIPAD2,HELIPAD2_block,5}, {7,HANGAR, HANGAR2_AREA_block,5}, {7,HELITAKEOFF,0,10}, {7,0,0,7},
+	{8,HELIPAD3,HELIPAD3_block,5}, {8,HANGAR, HANGAR2_AREA_block,5}, {8,HELITAKEOFF,0,11}, {8,0,0,8},
+	{9,0,HELIPAD1_block,12},
+	{10,0,HELIPAD2_block,13},
+	{11,0,HELIPAD3_block,14},
+	{12,HELITAKEOFF,NOTHING_block,0},
+	{13,HELITAKEOFF,NOTHING_block,0},
+	{14,HELITAKEOFF,NOTHING_block,0},
+	// heli - in flight moves
+	{15,HELILANDING,PRE_HELIPAD_block,16},
+	{16,HELIENDLANDING,PRE_HELIPAD_block,16}, {16,HELIPAD1,0,17}, {16,HELIPAD2,0,18}, {16,HELIPAD3,0,19}, {16,HANGAR,0,23},
+	{17,0,NOTHING_block,20},
+	{18,0,NOTHING_block,21},
+	{19,0,NOTHING_block,22},
+	// heli landing
+	{20,255,NOTHING_block,0}, {20,HELIPAD1,HELIPAD1_block,6}, {20,HANGAR,0,23}, {20,0,0,6},
+	{21,255,NOTHING_block,0}, {21,HELIPAD2,HELIPAD2_block,7}, {21,HANGAR,0,23}, {21,0,0,7},
+	{22,255,NOTHING_block,0}, {22,HELIPAD3,HELIPAD3_block,8}, {22,HANGAR,0,23}, {22,0,0,8},
+	{23,0,HANGAR2_AREA_block,24}, // need to go to helihangar when waiting in air
+	{24,0,HANGAR2_AREA_block,1},
+	{25,0,NOTHING_block,26},
+	{26,0,NOTHING_block,27},
+	{27,0,NOTHING_block,2},
+	{28,0,NOTHING_block,29},
+	{29,0,NOTHING_block,30},
+	{30,0,NOTHING_block,31},
+	{31,0,NOTHING_block,32},
+	{32,0,NOTHING_block,25},
+	{MAX_ELEMENTS,0,0,0} // end marker. DO NOT REMOVE
+};
+
+
 static const AirportMovingData * const _airport_moving_datas[] = {
-	_airport_moving_data_country,				// Country Airfield (small) 4x3
-	_airport_moving_data_town,					// City Airport (large) 6x6
-	_airport_moving_data_heliport,			// Heliport
-	_airport_moving_data_metropolitan,	// Metropolitain Airport (large) - 2 runways
-	_airport_moving_data_international,	// International Airport (xlarge) - 2 runways
+	_airport_moving_data_country,           // Country Airfield (small) 4x3
+	_airport_moving_data_town,              // City Airport (large) 6x6
+	_airport_moving_data_heliport,          // Heliport
+	_airport_moving_data_metropolitan,      // Metropolitain Airport (large) - 2 runways
+	_airport_moving_data_international,     // International Airport (xlarge) - 2 runways
+	_airport_moving_data_commuter,          // Commuter Airfield (small) 5x4
+	_airport_moving_data_helidepot,         // Helidepot
+	_airport_moving_data_intercontinental,  // Intercontinental Airport (xxlarge) - 4 runways
+	_airport_moving_data_helistation,       // Helistation
 	NULL,
 	NULL,
 	NULL,
 	NULL,
 	NULL,
 	NULL,
-	NULL,
-	NULL,
-	NULL,
-	NULL,
-	_airport_moving_data_oilrig					// Oilrig
+	_airport_moving_data_oilrig             // Oilrig
 };
 
 #endif /* AIRPORT_MOVEMENT_H */
Binary file data/airports.grf has changed
--- a/gfxinit.c	Thu Jun 22 21:31:09 2006 +0000
+++ b/gfxinit.c	Fri Jun 23 22:05:40 2006 +0000
@@ -368,6 +368,9 @@
 	LoadGrfIndexed("openttd.grf", _openttd_grf_indexes, i++);
 	load_index = SPR_OPENTTD_BASE + OPENTTD_SPRITES_COUNT;
 
+	assert(load_index == SPR_AIRPORTX_BASE);
+	load_index += LoadGrfFile("airports.grf", load_index, i++);
+
 	LoadNewGRF(load_index, i);
 }
 
--- a/lang/english.txt	Thu Jun 22 21:31:09 2006 +0000
+++ b/lang/english.txt	Fri Jun 23 22:05:40 2006 +0000
@@ -1705,11 +1705,6 @@
 STR_3056_SHOW_LIST_OF_ACCEPTED_CARGO                            :{BLACK}Show list of accepted cargo
 STR_3057_STATION_NAMES_CLICK_ON                                 :{BLACK}Station names - click on name to centre main view on station
 STR_3058_SELECT_SIZE_TYPE_OF_AIRPORT                            :{BLACK}Select size/type of airport
-STR_3059_SMALL                                                  :{BLACK}Small
-STR_305A_LARGE                                                  :{BLACK}City
-STR_305AA_LARGE                                                 :{BLACK}Metropolitan airport
-STR_305AB_LARGE                                                 :{BLACK}International airport
-STR_305B_SIZE                                                   :{BLACK}Size
 STR_305C_0                                                      :{STATION} {STATIONFEATURES}
 STR_STATION_SIGN_TINY                                           :{TINYFONT}{STATION}
 STR_305E_RAILROAD_STATION                                       :Railway station
@@ -1724,7 +1719,6 @@
 STR_3068_DOCK                                                   :{WHITE}Dock
 STR_3069_BUOY                                                   :Buoy
 STR_306A_BUOY_IN_THE_WAY                                        :{WHITE}...buoy in the way
-STR_306B_HELIPORT                                               :{BLACK}Heliport
 STR_306C_STATION_TOO_SPREAD_OUT                                 :{WHITE}...station too spread out
 STR_306D_NONUNIFORM_STATIONS_DISALLOWED                         :{WHITE}...nonuniform stations disabled
 STR_USE_CTRL_TO_SELECT_MORE                                     :{BLACK}Hold down CTRL to select more than one item
@@ -2864,3 +2858,20 @@
 STR_PURCHASE_INFO_COST_SPEED                                    :{BLACK}Cost: {GOLD}{CURRENCY}{BLACK} Speed: {GOLD}{VELOCITY}
 STR_PURCHASE_INFO_AIRCRAFT_CAPACITY                             :{BLACK}Capacity: {GOLD}{COMMA} passengers, {COMMA} bags of mail
 STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT                          :{BLACK}Powered Wagons: {GOLD}+{POWER}{BLACK} Weight: {GOLD}+{WEIGHT_S}
+
+########### String for new airports
+STR_SMALL_AIRPORT                                               :{BLACK}Small
+STR_CITY_AIRPORT                                                :{BLACK}City
+STR_METRO_AIRPORT                                               :{BLACK}Metropolitan airport
+STR_INTERNATIONAL_AIRPORT                                       :{BLACK}International airport
+STR_COMMUTER_AIRPORT                                            :{BLACK}Commuter
+STR_INTERCONTINENTAL_AIRPORT                                    :{BLACK}Intercontinental
+STR_HELIPORT                                                    :{BLACK}Heliport
+STR_HELIDEPOT                                                   :{BLACK}Helidepot
+STR_HELISTATION                                                 :{BLACK}Helistation
+
+STR_SMALL_AIRPORTS                                              :{BLACK}Small airports
+STR_LARGE_AIRPORTS                                              :{BLACK}Large airports
+STR_HUB_AIRPORTS                                                :{BLACK}Hub airports
+STR_HELIPORTS                                                   :{BLACK}Helicopter airports
+########
--- a/newgrf_engine.c	Thu Jun 22 21:31:09 2006 +0000
+++ b/newgrf_engine.c	Fri Jun 23 22:05:40 2006 +0000
@@ -318,12 +318,16 @@
 		case TERM4:
 		case TERM5:
 		case TERM6:
+		case TERM7:
+		case TERM8:
 			/* TTDPatch only has 3 terminals, so treat these states the same */
 			if (amdflag & AMED_EXACTPOS) return AMS_TTDP_TO_PAD3;
 			return AMS_TTDP_TO_ENTRY_2_AND_3_AND_H;
 
 		case HELIPAD1:
-		case HELIPAD2: // Will only occur for helicopters.
+		case HELIPAD2:
+		case HELIPAD3:
+		case HELIPAD4: // Will only occur for helicopters.
 			if (amdflag & AMED_HELI_LOWER) return AMS_TTDP_HELI_LAND_AIRPORT; // Descending.
 			if (amdflag & AMED_SLOWTURN)   return AMS_TTDP_FLIGHT_TO_TOWER;   // Still hasn't started descent.
 			return AMS_TTDP_TO_JUNCTION; // On the ground.
@@ -343,6 +347,12 @@
 				case AT_LARGE:
 				case AT_METROPOLITAN:
 				case AT_INTERNATIONAL:
+				case AT_COMMUTER:
+				case AT_INTERCON:
+				/* Note, Helidepot and Helistation are treated as airports as
+				 * helicopters are taking off from ground level. */
+				case AT_HELIDEPOT:
+				case AT_HELISTATION:
 					if (amdflag & AMED_HELI_RAISE) return AMS_TTDP_HELI_TAKEOFF_AIRPORT;
 					return AMS_TTDP_TO_JUNCTION;
 
@@ -374,6 +384,8 @@
 						return AMS_TTDP_HELI_LAND_HELIPORT;
 
 					default:
+						/* Note, Helidepot and Helistation are treated as airports as
+						 * helicopters are landing at ground level. */
 						return AMS_TTDP_HELI_LAND_AIRPORT;
 				}
 			}
@@ -432,6 +444,10 @@
 		case TERM4:
 		case TERM5:
 		case TERM6:
+		case TERM7:
+		case TERM8:
+		case HELIPAD3:
+		case HELIPAD4:
 			return (v->current_order.type == OT_LOADING) ? AMA_TTDP_ON_PAD3 : AMA_TTDP_LANDING_TO_PAD3;
 
 		case TAKEOFF:      // Moving to takeoff position
@@ -615,13 +631,19 @@
 				byte airporttype;
 
 				switch (GetStation(v->u.air.targetairport)->airport_type) {
-					case AT_SMALL: airporttype = ATP_TTDP_SMALL; break;
+					/* Note, Helidepot and Helistation are treated as small airports
+					 * as they are at ground level. */
+					case AT_HELIDEPOT:
+					case AT_HELISTATION:
+					case AT_COMMUTER:
+					case AT_SMALL:         airporttype = ATP_TTDP_SMALL; break;
 					case AT_METROPOLITAN:
 					case AT_INTERNATIONAL:
-					case AT_LARGE: airporttype = ATP_TTDP_LARGE; break;
-					case AT_HELIPORT: airporttype = ATP_TTDP_HELIPORT; break;
-					case AT_OILRIG: airporttype = ATP_TTDP_OILRIG; break;
-					default: airporttype = ATP_TTDP_LARGE; break;
+					case AT_INTERCON:
+					case AT_LARGE:         airporttype = ATP_TTDP_LARGE; break;
+					case AT_HELIPORT:      airporttype = ATP_TTDP_HELIPORT; break;
+					case AT_OILRIG:        airporttype = ATP_TTDP_OILRIG; break;
+					default:               airporttype = ATP_TTDP_LARGE; break;
 				}
 
 				return (altitude << 8) | airporttype;
--- a/saveload.c	Thu Jun 22 21:31:09 2006 +0000
+++ b/saveload.c	Fri Jun 23 22:05:40 2006 +0000
@@ -30,7 +30,7 @@
 #include "variables.h"
 #include <setjmp.h>
 
-const uint16 SAVEGAME_VERSION = 28;
+const uint16 SAVEGAME_VERSION = 29;
 uint16 _sl_version;       /// the major savegame version identifier
 byte   _sl_minor_version; /// the minor savegame version, DO NOT USE!
 
--- a/station.h	Thu Jun 22 21:31:09 2006 +0000
+++ b/station.h	Fri Jun 23 22:05:40 2006 +0000
@@ -128,6 +128,10 @@
 	CA_DOCK = 5,
 	CA_AIR_METRO = 6,
 	CA_AIR_INTER = 8,
+	CA_AIR_COMMUTER    = 4,
+	CA_AIR_HELIDEPOT   = 4,
+	CA_AIR_INTERCON    = 10,
+	CA_AIR_HELISTATION = 4,
 };
 
 void ModifyStationRatingAround(TileIndex tile, PlayerID owner, int amount, uint radius);
--- a/station_cmd.c	Thu Jun 22 21:31:09 2006 +0000
+++ b/station_cmd.c	Fri Jun 23 22:05:40 2006 +0000
@@ -180,6 +180,10 @@
 			case AT_LARGE:         ret = max(ret, CA_AIR_LARGE);    break;
 			case AT_METROPOLITAN:  ret = max(ret, CA_AIR_METRO);    break;
 			case AT_INTERNATIONAL: ret = max(ret, CA_AIR_INTER);    break;
+			case AT_COMMUTER:      ret = max(ret, CA_AIR_COMMUTER); break;
+			case AT_HELIDEPOT:     ret = max(ret, CA_AIR_HELIDEPOT); break;
+			case AT_INTERCON:      ret = max(ret, CA_AIR_INTERCON); break;
+			case AT_HELISTATION:   ret = max(ret, CA_AIR_HELISTATION); break;
 		}
 	}
 
@@ -1594,17 +1598,57 @@
 	26, 23, 23, 23, 23, 23,  26
 };
 
+// Intercontinental Airport (vlarge) - 4 runways
+static const byte _airport_sections_intercontinental[] = {
+  	102, 120,  89,  89,  89,  89,  89,  89, 118,
+  	120,  22,  22,  22,  22,  22,  22, 119, 117,
+ 	 87,  54,  87,   8,   8,   8,   8,  51, 117,
+ 	 87,  18,  87,  85, 116, 116,   8,   9,  10,
+	 87,   8,   8,  11,  31,  11,   8, 160,  32,
+	 32, 160,   8,  11,  27,  11,   8,   8,  10,
+	 87,   8,   8,  11,  30,  11,   8,   8,  10,
+	 87, 142,   8,  11,  29,  11,  10,  12,  10,
+	 87,  58,  87,   8,   8,   8,  10,  56, 117,
+  	 87, 120,  89,  89,  89,  89,  89,  89, 119,
+  	121,  22,  22,  22,  22,  22,  22, 119,  37
+};
+
+
+// Commuter Airfield (small)
+static const byte _airport_sections_commuter[] = {
+	85, 30, 115, 115, 32,
+	87, 8,    8,   8, 10,
+	87, 11,  11,  11, 10,
+	26, 23,  23,  23, 26
+};
+
 // Heliport
 static const byte _airport_sections_heliport[] = {
 	66,
 };
 
+// Helidepot
+static const byte _airport_sections_helidepot[] = {
+	124, 32,
+	122, 123
+};
+
+// Helistation
+static const byte _airport_sections_helistation[] = {
+	 32, 134, 159, 158,
+	161, 142, 142, 157
+};
+
 static const byte * const _airport_sections[] = {
-	_airport_sections_country,        // Country Airfield (small)
-	_airport_sections_town,           // City Airport (large)
-	_airport_sections_heliport,       // Heliport
-	_airport_sections_metropolitan,   // Metropolitain Airport (large)
-	_airport_sections_international,  // International Airport (xlarge)
+	_airport_sections_country,           // Country Airfield (small)
+	_airport_sections_town,              // City Airport (large)
+	_airport_sections_heliport,          // Heliport
+	_airport_sections_metropolitan,      // Metropolitain Airport (large)
+	_airport_sections_international,     // International Airport (xlarge)
+	_airport_sections_commuter,          // Commuter Airport (small)
+	_airport_sections_helidepot,         // Helidepot
+	_airport_sections_intercontinental,  // Intercontinental Airport (xxlarge)
+	_airport_sections_helistation        // Helistation
 };
 
 /** Place an Airport.
@@ -1686,7 +1730,7 @@
 
 		// if airport type equals Heliport then generate
 		// type 5 name, which is heliport, otherwise airport names (1)
-		if (!GenerateStationName(st, tile, (p1 == AT_HELIPORT) ? 5 : 1))
+		if (!GenerateStationName(st, tile, (p1 == AT_HELIPORT)||(p1 == AT_HELIDEPOT)||(p1 == AT_HELISTATION) ? 5 : 1))
 			return CMD_ERROR;
 
 		if (flags & DC_EXEC) StationInitialize(st, tile);
@@ -2196,6 +2240,7 @@
 		case GFX_WINDSACK_FIRST : // for small airport
 		case GFX_RADAR_INTERNATIONAL_FIRST:
 		case GFX_RADAR_METROPOLITAN_FIRST:
+		case GFX_RADAR_DISTRICTWE_FIRST: // radar district W-E airport
 			AddAnimatedTile(tile);
 			break;
 
@@ -2226,7 +2271,7 @@
 		SetStationGfx(tile, gfx);
 		MarkTileDirtyByTile(tile);
 	//added - begin
-	} else if (IS_BYTE_INSIDE(gfx, GFX_RADAR_INTERNATIONAL_FIRST, GFX_RADAR_METROPOLITAN_LAST+1)) {
+	} else if (IS_BYTE_INSIDE(gfx, GFX_RADAR_INTERNATIONAL_FIRST, GFX_RADAR_METROPOLITAN_LAST + 1) || IS_BYTE_INSIDE(gfx, GFX_RADAR_DISTRICTWE_FIRST, GFX_RADAR_DISTRICTWE_LAST + 1) ) {
 		if (_tick_counter & 3)
 			return;
 
@@ -2238,6 +2283,9 @@
 		else if (gfx == GFX_RADAR_METROPOLITAN_LAST+1) {
 			gfx = GFX_RADAR_METROPOLITAN_FIRST;
 		}
+		else if (gfx == GFX_RADAR_DISTRICTWE_LAST + 1) {
+			gfx = GFX_RADAR_DISTRICTWE_FIRST;
+		}
 
 		SetStationGfx(tile, gfx);
 		MarkTileDirtyByTile(tile);
--- a/station_map.h	Thu Jun 22 21:31:09 2006 +0000
+++ b/station_map.h	Fri Jun 23 22:05:40 2006 +0000
@@ -38,7 +38,9 @@
 	GFX_RADAR_INTERNATIONAL_LAST  = 101,
 	GFX_RADAR_METROPOLITAN_FIRST  = 102,
 	GFX_RADAR_METROPOLITAN_LAST   = 113,
-	GFX_BASE_END                  = 155
+	GFX_RADAR_DISTRICTWE_FIRST    = 145,
+	GFX_RADAR_DISTRICTWE_LAST     = 156,
+	GFX_BASE_END                  = 161
 };
 
 enum {
@@ -53,7 +55,10 @@
 typedef enum HangarTiles {
 	HANGAR_TILE_0 = 32,
 	HANGAR_TILE_1 = 65,
-	HANGAR_TILE_2 = 86
+	HANGAR_TILE_2 = 86,
+	HANGAR_TILE_3 = 129, // added for west facing hangar
+	HANGAR_TILE_4 = 130, // added for north facing hangar
+	HANGAR_TILE_5 = 131 // added for east facing hangar
 } HangarTiles;
 
 typedef enum StationType {
@@ -102,7 +107,10 @@
 	return
 		gfx == HANGAR_TILE_0 ||
 		gfx == HANGAR_TILE_1 ||
-		gfx == HANGAR_TILE_2;
+		gfx == HANGAR_TILE_2 ||
+		gfx == HANGAR_TILE_3 ||
+		gfx == HANGAR_TILE_4 ||
+		gfx == HANGAR_TILE_5;
 }
 
 static inline bool IsAirport(TileIndex t)
--- a/table/sprites.h	Thu Jun 22 21:31:09 2006 +0000
+++ b/table/sprites.h	Fri Jun 23 22:05:40 2006 +0000
@@ -80,6 +80,21 @@
 	SPR_LOCK = SPR_OPENTTD_BASE + 19,       // lock icon (for password protected servers)
 	SPR_FLAGS_BASE = SPR_OPENTTD_BASE + 83, // start of the flags block (in same order as enum NetworkLanguage)
 
+	SPR_AIRPORTX_BASE = SPR_OPENTTD_BASE + 95, // The sprites used for other airport angles
+	SPR_NEWAIRPORT_TARMAC = SPR_AIRPORTX_BASE,
+	SPR_NSRUNWAY1 = SPR_AIRPORTX_BASE + 1,
+	SPR_NSRUNWAY2 = SPR_AIRPORTX_BASE + 2,
+	SPR_NSRUNWAY3 = SPR_AIRPORTX_BASE + 3,
+	SPR_NSRUNWAY4 = SPR_AIRPORTX_BASE + 4,
+	SPR_NSRUNWAY_END = SPR_AIRPORTX_BASE + 5,
+	SPR_NEWHANGAR_S = SPR_AIRPORTX_BASE + 6,
+	SPR_NEWHANGAR_S_WALL = SPR_AIRPORTX_BASE + 7,
+	SPR_NEWHANGAR_W = SPR_AIRPORTX_BASE + 8,
+	SPR_NEWHANGAR_W_WALL = SPR_AIRPORTX_BASE + 9,
+	SPR_NEWHANGAR_N = SPR_AIRPORTX_BASE + 10,
+	SPR_NEWHANGAR_E = SPR_AIRPORTX_BASE + 11,
+	SPR_NEWHELIPAD = SPR_AIRPORTX_BASE + 12,
+
 	/* Manager face sprites */
 	SPR_GRADIENT = 874, // background gradient behind manager face
 
@@ -317,6 +332,7 @@
 	SPR_AIRPORT_RADAR_B             = 2690,
 	SPR_AIRPORT_RADAR_C             = 2691,
 	SPR_AIRPORT_HELIPAD             = SPR_OPENTTD_BASE + 28,
+	SPR_AIRPORT_HELIDEPOT_OFFICE	= 2095,
 
 	/* Road Stops */
 	/* Road stops have a ground tile and 3 buildings, one on each side
--- a/table/station_land.h	Thu Jun 22 21:31:09 2006 +0000
+++ b/table/station_land.h	Fri Jun 23 22:05:40 2006 +0000
@@ -63,12 +63,12 @@
 };
 
 static const DrawTileSeqStruct _station_display_datas_9[] = {
-	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR },
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences north
 	TILE_SEQ_END()
 };
 
 static const DrawTileSeqStruct _station_display_datas_10[] = {
-	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR },
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
 	TILE_SEQ_END()
 };
 
@@ -678,6 +678,344 @@
 	TILE_SEQ_END()
 };
 
+// helipad for commuter airport
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0115[] = {
+	{ 10,  6,  0,  0,  0,  0, SPR_AIRPORT_HELIPAD },
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences left
+	TILE_SEQ_END()
+};
+
+// helipad for continental airport
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0116[] = {
+	{ 10,  6,  0,  0,  0,  0, SPR_AIRPORT_HELIPAD },
+	TILE_SEQ_END()
+};
+
+// asphalt tile with fences in north and south
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0117[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR },
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR },
+	TILE_SEQ_END()
+};
+
+// runway tiles with 2 corner fences
+static const DrawTileSeqStruct _station_display_datas_0118[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences north
+	TILE_SEQ_END()
+};
+
+// runway tiles with 2 corner fences
+static const DrawTileSeqStruct _station_display_datas_0119[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// runway tiles with 2 corner fences
+static const DrawTileSeqStruct _station_display_datas_0120[] = {
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences north
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	TILE_SEQ_END()
+};
+
+// runway tiles with 2 corner fences
+static const DrawTileSeqStruct _station_display_datas_0121[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// ======== new 2x2 helidepot ========
+// helipad tiles with 2 corner fences top+right
+static const DrawTileSeqStruct _station_display_datas_0122[] = {
+	{ 10,  6,  0,  0,  0,  0, SPR_AIRPORT_HELIPAD },
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// tarmac tiles with 2 corner fences bottom+right
+static const DrawTileSeqStruct _station_display_datas_0123[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences north
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// helidepot office with concrete underground and no fence
+// concrete underground, fences top + left
+static const DrawTileSeqStruct _station_display_datas_0124[] = {
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences left
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	{  3,  3,  0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | PALETTE_MODIFIER_COLOR },  // helidepot office
+	TILE_SEQ_END()
+};
+
+// N/S runway plain
+static const DrawTileSeqStruct _station_display_datas_0125[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	TILE_SEQ_END()
+};
+
+// N/S runway end
+static const DrawTileSeqStruct _station_display_datas_0126[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	TILE_SEQ_END()
+};
+
+// N/S runway plain
+static const DrawTileSeqStruct _station_display_datas_0127[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences bottom
+	TILE_SEQ_END()
+};
+
+// N/S runway end
+static const DrawTileSeqStruct _station_display_datas_0128[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences bottom
+	TILE_SEQ_END()
+};
+
+// West facing hangar
+static const DrawTileSeqStruct _station_display_datas_0129[] = {
+	{ 14,  0,  0,  2, 16, 28, SPR_NEWHANGAR_W | PALETTE_MODIFIER_COLOR },
+	{  0,  0,  0,  2, 16, 28, SPR_NEWHANGAR_W_WALL },
+	TILE_SEQ_END()
+};
+
+// North facing hangar
+static const DrawTileSeqStruct _station_display_datas_0130[] = {
+	{ 14,  0,  0,  2, 16, 28, SPR_NEWHANGAR_N | PALETTE_MODIFIER_COLOR },
+	TILE_SEQ_END()
+};
+
+// East facing hangar
+static const DrawTileSeqStruct _station_display_datas_0131[] = {
+	{ 14,  0,  0,  2, 16, 28, SPR_NEWHANGAR_E | PALETTE_MODIFIER_COLOR },
+	TILE_SEQ_END()
+};
+
+// helipad for district airport NS
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0132[] = {
+	{ 10,  6,  0,  0,  0,  0, SPR_AIRPORT_HELIPAD },
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences bottom
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences right
+	TILE_SEQ_END()
+};
+
+// helipad for district airport NS
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0133[] = {
+	{ 10,  6,  0,  0,  0,  0, SPR_AIRPORT_HELIPAD },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// helidepot office with concrete underground and fence north
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0134[] = {
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences north
+	{  3,  3,  0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | PALETTE_MODIFIER_COLOR },  // helidepot office
+	TILE_SEQ_END()
+};
+
+// helidepot office with concrete underground and fence east
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0135[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	{  3,  3,  0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | PALETTE_MODIFIER_COLOR },  // helidepot office
+	TILE_SEQ_END()
+};
+
+// helidepot office with concrete underground and fence west
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0136[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	{  3,  3,  0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | PALETTE_MODIFIER_COLOR },  // helidepot office
+	TILE_SEQ_END()
+};
+
+// helidepot office with concrete underground and fence south
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0137[] = {
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	{  3,  3,  0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | PALETTE_MODIFIER_COLOR },  // helidepot office
+	TILE_SEQ_END()
+};
+
+// terminal with fence to east
+static const DrawTileSeqStruct _station_display_datas_0138[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	TILE_SEQ_END()
+};
+
+// terminal with fence to south
+static const DrawTileSeqStruct _station_display_datas_0139[] = {
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// terminal with fence to north
+static const DrawTileSeqStruct _station_display_datas_0140[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	TILE_SEQ_END()
+};
+
+// concrete with fence to east
+static const DrawTileSeqStruct _station_display_datas_0141[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	TILE_SEQ_END()
+};
+
+// concrete with fence to south
+static const DrawTileSeqStruct _station_display_datas_0142[] = {
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// helipad for district airport EW
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0143[] = {
+	{ 10,  6,  0,  0,  0,  0, SPR_AIRPORT_HELIPAD },
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences north
+	TILE_SEQ_END()
+};
+
+// helipad for district airport EW
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0144[] = {
+	{ 10,  6,  0,  0,  0,  0, SPR_AIRPORT_HELIPAD },
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	TILE_SEQ_END()
+};
+
+// turning radar with concrete underground fences on south -- needs 12 tiles
+// concrete underground
+//BEGIN
+static const DrawTileSeqStruct _station_display_datas_0145[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_1 },   // turning radar
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0146[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_2 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0147[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_3 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0148[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_4 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0149[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_5 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0150[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_6 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0151[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_7 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0152[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_8 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0153[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_9 },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0154[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_A },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0155[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_B },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0156[] = {
+	{ 7,  7,  0,  2,  2,  8, SPR_AIRPORT_RADAR_C },
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+//END
+
+// helipad for helistation
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0157[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
+// helipad for helistation
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0158[] = {
+	{ 15,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences west
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences north
+	TILE_SEQ_END()
+};
+
+// helipad for helistation
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0159[] = {
+	{  0,  0,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences north
+	TILE_SEQ_END()
+};
+
+// helidepot office with concrete underground - no fence
+static const DrawTileSeqStruct _station_display_datas_0160[] = {
+	{  3,  3,  0, 10, 10, 60, SPR_AIRPORT_HELIDEPOT_OFFICE | PALETTE_MODIFIER_COLOR },  // helidepot office
+	TILE_SEQ_END()
+};
+
+// concrete underground
+static const DrawTileSeqStruct _station_display_datas_0161[] = {
+	{  0,  0,  0,  1, 16,  6, SPR_AIRPORT_FENCE_Y | PALETTE_MODIFIER_COLOR }, // fences east
+	{  0, 15,  0, 16,  1,  6, SPR_AIRPORT_FENCE_X | PALETTE_MODIFIER_COLOR }, // fences south
+	TILE_SEQ_END()
+};
+
 static const DrawTileSprites _station_display_datas[] = {
 	{ SPR_RAIL_TRACK_X,              _station_display_datas_0 },
 	{ SPR_RAIL_TRACK_Y,              _station_display_datas_1 },
@@ -794,4 +1132,51 @@
 	{ SPR_AIRPORT_APRON,             _station_display_datas_0112 },
 	{ SPR_AIRPORT_APRON,             _station_display_datas_0113 },
 	{ SPR_AIRPORT_APRON,             _station_display_datas_0114 },
+	{ SPR_AIRPORT_APRON,             _station_display_datas_0115 },
+	{ SPR_AIRPORT_APRON,             _station_display_datas_0116 },
+	{ SPR_AIRPORT_APRON,             _station_display_datas_0117 },
+	{ SPR_AIRPORT_RUNWAY_END,        _station_display_datas_0118 },
+	{ SPR_AIRPORT_RUNWAY_END,        _station_display_datas_0119 },
+	{ SPR_AIRPORT_RUNWAY_END,        _station_display_datas_0120 },
+	{ SPR_AIRPORT_RUNWAY_END,        _station_display_datas_0121 },
+	{ SPR_AIRPORT_APRON,             _station_display_datas_0122 },
+	{ SPR_AIRPORT_APRON,             _station_display_datas_0123 },
+	{ SPR_AIRPORT_APRON,             _station_display_datas_0124 },
+	{ SPR_NSRUNWAY1,                 _station_display_datas_0125 },
+	{ SPR_NSRUNWAY_END,              _station_display_datas_0126 },
+	{ SPR_NSRUNWAY1,                 _station_display_datas_0127 },
+	{ SPR_NSRUNWAY_END,              _station_display_datas_0128 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0129 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0130 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0131 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0132 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0133 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0134 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0135 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0136 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0137 },
+	{ SPR_AIRPORT_AIRCRAFT_STAND,    _station_display_datas_0138 },
+	{ SPR_AIRPORT_AIRCRAFT_STAND,    _station_display_datas_0139 },
+	{ SPR_AIRPORT_AIRCRAFT_STAND,    _station_display_datas_0140 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0141 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0142 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0143 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0144 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0145 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0146 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0147 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0148 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0149 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0150 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0151 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0152 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0153 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0154 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0155 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0156 },
+	{ SPR_NEWHELIPAD,                _station_display_datas_0157 },
+	{ SPR_NEWHELIPAD,                _station_display_datas_0158 },
+	{ SPR_NEWHELIPAD,                _station_display_datas_0159 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0160 },
+	{ SPR_NEWAIRPORT_TARMAC,         _station_display_datas_0161 },
 };