Difference between revisions of "NML:Airports"
(Add note about substitute/override) |
(grf -> airport in tile check) |
||
(14 intermediate revisions by 5 users not shown) | |||
Line 10: | Line 10: | ||
==Airport properties== |
==Airport properties== |
||
− | {| class=" |
+ | {| class="wikitable sortable" |
! name |
! name |
||
! value range |
! value range |
||
! comment |
! comment |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
|- |
|- |
||
| override |
| override |
||
| |
| |
||
| |
| |
||
− | {{ottd|1.1|r19459}} The id of airport to replace / override, see [[AirportTypes]]. |
+ | {{ottd|1.1|r19459}} The id of airport to replace / override, see [[AirportTypes]]. '''This property ''must'' be set first, before any other properties or graphics.''' |
|- |
|- |
||
| layouts |
| layouts |
||
Line 29: | Line 24: | ||
| |
| |
||
{{ottd|1.1|r20377}} |
{{ottd|1.1|r20377}} |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
|- |
|- |
||
| years_available |
| years_available |
||
Line 58: | Line 58: | ||
==Airport tile properties== |
==Airport tile properties== |
||
− | {| class=" |
+ | {| class="wikitable sortable" |
! name |
! name |
||
! value range |
! value range |
||
Line 66: | Line 66: | ||
| |
| |
||
| |
| |
||
− | {{ottd|1.1|r19204}} The id of airport tile to override, see [[AirportTypes]]. |
+ | {{ottd|1.1|r19204}} The id of airport tile to override, see [[AirportTypes]]. '''This property ''must'' be set first, before any other properties or graphics.''' |
|- |
|- |
||
| substitute |
| substitute |
||
Line 79: | Line 79: | ||
|- |
|- |
||
| animation_info |
| animation_info |
||
+ | | Array [ANIMATION_XXX, frame-count] |
||
⚫ | |||
+ | |{{ottd|1.1|r19204}} XXX = [LOOPING <nowiki>|</nowiki> NON_LOOPING], 1..253 frames |
||
⚫ | |||
− | {{ottd|1.1|r19204}} |
||
|- |
|- |
||
| animation_speed |
| animation_speed |
||
Line 94: | Line 93: | ||
|} |
|} |
||
⚫ | |||
+ | A number of variables are shared between airports and stations. These are listed on the [[NML:Stations#Base station variables|stations]] page. |
||
⚫ | |||
{| class="t" |
{| class="t" |
||
Line 107: | Line 107: | ||
{{ottd|1.1|r20364}} Layout number of the airport (index in the layouts array) |
{{ottd|1.1|r20364}} Layout number of the airport (index in the layouts array) |
||
|} |
|} |
||
− | |||
==Airport tile variables== |
==Airport tile variables== |
||
− | {| class=" |
+ | {| class="wikitable sortable" |
! name |
! name |
||
! value range |
! value range |
||
Line 140: | Line 139: | ||
| |
| |
||
| |
| |
||
⚫ | |||
+ | | random_bits_station |
||
+ | | 0..65535 |
||
+ | | 16 random bits, shared between all station parts (rail station parts, airports tiles, ...) |
||
⚫ | |||
+ | | random_bits_tile |
||
+ | | 0..15 |
||
+ | | 4 random bits, specific to this station tile. |
||
|} |
|} |
||
Line 145: | Line 152: | ||
The following variables require a signed x,y offset as parameters. The offset is relative to the current tile. Offset 0,0 means the current tile. |
The following variables require a signed x,y offset as parameters. The offset is relative to the current tile. Offset 0,0 means the current tile. |
||
− | {| class=" |
+ | {| class="wikitable sortable" |
! name |
! name |
||
! value range |
! value range |
||
Line 186: | Line 193: | ||
| nearby_tile_airporttile_id |
| nearby_tile_airporttile_id |
||
| 0x00aa, 0xFFbb, 0xFFFE or 0xFFFF |
| 0x00aa, 0xFFbb, 0xFFFE or 0xFFFF |
||
− | | 0x00aa: The tile is an airport tile that is part of this GRF, the tile id is aa.<br /> 0xFFbb: The tile is an original airport tile with id bb.<br /> 0xFFFE: The tile is an airport tile defined in another GRF.<br /> 0xFFFF: The tile is not an airport tile or it belongs to another |
+ | | 0x00aa: The tile is an airport tile that is part of this GRF, the tile id is aa.<br /> 0xFFbb: The tile is an original airport tile with id bb.<br /> 0xFFFE: The tile is an airport tile defined in another GRF.<br /> 0xFFFF: The tile is not an airport tile or it belongs to another airport. |
|} |
|} |
||
− | |||
==Airport callbacks== |
==Airport callbacks== |
||
− | {| class=" |
+ | {| class="wikitable sortable" |
! callback |
! callback |
||
! return value |
! return value |
||
Line 215: | Line 221: | ||
==Airport tile callbacks== |
==Airport tile callbacks== |
||
− | {| class=" |
+ | {| class="wikitable sortable" |
! callback |
! callback |
||
! return value |
! return value |
||
Line 226: | Line 232: | ||
| anim_next_frame |
| anim_next_frame |
||
| Next animation frame or CB_RESULT_XXX |
| Next animation frame or CB_RESULT_XXX |
||
− | | Called for every animation frame, returns the next frame to display. Alternatively, return CB_RESULT_NEXT_FRAME or CB_RESULT_STOP_ANIMATION to show the next frame or stop animation, respectively |
+ | | Called for every animation frame, returns the next frame to display. Alternatively, return CB_RESULT_NEXT_FRAME or CB_RESULT_STOP_ANIMATION to show the next frame or stop animation, respectively. Returning a sound effect in the high byte will cause that sound effect to be played. |
+ | * <code style="color:darkgreen">extra_callback_info1</code>: 32 random bits. |
||
|- |
|- |
||
| anim_control |
| anim_control |
||
| Next animation frame or CB_RESULT_XXX |
| Next animation frame or CB_RESULT_XXX |
||
| |
| |
||
− | Called whenever an animation trigger happens. Return the animation frame to show, or CB_RESULT_XXX with XXX = [CB_RESULT_START_ANIMATION <nowiki>|</nowiki> STOP_ANIMATION <nowiki>|</nowiki> DO_NOTHING] to respectively start the animation in its current frame, stop the animation or do nothing |
+ | Called whenever an animation trigger happens. Return the animation frame to show, or CB_RESULT_XXX with XXX = [CB_RESULT_START_ANIMATION <nowiki>|</nowiki> STOP_ANIMATION <nowiki>|</nowiki> DO_NOTHING] to respectively start the animation in its current frame, stop the animation or do nothing. Returning a sound effect in the high byte will cause that sound effect to be played. |
+ | * <code style="color:darkgreen">extra_callback_info1</code>: 32 random bits. |
||
+ | * <code style="color:darkgreen">getbits(extra_callback_info2, 0, 8)</code>: Reason for callback trigger, see the [[#Animation triggers|table]] below. Note that you need to enable the wanted triggers in the <code style="color:darkgreen">animation_triggers</code> property. |
||
|- |
|- |
||
| anim_speed |
| anim_speed |
||
Line 245: | Line 254: | ||
===Animation triggers=== |
===Animation triggers=== |
||
− | {| class=" |
+ | {| class="wikitable sortable" |
! Animation trigger |
! Animation trigger |
||
! Description |
! Description |
||
Line 263: | Line 272: | ||
| ANIM_TRIGGER_APT_250_TICKS |
| ANIM_TRIGGER_APT_250_TICKS |
||
| Every 250 ticks (all tiles at the same time) |
| Every 250 ticks (all tiles at the same time) |
||
+ | |- |
||
+ | | ANIM_TRIGGER_APT_AIRPLANE_LANDS |
||
+ | | {{ottd|1.9}} Triggered when an airplane (not a helicopter!) lands at airport (single tile only) |
||
|} |
|} |
Latest revision as of 01:34, 24 September 2023
Vehicles, Stations, Canals, Bridges, Towns, Houses, Industries (Tiles), Cargos, Airports+Tiles, Objects, Railtypes, Roadtypes, Tramtypes, Terrain
- common props | vars | CBs
- train | roadveh | ship | aircr props
- common variables
- industry props | vars | CBs
- tile props | vars | CBs
- airport props | vars | CBs
- tile props | vars | CBs
Airports and airport tiles can only be defined in OpenTTD 1.1 or later.
Airport (tile) IDs
Airport and airport tile IDs are local to the NewGRF, you are free to choose any ID in the 0..255-range. For airport tiles, you should start your item definition with the 'substitute'-property, which allocates a new airport tile. The value of this property should be the ID of a default airport tile, which will be used instead of your item if it is not available for whatever reason (for example, missing NewGRF).
Furthermore, you can set the 'override'-property, which will cause the existing airport tile to be replaced with your item. For airports, there only is an 'override'-property, which acts as a combined substitute and override.
Airport properties
name | value range | comment |
---|---|---|
override |
1.1 The id of airport to replace / override, see AirportTypes. This property must be set first, before any other properties or graphics. | |
layouts | list of layouts | |
name | string | |
years_available | [start year, last year] |
1.1 List of the availablility years: first and last year it can be built |
ttd_airport-type | 0 ... 3 | |
catchment_area |
1.1 Catchment area of the airport in tiles around its perimeter | |
noise_level | ||
maintenance_cost |
Airport tile properties
name | value range | comment |
---|---|---|
override |
1.1 The id of airport tile to override, see AirportTypes. This property must be set first, before any other properties or graphics. | |
substitute | ||
callback_flags | bitmask |
1.1 Do not set this, unless you use old-style callbacks. |
animation_info | Array [ANIMATION_XXX, frame-count] | 1.1 XXX = [LOOPING | NON_LOOPING], 1..253 frames |
animation_speed |
1.1 See speed settings | |
animation_triggers | bitmask(ANIM_TRIGGER_APT_XXX, ... ) |
1.1 Bitmask of triggers that will trigger the |
Airport variables
A number of variables are shared between airports and stations. These are listed on the stations page.
name | value range | comment |
---|---|---|
layout | 0 .. (number of layouts - 1) |
1.1 Layout number of the airport (index in the layouts array) |
Airport tile variables
name | value range | comment |
---|---|---|
terrain_type | ||
town_radius_group | ||
relative_x | 0..255 | X-coordinate (top right -> bottom left) of the tile relative to the northernmost tile. |
relative_y | 0..255 | Y-coordinate (top left -> bottom right) of the tile relative to the northernmost tile. |
relative_pos | 0xYYXX |
A combination of relative_x and relative_y in the format 0xYYXX. Useful if you want to check for a single position. The builtin function relative_coord(x, y) may be useful when making comparisons. |
animation_frame | ||
random_bits_station | 0..65535 | 16 random bits, shared between all station parts (rail station parts, airports tiles, ...) |
random_bits_tile | 0..15 | 4 random bits, specific to this station tile. |
The following variables require a signed x,y offset as parameters. The offset is relative to the current tile. Offset 0,0 means the current tile.
name | value range | comment |
---|---|---|
nearby_tile_slope | SLOPE_XXX |
See tile slopes for an overview of possible values |
nearby_tile_is_same_airport | 1 if the tile is part of the same airport, 0 otherwise | |
nearby_tile_is_water | 1 if the tile is water, 0 otherwise | |
nearby_tile_terrain_type | TILETYPE_XX | TILETYPE_NORMAL, TILETYPE_DESERT, TILETYPE_RAIN_FOREST, TILETYPE_SNOW |
nearby_tile_water_class | WATER_CLASS_XXX | XXX = [NONE | SEA | CANAL | RIVER] Note that tiles for which nearby_tile_is_water is 0 may still have a water class, e.g. industry tiles with water beneath them.
|
nearby_tile_height | 0..120 | The height of the lowest corner of the given tile. |
nearby_tile_class | ||
nearby_tile_animation_frame | 0..255 | Animation frame of the given tile |
nearby_tile_airporttile_id | 0x00aa, 0xFFbb, 0xFFFE or 0xFFFF | 0x00aa: The tile is an airport tile that is part of this GRF, the tile id is aa. 0xFFbb: The tile is an original airport tile with id bb. 0xFFFE: The tile is an airport tile defined in another GRF. 0xFFFF: The tile is not an airport tile or it belongs to another airport. |
Airport callbacks
callback | return value | comment |
---|---|---|
default | Sprite set (with 1 sprite) | Preview graphics to use in the build menu. One sprite per layout may be given, use the layout to distinguish between layouts.
|
additional_text | String | Additional text to show in the buy menu. String may differ per layout, use the layout variable for this.
|
layout_name | String | Name of the airport layout in the variable layout
|
Note that, although the airport isn't built yet, the layout
variable is always available and set to the layout the user has selected in the GUI.
Airport tile callbacks
callback | return value | comment |
---|---|---|
default | Sprite layout | Graphics for an airport tile |
anim_next_frame | Next animation frame or CB_RESULT_XXX | Called for every animation frame, returns the next frame to display. Alternatively, return CB_RESULT_NEXT_FRAME or CB_RESULT_STOP_ANIMATION to show the next frame or stop animation, respectively. Returning a sound effect in the high byte will cause that sound effect to be played.
|
anim_control | Next animation frame or CB_RESULT_XXX |
Called whenever an animation trigger happens. Return the animation frame to show, or CB_RESULT_XXX with XXX = [CB_RESULT_START_ANIMATION | STOP_ANIMATION | DO_NOTHING] to respectively start the animation in its current frame, stop the animation or do nothing. Returning a sound effect in the high byte will cause that sound effect to be played.
|
anim_speed | 0 .. 16 | Decide the time an animation frame should last. Return value is interpreted as (num_ticks = 2^anim_speed), which each tick lasting 30 ms. Avoid using this callback if possible, since it has to be called each tick for every animated tile. This can be used to create animation frames that last between 30 ms and 33 minutes. |
foundations | CB_RESULT[_NO]_FOUNDATIONS | Return CB_RESULT_FOUNDATIONS to draw standard foundations (default) or CB_RESULT_NO_FOUNDATIONS to not draw them. |