Difference between revisions of "NML:Houses"

From GRFSpecs
Jump to navigationJump to search
(→‎House properties: Add ottd/ttdp compatibility information to watched_cargo_types)
(add some definition lists)
Line 1: Line 1:
{{NMLNavPropVarCB}}
 
 
 
==House properties==
 
==House properties==
   
Line 21: Line 19:
 
|-
 
|-
 
| building_flags
 
| building_flags
  +
| bitmask(HOUSE_FLAG_XXX,...)
 
|
 
|
  +
;HOUSE_FLAG_SIZE_1x1
| HOUSE_FLAG_XX with XX = [SIZE_1x1, SIZE_2x1, SIZE_1x2, SIZE_2x2, NOT_SLOPED, ANIMATE, CHURCH, STADIUM, ONLY_SE, PROTECTED, SYNC_CALLBACK, RANDOM_ANIMATION]
 
  +
;HOUSE_FLAG_SIZE_2x1
  +
;HOUSE_FLAG_SIZE_1x2
  +
;HOUSE_FLAG_SIZE_2x2
  +
;HOUSE_FLAG_NOT_SLOPED
  +
:Can only be built on flat terrain
  +
;HOUSE_FLAG_ANIMATE
  +
:Enable animation
  +
;HOUSE_FLAG_CHURCH
  +
:House is a church
  +
;HOUSE_FLAG_STADIUM
  +
:House is a stadium
  +
;HOUSE_FLAG_ONLY_SE
  +
:Can only be built in the scenario editor
  +
;HOUSE_FLAG_PROTECTED
  +
:Will not be removed by the game
  +
;HOUSE_FLAG_SYNC_CALLBACK
  +
:Callbacks for tiles are synchronised
  +
;HOUSE_FLAG_RANDOM_ANIMATION
  +
:Enable random animation
 
|-
 
|-
 
| population
 
| population
Line 42: Line 60:
 
| cargo_acceptance
 
| cargo_acceptance
 
| 0 ... 1
 
| 0 ... 1
| Like passenger acceptance. Additionally flag can be added which defines one of the cargo type: HOUSE_ACCEPT_GOODS, HOUSE_ACCEPT_FOOD, HOUSE_ACCEPT_FIZZY_DRINKS; FIZZY_DRINKS has in toyland the same meaning as FOOD in other climates.
+
| Like passenger acceptance. Additionally flag can be added which defines one of the cargo type
  +
;HOUSE_ACCEPT_GOODS
  +
;HOUSE_ACCEPT_FOOD
  +
;HOUSE_ACCEPT_FIZZY_DRINKS
  +
:FIZZY_DRINKS has in toyland the same meaning as FOOD in other climates.
 
|-
 
|-
 
| accepted_cargo
 
| accepted_cargo
Line 94: Line 116:
 
| animation_info
 
| animation_info
 
| Array [ANIMATION_XXX, frame-count]
 
| Array [ANIMATION_XXX, frame-count]
  +
|
| XXX = [LOOPING | NON_LOOPING], 1..128 frames
 
  +
Type of animation and its length (1...128 frames):
  +
  +
;ANIMATION_LOOPING
  +
;ANIMATION_NON_LOOPING
 
|-
 
|-
 
| animation_speed
 
| animation_speed
Line 109: Line 135:
 
| array of values from your [[NML:Cargotable|cargo table]]
 
| array of values from your [[NML:Cargotable|cargo table]]
 
| {{ottdp|1.2|2.6|ottdrev=r23072|ttdprev=r1677}}List of cargo types to watch, to be used with the <code style:darkgreen>watched_cargo_accepted</code> callback.
 
