(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.
replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
richk 18 years ago
parent ea5f3af9b8
commit a832ca51fe

@ -91,9 +91,8 @@ static bool HaveHangarInOrderList(Vehicle *v)
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 @@ int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
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 @@ int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
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 @@ int32 CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
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 @@ static void HandleCrashedAircraft(Vehicle *v)
// 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 @@ static void MaybeCrashAirplane(Vehicle *v)
//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 @@ static void AircraftEventHandler_HeliEndLanding(Vehicle *v, const AirportFTAClas
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 @@ static AircraftStateHandler * const _aircraft_state_handlers[] = {
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 @@ static bool AirportSetBlocks(Vehicle *v, AirportFTA *current_pos, const AirportF
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 @@ static bool FreeTerminal(Vehicle *v, byte i, byte last_terminal)
{
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;
}
}

@ -15,12 +15,16 @@ static AirportFTAClass* Oilrig;
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 @@ void InitializeAirports(void)
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 @@ void InitializeAirports(void)
);
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 @@ void UnInitializeAirports(void)
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 @@ static const char* const _airport_heading_strings[] = {
"ENDLANDING",
"HELILANDING",
"HELIENDLANDING",
"TERM7",
"TERM8",
"HELIPAD3",
"HELIPAD4",
"DUMMY" // extra heading for 255
};
@ -369,17 +442,21 @@ const AirportFTAClass* GetAirport(const byte airport_type)
//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 @@ uint32 GetValidAirports(void)
// 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;
}

@ -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 @@ enum {
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 @@ enum {
/* 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 @@ enum {
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 {

@ -159,12 +159,12 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
/* '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 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
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 @@ static void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
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 void BuildAirportPickerWndProc(Window *w, WindowEvent *e)
}
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,

@ -13,7 +13,6 @@ typedef struct AirportFTAbuildup {
byte next_in_chain; // next position from this position
} AirportFTAbuildup;
///////////////////////////////////////////////////////////////////////
/////*********Movement Positions on Airports********************///////
// Country Airfield (small) 4x3
@ -42,6 +41,48 @@ static const AirportMovingData _airport_moving_data_country[22] = {
{ 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 @@ static const AirportMovingData _airport_moving_data_international[51] = {
{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 @@ static const AirportMovingData _airport_moving_data_heliport[9] = {
{ 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 @@ static const AirportMovingData _airport_moving_data_oilrig[9] = {
/////**********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 @@ static const AirportFTAbuildup _airport_fta_country[] = {
{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 @@ static const AirportFTAbuildup _airport_fta_international[] = {
{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 @@ static const AirportFTAbuildup _airport_fta_heliport_oilrig[] = {
{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
NULL,
NULL,
NULL,
NULL,
_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,
_airport_moving_data_oilrig // Oilrig
_airport_moving_data_oilrig // Oilrig
};
#endif /* AIRPORT_MOVEMENT_H */

Binary file not shown.

@ -368,6 +368,9 @@ static void LoadSpriteTables(void)
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);
}

@ -1705,11 +1705,6 @@ STR_3055_CHANGE_NAME_OF_STATION :{BLACK}Change n
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_3066_COVERAGE_AREA_HIGHLIGHT :{BLACK}Coverage
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_WEIGHT_CWEIGHT :{BLACK}Weight:
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
########

@ -318,12 +318,16 @@ static byte MapAircraftMovementState(const Vehicle *v)
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 @@ static byte MapAircraftMovementState(const Vehicle *v)
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 @@ static byte MapAircraftMovementState(const Vehicle *v)
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 @@ static byte MapAircraftMovementAction(const Vehicle *v)
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 @@ static uint32 VehicleGetVariable(const ResolverObject *object, byte variable, by
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;

@ -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!

@ -128,6 +128,10 @@ enum {
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);

@ -180,6 +180,10 @@ static uint FindCatchmentRadius(const Station* st)
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 @@ static const byte _airport_sections_international[] = {
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 @@ int32 CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
// 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 @@ static void TileLoop_Station(TileIndex tile)
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 @@ static void AnimateTile_Station(TileIndex tile)
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 @@ static void AnimateTile_Station(TileIndex tile)
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);

@ -38,7 +38,9 @@ enum {
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 @@ enum {
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 @@ static inline bool IsHangar(TileIndex t)
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)

@ -80,6 +80,21 @@ enum Sprites {
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 @@ enum Sprites {
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

@ -63,12 +63,12 @@ static const DrawTileSeqStruct _station_display_datas_8[] = {
};
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 @@ static const DrawTileSeqStruct _station_display_datas_0114[] = {
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 @@ static const DrawTileSprites _station_display_datas[] = {
{ 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 },
};

Loading…
Cancel
Save