Difference between revisions of "Callback: Industry location permissibility"

From GRFSpecs
Jump to navigationJump to search
(→‎Industry location permissibility (28): More predefined error messages)
(→‎Industry location permissibility (28): Specify OpenTTD revision)
Line 63: Line 63:
 
|0403||Industry can't be built, display the "...can only be built in desert areas" error message.
 
|0403||Industry can't be built, display the "...can only be built in desert areas" error message.
 
|-
 
|-
|0404||Industry can't be built, display the "...can only be built above the snow-line" error message.
+
|0404||(a) Industry can't be built, display the "...can only be built above the snow-line" error message.
 
|-
 
|-
|0405||Industry can't be built, display the "...can only be built below the snow-line" error message.
+
|0405||(a) Industry can't be built, display the "...can only be built below the snow-line" error message.
 
|-
 
|-
|0406||Industry can't be built, display the "...can't build on open sea" error message.
+
|0406||(a) Industry can't be built, display the "...can't build on open sea" error message.
 
|-
 
|-
|0407||Industry can't be built, display the "...can't build on canal" error message.
+
|0407||(a) Industry can't be built, display the "...can't build on canal" error message.
 
|-
 
|-
|0408||Industry can't be built, display the "...can't build on river" error message.
+
|0408||(a) Industry can't be built, display the "...can't build on river" error message.
 
|}
 
|}
  +
  +
(a) OpenTTD since r22657
   
 
Since TTDPatch r1755, you can use the text reference stack for your error messages, similarly to callback 3A. The only difference is that only 4 registers are copied instead of 6 because error messages support 20 bytes of reference stack only, and two of those bytes may be used by TTD.
 
Since TTDPatch r1755, you can use the text reference stack for your error messages, similarly to callback 3A. The only difference is that only 4 registers are copied instead of 6 because error messages support 20 bytes of reference stack only, and two of those bytes may be used by TTD.

Revision as of 16:42, 11 July 2011

Industry location permissibility (28)

Called to decide if the industry can be built on a given spot. Since the industry isn't built yet, you can only use a small subset of the data: you can access the data of the nearest town via action 2/type 82 without any problems, but action 2/type 81 will access different variables than it would normally access:

Variable Size Meaning
40+x Not accessible
5F Since OpenTTD r19744: Random bits the industry starts with after construction. Accessible via RandomAction2 as well.
60+x Only var. 62 and vars 64..68 can be used
80 W Coordinates of the selected position
86 B Number of the selected layout, according to property 0A
87 B Ground type of the selected spot (see canal variable 81 for details)
88 B Town zone of the selected spot (see house variable 42 for details)
89 B Distance between the closest town and the selected position.
8A B Height of the lowest corner of the tile (between 00h and 80h, one land height unit equals 8 units)
8B W Distance to the closest water tile if property 1A bit 2 is clear (built on land); distance to the closest empty dry land tile if property 1A bit 2 is clear (built on water)
8D W Square of the Euclidean distance between the closest town and the selected position
8F D 32 random bits (since r1816 and r11985)

Unless explicitly noted, distances are Manhattan distance, not Euclidean distance, ie. |x-x0|+|y-y0| instead of sqrt((x-x0)^2+(y-y0)^2)

Variable 8B will always be below 80h if prop 1A bit 2 is clear. If bit 2 is set, 8B will be set to its max of 200h in the pathological case of an all-water map.

During this callback, variable 18 (extra callback info 2) contains the following values for OpenTTD r20942 and later:

Variable 18 Meaning
0 TTD is generating a map.
1 TTD decided to build a new random industry during regular gameplay.
2 The user tries to build your industry via the new industry window.
3 The user tries to prospect for your industry via the new industry window.

This callback must return a 15-bit value, which is interpreted as follows:

Value Meaning
0000-03ff Industry can't be built, display the misc. GRF text Dxxx as error message
0400 Industry can be built
0401 Industry can't be built, display the default "site unsuitable" error message.
0402 Industry can't be built, display the "...can only be built in rainforest areas" error message.
0403 Industry can't be built, display the "...can only be built in desert areas" error message.
0404 (a) Industry can't be built, display the "...can only be built above the snow-line" error message.
0405 (a) Industry can't be built, display the "...can only be built below the snow-line" error message.
0406 (a) Industry can't be built, display the "...can't build on open sea" error message.
0407 (a) Industry can't be built, display the "...can't build on canal" error message.
0408 (a) Industry can't be built, display the "...can't build on river" error message.

(a) OpenTTD since r22657

Since TTDPatch r1755, you can use the text reference stack for your error messages, similarly to callback 3A. The only difference is that only 4 registers are copied instead of 6 because error messages support 20 bytes of reference stack only, and two of those bytes may be used by TTD.