Disable treespawning on mapgen
[minetest_hades.git] / mods / plantlife / API.txt
blob8be6690307e552c0c596f150662effd3a6bfacbc
1 This document describes the Plantlife API.
3 Last revision: 2013-01-30
6 =========
7 Functions
8 =========
10 There are three main functions defined by the main "plants_lib" mod:
12 spawn_on_surfaces()
13 register_generate_plant()
14 grow_plants()
16 There are also several internal, helper functions that can be called if so
17 desired, but they are not really intended for use by other mods and may change
18 at any time.  They are briefly described below these main functions, but see
19 init.lua for details.
21 All functions in plants lib are declared locally to avoid namespace collisions
22 with other mods.  They are accessible via the "plantslib" method, e.g.
23 plantslib:spawn_on_surfaces() and so forth.
25 =====
26 spawn_on_surfaces(biome)
27 spawn_on_surfaces(sdelay, splant, sradius, schance, ssurface, savoid)
29 This first function is an ABM-based spawner function originally created as
30 part of Ironzorg's flowers mod.  It has since been largely extended and
31 expanded.  There are two ways to call this function:  You can either pass it 
32 several individual string and number parameters to use the legacy interface,
33 or you can pass a single biome definition as a table, with all of your options
34 spelled out nicely.  This is the preferred method.
36 When used with the legacy interface, you must specify the parameters exactly
37 in order, with the first five being mandatory (even if some are set to nil),
38 and the last one being optional:
40 sdelay:         The value passed to the ABM's interval parameter, in seconds.
41 splant:         The node name of the item to spawn (e.g.
42                 "flowers:flower_rose").  A plant will of course only be
43                 spawned if the node about to be replaced is air.
44 sradius:        Don't spawn within this many nodes of the avoid items
45                 mentioned below.  If set to nil, this check is skipped.
46 schance:        The value passed to the ABM's chance parameter, normally in
47                 the 10-100 range (1-in-X chance of operating on a given node)
48 ssurface:       String with the name of the node on which to spawn the plant
49                 in question, such as "default:sand" or
50                 "default:dirt_with_grass".  It is not recommended to put air,
51                 stone, or plain dirt here if you can use some other node, as
52                 doing so will cause the engine to process potentially large
53                 numbers of such nodes when deciding when to execute the ABM
54                 and where it should operate.
55 savoid:         Table with a list of groups and/or node names to avoid when
56                 spawning the plant, such as {"group:flowers", "default:tree"}.
58 When passed a table as the argument, and thus using the modern calling method,
59 you must pass a number of arguments in the form of an ordinary keyed-value
60 table.  Below is a list of everything supported by this function:
62 biome = {
63         spawn_plants = something, -- [*] String or table; see below.
64         spawn_delay = number,   -- same as sdelay, above.
65         spawn_chance = number,  -- same as schance, above.
66         spawn_surfaces = {table}, -- List of node names on which the plants
67                                 -- should be spawned.  As with the single-
68                                 -- node "ssurface" option in the legacy API,
69                                 -- you should not put stone, air, etc. here.
71         ---- From here down are a number of optional parameters.  You will
72         ---- most likely want to use at least some of these to limit how and
73         ---- where your objects are spawned.
75         avoid_nodes = {table},  -- same meaning as savoid, above
76         avoid_radius = num,     -- same as sradius
77         seed_diff = num,        -- The Perlin seed difference value passed to
78                                 -- the minetest.env:get_perlin() function.
79                                 -- Used along with the global Perlin controls
80                                 -- below to create the "biome" in which the
81                                 -- plants will spawn.  Defaults to 0 if not
82                                 -- provided.
83         light_min = num,        -- Minimum amount of light necessary to make a
84                                 -- plant spawn.  Defaults to 0.
85         light_max = num,        -- Maximum amount of light needed to spawn. 
86                                 -- Defaults to the engine's MAX_LIGHT value of
87                                 -- 14.
88         neighbors = {table},    -- List of neighboring nodes that need to be
89                                 -- immediately next to the node the plant is
90                                 -- about to spawn on. Can also be a string
91                                 -- with a single node name.  It is both passed
92                                 -- to the ABM as the "neighbors" parameter,
93                                 -- and is used to manually check the 
94                                 -- adjacent nodes.  It only takes one of these
95                                 -- for the spawn routine to mark the target as
96                                 -- spawnable.  Defaults to nil (ignored).
97         ncount = num,           -- There must be at least this many of the
98                                 -- above neighbors in the eight spaces
99                                 -- immediately surrounding the node the plant
100                                 -- is about to spawn on for it to happen.  If
101                                 -- not provided, this check is disabled.
102         facedir = num,          -- The value passed to the param2 variable
103                                 -- when adding the node to the map.  Defaults
104                                 -- to 0.  Be sure that the value you use here
105                                 -- (and the range thereof) is appropriate for
106                                 -- the type of node you're spawning.
107         random_facedir = {table}, -- If set, the table should contain two
108                                 -- values. If they're both provided, the
109                                 -- spawned plant will be given a random
110                                 -- facedir value in the range specified by
111                                 -- these two numbers.  Overrides the facedir
112                                 -- parameter above, if it exists.  Use {0,3}
113                                 -- if you want the full range for wallmounted
114                                 -- nodes, or {2,5} for most everything else,
115                                 -- or any other pair of numbers in the 0 to 5 
116                                 -- range, as appropriate for the node you want
117                                 -- to spawn.
118         verticals_list = {table}, -- List of nodes that should be considered
119                                 -- to be natural walls.
120         alt_wallnode = "string", -- If specified, this node will be 
121                                 -- substituted in place of the plant(s)
122                                 -- defined by spawn_plants above, if the spawn
123                                 -- target has one or more adjacent walls.  In
124                                 -- such a case, the two above facedir
125                                 -- parameters will be ignored.
126         depth_max = num,        -- If the object spawns on top of a water
127                                 -- source, the water must be at most this
128                                 -- deep.  Defaults to 1 node.
129         min_elevation = num,    -- Surface must be at this altitude or higher
130                                 -- to spawn at all.  Defaults to -31000...
131         max_elevation = num,    -- ...but must be no higher than this
132                                 -- altitude.  Defaults to +31000.
133         near_nodes = {table},   -- List of nodes that must be somewhere in the
134                                 -- vicinity in order for the plant to spawn.
135                                 -- Can also be a string with a single node
136                                 -- name.  If not provided, this check is
137                                 -- disabled.
138         near_nodes_size = num,  -- How large of an area to check for the above
139                                 -- node.  Specifically, this checks a flat
140                                 -- horizontal area centered on the node to be
141                                 -- spawned on.  Defaults to 0, but is ignored
142                                 -- if the above near_nodes value is not set.
143         near_nodes_vertical = num, -- Used with the size value above, this
144                                 -- extends the vertical range of the near 
145                                 -- nodes search.  Basically, this turns the
146                                 -- flat region described above into a cuboid
147                                 -- region.  The area to be checked will extend
148                                 -- this high AND this low above/below the
149                                 -- target node, centered thereon.  Defaults to
150                                 -- 1 (check only the layer above, the layer
151                                 -- at, and the layer below the target node),
152                                 -- but is ignored if near_nodes is not set.
153         near_nodes_count = num, -- How many of the above nodes must be within
154                                 -- that radius. Defaults to 1 but is ignored
155                                 -- if near_nodes isn't set.  Bear in mind that
156                                 -- the total area to be checked is equal to
157                                 -- (near_nodes_size^2)*near_nodes_vertical*2.
158                                 -- so for example, if size is 10 and vertical
159                                 -- is 4 then the area is (10^2)*8 = 800 nodes
160                                 -- in size, so you'll want to make sure you
161                                 -- specify a value appropriate for the amount
162                                 -- in question.
163         air_size = num,         -- How large of an area to check for air
164                                 -- above and around the target.  If omitted,
165                                 -- only the space above the target is checked.
166                                 -- This does not check for air at the sides or
167                                 -- below the target.
168         air_count = num,        -- How many of the surrounding nodes need to
169                                 -- be air for the above check to return true.
170                                 -- If omitted, only the space above the target
171                                 -- is checked.
172         plantlife_limit = num,  -- The value compared against the generic
173                                 -- "plants can grow here" Perlin noise layer.
174                                 -- Smaller numbers result in more abundant
175                                 -- plants.  Range of -1 to +1, with values in 
176                                 -- the range of about 0 to 0.5 being most
177                                 -- useful.  Defaults to 0.1.
178         temp_min = num,         -- Minimum temperature needed for the desired
179                                 -- object to spawn.  This is a 2d Perlin
180                                 -- value, which has an inverted range of +1 to
181                                 -- -1.  Larger values represent *colder*
182                                 -- temperatures, so this value is actually the
183                                 -- upper end of the desired Perlin range.  See
184                                 -- the temperature map section at the bottom
185                                 -- of this document for details on how these
186                                 -- values work.  Defaults to +1 (unlimited
187                                 -- coldness).
188         temp_max = num,         -- Maximum temperature/lower end of the Perlin
189                                 -- range.  Defaults to -1 (unlimited heat).
190         humidity_min = num,     -- Minimum humidity for the plant to spawn in.
191                                 -- Like the temperature map, this is a Perlin
192                                 -- value where lower numbers mean more
193                                 -- humidity in the area.  Defaults to +1 (0%
194                                 -- relative humidity).
195         humidity_max = num,     -- Maximum humidity for the plant to spawn at.
196                                 -- Defaults to -1 (100% humidity).
197         spawn_on_side = bool,   -- Set this to true to spawn the node on one
198                                 -- side of the target node rather than the
199                                 -- top.  The code will search for an airspace
200                                 -- to the side of the target, then spawn the
201                                 -- plant at the first one found.  The above
202                                 -- facedir and random_facedir parameters are
203                                 -- ignored in this case.  If the above
204                                 -- parameters for selecting generic wall nodes
205                                 -- are provided, this option is ignored.
206                                 -- Important note: the facedir values assigned
207                                 -- by this option only make sense with
208                                 -- wallmounted nodes (nodes which don't use
209                                 -- facedir won't be affected).
210         spawn_on_bottom = bool, -- If set to true, spawn the object below the
211                                 -- target node instead of above it.  The above
212                                 -- spawn_on_side variable takes precedence
213                                 -- over this one if both happen to be true.
214                                 -- When using this option with the random
215                                 -- facedir function above, the values given to
216                                 -- the facedir parameter are for regular
217                                 -- nodes, not wallmounted.
218         spawn_replace_node = bool, -- If set to true, the target node itself
219                                 -- is replaced by the spawned object.
220                                 -- Overrides the spawn_on_bottom and
221                                 -- spawn_on_side settings.
224 [*] spawn_plants must be either a table or a string.  If it's a table, the
225 values therein are treated as a list of nodenames to pick from randomly on 
226 each application of the ABM code. The more nodes you can pack into this
227 parameter to avoid making too many calls to this function, the lower the CPU
228 load will likely be.
230 You can also specify a string containing the name of a function to execute.
231 In this case, the function will be passed a single position parameter
232 indicating where the function should place the desired object, and the checks
233 for spawning on top vs. sides vs. bottom vs. replacing the target node will be
234 skipped.
236 By default, if a biome node, size, and count are not defined, the biome
237 checking is disabled.  Same holds true for the nneighbors bit above that.
240 =====
241 plantslib:register_generate_plant(biome, node_or_function_or_treedef)
243 To register an object to be spawned at mapgen time rather than via an ABM,
244 call this function with two parameters:  a table with your object's biome
245 information, and a string or table describing what to do if the engine finds a
246 suitable node (see below).
248 The biome table contains quite a number of options, though there are fewer 
249 here than are available in the ABM-based spawner, as some stuff doesn't make
250 sense at map-generation time.
252 biome = {
253         surface = something,    -- What node(s).  May be a string such as
254                                 -- "default:dirt_with_grass" or a table with
255                                 -- multiple such entries.
257         ---- Everything else is optional, but you'll definitely want to use
258         ---- some of these other fields to limit where and under what
259         ---- conditions the objects are spawned.
260         
261         below_nodes = {table},  -- List of nodes that must be below the target
262                                 -- node.  Useful in snow biomes to keep
263                                 -- objects from spawning in snow that's on the
264                                 -- wrong surface for that object.
265         avoid_nodes = {table},  -- List of nodes or groups to avoid when
266                                 -- spawning.
267         avoid_radius = num,     -- how much distance to leave between the
268                                 -- object to be added and the objects to be
269                                 -- avoided.  If this or the avoid_nodes value
270                                 -- is nil or omitted, this check is skipped.
271                                 -- Avoid using excessively large radii or you
272                                 -- will slow down the map generator.
273         rarity = num,           -- how rare should this object be in its
274                                 -- biome? Larger values make objects more
275                                 -- rare, via:  math.random(1,100) > this
276         max_count = num,        -- The absolute maximum number of your object
277                                 -- that should be allowed to spawn in a 5x5x5
278                                 -- mapblock area (80x80x80 nodes).  Defaults
279                                 -- to 5, but be sure you set this to some 
280                                 -- reasonable value depending on your object
281                                 -- and its size if 5 is insufficient.
282         seed_diff = num,        -- perlin seed-diff value.  Defaults to 0, 
283                                 -- which causes the function to inherit the
284                                 -- global value of 329.
285         neighbors = {table},    -- What ground nodes must be right next to and
286                                 -- at the same elevation as the node to be
287                                 -- spawned on.
288         ncount = num,           -- at least this many of the above nodes must
289                                 -- be next to the node to spawn on.  Any value
290                                 -- greater than 8 will probably cause the code
291                                 -- to never spawn anything.  Defaults to 0.
292         depth = num,            -- how deep/thick of a layer the spawned-on
293                                 -- node must be.  Typically used for water.
294         min_elevation = num,    -- minimum elevation in meters/nodes.
295                                 -- Defaults to -31000 (unlimited).
296         max_elevation = num,    -- maximum elevation.  Defaults to +31000
297                                 -- (unlimited).
298         near_nodes = {table},   -- what nodes must be in the general vicinity
299                                 -- of the object being spawned.
300         near_nodes_size = num,  -- how wide of a search area to look for 
301                                 -- the nodes in that list.
302         near_nodes_vertical = num, -- How high/low of an area to search from
303                                 -- the target node.
304         near_nodes_count = num, -- at least this many of those nodes must be
305                                 -- in the area.
306         plantlife_limit = num,  -- The value compared against the generic
307                                 -- "plants can grow here" Perlin noise layer.
308                                 -- Smaller numbers result in more abundant
309                                 -- plants.  Range of -1 to +1, with values in 
310                                 -- the range of about 0 to 0.5 being most
311                                 -- useful.  Defaults to 0.1.
312         temp_min = num,         -- coldest allowable temperature for a plant
313                                 -- to spawn (that is, the highest Perlin
314                                 -- temperature map value).
315         temp_max = num,         -- warmest allowable temperature to spawn a
316                                 -- plant (lowest Perlin temperature value).
317         verticals_list = {table}, -- Same as with the spawn_on_surfaces
318                                 -- function.
319         check_air = bool,       -- Flag to tell the mapgen code to check for
320                                 -- air above the spawn target.  Defaults to
321                                 -- true if not explicitly set to false.
322         delete_above = bool,    -- Flag to tell the mapgen code to delete the
323                                 -- two nodes directly above the spawn target
324                                 -- just before adding the plant or tree.
325                                 -- Useful when generating in snow biomes.
326                                 -- Defaults to false.
327         delete_above_surround = bool, -- Flag to tell the mapgen code to also
328                                 -- delete the four nodes surrounding the above
329                                 -- space, and the four nodes above those,
330                                 -- resulting in a two-node-deep cross-shaped
331                                 -- empty region above the spawn target.
332                                 -- Useful when adding trees to snow biomes.
333                                 -- Defaults to false.
334         spawn_replace_node = bool -- same as with the ABM spawner.
337 Regarding node_or_function_or_treedef, this must either be table with an 
338 L-Systems tree definition, or a string with a node or function name.
340 If you specified a string, the code will attempt to determine, as needed, 
341 whether that string specifies a node name.  If it does, that node will be
342 placed on top of the target position directly.
344 If it wasn't a node, the code will assume you meant to specify a function
345 name, in which case  that function will be passed a single position parameter
346 (in the usual table format), indicating where the named function should place
347 the object.  It is called in the form of "somefunction(pos)", and behaves much
348 like a typical callback.
350 If you specified a table, the code assumes this table contains an L-Systems
351 tree definition, then that definition will be passed directly to the
352 spawn_tree() function along with the position to spawn the tree on.
355 =====
356 plantslib:grow_plants(options)
358 The third function, grow_plants() is used to turn the spawned nodes above
359 into something else over time.  This function has no return value, and accepts
360 a biome definition table as the only parameter.  These are defined like so:
362 options = {
363         grow_plant = "string",  -- Name of the node to be grown into something
364                                 -- else.  This value is passed to the ABM as
365                                 -- the "nodenames" parameter, so it is the
366                                 -- plants themselves that are the ABM trigger,
367                                 -- rather than the ground they spawned on.  A
368                                 -- plant will only grow if the node above it
369                                 -- is air.  Can also be a table, but note that
370                                 -- all nodes referenced therein will be grown
371                                 -- into the same object.
372         grow_delay = num,       -- Passed as the ABM "interval" parameter, as
373                                 -- with spawning.
374         grow_chance = num,      -- Passed as the ABM "chance" parameter.
375         grow_result = "string", -- Name of the node into which the grow_plant
376                                 -- node(s) should transform when the ABM
377                                 -- executes.
379         ---- Everything from here down is optional.
381         dry_early_node = "string", -- This value is ignored except for jungle
382                                 -- grass (a corner case needed by that mod),
383                                 -- where it indicates which node the grass
384                                 -- must be on in order for it to turn from
385                                 -- the short size to "default:dry_shrub"
386                                 -- instead of the medium size.
387         grow_nodes = {table},   -- One of these nodes must be under the plant
388                                 -- in order for it to grow at all.  Normally
389                                 -- this should be the same as the list of 
390                                 -- surfaces passed to the spawning ABM as the
391                                 -- "nodenames" parameter.  This is so that the
392                                 -- plant can be manually placed on something
393                                 -- like a flower pot or something without it
394                                 -- growing and eventually dieing.  Defaults to
395                                 -- "default:dirt_with_grass".
396         facedir = num,          -- Same as with spawning a plant.
397         need_wall = bool,       -- Set this to true if you the plant needs to
398                                 -- grow against a wall.  Defaults to false.
399         verticals_list = {table}, -- List of nodes that should be considered
400                                 -- to be wall surfaces when growing the plant
401                                 -- vertically.  If not provided, the walls
402                                 -- check is skipped.
403         grow_vertically = bool, -- Set this to true if the plant needs to grow
404                                 -- vertically, as in climbing poison ivy.
405                                 -- Defaults to false.
406         height_limit = num,     -- Set this to limit how tall the desired node
407                                 -- can grow.  The mod will search straight
408                                 -- down from the position being spawned at to
409                                 -- find a ground node, set via the parameter
410                                 -- below. Defaults to 5 nodes.
411         ground_nodes = {table}, -- What nodes should be treated as "the
412                                 -- ground" below a vertically-growing plant.
413                                 -- Usually this should be the same as the
414                                 -- grow_nodes table, but might also include,
415                                 -- for example, water or some other
416                                 -- surrounding material.  Defaults to
417                                 -- "default:dirt_with_grass".
418         grow_function = something, -- [*] see below.
419         seed_diff = num,        -- [*] see below.
422 [*] grow_function can take one of three possible settings:  it can be nil (or
423     not provided), a string, or a table.
425 If it is not provided or it's set to nil, all of the regular growing code is
426 executed normally, the value of seed_diff, if any, is ignored, and the node to
427 be placed is assumed to be specified in the grow_result variable.
429 If this value is set to a simple string, this is treated as the name of the
430 function to use to grow the plant.  In this case, all of the usual growing
431 code is executeed, but then instead of a plant being simply added to the
432 world, grow_result is ignored and the named function is executed and passed a
433 few parmeters in the following general form: 
435         somefunction(pos, perlin1, perlin2)
437 These values represent the current position (the usual table), the Perlin
438 noise value for that spot in the generic "plants can grow here" map for the
439 seed_diff value above, the Perlin value for that same spot from the
440 temperature map, and the detected neighboring wall face, if there was one (or
441 nil if not).  If seed_diff is not provided, it defaults to 0.
443 If this variable is instead set to a table, it is treated an an L-Systems tree
444 definition.  All of the growing code is executed in the usual manner, then the
445 tree described by that definition is spawned at the current position instead,
446 and grow_result is ignored.
449 =====
450 find_adjacent_wall(pos, verticals)
452 Of the few helper functions, this one expects a position parameter and a table
453 with the list of nodes that should be considered as walls.  The code will
454 search around the given position for a neighboring wall, returning the first
455 one it finds as a facedir value, or nil if there are no adjacent walls.
458 =====
459 is_node_loaded(pos)
461 This acts as a wrapper for the minetest.env:get_node_or_nil(node_pos)
462 function and accepts a single position parameter.  Returns true if the node in
463 question is already loaded, or false if not.
466 =====
467 dbg(string)
469 This is a simple debug output function which takes one string parameter.  It
470 just checks if DEBUG is true and outputs the phrase "[Plantlife] " followed by
471 the supplied string, via the print() function, if so.
473 =====
474 plantslib:generate_tree(pos, treemodel)
475 plantslib:grow_tree(pos, treemodel)
477 In the case of the growing code and the mapgen-based tree generator code, 
478 generating a tree is done via the above two calls, which in turn immediately
479 call the usual spawn_tree() functions.  This rerouting exists as a way for
480 other mods to hook into plants_lib's tree-growing functions in general,
481 perhaps to execute something extra whenever a tree is spawned.
483 plantslib:generate_tree(pos, treemodel) is called any time a
484 tree is spawned at map generation time.  'pos' is the position of the block on
485 which the tree is to be placed.  'treemodel' is the standard L-Systems tree
486 definition table expected by the spawn_tree() function.  Refer to the 'trunk'
487 field in that table to derive the name of the tree being spawned.
489 plantslib:grow_tree(pos, treemodel) does the same sort of thing whenever a 
490 tree is spawned within the abm-based growing code, for example when growing a
491 sapling into a tree.
494 =====
495 There are other, internal helper functions that are not meant for use by other
496 mods.  Don't rely on them, as they are subject to change without notice.
499 ===============
500 Global Settings
501 ===============
503 Set this to true if you want the mod to spam your console with debug info :-)
505         plantlife_debug = false
508 ======================
509 Fertile Ground Mapping
510 ======================
512 The mod uses Perlin noise to create "biomes" of the various plants, via the
513 minetest.env:get_perlin() function.  At present, there are three layers of
514 Perlin noise used.
516 The first one is for a "fertile ground" layer, which I tend to refer to as the
517 generic "stuff can potentially grow here" layer.  Its values are hard-coded:
519         plantslib.plantlife_seed_diff = 329
520         perlin_octaves = 3
521         perlin_persistence = 0.6
522         perlin_scale = 100
524 For more information on how Perlin noise is generated, you will need to search
525 the web, as these default values were from that which is used by minetest_game
526 to spawn jungle grass at mapgen time, and I'm still learning how Perlin noise
527 works.  ;-)
530 ===================
531 Temperature Mapping
532 ===================
534 The second Perlin layer is a temperature map, with values taken from
535 SPlizard's Snow Biomes mod so that the two will be compatible, since that mod
536 appears to be the standard now.  Those values are:
538         temperature_seeddiff = 112
539         temperature_octaves = 3
540         temperature_persistence = 0.5
541         temperature_scale = 150
543 The way Perlin values are used by this mod, in keeping with the snow mod's 
544 apparent methods, larger values returned by the Perlin function represent
545 *colder* temperatures.  In this mod, the following table gives a rough
546 approximation of how temperature maps to these values, normalized to
547 0.53 = 0 °C and +1.0 = -25 °C.
549 Perlin          Approx. Temperature
550 -1.0             81 °C  ( 178 °F)
551 -0.75            68 °C  ( 155 °F)
552 -0.56            58 °C  ( 136 °F)
553 -0.5             55 °C  ( 131 °F)
554 -0.25            41 °C  ( 107 °F)
555 -0.18            38 °C  ( 100 °F)
556  0               28 °C  (  83 °F)
557  0.13            21 °C  (  70 °F)
558  0.25            15 °C  (  59 °F)
559  0.5              2 °C  (  35 °F)
560  0.53             0 °C  (  32 °F)
561  0.75           -12 °C  (  11 °F)
562  0.86           -18 °C  (   0 °F)
563  1.0            -25 °C  (- 13 °F)
565 Included in this table are even 0.25 steps in Perlin values along with some
566 common temperatures on both the Centigrade and Fahrenheit scales.  Note that
567 unless you're trying to model the Moon or perhaps Mercury in your mods/maps, 
568 you probably won't need to bother with Perlin values of less than -0.56 or so.
571 ================
572 Humidity Mapping
573 ================
575 Last but not least is a moisture/humidity map.  Like the temperature map
576 above, Perlin values can be tested to determine the approximate humidity of
577 the *air* in the area.  This humidity map is basically the perlin layer used
578 for deserts.
580 A value of -1.0 is very moist (basically a thick fog, if it could be seen), a
581 value of +0.4 represents the edge of a desert as usually seen in the game, and
582 a value of +1.0 is as dry as a bone.
584 This does not check for nearby water, just general air humidity, and that
585 being the case, nearby ground does not affect the reported humidity of a
586 region (because this isn't yet possible to calculate yet).  Use the near_nodes
587 and avoid_nodes parameters and their related options to check for water and
588 such.
590 The Perlin values use for this layer are:
592         humidity_seeddiff = 9130
593         humidity_octaves = 3
594         humidity_persistence = 0.5
595         humidity_scale = 250
597 And this particular one is mapped slightly differently from the others:
599         noise3 = perlin3:get2d({x=p_top.x+150, y=p_top.z+50})
601 (Note the +150 and +50 offsets)