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 0000000..5447e37 Binary files /dev/null and b/df_primordial_items/textures/dfcaverns_jungle_sapling.png differ diff --git a/df_primordial_items/textures/dfcaverns_mush_diced_giant_mushroom.png b/df_primordial_items/textures/dfcaverns_mush_diced_giant_mushroom.png new file mode 100644 index 0000000..65a5f32 Binary files /dev/null and b/df_primordial_items/textures/dfcaverns_mush_diced_giant_mushroom.png differ diff --git a/df_primordial_items/textures/dfcaverns_mush_mycelial_fibers.png b/df_primordial_items/textures/dfcaverns_mush_mycelial_fibers.png index 65bb113..d373878 100644 Binary files a/df_primordial_items/textures/dfcaverns_mush_mycelial_fibers.png and b/df_primordial_items/textures/dfcaverns_mush_mycelial_fibers.png differ 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