2013-01-10 03:33:37 +01:00
-- Plantlife library mod by Vanessa Ezekowitz
2012-12-05 01:29:23 +01:00
--
2013-01-10 03:33:37 +01:00
-- License: WTFPL
2013-01-12 06:47:50 +01:00
--
-- I got the temperature map idea from "hmmmm", values used for it came from
2013-01-19 06:45:46 +01:00
-- Splizard's snow mod.
2013-01-12 06:47:50 +01:00
--
2012-12-05 01:29:23 +01:00
-- Various settings - most of these probably won't need to be changed
2013-01-19 06:45:46 +01:00
plantslib = { }
2013-01-05 00:56:09 +01:00
2014-09-24 09:52:07 +02:00
plantslib.blocklist_aircheck = { }
plantslib.blocklist_no_aircheck = { }
plantslib.surface_nodes_aircheck = { }
plantslib.surface_nodes_no_aircheck = { }
plantslib.surfaceslist_aircheck = { }
plantslib.surfaceslist_no_aircheck = { }
plantslib.actioncount_aircheck = { }
plantslib.actioncount_no_aircheck = { }
plantslib.actionslist_aircheck = { }
plantslib.actionslist_no_aircheck = { }
2013-10-26 23:29:50 +02:00
plantslib.modpath = minetest.get_modpath ( " plants_lib " )
2014-09-24 09:52:07 +02:00
plantslib.total_no_aircheck_calls = 0
2014-08-15 21:51:03 +02:00
2014-12-27 07:20:51 +01:00
-- Boilerplate to support localized strings if intllib mod is installed.
2013-10-26 23:29:50 +02:00
local S
2014-12-27 07:20:51 +01:00
if minetest.get_modpath ( " intllib " ) then
S = intllib.Getter ( )
2013-10-26 23:29:50 +02:00
else
2014-12-27 07:20:51 +01:00
S = function ( s ) return s end
2013-10-26 23:29:50 +02:00
end
2014-12-27 07:20:51 +01:00
plantslib.intllib = S
2013-10-26 23:29:50 +02:00
2014-10-01 12:55:30 +02:00
local DEBUG = false --... except if you want to spam the console with debugging info :-)
2013-01-20 19:51:09 +01:00
2013-11-16 02:38:52 +01:00
function plantslib : dbg ( msg )
if DEBUG then
print ( " [Plantlife] " .. msg )
minetest.log ( " verbose " , " [Plantlife] " .. msg )
end
end
2013-01-19 06:45:46 +01:00
plantslib.plantlife_seed_diff = 329 -- needs to be global so other mods can see it
2012-12-05 01:29:23 +01:00
local perlin_octaves = 3
2013-01-05 00:56:09 +01:00
local perlin_persistence = 0.6
local perlin_scale = 100
2012-12-05 01:29:23 +01:00
2013-01-12 06:47:50 +01:00
local temperature_seeddiff = 112
local temperature_octaves = 3
local temperature_persistence = 0.5
local temperature_scale = 150
2013-02-03 09:01:44 +01:00
local humidity_seeddiff = 9130
local humidity_octaves = 3
2013-01-28 21:30:35 +01:00
local humidity_persistence = 0.5
2013-02-03 09:01:44 +01:00
local humidity_scale = 250
2012-12-05 01:29:23 +01:00
2013-11-16 02:38:52 +01:00
local time_scale = 1
local time_speed = tonumber ( minetest.setting_get ( " time_speed " ) )
if time_speed and time_speed > 0 then
time_scale = 72 / time_speed
end
2013-02-23 06:34:03 +01:00
--PerlinNoise(seed, octaves, persistence, scale)
plantslib.perlin_temperature = PerlinNoise ( temperature_seeddiff , temperature_octaves , temperature_persistence , temperature_scale )
plantslib.perlin_humidity = PerlinNoise ( humidity_seeddiff , humidity_octaves , humidity_persistence , humidity_scale )
2012-12-05 01:29:23 +01:00
-- Local functions
2013-01-19 06:45:46 +01:00
function plantslib : is_node_loaded ( node_pos )
2013-12-15 19:41:07 +01:00
local n = minetest.get_node_or_nil ( node_pos )
2013-02-23 06:34:03 +01:00
if ( not n ) or ( n.name == " ignore " ) then
2012-12-05 01:29:23 +01:00
return false
end
return true
end
2013-03-09 22:47:58 +01:00
function plantslib : set_defaults ( biome )
biome.seed_diff = biome.seed_diff or 0
biome.min_elevation = biome.min_elevation or - 31000
biome.max_elevation = biome.max_elevation or 31000
biome.temp_min = biome.temp_min or 1
biome.temp_max = biome.temp_max or - 1
biome.humidity_min = biome.humidity_min or 1
biome.humidity_max = biome.humidity_max or - 1
biome.plantlife_limit = biome.plantlife_limit or 0.1
biome.near_nodes_vertical = biome.near_nodes_vertical or 1
2013-03-09 23:06:21 +01:00
-- specific to on-generate
biome.neighbors = biome.neighbors or biome.surface
biome.near_nodes_size = biome.near_nodes_size or 0
biome.near_nodes_count = biome.near_nodes_count or 1
biome.rarity = biome.rarity or 50
biome.max_count = biome.max_count or 5
if biome.check_air ~= false then biome.check_air = true end
-- specific to abm spawner
biome.seed_diff = biome.seed_diff or 0
biome.light_min = biome.light_min or 0
biome.light_max = biome.light_max or 15
biome.depth_max = biome.depth_max or 1
biome.facedir = biome.facedir or 0
2013-03-09 22:47:58 +01:00
end
2014-08-13 02:18:23 +02:00
local function search_table ( t , s )
2014-08-15 05:12:43 +02:00
for i = 1 , # t do
2014-08-13 02:18:23 +02:00
if t [ i ] == s then return true end
end
return false
end
-- register the list of surfaces to spawn stuff on, filtering out all duplicates.
2014-08-18 21:50:05 +02:00
-- separate the items by air-checking or non-air-checking map eval methods
2014-08-13 02:18:23 +02:00
2014-08-23 04:44:33 +02:00
function plantslib : register_generate_plant ( biomedef , nodes_or_function_or_model )
2014-08-13 02:18:23 +02:00
2014-08-18 21:50:05 +02:00
-- if calling code passes an undefined node for a surface or
-- as a node to be spawned, don't register an action for it.
2014-08-23 04:44:33 +02:00
if type ( nodes_or_function_or_model ) == " string "
and string.find ( nodes_or_function_or_model , " : " )
and not minetest.registered_nodes [ nodes_or_function_or_model ] then
plantslib : dbg ( " Warning: Ignored registration for undefined spawn node: " .. dump ( nodes_or_function_or_model ) )
2014-08-15 06:35:33 +02:00
return
end
2014-08-23 04:44:33 +02:00
if type ( nodes_or_function_or_model ) == " string "
and not string.find ( nodes_or_function_or_model , " : " ) then
plantslib : dbg ( " Warning: Registered function call using deprecated string method: " .. dump ( nodes_or_function_or_model ) )
2014-08-15 16:09:01 +02:00
end
2014-08-13 02:18:23 +02:00
if biomedef.check_air == false then
2014-08-23 04:44:33 +02:00
plantslib : dbg ( " Register no-air-check mapgen hook: " .. dump ( nodes_or_function_or_model ) )
2014-09-24 09:52:07 +02:00
plantslib.actionslist_no_aircheck [ # plantslib.actionslist_no_aircheck + 1 ] = { biomedef , nodes_or_function_or_model }
2014-08-18 21:50:05 +02:00
local s = biomedef.surface
if type ( s ) == " string " then
2014-09-27 06:33:11 +02:00
if s and ( string.find ( s , " ^group: " ) or minetest.registered_nodes [ s ] ) then
2014-09-24 09:52:07 +02:00
if not search_table ( plantslib.surfaceslist_no_aircheck , s ) then
plantslib.surfaceslist_no_aircheck [ # plantslib.surfaceslist_no_aircheck + 1 ] = s
2014-08-18 21:50:05 +02:00
end
else
plantslib : dbg ( " Warning: Ignored no-air-check registration for undefined surface node: " .. dump ( s ) )
end
else
for i = 1 , # biomedef.surface do
local s = biomedef.surface [ i ]
2014-09-27 06:33:11 +02:00
if s and ( string.find ( s , " ^group: " ) or minetest.registered_nodes [ s ] ) then
2014-09-24 09:52:07 +02:00
if not search_table ( plantslib.surfaceslist_no_aircheck , s ) then
plantslib.surfaceslist_no_aircheck [ # plantslib.surfaceslist_no_aircheck + 1 ] = s
2014-08-18 21:50:05 +02:00
end
else
plantslib : dbg ( " Warning: Ignored no-air-check registration for undefined surface node: " .. dump ( s ) )
end
end
end
2014-08-13 02:18:23 +02:00
else
2014-08-23 04:44:33 +02:00
plantslib : dbg ( " Register with-air-checking mapgen hook: " .. dump ( nodes_or_function_or_model ) )
2014-09-24 09:52:07 +02:00
plantslib.actionslist_aircheck [ # plantslib.actionslist_aircheck + 1 ] = { biomedef , nodes_or_function_or_model }
2014-08-13 02:18:23 +02:00
local s = biomedef.surface
if type ( s ) == " string " then
2014-09-27 06:33:11 +02:00
if s and ( string.find ( s , " ^group: " ) or minetest.registered_nodes [ s ] ) then
2014-09-24 09:52:07 +02:00
if not search_table ( plantslib.surfaceslist_aircheck , s ) then
plantslib.surfaceslist_aircheck [ # plantslib.surfaceslist_aircheck + 1 ] = s
2014-08-15 22:14:09 +02:00
end
else
2014-08-18 21:50:05 +02:00
plantslib : dbg ( " Warning: Ignored with-air-checking registration for undefined surface node: " .. dump ( s ) )
2014-08-13 02:18:23 +02:00
end
else
2014-08-15 05:12:43 +02:00
for i = 1 , # biomedef.surface do
local s = biomedef.surface [ i ]
2014-09-27 06:33:11 +02:00
if s and ( string.find ( s , " ^group: " ) or minetest.registered_nodes [ s ] ) then
2014-09-24 09:52:07 +02:00
if not search_table ( plantslib.surfaceslist_aircheck , s ) then
plantslib.surfaceslist_aircheck [ # plantslib.surfaceslist_aircheck + 1 ] = s
2014-08-15 22:14:09 +02:00
end
else
2014-08-18 21:50:05 +02:00
plantslib : dbg ( " Warning: Ignored with-air-checking registration for undefined surface node: " .. dump ( s ) )
2014-08-13 02:18:23 +02:00
end
end
end
end
2013-01-19 06:45:46 +01:00
end
2014-09-24 09:52:07 +02:00
function plantslib : populate_surfaces ( biome , nodes_or_function_or_model , snodes , checkair )
2014-09-24 09:17:03 +02:00
plantslib : set_defaults ( biome )
-- filter stage 1 - find nodes from the supplied surfaces that are within the current biome.
local in_biome_nodes = { }
local perlin_fertile_area = minetest.get_perlin ( biome.seed_diff , perlin_octaves , perlin_persistence , perlin_scale )
2014-09-24 09:52:07 +02:00
for i = 1 , # snodes do
local pos = snodes [ i ]
2014-09-24 09:17:03 +02:00
local p_top = { x = pos.x , y = pos.y + 1 , z = pos.z }
local noise1 = perlin_fertile_area : get2d ( { x = pos.x , y = pos.z } )
local noise2 = plantslib.perlin_temperature : get2d ( { x = pos.x , y = pos.z } )
local noise3 = plantslib.perlin_humidity : get2d ( { x = pos.x + 150 , y = pos.z + 50 } )
local biome_surfaces_string = dump ( biome.surface )
2014-09-27 18:54:04 +02:00
local surface_ok = false
if not biome.depth then
local dest_node = minetest.get_node ( pos )
if string.find ( biome_surfaces_string , dest_node.name ) then
surface_ok = true
else
if string.find ( biome_surfaces_string , " group: " ) then
for j = 1 , # biome.surface do
if string.find ( biome.surface [ j ] , " ^group: " )
and minetest.get_item_group ( dest_node.name , biome.surface [ j ] ) then
surface_ok = true
break
end
end
end
end
elseif not string.find ( biome_surfaces_string , minetest.get_node ( { x = pos.x , y = pos.y - biome.depth - 1 , z = pos.z } ) . name ) then
surface_ok = true
end
if surface_ok
2014-09-24 09:17:03 +02:00
and ( not checkair or minetest.get_node ( p_top ) . name == " air " )
and pos.y >= biome.min_elevation
and pos.y <= biome.max_elevation
and noise1 > biome.plantlife_limit
and noise2 <= biome.temp_min
and noise2 >= biome.temp_max
and noise3 <= biome.humidity_min
and noise3 >= biome.humidity_max
and ( not biome.ncount or # ( minetest.find_nodes_in_area ( { x = pos.x - 1 , y = pos.y , z = pos.z - 1 } , { x = pos.x + 1 , y = pos.y , z = pos.z + 1 } , biome.neighbors ) ) > biome.ncount )
and ( not biome.near_nodes or # ( minetest.find_nodes_in_area ( { x = pos.x - biome.near_nodes_size , y = pos.y - biome.near_nodes_vertical , z = pos.z - biome.near_nodes_size } , { x = pos.x + biome.near_nodes_size , y = pos.y + biome.near_nodes_vertical , z = pos.z + biome.near_nodes_size } , biome.near_nodes ) ) >= biome.near_nodes_count )
and math.random ( 1 , 100 ) > biome.rarity
and ( not biome.below_nodes or string.find ( dump ( biome.below_nodes ) , minetest.get_node ( { x = pos.x , y = pos.y - 1 , z = pos.z } ) . name ) )
then
in_biome_nodes [ # in_biome_nodes + 1 ] = pos
end
end
-- filter stage 2 - find places within that biome area to place the plants.
local num_in_biome_nodes = # in_biome_nodes
if num_in_biome_nodes > 0 then
for i = 1 , math.min ( biome.max_count , num_in_biome_nodes ) do
local tries = 0
local spawned = false
while tries < 2 and not spawned do
local pos = in_biome_nodes [ math.random ( 1 , num_in_biome_nodes ) ]
if biome.spawn_replace_node then
pos.y = pos.y - 1
end
local p_top = { x = pos.x , y = pos.y + 1 , z = pos.z }
if not ( biome.avoid_nodes and biome.avoid_radius and minetest.find_node_near ( p_top , biome.avoid_radius + math.random ( - 1.5 , 2 ) , biome.avoid_nodes ) ) then
if biome.delete_above then
minetest.remove_node ( p_top )
minetest.remove_node ( { x = p_top.x , y = p_top.y + 1 , z = p_top.z } )
end
if biome.delete_above_surround then
minetest.remove_node ( { x = p_top.x - 1 , y = p_top.y , z = p_top.z } )
minetest.remove_node ( { x = p_top.x + 1 , y = p_top.y , z = p_top.z } )
minetest.remove_node ( { x = p_top.x , y = p_top.y , z = p_top.z - 1 } )
minetest.remove_node ( { x = p_top.x , y = p_top.y , z = p_top.z + 1 } )
minetest.remove_node ( { x = p_top.x - 1 , y = p_top.y + 1 , z = p_top.z } )
minetest.remove_node ( { x = p_top.x + 1 , y = p_top.y + 1 , z = p_top.z } )
minetest.remove_node ( { x = p_top.x , y = p_top.y + 1 , z = p_top.z - 1 } )
minetest.remove_node ( { x = p_top.x , y = p_top.y + 1 , z = p_top.z + 1 } )
end
if biome.spawn_replace_node then
minetest.remove_node ( pos )
end
local objtype = type ( nodes_or_function_or_model )
2014-09-27 18:54:04 +02:00
2014-09-24 09:17:03 +02:00
if objtype == " table " then
if nodes_or_function_or_model.axiom then
plantslib : generate_tree ( pos , nodes_or_function_or_model )
spawned = true
else
local fdir = nil
if biome.random_facedir then
fdir = math.random ( biome.random_facedir [ 1 ] , biome.random_facedir [ 2 ] )
end
minetest.set_node ( p_top , { name = nodes_or_function_or_model [ math.random ( # nodes_or_function_or_model ) ] , param2 = fdir } )
spawned = true
end
elseif objtype == " string " and
minetest.registered_nodes [ nodes_or_function_or_model ] then
local fdir = nil
if biome.random_facedir then
fdir = math.random ( biome.random_facedir [ 1 ] , biome.random_facedir [ 2 ] )
end
minetest.set_node ( p_top , { name = nodes_or_function_or_model , param2 = fdir } )
spawned = true
elseif objtype == " function " then
nodes_or_function_or_model ( pos )
spawned = true
elseif objtype == " string " and pcall ( loadstring ( ( " return %s(...) " ) :
format ( nodes_or_function_or_model ) ) , pos ) then
spawned = true
else
plantslib : dbg ( " Warning: Ignored invalid definition for object " .. dump ( nodes_or_function_or_model ) .. " that was pointed at { " .. dump ( pos ) .. " } " )
end
else
tries = tries + 1
end
end
end
end
end
2014-08-18 21:50:05 +02:00
-- Primary mapgen spawner, for mods that can work with air checking enabled on
-- a surface during the initial map read stage.
2014-09-24 09:52:07 +02:00
function plantslib : generate_block_with_air_checking ( dtime )
2015-02-09 05:27:58 +01:00
if dtime > 0.2 then return end -- don't attempt to populate if lag is too high
2014-09-24 09:52:07 +02:00
if # plantslib.blocklist_aircheck > 0 then
2013-03-09 22:47:58 +01:00
2014-09-24 09:52:07 +02:00
local minp = plantslib.blocklist_aircheck [ 1 ] [ 1 ]
local maxp = plantslib.blocklist_aircheck [ 1 ] [ 2 ]
2014-08-13 02:18:23 +02:00
2014-09-24 09:52:07 +02:00
-- use the block hash as a unique key into the surface nodes
-- tables, so that we can write the tables thread-safely.
2014-08-13 02:18:23 +02:00
2014-09-24 09:52:07 +02:00
local blockhash = minetest.hash_node_position ( minp )
2014-08-13 02:18:23 +02:00
2014-09-24 09:52:07 +02:00
if not plantslib.surface_nodes_aircheck . blockhash then
2014-08-15 05:12:43 +02:00
2015-02-27 17:48:51 +01:00
if type ( minetest.find_nodes_in_area_under_air ) == " function " then -- use newer API call
plantslib.surface_nodes_aircheck . blockhash =
minetest.find_nodes_in_area_under_air ( minp , maxp , plantslib.surfaceslist_aircheck )
else
local search_area = minetest.find_nodes_in_area ( minp , maxp , plantslib.surfaceslist_aircheck )
2014-09-24 09:52:07 +02:00
2015-02-27 17:48:51 +01:00
-- search the generated block for air-bounded surfaces the slow way.
2014-09-24 09:52:07 +02:00
2015-02-27 17:48:51 +01:00
plantslib.surface_nodes_aircheck . blockhash = { }
2014-09-24 09:52:07 +02:00
2015-02-27 17:48:51 +01:00
for i = 1 , # search_area do
local pos = search_area [ i ]
local p_top = { x = pos.x , y = pos.y + 1 , z = pos.z }
if minetest.get_node ( p_top ) . name == " air " then
plantslib.surface_nodes_aircheck . blockhash [ # plantslib.surface_nodes_aircheck . blockhash + 1 ] = pos
end
2014-09-24 09:52:07 +02:00
end
2013-01-19 08:10:26 +01:00
end
2014-09-24 09:52:07 +02:00
plantslib.actioncount_aircheck . blockhash = 1
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
2014-09-24 09:52:07 +02:00
else
if plantslib.actioncount_aircheck . blockhash <= # plantslib.actionslist_aircheck then
-- [1] is biome, [2] is node/function/model
plantslib : populate_surfaces (
plantslib.actionslist_aircheck [ plantslib.actioncount_aircheck . blockhash ] [ 1 ] ,
plantslib.actionslist_aircheck [ plantslib.actioncount_aircheck . blockhash ] [ 2 ] ,
plantslib.surface_nodes_aircheck . blockhash , true )
plantslib.actioncount_aircheck . blockhash = plantslib.actioncount_aircheck . blockhash + 1
else
if plantslib.surface_nodes_aircheck . blockhash then
table.remove ( plantslib.blocklist_aircheck , 1 )
plantslib.surface_nodes_aircheck . blockhash = nil
end
end
2013-01-19 06:45:46 +01:00
end
end
end
2014-09-24 09:17:03 +02:00
-- Secondary mapgen spawner, for mods that require disabling of
2014-08-18 21:50:05 +02:00
-- checking for air during the initial map read stage.
2014-09-24 09:52:07 +02:00
function plantslib : generate_block_no_aircheck ( dtime )
2015-02-09 05:27:58 +01:00
if dtime > 0.2 then return end
2014-09-24 09:52:07 +02:00
if # plantslib.blocklist_no_aircheck > 0 then
local minp = plantslib.blocklist_no_aircheck [ 1 ] [ 1 ]
local maxp = plantslib.blocklist_no_aircheck [ 1 ] [ 2 ]
local blockhash = minetest.hash_node_position ( minp )
2014-08-18 21:50:05 +02:00
2014-09-24 09:52:07 +02:00
if not plantslib.surface_nodes_no_aircheck . blockhash then
2014-08-18 21:50:05 +02:00
2014-09-24 09:52:07 +02:00
-- directly read the block to be searched into the chunk cache
2014-08-18 21:50:05 +02:00
2014-09-24 09:52:07 +02:00
plantslib.surface_nodes_no_aircheck . blockhash =
minetest.find_nodes_in_area ( minp , maxp , plantslib.surfaceslist_no_aircheck )
plantslib.actioncount_no_aircheck . blockhash = 1
2014-08-18 21:50:05 +02:00
2014-09-24 09:52:07 +02:00
else
if plantslib.actioncount_no_aircheck . blockhash <= # plantslib.actionslist_no_aircheck then
plantslib : populate_surfaces (
plantslib.actionslist_no_aircheck [ plantslib.actioncount_no_aircheck . blockhash ] [ 1 ] ,
plantslib.actionslist_no_aircheck [ plantslib.actioncount_no_aircheck . blockhash ] [ 2 ] ,
plantslib.surface_nodes_no_aircheck . blockhash , false )
plantslib.actioncount_no_aircheck . blockhash = plantslib.actioncount_no_aircheck . blockhash + 1
else
if plantslib.surface_nodes_no_aircheck . blockhash then
table.remove ( plantslib.blocklist_no_aircheck , 1 )
plantslib.surface_nodes_no_aircheck . blockhash = nil
end
end
2014-08-18 21:50:05 +02:00
end
end
end
2014-09-24 09:52:07 +02:00
-- "Record" the chunks being generated by the core mapgen
2014-08-18 21:50:05 +02:00
2014-09-24 09:52:07 +02:00
minetest.register_on_generated ( function ( minp , maxp , blockseed )
plantslib.blocklist_aircheck [ # plantslib.blocklist_aircheck + 1 ] = { minp , maxp }
end )
minetest.register_on_generated ( function ( minp , maxp , blockseed )
plantslib.blocklist_no_aircheck [ # plantslib.blocklist_no_aircheck + 1 ] = { minp , maxp }
end )
-- "Play" them back, populating them with new stuff in the process
2014-08-18 21:50:05 +02:00
2014-09-24 09:52:07 +02:00
minetest.register_globalstep ( function ( dtime )
plantslib : generate_block_with_air_checking ( dtime )
end )
minetest.register_globalstep ( function ( dtime )
plantslib : generate_block_no_aircheck ( dtime )
end )
2014-08-13 02:18:23 +02:00
2015-02-27 18:29:43 +01:00
-- Play out the entire log all at once on shutdown
-- to prevent unpopulated map areas
minetest.register_on_shutdown ( function ( )
print ( " [plants_lib] Stand by, playing out the rest of the aircheck mapblock log " )
print ( " (there are " .. # plantslib.blocklist_aircheck .. " entries)... " )
while true do
plantslib : generate_block_with_air_checking ( 0.1 )
if # plantslib.blocklist_aircheck == 0 then return end
end
end )
minetest.register_on_shutdown ( function ( )
print ( " [plants_lib] Stand by, playing out the rest of the no-aircheck mapblock log " )
print ( " (there are " .. # plantslib.blocklist_aircheck .. " entries)... " )
while true do
plantslib : generate_block_no_aircheck ( 0.1 )
if # plantslib.blocklist_no_aircheck == 0 then return end
end
end )
2012-12-05 01:29:23 +01:00
-- The spawning ABM
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
function plantslib : spawn_on_surfaces ( sd , sp , sr , sc , ss , sa )
local biome = { }
if type ( sd ) ~= " table " then
biome.spawn_delay = sd -- old api expects ABM interval param here.
biome.spawn_plants = { sp }
biome.avoid_radius = sr
biome.spawn_chance = sc
biome.spawn_surfaces = { ss }
biome.avoid_nodes = sa
else
biome = sd
end
2013-11-16 02:38:52 +01:00
if biome.spawn_delay * time_scale >= 1 then
biome.interval = biome.spawn_delay * time_scale
else
biome.interval = 1
end
2013-03-09 22:47:58 +01:00
plantslib : set_defaults ( biome )
2014-05-25 15:03:29 +02:00
biome.spawn_plants_count = # ( biome.spawn_plants )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
2012-12-05 01:29:23 +01:00
minetest.register_abm ( {
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
nodenames = biome.spawn_surfaces ,
2013-11-16 02:38:52 +01:00
interval = biome.interval ,
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
chance = biome.spawn_chance ,
neighbors = biome.neighbors ,
2012-12-05 01:29:23 +01:00
action = function ( pos , node , active_object_count , active_object_count_wider )
local p_top = { x = pos.x , y = pos.y + 1 , z = pos.z }
2013-07-01 05:55:07 +02:00
local n_top = minetest.get_node ( p_top )
2014-08-15 05:47:23 +02:00
local perlin_fertile_area = minetest.get_perlin ( biome.seed_diff , perlin_octaves , perlin_persistence , perlin_scale )
local noise1 = perlin_fertile_area : get2d ( { x = p_top.x , y = p_top.z } )
2013-02-23 06:34:03 +01:00
local noise2 = plantslib.perlin_temperature : get2d ( { x = p_top.x , y = p_top.z } )
local noise3 = plantslib.perlin_humidity : get2d ( { x = p_top.x + 150 , y = p_top.z + 50 } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
if noise1 > biome.plantlife_limit
and noise2 <= biome.temp_min
and noise2 >= biome.temp_max
2013-01-28 21:30:35 +01:00
and noise3 <= biome.humidity_min
and noise3 >= biome.humidity_max
2013-01-19 06:45:46 +01:00
and plantslib : is_node_loaded ( p_top ) then
2013-07-01 05:55:07 +02:00
local n_light = minetest.get_node_light ( p_top , nil )
2013-09-15 04:44:16 +02:00
if not ( biome.avoid_nodes and biome.avoid_radius and minetest.find_node_near ( p_top , biome.avoid_radius + math.random ( - 1.5 , 2 ) , biome.avoid_nodes ) )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
and n_light >= biome.light_min
and n_light <= biome.light_max
2014-05-25 15:03:29 +02:00
and ( not ( biome.neighbors and biome.ncount ) or # ( minetest.find_nodes_in_area ( { x = pos.x - 1 , y = pos.y , z = pos.z - 1 } , { x = pos.x + 1 , y = pos.y , z = pos.z + 1 } , biome.neighbors ) ) > biome.ncount )
and ( not ( biome.near_nodes and biome.near_nodes_count and biome.near_nodes_size ) or # ( minetest.find_nodes_in_area ( { x = pos.x - biome.near_nodes_size , y = pos.y - biome.near_nodes_vertical , z = pos.z - biome.near_nodes_size } , { x = pos.x + biome.near_nodes_size , y = pos.y + biome.near_nodes_vertical , z = pos.z + biome.near_nodes_size } , biome.near_nodes ) ) >= biome.near_nodes_count )
and ( not ( biome.air_count and biome.air_size ) or # ( minetest.find_nodes_in_area ( { x = p_top.x - biome.air_size , y = p_top.y , z = p_top.z - biome.air_size } , { x = p_top.x + biome.air_size , y = p_top.y , z = p_top.z + biome.air_size } , " air " ) ) >= biome.air_count )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
and pos.y >= biome.min_elevation
and pos.y <= biome.max_elevation
then
2015-02-17 04:22:51 +01:00
local walldir = plantslib : find_adjacent_wall ( p_top , biome.verticals_list , biome.choose_random_wall )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
if biome.alt_wallnode and walldir then
if n_top.name == " air " then
2014-08-16 01:34:15 +02:00
minetest.set_node ( p_top , { name = biome.alt_wallnode , param2 = walldir } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
end
else
2013-07-01 05:55:07 +02:00
local currentsurface = minetest.get_node ( pos ) . name
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
if currentsurface ~= " default:water_source "
2014-05-25 15:03:29 +02:00
or ( currentsurface == " default:water_source " and # ( minetest.find_nodes_in_area ( { x = pos.x , y = pos.y - biome.depth_max - 1 , z = pos.z } , { x = pos.x , y = pos.y , z = pos.z } , { " default:dirt " , " default:dirt_with_grass " , " default:sand " } ) ) > 0 )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
then
local rnd = math.random ( 1 , biome.spawn_plants_count )
local plant_to_spawn = biome.spawn_plants [ rnd ]
2013-03-09 22:47:58 +01:00
local fdir = biome.facedir
if biome.random_facedir then
fdir = math.random ( biome.random_facedir [ 1 ] , biome.random_facedir [ 2 ] )
end
2014-11-20 17:14:20 +01:00
if type ( biome.spawn_plants ) == " string " then
assert ( loadstring ( biome.spawn_plants .. " (...) " ) ) ( pos )
2013-01-29 22:22:33 +01:00
elseif not biome.spawn_on_side and not biome.spawn_on_bottom and not biome.spawn_replace_node then
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
if n_top.name == " air " then
2014-08-16 01:34:15 +02:00
minetest.set_node ( p_top , { name = plant_to_spawn , param2 = fdir } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
end
2013-01-28 21:30:35 +01:00
elseif biome.spawn_replace_node then
2014-08-16 01:34:15 +02:00
minetest.set_node ( pos , { name = plant_to_spawn , param2 = fdir } )
2013-01-29 22:22:33 +01:00
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
elseif biome.spawn_on_side then
local onside = plantslib : find_open_side ( pos )
if onside then
2014-08-16 01:34:15 +02:00
minetest.set_node ( onside.newpos , { name = plant_to_spawn , param2 = onside.facedir } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
end
elseif biome.spawn_on_bottom then
2013-07-01 05:55:07 +02:00
if minetest.get_node ( { x = pos.x , y = pos.y - 1 , z = pos.z } ) . name == " air " then
2014-08-16 01:34:15 +02:00
minetest.set_node ( { x = pos.x , y = pos.y - 1 , z = pos.z } , { name = plant_to_spawn , param2 = fdir } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
end
2012-12-29 23:24:47 +01:00
end
2012-12-05 01:29:23 +01:00
end
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
end
2012-12-05 01:29:23 +01:00
end
end
end
} )
end
-- The growing ABM
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
function plantslib : grow_plants ( opts )
local options = opts
2013-03-09 22:47:58 +01:00
options.height_limit = options.height_limit or 5
options.ground_nodes = options.ground_nodes or { " default:dirt_with_grass " }
options.grow_nodes = options.grow_nodes or { " default:dirt_with_grass " }
options.seed_diff = options.seed_diff or 0
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
2013-11-16 02:38:52 +01:00
if options.grow_delay * time_scale >= 1 then
options.interval = options.grow_delay * time_scale
else
options.interval = 1
end
2012-12-05 01:29:23 +01:00
minetest.register_abm ( {
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
nodenames = { options.grow_plant } ,
2013-11-16 02:38:52 +01:00
interval = options.interval ,
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
chance = options.grow_chance ,
2012-12-05 01:29:23 +01:00
action = function ( pos , node , active_object_count , active_object_count_wider )
local p_top = { x = pos.x , y = pos.y + 1 , z = pos.z }
local p_bot = { x = pos.x , y = pos.y - 1 , z = pos.z }
2013-07-01 05:55:07 +02:00
local n_top = minetest.get_node ( p_top )
local n_bot = minetest.get_node ( p_bot )
local root_node = minetest.get_node ( { x = pos.x , y = pos.y - options.height_limit , z = pos.z } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
local walldir = nil
2013-02-23 06:34:03 +01:00
if options.need_wall and options.verticals_list then
2015-02-17 20:37:49 +01:00
walldir = plantslib : find_adjacent_wall ( p_top , options.verticals_list , options.choose_random_wall )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
end
if n_top.name == " air " and ( not options.need_wall or ( options.need_wall and walldir ) )
then
-- corner case for changing short junglegrass
-- to dry shrub in desert
if n_bot.name == options.dry_early_node and options.grow_plant == " junglegrass:short " then
2014-08-16 01:34:15 +02:00
minetest.set_node ( pos , { name = " default:dry_shrub " } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
elseif options.grow_vertically and walldir then
if plantslib : search_downward ( pos , options.height_limit , options.ground_nodes ) then
2014-08-16 01:34:15 +02:00
minetest.set_node ( p_top , { name = options.grow_plant , param2 = walldir } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
end
2013-01-10 03:33:37 +01:00
2013-02-23 06:34:03 +01:00
elseif not options.grow_result and not options.grow_function then
2013-07-01 05:55:07 +02:00
minetest.remove_node ( pos )
2013-01-10 03:33:37 +01:00
2013-01-20 19:37:58 +01:00
else
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
plantslib : replace_object ( pos , options.grow_result , options.grow_function , options.facedir , options.seed_diff )
2013-01-20 19:37:58 +01:00
end
2012-12-05 01:29:23 +01:00
end
end
} )
end
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
-- Function to decide how to replace a plant - either grow it, replace it with
-- a tree, run a function, or die with an error.
function plantslib : replace_object ( pos , replacement , grow_function , walldir , seeddiff )
local growtype = type ( grow_function )
if growtype == " table " then
2013-07-01 05:55:07 +02:00
minetest.remove_node ( pos )
2013-02-20 03:50:56 +01:00
plantslib : grow_tree ( pos , grow_function )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return
2014-05-25 00:30:12 +02:00
elseif growtype == " function " then
2014-08-15 05:47:23 +02:00
local perlin_fertile_area = minetest.get_perlin ( seeddiff , perlin_octaves , perlin_persistence , perlin_scale )
local noise1 = perlin_fertile_area : get2d ( { x = pos.x , y = pos.z } )
2014-05-25 00:30:12 +02:00
local noise2 = plantslib.perlin_temperature : get2d ( { x = pos.x , y = pos.z } )
grow_function ( pos , noise1 , noise2 , walldir )
return
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
elseif growtype == " string " then
2014-08-15 05:47:23 +02:00
local perlin_fertile_area = minetest.get_perlin ( seeddiff , perlin_octaves , perlin_persistence , perlin_scale )
local noise1 = perlin_fertile_area : get2d ( { x = pos.x , y = pos.z } )
2013-02-24 18:13:09 +01:00
local noise2 = plantslib.perlin_temperature : get2d ( { x = pos.x , y = pos.z } )
2014-05-25 00:30:12 +02:00
assert ( loadstring ( grow_function .. " (...) " ) ) ( pos , noise1 , noise2 , walldir )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return
elseif growtype == " nil " then
2014-08-16 01:34:15 +02:00
minetest.set_node ( pos , { name = replacement , param2 = walldir } )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return
elseif growtype ~= " nil " and growtype ~= " string " and growtype ~= " table " then
error ( " Invalid grow function " .. dump ( grow_function ) .. " used on object at ( " .. dump ( pos ) .. " ) " )
end
end
2012-12-05 01:29:23 +01:00
-- function to decide if a node has a wall that's in verticals_list{}
-- returns wall direction of valid node, or nil if invalid.
2015-02-17 04:22:51 +01:00
function plantslib : find_adjacent_wall ( pos , verticals , randomflag )
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
local verts = dump ( verticals )
2015-02-17 04:22:51 +01:00
if randomflag then
local walltab = { }
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
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return nil
2012-12-05 01:29:23 +01:00
end
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
-- Function to search downward from the given position, looking for the first
-- node that matches the ground table. Returns the new position, or nil if
-- height limit is exceeded before finding it.
2012-12-10 04:02:30 +01:00
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
function plantslib : search_downward ( pos , heightlimit , ground )
for i = 0 , heightlimit do
2013-07-01 05:55:07 +02:00
if string.find ( dump ( ground ) , minetest.get_node ( { x = pos.x , y = pos.y - i , z = pos.z } ) . name ) then
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return { x = pos.x , y = pos.y - i , z = pos.z }
2012-12-10 04:02:30 +01:00
end
end
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return false
2012-12-10 04:02:30 +01:00
end
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
function plantslib : find_open_side ( pos )
2013-07-01 05:55:07 +02:00
if minetest.get_node ( { x = pos.x - 1 , y = pos.y , z = pos.z } ) . name == " air " then
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return { newpos = { x = pos.x - 1 , y = pos.y , z = pos.z } , facedir = 2 }
end
2013-07-01 05:55:07 +02:00
if minetest.get_node ( { x = pos.x + 1 , y = pos.y , z = pos.z } ) . name == " air " then
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return { newpos = { x = pos.x + 1 , y = pos.y , z = pos.z } , facedir = 3 }
end
2013-07-01 05:55:07 +02:00
if minetest.get_node ( { x = pos.x , y = pos.y , z = pos.z - 1 } ) . name == " air " then
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return { newpos = { x = pos.x , y = pos.y , z = pos.z - 1 } , facedir = 4 }
end
2013-07-01 05:55:07 +02:00
if minetest.get_node ( { x = pos.x , y = pos.y , z = pos.z + 1 } ) . name == " air " then
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
return { newpos = { x = pos.x , y = pos.y , z = pos.z + 1 } , facedir = 5 }
end
return nil
end
2012-12-10 04:02:30 +01:00
2013-02-20 03:50:56 +01:00
-- spawn_tree() on generate is routed through here so that other mods can hook
-- into it.
2014-08-23 04:44:33 +02:00
function plantslib : generate_tree ( pos , nodes_or_function_or_model )
minetest.spawn_tree ( pos , nodes_or_function_or_model )
2013-02-20 03:50:56 +01:00
end
-- and this one's for the call used in the growing code
2014-08-23 04:44:33 +02:00
function plantslib : grow_tree ( pos , nodes_or_function_or_model )
minetest.spawn_tree ( pos , nodes_or_function_or_model )
2013-02-20 03:50:56 +01:00
end
2013-08-19 08:08:08 +02:00
-- Check for infinite stacks
if minetest.get_modpath ( " unified_inventory " ) or not minetest.setting_getbool ( " creative_mode " ) then
plantslib.expect_infinite_stacks = false
else
plantslib.expect_infinite_stacks = true
end
-- read a field from a node's definition
function plantslib : get_nodedef_field ( nodename , fieldname )
if not minetest.registered_nodes [ nodename ] then
return nil
end
return minetest.registered_nodes [ nodename ] [ fieldname ]
end
2013-03-09 22:47:58 +01:00
2014-08-15 21:51:03 +02:00
print ( " [Plants Lib] Loaded " )
minetest.after ( 0 , function ( )
2014-09-24 09:52:07 +02:00
print ( " [Plants Lib] Registered a total of " .. ( # plantslib.surfaceslist_aircheck ) + ( # plantslib.surfaceslist_no_aircheck ) .. " surface types to be evaluated, spread " )
print ( " [Plants Lib] across " .. # plantslib.actionslist_aircheck .. " actions with air-checking and " .. # plantslib.actionslist_no_aircheck .. " actions without. " )
2014-08-15 21:51:03 +02:00
end )