| {{ottdp|1.2|2.6|ottdrev=r23072|ttdprev=r1677}}List of cargo types to watch, to be used with the <code style:darkgreen>watched_cargo_accepted</code> callback.
|}
 
 
==House variables==
 
 
House variables are not yet implemented in NML
 
 
==House callbacks==
 
 
{| class="t"
 
! callback
 
! return value
 
! comment
 
|-
 
| default
 
| Sprite layout
 
| Graphics for the house tile
 
|-
 
| random_trigger
 
| N/A
 
|
 
See [[NML:Random switch|random switch]] for more information.
 
|-
 
| 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. <code>extra_callback_info1</code> contains random bits, if enabled in the <code>special_flags</code> property. 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 every 256 ticks. 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. <code>extra_callback_info1</code> contains random bits, if enabled in the <code>building_flags</code> property. Returning a sound effect in the high byte will cause that sound effect to be played.
 
|-
 
| construction_anim
 
| Same as <code>anim_control</code>
 
| Works the same as the <code>anim_control</code> callback, except that it's called when the construction state changes.
 
|-
 
| watched_cargo_accepted
 
| Same as <code>anim_control</code>
 
| Works the same as the <code>anim_control</code> callback, except that it's called when one of the watched cargo types is accepted.
 
|-
 
| 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.
 
|-
 
| cargo_type_accept
 
| type1 + (type2 &lt;&lt; 5) + (type3 &lt;&lt; 10)
 
| Decide the cargo types that this tile accepts. If this callback is not implemented or fails, the values from <code>accepted_cargo</code> are used instead. Bits 0..4: First cargo type. Bits 5..9: Second cargo type. Bits 10..14: Third cargo type.
 
|-
 
| cargo_amount_accept
 
| amt1 + (amt2 &lt;&lt; 4) + (amt3 &lt;&lt; 8)
 
| Acceptance for each cargo amount in 1/8th. If this callback is not implemented or fails, the values from the acceptance properties are used instead. Cargo types are from the <code>cargo_type_accept</code> callback, or the <code>accepted_cargo</code> property if that callback failed. Bits 0..3: Acceptance of first cargo type. Bits 4..7: Acceptance of second cargo type. Bits 8..11: Acceptance of third cargo type.
 
|-
 
| cargo_production
 
| (cargo_type * 256) + amount
 
| Called every 256 ticks. Called multiple times until 0x20FF is returned. The high byte of the result contains a cargo type, the low byte contains the amount of that cargo to produce. <code>extra_callback_info1</code> contains the number of iterations so far, <code>extra_callback_info2</code> contains random bits.
 
|-
 
| foundations
 
| CB_RESULT[_NO]_FOUNDATIONS
 
| Return CB_RESULT_FOUNDATIONS to draw standard foundations (default) or CB_RESULT_NO_FOUNDATIONS to not draw them.
 
|-
 
| autoslope
 
| CB_RESULT[_NO]_AUTOSLOPE
 
| Return CB_RESULT_AUTOSLOPE to allow autoslope (altering the ground below a tile) or CB_RESULT_NO_AUTOSLOPE to disallow it.
 
|-
 
| name
 
| String
 
| Name of the building (when using tile query tool)
 
|-
 
| colour
 
| Palette number
 
|
 
Used to recolour the building. See here [[NML:List of default colour translation palettes|here]] for an overview of default palettes.
 
|-
 
| construction_check
 
| 0 or 1
 
| Return 1 to allow building the house or 0 to disallow.
 
|-
 
| destruction
 
| 0 or 1
 
| Called periodically. Return 0 to keep the building or 1 to destroy it.
 
|-
 
| protection
 
| 0 or 1
 
| Return 0 to allow destruction, or 1 to disallow
 
 
|}
 
|}

Revision as of 11:43, 22 July 2012

House properties

