From b188cdaa57c9fd1bc54693261c966e134b465253 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 12 Dec 2020 20:04:59 +0000 Subject: [PATCH] Added Mediterranean biome with lemon and olive trees (thanks Felfa) --- README.md | 5 ++ biomes.lua | 7 +- decor.lua | 4 ++ food.lua | 99 ++++++++++++++++++++++++++++ init.lua | 1 + leaves.lua | 59 ++++++++++++++++- license.txt | 8 +++ lucky_block.lua | 2 + sapling.lua | 19 ++++++ schematics/lemon_tree.lua | 65 ++++++++++++++++++ schematics/olive_tree.lua | 88 +++++++++++++++++++++++++ schems.lua | 10 +++ settings.conf_example | 1 + settingtypes.txt | 1 + stairs.lua | 22 +++++++ textures/ethereal_candied_lemon.png | Bin 0 -> 198 bytes textures/ethereal_olive_oil.png | Bin 0 -> 167 bytes textures/lemon.png | Bin 0 -> 382 bytes textures/lemon_fruit.png | Bin 0 -> 407 bytes textures/lemon_leaves.png | Bin 0 -> 2135 bytes textures/lemon_tree_sapling.png | Bin 0 -> 206 bytes textures/olive.png | Bin 0 -> 465 bytes textures/olive_fruit.png | Bin 0 -> 1130 bytes textures/olive_leaves.png | Bin 0 -> 1118 bytes textures/olive_tree_sapling.png | Bin 0 -> 262 bytes textures/olive_trunk.png | Bin 0 -> 1932 bytes textures/olive_trunk_top.png | Bin 0 -> 884 bytes textures/olive_wood.png | Bin 0 -> 550 bytes wood.lua | 28 ++++++++ 29 files changed, 414 insertions(+), 5 deletions(-) create mode 100644 schematics/lemon_tree.lua create mode 100644 schematics/olive_tree.lua create mode 100644 textures/ethereal_candied_lemon.png create mode 100644 textures/ethereal_olive_oil.png create mode 100644 textures/lemon.png create mode 100644 textures/lemon_fruit.png create mode 100644 textures/lemon_leaves.png create mode 100644 textures/lemon_tree_sapling.png create mode 100644 textures/olive.png create mode 100644 textures/olive_fruit.png create mode 100644 textures/olive_leaves.png create mode 100644 textures/olive_tree_sapling.png create mode 100644 textures/olive_trunk.png create mode 100644 textures/olive_trunk_top.png create mode 100644 textures/olive_wood.png diff --git a/README.md b/README.md index 6d7f8e2..8493d35 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,11 @@ Ethereal Mapgen mod for Minetest (works on all except v6) ## Changelog +### 1.28 + + - Added new Meditteranean biome with Lemon and Olive trees (thanks Felfa) + - Added Candied Lemon and Olive Oil items and recipe + ### 1.27 - Added Etherium ore and dust diff --git a/biomes.lua b/biomes.lua index fd39604..e0883b1 100644 --- a/biomes.lua +++ b/biomes.lua @@ -143,9 +143,6 @@ end add_biome("grayness", 2, 41, 15, 30, ethereal.grayness, nil, "ethereal:gray_dirt", 1, "default:dirt", 3) ---add_biome("grayness_ocean", -192, 1, 15, 30, ethereal.grayness, --- nil, tmp, 2, "default:sand", 2) - add_biome("grayness_ocean", -28, 1, 15, 30, ethereal.grayness, nil, tmp, 2, "default:sand", 2, "ethereal:blue_marble") @@ -190,6 +187,10 @@ add_biome("grove_ocean", -192, 2, 45, 35, ethereal.grove, nil, "default:sand", 1, "default:sand", 2) +add_biome("mediterranean", 3, 50, 20, 45, ethereal.mediterranean, + nil, "ethereal:grove_dirt", 1, "default:dirt", 3) + + add_biome("mushroom", 3, 50, 45, 55, ethereal.mushroom, nil, "ethereal:mushroom_dirt", 1, "default:dirt", 3) diff --git a/decor.lua b/decor.lua index f62789d..7512624 100644 --- a/decor.lua +++ b/decor.lua @@ -255,6 +255,10 @@ add_node({"ethereal:grove_dirt"}, 0.35, {"grove"}, 1, 100, {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.grove) +add_node({"ethereal:grove_dirt"}, 0.35, {"mediterranean"}, 1, 100, + {"default:grass_2", "default:grass_3", "default:grass_4", + "default:grass_5"}, nil, nil, nil, ethereal.mediterranean) + add_node({"ethereal:bamboo_dirt"}, 0.35, {"bamboo"}, 1, 100, {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.bamboo) diff --git a/food.lua b/food.lua index c4ddb51..0ae529a 100644 --- a/food.lua +++ b/food.lua @@ -272,3 +272,102 @@ minetest.register_craft({ }, }) end + + +-- Lemon +minetest.register_node("ethereal:lemon", { + description = S("Lemon"), + drawtype = "plantlike", + tiles = {"lemon.png"}, + inventory_image = "lemon_fruit.png", + wield_image = "lemon_fruit.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27} + }, + groups = { + food_lemon = 1, fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1 + }, + drop = "ethereal:lemon", + on_use = minetest.item_eat(3), + sounds = default.node_sound_leaves_defaults(), + after_place_node = function(pos, placer) + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:lemon", param2 = 1}) + end + end, +}) + +-- Candied Lemon +minetest.register_craftitem("ethereal:candied_lemon", { + description = S("Candied Lemon"), + inventory_image = "ethereal_candied_lemon.png", + wield_image = "ethereal_candied_lemon.png", + groups = {food_candied_lemon = 1}, + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:candied_lemon", + recipe = { + "farming:baking_tray", "ethereal:lemon", "group:food_sugar" + }, + replacements = { + {"farming:baking_tray", "farming:baking_tray"} + }, +}) + +-- Olive +minetest.register_node("ethereal:olive", { + description = S("Olive"), + drawtype = "plantlike", + tiles = {"olive.png"}, + inventory_image = "olive_fruit.png", + wield_image = "olive_fruit.png", + visual_scale = 0.2, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.1, -0.5, -0.1, 0.1, -0.3, 0.1} + }, + groups = { + fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1 + }, + drop = "ethereal:olive", + on_use = minetest.item_eat(1), + sounds = default.node_sound_leaves_defaults(), + after_place_node = function(pos, placer) + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:olive", param2 = 1}) + end + end, +}) + +-- Olive Oil +minetest.register_craftitem("ethereal:olive_oil", { + description = S("Olive Oil"), + inventory_image = "ethereal_olive_oil.png", + wield_image = "ethereal_olive_oil.png", + groups = {food_oil = 1, food_olive_oil = 1, vessel = 1}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:olive_oil", + recipe = { + "farming:juicer", "vessels:glass_bottle", + "ethereal:olive", "ethereal:olive", "ethereal:olive", + "ethereal:olive", "ethereal:olive", "ethereal:olive" + }, + replacements = { + {"farming:juicer", "farming:juicer"} + }, +}) diff --git a/init.lua b/init.lua index 2f57ce5..c44415d 100644 --- a/init.lua +++ b/init.lua @@ -48,6 +48,7 @@ ethereal = { reefs = minetest.settings:get('ethereal.reefs') or 1, sakura = minetest.settings:get('ethereal.sakura') or 1, tundra = minetest.settings:get('ethereal.tundra') or 1, + mediterranean = minetest.settings:get('ethereal.mediterranean') or 1 } local path = minetest.get_modpath("ethereal") diff --git a/leaves.lua b/leaves.lua index a0f8902..af49b57 100644 --- a/leaves.lua +++ b/leaves.lua @@ -325,6 +325,52 @@ minetest.register_node("ethereal:sakura_leaves2", { after_place_node = default.after_place_leaves, }) +-- lemon tree leaves +minetest.register_node("ethereal:lemon_leaves", { + description = S("Lemon Tree Leaves"), + drawtype = leaftype, + visual_scale = leafscale, + tiles = {"lemon_leaves.png"}, + inventory_image = "lemon_leaves.png", + wield_image = "lemon_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:lemon_tree_sapling"}, rarity = 25}, + {items = {"ethereal:lemon_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- olive tree leaves +minetest.register_node("ethereal:olive_leaves", { + description = S("Olive Tree Leaves"), + drawtype = leaftype, + visual_scale = leafscale, + tiles = {"olive_leaves.png"}, + inventory_image = "olive_leaves.png", + wield_image = "olive_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:olive_tree_sapling"}, rarity = 25}, + {items = {"ethereal:olive_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + -- mushroom tops minetest.register_node("ethereal:mushroom", { description = S("Mushroom Cap"), @@ -446,8 +492,11 @@ if minetest.registered_nodes["default:dirt_with_rainforest_litter"] then default.register_leafdecay({ trunks = {"default:tree"}, leaves = { - "default:apple", "default:leaves", "ethereal:orange", - "ethereal:orange_leaves", "ethereal:vine"}, + "default:apple", "default:leaves", + "ethereal:orange", "ethereal:orange_leaves", + "ethereal:lemon", "ethereal:lemon_leaves", + "ethereal:vine" + }, radius = 3 }) @@ -505,6 +554,12 @@ default.register_leafdecay({ radius = 3 }) +default.register_leafdecay({ + trunks = {"ethereal:olive_trunk"}, + leaves = {"ethereal:olive_leaves", "ethereal:olive"}, + radius = 3 +}) + default.register_leafdecay({ trunks = {"ethereal:mushroom_trunk"}, leaves = {"ethereal:mushroom", "ethereal:mushroom_pore"}, diff --git a/license.txt b/license.txt index fec6f6a..161940a 100644 --- a/license.txt +++ b/license.txt @@ -19,3 +19,11 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Textures by Felfa: + olive*.png + lemon*.png + +Notice: Most texture authors are written inside code as comments, anything with no name +I have more than likely created myself :) diff --git a/lucky_block.lua b/lucky_block.lua index 5a70694..604c0d1 100644 --- a/lucky_block.lua +++ b/lucky_block.lua @@ -66,6 +66,8 @@ lucky_block:add_blocks({ {name = "ethereal:frost_tree_sapling", max = 10}, {name = "ethereal:sakura_sapling", max = 10}, {name = "ethereal:willow_sapling", max = 10}, + {name = "ethereal:lemon_tree_sapling", max = 10}, + {name = "ethereal:olive_tree_sapling", max = 10}, }}, {"flo", 5, {"ethereal:blue_marble_tile"}, 2}, {"dro", {"ethereal:blue_marble", "ethereal:blue_marble_tile"}, 8}, diff --git a/sapling.lua b/sapling.lua index 69e0201..e1ac952 100644 --- a/sapling.lua +++ b/sapling.lua @@ -61,6 +61,9 @@ register_sapling("ethereal:redwood", "Redwood", "redwood_sapling", 31) register_sapling("ethereal:orange_tree", "Orange", "orange_tree_sapling", 6) register_sapling("ethereal:birch", "Birch", "moretrees_birch_sapling", 7) register_sapling("ethereal:sakura", "Sakura", "ethereal_sakura_sapling", 10) +register_sapling("ethereal:lemon_tree", "Lemon", "lemon_tree_sapling", 7) +register_sapling("ethereal:olive_tree", "Olive", "olive_tree_sapling", 10) + local add_tree = function (pos, ofx, ofy, ofz, schem, replace) -- check for schematic @@ -137,6 +140,14 @@ function ethereal.grow_sakura_tree(pos) end end +function ethereal.grow_lemon_tree(pos) + add_tree(pos, 2, 0, 2, ethereal.lemontree) +end + +function ethereal.grow_olive_tree(pos) + add_tree(pos, 3, 0, 3, ethereal.olivetree) +end + -- check if sapling has enough height room to grow local enough_height = function(pos, height) @@ -218,6 +229,14 @@ local grow_sapling = function(pos, node) elseif node.name == "ethereal:sakura_sapling" and under == "ethereal:bamboo_dirt" then ethereal.grow_sakura_tree(pos) + + elseif node.name == "ethereal:olive_tree_sapling" + and under == "ethereal:grove_dirt" then + ethereal.grow_olive_tree(pos) + + elseif node.name == "ethereal:lemon_tree_sapling" + and under == "ethereal:grove_dirt" then + ethereal.grow_lemon_tree(pos) end end diff --git a/schematics/lemon_tree.lua b/schematics/lemon_tree.lua new file mode 100644 index 0000000..859161d --- /dev/null +++ b/schematics/lemon_tree.lua @@ -0,0 +1,65 @@ + +local _ = {name = "air", param1 = 0} +local L = {name = "ethereal:lemon_leaves", param1 = 255} +local l = {name = "ethereal:lemon_leaves", param1 = 127} +local T = {name = "default:tree", param1 = 255} +local e = {name = "ethereal:lemon", param1 = 100} + +ethereal.lemontree = { + + size = {x = 5, y = 8, z = 5}, + + yslice_prob = { + {ypos = 0, prob = 127}, + {ypos = 3, prob = 127}, + }, + + data = { + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + _,_,e,_,_, + _,L,L,L,e, + e,L,L,l,_, + _,l,L,L,_, + _,_,l,_,_, + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + _,L,L,l,_, + l,L,l,L,L, + L,l,L,L,L, + L,L,L,l,L, + _,L,L,L,_, + + _,_,T,_,_, + _,_,T,_,_, + _,_,T,_,_, + l,e,T,l,l, + L,L,T,L,l, + l,L,T,L,L, + L,L,L,l,L, + l,L,L,L,l, + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + _,L,L,L,_, + L,l,L,L,L, + L,L,L,L,L, + L,L,L,L,l, + _,l,L,L,_, + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + _,_,l,_,_, + e,L,L,l,_, + _,l,L,L,_, + _,L,L,L,e, + _,_,l,_,_, + + } +} diff --git a/schematics/olive_tree.lua b/schematics/olive_tree.lua new file mode 100644 index 0000000..fe6d672 --- /dev/null +++ b/schematics/olive_tree.lua @@ -0,0 +1,88 @@ + +local _ = {name = "air", param1 = 0} +local L = {name = "ethereal:olive_leaves", param1 = 255} +local T = {name = "ethereal:olive_trunk", param1 = 255} +local o = {name = "ethereal:olive", param1 = 150} + +ethereal.olivetree = { + + size = {x = 8, y = 9, z = 7}, + + + + data = { + + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,L,_,_,_,_,L,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,L,_,L,L,o,_, + L,T,L,L,o,L,T,L, + _,L,_,_,_,_,L,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + + _,_,_,T,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,L,T,L,_,T,L,_, + _,L,L,_,L,L,L,_, + _,_,_,L,L,_,_,_, + _,_,o,L,L,_,_,_, + _,_,_,_,_,_,_,_, + + _,_,_,T,T,_,_,_, + _,_,_,T,T,_,_,_, + _,_,_,T,T,_,_,_, + _,_,L,T,T,_,_,_, + _,o,L,T,T,T,L,_, + _,L,L,T,T,L,o,_, + _,_,L,T,T,L,_,_, + _,_,L,T,T,L,_,_, + _,_,_,L,L,_,_,_, + + _,_,_,_,T,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,L,_,_,_, + _,_,L,T,L,L,_,_, + _,_,L,L,T,L,_,_, + _,_,_,L,L,L,_,_, + _,_,L,L,L,_,_,_, + _,_,_,_,_,_,_,_, + + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,o,L,_,_,_,_, + _,L,T,L,L,o,_,_, + _,_,L,_,L,T,L,_, + _,_,o,_,_,L,_,_, + _,_,_,_,_,_,_,_, + + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + _,_,L,_,_,_,_,_, + _,_,_,_,_,L,_,_, + _,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_, + + + + } +} diff --git a/schems.lua b/schems.lua index 5a2651b..5221004 100644 --- a/schems.lua +++ b/schems.lua @@ -23,6 +23,8 @@ dofile(path .. "redwood_tree.lua") dofile(path .. "vinetree.lua") dofile(path .. "sakura.lua") dofile(path .. "igloo.lua") +dofile(path .. "lemon_tree.lua") +dofile(path .. "olive_tree.lua") -- helper function @@ -149,6 +151,14 @@ add_schem({"ethereal:bamboo_dirt"}, 0.08, {"bamboo"}, 1, 100, ethereal.bush, add_schem({"default:dirt_with_grass"}, 0.02, {"swamp"}, 1, 100, ethereal.vinetree, ethereal.swamp) +-- lemon tree +add_schem({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 5, 50, + ethereal.lemontree, ethereal.mediterranean) + +-- olive tree +add_schem({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 5, 35, + ethereal.olivetree, ethereal.mediterranean) + -- default large cactus if ethereal.desert == 1 then diff --git a/settings.conf_example b/settings.conf_example index 6b74a2a..83cf5fc 100644 --- a/settings.conf_example +++ b/settings.conf_example @@ -40,3 +40,4 @@ ethereal.swamp = 1 -- Swamp areas with vines on tree's, mushrooms, lilly's a ethereal.sealife = 1 -- Enable coral and seaweed ethereal.reefs = 1 -- Enable new coral reefs in default ethereal.sakura = 1 -- Enable sakura biomes with trees +ethereal.mediterranean = 1 -- Enable Mediterranean biome diff --git a/settingtypes.txt b/settingtypes.txt index 004943a..1cc37de 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -35,3 +35,4 @@ ethereal.sealife (Coral and Seaweed biome, 1 = Enable / 0 = Disable) int 1 ethereal.reefs (MT5 Coral biome, 1 = Enable / 0 = Disable) int 1 ethereal.sakura (Sakura biome, 1 = Enable / 0 = Disable) int 1 ethereal.tundra (Tundra biome, 1 = Enable / 0 = Disable) int 1 +ethereal.mediterranean (Mediterranean biome, 1 = Enable / 0 = Disable) int 1 diff --git a/stairs.lua b/stairs.lua index 790b569..22be62d 100644 --- a/stairs.lua +++ b/stairs.lua @@ -103,6 +103,13 @@ stairs.register_all("sakura_wood", "ethereal:sakura_wood", S("Sakura Wood"), default.node_sound_wood_defaults()) +stairs.register_all("olive_wood", "ethereal:olive_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"olive_wood.png"}, + S("Olive Wood stair"), + S("Olive Wood Slab"), + default.node_sound_wood_defaults()) + -- Stairs Plus (in More Blocks) elseif minetest.global_exists("stairsplus") then @@ -221,6 +228,13 @@ stairsplus:register_all("ethereal", "sakura_wood", "ethereal:sakura_wood", { sounds = default.node_sound_wood_defaults(), }) +stairsplus:register_all("ethereal", "olive_wood", "ethereal:olive_wood", { + description = S("Olive"), + tiles = {"olive_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + -- Default Stairs else @@ -339,4 +353,12 @@ stairs.register_stair_and_slab("sakura_wood", "ethereal:sakura_wood", S("Sakura Wood Stair"), S("Sakura Wood Slab"), default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("olive_wood", "ethereal:olive_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"olive_wood.png"}, + S("Olive Wood Stair"), + S("Olive Wood Slab"), + default.node_sound_wood_defaults()) + end diff --git a/textures/ethereal_candied_lemon.png b/textures/ethereal_candied_lemon.png new file mode 100644 index 0000000000000000000000000000000000000000..6138b5b7b892ec417e742e9b7d3fa16b346b1241 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRb*huiW6@uSDe?QzHzR` z>8(~bkHkH{IqTz#1J~B*6#Mdb&7mdKI;Vst05O+0_W%F@ literal 0 HcmV?d00001 diff --git a/textures/lemon.png b/textures/lemon.png new file mode 100644 index 0000000000000000000000000000000000000000..f13a31e76a99ce0b6b9367f73be8b970cbb3423e GIT binary patch literal 382 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 N002ovPDHLkV1n4%HVOa$ literal 0 HcmV?d00001 diff --git a/textures/lemon_tree_sapling.png b/textures/lemon_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..28b257aceaeb6aea683a879cb792684a90cfc626 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Vt`MGD~Og*)>D-;(^fXqQE@a< zvo+QUus2q9Q+@YLE_xe7U;fz^pd#*)AirRS|8P)SR(lmF9O&ud7$PyXv@eja!GOo< zwNCcOf9%uvw`+9%&1|?nrDOh1pTmq>98YxITQybo){$;;C%rZeNrmg2GgYgyB@LfF r-?-_^qP!y-<;%+Tosa$8vy*X)6r;bxZIv%T!x=nX{an^LB{Ts5PzFgk literal 0 HcmV?d00001 diff --git a/textures/olive.png b/textures/olive.png new file mode 100644 index 0000000000000000000000000000000000000000..d83c94f5253af2f5a9018ea28df422fcb1af58f8 GIT binary patch literal 465 zcmV;?0WSWDP);@B#dZeFPEB#ZVB%NI?_~O*9c)d;=3<6PHy3 z6@+n@b=KC|?y9a^b*oHNbY~g^15b9(J@?}T7yeOM+v4)wQ)zK&fNPZT>yk$|U(U_W zHLpKAn-=@ahzjBj8sNkF77wqzn90u=H=dtQM~5dM1M6yhbcl0oZjO1k{+TDY*Z#Qa z?gbp)e;kRHj1GAxXCWKV9~5+pEs9ZZrfvTFaOJ`2RJkcBK}-sOA~agDG+gGup@MUl zR#GdVU*s6s!TI{fGAG1<4~EKqK}6~FI_(XbU5^cpNJL}A#|Bl8#}R_ZdxenN0V1C0 zlzqJ+y}V0^0ZpEy5hA1z$riG9z~rMP%QIpOh+0G~E*MNx;hKa7Fkht|@c7nRHhx?3 ze)|pK7sO$zz_%U4w6v_=-^f}40Oh2{l#WUL2~rm?irp2YR_s*v#^-t&J{)sKC)#B9S!MQE zB{Z1DR~bhX8ThAb+Xg76b(mK#aw!D5VS;sfhh=iJSzL{Ac#*zex|TzzQc|ON`CP~9 z#m*UBmg$`q>7ACzEoQORMqx#IKB=0vL5ej?T?(h!rFU4Qby%dfnI|-uL{}OH=j(bV zs@wQ0so6BK(Imd!IILJNC|AcPRl_w_)h<}c z%tJP%)jX-mG`7|#rrI#N$}qe{KPXSfH(k>sLCrZ**(N~2$XPn6$t=TFICewP0J$z=sY#o z7&Vt@pd%G6edJ8tWt^i_oFY`6BUK$ERNQ#)o(Cqf(#_PQ6(oJ!jRbMRQA~_k}OWUgYe`@m_kJ9YbfZ z@~h;)Id;YDveT|dF+YF(`{P<~wc{rkPMNLql%sv0l)!1Wi1lR1&oOOI|X8uj>g|kgR%&a}bb+Kam^zdhi zXXgADnLXXe=lkK@w~HR0owNI8eMQY%rwvkmznh%T1XVn&x7yE?to~1Fz0*3N#~D0b L{an^LB{Ts5u4*3h literal 0 HcmV?d00001 diff --git a/textures/olive_leaves.png b/textures/olive_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..6f450c850587f4da1741d1d0a353f700f2ed569d GIT binary patch literal 1118 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy-vWF>T!C~{rK4e}LQt-yp@TwD zsiUQjre&z1W2T{HtY%WDmt~};SE8YUg+x-TmtlZ{p^HLPt7A~5qk@hEhX99wf&c>t z0|yTS2Z-cwjMdb1k>C*Fa7@$`5aIC3G?Y*funbkO1Zwn9@XEE6&=62Ck?=}2H1tu> zG?54@wNx;Wunf@j$~9zQVQ`GpH1yH*DzwzJQ4o*;nr7&jXsGF;;23Eb)d;jvz%kWO zKt({)K|;Yqz^l;EGE`H+K)}#LGpG`%MZzo7l0$;SF;z3F*3m1~l0$$&LPtQ;LP7$h zML|GlFzvFJ4oiS2%D#WOYi za-OUe+xEW0TPmI?%5PBWSh9`z^M+cFh#R$U{{J_=e)f)GrAJ?i=kpf=AO0xGim7C# z3)L|()LSfxOex4{pVC+{%g$3tYU+j)_phsj+~HT5p72_e`GV5~iR>AsOO5}$7N7F+ zoO_A*rt=ks?FJY9AGB-vE&92lzC&23)a&xB!yO)aEZ?@hxFt0Ackk)S0QaTsJ6;z# zIf>jd_}|FAlGWbIk5kwA|FMLf-3$Dl=4M;C-4?6lZvcNe>fNhO5-+Sg*hG3CwVSWC~UE4eE} z3h#Bt6ukL8o3XDh_ri6r>DtreF4<~FPSdWL|IcIQ`ggCJ0$&;4NZi%ad*FS=+&PCk zJ8lOoP_E;gR((_CzdIw-qzg}*8P6!KT>ax@VfBHq&qmc1-Fw$_ZsrMBNq+9maXWRt zr|yY&-GB28=5$wPofA@z3Casll$mq+xYvqJew&pxm9G13y3ERTAq zT)@7VnZNZi6_6A$LZ*46<1VKvQ3t_lqs0I ztyxk1L9MGLH*e;5CSNnP_Jl407SoPXHmv`&r*Y@>vCir9UvX~RHbK?De>dHYI`%4i z;yb_fKcC)jU#uZ(8olFH^=G@5+@-3y6HdFm z=J`|S(YK`^`_1fx1Ij-53GaF{d*+1ipVN2zNPn^{ROVa9uOEK|Yp%-p79YsD)ZO@> ZVX9WPjIv?eEMRtF@O1TaS?83{1OO96@eKd~ literal 0 HcmV?d00001 diff --git a/textures/olive_tree_sapling.png b/textures/olive_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7f0f4ece02e24fa4567a3ea01a75e0056e250f GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`E08wRQL%H;ax_v4us2Sq zGzB6(RXHFVC}O6q3`9UKh@qomYpjE;@)qYFkf9L_dn%K6%A;Gpsd7aZ2r){Q*88<_l#Fm`9 zyylz3w`o!wH>W!oonq;ep7?WPrk&l)%d9JE|GkU*-}diK;MAIQ`Oi!Ll$o&3<7ISn bwLZ>#sfpEYt?;5JAZK{G`njxgN@xNA{Q+1B literal 0 HcmV?d00001 diff --git a/textures/olive_trunk.png b/textures/olive_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..4ac03d6958601c8c566870851bd2b0e426c5c7e1 GIT binary patch literal 1932 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