Mercurial > hg > openttd
changeset 4059:70fbfa4489b7 draft
(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.
author | richk <richk@openttd.org> |
---|---|
date | Fri, 23 Jun 2006 22:05:40 +0000 |
parents | 0718dffb813f |
children | 10b9f90b31c5 |
files | 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 |
diffstat | 15 files changed, 1139 insertions(+), 103 deletions(-) [+] |
line wrap: on
line diff
--- a/aircraft_cmd.c +++ b/aircraft_cmd.c @@ -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 +++ b/airport.c @@ -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 +++ b/airport.h @@ -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 +++ b/airport_gui.c @@ -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 +++ b/airport_movement.h @@ -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 */
new file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..339534afbe272c120b2dcf6c588accd451f8b8b8 GIT binary patch literal 9110 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 F@$W?mYODYN
--- a/gfxinit.c +++ b/gfxinit.c @@ -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 +++ b/lang/english.txt @@ -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 +++ b/newgrf_engine.c @@ -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 +++ b/saveload.c @@ -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 +++ b/station.h @@ -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 +++ b/station_cmd.c @@ -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 +++ b/station_map.h @@ -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 +++ b/table/sprites.h @@ -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 +++ b/table/station_land.h @@ -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 }, };