From 1bd0afbc842aaacbfd7eb31ac88be4f9c08eba5c Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Sat, 19 Jan 2013 18:36:13 -0500 Subject: [PATCH] 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. --- README.md | 7 +- biome_defs.lua | 148 ++++++++ init.lua | 408 +++------------------ node_defs.lua | 287 +++++++++++++++ textures/moretrees_acorn.png | Bin 0 -> 901 bytes textures/moretrees_apple_tree.png | Bin 0 -> 754 bytes textures/moretrees_apple_tree_leaves.png | Bin 0 -> 792 bytes textures/moretrees_apple_tree_sapling.png | Bin 0 -> 574 bytes textures/moretrees_apple_tree_top.png | Bin 0 -> 800 bytes textures/moretrees_apple_tree_wood.png | Bin 0 -> 713 bytes textures/moretrees_beech.png | Bin 0 -> 706 bytes textures/moretrees_beech_leaves.png | Bin 0 -> 451 bytes textures/moretrees_beech_sapling.png | Bin 0 -> 358 bytes textures/moretrees_beech_top.png | Bin 0 -> 843 bytes textures/moretrees_beech_wood.png | Bin 0 -> 387 bytes textures/moretrees_birch.png | Bin 0 -> 989 bytes textures/moretrees_birch_leaves.png | Bin 0 -> 712 bytes textures/moretrees_birch_sapling.png | Bin 0 -> 457 bytes textures/moretrees_birch_top.png | Bin 0 -> 830 bytes textures/moretrees_birch_wood.png | Bin 0 -> 781 bytes textures/moretrees_coconut.png | Bin 0 -> 861 bytes textures/moretrees_oak.png | Bin 0 -> 816 bytes textures/moretrees_oak_leaves.png | Bin 0 -> 919 bytes textures/moretrees_oak_sapling.png | Bin 0 -> 372 bytes textures/moretrees_oak_top.png | Bin 0 -> 792 bytes textures/moretrees_oak_wood.png | Bin 0 -> 771 bytes textures/moretrees_palm.png | Bin 0 -> 640 bytes textures/moretrees_palm_leaves.png | Bin 0 -> 3558 bytes textures/moretrees_palm_sapling.png | Bin 0 -> 604 bytes textures/moretrees_palm_top.png | Bin 0 -> 738 bytes textures/moretrees_palm_wood.png | Bin 0 -> 743 bytes textures/moretrees_pine.png | Bin 0 -> 872 bytes textures/moretrees_pine_cone.png | Bin 0 -> 873 bytes textures/moretrees_pine_leaves.png | Bin 0 -> 406 bytes textures/moretrees_pine_sapling.png | Bin 0 -> 443 bytes textures/moretrees_pine_top.png | Bin 0 -> 777 bytes textures/moretrees_pine_wood.png | Bin 0 -> 797 bytes textures/moretrees_rubber_tree.png | Bin 0 -> 808 bytes textures/moretrees_rubber_tree_leaves.png | Bin 0 -> 444 bytes textures/moretrees_rubber_tree_sapling.png | Bin 0 -> 333 bytes textures/moretrees_rubber_tree_top.png | Bin 0 -> 791 bytes textures/moretrees_rubber_tree_wood.png | Bin 0 -> 699 bytes textures/moretrees_sequoia.png | Bin 0 -> 508 bytes textures/moretrees_sequoia_leaves.png | Bin 0 -> 420 bytes textures/moretrees_sequoia_sapling.png | Bin 0 -> 440 bytes textures/moretrees_sequoia_top.png | Bin 0 -> 787 bytes textures/moretrees_sequoia_wood.png | Bin 0 -> 681 bytes textures/moretrees_spruce.png | Bin 0 -> 699 bytes textures/moretrees_spruce_cone.png | Bin 0 -> 3201 bytes textures/moretrees_spruce_leaves.png | Bin 0 -> 333 bytes textures/moretrees_spruce_sapling.png | Bin 0 -> 425 bytes textures/moretrees_spruce_top.png | Bin 0 -> 738 bytes textures/moretrees_spruce_wood.png | Bin 0 -> 718 bytes textures/moretrees_willow.png | Bin 0 -> 510 bytes textures/moretrees_willow_leaves.png | Bin 0 -> 663 bytes textures/moretrees_willow_sapling.png | Bin 0 -> 555 bytes textures/moretrees_willow_top.png | Bin 0 -> 805 bytes textures/moretrees_willow_wood.png | Bin 0 -> 762 bytes tree_biomes.txt | 18 + tree_models.lua | 212 +++++++++++ 60 files changed, 726 insertions(+), 354 deletions(-) create mode 100644 biome_defs.lua create mode 100644 node_defs.lua create mode 100644 textures/moretrees_acorn.png create mode 100644 textures/moretrees_apple_tree.png create mode 100644 textures/moretrees_apple_tree_leaves.png create mode 100644 textures/moretrees_apple_tree_sapling.png create mode 100644 textures/moretrees_apple_tree_top.png create mode 100644 textures/moretrees_apple_tree_wood.png create mode 100755 textures/moretrees_beech.png create mode 100755 textures/moretrees_beech_leaves.png create mode 100644 textures/moretrees_beech_sapling.png create mode 100755 textures/moretrees_beech_top.png create mode 100644 textures/moretrees_beech_wood.png create mode 100644 textures/moretrees_birch.png create mode 100644 textures/moretrees_birch_leaves.png create mode 100644 textures/moretrees_birch_sapling.png create mode 100644 textures/moretrees_birch_top.png create mode 100644 textures/moretrees_birch_wood.png create mode 100644 textures/moretrees_coconut.png create mode 100644 textures/moretrees_oak.png create mode 100644 textures/moretrees_oak_leaves.png create mode 100644 textures/moretrees_oak_sapling.png create mode 100644 textures/moretrees_oak_top.png create mode 100644 textures/moretrees_oak_wood.png create mode 100644 textures/moretrees_palm.png create mode 100644 textures/moretrees_palm_leaves.png create mode 100644 textures/moretrees_palm_sapling.png create mode 100644 textures/moretrees_palm_top.png create mode 100644 textures/moretrees_palm_wood.png create mode 100644 textures/moretrees_pine.png create mode 100644 textures/moretrees_pine_cone.png create mode 100644 textures/moretrees_pine_leaves.png create mode 100644 textures/moretrees_pine_sapling.png create mode 100644 textures/moretrees_pine_top.png create mode 100644 textures/moretrees_pine_wood.png create mode 100644 textures/moretrees_rubber_tree.png create mode 100644 textures/moretrees_rubber_tree_leaves.png create mode 100644 textures/moretrees_rubber_tree_sapling.png create mode 100644 textures/moretrees_rubber_tree_top.png create mode 100644 textures/moretrees_rubber_tree_wood.png create mode 100644 textures/moretrees_sequoia.png create mode 100644 textures/moretrees_sequoia_leaves.png create mode 100644 textures/moretrees_sequoia_sapling.png create mode 100644 textures/moretrees_sequoia_top.png create mode 100644 textures/moretrees_sequoia_wood.png create mode 100644 textures/moretrees_spruce.png create mode 100644 textures/moretrees_spruce_cone.png create mode 100644 textures/moretrees_spruce_leaves.png create mode 100644 textures/moretrees_spruce_sapling.png create mode 100644 textures/moretrees_spruce_top.png create mode 100644 textures/moretrees_spruce_wood.png create mode 100644 textures/moretrees_willow.png create mode 100644 textures/moretrees_willow_leaves.png create mode 100644 textures/moretrees_willow_sapling.png create mode 100644 textures/moretrees_willow_top.png create mode 100644 textures/moretrees_willow_wood.png create mode 100644 tree_biomes.txt create mode 100644 tree_models.lua diff --git a/README.md b/README.md index 62a24b2..f083bb6 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,13 @@ More trees! -This mod adds more types of trees to the game -at present, they consist of jungle trees and conifers +This mod adds a whole bunch of new types of trees to the game 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 Ezekowitz. -Jungle tree axioms/rules tweaked by RealBadAngel - License: WTFPL Dependencies: plants_lib (or plantlife modpack), default diff --git a/biome_defs.lua b/biome_defs.lua new file mode 100644 index 0000000..c03f673 --- /dev/null +++ b/biome_defs.lua @@ -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, +} + diff --git a/init.lua b/init.lua index 9c346bd..ff0bcf4 100644 --- a/init.lua +++ b/init.lua @@ -1,15 +1,16 @@ -- More trees! -- -- 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 --- bas080's jungle trees mod. +-- 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 :-) -- --- 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) -- @@ -24,192 +25,72 @@ -- in_biome = true -- end -- --- We'll just save this for later use ;-) +-- We'll just save this for possible later use ;-) -- - 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 -local JT_SPAWN_CHANCE = 100 +plantslib:register_generate_plant(moretrees.jungletree_biome, "moretrees:grow_jungletree") +plantslib:register_generate_plant(moretrees.conifer_biome, "moretrees:grow_conifer") -local JT_GROW_INTERVAL = 100 -local JT_GROW_CHANCE = 10 +--plantslib:register_generate_plant(moretrees.palm_biome, moretrees.palm_model) -local JT_RADIUS = 15 -local JT_WATER_RADIUS = 15 -local JT_WATER_COUNT = 10 +-------------------------- +-- Other stuff +-- +-- 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 -local CONIFERS_SPAWN_SAPLING_CHANCE = 100 +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" -local CONIFERS_GROW_SAPLING_INTERVAL = 100 -local CONIFERS_GROW_SAPLING_CHANCE = 10 +moretrees.ct_rules_a1 = "FF[FF][&&-FBF][&&+FBF][&&---FBF][&&+++FBF]F/A" +moretrees.ct_rules_b1 = "[-FBf][+FBf]" -local CONIFERS_DISTANCE = 9 -- how far apart should conifer saplings spawn? -local CONIFERS_ALTITUDE = 25 - -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! +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 - jungle_tree["leaves2"] = "jungletree:leaves_red" + moretrees.jungletree_model.leaves2 = "jungletree:leaves_red" else - jungle_tree["leaves2"] = "jungletree:leaves_yellow" + moretrees.jungletree_model.leaves2 = "jungletree:leaves_yellow" end - jungle_tree["leaves2_chance"] = math.random(25, 75) + moretrees.jungletree_model.leaves2_chance = math.random(25, 75) if r2 == 1 then - jungle_tree["trunk_type"] = "single" - jungle_tree["iterations"] = 2 - jungle_tree["axiom"] = jt_axiom1 - jungle_tree["rules_a"] = jt_rules_a1 - jungle_tree["rules_b"] = jt_rules_b1 + 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 - jungle_tree["trunk_type"] = "double" - jungle_tree["iterations"] = 4 - jungle_tree["axiom"] = jt_axiom2 - jungle_tree["rules_a"] = jt_rules_a2 - jungle_tree["rules_b"] = jt_rules_b2 + 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 - jungle_tree["trunk_type"] = "crossed" - jungle_tree["iterations"] = 4 - jungle_tree["axiom"] = jt_axiom2 - jungle_tree["rules_a"] = jt_rules_a2 - jungle_tree["rules_b"] = jt_rules_b2 + 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) @@ -217,21 +98,21 @@ function moretrees:grow_jungletree(pos) for leaf in ipairs(leaves) do minetest.env:remove_node(leaves[leaf]) end - minetest.env:spawn_tree(pos,jungle_tree) + minetest.env:spawn_tree(pos, moretrees.jungletree_model) end function moretrees:grow_conifer(pos) if math.random(2) == 1 then - conifer_tree["leaves"]="conifers:leaves" + moretrees.conifer_model.leaves="conifers:leaves" else - conifer_tree["leaves"]="conifers:leaves_special" + moretrees.conifer_model.leaves="conifers:leaves_special" end if math.random(2) == 1 then - conifer_tree["rules_a"] = ct_rules_a1 - conifer_tree["rules_b"] = ct_rules_b1 + moretrees.conifer_model.rules_a = moretrees.ct_rules_a1 + moretrees.conifer_model.rules_b = moretrees.ct_rules_b1 else - conifer_tree["rules_a"] = ct_rules_a2 - conifer_tree["rules_b"] = ct_rules_b2 + moretrees.conifer_model.rules_a = moretrees.ct_rules_a2 + moretrees.conifer_model.rules_b = moretrees.ct_rules_b2 end minetest.env:remove_node(pos) @@ -239,12 +120,13 @@ function moretrees:grow_conifer(pos) for leaf in ipairs(leaves) do minetest.env:remove_node(leaves[leaf]) end - minetest.env:spawn_tree(pos,conifer_tree) + minetest.env:spawn_tree(pos,moretrees.conifer_model) end --- Other stuff + -- Should we remove all the trees above the conifers altitude? + if CONIFERS_REMOVE_TREES == true then minetest.register_abm({ nodenames = { @@ -264,176 +146,4 @@ if CONIFERS_REMOVE_TREES == true then }) 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)") diff --git a/node_defs.lua b/node_defs.lua new file mode 100644 index 0000000..0ba7ae7 --- /dev/null +++ b/node_defs.lua @@ -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(), +}) + diff --git a/textures/moretrees_acorn.png b/textures/moretrees_acorn.png new file mode 100644 index 0000000000000000000000000000000000000000..67b4d92b46ebc9109f1fadfd3994f281af5398ad GIT binary patch literal 901 zcmV;01A6?4P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*Y- z3m`Gw&G;Yy00RX{L_t(I%Wac8Y#db-hW|Tr=dm+8V{e?bjl+_Fqgb&mSC9xr2~ldG zKs*$L1QJEM6hMz6(S(X7MJVY45+x`|bff`7EI?VW{8(FAk9WO0`Ky4m59$0L!87sRBFeRDc}~~LS7%;1b9FclMvpcc-#l!`cWW-PA08rnQm;N)TtAQH zrL&7~PtKh9X!hjkD|7QpFKN12QB?KpY{g#e^!n4aDn`v7`iDK_F!}tVap~03xlb2X z&RsTaciM6)8W&O-jYkMa!=mqZ)9tPG{y(dK{+3C8^X?i}k1qJ^qIrIP`SmYeyZq)` zrxsSKrcuFhKTcW7D!sP1QR|~lzi)$m`|ca_hE=v%5`zGc zd5WIzqrKBa5;5pj35IRMv>g~miBzjEl#aR8nLFrmdTjw_x4k=vhkgbqroX$1VE++< zZU?^CK@?@sEeqwTV{m6qK(Qu~vLsK1i~vx2yMf~Cm5B$t^*`E+%VJnHExks4J2LXMuSPzv3&p=u^H-GG!xm0axn zjRP;xLmw!RW68OM1V9J~As_%$szEDR&@}=nq%0&@#Nh$p2Ymp(1WYJuBgZU8I|q96Oc{eOeuNKmRB4JdeqEDjJ112mfhw&w-+ zIp9CX!cQ%XE>#i{gz*X?s>_8?k|aSG#0W=;Y}C7~zUJTKz|H%>=KsR7~d7Z+V8;b bv)cav*tK;-3s=7|00000NkvXXu0mjf-#U%J literal 0 HcmV?d00001 diff --git a/textures/moretrees_apple_tree.png b/textures/moretrees_apple_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2041d713ac44d4547d6e42741372653ac5ecce GIT binary patch literal 754 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU215r$r)V*mgGgh@m}R4C5{ z!P}18L;wKLxp_RkC9#t@n`{=TY&KQ350wy=s{RB|Jn*v!A$Z^ufTC`j1-!9yvt!SF zrsu$)e*9szzP+6LtF~IJ&F#9lnb!3o@qorzSuPC(tM#H6;W&+YC6QCt;rVGcie7JC zMU1sV?yDo`n#LpJJr~0`O;eU=H8>9#g6Ny=L;3B!Cg}gFa@t^m&TTtM(sH$M9s=)@ zm{rXwpG-Q=wR6Zi|6JGgv3uSZ zr$H96D2}c|#c?{F7N7t6*fh;}R!Z#{ivaMqiy5*8KR#|&x2pitD5mMC2xtf)*lzEU zGnA!-rCE}F`Sj1--JLOh=sN^FAP9Ed`K78Mu*TWtq6`QDBqSI|jLm07*LGiaJE3^n zT?s}AqhK`3xRA!E?foWz*f}pOWLc8ulOO=6_S$io17Gd;_}%w!g^)=)**?619v}d; zu>|=v&YnK+>ZZx(^K4Xzp&zF)a1IG$_WMIXsPzs}1|hN5SS9}b^k-~k^|DinuNGxM zs4>o3iyR;%AjYaga|F)q4+l)Bh1fd)0jR3~o<9DK-7qZ*F7&>x5h7SQqm`Ci^p|5s zG4D@SNnpG-_U)TT*>(}dP4faU4lu#xO&K%hoOXcbqeOcsghUW)t()fXYV%M`^PhkD z%^JPgyzcue{_y@gt)vw)!m#c8%ODoztgeq)J~{P#xmxC<9AhlIvq8vvh_t#6{UEtv zmUpL-Bp56=@!OkVz-4ZvX%Q07*qoM6N<$f;IeJFaQ7m literal 0 HcmV?d00001 diff --git a/textures/moretrees_apple_tree_leaves.png b/textures/moretrees_apple_tree_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..d410a839d910455c29ac3298d5ecc1a98e5f4090 GIT binary patch literal 792 zcmV+z1LypSP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU5BBmnKUJ^%m$s!2paR5;6R zlS^n*SsccH=j0|awN1UL9URfBDZ~fP4AjTS#iF3-LM6Dc;L1%wT%;B0UR=46nRZHb z(@kMkGYlfZg)%;vfgnT$6)h;O3kxFFwn-oMzRuspHPnvL&2|DTP#WfDJkX$1 z(cSsQkpAIL`RD2sQ{%2mw#J-M$A`i45cTJJjADo)YJ?dk8T z=~DyiB`~m559l9`NSvZANlW7tZ5bFX2tY@nDK6^0yeTGA00W~1sg&PSxiPC&dY!a1 zh22@6{WpiUqKS1Ku+dtxI%{#I_odPR_x^qdI(qhwy;-W|no4So?-?X8ksDF6SzZkB z-4Op{7`3qHSgSPbG9G*ur*dOfy`5ZUO)f>XTvNt__H`+mT9UkYP>-`?Rd3c**Ws*$ zgmf3%Eeo}fr}yh|Xp9Ftoh-?e=JoSM?)*6&*L?!u WQ6m*&kL7a!0000S->P)Px#32;bRa{vGf5dZ)S5dnW>Uy%R+00(qQO+^RY0TTcZ43m~5bN~PW&`Cr=R5;6} zlfP>daTvxw@6k(-)FQi&PAuHrELL96Kmp6Ugfz-}A0bMeyD3;koyHp6C6(qN@B)S;v97l^Lzv zzHoxLx?LYRNzw`oY2(2wacZ`{zW+fC-VB0-XK;YA;~fq0R<)Y^XzhwHi+Z6;Z@ecX zEv#8~qZ=rUnXCR01zh}@EJrF>3GjXX}xPE?GUP>f#(OFHdH z3%*CGkq6-7=1`uky<_@uH4|ng#AXl>w+2!izocKUe}nx$fii_o*pvL+{3J}Facdw> z&DM+sYgZER@Wl@Rj0G=rDfk}yT}!>tWpQ~vS+NCh`PzAI-mR$d>l7_1HS$E|1N!Sq zryF6u+edrS41y$h3t(}1KJk`Y5_X>V68Qz+1K{4mQ;AyxF@a~cV94ngX0}mkx zmP~x}@-yisa@sM~Z!Bnfh3V#hJ*H80xb|KC`5H}`mj`gQ;-1?47oW%2^5^pumH+?% M07*qoM6N<$f^zEnod5s; literal 0 HcmV?d00001 diff --git a/textures/moretrees_apple_tree_top.png b/textures/moretrees_apple_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa3cd29e97ed10cfdb79b147e2fd1418b624f38 GIT binary patch literal 800 zcmV+*1K<3KP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU4s5ji!!H2?qtvPnciR5;6x zlS^+}R}@CqIrrXxG3H?~*l~zcCp4)NM5IWOI_M;wM5)Q2 zb%GlL_`%}><~}(0oO3%Mi96_^d%i#Iz4l(>yKkSSK^P$g*p&ZWQb3_lz*S1|=wXY_ z%h%l4zfQGM0-(`2!1pH@WAObs$8S%NQWD28i8k027K;V0wU+tflCSns+N~;D#RUEc zaeBsXzKGT#nHxo(9Nfk6G6*3U^^W=B_X#!yH%-@bx7%%k={YY?29&oph?QpYW=NW* zl=4}&av6%b4AsURc5XJQb`9g{4A-XMNP&-c8S!Q?X10v6*3$f<1wb$xadO(DxHCszUS?TAjWNf^brQcA#3zjL1# zNsU6Kfaf|Ci$yYyhf*=aIOe@EIF7@jzvR{B296_;0^IF#iK#y$iX#5*^|98HX!D=? e{#*BtI{yO!np)XS&_uuh0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU4sB^ZH9fB*mjTS-JgR4C6q zkI8COK^TSqnr_{?V-IQ41WiN`(+Y86K-BmSf_YRo;uE+~5JXfAiit_u9@BTMs=w;G zX!I=3>Kyn!a(XhUw2h@O&IgQcJC7wgudUn3BLFCBJ?h05vrTJ}pT2k?0=X_qi!KgD zn)f}Ls;bsyTWegE4Iu;oj_>VF_D75o4gdhqOA~7}0LR%$M#*wh6GD^}#^RUrc~R?Me>T^=32Wsq$nG+r67c~2KlR#Nk3JRv+tKn_!lJwI&aaXk!%eDK%=b`ED)UM zv5cj#&h=BZH_WuL9dz59LC+aA7F&aPEO)Y~(w0(6t#e@zNWofTG`j6HAB-{;6t#A~ zGw78Rz43k)h5YCB`s0u3)&ZRl15OB$oN4?D0GSFHCC+yMaOY}uwJiAaCy(>^Q$JP4 zVn0y;P&ArSS~g~oh6Ko}Y&NwSq+uX90B}m_xSuGctkFfI2YEIOLuYg^O+1>`Vit$v zK{j0##^S+l&dcTXm-D%jA`JL$FSbTAN?MD{Whn)_sWdvz8QsaFSc=#0zLArMw*kO+ z@Sl}YA~-8*Ed}F@5<<{<=Q}AF0PvU34go-0Hy$Lh6zi(B=tg<`_QToH-Eky&t&tL_ zH5!ZkRPnMgkM18#XA6sN+L+cLCD2;rjBceP!>h~R vWn;1^2n7cK0%TD%lt9twK=8$;S(VLSPj6FL#Huww00000NkvXXu0mjfvs5x% literal 0 HcmV?d00001 diff --git a/textures/moretrees_beech.png b/textures/moretrees_beech.png new file mode 100755 index 0000000000000000000000000000000000000000..ab1250123c0bec828df1dd9d7bd22f6b2ab67bc5 GIT binary patch literal 706 zcmV;z0zLhSP)N<2DpT4=*WFlw`Mi5Cq5qvj1fT^ASvsEr}FgHy>^w8z|JNQ|9l#9_rl0 zZHqW-Sz;gtPaB;n%>4Z4Cx86;$=C0LB}OJOd_4~^%GdKi2H?X)&XqbkV+?Ysz#ur` z>$wwsz&nR?4mFn28rB-L4@3<3U=b%6V>nZ$)J7YFp@X4HN*A{^GJ4~69stzZ!GK@{ z=PcF=lUN4O#-Nl=Rq$?lhqlI*3quD0y$^7e&cx-P^BVnB>4;)HZ&T5pWr5bM~sm97J|f~wM033GV! zk4_(*0dI{VOg#6@x<>Lpd81Evx0RK z!P~b50iMsqdfWK-*OSl3jn|%W&SKQCYzqKK%3wfMN$2@KmMYSR@_HTIZwo11oL9jb zLur*(8*z&~KJUEtMDU(%nMqe8=kne_QF?9UBQeI{$``eDj2KjvI5~_lqH2L<{9 literal 0 HcmV?d00001 diff --git a/textures/moretrees_beech_leaves.png b/textures/moretrees_beech_leaves.png new file mode 100755 index 0000000000000000000000000000000000000000..d0258eda0b6b14281789026453e685172228530a GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE&CtRw<5@DZ6)j=64f@4fc7g^*iRQ zQ`0w!%oCHiC3yO5(xIihS+;+cExjqh&@p#=(!Dd+kN-}uv5e&vi8xZJ4U}QH5Ni8s zli|5&#s&_CC((~erYqR%tOSZcgmWw*y|@#-oU zkyM%bEk0*$!!`)P^kx#*MKJ{g^r0=LqRaI2VHYY+WkwIz9j(>gtA z;f;@s&u>}me5K%?7l$CjCne#sR6U(j#_nqT$yZvo3A?zeeg2U5{P%wm51ZLc+~;%s zmNkgqkl%jDX5QNq7y4#&e13F&{=a1v`=&l*-ScA4)Sru9TnyS{pXZt`^wNIf=ch_9 rTNUTO6MA89ajp6<*PC+-O4aNQ6D030`+IsjC@wr*{an^LB{Ts5?Mb^^ literal 0 HcmV?d00001 diff --git a/textures/moretrees_beech_sapling.png b/textures/moretrees_beech_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..d03c3e421e93ed59cd8682fb429231b9d008b060 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP?k0>9r4r`&@DWK42PZ!4!i_^&o3sgN;nEdtMmgcT( zy2!-%;p8pF7k~MmFs2o&qjnLKaRo%)jeh1I-ASTXO^HLGmdiJ` zs)k8ZCbU#qvfQitdGbNVl4EV&yxffLH3H8P(-RUB{Z*vNHD>b1fDKOgr#IllhB stW3@to;z>O@BqP_-{zopr06KJ<5&!@I literal 0 HcmV?d00001 diff --git a/textures/moretrees_beech_top.png b/textures/moretrees_beech_top.png new file mode 100755 index 0000000000000000000000000000000000000000..6d620069402c138da424cc7fec497a7510f04a15 GIT binary patch literal 843 zcmV-R1GM~!P)}7fL2@p6<2^n&jnB;N-l+hhK2@- zE>eWp0wHC!DD09=v`ZYv|2{Kwe&$ekSBSU$^nS&w=MkTMdK{K3OCwg)0*rAOSCc3S zK%OXGN58rOBucW=ZlG)x`24*?&Yn;Bcqe1nZ{p*WgZ(agUgCvkJl6bvaYG1#(YoZ~ zc0r?=GFg_WTEJXezWeea{ZAfX*9E?qBjS`OZ&Eu)9H)Gt5@ePWcaL~>`ZHgB^F1{I z1<=$Ldk^15-%VIvUy<(gpj_jxULaJ2%5!v-62&Q5DS7MtceuabG`rA2nH6`EQrM)*GNfKPC`RBJ^SlwJ;=eJnBMhJm7YrL@>4z>W0m9gL) zdTF@1oKh{Ps7z5#uBpA_=J6ktdO>Y80NxbTuEuBS<^jOvcuAunxi@H&q&fO_f|Qc1 z*J1bY5G4~34ZPiyLv4|E1DUcuaJQ}yGQyPx?<{q>z*jkLYA9zV#bnOlgA;0 zE(==2K6bfg_T(wiR-2^NLc|fW1~XgG8t&43b05{|Fd8q|&J&`;VfWkdtR!AlJUD3K zttIJpNLno-C5e=K!_s7W6kOFJERwz4R+cM07k2lN51CK%m1`Zl>DF0vsd)JR(+@4;9pZp VZni8G05t#r002ovPDHLkV1nIldmaD) literal 0 HcmV?d00001 diff --git a/textures/moretrees_beech_wood.png b/textures/moretrees_beech_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..66f2b7228161d6681ab3da2e94a7c2931475d3de GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!%rbmN;uESQ_5)2}_H=O!(Kufk zWSh<8C{Wuz+3DzNem<730|_z*Ff>8EDPVddq?jc zV$pGHPc5&#`sUp1esklKze@Y0&(;5DkXxZ{)?6Q4&eK9$| z_Tt}z9=npJ{t<4n3A(Jg&~KB8&;cjropvcZO4dYsp4_xZfUounSHMFz<~i#a`(0ms z+g$yB<*7Gu6HI6AuwNN5H8N!Nnn{bgQk(M%E^B6+ob9sNm9Wfgu2s#pn$|rHM{M6~ e+?mZ@z$o;%?DXGEPj_GlF?hQAxvXPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*Y) z77jJ?hxG&i00Uh~L_t(I%UzROPg?~5fWOmo4!r<{_LNd?Ws|j~V2d5FArW;hY+hpA z^u;CK664;?l0B&L!RU)m>a+2|%MxeeW;D7X%OYgDx=S~Z07amo?F#hJ(w0Jtw1w6O z6K~%?_`c*5E?+!XsW;Z(=s#k5b>jW;Vq}D#^s8A9Gz3qO3)+H4|P~K(X#2<+gJS z3_XJLw2MwpFH4KleEPw=EZ+|E+BMknS5JK1cSfPajPx<)Dg2ZAgjjQ?=H zvKX9Y=I%`_io)RVagIK5l2|0f!pwDUT^hw$SBvlXb4XepGBVNS2%G5?inRqPlgW|E zY|y-aAD+Ge9GxD%`Qj6Tfos%=5|2LpB%;>LW-iBO>>kyodSv$S_wY(5U!G@sS;f_V zm||g#l~9>Ubr!T%{_RkVg` zvgvg+8j0U$r%1*VNX60~&zw4qL8oJLBTXzCB9lyVpVtSw1!4;`O#N~dS(K@^wPUmI zLswl#lf8qrxQbLIi)^J+1j8X(+wI&7FJe*@67evOZXa!3eYCl~P}*a1;s%*?hEght z-R?poYLG-hV(jX7jV%X=MkD06^2`P% zuy;6+%9OE~EYzFKG~1dnTN=1Aeu;c0#cF7ZuC52r8?A)rg2ckhSZz(znRHm26xP#Q zNcw66@x(e#w~O{pFN=%Q1ja}IGZT7+{$%X$nO2u#B;zWBk3Geo+tFvKF$uXz00000 LNkvXXu0mjf5xLB4 literal 0 HcmV?d00001 diff --git a/textures/moretrees_birch_leaves.png b/textures/moretrees_birch_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d2bb825905132b8e7bacb518b922bec7ba2c43 GIT binary patch literal 712 zcmV;(0yq7MP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*Y* z00AQW(i|WF00Kx!L_t(I%Wad*Yg17W#eefY5~EdY2{g5z+C@nEk{WQ;tqVmq|3h>sQbb&fbWw5R!mSGhV|+=Pf{IwFg;uOm(2` z+qJ2kui+7En9#Is*0?Lj7 zd9$8^0dvZ5*|yF4>vgf9lRN>O0TChi8$i_QP!fV>K<-9PDFOG8>UfpXWU0#u_Yqpa zQ^a5O#dd9Yf-nr;hKCb#(6&MuVF~3A@C)3lD96QcHg)8{oAZudyo0jP1NLUUZsWSK zc$7V!KmIjqa^`}nDy@3U)Cs16p;-&_1qEmp4ndhKnJ$_2`OO!Jos3Z%s^PEtGME`u zoX*HXsPEQ|VHv@JiFYHo376V<&3Ff}c!nH!AoneY6LY$?j><58(p=;r z^7Z|9sf<-jc?}?sO5!5A{{ivlJhfe$(n{&@w;g!D1^J(Og8hKCS8K)#VMpbEb6G$+ u13W-jM6pb1>1rCwvDo|Zn~jf~UEDu-FXp(03 literal 0 HcmV?d00001 diff --git a/textures/moretrees_birch_sapling.png b/textures/moretrees_birch_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0c1989c56fa73ff9f39eb457a83afd1ffb7cc9 GIT binary patch literal 457 zcmV;)0XF`LP)Px#32;bRa{vGf5dZ)S5dnW>Uy%R+00(qQO+^RY0TLG%B!%t9M*si;TS-JgR5;6} zQ$1_KP!v5+x(Qu6IoYABnd84O84B(?)KUs!z$_iQbO>=Nv_m!>ItX!cNkPOGM3)rp zKS<7~F05xggD6mD%%e05{h@ z03c}3h3y#Bi+0=n&kStGpadB#T~#E(0O0ccHpQ-x?Y`bjaBoRl<#Gx0CW(NX!s@@zNtX6jYxit5PB;i#j9GUly2yB z-#(rhdMlATg6t%znzb_ZQTmH6<0PWhsiejbB$fK1w-UBv@T644`^y#pP&zxtNvVjS zJr{$e%h7PG_9++S2%)zUL3=J*ZXJ*J0d)UI!?D^+E06SIJ!Y>{%rI5f>W!p6DGjn| zbt+1WIEi@Z-9Z47kitm|^Rn=pAJ=m02k$-s`;=*43xtTM00000NkvXXu0mjfP>{gQ literal 0 HcmV?d00001 diff --git a/textures/moretrees_birch_top.png b/textures/moretrees_birch_top.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca4aa25fdd291b66233c7f1bc815b3ee5c15a09 GIT binary patch literal 830 zcmV-E1Ht@>P)i-nz!yI zvu`uAJ2U4TFSZu?{{Rnv9)6Gb;?wu-c$`!A1i6H4X2}bUs~iB9N|OI?IydBn2EbJg zje3C6vx2Wb+2!ZI9&`827M)gu!tvSaZ8C`_6ej1z#TCE*`3NK6G8%GtI>8O0AEk)T zKDuo`+_}Z>-8-!8Y-8s$^mK&qO2{AtQy^3cq>B^*uG?gE^pJbseNSdB3Lw;)m7N{T zBx3mNn95oMn@veh&k)MR3w@;WkR=~ccPMwaxwX}0@9-I_FcA1I0K?;B>b-3ozXn!N zY85E8f)K$g59weZSzYFXJKH=t`4^=moc4!+!2mYPNiH7~Zr((XB1||#NC%tEaVu{i zoQ2$Uk^-PSE6|PvqZ#+F2`dBAI3+~kue}XGQ4Gk2*Erz_#LG{TlO-E+iu1W_uMg zpOMWHbdu72s|P@7sZ3a_(!9|{mVEN7KFjS5tkuMEN)+cP4E*rN5ubmRu-@5Z7AG7X z91zxP1my~@=YoYeifDG*gq;pDsPg=*Prd9SKHh!TUW_wtw*tQX=1a1?Kq`f!N?4mC zg-3b0g5xj7Bs`a+{lB^Y;787f>B}htsZjj-aF6zCjdC?$wYh?)eCFwt;oyuU(^%OV07*qo IM6N<$f>(`xLI3~& literal 0 HcmV?d00001 diff --git a/textures/moretrees_birch_wood.png b/textures/moretrees_birch_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd7f6bd72642f8cc7bbd7e37c3fa0f8e826eb2d GIT binary patch literal 781 zcmV+o1M>WdP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0T2KPA`-L^k^le#pGibPR4C5{ z!Ap-6MH~R|e|1%LSHF9DW@l%_1v%jf6C*}B5o6*<@a&mz^5RD@ei08O9zA#vFkB!c zNQh{%8}>Qu?7X_CXREs&T~+>m=;uch)AEdESaXc2HXTq@?j2a+wCu{gj{$%;o6+Rf z?DXI3W`z#_`Xvg&-R6U*42z?3IMzmO>SbFuO37+H$2e%J)xG=QcI^&hN<8op_@nX@ zdA$t?TFfs+cTGd)ITDBQ-klqw6aW4Fvb!ttaw0`bs%j$%OM(FPuvjdDh&fBDbYJkb*DI3+4tRedLzs8me@3nHyoL!t<&fb%6zWcr?CRq~dUgcSV zG3M182o}nPY2hJMRcpR$2IY|YK7fzh>e=a=S9zL9!FSbiJUyTulDczVsAR7Mw_xKa zTP|jRJW433-k+Qv9Wh2j#sfU~D_)jmnr2P4?1d=D`%nJ(?X!Ci z0_saCoO7LMjn?U4M4I~Q?&n`!T^yTUZdNlXTCh&ZT@?9676XDjPs-7BetD);i!mkH zAbt1lC20NS{Rbz9|LnF+nq*-_!M1=@v)x$Zw%aQj1nbpBQ!oDqZ)J3%(w)_+00000 LNkvXXu0mjfz`$IW literal 0 HcmV?d00001 diff --git a/textures/moretrees_coconut.png b/textures/moretrees_coconut.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1321ff6b90d12f334afd786a081c8ccd8c1fc0 GIT binary patch literal 861 zcmV-j1ETziP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*Y- z4<^D|=r00P}fL_t(I%RP)uXk1koK+nDJZ)P%onPk%1q}VYvjUa9ciqdKnMGB4J zVsud`ZtS8UW>uje1T00|D7X>@H&Vo|iWL_^6A(mK#b7||UtwBXQ*9=FGw;v^lAD&%Ci2%U6FT<4$J{%=H<2yPPkDwkf z9%f7x7SEJq+m^^UZoV?Z;(LFBQtS>c!jUt4oMtR3%gj_rT=$S#K>quXc@$zD$+#pK zmlT1=`kS*HS9?M88@zgschZcf8$Ncn!R?s|?xC2-9bH#K#fOOysv$%^l|p!7J!9qc zdGM(~lChu_&6-dAV2c}%wYj+!Gxt}@fk5FoMUfPUQ)uUK))HQi>3_M(2b#-(qt%Sa z0!`pbnnS~6J;IcZS|cPij@qc8EtXJ0;Dg#R99~`l%@a^K_9&r>#@{Y@VB=q&9K_7~ z0dnPMragt~M2xJ$8{EaKdKje$$wBiI1eQ@^sEecYHO2y^hOLy21+3u4j!LL07xpl+ z7Nsnf0cie!`8wZQp^OdfTQS|ZpmJl(-b~O>9b)_Th{!n9$l#B1DoT-xP~w5+ao8Mk zaBNUJhN^?~UQUo(^4wD1HB`e0Yf5bBGfXWyEn(W{@(=HW&(~1q46*|4DdK+;8kGo= zlu1t`2&yPS3pO=WoREwPTEFDl7e-fdFz0j?eP?{uXJkLvd)D^pP(4;uPsaZEUZ}a9@q23s;5LkX`7r zi6E>2XL}$&!jT>y9hfBPO_A?!Q_eLpa}93Er`!(@)Bk@U2pvu!tRic$b_(PU$gd#V nyWRr%4lcdKZu}O4u!Qg*6VYKkM4QEy00000NkvXXu0mjfD~o)z literal 0 HcmV?d00001 diff --git a/textures/moretrees_oak.png b/textures/moretrees_oak.png new file mode 100644 index 0000000000000000000000000000000000000000..431695ed70daddf563d426abecf1e65be7cdc232 GIT binary patch literal 816 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 UFL*SI@Bjb+07*qoM6N<$f@p3(F8}}l literal 0 HcmV?d00001 diff --git a/textures/moretrees_palm_wood.png b/textures/moretrees_palm_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..ddbe9a93cc673b9ece1570f8a76b6fc62e85f762 GIT binary patch literal 743 zcmV?P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0T2KV75q~Y8vpp=^eT-+uX_uGbRvxOvXZLI?m5 zItPkOq>7rn1y0G2$`nEuh?A+(IZ@R0I$K>QZgVK$<6FAxj~|iwoCn9 zD4kqS!3CYEa*n3__3=aT;LZ{N0#TvW|843V=M((lS@ZtMq%=}V;Uf1wEhi`i;5T30 zWlrR+o*(LB7TRs{LpDFT`_sdB-n%W7=HQq)xgIEDwZ_oxrtf}g&(An`AO1~l1f~>h znIlf-AfzmpW_DyR|DrGoiKwepclI-Up0hsgi{002ovPDHLkV1l8Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0Syu*Gv)u1(*OVfL3Bk}bVF}# zZDnqB07FtmK~zstIv{6cEoyLOXCQVlE-)Y{b#rNMXCO&RM<7a2MMofZHZmzJAaQkJ zY-x0PAUz;BI0|`QxU2vG0gn;cj2*OnunbRJYO=|$;dQK`bE~E+2?Azx*zjy&4ij&NxXrJuoi*?`k zA;!l2lfzQgn>~Lt9sTh5l$cs23tqK=^?_k_N~umK7`rz8ybN#VOW;x5sbKjPBz&&N990klq4|QHvmtQ7J{djq9e7RZ|E)@GMnJ12cozkd_oft!W4V=7V7m zV0hSbjy!9v+92^iFY6rd()km&=M-#Hh<{!XG_6WyoCKF2XP}AaR3X z)pWzaGi2T5Wm&g6Ahay&LdY=MB1A7Po)P9rO$++2EX9XU^Gt}=FpR2hvb=(Nr}Dkt ywY-#E$kXxYcyM4*f)H^WHVS-Mh;W~$viTon(|7(lUXV%v0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0Syx+7Oy!hqW}N``$z3gckax+Gnu3v)0z;Q_$<s5$;3uRr~fUN z1i+y^>WHKIXe8pUG(guR)D=Y|pbSIA`VRF9MA9Hz?_+uy_=?r>7E2o7zL9`G@~V~8 zkYhEfoo)2?0Mi2<1o(Ob8%208QAQ!60MU0$u6CJ|0F%>sOG8aqpu$xiDuq)K1RCEo z6tRX-B0DkFctq7wsA0iF`n?wz|KL;qGzF=)s1SsZ_#nh8N!cCH*xDf2)5Hb_x0@mJ z9I-vbTg!(2>Ia&=0i(tvLV@(2LO8@$MkEA5>2PU{d}Dy#zCma$9w_sQ%{1boTK${u z(S6vgV$ldpUJzJ|^aAQ3x$uarB&-}VP?W<8v0I{QhF=!%<$VdTwF_B^u@)f&j3i{S zp~x(eQUub229&^86|x@k&zS{YeeE(`4Pc!7Q+l@pM3KhkC90njI1ov~5YQWaOje;v z$L8H_UOaVy%P+mrHVR<*{%H7n&mOj(8L7~Nf*>mqnM3SY#Gu3ub9!aLRVRX1uB^Gw z`0;vreY0bE`K_7M`$V3d<$;3Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0SyrmDWUNu2LJ#8C`m*?R5;6Z zQZa6XFc2JzlM@6kTp&@?xlKWP58xyBqz80j#=_Ad+xL~DdET(=& zbu2J^Oc*b-sk>69e#XIN_!$=zjm7nRGcH&;xD5X775)2{F+?H=<9L~)yT`ELrOI$U z-%Q<=!f5KQl*h0Dz*<0YG#DTGHWxCQ`Wfq@i0qI3QcNv2^GJnaQiJV{E)tQK6!HG~ z4J{sp-4nAq7O^?Bsh%0kw|O+?UAOJ^uRY*`{r`*)bZ;r>#=4rZ{)P0OS(r?;Yc~aY zPjG!s$GKWlE3U1q9ZL7{94*aYZvxsEWa5IAUl+O!`{LzC@Bjb+07*qoM6N<$f)awP A_W%F@ literal 0 HcmV?d00001 diff --git a/textures/moretrees_pine_sapling.png b/textures/moretrees_pine_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1963a04835c32f6fe6d921fdd037e3cdf83378 GIT binary patch literal 443 zcmV;s0Yv_ZP)Px#32;bRa{vGf5dZ)S5dnW>Uy%R+00(qQO+^RY0TLH7ISv?lc>n+bO-V#SR5;6> zlfO>FP!z_0Ek#SAQ7IvWMK(f&!GRE>Ol-ah2@k;7(FgEZj0+PQLgIqr&P0p>0|E_J z=yf0^L0bO!ZTFn}o%7vuzXLl^FjHb%UfxBP>w~RDBtK%y>`DNcd`Ku|9Zl5$aN{l% zzpm+uvF!S6VUHF>o(4>=Li;Jm)#5^a_(Iczd}fb`c5IrBv9$LS0MZphL_0Q4*;vK? z%J(eb4y#1qAmE(&H!oM(=OpDTThPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU7+4+kMSy#N3Ln@L1LR5;6x zlTB|MRTPGwJH9hc;@GBf96NPO4G9%-7OfNsfr8=L-lEf}0?^&;l1`2h5e~;0zx>(9Qy$YKA;~OG;Q1&`b)eUx7TpuJ&Go)3EEdlR*SFVVZ*21nHW8C~XZqmoahXp}t0EUySIOYqoIKyz_$j*Od zG<5)!T6=i4E~;F|jSi430buhHANiC%iGP~{BRIj@YO0j7%tRlbU`LIA`GYycO-5#coCED}E2Eu2^+ zDXYN3=9hr(<~rmV(-bOVx!Jpom>I1qY%D^0eg(DMK$4J3XAgiVRRzFP@W)?gh;7q) z;}$ON^Yg)wwN;PW5-6pBG120f?e-F-t9MXAmDAA>Pk|16O_Eu@y!RuY-+dG8oOiYh zxz-k5`&YJT1@)KDboTIT4*FZg2ba7OV0m!fWAa^_^;(aLRy3-0Jgu>5jOiQZ8LR~G zEHwOdu!Ubzg@VmSowG0^nl0FWdP?qclFa^Rd|!?Gi#Y!a=Nvm*@DoU300000NkvXX Hu0mjf;QeO6 literal 0 HcmV?d00001 diff --git a/textures/moretrees_pine_wood.png b/textures/moretrees_pine_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..a4942b2f2f6c8e9c51a0d056b9e8960bfd2123fb GIT binary patch literal 797 zcmV+&1LFLNP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU7$BM?xCCjbBfuSrBfR4C6a z#7}P&bsPua&+p&N?Cf-QySps5u!VwBnkp*Bh{ls9Bog&4aN#|8(HB5?10)xJj=urIIhagJKZv>_#5etv;ZbD9*i zdV&MkPw3(q@$;rRctLFV(={F*(}NANg@_haa}~DK!+*@M>x$8{elJk$$-ut<$yJ-~ zGcV%c66Dme3o>42A}D&l&35m(G9_}ny0CQd^VZo*>)Y0*`?9shy}Hzge{e76)#GGl z=D#fwEyC(@@R#r-9-O57Xy@^-dkKyIedzZeiLk*gpJ($`5FsmJEaD1`g(Kt|%?Rz7 z?GK4FID!(G6kyM8ol~tf=FiQ#KRPqxvI2mqD%k?g$hc#(0XdsZ#$gzWN?pqOGOsjA zPgLVo@8pLrAHit=H_ zAOG@|h?l5L<@^eiZ--rQ>53y+TZZt>;7|QxPc>J#A5V85u-WdtZ1YQWs%c9e>lLJ?6)D(z8cTm;}pAyBXcZJ;FL0J{llAp!}`VJvcuC;(?*2e;nPx#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn_ z5CJtR2^p@NZCU9<}q5?q+?yqS0J zJzY%Rl=LjmIscDy{_3^*I`RF08xvCi9C&v-QJBLxOAyvD{cM_-*RNw{c9AQ;jRLU$ zt<9i>nYl%@18z)AF*bS&0OuU#qyjiXUo$heK$HtJFhF7qo~ID&&|0OFT>XK%+rOcJxU?j`nYZ3N)VsV{Ki2t1E+Yyr?BDZ%4EA7lh)zrMu4_umnh z6AHBvRhP+fLLncq6el=qKtNZA|2+ANt(zJ$k|W2u>AzMYUlZV|RK$qGTFY`Aqm@Q0 z&}zlO4?kbWSVMQ$p;iA7Pg8Xn)`aQ(&SIU#K^o)TiQ9~i-r_<}FO%bAD?j-LfVqVw z;&KImp_`Kwua@}Z?jwv?G~g?Qug-nR)4!iHGIk&BRg?IXuJ%^u=I4n`WtFQB+qMyg zH6(F@78DxIorh2O{FA-ZMp3rt=X_>gERgek1_v(F-`fL#=LdwjR7t=7Mk7C7{T+bb zE5od-D`b%>QRLU;0cdUO$cX!X8lg}d;Y3iczEUU3Q*78!PjT>iYJbl*ibExiw(nwk zVV=M#taId}5Nj+0zovpMjSXl)uoc6JQ|B{<;!r6~K!hmpQA)8~j)}rB16NCn2%TNW zd9$fGYaV`YXFAlH#pQ&xg<3qVFaihLcKioc3az!K>$7eECdWqUczX*P`1qX`#1nET m%9RAq4=~28Qs20#k$(Z;HXch*gveL`0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0RjUL1L?}QMgRZ-PDw;TR5;6Z zQ?YS`Fc93+Xg(nP0;qv91QCG}YM=nupaQ-I5(giF%b)}g1rQQo#^=D?`GEH(n%U8v zZg)=v0A*V*SkSb= zY4Lv2v>l4Y7tAZT$S#lQB{6AuJSn8eG9nilKHlD`Y-<(+m1`n*Lzu0-s mJ?szmcCY_~?uW!{Joy0{3H8Cd2MP!P0000<>&kwIgHJ$?^Mp+vFHq>Lr;B5V#p$g< z2f3OYL~61hX)Wn)ymZfq<$bNw{EPixrq((-z0v*jXz3c&8G2$$%T_!K%CI}PN1uVgq>(Mx+ekjBKx1jbBbMLh9IxaUnTDVm=wso0n|R zT%5b~qx==U4)bC!=~>TRm%6J@>^OCG(&eAuDtZ^~>pbejcFwRwGUdSnzXi9yeq;99 W5#n{Q?w1qLV+@|IelF{r5}E)?uYE%R literal 0 HcmV?d00001 diff --git a/textures/moretrees_rubber_tree_top.png b/textures/moretrees_rubber_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..dc26a7a6381581bb38b392c7b4adddd933411f52 GIT binary patch literal 791 zcmV+y1L*vTP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TUE4H+Xm5fdBvksYygZR5;63 zlgn-#RTzZ7K7IN&?H=aBjGZygIKo*($c7CIcmOsD55N|lgasSk#arG0iA{tE0s)C2 zj=+v*+D?0V`hG4f+76<&r7G3`tIGN8(<7U2J3>!l9B5lbs|>yr01SM|9m-n{z?Xta z5+b|C^5poCA6{Ma@g(BjJVtu~%Y!lHO^tRmXC12@(6HcpQb8uzWMrF3>FCxmks0DK3a8Lug{4F30ikt z{_`gQJHs)aAL01{QJfIP2@emZ{Q7r_)YcOE0wDw!=P#Kr4soRiz;HCf5j}T@s>lhV zn2(O;yj*1n*KxSW8;miiu0gAg^~D+17>YcjsS4_HOI73mIF18ATebiQ2^cBf3U1!4 zDYsdlVEisooZ$H(j|Z&KzMqj7{l>ka@N1-${lS(@WG z4!esbeh{+BQlylOrh6=pPVj>eAzZ967_E9?*OyFo+HzGicz%fL`o}bN2|#xBnySc2 zuQz;f{2>5!)pJ$XCy@v^n8p~RQC)+zmgUh2Mr*<-p=~SPd*I>u0c}$;o$vPsWkXiB zNDO@U$BM_QW4?GmU2S>(+s_P>m>?V=gnKK#(UyA?DIlFD&-P9*Z$iEi3 VWJ4xNjW_@R002ovPDHLkV1lefVIlwk literal 0 HcmV?d00001 diff --git a/textures/moretrees_rubber_tree_wood.png b/textures/moretrees_rubber_tree_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..caf6674b378aad50d11c8d0d1a320aadaca2603f GIT binary patch literal 699 zcmV;s0!00ZP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TUE2C0~z|761SOO-V#SR4C6q zQb}tRK@@(qc2%#lBoib;0wO`OpyuE~;=zM@@HdMf2;x1iC=$mwlT2nZy;jw$ZVzqp z9X@#Q9(>CqFHR1d#wsPf_l&WgvqU4d4*ehv0idkR<|z3yUm5H8>*o&xDOT&sd#?gH z9A@ZjUetM6SGCQ{8UO&`VDIj|oh?QQ@8>}p8tVXHHeWQxY83!L66?u0HP*fT@VTr^ zmT2@XzgiVq1%k7#>lVvAi8ZBkd0kQhX(Ft{uRs45Wiy>E=Zm!zoIKv&;hY12_Z|Qk zW8Dn`DYO!KX?him66=t^dUlkhk>Kpt^a5_60*Ssw#5h!qMF23?3C^V8Jc+ed0dXR>7<0z#RvDHdQ!Ry93^!@5+G)SVLtWDQ-)?y&V=HyNq zD}Hvq`1E}W0M2>ztyTg60x9~?l1LLmx~>C&v-8F5@|r(=@+gf|mPQVJ8mqo0N@?Ag zG!6kEFY9&D46{gZ1^}E=x-m+lFfi7Yl^G3UtpexVAPv3ujlnonlW}@+l{2*Tq^2ex29oTh8cc5Njpgygwz!2fKYHw^|7yg0rG(q~MfN zLP*=TUDq+j0D!+dIRpUX{A8SJC5p0f=!aSK?&FvJ``f*HLP%9x>u{JwysXX9gWcK1 z(tCfkGIiq!A(2K(X>U3TgDlGyi=}laIOC&1eERJ-A|4;@P0wd}Y0_9p`Tr@`MMVfH hD`sfT}ECGe%1VsXL*2n`aE46Lp08pUX0EYHWXpF@H)FX=e){H zpE;`nHH8GF6SUX#^9FLR+^-<;*RvyI@-pL@?tk8K?P)DOv3COzl&&U-gw?V`YgxjW*$E_7KP>R!Zg@eSYk`u@jGNeh@n z6&Gedl*%u;y5{+uV$X$31omFnhaAw}`#rYtTIXw#yB>ugSY-*L0k7%TMS2axa<1Q8;}{%N6Slf?2N5C$)HNH2;|O zsPN0yC0bUF!2(|T8KIw|%%8r^N^1JJsJ+Sfm5`(2$z_^;&Cbc$aw_Qy1-8GojMkl+ zw_#tn(-m{y*Oxff{!8zsc*o*J&ls{AXybf7le)+k%3C?27nVG=IV(@hJb6Mw<&;$U5GTz+) literal 0 HcmV?d00001 diff --git a/textures/moretrees_sequoia_leaves.png b/textures/moretrees_sequoia_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..395ad6e7b3344a6b319d645b529830661e0bfae2 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfT}EC`J{`U z`RMm;^DPx3Wgcg)Rte2=p8aat!A&-t$826~TljA)`<(6n=YMQ`r_1&>GTivu{t5SV zxhHp)<*s*l&$;gWM+@uhtfO0}ZgqZXH?MiAB#*Dd?AdL=3{(bB LS3j3^P6Px#32;bRa{vGf5dZ)S5dnW>Uy%R+00(qQO+^RY0TLG^IAw?bH~;_vN=ZaPR5;7c zld($zVHn1L_gRxmgG$I*Lnt3tP>66e+#)v#O%B>E4*m&-WB)*NH8r?IOH=D%P*V^M z5pmHLx`;#(A~xLDV5Fv=)zrJb@9%jZc%K*kb!}u&riBWc5kc_WJj8&l86s0FZ=(v~ zUpO!=RA#del#4<=v`2d~GcG2E2cA2yzAPvgg{q_-Rv*Dg_Is~g@UGD&3YZqEnvjHm zlAh)0#Mht?15^|83pT#F(1soCnKrdX9e|uj5sm8r)EaeKO&_lVA;7yCaATIzChENh z2e!?w>#`yRB|Xcz>vGnC&>~!2P7yFI)LR#PAGUpXl7gH_ad+>rW=QhK-q=EI(rL;? zpPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TTf!7Odzr9RL6VrAb6VR5;6x zlS^|OMHEI)ch8JQZ_5s{Eh9OKsU)O|f+RZ@`~nuRV#5#3o`MCNET|$*VjC>WPFWgR z&w2KAHw%@^ELd>&_k4A~TSxr-`ou+Xh7@2O|9hl>{!Se)E;K*A9P;Mfn6HoaIPTN| z7!03~Om1+_aXF9q<>D441*@ze)duU}Y7ry8f6;f}4!g*#!T!_d6nRRvS|O#xuhp?d zjtWEkAV38HQYmJC|HYekZvpVEvsi06eEOVpIcGY)qF$?EjpceY!k3a-7!p(hR2b6f z57-?%=45il`D~469r&I?`ik4pCEflpVXKKVhGvmdZM9KB1)(GWvx{?D-9x@RIpBP@ zMgolPHdt-2)?rG`_35AJA}5|qSbn-;F}@-?`-n3Z#1<6A+4h9{R-H3MNkV0M%O=Zt zVBS;+$cT7Ta$C40anNizP=pE!z7%D#}AA34i?dE78R{$#hDR zZ4-4Iql}Vbx9+0m$oL=8h4}7YDj}#Ii1o0%|pxtEmcu2L?WPI@+DM0-A)xf3Nu(`|l z;ng?jLgSnTptJ@l1hsk-zrJ-OXfzm~p7JrBvPcU&PfEaW+;8LjCB05a=zHvS+DI=z zCu{OTlb3f?JjHnVi4VyHPf4TzuivS2HIJDmIlqr0N^42A`A>cSt^2*s{{WecTDIZs R?e72p002ovPDHLkV1iJ3USt3O literal 0 HcmV?d00001 diff --git a/textures/moretrees_sequoia_wood.png b/textures/moretrees_sequoia_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..bc41cfb6b709d94517d473e31ac42aaadd49083d GIT binary patch literal 681 zcmV;a0#^NrP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0T2K;CDabD4FCWFJ4r-AR4C5{ z!AoykMGywiud83T@0}UjfTNKz8;i#R1Zr!-=^Yg#&-$Jk{ zs=yM0L9mbpA@uPRA}>-^<$0Q>adcmQ{zaE|owwRrjGZ+o^9pAQj1LJ0+qUMMQ{P*% zfOR|X({R%VFSV@mygwY`O=78$ya;M7oll41b{a=9a=X8Ce~o;8dY&wKZ-=fcxq5P? z@X|J8T&=aWW^L}e7+m<{_qXQPFZXJ|f<#~-XQY76;PD^qk4OdtFpvcU!4TY!-@j2+ z)RIz{Tv)bQ3lGEa?$39}(`&L;Dl3$0Z6c}f-MWmY(`h`PRqC>C%+-iAw!xa-I{-GN z!!EsCC+13)T%Y2H_m5iT;o$?39$-h;Lzguh5 P00000NkvXXu0mjf)o?#@ literal 0 HcmV?d00001 diff --git a/textures/moretrees_spruce.png b/textures/moretrees_spruce.png new file mode 100644 index 0000000000000000000000000000000000000000..6e4e67a0e3a93b9df8d0cfd2a1ef541bfce74f0b GIT binary patch literal 699 zcmV;s0!00ZP)2>@@0l;9;Ln%cI9U%m_^AMR8933BWHxJR!a6Oy#I-{y8dL19jG|_We;tLN| zD0;mPrr82uczj4%G;07!nj*7;ER}mUj%%SSrJ#m(#|LOU1M}Z^gwcu*?>`YnYvOoA zS(FIj((SY{41?|yA491vGEK>4K|dI-?Lk0t(*NT8c>!MyIl=v z42Ms-4`ZsTVzo}t4YNg(N-DL*_dS%_BD1`aC_F63!n6!*$7GXcEW?=D^#XugmgxL9 z!gp~!r}67LoS#py9g8AY1icRNI^pHT35IE)ltMQRlX#V2m@UF^xo1!mB~s>m|31YN z4oX!Fhkb%xw@J%tDx^EE#ptNdCd;^|!+36TnR*$SDnMAJ@VZ7SIbzG}qkff5bP|asjTYMoN9gde9M&kja hlL>9leE`^W;}25*J66ENot6Lq002ovPDHLkV1i7yIvfB1 literal 0 HcmV?d00001 diff --git a/textures/moretrees_spruce_cone.png b/textures/moretrees_spruce_cone.png new file mode 100644 index 0000000000000000000000000000000000000000..5144b710db338c54c342ec1ef15831168d47ec32 GIT binary patch literal 3201 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 literal 0 HcmV?d00001 diff --git a/textures/moretrees_spruce_leaves.png b/textures/moretrees_spruce_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..cfaaa1c58fd0521ec0699dc2f34f57be1258f853 GIT binary patch literal 333 zcmV-T0kZyyP)b>!3_P_%Wi=2=2p-}9TC&@J$p4q-56;pSE(!-qhlE{9g_adAl1>zPJRNNCjQ^m% z{mrKo&gsrCzQ$MqXmO9LDSSs^dlGP&OpGjTY2Xq zaZMvbeaFAw2>|f&)?hlGj1*{g8>Df@BJ>_vSeR(nt`hXVbfJDI4U7$*OU1=FX`HiRM174fLNloS ffcAwjvBC2nu%Gl14EWmO00000NkvXXu0mjfI^UYb literal 0 HcmV?d00001 diff --git a/textures/moretrees_spruce_sapling.png b/textures/moretrees_spruce_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..278d08ec8e1f53d59ed6486f96e5f2ec34027c78 GIT binary patch literal 425 zcmV;a0apHrP)Px#32;bRa{vGf5dZ)S5dnW>Uy%R+00(qQO+^RY0TLGg?i0&g%N#F;*ma)WnUt=wn zgtJfp47*JLWGr{$pO3mnU@ewN*WQUdvHj{@dvAUB_$rRNFdYwck`_4qHc47wOh#CX zB}rPadi&t&cDy4zIH1HU1;%8Aj3s84vFY_Ht=w}VoP{Esg+jVEPQML+nPoWrHrAze z+QzbEERn8_nm+>&=@v4UoJ!?E63Zaf3D1rVJh5dSNrv4fDp!B|Or2KaWRyPvjuejY T-|eP#00000NkvXXu0mjfA?dCi literal 0 HcmV?d00001 diff --git a/textures/moretrees_spruce_top.png b/textures/moretrees_spruce_top.png new file mode 100644 index 0000000000000000000000000000000000000000..84ec816dc7c0b46265abbc95a0d53df75d212644 GIT binary patch literal 738 zcmV<80v-K{P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU59I>^-N-v9stbV)=(R5;6x zlgnj&g~suzTac}YKQrD z7l2l0jVu{rt>r9<+5K_=K$_(grNufp8Krmt$vEcKn-}O|h%t^hGXTui71}r&z5u}Y zs`@k5EUxZg9eAa&0NlD7lIE7Zl=iPc zc>tp%BMRijr#4k22NO+JSkl~H>QUGWM=k)atuFGeU%6n6V`r^Ft}V?_aaK5dPY?x? z(P_!%QXPP@s50V70iX8=P2wwolIQ+wOMBL1d!<36CWue^NCBRw zs@0!7kGXquj-s@zFV?Cl=X4h%#Y|nDPlRWmQlh0%6=kIql$J*i?s0u}fvD9+N=bdD zg_IIqOtH4a=qbt%I7?#coo^Qx>8*6;=nW=}l8levHOBP*QTliDpXWX;H0@TzFP_Lh Uwm}GvdjJ3c07*qoM6N<$f{(;X-v9sr literal 0 HcmV?d00001 diff --git a/textures/moretrees_spruce_wood.png b/textures/moretrees_spruce_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..3b280a42a69b925a731e64bac51944a845e4ed63 GIT binary patch literal 718 zcmV;<0x|uGP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TU5A0aEf)H~;_wU`a$lR4C6q zlFM!rK@df&y1Hk^;~BqVV+`RLK^D9=ERaCJC-4Wr&#^=N1S}9B77-E>65$cWNigvk z&%3*;SQzmGSNGg|@X91;oJ2->7KOk9q;Q<-)^X!x(lY?CuKcubzAu`*X8ru}q#x7a zvbA3N9XdNSA~0Xt#oCoEA7_>b0pP)Ia_3Tq6lzT%BIky|y7EN0f6}fipG1lU(ulUN z21VmvzFn?sKO305X1cK**Oom?>tw#PMx*tzESy5@#nd?2`%!)S)%0S0va)|_Mokz8 zN<^#|76>)601J4QBvetLR;Ayt8N%AKe)@20+BcC=pAIU|LJAc^XwW)gfqqPR%_5RF zoP;VcN{$9k6yz>A6){FI`6?7vh8{SHBHZ)n`lp$;#_hSkTW`+Axv1h3* z?@YsSs#m4=UI3sI;H?XtY2WD2hxLcA#s5e{ND4!Z8>C^ENTFw8fiFkR!S7Z-do&)W zdf27L$~e_TxL7-_plo=QXoYaJa#`UfJ<|yg0Q5N3=Z9v}Gpouk)^6uaIP6m0G9uQN z^P0C3x^_0)KWQ2ZJJV2q+%NWiR*`9vNX-T&D_u9FW#LbAXEd%#-&mPvcG5Gwj(YLt z6eEKy005*=L^dvk8nec{VhIu0GCeZFzeXyn461cP&XG zmDkJyRqL&jt<=!vNqB!ZsVuX=GWTW6jv+E?p4r28aE361rO3~FQ7%Z_5c6?07*qoM6N<$f@n%V ArvLx| literal 0 HcmV?d00001 diff --git a/textures/moretrees_willow.png b/textures/moretrees_willow.png new file mode 100644 index 0000000000000000000000000000000000000000..81d7c813e0e24f0d38394b7a790e81d70cb58536 GIT binary patch literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfT}A;WC2J{z1tLH_6FglULp08pUOXLi+dzaN;I8(~O)B1L zjNA&Unm&!Lr~m(F?tXV^X3#87#S*W{CcTfB$Ngpcd&sh&y7+g&_l+Bqc2^n(P4Kzm zn?9vy-QQ0?-+g_0{qNbUkGD@1x_PtH>DUA#v7`yB7?xZ+%ClJdSNCNvPRsxMHYlE( zUzf1KIX{_2(Ijr3|Lt|(x2YT6cu*Y2(4^_HWK-U)#4V9(t5&I4@_R4}Y}K1TEjzj7 zgPp)3gCe(n-@_UKPT$*|Z-3>uveRLYvc!eoekX%cd^lzrM|J(FDzdDPW9)n`9?WpZ z{B8z2$3pq`Wa~#sJLmYO-#!~1D#dVWlauB>o_&{=PB`ZNs5xD7d)}M1kG+%<>Z%sK z-gRwP&kWvc=~H~v=HH8}e>NvLMMUGV5zF@9)d_V6US4HaS$OGKhN?yRxpKX8>(aZw z?iLZ!=)cJOcSXy+oO0jlBk%6Z=enpAgo!dF>`fQB_*VJS*GH>0&l=pi`+L>v{#K3o y;`Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*Y* z03tNDuig*<00I|DL_t(I%Wad(PZLoT#((F|w2kawAyg0uB-WOhj@|kXm>2>khQHF7 zh|z@$U7ENm?R0pUh>0SPm6{;6oyT!;%3~sDGn0G2^PR`{UExOf3urb26o7AM!D7JR z^*}mX9ZiQRgEs>y5d{=Q0g-{pY(xOWFaVzCaq#{?Y*iy*3UDAIjL*jg zb`#!_jTe84;S|}e?J6U?GstIz0@y*~?O42u2RjHO2$ll;s*mOhr`T9x1>FOb+hV>o zSGou`f--OoCAyIutOweD)-HqEWp=-Qdo{QEctur}@x|C=1Y4l9Z)dBc0NLH^q~??6 z6`A|;@ldK$Rrb&JiML~!ZO+>EbKCmGuM2BAHyK+`Tk3qrC9wnOCSBWlh)&<1h8V$_ zgqkaO6Qn@)HzQATvT-)CaxiHZtExKbu7^-ZYpXT*fUt%x*A}SUsgN8c_Fg8|Fnb x{HIHVGMt#Jef=^U^#;y&oS*#Wd;j<Px#32;bRa{vGf5dZ)S5dnW>Uy%R+00(qQO+^RY0TLH8ByskQqq-+pSCTT@wLY%?LJEN0xz4dBsgjJ0RXp-#lH5qR4?$8(VPH4D)DdvUwb_4 z`~?8?^q9BHFUXjE|N4uKxO*ICQji&9sa{|!m&bf@4FGUdkw)R4L^z3J06;~SvFY5< zx6ePb3EXCl8m%f>xjdv2xQG@R@qBTOkDWIp0vkO&<`sl>cZ0jfAvao8nnW=wvJ4T} z5P^;EX@?wDq#tpg4c5H~ZnH+0qo;{`6b_R{E0;(2v_p;UeRi9*RfL^GMJAfzH3(7( zRAd?NKOC`C0_*NZ7GbZwgdj%Jlk4imm_v002ovPDHLkV1n6@^6LNq literal 0 HcmV?d00001 diff --git a/textures/moretrees_willow_top.png b/textures/moretrees_willow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..385da0f4fdcdc43463d0ee67de86aeac7f61196a GIT binary patch literal 805 zcmV+=1KRwFP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0TTf>J0xvp_5c6^w@E}nR5;6x zlif}mR}@CqnI9V)`Dd^(5TH<^LeoG@A`rQ$RH-k}+dft=`yf>>d(&2xh^jF8*95a&=tu^jwgm`?|)?e*>&hEXBoE#sJ z!~wqVV+g2J7K!7S@?sUsE@Rncgb?()uleD}J^+?d3V@U21N`A7FU~yb)dESP@Pi>L z*EqEii)EX7wZP`q9-nQ0$!as@%5|}{)|iHgFl?T_bUD1=q*`l{>zp(RC|B-aSqm6u z0f4vXf3mT;Lwj#`4gl!8E;?_JNJW||{y2Tj!-Ewrx;{=VqF@`yG-rEfAImZT2&dC| zgiltLO7TYte|1B`u|z3FyWIvL@H%uZJ(idIWLb_*$#@h;$M5K*rd=)Io+@cZc%<4KCn zHHJBtE0YOD+r9<7AAF=>8*Fb@X*CwO9?mdL!E&R-;eL~XZ6FLmCMT#|-#pTdgD8qA zm6k}7`AMbB(OPpoj5+TFc%zu3b_;;s#fbH_McVh* zC|B+<@ID}fKz#k^p`J;Jy)fka@4g_KWjCc#N+ZPFMXfTIR;xSw^6NRLrxxLKI^O`G zY;E!UX$z-X!M1Ihj)QGmM6-x~H=(B#wrS#x$2@ywV44CU1XiorVBii3r&G>49kkZW j{>k^>`u@A_pX&TKOQ%q&nI=yN00000NkvXXu0mjf#`0+n literal 0 HcmV?d00001 diff --git a/textures/moretrees_willow_wood.png b/textures/moretrees_willow_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..07f90ddec9910e2aefb68cd96f5eff58b886a15a GIT binary patch literal 762 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RY0T2QUA)^$=g#Z8oj7da6R4C6S z#LI8gMjQa(-+0F38NcFPyYXg4q#{)jYT<;$p|`>oG>(uS+hKmCDu?2Y^+luFT>Or+p_3 z`s3*XLep;5DDCo;@vQdFZbj2vj+?Fh(rhqB%e8uV@2U`jh5%0^hlb;GUg=a%vybZvB@*)JbZ0N9^oRx8)@IZU$&k6 z_hZMINEk*pf0-r>I}b`b?|nqE_uhFh#-%Yy;&9a|0000SAgL^Q{QJRP#VMsn#~0fA z5F-GHB5aJa)|W-p3vHbrMiX&UYO93z9ssDW4{4==yG2&dVyZM&<>!Mp`YZ37gMn&3Utt_TXwxM0@h~?;cB~DuC`%_+qG2M(NNSCkK_31i+|9q8zlgE?+FRK^VWGn0!o5qr+9=z zf)GO1d1G8eF#wP!j}8D}7|s4(5+`ZfuBEcG-QxMHjSStn-~PO1oLf$fA|E zZvNbyoht3bq8&!#JZQCv87U_TLMY3^IKLv=6DcJj0hv|oucQBzc6aXHIs0_9XytT= shLi&ULg->SSm%?z=Mg?V8=K4RH=L$%M!uc+6#xJL07*qoM6N<$f=m}$y#N3J literal 0 HcmV?d00001 diff --git a/tree_biomes.txt b/tree_biomes.txt new file mode 100644 index 0000000..9b5fcad --- /dev/null +++ b/tree_biomes.txt @@ -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 + diff --git a/tree_models.lua b/tree_models.lua new file mode 100644 index 0000000..dd78024 --- /dev/null +++ b/tree_models.lua @@ -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 +}