From c64f0a6f63e4c1a20c3aea32630a9fd1394e240c Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Mon, 12 Aug 2019 23:00:41 -0600 Subject: [PATCH] make giant mushrooms edible, make jungle trees growable --- df_primordial_items/doc.lua | 0 df_primordial_items/init.lua | 1 + df_primordial_items/jungle_mushroom.lua | 21 +++ df_primordial_items/jungle_tree.lua | 148 ++++++++++++++++++ df_primordial_items/primordial_mushroom.lua | 1 + .../textures/dfcaverns_jungle_sapling.png | Bin 0 -> 200 bytes .../dfcaverns_mush_diced_giant_mushroom.png | Bin 0 -> 1142 bytes .../dfcaverns_mush_mycelial_fibers.png | Bin 1135 -> 532 bytes df_primordial_items/textures/license.txt | 11 +- 9 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 df_primordial_items/doc.lua create mode 100644 df_primordial_items/textures/dfcaverns_jungle_sapling.png create mode 100644 df_primordial_items/textures/dfcaverns_mush_diced_giant_mushroom.png diff --git a/df_primordial_items/doc.lua b/df_primordial_items/doc.lua new file mode 100644 index 0000000..e69de29 diff --git a/df_primordial_items/init.lua b/df_primordial_items/init.lua index a644e16..e59c0c4 100644 --- a/df_primordial_items/init.lua +++ b/df_primordial_items/init.lua @@ -3,6 +3,7 @@ df_primordial_items.doc = {} local MP = minetest.get_modpath(minetest.get_current_modname()) +dofile(MP.."/doc.lua") dofile(MP.."/jungle_nodes.lua") dofile(MP.."/jungle_tree.lua") dofile(MP.."/jungle_mushroom.lua") diff --git a/df_primordial_items/jungle_mushroom.lua b/df_primordial_items/jungle_mushroom.lua index 145ddcd..88027c3 100644 --- a/df_primordial_items/jungle_mushroom.lua +++ b/df_primordial_items/jungle_mushroom.lua @@ -65,6 +65,27 @@ minetest.register_node("df_primordial_items:jungle_mushroom_cap_2", { }, }) +minetest.register_craftitem("df_primordial_items:diced_mushroom", { + description = S("Diced Mushroom"), + _doc_items_longdesc = df_primordial_items.doc.big_mushroom_desc, + _doc_items_usagehelp = df_primordial_items.doc.big_mushroom_usage, + inventory_image = "dfcaverns_mush_diced_giant_mushroom.png", + groups = {food = 1}, + on_use = minetest.item_eat(1), +}) + +minetest.register_craft({ + output = "df_primordial_items:diced_mushroom 4", + type = "shapeless", + recipe = { "df_primordial_items:jungle_mushroom_cap_1"}, +}) +minetest.register_craft({ + output = "df_primordial_items:diced_mushroom 4", + type = "shapeless", + recipe = { "df_primordial_items:jungle_mushroom_cap_2"}, +}) + + minetest.register_node("df_primordial_items:jungle_mushroom_sapling", { description = S("Primordial Jungle Mushroom Sapling"), _doc_items_longdesc = df_primordial_items.doc.big_mushroom_desc, diff --git a/df_primordial_items/jungle_tree.lua b/df_primordial_items/jungle_tree.lua index 53b9424..5e7ca1a 100644 --- a/df_primordial_items/jungle_tree.lua +++ b/df_primordial_items/jungle_tree.lua @@ -15,8 +15,21 @@ minetest.register_node("df_primordial_items:jungle_leaves", { wield_image = "dfcaverns_jungle_leaves_01.png", paramtype = "light", is_ground_content = false, + buildable_to = true, groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, sounds = default.node_sound_leaves_defaults(), + drop = { + max_items = 1, + items = { + { + items = {"df_primordial_items:jungletree_sapling"}, + rarity = 10, + }, + { + items = {"df_primordial_items:jungle_leaves"}, + } + } + }, after_place_node = default.after_place_leaves, }) @@ -32,9 +45,22 @@ minetest.register_node("df_primordial_items:jungle_leaves_glowing", { wield_image = "dfcaverns_jungle_leaves_02.png", paramtype = "light", is_ground_content = false, + buildable_to = true, light_source = 4, groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1}, sounds = default.node_sound_leaves_defaults(), + drop = { + max_items = 1, + items = { + { + items = {"df_primordial_items:jungletree_sapling"}, + rarity = 10, + }, + { + items = {"df_primordial_items:jungle_leaves"}, + } + } + }, after_place_node = default.after_place_leaves, }) @@ -76,3 +102,125 @@ minetest.register_node("df_primordial_items:jungle_tree_glowing", { sounds = default.node_sound_wood_defaults(), on_place = minetest.rotate_node }) + + +default.register_leafdecay({ + trunks = {"df_primordial_items:jungle_tree", "df_primordial_items:jungle_tree_mossy", "df_primordial_items:jungle_tree_glowing"}, + leaves = {"df_primordial_items:jungle_leaves", "df_primordial_items:jungle_leaves_glowing"}, + radius = 1, +}) + +---------------------------- +-- Spawn + +-- TODO: make use of the variant trunk and leaf nodes +local c_leaves = minetest.get_content_id("df_primordial_items:jungle_leaves") +local c_leaves_glow = minetest.get_content_id("df_primordial_items:jungle_leaves_glowing") +local c_trunk = minetest.get_content_id("df_primordial_items:jungle_tree") +local c_trunk_mossy = minetest.get_content_id("df_primordial_items:jungle_tree_mossy") +local c_trunk_glow = minetest.get_content_id("df_primordial_items:jungle_tree_glowing") + +df_primordial_items.spawn_jungle_tree = function(pos) + local x, y, z = pos.x, pos.y, pos.z + local height = math.random(8,14) + + local vm = minetest.get_voxel_manip() + local minp, maxp = vm:read_from_map( + {x = x - 2, y = y - 2, z = z - 2}, + {x = x + 2, y = y + height, z = z + 2} + ) + local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm:get_data() + local vi = area:indexp(pos) + + df_primordial_items.spawn_jungle_tree_vm(height, vi, area, data) + + vm:set_data(data) + vm:write_to_map() + vm:update_map() +end + +df_primordial_items.spawn_jungle_tree_vm = function(height, vi, area, data) + local ystride = area.ystride + local zstride = area.zstride + local buildable_to = mapgen_helper.buildable_to + + local roots_done = {[vi] = true} + for i = 1, 6 do + local root_column = vi + math.random(-1,1) + math.random(-1,1)*zstride + if not roots_done[root_column] then + for y = -2, math.random(0,1) do -- root height is 1 to 2 nodes above ground + local root_index = root_column + y * ystride + if buildable_to(data[root_index]) then + data[root_index] = c_trunk + end + end + end + roots_done[root_column] = true + end + + -- puts a trunk node in the center and surrounds it with leaves + local branch = function(bi) + if buildable_to(data[bi]) then + data[bi] = c_trunk + else + return -- if a branch is placed in a non-viable place, don't add leaves + end + for x = -1, 1 do + for z = -1, 1 do + for y = -1, 1 do + if math.random() < 0.75 then + local li = bi + x + z*zstride + y*ystride + if buildable_to(data[li]) then + data[li] = c_leaves + end + end + end + end + end + end + + for i = 0, height-2 do + local y_index = vi + i * ystride + if buildable_to(data[y_index]) then + data[y_index] = c_trunk + else + return -- if we hit something we can't grow through, stop. + end + if i > 4 then + local branch_index = y_index + math.random(-1,1) + math.random(-1,1)*zstride + branch(branch_index) + end + end + branch(vi + (height-1)*ystride) -- topper +end + +--TODO: separate setting +local min_growth_delay = tonumber(minetest.settings:get("dfcaverns_mycelium_min_growth_delay")) or 240 +local max_growth_delay = tonumber(minetest.settings:get("dfcaverns_mycelium_max_growth_delay")) or 400 + +minetest.register_node("df_primordial_items:jungletree_sapling", { + description = S("Primordial Jungle Tree Sapling"), + _doc_items_longdesc = df_primordial_items.doc.tree_desc, + _doc_items_usagehelp = df_primordial_items.doc.tree_usage, + tiles = {"dfcaverns_jungle_sapling.png"}, + inventory_image = "dfcaverns_jungle_sapling.png", + wield_image = "dfcaverns_jungle_sapling.png", + groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1}, + paramtype = "light", + drawtype = "plantlike", + buildable_to = true, + walkable = false, + sounds = default.node_sound_leaves_defaults(), + use_texture_alpha = true, + sunlight_propagates = true, + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(min_growth_delay, max_growth_delay)) + end, + on_destruct = function(pos) + minetest.get_node_timer(pos):stop() + end, + on_timer = function(pos, elapsed) + df_primordial_items.spawn_jungle_tree(pos) + end, +}) \ No newline at end of file diff --git a/df_primordial_items/primordial_mushroom.lua b/df_primordial_items/primordial_mushroom.lua index 50946d7..1883bae 100644 --- a/df_primordial_items/primordial_mushroom.lua +++ b/df_primordial_items/primordial_mushroom.lua @@ -656,6 +656,7 @@ minetest.register_node("df_primordial_items:mush_sapling", { use_texture_alpha = true, sunlight_propagates = true, on_construct = function(pos) + --TODO: timer local mushroom = df_primordial.get_primordial_mushroom local rotation = (math.random(1,4)-1)*90 minetest.set_node(pos, {name="air"}) -- clear sapling so mushroom can replace it diff --git a/df_primordial_items/textures/dfcaverns_jungle_sapling.png b/df_primordial_items/textures/dfcaverns_jungle_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..5447e37e07cd2e2a271245f282e96ca21df2a27c GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b1=3n7B3dfKK*TM;Da6Ap zB*iPa{lDy-Tk@i8iV|FE?R&K4`L0OhGy|2glmz(&GjIyXPHj`33*`HFx;TbZ#3ehh z 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 BEc5^X diff --git a/df_primordial_items/textures/license.txt b/df_primordial_items/textures/license.txt index 5afdf7d..068a037 100644 --- a/df_primordial_items/textures/license.txt +++ b/df_primordial_items/textures/license.txt @@ -1 +1,10 @@ -All primordial item textures were created by ClockGen and licensed under the CC BY 4.0 \ No newline at end of file +All primordial item textures not explicitly listed here were created by ClockGen and licensed under the CC BY 4.0 + +Created by FaceDeer and also licened under CC BY 4.0 (as well as CC0 public domain): +dfcaverns_mush_diced_giant_mushroom.png +dfcaverns_mush_giant_hypha.png +dfcaverns_mush_sapling.png +dfcaverns_mush_mycelial_fibers.png + +From Minetest default mod: +dfcaverns_jungle_sapling.png \ No newline at end of file