forked from mtcontrib/plantlife_modpack
add API function to choose a random wall
(rather than always the first found) move API.txt into plants_lib dir moderate re-formatting of API.txt, accounting for tab width = 4 spaces.
This commit is contained in:
parent
01555c10c1
commit
0c6db75383
@ -1,6 +1,6 @@
|
|||||||
This document describes the Plantlife mod API.
|
This document describes the Plantlife mod API.
|
||||||
|
|
||||||
Last revision: 2014-05-24
|
Last revision: 2015-02-16
|
||||||
|
|
||||||
|
|
||||||
=========
|
=========
|
||||||
@ -64,9 +64,9 @@ biome = {
|
|||||||
spawn_delay = number, -- same as sdelay, above.
|
spawn_delay = number, -- same as sdelay, above.
|
||||||
spawn_chance = number, -- same as schance, above.
|
spawn_chance = number, -- same as schance, above.
|
||||||
spawn_surfaces = {table}, -- List of node names on which the plants
|
spawn_surfaces = {table}, -- List of node names on which the plants
|
||||||
-- should be spawned. As with the single-
|
-- should be spawned. As with the single-node "ssurface"
|
||||||
-- node "ssurface" option in the legacy API,
|
-- option in the legacy API, you should not put stone, air,
|
||||||
-- you should not put stone, air, etc. here.
|
-- etc. here.
|
||||||
|
|
||||||
---- From here down are a number of optional parameters. You will
|
---- From here down are a number of optional parameters. You will
|
||||||
---- most likely want to use at least some of these to limit how and
|
---- most likely want to use at least some of these to limit how and
|
||||||
@ -74,151 +74,132 @@ biome = {
|
|||||||
|
|
||||||
avoid_nodes = {table}, -- same meaning as savoid, above
|
avoid_nodes = {table}, -- same meaning as savoid, above
|
||||||
avoid_radius = num, -- same as sradius
|
avoid_radius = num, -- same as sradius
|
||||||
seed_diff = num, -- The Perlin seed difference value passed to
|
seed_diff = num, -- The Perlin seed difference value passed to the
|
||||||
-- the minetest.get_perlin() function.
|
-- minetest.get_perlin() function. Used along with
|
||||||
-- Used along with the global Perlin controls
|
-- the global Perlin controls below to create the
|
||||||
-- below to create the "biome" in which the
|
-- "biome" in which the plants will spawn. Defaults
|
||||||
-- plants will spawn. Defaults to 0 if not
|
-- to 0 if not provided.
|
||||||
-- provided.
|
light_min = num, -- Minimum amount of light necessary to make a plant
|
||||||
light_min = num, -- Minimum amount of light necessary to make a
|
-- spawn. Defaults to 0.
|
||||||
-- plant spawn. Defaults to 0.
|
light_max = num, -- Maximum amount of light needed to spawn. Defaults
|
||||||
light_max = num, -- Maximum amount of light needed to spawn.
|
-- to the engine's MAX_LIGHT value of 14.
|
||||||
-- Defaults to the engine's MAX_LIGHT value of
|
neighbors = {table}, -- List of neighboring nodes that need to be
|
||||||
-- 14.
|
-- immediately next to the node the plant is about to
|
||||||
neighbors = {table}, -- List of neighboring nodes that need to be
|
-- spawn on. Can also be a string with a single node
|
||||||
-- immediately next to the node the plant is
|
-- name. It is both passed to the ABM as the
|
||||||
-- about to spawn on. Can also be a string
|
-- "neighbors" parameter, and is used to manually
|
||||||
-- with a single node name. It is both passed
|
-- check the adjacent nodes. It only takes one of
|
||||||
-- to the ABM as the "neighbors" parameter,
|
-- these for the spawn routine to mark the target as
|
||||||
-- and is used to manually check the
|
-- spawnable. Defaults to nil (ignored).
|
||||||
-- adjacent nodes. It only takes one of these
|
ncount = num, -- There must be at least this many of the above
|
||||||
-- for the spawn routine to mark the target as
|
-- neighbors in the eight spaces immediately
|
||||||
-- spawnable. Defaults to nil (ignored).
|
-- surrounding the node the plant is about to spawn on
|
||||||
ncount = num, -- There must be at least this many of the
|
-- for it to happen. If not provided, this check is
|
||||||
-- above neighbors in the eight spaces
|
-- disabled.
|
||||||
-- immediately surrounding the node the plant
|
facedir = num, -- The value passed to the param2 variable when adding
|
||||||
-- is about to spawn on for it to happen. If
|
-- the node to the map. Defaults to 0. Be sure that
|
||||||
-- not provided, this check is disabled.
|
-- the value you use here (and the range thereof) is
|
||||||
facedir = num, -- The value passed to the param2 variable
|
-- appropriate for the type of node you're spawning.
|
||||||
-- when adding the node to the map. Defaults
|
random_facedir = {table}, -- If set, the table should contain two values.
|
||||||
-- to 0. Be sure that the value you use here
|
-- If they're both provided, the spawned plant will be
|
||||||
-- (and the range thereof) is appropriate for
|
-- given a random facedir value in the range specified
|
||||||
-- the type of node you're spawning.
|
-- by these two numbers. Overrides the facedir
|
||||||
random_facedir = {table}, -- If set, the table should contain two
|
-- parameter above, if it exists. Use {0,3} if you
|
||||||
-- values. If they're both provided, the
|
-- want the full range for wallmounted nodes, or {2,5}
|
||||||
-- spawned plant will be given a random
|
-- for most everything else, or any other pair of
|
||||||
-- facedir value in the range specified by
|
-- numbers appropriate for the node you want to spawn.
|
||||||
-- these two numbers. Overrides the facedir
|
depth_max = num, -- If the object spawns on top of a water source, the
|
||||||
-- parameter above, if it exists. Use {0,3}
|
-- water must be at most this deep. Defaults to 1.
|
||||||
-- if you want the full range for wallmounted
|
min_elevation = num, -- Surface must be at this altitude or higher to
|
||||||
-- nodes, or {2,5} for most everything else,
|
-- spawn at all. Defaults to -31000...
|
||||||
-- or any other pair of numbers in the 0 to 5
|
max_elevation = num, -- ...but must be no higher than this altitude.
|
||||||
-- range, as appropriate for the node you want
|
-- Defaults to +31000.
|
||||||
-- to spawn.
|
near_nodes = {table}, -- List of nodes that must be somewhere in the
|
||||||
verticals_list = {table}, -- List of nodes that should be considered
|
-- vicinity in order for the plant to spawn. Can also
|
||||||
-- to be natural walls.
|
-- be a string with a single node name. If not
|
||||||
alt_wallnode = "string", -- If specified, this node will be
|
-- provided, this check is disabled.
|
||||||
-- substituted in place of the plant(s)
|
|
||||||
-- defined by spawn_plants above, if the spawn
|
|
||||||
-- target has one or more adjacent walls. In
|
|
||||||
-- such a case, the two above facedir
|
|
||||||
-- parameters will be ignored.
|
|
||||||
depth_max = num, -- If the object spawns on top of a water
|
|
||||||
-- source, the water must be at most this
|
|
||||||
-- deep. Defaults to 1 node.
|
|
||||||
min_elevation = num, -- Surface must be at this altitude or higher
|
|
||||||
-- to spawn at all. Defaults to -31000...
|
|
||||||
max_elevation = num, -- ...but must be no higher than this
|
|
||||||
-- altitude. Defaults to +31000.
|
|
||||||
near_nodes = {table}, -- List of nodes that must be somewhere in the
|
|
||||||
-- vicinity in order for the plant to spawn.
|
|
||||||
-- Can also be a string with a single node
|
|
||||||
-- name. If not provided, this check is
|
|
||||||
-- disabled.
|
|
||||||
near_nodes_size = num, -- How large of an area to check for the above
|
near_nodes_size = num, -- How large of an area to check for the above
|
||||||
-- node. Specifically, this checks a flat
|
-- node. Specifically, this checks a flat, horizontal
|
||||||
-- horizontal area centered on the node to be
|
-- area centered on the node to be spawned on.
|
||||||
-- spawned on. Defaults to 0, but is ignored
|
-- Defaults to 0, but is ignored if the above
|
||||||
-- if the above near_nodes value is not set.
|
-- near_nodes value is not set.
|
||||||
near_nodes_vertical = num, -- Used with the size value above, this
|
near_nodes_vertical = num, -- Used with the size value above, this extends
|
||||||
-- extends the vertical range of the near
|
-- the vertical range of the near nodes search.
|
||||||
-- nodes search. Basically, this turns the
|
-- Basically, this turns the flat region described
|
||||||
-- flat region described above into a cuboid
|
-- above into a cuboid region. The area to be checked
|
||||||
-- region. The area to be checked will extend
|
-- will extend this high and this low above/below the
|
||||||
-- this high AND this low above/below the
|
-- target node, centered thereon. Defaults to 1 (only
|
||||||
-- target node, centered thereon. Defaults to
|
-- check the layer above, the layer at, and the layer
|
||||||
-- 1 (check only the layer above, the layer
|
-- below the target node), but is ignored if
|
||||||
-- at, and the layer below the target node),
|
-- near_nodes is not set.
|
||||||
-- but is ignored if near_nodes is not set.
|
near_nodes_count = num, -- How many of the above nodes must be within that
|
||||||
near_nodes_count = num, -- How many of the above nodes must be within
|
-- radius. Defaults to 1 but is ignored if near_nodes
|
||||||
-- that radius. Defaults to 1 but is ignored
|
-- isn't set. Bear in mind that the total area to be
|
||||||
-- if near_nodes isn't set. Bear in mind that
|
-- checked is equal to:
|
||||||
-- the total area to be checked is equal to
|
-- (near_nodes_size^2)*near_nodes_vertical*2
|
||||||
-- (near_nodes_size^2)*near_nodes_vertical*2.
|
-- For example, if size is 10 and vertical is 4, then
|
||||||
-- so for example, if size is 10 and vertical
|
-- the area is (10^2)*8 = 800 nodes in size, so you'll
|
||||||
-- is 4 then the area is (10^2)*8 = 800 nodes
|
-- want to make sure you specify a value appropriate
|
||||||
-- in size, so you'll want to make sure you
|
-- for the size of the area being tested.
|
||||||
-- specify a value appropriate for the amount
|
air_size = num, -- How large of an area to check for air above and
|
||||||
-- in question.
|
-- around the target. If omitted, only the space
|
||||||
air_size = num, -- How large of an area to check for air
|
-- above the target is checked. This does not check
|
||||||
-- above and around the target. If omitted,
|
-- for air at the sides or below the target.
|
||||||
-- only the space above the target is checked.
|
air_count = num, -- How many of the surrounding nodes need to be air
|
||||||
-- This does not check for air at the sides or
|
-- for the above check to return true. If omitted,
|
||||||
-- below the target.
|
-- only the space above the target is checked.
|
||||||
air_count = num, -- How many of the surrounding nodes need to
|
plantlife_limit = num, -- The value compared against the generic "plants
|
||||||
-- be air for the above check to return true.
|
-- can grow here" Perlin noise layer. Smaller numbers
|
||||||
-- If omitted, only the space above the target
|
-- result in more abundant plants. Range of -1 to +1,
|
||||||
-- is checked.
|
-- with values in the range of about 0 to 0.5 being
|
||||||
plantlife_limit = num, -- The value compared against the generic
|
-- most useful. Defaults to 0.1.
|
||||||
-- "plants can grow here" Perlin noise layer.
|
temp_min = num, -- Minimum temperature needed for the desired object
|
||||||
-- Smaller numbers result in more abundant
|
-- to spawn. This is a 2d Perlin value, which has an
|
||||||
-- plants. Range of -1 to +1, with values in
|
-- inverted range of +1 to -1. Larger values
|
||||||
-- the range of about 0 to 0.5 being most
|
-- represent *colder* temperatures, so this value is
|
||||||
-- useful. Defaults to 0.1.
|
-- actually the upper end of the desired Perlin range.
|
||||||
temp_min = num, -- Minimum temperature needed for the desired
|
-- See the temperature map section at the bottom of
|
||||||
-- object to spawn. This is a 2d Perlin
|
-- this document for details on how these values work.
|
||||||
-- value, which has an inverted range of +1 to
|
-- Defaults to +1 (unlimited coldness).
|
||||||
-- -1. Larger values represent *colder*
|
temp_max = num, -- Maximum temperature/lower end of the Perlin range.
|
||||||
-- temperatures, so this value is actually the
|
-- Defaults to -1 (unlimited heat).
|
||||||
-- upper end of the desired Perlin range. See
|
humidity_min = num, -- Minimum humidity for the plant to spawn in. Like
|
||||||
-- the temperature map section at the bottom
|
-- the temperature map, this is a Perlin value where
|
||||||
-- of this document for details on how these
|
-- lower numbers mean more humidity in the area.
|
||||||
-- values work. Defaults to +1 (unlimited
|
-- Defaults to +1 (0% humidity).
|
||||||
-- coldness).
|
|
||||||
temp_max = num, -- Maximum temperature/lower end of the Perlin
|
|
||||||
-- range. Defaults to -1 (unlimited heat).
|
|
||||||
humidity_min = num, -- Minimum humidity for the plant to spawn in.
|
|
||||||
-- Like the temperature map, this is a Perlin
|
|
||||||
-- value where lower numbers mean more
|
|
||||||
-- humidity in the area. Defaults to +1 (0%
|
|
||||||
-- relative humidity).
|
|
||||||
humidity_max = num, -- Maximum humidity for the plant to spawn at.
|
humidity_max = num, -- Maximum humidity for the plant to spawn at.
|
||||||
-- Defaults to -1 (100% humidity).
|
-- Defaults to -1 (100% humidity).
|
||||||
spawn_on_side = bool, -- Set this to true to spawn the node on one
|
verticals_list = {table}, -- List of nodes that should be considered to be
|
||||||
-- side of the target node rather than the
|
-- natural walls.
|
||||||
-- top. The code will search for an airspace
|
alt_wallnode = "string", -- If specified, this node will be substituted in
|
||||||
-- to the side of the target, then spawn the
|
-- place of the plant(s) defined by spawn_plants
|
||||||
-- plant at the first one found. The above
|
-- above, if the spawn target has one or more adjacent
|
||||||
-- facedir and random_facedir parameters are
|
-- walls. In such a case, the two above facedir
|
||||||
-- ignored in this case. If the above
|
-- parameters will be ignored.
|
||||||
-- parameters for selecting generic wall nodes
|
spawn_on_side = bool, -- Set this to true to immediately spawn the node on
|
||||||
-- are provided, this option is ignored.
|
-- one side of the target node rather than the top.
|
||||||
-- Important note: the facedir values assigned
|
-- The code will search for an airspace to the side of
|
||||||
-- by this option only make sense with
|
-- the target, then spawn the plant at the first one
|
||||||
-- wallmounted nodes (nodes which don't use
|
-- found. The above facedir and random_facedir
|
||||||
-- facedir won't be affected).
|
-- parameters are ignored in this case. If the above
|
||||||
|
-- parameters for selecting generic wall nodes are
|
||||||
|
-- provided, this option is ignored. Important note:
|
||||||
|
-- the facedir values assigned by this option only
|
||||||
|
-- make sense with wallmounted nodes (nodes which
|
||||||
|
-- don't use facedir won't be affected).
|
||||||
|
choose_random_wall = bool, -- if set to true, and searching for walls is
|
||||||
|
-- being done, just pick any random wall if there is
|
||||||
|
-- one, rather than returning the first one.
|
||||||
spawn_on_bottom = bool, -- If set to true, spawn the object below the
|
spawn_on_bottom = bool, -- If set to true, spawn the object below the
|
||||||
-- target node instead of above it. The above
|
-- target node instead of above it. The above
|
||||||
-- spawn_on_side variable takes precedence
|
-- spawn_on_side variable takes precedence over this
|
||||||
-- over this one if both happen to be true.
|
-- one if both happen to be true. When using this
|
||||||
-- When using this option with the random
|
-- option with the random facedir function above, the
|
||||||
-- facedir function above, the values given to
|
-- values given to the facedir parameter are for
|
||||||
-- the facedir parameter are for regular
|
-- regular nodes, not wallmounted.
|
||||||
-- nodes, not wallmounted.
|
spawn_replace_node = bool, -- If set to true, the target node itself is
|
||||||
spawn_replace_node = bool, -- If set to true, the target node itself
|
-- replaced by the spawned object. Overrides the
|
||||||
-- is replaced by the spawned object.
|
-- spawn_on_bottom and spawn_on_side settings.
|
||||||
-- Overrides the spawn_on_bottom and
|
|
||||||
-- spawn_on_side settings.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[*] spawn_plants must be either a table or a string. If it's a table, the
|
[*] spawn_plants must be either a table or a string. If it's a table, the
|
||||||
@ -250,87 +231,78 @@ here than are available in the ABM-based spawner, as some stuff doesn't make
|
|||||||
sense at map-generation time.
|
sense at map-generation time.
|
||||||
|
|
||||||
biome = {
|
biome = {
|
||||||
surface = something, -- What node(s). May be a string such as
|
surface = something, -- What node(s). May be a string such as
|
||||||
-- "default:dirt_with_grass" or a table with
|
-- "default:dirt_with_grass" or a table with
|
||||||
-- multiple such entries.
|
-- multiple such entries.
|
||||||
|
|
||||||
---- Everything else is optional, but you'll definitely want to use
|
---- Everything else is optional, but you'll definitely want to use
|
||||||
---- some of these other fields to limit where and under what
|
---- some of these other fields to limit where and under what
|
||||||
---- conditions the objects are spawned.
|
---- conditions the objects are spawned.
|
||||||
|
|
||||||
below_nodes = {table}, -- List of nodes that must be below the target
|
below_nodes = {table}, -- List of nodes that must be below the target
|
||||||
-- node. Useful in snow biomes to keep
|
-- node. Useful in snow biomes to keep objects from
|
||||||
-- objects from spawning in snow that's on the
|
-- spawning in snow that's on the wrong surface for
|
||||||
-- wrong surface for that object.
|
-- that object.
|
||||||
avoid_nodes = {table}, -- List of nodes to avoid when spawning.
|
avoid_nodes = {table}, -- List of nodes to avoid when spawning. Groups are
|
||||||
-- Groups are not supported here.
|
-- not supported here.
|
||||||
avoid_radius = num, -- how much distance to leave between the
|
avoid_radius = num, -- How much distance to leave between the object to be
|
||||||
-- object to be added and the objects to be
|
-- added and the objects to be avoided. If this or
|
||||||
-- avoided. If this or the avoid_nodes value
|
-- the avoid_nodes value is nil/omitted, this check is
|
||||||
-- is nil or omitted, this check is skipped.
|
-- skipped. Avoid using excessively large radii.
|
||||||
-- Avoid using excessively large radii or you
|
rarity = num, -- How rare should this object be in its biome? Larger
|
||||||
-- will slow down the map generator.
|
-- values make objects more rare, via:
|
||||||
rarity = num, -- how rare should this object be in its
|
-- math.random(1,100) > this
|
||||||
-- biome? Larger values make objects more
|
max_count = num, -- The absolute maximum number of your object that
|
||||||
-- rare, via: math.random(1,100) > this
|
-- should be allowed to spawn in a 5x5x5 mapblock area
|
||||||
max_count = num, -- The absolute maximum number of your object
|
-- (80x80x80 nodes). Defaults to 5, but be sure you
|
||||||
-- that should be allowed to spawn in a 5x5x5
|
-- set this to some reasonable value depending on your
|
||||||
-- mapblock area (80x80x80 nodes). Defaults
|
-- object and its size if 5 is insufficient.
|
||||||
-- to 5, but be sure you set this to some
|
seed_diff = num, -- Perlin seed-diff value. Defaults to 0, which
|
||||||
-- reasonable value depending on your object
|
-- causes the function to inherit the global value of
|
||||||
-- and its size if 5 is insufficient.
|
-- 329.
|
||||||
seed_diff = num, -- perlin seed-diff value. Defaults to 0,
|
neighbors = {table}, -- What ground nodes must be right next to and at the
|
||||||
-- which causes the function to inherit the
|
-- same elevation as the node to be spawned on.
|
||||||
-- global value of 329.
|
ncount = num, -- At least this many of the above nodes must be next
|
||||||
neighbors = {table}, -- What ground nodes must be right next to and
|
-- to the node to spawn on. Any value greater than 8
|
||||||
-- at the same elevation as the node to be
|
-- will probably cause the code to never spawn
|
||||||
-- spawned on.
|
-- anything. Defaults to 0.
|
||||||
ncount = num, -- at least this many of the above nodes must
|
depth = num, -- How deep/thick of a layer the spawned-on node must
|
||||||
-- be next to the node to spawn on. Any value
|
-- be. Typically used for water.
|
||||||
-- greater than 8 will probably cause the code
|
min_elevation = num, -- Minimum elevation in meters/nodes. Defaults to
|
||||||
-- to never spawn anything. Defaults to 0.
|
-- -31000 (unlimited).
|
||||||
depth = num, -- how deep/thick of a layer the spawned-on
|
max_elevation = num, -- Max elevation. Defaults to +31000 (unlimited).
|
||||||
-- node must be. Typically used for water.
|
near_nodes = {table}, -- what nodes must be in the general vicinity of the
|
||||||
min_elevation = num, -- minimum elevation in meters/nodes.
|
-- object being spawned.
|
||||||
-- Defaults to -31000 (unlimited).
|
near_nodes_size = num, -- how wide of a search area to look for the nodes
|
||||||
max_elevation = num, -- maximum elevation. Defaults to +31000
|
-- in that list.
|
||||||
-- (unlimited).
|
near_nodes_vertical = num, -- How high/low of an area to search from the
|
||||||
near_nodes = {table}, -- what nodes must be in the general vicinity
|
-- target node.
|
||||||
-- of the object being spawned.
|
near_nodes_count = num, -- at least this many of those nodes must be in
|
||||||
near_nodes_size = num, -- how wide of a search area to look for
|
-- the area.
|
||||||
-- the nodes in that list.
|
plantlife_limit = num, -- The value compared against the generic "plants
|
||||||
near_nodes_vertical = num, -- How high/low of an area to search from
|
-- can grow here" Perlin noise layer. Smaller numbers
|
||||||
-- the target node.
|
-- result in more abundant plants. Range of -1 to +1,
|
||||||
near_nodes_count = num, -- at least this many of those nodes must be
|
-- with values in the range of about 0 to 0.5 being
|
||||||
-- in the area.
|
-- most useful. Defaults to 0.1.
|
||||||
plantlife_limit = num, -- The value compared against the generic
|
temp_min = num, -- Coldest allowable temperature for a plant to spawn
|
||||||
-- "plants can grow here" Perlin noise layer.
|
-- (that is, the largest Perlin value).
|
||||||
-- Smaller numbers result in more abundant
|
temp_max = num, -- warmest allowable temperature to spawn a plant
|
||||||
-- plants. Range of -1 to +1, with values in
|
-- (lowest Perlin value).
|
||||||
-- the range of about 0 to 0.5 being most
|
verticals_list = {table}, -- Same as with the spawn_on_surfaces function.
|
||||||
-- useful. Defaults to 0.1.
|
check_air = bool, -- Flag to tell the mapgen code to check for air above
|
||||||
temp_min = num, -- coldest allowable temperature for a plant
|
-- the spawn target. Defaults to true if not
|
||||||
-- to spawn (that is, the highest Perlin
|
-- explicitly set to false. Set this to false VERY
|
||||||
-- temperature map value).
|
-- SPARINGLY, as it will slow the map generator down.
|
||||||
temp_max = num, -- warmest allowable temperature to spawn a
|
delete_above = bool, -- Flag to tell the mapgen code to delete the two
|
||||||
-- plant (lowest Perlin temperature value).
|
-- nodes directly above the spawn target just before
|
||||||
verticals_list = {table}, -- Same as with the spawn_on_surfaces
|
-- adding the plant or tree. Useful when generating
|
||||||
-- function.
|
-- in snow biomes. Defaults to false.
|
||||||
check_air = bool, -- Flag to tell the mapgen code to check for
|
|
||||||
-- air above the spawn target. Defaults to
|
|
||||||
-- true if not explicitly set to false.
|
|
||||||
delete_above = bool, -- Flag to tell the mapgen code to delete the
|
|
||||||
-- two nodes directly above the spawn target
|
|
||||||
-- just before adding the plant or tree.
|
|
||||||
-- Useful when generating in snow biomes.
|
|
||||||
-- Defaults to false.
|
|
||||||
delete_above_surround = bool, -- Flag to tell the mapgen code to also
|
delete_above_surround = bool, -- Flag to tell the mapgen code to also
|
||||||
-- delete the four nodes surrounding the above
|
-- delete the five nodes surrounding the above space,
|
||||||
-- space, and the four nodes above those,
|
-- and the five nodes above those, resulting in a two-
|
||||||
-- resulting in a two-node-deep cross-shaped
|
-- node-deep cross-shaped empty region above/around
|
||||||
-- empty region above the spawn target.
|
-- the spawn target. Useful when adding trees to snow
|
||||||
-- Useful when adding trees to snow biomes.
|
-- biomes. Defaults to false.
|
||||||
-- Defaults to false.
|
|
||||||
spawn_replace_node = bool, -- same as with the ABM spawner.
|
spawn_replace_node = bool, -- same as with the ABM spawner.
|
||||||
random_facedir = {table}, -- same as with the ABM spawner.
|
random_facedir = {table}, -- same as with the ABM spawner.
|
||||||
}
|
}
|
||||||
@ -370,61 +342,53 @@ into something else over time. This function has no return value, and accepts
|
|||||||
a biome definition table as the only parameter. These are defined like so:
|
a biome definition table as the only parameter. These are defined like so:
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
grow_plant = "string", -- Name of the node to be grown into something
|
grow_plant = "string", -- Name of the node to be grown into something
|
||||||
-- else. This value is passed to the ABM as
|
-- else. This value is passed to the ABM as the
|
||||||
-- the "nodenames" parameter, so it is the
|
-- "nodenames" parameter, so it is the plants
|
||||||
-- plants themselves that are the ABM trigger,
|
-- themselves that are the ABM trigger, rather than
|
||||||
-- rather than the ground they spawned on. A
|
-- the ground they spawned on. A plant will only grow
|
||||||
-- plant will only grow if the node above it
|
-- if the node above it is air. Can also be a table,
|
||||||
-- is air. Can also be a table, but note that
|
-- but note that all nodes referenced therein will be
|
||||||
-- all nodes referenced therein will be grown
|
-- grown into the same object.
|
||||||
-- into the same object.
|
grow_delay = num, -- Passed as the ABM "interval" parameter, as with
|
||||||
grow_delay = num, -- Passed as the ABM "interval" parameter, as
|
-- spawning.
|
||||||
-- with spawning.
|
|
||||||
grow_chance = num, -- Passed as the ABM "chance" parameter.
|
grow_chance = num, -- Passed as the ABM "chance" parameter.
|
||||||
grow_result = "string", -- Name of the node into which the grow_plant
|
grow_result = "string", -- Name of the node into which the grow_plant
|
||||||
-- node(s) should transform when the ABM
|
-- node(s) should transform when the ABM executes.
|
||||||
-- executes.
|
|
||||||
|
|
||||||
---- Everything from here down is optional.
|
---- Everything from here down is optional.
|
||||||
|
|
||||||
dry_early_node = "string", -- This value is ignored except for jungle
|
dry_early_node = "string", -- This value is ignored except for jungle
|
||||||
-- grass (a corner case needed by that mod),
|
-- grass (a corner case needed by that mod), where it
|
||||||
-- where it indicates which node the grass
|
-- indicates which node the grass must be on in order
|
||||||
-- must be on in order for it to turn from
|
-- for it to turn from the short size to
|
||||||
-- the short size to "default:dry_shrub"
|
-- "default:dry_shrub" instead of the medium size.
|
||||||
-- instead of the medium size.
|
grow_nodes = {table}, -- One of these nodes must be under the plant in
|
||||||
grow_nodes = {table}, -- One of these nodes must be under the plant
|
-- order for it to grow at all. Normally this should
|
||||||
-- in order for it to grow at all. Normally
|
-- be the same as the list of surfaces passed to the
|
||||||
-- this should be the same as the list of
|
-- spawning ABM as the "nodenames" parameter. This is
|
||||||
-- surfaces passed to the spawning ABM as the
|
-- so that the plant can be manually placed on
|
||||||
-- "nodenames" parameter. This is so that the
|
-- something like a flower pot or something without it
|
||||||
-- plant can be manually placed on something
|
-- necessarily growing and perhaps dieing. Defaults
|
||||||
-- like a flower pot or something without it
|
-- to "default:dirt_with_grass".
|
||||||
-- growing and eventually dieing. Defaults to
|
|
||||||
-- "default:dirt_with_grass".
|
|
||||||
facedir = num, -- Same as with spawning a plant.
|
facedir = num, -- Same as with spawning a plant.
|
||||||
need_wall = bool, -- Set this to true if you the plant needs to
|
need_wall = bool, -- Set this to true if you the plant needs to grow
|
||||||
-- grow against a wall. Defaults to false.
|
-- against a wall. Defaults to false.
|
||||||
verticals_list = {table}, -- List of nodes that should be considered
|
verticals_list = {table}, -- same as with spawning a plant.
|
||||||
-- to be wall surfaces when growing the plant
|
choose_random_wall = bool, -- same as with spawning a plant.
|
||||||
-- vertically. If not provided, the walls
|
|
||||||
-- check is skipped.
|
|
||||||
grow_vertically = bool, -- Set this to true if the plant needs to grow
|
grow_vertically = bool, -- Set this to true if the plant needs to grow
|
||||||
-- vertically, as in climbing poison ivy.
|
-- vertically, as in climbing poison ivy. Defaults to
|
||||||
-- Defaults to false.
|
-- false.
|
||||||
height_limit = num, -- Set this to limit how tall the desired node
|
height_limit = num, -- Set this to limit how tall the desired node can
|
||||||
-- can grow. The mod will search straight
|
-- grow. The mod will search straight down from the
|
||||||
-- down from the position being spawned at to
|
-- position being spawned at to find a ground node,
|
||||||
-- find a ground node, set via the parameter
|
-- set via the field below. Defaults to 5 nodes.
|
||||||
-- below. Defaults to 5 nodes.
|
ground_nodes = {table}, -- What nodes should be treated as "the ground"
|
||||||
ground_nodes = {table}, -- What nodes should be treated as "the
|
-- below a vertically-growing plant. Usually this
|
||||||
-- ground" below a vertically-growing plant.
|
-- should be the same as the grow_nodes table, but
|
||||||
-- Usually this should be the same as the
|
-- might also include, for example, water or some
|
||||||
-- grow_nodes table, but might also include,
|
-- other surrounding material. Defaults to
|
||||||
-- for example, water or some other
|
-- "default:dirt_with_grass".
|
||||||
-- surrounding material. Defaults to
|
|
||||||
-- "default:dirt_with_grass".
|
|
||||||
grow_function = something, -- [*] see below.
|
grow_function = something, -- [*] see below.
|
||||||
seed_diff = num, -- [*] see below.
|
seed_diff = num, -- [*] see below.
|
||||||
}
|
}
|
||||||
@ -457,13 +421,16 @@ and grow_result is ignored.
|
|||||||
|
|
||||||
|
|
||||||
=====
|
=====
|
||||||
find_adjacent_wall(pos, verticals)
|
find_adjacent_wall(pos, verticals, randomflag)
|
||||||
|
|
||||||
Of the few helper functions, this one expects a position parameter and a table
|
Of the few helper functions, this one expects a position parameter and a table
|
||||||
with the list of nodes that should be considered as walls. The code will
|
with the list of nodes that should be considered as walls. The code will
|
||||||
search around the given position for a neighboring wall, returning the first
|
search around the given position for a neighboring wall, returning the first
|
||||||
one it finds as a facedir value, or nil if there are no adjacent walls.
|
one it finds as a facedir value, or nil if there are no adjacent walls.
|
||||||
|
|
||||||
|
If randomflag is set to true, the function will just return the facedir of any
|
||||||
|
random wall it finds adjacent to the target position. Defaults to false if
|
||||||
|
not specified.
|
||||||
|
|
||||||
=====
|
=====
|
||||||
is_node_loaded(pos)
|
is_node_loaded(pos)
|
||||||
@ -490,11 +457,11 @@ call the usual spawn_tree() functions. This rerouting exists as a way for
|
|||||||
other mods to hook into plants_lib's tree-growing functions in general,
|
other mods to hook into plants_lib's tree-growing functions in general,
|
||||||
perhaps to execute something extra whenever a tree is spawned.
|
perhaps to execute something extra whenever a tree is spawned.
|
||||||
|
|
||||||
plantslib:generate_tree(pos, treemodel) is called any time a
|
plantslib:generate_tree(pos, treemodel) is called any time a tree is spawned
|
||||||
tree is spawned at map generation time. 'pos' is the position of the block on
|
at map generation time. 'pos' is the position of the block on which the tree
|
||||||
which the tree is to be placed. 'treemodel' is the standard L-Systems tree
|
is to be placed. 'treemodel' is the standard L-Systems tree definition table
|
||||||
definition table expected by the spawn_tree() function. Refer to the 'trunk'
|
expected by the spawn_tree() function. Refer to the 'trunk' field in that
|
||||||
field in that table to derive the name of the tree being spawned.
|
table to derive the name of the tree being spawned.
|
||||||
|
|
||||||
plantslib:grow_tree(pos, treemodel) does the same sort of thing whenever a
|
plantslib:grow_tree(pos, treemodel) does the same sort of thing whenever a
|
||||||
tree is spawned within the abm-based growing code, for example when growing a
|
tree is spawned within the abm-based growing code, for example when growing a
|
@ -483,7 +483,7 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
|
|||||||
and pos.y >= biome.min_elevation
|
and pos.y >= biome.min_elevation
|
||||||
and pos.y <= biome.max_elevation
|
and pos.y <= biome.max_elevation
|
||||||
then
|
then
|
||||||
local walldir = plantslib:find_adjacent_wall(p_top, biome.verticals_list)
|
local walldir = plantslib:find_adjacent_wall(p_top, biome.verticals_list, biome.choose_random_wall)
|
||||||
if biome.alt_wallnode and walldir then
|
if biome.alt_wallnode and walldir then
|
||||||
if n_top.name == "air" then
|
if n_top.name == "air" then
|
||||||
minetest.set_node(p_top, { name = biome.alt_wallnode, param2 = walldir })
|
minetest.set_node(p_top, { name = biome.alt_wallnode, param2 = walldir })
|
||||||
@ -555,7 +555,7 @@ function plantslib:grow_plants(opts)
|
|||||||
local root_node = minetest.get_node({x=pos.x, y=pos.y-options.height_limit, z=pos.z})
|
local root_node = minetest.get_node({x=pos.x, y=pos.y-options.height_limit, z=pos.z})
|
||||||
local walldir = nil
|
local walldir = nil
|
||||||
if options.need_wall and options.verticals_list then
|
if options.need_wall and options.verticals_list then
|
||||||
walldir = plantslib:find_adjacent_wall(p_top, options.verticals_list)
|
walldir = plantslib:find_adjacent_wall(p_top, options.verticals_list, biome.choose_random_wall)
|
||||||
end
|
end
|
||||||
if n_top.name == "air" and (not options.need_wall or (options.need_wall and walldir))
|
if n_top.name == "air" and (not options.need_wall or (options.need_wall and walldir))
|
||||||
then
|
then
|
||||||
@ -612,12 +612,24 @@ end
|
|||||||
-- function to decide if a node has a wall that's in verticals_list{}
|
-- function to decide if a node has a wall that's in verticals_list{}
|
||||||
-- returns wall direction of valid node, or nil if invalid.
|
-- returns wall direction of valid node, or nil if invalid.
|
||||||
|
|
||||||
function plantslib:find_adjacent_wall(pos, verticals)
|
function plantslib:find_adjacent_wall(pos, verticals, randomflag)
|
||||||
local verts = dump(verticals)
|
local verts = dump(verticals)
|
||||||
if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then return 3 end
|
if randomflag then
|
||||||
if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then return 2 end
|
local walltab = {}
|
||||||
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then return 5 end
|
|
||||||
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then return 4 end
|
if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 3 end
|
||||||
|
if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then walltab[#walltab + 1] = 2 end
|
||||||
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then walltab[#walltab + 1] = 5 end
|
||||||
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then walltab[#walltab + 1] = 4 end
|
||||||
|
|
||||||
|
if #walltab > 0 then return walltab[math.random(1, #walltab)] end
|
||||||
|
|
||||||
|
else
|
||||||
|
if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then return 3 end
|
||||||
|
if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then return 2 end
|
||||||
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then return 5 end
|
||||||
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then return 4 end
|
||||||
|
end
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user