summaryrefslogtreecommitdiff
path: root/moretrees/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'moretrees/init.lua')
-rw-r--r--moretrees/init.lua299
1 files changed, 299 insertions, 0 deletions
diff --git a/moretrees/init.lua b/moretrees/init.lua
new file mode 100644
index 0000000..d2c5128
--- /dev/null
+++ b/moretrees/init.lua
@@ -0,0 +1,299 @@
+-- More trees! 2013-04-07
+--
+-- 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.
+--
+-- Firs and Jungle tree axioms/rules by Vanessa Ezekowitz, with the
+-- latter having been tweaked by RealBadAngel, most other axioms/rules written
+-- by RealBadAngel.
+--
+-- License: WTFPL for all parts (code and textures, including those copied
+-- from the the old jungletree and conifers mods).
+
+moretrees = {}
+
+-- Read the default config file (and if necessary, copy it to the world folder).
+
+local worldpath=minetest.get_worldpath()
+local modpath=minetest.get_modpath("moretrees")
+
+dofile(modpath.."/default_settings.txt")
+
+if io.open(worldpath.."/moretrees_settings.txt","r") then
+ io.close()
+ dofile(worldpath.."/moretrees_settings.txt")
+end
+
+-- Boilerplate to support localized strings if intllib mod is installed.
+local S
+if minetest.get_modpath("intllib") then
+ S = intllib.Getter()
+else
+ S = function(s) return s end
+end
+moretrees.intllib = S
+
+-- clone node
+
+function moretrees.clone_node(name)
+ local node2 = {}
+ local node = minetest.registered_nodes[name]
+ for k,v in pairs(node) do
+ node2[k]=v
+ end
+ return node2
+end
+
+-- infinite stacks checking
+
+if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then
+ moretrees.expect_infinite_stacks = false
+else
+ moretrees.expect_infinite_stacks = true
+end
+
+-- tables, load other files
+
+moretrees.cutting_tools = {
+ "default:axe_bronze",
+ "default:axe_diamond",
+ "default:axe_mese",
+ "default:axe_steel",
+ "glooptest:axe_alatro",
+ "glooptest:axe_arol",
+ "moreores:axe_mithril",
+ "moreores:axe_silver",
+ "titanium:axe",
+}
+
+dofile(modpath.."/tree_models.lua")
+dofile(modpath.."/node_defs.lua")
+dofile(modpath.."/biome_defs.lua")
+dofile(modpath.."/saplings.lua")
+dofile(modpath.."/crafts.lua")
+
+-- tree spawning setup
+
+if moretrees.spawn_saplings then
+ moretrees.spawn_beech_object = "moretrees:beech_sapling_ongen"
+ moretrees.spawn_apple_tree_object = "moretrees:apple_tree_sapling_ongen"
+ moretrees.spawn_oak_object = "moretrees:oak_sapling_ongen"
+ moretrees.spawn_sequoia_object = "moretrees:sequoia_sapling_ongen"
+ moretrees.spawn_palm_object = "moretrees:palm_sapling_ongen"
+ moretrees.spawn_pine_object = "moretrees:pine_sapling_ongen"
+ moretrees.spawn_rubber_tree_object = "moretrees:rubber_tree_sapling_ongen"
+ moretrees.spawn_willow_object = "moretrees:willow_sapling_ongen"
+ moretrees.spawn_acacia_object = "moretrees:acacia_sapling_ongen"
+ moretrees.spawn_birch_object = "moretrees:birch_sapling_ongen"
+ moretrees.spawn_spruce_object = "moretrees:spruce_sapling_ongen"
+ moretrees.spawn_jungletree_object = "moretrees:jungletree_sapling_ongen"
+ moretrees.spawn_fir_object = "moretrees:fir_sapling_ongen"
+ moretrees.spawn_fir_snow_object = "snow:sapling_pine"
+else
+ moretrees.spawn_beech_object = moretrees.beech_model
+ moretrees.spawn_apple_tree_object = moretrees.apple_tree_model
+ moretrees.spawn_oak_object = moretrees.oak_model
+ moretrees.spawn_sequoia_object = moretrees.sequoia_model
+ moretrees.spawn_palm_object = moretrees.palm_model
+ moretrees.spawn_pine_object = moretrees.pine_model
+ moretrees.spawn_rubber_tree_object = moretrees.rubber_tree_model
+ moretrees.spawn_willow_object = moretrees.willow_model
+ moretrees.spawn_acacia_object = moretrees.acacia_model
+ moretrees.spawn_birch_object = "moretrees.grow_birch"
+ moretrees.spawn_spruce_object = "moretrees.grow_spruce"
+ moretrees.spawn_jungletree_object = "moretrees.grow_jungletree"
+ moretrees.spawn_fir_object = "moretrees.grow_fir"
+ moretrees.spawn_fir_snow_object = "moretrees.grow_fir_snow"
+end
+
+if moretrees.enable_beech then
+ biome_lib:register_generate_plant(moretrees.beech_biome, moretrees.spawn_beech_object)
+end
+
+if moretrees.enable_apple_tree then
+ biome_lib:register_generate_plant(moretrees.apple_tree_biome, moretrees.spawn_apple_tree_object)
+end
+
+if moretrees.enable_oak then
+ biome_lib:register_generate_plant(moretrees.oak_biome, moretrees.spawn_oak_object)
+end
+
+if moretrees.enable_sequoia then
+ biome_lib:register_generate_plant(moretrees.sequoia_biome, moretrees.spawn_sequoia_object)
+end
+
+if moretrees.enable_palm then
+ biome_lib:register_generate_plant(moretrees.palm_biome, moretrees.spawn_palm_object)
+end
+
+if moretrees.enable_pine then
+ biome_lib:register_generate_plant(moretrees.pine_biome, moretrees.spawn_pine_object)
+end
+
+if moretrees.enable_rubber_tree then
+ biome_lib:register_generate_plant(moretrees.rubber_tree_biome, moretrees.spawn_rubber_tree_object)
+end
+
+if moretrees.enable_willow then
+ biome_lib:register_generate_plant(moretrees.willow_biome, moretrees.spawn_willow_object)
+end
+
+if moretrees.enable_acacia then
+ biome_lib:register_generate_plant(moretrees.acacia_biome, moretrees.spawn_acacia_object)
+end
+
+if moretrees.enable_birch then
+ biome_lib:register_generate_plant(moretrees.birch_biome, moretrees.spawn_birch_object)
+end
+
+if moretrees.enable_spruce then
+ biome_lib:register_generate_plant(moretrees.spruce_biome, moretrees.spawn_spruce_object)
+end
+
+if moretrees.enable_jungle_tree then
+ biome_lib:register_generate_plant(moretrees.jungletree_biome, moretrees.spawn_jungletree_object)
+end
+
+if moretrees.enable_fir then
+ biome_lib:register_generate_plant(moretrees.fir_biome, moretrees.spawn_fir_object)
+ if minetest.get_modpath("snow") then
+ biome_lib:register_generate_plant(moretrees.fir_biome_snow, moretrees.spawn_fir_snow_object)
+ end
+end
+
+-- Code to spawn a birch tree
+
+function moretrees.grow_birch(pos)
+ minetest.remove_node(pos)
+ if math.random(1,2) == 1 then
+ minetest.spawn_tree(pos, moretrees.birch_model1)
+ else
+ minetest.spawn_tree(pos, moretrees.birch_model2)
+ end
+end
+
+-- Code to spawn a spruce tree
+
+function moretrees.grow_spruce(pos)
+ minetest.remove_node(pos)
+ if math.random(1,2) == 1 then
+ minetest.spawn_tree(pos, moretrees.spruce_model1)
+ else
+ minetest.spawn_tree(pos, moretrees.spruce_model2)
+ end
+end
+
+-- Code to spawn jungle trees
+
+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 = "moretrees:jungletree_leaves_red"
+ else
+ moretrees.jungletree_model.leaves2 = "moretrees: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.remove_node(pos)
+ local leaves = minetest.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.remove_node(leaves[leaf])
+ end
+ minetest.spawn_tree(pos, moretrees.jungletree_model)
+end
+
+-- code to spawn fir trees
+
+function moretrees.grow_fir(pos)
+ if math.random(2) == 1 then
+ moretrees.fir_model.leaves="moretrees:fir_leaves"
+ else
+ moretrees.fir_model.leaves="moretrees:fir_leaves_bright"
+ end
+ if math.random(2) == 1 then
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a1
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b1
+ else
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a2
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b2
+ end
+
+ moretrees.fir_model.iterations = 7
+ moretrees.fir_model.random_level = 5
+
+ minetest.remove_node(pos)
+ local leaves = minetest.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.remove_node(leaves[leaf])
+ end
+ minetest.spawn_tree(pos,moretrees.fir_model)
+end
+
+-- same thing, but a smaller version that grows only in snow biomes
+
+function moretrees.grow_fir_snow(pos)
+ if math.random(2) == 1 then
+ moretrees.fir_model.leaves="moretrees:fir_leaves"
+ else
+ moretrees.fir_model.leaves="moretrees:fir_leaves_bright"
+ end
+ if math.random(2) == 1 then
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a1
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b1
+ else
+ moretrees.fir_model.rules_a = moretrees.ct_rules_a2
+ moretrees.fir_model.rules_b = moretrees.ct_rules_b2
+ end
+
+ moretrees.fir_model.iterations = 2
+ moretrees.fir_model.random_level = 2
+
+ minetest.remove_node(pos)
+ local leaves = minetest.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.remove_node(leaves[leaf])
+ end
+ minetest.spawn_tree(pos,moretrees.fir_model)
+end
+
+print(S("[Moretrees] Loaded (2013-02-11)"))