property value range comment
name string for example string(STR_NAME_EIFFEL_TOWER)
substitute 0 ... 109 Number of the default house that replaces this one, if this house is not available for some reason. This property must be set first, before any other properties or graphics. All properties of the old type are copied to your new house.
override 0 ... 109 id of the default house which this house replaces. This will cause your house to be placed instead of the default house. This is ignored, if the default house has already been overridden. You can define this property multiple times
building_flags bitmask(HOUSE_FLAG_XXX,...)
HOUSE_FLAG_SIZE_1x1
HOUSE_FLAG_SIZE_2x1
HOUSE_FLAG_SIZE_1x2
HOUSE_FLAG_SIZE_2x2
HOUSE_FLAG_NOT_SLOPED
Can only be built on flat terrain
HOUSE_FLAG_ANIMATE
Enable animation
HOUSE_FLAG_CHURCH
House is a church
HOUSE_FLAG_STADIUM
House is a stadium
HOUSE_FLAG_ONLY_SE
Can only be built in the scenario editor
HOUSE_FLAG_PROTECTED
Will not be removed by the game
HOUSE_FLAG_SYNC_CALLBACK
Callbacks for tiles are synchronised
HOUSE_FLAG_RANDOM_ANIMATION
Enable random animation
population 0 ... 255 number of inhabitants the building adds to the town, if present
mail_multiplier 0 ... 255
pax_acceptance 0 ... 1 Can be increased in steps of 0.125. A station accepts a cargo, if the combined acceptance of all houses in range is at least 1.
mail_acceptance 0 ... 1
cargo_acceptance 0 ... 1 Like passenger acceptance. Additionally flag can be added which defines one of the cargo type
HOUSE_ACCEPT_GOODS
HOUSE_ACCEPT_FOOD
HOUSE_ACCEPT_FIZZY_DRINKS
FIZZY_DRINKS has in toyland the same meaning as FOOD in other climates.
accepted_cargo up to three cargo labels, e.g. MAIL, PASS, COAL
local_authority_impact 0 ... 65525 amount of happiness increase of the city council, if the building is destroyed
removal_cost_multiplier 0 ... 255
probability 0 ... 16 (float) Probability with respect to the default houses (=1). Mind that these are relative probabilities with respect to all houses defined. If all probabilities are defined as 16, they'll all have the same probability as if they had all a probability of 1.
years_available array of two int [xx, yy] where xx and yy indicate the introduction year and the last year the building can be built
minimum_lifetime 0 ... 255 number of years the building will remain at least
availability_mask

[bitmask(town zones), bitmask(CLIMATE_XXX, ...)]

An array with two bitmasks, the first bitmask is a mask of town zones where this house is available. The second bitmask is a mask of climates combined with the special value ABOVE_SNOWLINE which you need to set for houses available in the arctic climate above the snowline.
Examples:

  • Available in the centre town zone in toyland only: [bitmask(TOWNZONE_CENTRE), bitmask(CLIMATE_TOYLAND)]
  • Available in all town zones in the arctic climate both above and below the snowline: [ALL_TOWNZONES, bitmask(CLIMATE_ARCTIC, ABOVE_SNOWLINE)]
  • Available everywhere except on the town edge: [ALL_TOWNZONES & ~bitmask(TOWNZONE_EDGE), ALL_CLIMATES | bitmask(ABOVE_SNOWLINE)
callback_flags bitmask(HOUSE_CBF_XX)

Do not set this, unless you use old-style callbacks.

random_colours array of 4, each COLOUR_XXX

colour values in an array, refer to the table here for a list of possible values.

refresh_multiplier 0 ... 63 Defines the frequency with which the tile will be re-randomized which has an impact for random animation.
animation_info Array [ANIMATION_XXX, frame-count]

Type of animation and its length (1...128 frames):

ANIMATION_LOOPING
ANIMATION_NON_LOOPING
animation_speed 2 ... 16

Speed of animation, see animation speed table for the meaning of the values.

building_class 0 .. 255 An arbitrary number. You can check for the presence of buildings of the same class when building new buildings or using animation
watched_cargo_types array of values from your cargo table Supported by OpenTTD 1.2 (r23072)1.2 Supported by TTDPatch 2.6 (r1677)2.6List of cargo types to watch, to be used with the watched_cargo_accepted callback.