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 | Version | Meaning |
---|---|---|---|
40+x | ![]() ![]() |
Not accessible | |
5F | ![]() ![]() |
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
|
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 |
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-14
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.
15
The contents of registers 100h..10Fh are copied onto the text reference stack.