Difference between revisions of "Callback: Industry location permissibility"
(→Industry location permissibility (28): Specify OpenTTD revision) |
(→Industry location permissibility (28): Version tags) |
||
Line 8: | Line 8: | ||
|40+x|| ||Not accessible |
|40+x|| ||Not accessible |
||
|- |
|- |
||
− | |5F|| || |
+ | |5F|| ||{{ottdp|1.1|no|ottdrev=19744}} 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 |
|60+x|| ||Only var. 62 and vars 64..68 can be used |
||
Line 28: | Line 28: | ||
|8D||W||Square of the Euclidean distance between the closest town and the selected position |
|8D||W||Square of the Euclidean distance between the closest town and the selected position |
||
|- |
|- |
||
− | |8F||D||32 random bits |
+ | |8F||D||{{ottdp|0.6|2.6|ottdrev=r11985|ttdprev=r1816}} 32 random bits |
|} |
|} |
||
Unless explicitly noted, distances are Manhattan distance, not Euclidean distance, ie. <tt>|x-x0|+|y-y0|</tt> instead of <tt>sqrt((x-x0)^2+(y-y0)^2)</tt> |
Unless explicitly noted, distances are Manhattan distance, not Euclidean distance, ie. <tt>|x-x0|+|y-y0|</tt> instead of <tt>sqrt((x-x0)^2+(y-y0)^2)</tt> |
||
Line 34: | Line 34: | ||
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. |
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: |
+ | {{ottd|1.1|r20942}} During this callback, variable 18 (extra callback info 2) contains the following values for OpenTTD r20942 and later: |
{| |- |
{| |- |
||
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|| |
+ | |0404||{{ottdp|1.2|no|ottdrev=r22657}} Industry can't be built, display the "...can only be built above the snow-line" error message. |
|- |
|- |
||
− | |0405|| |
+ | |0405||{{ottdp|1.2|no|ottdrev=r22657}} Industry can't be built, display the "...can only be built below the snow-line" error message. |
|- |
|- |
||
− | |0406|| |
+ | |0406||{{ottdp|1.2|no|ottdrev=r22657}} Industry can't be built, display the "...can't build on open sea" error message. |
|- |
|- |
||
− | |0407|| |
+ | |0407||{{ottdp|1.2|no|ottdrev=r22657}} Industry can't be built, display the "...can't build on canal" error message. |
|- |
|- |
||
− | |0408|| |
+ | |0408||{{ottdp|1.2|no|ottdrev=r22657}} Industry can't be built, display the "...can't build on river" error message. |
|} |
|} |
||
⚫ | {{ottdp|0.6|2.6|ttdprev=r1755}} 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. |
||
− | (a) OpenTTD since r22657 |
||
− | |||
⚫ | |||
[[Category:Callbacks]] |
[[Category:Callbacks]] |
Revision as of 18:33, 23 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 | 1.1 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 | 0.6 2.6 32 random bits |
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.
1.1 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:
0.6 2.6 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.