moretrees/init.lua
Vanessa Ezekowitz 1bd0afbc84 Working on adding a whole new set of trees to the mod
Most of the added code written by RealBadAngel
Also adds a couple of additional biome controls to jungle trees and conifers.
Also adds a text file describing the biome settings in a human-readable manner.

At present, this doesn't actually add anything new, it just refactors the
code to allow for more trees, and adds a bunch of biome definitions, tree
models, textures, etc. but no code to use them, yet.
2013-01-19 23:26:16 -05:00

150 lines
5.1 KiB
Lua

-- More trees!
--
-- This mod adds more types of trees to the game
--
-- Some of the node definitions and textures came from cisoun's conifers mod
-- and bas080's jungle trees mod.
--
-- Brought together into one mod and made L-systems compatible by Vanessa
-- Ezekowitz. Thrown together on 2013-01-09 :-)
--
-- Conifers and Jungle tree axioms/rules by Vanessa Ezekowitz, with the
-- latter having been tweaked by RealBadAngel, most others written by
-- RealBadAngel.
--
-- License: WTFPL for all parts (code and textures)
--
-- snow biomes mod uses this code to make biomes:
--
-- local perlin1 = env:get_perlin(112,3, 0.5, 150)
-- local test = perlin1:get2d({x=pos.x, y=pos.z})
-- if smooth and (test > 0.73 or (test > 0.43 and math.random(0,29) > (0.73 - test) * 100 )) then
-- in_biome = true
-- elseif not smooth and test > 0.53 then
-- in_biome = true
-- end
--
-- We'll just save this for possible later use ;-)
--
moretrees = {}
dofile(minetest.get_modpath("moretrees").."/crafts.lua")
dofile(minetest.get_modpath("moretrees").."/node_defs.lua")
dofile(minetest.get_modpath("moretrees").."/tree_models.lua")
dofile(minetest.get_modpath("moretrees").."/biome_defs.lua")
plantslib:register_generate_plant(moretrees.jungletree_biome, "moretrees:grow_jungletree")
plantslib:register_generate_plant(moretrees.conifer_biome, "moretrees:grow_conifer")
--plantslib:register_generate_plant(moretrees.palm_biome, moretrees.palm_model)
--------------------------
-- Other stuff
--
-- for backward compatibility with previous mods/code, jungle trees and
-- firs ("conifers") L-Systems definitions are established separately.
--
--------------------------
-- Code that spawns jungle trees and firs ("conifers")
moretrees.jt_axiom1 = "FFFA"
moretrees.jt_rules_a1 = "FFF[&&-FBf[&&&Ff]^^^Ff][&&+FBFf[&&&FFf]^^^Ff][&&---FBFf[&&&Ff]^^^Ff][&&+++FBFf[&&&Ff]^^^Ff]F/A"
moretrees.jt_rules_b1 = "[-Ff&f][+Ff&f]B"
moretrees.jt_axiom2 = "FFFFFA"
moretrees.jt_rules_a2 = "FFFFF[&&-FFFBF[&&&FFff]^^^FFf][&&+FFFBFF[&&&FFff]^^^FFf][&&---FFFBFF[&&&FFff]^^^FFf][&&+++FFFBFF[&&&FFff]^^^FFf]FF/A"
moretrees.jt_rules_b2 = "[-FFf&ff][+FFf&ff]B"
moretrees.ct_rules_a1 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
moretrees.ct_rules_b1 = "[-FBf][+FBf]"
moretrees.ct_rules_a2 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
moretrees.ct_rules_b2 = "[-fB][+fB]"
function moretrees:grow_jungletree(pos)
local r1 = math.random(2)
local r2 = math.random(3)
if r1 == 1 then
moretrees.jungletree_model.leaves2 = "jungletree:leaves_red"
else
moretrees.jungletree_model.leaves2 = "jungletree:leaves_yellow"
end
moretrees.jungletree_model.leaves2_chance = math.random(25, 75)
if r2 == 1 then
moretrees.jungletree_model.trunk_type = "single"
moretrees.jungletree_model.iterations = 2
moretrees.jungletree_model.axiom = moretrees.jt_axiom1
moretrees.jungletree_model.rules_a = moretrees.jt_rules_a1
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b1
elseif r2 == 2 then
moretrees.jungletree_model.trunk_type = "double"
moretrees.jungletree_model.iterations = 4
moretrees.jungletree_model.axiom = moretrees.jt_axiom2
moretrees.jungletree_model.rules_a = moretrees.jt_rules_a2
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
elseif r2 == 3 then
moretrees.jungletree_model.trunk_type = "crossed"
moretrees.jungletree_model.iterations = 4
moretrees.jungletree_model.axiom = moretrees.jt_axiom2
moretrees.jungletree_model.rules_a = moretrees.jt_rules_a2
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
end
minetest.env:remove_node(pos)
local leaves = minetest.env:find_nodes_in_area({x = pos.x-1, y = pos.y, z = pos.z-1}, {x = pos.x+1, y = pos.y+10, z = pos.z+1}, "default:leaves")
for leaf in ipairs(leaves) do
minetest.env:remove_node(leaves[leaf])
end
minetest.env:spawn_tree(pos, moretrees.jungletree_model)
end
function moretrees:grow_conifer(pos)
if math.random(2) == 1 then
moretrees.conifer_model.leaves="conifers:leaves"
else
moretrees.conifer_model.leaves="conifers:leaves_special"
end
if math.random(2) == 1 then
moretrees.conifer_model.rules_a = moretrees.ct_rules_a1
moretrees.conifer_model.rules_b = moretrees.ct_rules_b1
else
moretrees.conifer_model.rules_a = moretrees.ct_rules_a2
moretrees.conifer_model.rules_b = moretrees.ct_rules_b2
end
minetest.env:remove_node(pos)
local leaves = minetest.env:find_nodes_in_area({x = pos.x, y = pos.y, z = pos.z}, {x = pos.x, y = pos.y+5, z = pos.z}, "default:leaves")
for leaf in ipairs(leaves) do
minetest.env:remove_node(leaves[leaf])
end
minetest.env:spawn_tree(pos,moretrees.conifer_model)
end
-- Should we remove all the trees above the conifers altitude?
if CONIFERS_REMOVE_TREES == true then
minetest.register_abm({
nodenames = {
"default:tree",
"default:leaves"
},
interval = CONIFERS_RTREES_INTERVAL,
chance = CONIFERS_RTREES_CHANCE,
action = function(pos, node, _, _)
if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air"
and pos.y >= CONIFERS_ALTITUDE
then
minetest.env:add_node(pos , {name = "air"})
end
end
})
end
print("[Moretrees] Loaded (2013-01-18)")