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.
@ -1,16 +1,13 @@
|
|||||||
More trees!
|
More trees!
|
||||||
|
|
||||||
This mod adds more types of trees to the game
|
This mod adds a whole bunch of new types of trees to the game
|
||||||
at present, they consist of jungle trees and conifers
|
|
||||||
|
|
||||||
Much of the code here came from cisoun's conifers mod and bas080's
|
Much of the code here came from cisoun's conifers mod and bas080's
|
||||||
jungle trees mod.
|
jungle trees mod, and big contributions by RealBadAngel.
|
||||||
|
|
||||||
Brought together into one mod and made L-systems compatible by Vanessa
|
Brought together into one mod and made L-systems compatible by Vanessa
|
||||||
Ezekowitz.
|
Ezekowitz.
|
||||||
|
|
||||||
Jungle tree axioms/rules tweaked by RealBadAngel
|
|
||||||
|
|
||||||
License: WTFPL
|
License: WTFPL
|
||||||
|
|
||||||
Dependencies: plants_lib (or plantlife modpack), default
|
Dependencies: plants_lib (or plantlife modpack), default
|
||||||
|
148
biome_defs.lua
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
-- Example biome definition:
|
||||||
|
|
||||||
|
mytree_biome = {
|
||||||
|
surface = "default:dirt_with_grass", -- must grow on these nodes only
|
||||||
|
avoid_nodes = {"default:tree"}, -- avoid spawning near these
|
||||||
|
avoid_radius = 12, -- Keep this much room around the above avoid items
|
||||||
|
seed_diff = 12345, -- perlin seed-diff for "generally able to grow plants here" control
|
||||||
|
neighbors = "default:dirt_with_grass", -- this node must be adjacent to the node being spawned on
|
||||||
|
ncount = 8, -- and there must be this many of them
|
||||||
|
depth = 1, -- spawning surface must be no deeper than this
|
||||||
|
min_elevation = -5, -- minimum elevation to spawn on
|
||||||
|
max_elevation = 10, -- maximum elevation
|
||||||
|
near_nodes = {"default:water_source"}, -- trees will only spawn near these nodes
|
||||||
|
near_nodes_size = 10, -- within this radius of at least one of them
|
||||||
|
near_nodes_count = 20, -- there must ne this many of those nodes in the area
|
||||||
|
temp_min = 0.5, -- minimum allowable temperature (highest temperature map perlin value)
|
||||||
|
temp_max = 0.1, -- maximum allowable temperature (lowest perlin value)
|
||||||
|
}
|
||||||
|
]]--
|
||||||
|
|
||||||
|
moretrees.jungletree_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 12,
|
||||||
|
seed_diff = 329,
|
||||||
|
min_elevation = -5,
|
||||||
|
max_elevation = 10,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 15,
|
||||||
|
near_nodes_count = 10,
|
||||||
|
-- temp_min = 0.05,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.conifer_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 10,
|
||||||
|
seed_diff = 359,
|
||||||
|
min_elevation = 25,
|
||||||
|
temp_min = 0.9,
|
||||||
|
temp_max = 0.3,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.palm_biome = {
|
||||||
|
surface = "default:sand",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 5,
|
||||||
|
seed_diff = 330,
|
||||||
|
min_elevation = -1,
|
||||||
|
max_elevation = 1,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 15,
|
||||||
|
near_nodes_count = 10,
|
||||||
|
temp_min = 0.15,
|
||||||
|
temp_max = -0.15,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.apple_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 15,
|
||||||
|
seed_diff = 331,
|
||||||
|
min_elevation = 1,
|
||||||
|
max_elevation = 10,
|
||||||
|
temp_min = 0.1,
|
||||||
|
temp_max = -0.15,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.oak_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 15,
|
||||||
|
seed_diff = 332,
|
||||||
|
min_elevation = 0,
|
||||||
|
max_elevation = 10,
|
||||||
|
temp_min = 0.4,
|
||||||
|
temp_max = 0.2,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.sequoia_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 10,
|
||||||
|
seed_diff = 333,
|
||||||
|
min_elevation = 0,
|
||||||
|
max_elevation = 10,
|
||||||
|
temp_min = 1,
|
||||||
|
temp_max = -0.4,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.birch_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 5,
|
||||||
|
seed_diff = 334,
|
||||||
|
min_elevation = 10,
|
||||||
|
max_elevation = 15,
|
||||||
|
temp_min = 0.9,
|
||||||
|
temp_max = 0.3,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.spruce_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 10,
|
||||||
|
seed_diff = 335,
|
||||||
|
min_elevation = 20,
|
||||||
|
temp_min = 0.9,
|
||||||
|
temp_max = 0.7,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.pine_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 10,
|
||||||
|
seed_diff = 336,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 15,
|
||||||
|
near_nodes_count = 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.willow_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 20,
|
||||||
|
seed_diff = 337,
|
||||||
|
min_elevation = -5,
|
||||||
|
max_elevation = 5,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 15,
|
||||||
|
near_nodes_count = 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.rubber_biome = {
|
||||||
|
surface = "default:dirt_with_grass",
|
||||||
|
avoid_nodes = moretrees.avoidnodes,
|
||||||
|
avoid_radius = 20,
|
||||||
|
seed_diff = 338,
|
||||||
|
min_elevation = -5,
|
||||||
|
max_elevation = 5,
|
||||||
|
near_nodes = {"default:water_source"},
|
||||||
|
near_nodes_size = 15,
|
||||||
|
near_nodes_count = 10,
|
||||||
|
temp_min = -0.15,
|
||||||
|
}
|
||||||
|
|
408
init.lua
@ -1,15 +1,16 @@
|
|||||||
-- More trees!
|
-- More trees!
|
||||||
--
|
--
|
||||||
-- This mod adds more types of trees to the game
|
-- This mod adds more types of trees to the game
|
||||||
-- at present, they consist of jungle trees and conifers
|
|
||||||
--
|
--
|
||||||
-- Much of the node definitions here came from cisoun's conifers mod and
|
-- Some of the node definitions and textures came from cisoun's conifers mod
|
||||||
-- bas080's jungle trees mod.
|
-- and bas080's jungle trees mod.
|
||||||
--
|
--
|
||||||
-- Brought together into one mod and made L-systems compatible by Vanessa
|
-- Brought together into one mod and made L-systems compatible by Vanessa
|
||||||
-- Ezekowitz. Thrown together on 2013-01-09 :-)
|
-- Ezekowitz. Thrown together on 2013-01-09 :-)
|
||||||
--
|
--
|
||||||
-- Jungle tree axioms/rules tweaked by RealBadAngel
|
-- 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)
|
-- License: WTFPL for all parts (code and textures)
|
||||||
--
|
--
|
||||||
@ -24,192 +25,72 @@
|
|||||||
-- in_biome = true
|
-- in_biome = true
|
||||||
-- end
|
-- end
|
||||||
--
|
--
|
||||||
-- We'll just save this for later use ;-)
|
-- We'll just save this for possible later use ;-)
|
||||||
--
|
--
|
||||||
|
|
||||||
moretrees = {}
|
moretrees = {}
|
||||||
|
|
||||||
-- Jungletree init stuff:
|
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")
|
||||||
|
|
||||||
local JT_SPAWN_INTERVAL = 1000
|
plantslib:register_generate_plant(moretrees.jungletree_biome, "moretrees:grow_jungletree")
|
||||||
local JT_SPAWN_CHANCE = 100
|
plantslib:register_generate_plant(moretrees.conifer_biome, "moretrees:grow_conifer")
|
||||||
|
|
||||||
local JT_GROW_INTERVAL = 100
|
--plantslib:register_generate_plant(moretrees.palm_biome, moretrees.palm_model)
|
||||||
local JT_GROW_CHANCE = 10
|
|
||||||
|
|
||||||
local JT_RADIUS = 15
|
--------------------------
|
||||||
local JT_WATER_RADIUS = 15
|
-- Other stuff
|
||||||
local JT_WATER_COUNT = 10
|
--
|
||||||
|
-- for backward compatibility with previous mods/code, jungle trees and
|
||||||
|
-- firs ("conifers") L-Systems definitions are established separately.
|
||||||
|
--
|
||||||
|
--------------------------
|
||||||
|
|
||||||
local jungletree_seed_diff = plantslib.plantlife_seed_diff
|
-- Code that spawns jungle trees and firs ("conifers")
|
||||||
|
|
||||||
-- Conifers init stuff:
|
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"
|
||||||
|
|
||||||
local CONIFERS_SPAWN_SAPLING_INTERVAL = 1000
|
moretrees.jt_axiom2 = "FFFFFA"
|
||||||
local CONIFERS_SPAWN_SAPLING_CHANCE = 100
|
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"
|
||||||
|
|
||||||
local CONIFERS_GROW_SAPLING_INTERVAL = 100
|
moretrees.ct_rules_a1 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
|
||||||
local CONIFERS_GROW_SAPLING_CHANCE = 10
|
moretrees.ct_rules_b1 = "[-FBf][+FBf]"
|
||||||
|
|
||||||
local CONIFERS_DISTANCE = 9 -- how far apart should conifer saplings spawn?
|
moretrees.ct_rules_a2 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
|
||||||
local CONIFERS_ALTITUDE = 25
|
moretrees.ct_rules_b2 = "[-fB][+fB]"
|
||||||
|
|
||||||
local CONIFERS_REMOVE_TREES = false -- Remove trees above CONIFERS_ALTITUDE?
|
|
||||||
local CONIFERS_RTREES_INTERVAL = 360
|
|
||||||
local CONIFERS_RTREES_CHANCE = 10
|
|
||||||
|
|
||||||
local conifers_seed_diff = plantslib.plantlife_seed_diff + 30
|
|
||||||
|
|
||||||
-- Spawning functions
|
|
||||||
|
|
||||||
jungletrees_biome = {
|
|
||||||
surface = "default:dirt_with_grass", -- must grow on grass only
|
|
||||||
avoid = {"jungletree:sapling","default:jungletree"}, -- avoid spawning near these
|
|
||||||
radius = JT_RADIUS, -- Keep this much room around the above avoid items
|
|
||||||
seed_diff = jungletree_seed_diff, -- duh? :-)
|
|
||||||
neighbors = nil, -- we don't care about neighbors
|
|
||||||
ncount = nil, -- or the count thereof
|
|
||||||
depth = nil, -- or depth of the spawn surface
|
|
||||||
min_elevation = -5, -- must be 5m below sea level or higher
|
|
||||||
max_elevation = 10, -- but no higher than 10m
|
|
||||||
near_nodes = {"default:water_source"}, -- Jungle trees must be near water
|
|
||||||
near_nodes_size = JT_WATER_RADIUS, -- within this radius of it (default 25)
|
|
||||||
near_nodes_count = JT_WATER_COUNT, -- with this many water nodes in the area
|
|
||||||
temp_min = nil, -- don't care about temperature
|
|
||||||
temp_max = nil, -- at either end of the scale
|
|
||||||
exec_funct = "moretrees:grow_jungletree" -- name of the function to execute to grow a tree
|
|
||||||
}
|
|
||||||
|
|
||||||
conifers_biome = {
|
|
||||||
surface = "default:dirt_with_grass",
|
|
||||||
avoid = {"conifers:sapling", "conifers:trunk"},
|
|
||||||
radius = CONIFERS_DISTANCE,
|
|
||||||
seed_diff = conifers_seed_diff,
|
|
||||||
neighbors = nil,
|
|
||||||
ncount = nil,
|
|
||||||
depth = nil,
|
|
||||||
min_elevation = CONIFERS_ALTITUDE,
|
|
||||||
max_elevation = nil,
|
|
||||||
near_nodes = nil,
|
|
||||||
near_nodes_size = nil,
|
|
||||||
near_nodes_count = nil,
|
|
||||||
temp_min = nil,
|
|
||||||
temp_max = nil,
|
|
||||||
exec_funct = "moretrees:grow_conifer"
|
|
||||||
}
|
|
||||||
|
|
||||||
plantslib:register_generate_plant(jungletrees_biome)
|
|
||||||
plantslib:register_generate_plant(conifers_biome)
|
|
||||||
|
|
||||||
-- growing functions
|
|
||||||
|
|
||||||
plantslib:grow_plants(
|
|
||||||
JT_GROW_INTERVAL,
|
|
||||||
JT_GROW_CHANCE,
|
|
||||||
"jungletree:sapling",
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
"moretrees:grow_jungletree",
|
|
||||||
jungletree_seed_diff
|
|
||||||
)
|
|
||||||
|
|
||||||
plantslib:grow_plants(
|
|
||||||
CONIFERS_GROW_SAPLING_INTERVAL,
|
|
||||||
CONIFERS_GROW_SAPLING_CHANCE,
|
|
||||||
"conifers:sapling",
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
"moretrees:grow_conifer",
|
|
||||||
conifers_seed_diff
|
|
||||||
)
|
|
||||||
|
|
||||||
-- L-System Tree definitions
|
|
||||||
|
|
||||||
local jungle_tree={
|
|
||||||
axiom=nil,
|
|
||||||
rules_a=nil,
|
|
||||||
rules_b=nil,
|
|
||||||
trunk="default:jungletree",
|
|
||||||
leaves="jungletree:leaves_green",
|
|
||||||
leaves2=nil,
|
|
||||||
leaves2_chance=nil,
|
|
||||||
angle=45,
|
|
||||||
iterations=nil,
|
|
||||||
random_level=2,
|
|
||||||
trunk_type=nil,
|
|
||||||
thin_branches=true;
|
|
||||||
fruit_chance=15,
|
|
||||||
fruit="vines:vine"
|
|
||||||
}
|
|
||||||
|
|
||||||
local jt_axiom1 = "FFFA"
|
|
||||||
local jt_rules_a1 = "FFF[&&-FBf[&&&Ff]^^^Ff][&&+FBFf[&&&FFf]^^^Ff][&&---FBFf[&&&Ff]^^^Ff][&&+++FBFf[&&&Ff]^^^Ff]F/A"
|
|
||||||
local jt_rules_b1 = "[-Ff&f][+Ff&f]B"
|
|
||||||
|
|
||||||
local jt_axiom2 = "FFFFFA"
|
|
||||||
local jt_rules_a2 = "FFFFF[&&-FFFBF[&&&FFff]^^^FFf][&&+FFFBFF[&&&FFff]^^^FFf][&&---FFFBFF[&&&FFff]^^^FFf][&&+++FFFBFF[&&&FFff]^^^FFf]FF/A"
|
|
||||||
local jt_rules_b2 = "[-FFf&ff][+FFf&ff]B"
|
|
||||||
|
|
||||||
local conifer_tree={
|
|
||||||
axiom="FFFAF[&&-F][&&+F][&&---F][&&+++F]Fff",
|
|
||||||
rules_a=nil,
|
|
||||||
rules_b=nil,
|
|
||||||
trunk="conifers:trunk",
|
|
||||||
leaves=nil,
|
|
||||||
angle=45,
|
|
||||||
iterations=7,
|
|
||||||
random_level=5,
|
|
||||||
thin_trunks=true
|
|
||||||
}
|
|
||||||
|
|
||||||
local ct_rules_a1 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
|
|
||||||
local ct_rules_b1 = "[-FBf][+FBf]"
|
|
||||||
|
|
||||||
local ct_rules_a2 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A"
|
|
||||||
local ct_rules_b2 = "[-fB][+fB]"
|
|
||||||
|
|
||||||
-- Code that actually spawns the trees!
|
|
||||||
|
|
||||||
function moretrees:grow_jungletree(pos)
|
function moretrees:grow_jungletree(pos)
|
||||||
local r1 = math.random(2)
|
local r1 = math.random(2)
|
||||||
local r2 = math.random(3)
|
local r2 = math.random(3)
|
||||||
if r1 == 1 then
|
if r1 == 1 then
|
||||||
jungle_tree["leaves2"] = "jungletree:leaves_red"
|
moretrees.jungletree_model.leaves2 = "jungletree:leaves_red"
|
||||||
else
|
else
|
||||||
jungle_tree["leaves2"] = "jungletree:leaves_yellow"
|
moretrees.jungletree_model.leaves2 = "jungletree:leaves_yellow"
|
||||||
end
|
end
|
||||||
jungle_tree["leaves2_chance"] = math.random(25, 75)
|
moretrees.jungletree_model.leaves2_chance = math.random(25, 75)
|
||||||
|
|
||||||
if r2 == 1 then
|
if r2 == 1 then
|
||||||
jungle_tree["trunk_type"] = "single"
|
moretrees.jungletree_model.trunk_type = "single"
|
||||||
jungle_tree["iterations"] = 2
|
moretrees.jungletree_model.iterations = 2
|
||||||
jungle_tree["axiom"] = jt_axiom1
|
moretrees.jungletree_model.axiom = moretrees.jt_axiom1
|
||||||
jungle_tree["rules_a"] = jt_rules_a1
|
moretrees.jungletree_model.rules_a = moretrees.jt_rules_a1
|
||||||
jungle_tree["rules_b"] = jt_rules_b1
|
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b1
|
||||||
elseif r2 == 2 then
|
elseif r2 == 2 then
|
||||||
jungle_tree["trunk_type"] = "double"
|
moretrees.jungletree_model.trunk_type = "double"
|
||||||
jungle_tree["iterations"] = 4
|
moretrees.jungletree_model.iterations = 4
|
||||||
jungle_tree["axiom"] = jt_axiom2
|
moretrees.jungletree_model.axiom = moretrees.jt_axiom2
|
||||||
jungle_tree["rules_a"] = jt_rules_a2
|
moretrees.jungletree_model.rules_a = moretrees.jt_rules_a2
|
||||||
jungle_tree["rules_b"] = jt_rules_b2
|
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
|
||||||
elseif r2 == 3 then
|
elseif r2 == 3 then
|
||||||
jungle_tree["trunk_type"] = "crossed"
|
moretrees.jungletree_model.trunk_type = "crossed"
|
||||||
jungle_tree["iterations"] = 4
|
moretrees.jungletree_model.iterations = 4
|
||||||
jungle_tree["axiom"] = jt_axiom2
|
moretrees.jungletree_model.axiom = moretrees.jt_axiom2
|
||||||
jungle_tree["rules_a"] = jt_rules_a2
|
moretrees.jungletree_model.rules_a = moretrees.jt_rules_a2
|
||||||
jungle_tree["rules_b"] = jt_rules_b2
|
moretrees.jungletree_model.rules_b = moretrees.jt_rules_b2
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.env:remove_node(pos)
|
minetest.env:remove_node(pos)
|
||||||
@ -217,21 +98,21 @@ function moretrees:grow_jungletree(pos)
|
|||||||
for leaf in ipairs(leaves) do
|
for leaf in ipairs(leaves) do
|
||||||
minetest.env:remove_node(leaves[leaf])
|
minetest.env:remove_node(leaves[leaf])
|
||||||
end
|
end
|
||||||
minetest.env:spawn_tree(pos,jungle_tree)
|
minetest.env:spawn_tree(pos, moretrees.jungletree_model)
|
||||||
end
|
end
|
||||||
|
|
||||||
function moretrees:grow_conifer(pos)
|
function moretrees:grow_conifer(pos)
|
||||||
if math.random(2) == 1 then
|
if math.random(2) == 1 then
|
||||||
conifer_tree["leaves"]="conifers:leaves"
|
moretrees.conifer_model.leaves="conifers:leaves"
|
||||||
else
|
else
|
||||||
conifer_tree["leaves"]="conifers:leaves_special"
|
moretrees.conifer_model.leaves="conifers:leaves_special"
|
||||||
end
|
end
|
||||||
if math.random(2) == 1 then
|
if math.random(2) == 1 then
|
||||||
conifer_tree["rules_a"] = ct_rules_a1
|
moretrees.conifer_model.rules_a = moretrees.ct_rules_a1
|
||||||
conifer_tree["rules_b"] = ct_rules_b1
|
moretrees.conifer_model.rules_b = moretrees.ct_rules_b1
|
||||||
else
|
else
|
||||||
conifer_tree["rules_a"] = ct_rules_a2
|
moretrees.conifer_model.rules_a = moretrees.ct_rules_a2
|
||||||
conifer_tree["rules_b"] = ct_rules_b2
|
moretrees.conifer_model.rules_b = moretrees.ct_rules_b2
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.env:remove_node(pos)
|
minetest.env:remove_node(pos)
|
||||||
@ -239,12 +120,13 @@ function moretrees:grow_conifer(pos)
|
|||||||
for leaf in ipairs(leaves) do
|
for leaf in ipairs(leaves) do
|
||||||
minetest.env:remove_node(leaves[leaf])
|
minetest.env:remove_node(leaves[leaf])
|
||||||
end
|
end
|
||||||
minetest.env:spawn_tree(pos,conifer_tree)
|
minetest.env:spawn_tree(pos,moretrees.conifer_model)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Other stuff
|
|
||||||
|
|
||||||
-- Should we remove all the trees above the conifers altitude?
|
-- Should we remove all the trees above the conifers altitude?
|
||||||
|
|
||||||
if CONIFERS_REMOVE_TREES == true then
|
if CONIFERS_REMOVE_TREES == true then
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = {
|
nodenames = {
|
||||||
@ -264,176 +146,4 @@ if CONIFERS_REMOVE_TREES == true then
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Nodes for jungle trees
|
|
||||||
|
|
||||||
minetest.register_node(":jungletree:sapling", {
|
|
||||||
description = "Jungle Tree Sapling",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
visual_scale = 1.0,
|
|
||||||
tiles = {"jungletree_sapling.png"},
|
|
||||||
inventory_image = "jungletree_sapling.png",
|
|
||||||
wield_image = "default_sapling.png",
|
|
||||||
paramtype = "light",
|
|
||||||
walkable = false,
|
|
||||||
groups = {snappy=2,dig_immediate=3,flammable=2},
|
|
||||||
})
|
|
||||||
|
|
||||||
local leaves = {"green","yellow","red"}
|
|
||||||
for color = 1, 3 do
|
|
||||||
local leave_name = ":jungletree:leaves_"..leaves[color]
|
|
||||||
minetest.register_node(leave_name, {
|
|
||||||
description = "Jungle Tree Leaves",
|
|
||||||
drawtype = "allfaces_optional",
|
|
||||||
tiles = {"jungletree_leaves_"..leaves[color]..".png"},
|
|
||||||
paramtype = "light",
|
|
||||||
groups = {snappy=3, leafdecay=3, flammable=2},
|
|
||||||
drop = {
|
|
||||||
max_items = 1,
|
|
||||||
items = {
|
|
||||||
{
|
|
||||||
-- player will get sapling with 1/20 chance
|
|
||||||
items = {'jungletree:sapling'},
|
|
||||||
rarity = 20,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-- player will get leaves only if he get no saplings,
|
|
||||||
-- this is because max_items is 1
|
|
||||||
items = {"jungletree:leaves_"..leaves[color]},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Nodes for conifers
|
|
||||||
|
|
||||||
minetest.register_node(":conifers:trunk", {
|
|
||||||
description = "Conifer trunk",
|
|
||||||
tile_images = {
|
|
||||||
"conifers_trunktop.png",
|
|
||||||
"conifers_trunktop.png",
|
|
||||||
"conifers_trunk.png",
|
|
||||||
"conifers_trunk.png",
|
|
||||||
"conifers_trunk.png",
|
|
||||||
"conifers_trunk.png"
|
|
||||||
},
|
|
||||||
paramtype = "facedir_simple",
|
|
||||||
is_ground_content = true,
|
|
||||||
groups = {
|
|
||||||
tree = 1,
|
|
||||||
snappy = 2,
|
|
||||||
choppy = 2,
|
|
||||||
oddly_breakable_by_hand = 1,
|
|
||||||
flammable = 2
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_wood_defaults()
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":conifers:trunk_reversed", {
|
|
||||||
description = "Conifer reversed trunk",
|
|
||||||
tile_images = {
|
|
||||||
"conifers_trunk_reversed.png",
|
|
||||||
"conifers_trunk_reversed.png",
|
|
||||||
"conifers_trunktop.png",
|
|
||||||
"conifers_trunktop.png",
|
|
||||||
"conifers_trunk_reversed.png",
|
|
||||||
"conifers_trunk_reversed.png"
|
|
||||||
},
|
|
||||||
--inventory_image = minetest.inventorycube(
|
|
||||||
--"conifers_trunk.png",
|
|
||||||
--"conifers_trunktop.png",
|
|
||||||
--"conifers_trunk.png"
|
|
||||||
--),
|
|
||||||
paramtype = "facedir_simple",
|
|
||||||
material = minetest.digprop_woodlike(1.0),
|
|
||||||
legacy_facedir_simple = true,
|
|
||||||
is_ground_content = true,
|
|
||||||
groups = {
|
|
||||||
tree = 1,
|
|
||||||
snappy = 2,
|
|
||||||
choppy = 2,
|
|
||||||
oddly_breakable_by_hand = 1,
|
|
||||||
flammable = 2
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_wood_defaults()
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":conifers:leaves", {
|
|
||||||
description = "Conifer leaves",
|
|
||||||
drawtype = "allfaces_optional",
|
|
||||||
visual_scale = 1.3,
|
|
||||||
tile_images = { "conifers_leaves.png" },
|
|
||||||
paramtype = "light",
|
|
||||||
groups = {
|
|
||||||
snappy = 3,
|
|
||||||
leafdecay = 3,
|
|
||||||
flammable = 2
|
|
||||||
},
|
|
||||||
drop = {
|
|
||||||
max_items = 1,
|
|
||||||
items = {
|
|
||||||
{
|
|
||||||
-- player will get sapling with 1/20 chance
|
|
||||||
items = {'conifers:sapling'},
|
|
||||||
rarity = 20,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-- player will get leaves only if he get no saplings,
|
|
||||||
-- this is because max_items is 1
|
|
||||||
items = {'conifers:leaves'},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_leaves_defaults()
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":conifers:leaves_special", {
|
|
||||||
description = "Bright conifer leaves",
|
|
||||||
drawtype = "allfaces_optional",
|
|
||||||
visual_scale = 1.3,
|
|
||||||
tile_images = { "conifers_leaves_special.png" },
|
|
||||||
paramtype = "light",
|
|
||||||
groups = {
|
|
||||||
snappy = 3,
|
|
||||||
leafdecay = 3,
|
|
||||||
flammable = 2
|
|
||||||
},
|
|
||||||
drop = {
|
|
||||||
max_items = 1,
|
|
||||||
items = {
|
|
||||||
{
|
|
||||||
-- player will get sapling with 1/20 chance
|
|
||||||
items = {'conifers:sapling'},
|
|
||||||
rarity = 20,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
-- player will get leaves only if he get no saplings,
|
|
||||||
-- this is because max_items is 1
|
|
||||||
items = {'conifers:leaves'},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_leaves_defaults()
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":conifers:sapling", {
|
|
||||||
description = "Conifer sapling",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
visual_scale = 1.0,
|
|
||||||
tile_images = {"conifers_sapling.png"},
|
|
||||||
inventory_image = "conifers_sapling.png",
|
|
||||||
wield_image = "conifers_sapling.png",
|
|
||||||
paramtype = "light",
|
|
||||||
walkable = false,
|
|
||||||
groups = {
|
|
||||||
snappy = 2,
|
|
||||||
dig_immediate = 3,
|
|
||||||
flammable = 2
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
dofile(minetest.get_modpath("moretrees").."/crafts.lua")
|
|
||||||
|
|
||||||
print("[Moretrees] Loaded (2013-01-18)")
|
print("[Moretrees] Loaded (2013-01-18)")
|
||||||
|
287
node_defs.lua
Normal file
@ -0,0 +1,287 @@
|
|||||||
|
leaves = {
|
||||||
|
{"beech", "Beech Leaves"},
|
||||||
|
{"apple_tree", "Apple Tree Leaves"},
|
||||||
|
{"oak", "Oak Leaves"},
|
||||||
|
{"sequoia", "Sequoia Needles"},
|
||||||
|
{"birch", "Birch Leaves"},
|
||||||
|
{"palm", "Palm Leaves"},
|
||||||
|
{"spruce", "Spruce Needles"},
|
||||||
|
{"pine", "Pine Needles"},
|
||||||
|
{"willow", "Willow Leaves"},
|
||||||
|
{"rubber_tree", "Rubber Tree Leaves"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in ipairs(leaves) do
|
||||||
|
local name = leaves[i]
|
||||||
|
minetest.register_node("moretrees:"..leaves[i][1].."_leaves", {
|
||||||
|
description = leaves[i][2],
|
||||||
|
drawtype = "allfaces_optional",
|
||||||
|
visual_scale = 1.3,
|
||||||
|
tiles = { "moretrees_"..leaves[i][1].."_leaves.png" },
|
||||||
|
paramtype = "light",
|
||||||
|
groups = {tree=1, snappy=3, flammable=2},
|
||||||
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
trees = {
|
||||||
|
{"beech", "Beech", nil, nil, nil },
|
||||||
|
{"apple_tree", "Apple Tree", nil, nil, nil },
|
||||||
|
{"oak", "Oak", "acorn", "Acorn", {-0.2, -0.5, -0.2, 0.2, 0, 0.2} },
|
||||||
|
{"sequoia", "Sequoia", nil, nil, nil },
|
||||||
|
{"birch", "Birch", nil, nil, nil },
|
||||||
|
{"palm", "Palm", "coconut", "Coconut", {-0.2, -0.5, -0.2, 0.2, 0, 0.2} },
|
||||||
|
{"spruce", "Spruce", "spruce_cone", "Spruce Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2} },
|
||||||
|
{"pine", "Pine", "pine_cone", "Pine Cone", {-0.2, -0.5, -0.2, 0.2, 0, 0.2} },
|
||||||
|
{"willow", "Willow", nil, nil, nil },
|
||||||
|
{"rubber_tree", "Rubber Tree", nil, nil, nil },
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.avoidnodes = {}
|
||||||
|
|
||||||
|
table.insert(moretrees.avoidnodes, "default:jungletree")
|
||||||
|
table.insert(moretrees.avoidnodes, "jungletree:sapling")
|
||||||
|
table.insert(moretrees.avoidnodes, "conifers:trunk")
|
||||||
|
table.insert(moretrees.avoidnodes, "conifers:sapling")
|
||||||
|
|
||||||
|
for i in ipairs(trees) do
|
||||||
|
local treename = trees[i][1]
|
||||||
|
local treedesc = trees[i][2]
|
||||||
|
local fruit = trees[i][3]
|
||||||
|
local fruitdesc = trees[i][4]
|
||||||
|
local selbox = trees[i][5]
|
||||||
|
|
||||||
|
table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_trunk")
|
||||||
|
table.insert(moretrees.avoidnodes, "moretrees:"..treename.."_sapling")
|
||||||
|
|
||||||
|
minetest.register_node("moretrees:"..treename.."_trunk", {
|
||||||
|
description = treedesc.." Trunk",
|
||||||
|
tiles = {
|
||||||
|
"moretrees_"..treename.."_top.png",
|
||||||
|
"moretrees_"..treename.."_top.png",
|
||||||
|
"moretrees_"..treename..".png"
|
||||||
|
},
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("moretrees:"..treename.."_planks", {
|
||||||
|
description = treedesc.." Planks",
|
||||||
|
tiles = {"moretrees_"..treename.."_wood.png"},
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("moretrees:"..treename.."_sapling", {
|
||||||
|
description = treedesc.." Sapling",
|
||||||
|
drawtype = "plantlike",
|
||||||
|
visual_scale = 1.0,
|
||||||
|
tiles = {"moretrees_"..treename.."_sapling.png"},
|
||||||
|
inventory_image = "moretrees_"..treename.."_sapling.png",
|
||||||
|
wield_image = "moretrees_"..treename.."_sapling.png",
|
||||||
|
paramtype = "light",
|
||||||
|
walkable = false,
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
||||||
|
},
|
||||||
|
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
|
||||||
|
sounds = default.node_sound_defaults(),
|
||||||
|
})
|
||||||
|
|
||||||
|
if (fruit ~= nil) then
|
||||||
|
minetest.register_node("moretrees:"..fruit, {
|
||||||
|
description = fruitdesc,
|
||||||
|
drawtype = "plantlike",
|
||||||
|
visual_scale = 0.8,
|
||||||
|
tiles = { "moretrees_"..fruit..".png" },
|
||||||
|
inventory_image = "moretrees_"..fruit..".png",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
walkable = false,
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = selbox
|
||||||
|
},
|
||||||
|
groups = {fleshy=3,dig_immediate=3,flammable=2},
|
||||||
|
sounds = default.node_sound_defaults(),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- For backward compatibility, jungle trees and firs ("conifers") are defined
|
||||||
|
--- separately.
|
||||||
|
|
||||||
|
-- Nodes for jungle trees
|
||||||
|
|
||||||
|
minetest.register_node(":jungletree:sapling", {
|
||||||
|
description = "Jungle Tree Sapling",
|
||||||
|
drawtype = "plantlike",
|
||||||
|
visual_scale = 1.0,
|
||||||
|
tiles = {"jungletree_sapling.png"},
|
||||||
|
inventory_image = "jungletree_sapling.png",
|
||||||
|
wield_image = "default_sapling.png",
|
||||||
|
paramtype = "light",
|
||||||
|
walkable = false,
|
||||||
|
groups = {snappy=2,dig_immediate=3,flammable=2},
|
||||||
|
})
|
||||||
|
|
||||||
|
local leaves = {"green","yellow","red"}
|
||||||
|
for color = 1, 3 do
|
||||||
|
local leave_name = ":jungletree:leaves_"..leaves[color]
|
||||||
|
minetest.register_node(leave_name, {
|
||||||
|
description = "Jungle Tree Leaves",
|
||||||
|
drawtype = "allfaces_optional",
|
||||||
|
tiles = {"jungletree_leaves_"..leaves[color]..".png"},
|
||||||
|
paramtype = "light",
|
||||||
|
groups = {snappy=3, leafdecay=3, flammable=2},
|
||||||
|
drop = {
|
||||||
|
max_items = 1,
|
||||||
|
items = {
|
||||||
|
{
|
||||||
|
-- player will get sapling with 1/20 chance
|
||||||
|
items = {'jungletree:sapling'},
|
||||||
|
rarity = 20,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-- player will get leaves only if he get no saplings,
|
||||||
|
-- this is because max_items is 1
|
||||||
|
items = {"jungletree:leaves_"..leaves[color]},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Nodes for conifers
|
||||||
|
|
||||||
|
minetest.register_node(":conifers:trunk", {
|
||||||
|
description = "Conifer trunk",
|
||||||
|
tile_images = {
|
||||||
|
"conifers_trunktop.png",
|
||||||
|
"conifers_trunktop.png",
|
||||||
|
"conifers_trunk.png",
|
||||||
|
"conifers_trunk.png",
|
||||||
|
"conifers_trunk.png",
|
||||||
|
"conifers_trunk.png"
|
||||||
|
},
|
||||||
|
paramtype = "facedir_simple",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {
|
||||||
|
tree = 1,
|
||||||
|
snappy = 2,
|
||||||
|
choppy = 2,
|
||||||
|
oddly_breakable_by_hand = 1,
|
||||||
|
flammable = 2
|
||||||
|
},
|
||||||
|
sounds = default.node_sound_wood_defaults()
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node(":conifers:trunk_reversed", {
|
||||||
|
description = "Conifer reversed trunk",
|
||||||
|
tile_images = {
|
||||||
|
"conifers_trunk_reversed.png",
|
||||||
|
"conifers_trunk_reversed.png",
|
||||||
|
"conifers_trunktop.png",
|
||||||
|
"conifers_trunktop.png",
|
||||||
|
"conifers_trunk_reversed.png",
|
||||||
|
"conifers_trunk_reversed.png"
|
||||||
|
},
|
||||||
|
--inventory_image = minetest.inventorycube(
|
||||||
|
--"conifers_trunk.png",
|
||||||
|
--"conifers_trunktop.png",
|
||||||
|
--"conifers_trunk.png"
|
||||||
|
--),
|
||||||
|
paramtype = "facedir_simple",
|
||||||
|
material = minetest.digprop_woodlike(1.0),
|
||||||
|
legacy_facedir_simple = true,
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {
|
||||||
|
tree = 1,
|
||||||
|
snappy = 2,
|
||||||
|
choppy = 2,
|
||||||
|
oddly_breakable_by_hand = 1,
|
||||||
|
flammable = 2
|
||||||
|
},
|
||||||
|
sounds = default.node_sound_wood_defaults()
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node(":conifers:leaves", {
|
||||||
|
description = "Conifer leaves",
|
||||||
|
drawtype = "allfaces_optional",
|
||||||
|
visual_scale = 1.3,
|
||||||
|
tile_images = { "conifers_leaves.png" },
|
||||||
|
paramtype = "light",
|
||||||
|
groups = {
|
||||||
|
snappy = 3,
|
||||||
|
leafdecay = 3,
|
||||||
|
flammable = 2
|
||||||
|
},
|
||||||
|
drop = {
|
||||||
|
max_items = 1,
|
||||||
|
items = {
|
||||||
|
{
|
||||||
|
-- player will get sapling with 1/20 chance
|
||||||
|
items = {'conifers:sapling'},
|
||||||
|
rarity = 20,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-- player will get leaves only if he get no saplings,
|
||||||
|
-- this is because max_items is 1
|
||||||
|
items = {'conifers:leaves'},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sounds = default.node_sound_leaves_defaults()
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node(":conifers:leaves_special", {
|
||||||
|
description = "Bright conifer leaves",
|
||||||
|
drawtype = "allfaces_optional",
|
||||||
|
visual_scale = 1.3,
|
||||||
|
tile_images = { "conifers_leaves_special.png" },
|
||||||
|
paramtype = "light",
|
||||||
|
groups = {
|
||||||
|
snappy = 3,
|
||||||
|
leafdecay = 3,
|
||||||
|
flammable = 2
|
||||||
|
},
|
||||||
|
drop = {
|
||||||
|
max_items = 1,
|
||||||
|
items = {
|
||||||
|
{
|
||||||
|
-- player will get sapling with 1/20 chance
|
||||||
|
items = {'conifers:sapling'},
|
||||||
|
rarity = 20,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-- player will get leaves only if he get no saplings,
|
||||||
|
-- this is because max_items is 1
|
||||||
|
items = {'conifers:leaves'},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sounds = default.node_sound_leaves_defaults()
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node(":conifers:sapling", {
|
||||||
|
description = "Conifer sapling",
|
||||||
|
drawtype = "plantlike",
|
||||||
|
visual_scale = 1.0,
|
||||||
|
tile_images = {"conifers_sapling.png"},
|
||||||
|
inventory_image = "conifers_sapling.png",
|
||||||
|
wield_image = "conifers_sapling.png",
|
||||||
|
paramtype = "light",
|
||||||
|
walkable = false,
|
||||||
|
groups = {
|
||||||
|
snappy = 2,
|
||||||
|
dig_immediate = 3,
|
||||||
|
flammable = 2
|
||||||
|
},
|
||||||
|
sounds = default.node_sound_defaults(),
|
||||||
|
})
|
||||||
|
|
BIN
textures/moretrees_acorn.png
Normal file
After Width: | Height: | Size: 901 B |
BIN
textures/moretrees_apple_tree.png
Normal file
After Width: | Height: | Size: 754 B |
BIN
textures/moretrees_apple_tree_leaves.png
Normal file
After Width: | Height: | Size: 792 B |
BIN
textures/moretrees_apple_tree_sapling.png
Normal file
After Width: | Height: | Size: 574 B |
BIN
textures/moretrees_apple_tree_top.png
Normal file
After Width: | Height: | Size: 800 B |
BIN
textures/moretrees_apple_tree_wood.png
Normal file
After Width: | Height: | Size: 713 B |
BIN
textures/moretrees_beech.png
Executable file
After Width: | Height: | Size: 706 B |
BIN
textures/moretrees_beech_leaves.png
Executable file
After Width: | Height: | Size: 451 B |
BIN
textures/moretrees_beech_sapling.png
Normal file
After Width: | Height: | Size: 358 B |
BIN
textures/moretrees_beech_top.png
Executable file
After Width: | Height: | Size: 843 B |
BIN
textures/moretrees_beech_wood.png
Normal file
After Width: | Height: | Size: 387 B |
BIN
textures/moretrees_birch.png
Normal file
After Width: | Height: | Size: 989 B |
BIN
textures/moretrees_birch_leaves.png
Normal file
After Width: | Height: | Size: 712 B |
BIN
textures/moretrees_birch_sapling.png
Normal file
After Width: | Height: | Size: 457 B |
BIN
textures/moretrees_birch_top.png
Normal file
After Width: | Height: | Size: 830 B |
BIN
textures/moretrees_birch_wood.png
Normal file
After Width: | Height: | Size: 781 B |
BIN
textures/moretrees_coconut.png
Normal file
After Width: | Height: | Size: 861 B |
BIN
textures/moretrees_oak.png
Normal file
After Width: | Height: | Size: 816 B |
BIN
textures/moretrees_oak_leaves.png
Normal file
After Width: | Height: | Size: 919 B |
BIN
textures/moretrees_oak_sapling.png
Normal file
After Width: | Height: | Size: 372 B |
BIN
textures/moretrees_oak_top.png
Normal file
After Width: | Height: | Size: 792 B |
BIN
textures/moretrees_oak_wood.png
Normal file
After Width: | Height: | Size: 771 B |
BIN
textures/moretrees_palm.png
Normal file
After Width: | Height: | Size: 640 B |
BIN
textures/moretrees_palm_leaves.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
textures/moretrees_palm_sapling.png
Normal file
After Width: | Height: | Size: 604 B |
BIN
textures/moretrees_palm_top.png
Normal file
After Width: | Height: | Size: 738 B |
BIN
textures/moretrees_palm_wood.png
Normal file
After Width: | Height: | Size: 743 B |
BIN
textures/moretrees_pine.png
Normal file
After Width: | Height: | Size: 872 B |
BIN
textures/moretrees_pine_cone.png
Normal file
After Width: | Height: | Size: 873 B |
BIN
textures/moretrees_pine_leaves.png
Normal file
After Width: | Height: | Size: 406 B |
BIN
textures/moretrees_pine_sapling.png
Normal file
After Width: | Height: | Size: 443 B |
BIN
textures/moretrees_pine_top.png
Normal file
After Width: | Height: | Size: 777 B |
BIN
textures/moretrees_pine_wood.png
Normal file
After Width: | Height: | Size: 797 B |
BIN
textures/moretrees_rubber_tree.png
Normal file
After Width: | Height: | Size: 808 B |
BIN
textures/moretrees_rubber_tree_leaves.png
Normal file
After Width: | Height: | Size: 444 B |
BIN
textures/moretrees_rubber_tree_sapling.png
Normal file
After Width: | Height: | Size: 333 B |
BIN
textures/moretrees_rubber_tree_top.png
Normal file
After Width: | Height: | Size: 791 B |
BIN
textures/moretrees_rubber_tree_wood.png
Normal file
After Width: | Height: | Size: 699 B |
BIN
textures/moretrees_sequoia.png
Normal file
After Width: | Height: | Size: 508 B |
BIN
textures/moretrees_sequoia_leaves.png
Normal file
After Width: | Height: | Size: 420 B |
BIN
textures/moretrees_sequoia_sapling.png
Normal file
After Width: | Height: | Size: 440 B |
BIN
textures/moretrees_sequoia_top.png
Normal file
After Width: | Height: | Size: 787 B |
BIN
textures/moretrees_sequoia_wood.png
Normal file
After Width: | Height: | Size: 681 B |
BIN
textures/moretrees_spruce.png
Normal file
After Width: | Height: | Size: 699 B |
BIN
textures/moretrees_spruce_cone.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
textures/moretrees_spruce_leaves.png
Normal file
After Width: | Height: | Size: 333 B |
BIN
textures/moretrees_spruce_sapling.png
Normal file
After Width: | Height: | Size: 425 B |
BIN
textures/moretrees_spruce_top.png
Normal file
After Width: | Height: | Size: 738 B |
BIN
textures/moretrees_spruce_wood.png
Normal file
After Width: | Height: | Size: 718 B |
BIN
textures/moretrees_willow.png
Normal file
After Width: | Height: | Size: 510 B |
BIN
textures/moretrees_willow_leaves.png
Normal file
After Width: | Height: | Size: 663 B |
BIN
textures/moretrees_willow_sapling.png
Normal file
After Width: | Height: | Size: 555 B |
BIN
textures/moretrees_willow_top.png
Normal file
After Width: | Height: | Size: 805 B |
BIN
textures/moretrees_willow_wood.png
Normal file
After Width: | Height: | Size: 762 B |
18
tree_biomes.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
Elevation Temperature Nearness to Nearby What nodes Perlin Avoid
|
||||||
|
Tree type (m) (approx., °C) some node water to spawn on seed diff radius
|
||||||
|
-----------------------------------------------------------------------------------------------------------------------
|
||||||
|
jungle tree - 5 to +10 above +26 water, 15 10 dirt_with_grass 329 7
|
||||||
|
fir (conifers) above +25 -20 to +10 n/a n/a dirt_with_grass 359 8
|
||||||
|
palm - 1 to + 1 +18 to +32 water, 15 10 sand 330 5
|
||||||
|
apple + 1 to +10 +23 to +32 n/a n/a dirt_with grass 331 15
|
||||||
|
oak 0 to +10 + 4 to +16 n/a n/a dirt_with grass 332 15
|
||||||
|
sequoia 0 to +10 -30 to +50 n/a n/a dirt_with grass 333 10
|
||||||
|
birch +10 to +15 -20 to +10 n/a n/a dirt_with grass 334 5
|
||||||
|
spruce above +20 -20 to +10 n/a n/a dirt_with grass 335 10
|
||||||
|
pine n/a n/a water, 15 5 dirt_with grass 336 10
|
||||||
|
willow - 5 to + 5 n/a water, 15 5 dirt_with grass 337 20
|
||||||
|
rubber - 5 to + 5 above +32 water, 15 10 dirt_with_grass 338 20
|
||||||
|
|
||||||
|
beech (default) n/a n/a n/a n/a dirt_with_grass 2 10
|
||||||
|
|
212
tree_models.lua
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
beech_model={
|
||||||
|
axiom="FFFFFBFB",
|
||||||
|
rules_a="[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fd]]////[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fd]]////[&&&GGF[++^Fd][--&Fd]//Fd[+^Fd][--&Fdd]]",
|
||||||
|
rules_b="[&&&F[++^Fd][--&d]//d[+^d][--&d]]////[&&&F[++^Fd][--&d]//d[+^d][--&d]]////[&&&F[++^Fd][--&Fd]//d[+^d][--&d]]",
|
||||||
|
rules_c="/",
|
||||||
|
rules_d="F",
|
||||||
|
trunk="moretrees:beech_trunk",
|
||||||
|
leaves="moretrees:beech_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single";
|
||||||
|
thin_branches=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
apple_tree_model={
|
||||||
|
axiom="FFFFFAFFBF",
|
||||||
|
rules_a="[&&&FFFFF&&FFFF][&&&++++FFFFF&&FFFF][&&&----FFFFF&&FFFF]",
|
||||||
|
rules_b="[&&&++FFFFF&&FFFF][&&&--FFFFF&&FFFF][&&&------FFFFF&&FFFF]",
|
||||||
|
trunk="moretrees:apple_tree_trunk",
|
||||||
|
leaves="moretrees:apple_tree_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single",
|
||||||
|
thin_branches=true;
|
||||||
|
fruit="default:apple",
|
||||||
|
fruit_chance=15,
|
||||||
|
}
|
||||||
|
|
||||||
|
oak_model={
|
||||||
|
axiom="FFFFFFA",
|
||||||
|
rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
|
||||||
|
rules_b="[&FFFA]////[&FFFA]////[&FFFA]",
|
||||||
|
trunk="moretrees:oak_trunk",
|
||||||
|
leaves="moretrees:oak_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=5,
|
||||||
|
random_level=2,
|
||||||
|
trunk_type="crossed";
|
||||||
|
thin_branches=false;
|
||||||
|
fruit="moretrees:acorn",
|
||||||
|
fruit_chance=3,
|
||||||
|
}
|
||||||
|
|
||||||
|
sequoia_model={
|
||||||
|
axiom="FFFFFFFFFFddccA///cccFddcFA///ddFcFA/cFFddFcdBddd/A/ccdcddd/ccAddddcFBcccAccFdFcFBcccc/BFdFFcFFdcccc/B",
|
||||||
|
rules_a="[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]////[&&&GGF[++^FFdd][--&Fddd]//Fdd[+^Fd][--&Fdd]]",
|
||||||
|
rules_b="[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]////[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]////[&&&GGF[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]",
|
||||||
|
rules_c="/",
|
||||||
|
rules_d="F",
|
||||||
|
trunk="moretrees:sequoia_trunk",
|
||||||
|
leaves="moretrees:sequoia_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="crossed",
|
||||||
|
thin_branches=true
|
||||||
|
}
|
||||||
|
|
||||||
|
birch_model1={
|
||||||
|
axiom="FFFFFdddccA/FFFFFFcA/FFFFFFcB",
|
||||||
|
rules_a="[&&&dddd^^ddddddd][&&&---dddd^^ddddddd][&&&+++dddd^^ddddddd][&&&++++++dddd^^ddddddd]",
|
||||||
|
rules_b="[&&&ddd^^ddddd][&&&---ddd^^ddddd][&&&+++ddd^^ddddd][&&&++++++ddd^^ddddd]",
|
||||||
|
rules_c="/",
|
||||||
|
rules_d="F",
|
||||||
|
trunk="moretrees:birch_trunk",
|
||||||
|
leaves="moretrees:birch_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single",
|
||||||
|
thin_branches=true
|
||||||
|
}
|
||||||
|
|
||||||
|
birch_model2={
|
||||||
|
axiom="FFFdddccA/FFFFFccA/FFFFFccB",
|
||||||
|
rules_a="[&&&dFFF^^FFFdd][&&&---dFFF^^FFFdd][&&&+++dFFF^^FFFdd][&&&++++++dFFF^^FFFdd]",
|
||||||
|
rules_b="[&&&dFF^^FFFd][&&&---dFFF^^FFFd][&&&+++dFF^^FFFd][&&&++++++dFF^^FFFd]",
|
||||||
|
rules_c="/",
|
||||||
|
rules_d="F",
|
||||||
|
trunk="moretrees:birch_trunk",
|
||||||
|
leaves="moretrees:birch_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single",
|
||||||
|
thin_branches=true
|
||||||
|
}
|
||||||
|
|
||||||
|
palm_model={
|
||||||
|
axiom="FFccc&FFFFFdddFA//A//A//A//A//A",
|
||||||
|
rules_a="[&fb&bbb[++f--&ffff&ff][--f++&ffff&ff]&ffff&bbbb&b]",
|
||||||
|
rules_b="f",
|
||||||
|
rules_c="/",
|
||||||
|
rules_d="F",
|
||||||
|
trunk="moretrees:palm_trunk",
|
||||||
|
leaves="moretrees:palm_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single",
|
||||||
|
thin_branches=true,
|
||||||
|
fruit="moretrees:coconut",
|
||||||
|
fruit_chance=0
|
||||||
|
}
|
||||||
|
|
||||||
|
spruce_model1={
|
||||||
|
axiom="FFFFFAFFFFFFBFFFFFFCFFFFFFDFFFFFF[&&&F^^FF][&&&++F^^FF][&&&++++F^^FF][&&&++++++F^^FF][&&&--F^^FF][&&&----F^^FF][FFFFf]",
|
||||||
|
rules_a="[&&&FFFFFF^^FFF][&&&++FFFFFF^^FFF][&&&++++FFFFFF^^FFF][&&&++++++FFFFFF^^FFF][&&&--FFFFFF^^FFF][&&&----FFFFFF^^FFF]",
|
||||||
|
rules_b="[&&&FFFFF^^FFF][&&&++FFFFF^^FFF][&&&++++FFFFF^^FFF][&&&++++++FFFFF^^FFF][&&&--FFFFF^^FFF][&&&----FFFFF^^FFF]",
|
||||||
|
rules_c="[&&&FFFF^^FFF][&&&++FFFF^^FFF][&&&++++FFFF^^FFF][&&&++++++FFFF^^FFF][&&&--FFFF^^FFF][&&&----FFFF^^FFF]",
|
||||||
|
rules_d="[&&&FFF^^FFF][&&&++FFF^^FFF][&&&++++FFF^^FFF][&&&++++++FFF^^FFF][&&&--FFF^^FFF][&&&----FFF^^FFF]",
|
||||||
|
trunk="moretrees:spruce_trunk",
|
||||||
|
leaves="moretrees:spruce_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="crossed",
|
||||||
|
thin_branches=true,
|
||||||
|
fruit="moretrees:cone",
|
||||||
|
fruit_chance=8
|
||||||
|
}
|
||||||
|
|
||||||
|
spruce_model2={
|
||||||
|
axiom="FFFFFFBFFFFFFCFFFFFFDFFFFFF[&&&F^^FF][&&&++F^^FF][&&&++++F^^FF][&&&++++++F^^FF][&&&--F^^FF][&&&----F^^FF][FFFFf]",
|
||||||
|
rules_b="[&&&FFFFF^^FFF][&&&++FFFFF^^FFF][&&&++++FFFFF^^FFF][&&&++++++FFFFF^^FFF][&&&--FFFFF^^FFF][&&&----FFFFF^^FFF]",
|
||||||
|
rules_c="[&&&FFFF^^FFF][&&&++FFFF^^FFF][&&&++++FFFF^^FFF][&&&++++++FFFF^^FFF][&&&--FFFF^^FFF][&&&----FFFF^^FFF]",
|
||||||
|
rules_d="[&&&FFF^^FFF][&&&++FFF^^FFF][&&&++++FFF^^FFF][&&&++++++FFF^^FFF][&&&--FFF^^FFF][&&&----FFF^^FFF]",
|
||||||
|
trunk="moretrees:spruce_trunk",
|
||||||
|
leaves="moretrees:spruce_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="crossed",
|
||||||
|
thin_branches=true,
|
||||||
|
fruit="moretrees:cone",
|
||||||
|
fruit_chance=8
|
||||||
|
}
|
||||||
|
|
||||||
|
pine_model={
|
||||||
|
axiom="FFFFFcccdddB///cFdFB////cFdFB///cFdFB///cFdFA///cFdFA///cFdFB[FF]f",
|
||||||
|
rules_a="[&&&TTTT[++^TFdd][--&TFd]//Tdd[+^Fd][--&Fdd]]",
|
||||||
|
rules_b="[&&&TTT[++^Fdd][--&Fdd]//dd[+^d][--&Fd]]",
|
||||||
|
rules_c="/",
|
||||||
|
rules_d="F",
|
||||||
|
trunk="moretrees:pine_trunk",
|
||||||
|
leaves="moretrees:pine_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="single",
|
||||||
|
thin_branches=true,
|
||||||
|
fruit="moretrees:pine_cone",
|
||||||
|
fruit_chance=8
|
||||||
|
}
|
||||||
|
|
||||||
|
willow_model={
|
||||||
|
axiom="FFFFFFFFccA",
|
||||||
|
rules_a="[&FF&FFFF&&F&FFFFFFFdddd][**&FF&FFFF&&F&FFFFFFFdddd][//&FF&FFFF&&F&FFFFFFFdddd][////&FF&FFFF&&F&FFFFFFFdddd][//////&FF&FFFF&&F&FFFFFFFdddd][////////&FF&FFFF&&F&FFFFFFFdddd]",
|
||||||
|
rules_c="/",
|
||||||
|
rules_d="F",
|
||||||
|
trunk="moretrees:willow_trunk",
|
||||||
|
leaves="moretrees:willow_leaves",
|
||||||
|
angle=30,
|
||||||
|
iterations=2,
|
||||||
|
random_level=0,
|
||||||
|
trunk_type="crossed",
|
||||||
|
thin_branches=true
|
||||||
|
}
|
||||||
|
|
||||||
|
rubber_tree={
|
||||||
|
axiom="FFFFA",
|
||||||
|
rules_a="[&FFBFA]////[&BFFFA]////[&FBFFA]",
|
||||||
|
rules_b="[&FFA]////[&FFA]////[&FFA]",
|
||||||
|
trunk="moretrees:rubber_tree_trunk",
|
||||||
|
leaves="moretrees:rubber_tree_leaves",
|
||||||
|
angle=35,
|
||||||
|
iterations=3,
|
||||||
|
random_level=1,
|
||||||
|
trunk_type="double",
|
||||||
|
thin_branches=true
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.jungletree_model={
|
||||||
|
axiom=nil,
|
||||||
|
rules_a=nil,
|
||||||
|
rules_b=nil,
|
||||||
|
trunk="default:jungletree",
|
||||||
|
leaves="jungletree:leaves_green",
|
||||||
|
leaves2=nil,
|
||||||
|
leaves2_chance=nil,
|
||||||
|
angle=45,
|
||||||
|
iterations=nil,
|
||||||
|
random_level=2,
|
||||||
|
trunk_type=nil,
|
||||||
|
thin_branches=true;
|
||||||
|
fruit_chance=15,
|
||||||
|
fruit="vines:vine"
|
||||||
|
}
|
||||||
|
|
||||||
|
moretrees.conifer_model={
|
||||||
|
axiom="FFFAF[&&-F][&&+F][&&---F][&&+++F]Fff",
|
||||||
|
rules_a=nil,
|
||||||
|
rules_b=nil,
|
||||||
|
trunk="conifers:trunk",
|
||||||
|
leaves=nil,
|
||||||
|
angle=45,
|
||||||
|
iterations=7,
|
||||||
|
random_level=5,
|
||||||
|
thin_trunks=true
|
||||||
|
}
|