Callback: Industry location permissibility
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. |
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.