code:
-- This file defines a type of root-like growth that spreads over the surface of the ground in a random web-like pattern

local S = minetest.get_translator(minetest.get_current_modname())

-- hub_thickness -- the bit in the middle that's seen at the ends and corners of long hypha runs
-- connector_thickness
local get_node_box = function(hub_thickness, connector_thickness)
	return {
		type = "connected",
		fixed = {-hub_thickness,-hub_thickness,-hub_thickness,hub_thickness,hub_thickness,hub_thickness},
		connect_top = {-connector_thickness, 0, -connector_thickness, connector_thickness, 0.5, connector_thickness},
		connect_bottom = {-connector_thickness, -0.5, -connector_thickness, connector_thickness, 0, connector_thickness},
		connect_back = {-connector_thickness, -connector_thickness, 0, connector_thickness, connector_thickness, 0.5},
		connect_right = {0, -connector_thickness, -connector_thickness, 0.5, connector_thickness, connector_thickness},
		connect_front = {-connector_thickness, -connector_thickness, -0.5, connector_thickness, connector_thickness, 0},
		connect_left = {-0.5, -connector_thickness, -connector_thickness, 0, connector_thickness, connector_thickness},
		disconnected = {-connector_thickness, -connector_thickness, -connector_thickness, connector_thickness, connector_thickness, connector_thickness},
	}
end

minetest.register_node("df_primordial_items:giant_hypha_root", {
	description = S("Rooted Giant Hypha"),
	_doc_items_longdesc = df_primordial_items.doc.giant_hyphae_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_hyphae_usage,
	tiles = {
		{name="dfcaverns_mush_giant_hypha.png"},
	},
    connects_to = {"group:soil", "group:hypha"},
    connect_sides = { "top", "bottom", "front", "left", "back", "right" },
	drawtype = "nodebox",
	node_box = get_node_box(0.1875, 0.25),
	collision_box = get_node_box(0.125, 0.1875),
	paramtype = "light",
	light_source = 2,
	is_ground_content = false,
	climbable = true,
	groups = {oddly_breakable_by_hand = 1, choppy = 2, hypha = 1, handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=1, fire_flammability=1},
	sounds = df_trees.node_sound_tree_soft_fungus_defaults(),
	drop = {
		max_items = 1,
		items = {
			{
				items = {"df_primordial_items:mycelial_fibers","df_primordial_items:giant_hypha_apical_meristem"},
				rarity = 100,
			},
			{
				items = {"df_primordial_items:mycelial_fibers"},
			},
		},
	},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})
minetest.register_node("df_primordial_items:giant_hypha", {
	description = S("Giant Hypha"),
	_doc_items_longdesc = df_primordial_items.doc.giant_hyphae_desc,
	_doc_items_usagehelp = df_primordial_items.doc.giant_hyphae_usage,
	tiles = {
		{name="dfcaverns_mush_giant_hypha.png"},
	},
    connects_to = {"group:hypha"},
    connect_sides = { "top", "bottom", "front", "left", "back", "right" },
	drawtype = "nodebox",
	node_box = get_node_box(0.1875, 0.25),
	collision_box = get_node_box(0.125, 0.1875),
	paramtype = "light",
	light_source = 2,
	is_ground_content = false,
	climbable = true,
	groups = {oddly_breakable_by_hand = 1, choppy = 2, hypha = 1, handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=1, fire_flammability=1},
	sounds = df_trees.node_sound_tree_soft_fungus_defaults(),
	drop = {
		max_items = 1,
		items = {
			{
				items = {"df_primordial_items:mycelial_fibers","df_primordial_items:giant_hypha_apical_meristem"},
				rarity = 100,
			},
			{
				items = {"df_primordial_items:mycelial_fibers"},
			},
		},
	},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})

minetest.register_craftitem("df_primordial_items:mycelial_fibers", {
	description = S("Giant Mycelial Fibers"),
	_doc_items_longdesc = df_primordial_items.doc.mycelial_fibers_desc,
	_doc_items_usagehelp = df_primordial_items.doc.mycelial_fibers_usage,
	groups = {wool = 1},
	inventory_image = "dfcaverns_mush_mycelial_fibers.png",
})

minetest.register_craftitem("df_primordial_items:mycelial_thread", {
	description = S("Mycelial thread"),
	_doc_items_longdesc = df_primordial_items.doc.mycelial_thread_desc,
	_doc_items_usagehelp = df_primordial_items.doc.mycelial_thread_usage,
	inventory_image = "dfcaverns_pig_tail_thread.png",
	groups = {flammable = 1, thread = 1},
})

minetest.register_craft({
	output = "df_primordial_items:mycelial_thread 4",
	type = "shapeless",
	recipe = { "df_primordial_items:mycelial_fibers"},
})

-- Check each of the six cardinal directions to see if it's buildable-to,
-- if it has an adjacent "soil" node (or if it's going out over the corner of an adjacent soil node),
-- and does *not* have an adjacent hypha already.
-- By growing with these conditions hyphae will hug the ground and will not immediately loop back on themselves
-- (though they can run into other pre-existing growths, forming larger loops - which is fine, large loops are nice)

local ystride = 3
local zstride = 9
local get_item_group = minetest.get_item_group
local get_node = minetest.get_node
local registered_nodes = minetest.registered_nodes
local math_random = math.random

local find_mycelium_growth_targets = function(pos)
	local nodes = {}
	local pos_x = pos.x
	local pos_y = pos.y
	local pos_z = pos.z

	for x = -1, 1 do
		for y = -1, 1 do
			for z = -1, 1 do
				if not (x == y and y == z) then -- we don't care about the diagonals or the center node
					local node = get_node({x=pos_x+x, y=pos_y+y, z=pos_z+z})
					local node_name = node.name
					if node_name == "ignore" then
						-- Pause growth! We're at the edge of the known world.
						return nil
					end
					if get_item_group(node_name, "soil") > 0 or
						get_item_group(node_name, "stone") > 0 and math_random() < 0.5 then -- let hyphae explore out over stone
						nodes[x + y*ystride + z*zstride] = "soil"
					elseif get_item_group(node_name, "hypha") > 0 then
						nodes[x + y*ystride + z*zstride] = "hypha"
					elseif registered_nodes[node_name] and registered_nodes[node_name].buildable_to then
						nodes[x + y*ystride + z*zstride] = "buildable"
					end
				end
			end
		end
	end

	--TODO there's probably some clever way to turn this into a subroutine, but I'm tired right now and
	--copy and pasting is easy and nobody's going to decide whether to hire or fire me based on this
	--particular snippet of code so what the hell. I'll fix it later when that clever way comes to me.
	local valid_targets = {}
	if nodes[-1] == "buildable" and
		-- test for soil to directly support new growth
		(nodes[-1 -ystride] == "soil" or
		nodes[-1 +ystride] == "soil" or
		nodes[-1 -zstride] == "soil" or
		nodes[-1 +zstride] == "soil" or
		-- test for soil "around the corner" to allow for growth over an edge
		nodes[-ystride] == "soil" or
		nodes[ystride] == "soil" or
		nodes[-zstride] == "soil" or
		nodes[zstride] == "soil")
		and not -- no adjacent hypha
		(nodes[-1 -ystride] == "hypha" or
		nodes[-1 +ystride] == "hypha" or
		nodes[-1 -zstride] == "hypha" or
		nodes[-1 +zstride] == "hypha")
	then
		table.insert(valid_targets, {x=pos_x-1, y=pos_y, z=pos_z})
	end
	if nodes[1] == "buildable" and
		-- test for soil to directly support new growth
		(nodes[1 -ystride] == "soil" or
		nodes[1 +ystride] == "soil" or
		nodes[1 -zstride] == "soil" or
		nodes[1 +zstride] == "soil" or
		-- test for soil "around the corner" to allow for growth over an edge
		nodes[-ystride] == "soil" or
		nodes[ystride] == "soil" or
		nodes[-zstride] == "soil" or
		nodes[zstride] == "soil")
		and not -- no adjacent hypha
		(nodes[1 -ystride] == "hypha" or
		nodes[1 +ystride] == "hypha" or
		nodes[1 -zstride] == "hypha" or
		nodes[1 +zstride] == "hypha")
	then
		table.insert(valid_targets, {x=pos_x+1, y=pos_y, z=pos_z})
	end
	if nodes[-ystride] == "buildable" and
		-- test for soil to directly support new growth
		(nodes[-1 -ystride] == "soil" or
		nodes[1 -ystride] == "soil" or
		nodes[-ystride -zstride] == "soil" or
		nodes[-ystride +zstride] == "soil" or
		-- test for soil "around the corner" to allow for growth over an edge
		nodes[-1] == "soil" or
		nodes[1] == "soil" or
		nodes[-zstride] == "soil" or
		nodes[zstride] == "soil")
		and not -- no adjacent hypha
		(nodes[-1 -ystride] == "hypha" or
		nodes[1 -ystride] == "hypha" or
		nodes[-ystride -zstride] == "hypha" or
		nodes[-ystride +zstride] == "hypha")
	then
		table.insert(valid_targets, {x=pos_x, y=pos_y-1, z=pos_z})
	end
	if nodes[ystride] == "buildable" and
		-- test for soil to directly support new growth
		(nodes[-1 +ystride] == "soil" or
		nodes[1 +ystride] == "soil" or
		nodes[ystride -zstride] == "soil" or
		nodes[ystride +zstride] == "soil" or
		-- test for soil "around the corner" to allow for growth over an edge
		nodes[-1] == "soil" or
		nodes[1] == "soil" or
		nodes[-zstride] == "soil" or
		nodes[zstride] == "soil")
		and not -- no adjacent hypha
		(nodes[-1] == "hypha" or
		nodes[1 + ystride] == "hypha" or
		nodes[ystride -zstride] == "hypha" or
		nodes[ystride +zstride] == "hypha")
	then
		table.insert(valid_targets, {x=pos_x, y=pos_y+1, z=pos_z})
	end
	if nodes[-zstride] == "buildable" and
		-- test for soil to directly support new growth
		(nodes[-1 -zstride] == "soil" or
		nodes[1 -zstride] == "soil" or
		nodes[-ystride -zstride] == "soil" or
		nodes[ystride -zstride] == "soil" or
		-- test for soil "around the corner" to allow for growth over an edge
		nodes[-1] == "soil" or
		nodes[1] == "soil" or
		nodes[-ystride] == "soil" or
		nodes[ystride] == "soil")
		and not -- no adjacent hypha
		(nodes[-1 -zstride] == "hypha" or
		nodes[1 -zstride] == "hypha" or
		nodes[-ystride -zstride] == "hypha" or
		nodes[ystride -zstride] == "hypha")
	then
		table.insert(valid_targets, {x=pos_x, y=pos_y, z=pos_z-1})
	end
	if nodes[zstride] == "buildable" and
		-- test for soil to directly support new growth
		(nodes[-1 +zstride] == "soil" or
		nodes[1 +zstride] == "soil" or
		nodes[-ystride +zstride] == "soil" or
		nodes[ystride +zstride] == "soil" or
		-- test for soil "around the corner" to allow for growth over an edge
		nodes[-1] == "soil" or
		nodes[1] == "soil" or
		nodes[-ystride] == "soil" or
		nodes[ystride] == "soil")
		and not -- no adjacent hypha
		(nodes[-1 +zstride] == "hypha" or
		nodes[1 +zstride] == "hypha" or
		nodes[-ystride + zstride] == "hypha" or
		nodes[ystride +zstride] == "hypha")
	then
		table.insert(valid_targets, {x=pos_x, y=pos_y, z=pos_z+1})
	end

	return valid_targets
end

local grow_mycelium = function(pos, meristem_name)
	local new_meristems = {}
	-- Can we grow? If so, pick a random direction and add a new meristem there
	local targets = find_mycelium_growth_targets(pos)

	if targets == nil then
		return nil -- We hit the edge of the known world, pause!
	end

	local target_count = #targets
	if target_count > 0 then
		local target = targets[math.random(1,target_count)]
		minetest.set_node(target, {name=meristem_name})
		table.insert(new_meristems, target)
	else
		--nowhere to grow, turn into a rooted hypha and we're done
		minetest.set_node(pos, {name="df_primordial_items:giant_hypha_root"})
		return new_meristems
	end

	if math.random() < 0.06 then -- Note: hypha growth pattern is very sensitive to this branching factor. Higher than about 0.06 will blanket the landscape with fungus.
		-- Split - try again from here next time
		table.insert(new_meristems, pos)
	-- Otherwise, just turn into a hypha and we're done
	elseif math.random() < 0.333 then
		minetest.set_node(pos, {name="df_primordial_items:giant_hypha_root"})
	else
		minetest.set_node(pos, {name="df_primordial_items:giant_hypha"})
	end
	return new_meristems
end

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
local avg_growth_delay = (min_growth_delay + max_growth_delay) / 2

minetest.register_node("df_primordial_items:giant_hypha_apical_meristem", {
	description = S("Giant Hypha Apical Meristem"),
	tiles = {
		{name="dfcaverns_mush_giant_hypha.png^[brighten"},
	},
    connects_to = {"group:hypha"},
    connect_sides = { "top", "bottom", "front", "left", "back", "right" },
	drawtype = "nodebox",
	light_source = 6,
	node_box = get_node_box(0.25, 0.375),
	paramtype = "light",

	is_ground_content = false,
	groups = {oddly_breakable_by_hand = 1, choppy = 2, hypha = 1, light_sensitive_fungus = 13, handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=1, fire_flammability=1},
	_dfcaverns_dead_node = "df_primordial_items:giant_hypha_root",
	sounds = df_trees.node_sound_tree_soft_fungus_defaults(),
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
	on_construct = function(pos)
		if df_primordial_items.giant_mycelium_growth_permitted(pos) then
			minetest.get_node_timer(pos):start(math.random(min_growth_delay, max_growth_delay))
		end
	end,
	on_destruct = function(pos)
		minetest.get_node_timer(pos):stop()
	end,
	on_timer = function(pos, elapsed)
		if df_farming and df_farming.kill_if_sunlit(pos) then
			return
		end

		if elapsed > max_growth_delay then
			-- We've been unloaded for a while, need to do multiple growth iterations.
			local iterations = math.floor(elapsed / avg_growth_delay) -- the number of iterations we've missed
			local stack = {pos} -- initialize with the current location
			for i = 1, iterations do
				local new_stack = {} -- populate this with new node output.
				for _, stackpos in ipairs(stack) do -- for each currently growing location
					local ret = grow_mycelium(stackpos, "df_primordial_items:giant_hypha_apical_meristem")
					if ret == nil then
						-- We hit the edge of the known world, stop and retry later
						minetest.get_node_timer(stackpos):start(math.random(min_growth_delay,max_growth_delay))
					else
						for _, retpos in ipairs(ret) do
							-- put the new locations into new_stack
							table.insert(new_stack, retpos)
						end
					end
				end
				stack = new_stack -- replace the old stack with the new
			end
			for _, donepos in ipairs(stack) do
				-- After all the iterations are done, if there's any leftover growing positions set a timer for each of them
				minetest.get_node_timer(donepos):start(math.random(min_growth_delay,max_growth_delay))
			end
		else
			-- just do one iteration.
			local new_meristems = grow_mycelium(pos, "df_primordial_items:giant_hypha_apical_meristem")
			if new_meristems == nil then
				-- We hit the end of the known world, try again later. Unlikely in this case, but theoretically possible I guess.
				minetest.get_node_timer(pos):start(math.random(min_growth_delay,max_growth_delay))
			else
				for _, newpos in ipairs(new_meristems) do
					minetest.get_node_timer(newpos):start(math.random(min_growth_delay,max_growth_delay))
				end
			end
		end
	end,
})

-- this version grows instantly, it is meant for mapgen usage.

local grow_mycelium_immediately = function(pos)
	local stack = {pos}
	while #stack > 0 do
		local pos = table.remove(stack)
		if not (df_farming and df_farming.kill_if_sunlit(pos)) then
			local new_poses = grow_mycelium(pos, "df_primordial_items:giant_hypha_apical_mapgen")
			if new_poses then
				for _, new_pos in ipairs(new_poses) do
					table.insert(stack, new_pos)
				end
			else
				-- if we hit the end of the world, just stop. There'll be a mapgen meristem left here, re-trigger it.
				minetest.get_node_timer(pos):start(math.random(10,60))
			end
		end
	end
end

minetest.register_node("df_primordial_items:giant_hypha_apical_mapgen", {
	description = S("Giant Hypha Apical Meristem"),
	tiles = {
		{name="dfcaverns_mush_giant_hypha.png^[brighten"},
	},
    connects_to = {"group:hypha"},
    connect_sides = { "top", "bottom", "front", "left", "back", "right" },
	drawtype = "nodebox",
	_dfcaverns_dead_node = "df_primordial_items:giant_hypha_root",
	light_source = 6,
	node_box = get_node_box(0.25, 0.375),
	paramtype = "light",

	is_ground_content = false,
	groups = {oddly_breakable_by_hand = 1, choppy = 2, hypha = 1, not_in_creative_inventory = 1, light_sensitive_fungus = 13, handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=1, fire_flammability=1},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
	sounds = df_trees.node_sound_tree_soft_fungus_defaults(),
	on_timer = function(pos, elapsed)
		grow_mycelium_immediately(pos)
	end,
	on_construct = function(pos)
		minetest.get_node_timer(pos):start(1)
	end,
	on_destruct = function(pos)
		minetest.get_node_timer(pos):stop()
	end,
})

-- Just in case mapgen fails to trigger the timer on a mapgen mycelium this LBM will clean up.
minetest.register_lbm({
    label = "ensure mapgen mycelium has a timer running",
    name = "df_primordial_items:ensure_mapgen_mycelium_timer",
    nodenames = {"df_primordial_items:giant_hypha_apical_mapgen"},
    run_at_every_load = true,
    action = function(pos, node)
		local timer = minetest.get_node_timer(pos)
		if not timer:is_started() then
			timer:start(math.random(1,10))
		end
	end,
})


code:
df_primordial_items = {}
df_primordial_items.doc = {}

local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)

dofile(modpath.."/doc.lua")
dofile(modpath.."/jungle_nodes.lua")
dofile(modpath.."/jungle_tree.lua")
dofile(modpath.."/jungle_mushroom.lua")
dofile(modpath.."/giant_fern.lua")
dofile(modpath.."/fungal_nodes.lua")
dofile(modpath.."/ceiling_fungus.lua")
dofile(modpath.."/primordial_mushroom.lua")
dofile(modpath.."/giant_mycelium.lua")
dofile(modpath.."/edibles.lua")
dofile(modpath.."/sapling_growth_conditions.lua")

repo_name: korkut/MeseCraft

license: mit


code:
local S = minetest.get_translator(minetest.get_current_modname())

------------------------------------------------------------------------------------------
-- Big jungle mushroom

minetest.register_node("df_primordial_items:jungle_mushroom_trunk", {
	description = S("Primordial Jungle Mushroom Trunk"),
	_doc_items_longdesc = df_primordial_items.doc.big_mushroom_desc,
	_doc_items_usagehelp = df_primordial_items.doc.big_mushroom_usage,
	tiles = {"dfcaverns_jungle_mushroom_stem.png", "dfcaverns_jungle_mushroom_stem.png", "dfcaverns_jungle_mushroom_stem_02.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_trees.node_sound_tree_soft_fungus_defaults(),
	on_place = minetest.rotate_node,
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})

minetest.register_node("df_primordial_items:jungle_mushroom_cap_1", {
	description = S("Pale Jungle Mushroom Cap"),
	_doc_items_longdesc = df_primordial_items.doc.big_mushroom_desc,
	_doc_items_usagehelp = df_primordial_items.doc.big_mushroom_usage,
	tiles = {"dfcaverns_jungle_mushroom_top_02.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, primordial_mushroom_cap = 1, handy=1,axey=1, tree=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5, compostability=30},
	sounds = df_trees.node_sound_tree_soft_fungus_defaults(),
	on_place = minetest.rotate_node,
	drop = {
		max_items = 1,
		items = {
			{
				items = {"df_primordial_items:jungle_mushroom_sapling"},
				rarity = 10,
			},
			{
				items = {"df_primordial_items:jungle_mushroom_cap_1"},
			}
		}
	},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 1,
})

minetest.register_node("df_primordial_items:jungle_mushroom_cap_2", {
	description = S("Dark Jungle Mushroom Cap"),
	_doc_items_longdesc = df_primordial_items.doc.big_mushroom_desc,
	_doc_items_usagehelp = df_primordial_items.doc.big_mushroom_usage,
	tiles = {"dfcaverns_jungle_mushroom_top_01.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, primordial_mushroom_cap = 1, handy=1,axey=1, tree=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5, compostability=30},
	sounds = df_trees.node_sound_tree_soft_fungus_defaults(),
	on_place = minetest.rotate_node,
	drop = {
		max_items = 1,
		items = {
			{
				items = {"df_primordial_items:jungle_mushroom_sapling"},
				rarity = 10,
			},
			{
				items = {"df_primordial_items:jungle_mushroom_cap_2"},
			}
		}
	},
	_mcl_blast_resistance = 2,
	_mcl_hardness = 1,
})

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, dfcaverns_cookable = 1, eatable=1, plant=1},
	sound = {eat = {name = "df_farming_gummy_chew", gain = 1.0}},
	on_use = minetest.item_eat(1),
	_hunger_ng = {satiates = 1},
	_mcl_saturation = 0.5,
})

minetest.register_craft({
	output = "df_primordial_items:diced_mushroom 4",
	type = "shapeless",
	recipe = { "group:primordial_mushroom_cap"},
})

-- Note: no wood-making recipe for the trunk, it's deliberately pretty useless since the cap is edible
minetest.register_craft({
	type = "fuel",
	recipe = "df_primordial_items:jungle_mushroom_trunk",
	burntime = 15,
})

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,
	_doc_items_usagehelp = df_primordial_items.doc.big_mushroom_usage,
	tiles = {"dfcaverns_jungle_mushroom_02.png^[brighten"},
	inventory_image = "dfcaverns_jungle_mushroom_02.png^[brighten",
	wield_image = "dfcaverns_jungle_mushroom_02.png^[brighten",
	groups = {snappy = 3, attached_node = 1, flammable = 1, sapling = 1, light_sensitive_fungus = 13, dig_by_piston=1,destroy_by_lava_flow=1,deco_block=1, compostability=30,dig_immediate=3},
	selection_box = {
		type = "fixed",
		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
	},
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,

	on_construct = function(pos)
		if df_primordial_items.jungle_mushroom_growth_permitted(pos) then
			minetest.get_node_timer(pos):start(math.random(
				df_trees.config.tree_min_growth_delay,
				df_trees.config.tree_max_growth_delay))
		end
	end,
	on_destruct = function(pos)
		minetest.get_node_timer(pos):stop()
	end,

	on_timer = function(pos)
		if df_farming and df_farming.kill_if_sunlit(pos) then
			return
		end
		df_primordial_items.spawn_jungle_mushroom(pos)
	end,
})

local c_stem = minetest.get_content_id("df_primordial_items:jungle_mushroom_trunk")
local c_cap_1 = minetest.get_content_id("df_primordial_items:jungle_mushroom_cap_1")
local c_cap_2 = minetest.get_content_id("df_primordial_items:jungle_mushroom_cap_2")
local c_air = minetest.get_content_id("air")

df_primordial_items.spawn_jungle_mushroom = function(pos)
	minetest.set_node(pos, {name="air"})
	local x, y, z = pos.x, pos.y, pos.z
	local stem_height = math.random(1,3)
	local cap_radius = math.random(2,3)
	local maxy = y + stem_height + 3

	local c_cap
	if math.random() > 0.5 then
		c_cap = c_cap_1
	else
		c_cap = c_cap_2
	end

	local vm = minetest.get_voxel_manip()
	local minp, maxp = vm:read_from_map(
		{x = x - cap_radius, y = y, z = z - cap_radius},
		{x = x + cap_radius, y = maxy + 3, z = z + cap_radius}
	)
	local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp})
	local data = vm:get_data()

	subterrane.giant_mushroom(area:indexp(pos), area, data, c_stem, c_cap, c_air, stem_height, cap_radius)

	vm:set_data(data)
	vm:write_to_map()
	vm:update_map()
end

df_primordial_items.spawn_jungle_mushroom_vm = function(vi, area, data)
	local stem_height = math.random(1,3)
	local cap_radius = math.random(2,3)
	local c_cap
	if math.random() > 0.5 then
		c_cap = c_cap_1
	else
		c_cap = c_cap_2
	end
	subterrane.giant_mushroom(vi, area, data, c_stem, c_cap, c_air, stem_height, cap_radius)
end


code:
local S = minetest.get_translator(minetest.get_current_modname())

----------------------------------------------------
-- Ferns

local jungle_plant_groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_jungle_plant = 1, light_sensitive_fungus = 13, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1, compostability = 30}

minetest.register_node("df_primordial_items:fern_1", {
	description = S("Primordial Fern"),
	_doc_items_longdesc = df_primordial_items.doc.fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.fern_usage,
	tiles = {"dfcaverns_jungle_fern_01.png"},
	inventory_image = "dfcaverns_jungle_fern_01.png",
	wield_image = "dfcaverns_jungle_fern_01.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_shrub,
	visual_scale = 1.69,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:fern_2", {
	description = S("Primordial Fern"),
	_doc_items_longdesc = df_primordial_items.doc.fern_desc,
	_doc_items_usagehelp = df_primordial_items.doc.fern_usage,
	tiles = {"dfcaverns_jungle_fern_02.png"},
	visual_scale = 1.69,
	inventory_image = "dfcaverns_jungle_fern_02.png",
	wield_image = "dfcaverns_jungle_fern_02.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_shrub,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

---------------------------------------------------------
-- Glowing plants

minetest.register_node("df_primordial_items:glow_plant_1", {
	description = S("Primordial Flower"),
	_doc_items_longdesc = df_primordial_items.doc.glow_plant_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glow_plant_usage,
	tiles = {"dfcaverns_jungle_flower_01.png"},
	inventory_image = "dfcaverns_jungle_flower_01.png",
	wield_image = "dfcaverns_jungle_flower_01.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_shrub,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	light_source = 6,
	drop = {
		max_items = 2,
		items = {
			{
				rarity = 3,
				items = {"df_primordial_items:primordial_fruit"},
			},
			{
				rarity = 3,
				items = {"df_primordial_items:primordial_fruit"},
			},
		},
	},
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:glow_plant_2", {
	description = S("Primordial Jungle Pod"),
	_doc_items_longdesc = df_primordial_items.doc.glow_plant_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glow_plant_usage,
	tiles = {"dfcaverns_jungle_glow_plant_01.png"},
	inventory_image = "dfcaverns_jungle_glow_plant_01.png",
	wield_image = "dfcaverns_jungle_glow_plant_01.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_shrub,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	drop = "df_primordial_items:glowtato",
	light_source = 6,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:glow_plant_3", {
	description = S("Primordial Jungle Pod"),
	_doc_items_longdesc = df_primordial_items.doc.glow_plant_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glow_plant_usage,
	tiles = {"dfcaverns_jungle_glow_plant_02.png"},
	inventory_image = "dfcaverns_jungle_glow_plant_02.png",
	wield_image = "dfcaverns_jungle_glow_plant_02.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_shrub,
	paramtype = "light",
	drawtype = "plantlike",
	drop = "df_primordial_items:glowtato 2",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	light_source = 6,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

-------------------------------------------------------------------
-- Grass

minetest.register_node("df_primordial_items:jungle_grass_1", {
	description = S("Primordial Jungle Grass"),
	_doc_items_longdesc = df_primordial_items.doc.grass_desc,
	_doc_items_usagehelp = df_primordial_items.doc.grass_usage,
	tiles = {"dfcaverns_jungle_grass_01.png"},
	inventory_image = "dfcaverns_jungle_grass_01.png",
	wield_image = "dfcaverns_jungle_grass_01.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_grass_3,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:jungle_grass_2", {
	description = S("Primordial Jungle Grass"),
	_doc_items_longdesc = df_primordial_items.doc.grass_desc,
	_doc_items_usagehelp = df_primordial_items.doc.grass_usage,
	tiles = {"dfcaverns_jungle_grass_02.png"},
	inventory_image = "dfcaverns_jungle_grass_02.png",
	wield_image = "dfcaverns_jungle_grass_02.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_grass_4,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	place_param2 = 3,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:jungle_grass_3", {
	description = S("Primordial Jungle Grass"),
	_doc_items_longdesc = df_primordial_items.doc.grass_desc,
	_doc_items_usagehelp = df_primordial_items.doc.grass_usage,
	tiles = {"dfcaverns_jungle_grass_03.png"},
	inventory_image = "dfcaverns_jungle_grass_03.png",
	wield_image = "dfcaverns_jungle_grass_03.png",
	groups = jungle_plant_groups,
	_dfcaverns_dead_node = df_dependencies.node_name_dry_grass_4,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	place_param2 = 3,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

-----------------------------------------------------------------------------------------
-- Ivy

minetest.register_node("df_primordial_items:jungle_ivy", {
	description = S("Primordial Jungle Ivy"),
	_doc_items_longdesc = df_primordial_items.doc.ivy_desc,
	_doc_items_usagehelp = df_primordial_items.doc.ivy_usage,
	tiles = {"dfcaverns_jungle_ivy_01.png"},
	inventory_image = "dfcaverns_jungle_ivy_01.png",
	wield_image = "dfcaverns_jungle_ivy_01.png",
	groups = {snappy = 3, flammable = 1, vines = 1, handy=1,axey=1,shearsy=1,swordy=1, flammable=2,deco_block=1,destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=15, fire_flammability=100, compostability=50},
	paramtype = "light",
	drawtype = "plantlike",
	place_param2 = 3,
	--paramtype2 = "wallmouinted",
	--drawtype = "signlike",
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	is_ground_content = false,
	walkable = false,
	climbable = true,
--	selection_box = {
--		type = "wallmounted",
--	},
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

-------------------------------------------------------------------------------------
-- Small jungle mushrooms

minetest.register_node("df_primordial_items:jungle_mushroom_1", {
	description = S("Primordial Jungle Mushroom"),
	_doc_items_longdesc = df_primordial_items.doc.small_mushroom_desc,
	_doc_items_usagehelp = df_primordial_items.doc.small_mushroom_usage,
	tiles = {"dfcaverns_jungle_mushroom_01.png^[multiply:#f3df2a"},
	inventory_image = "dfcaverns_jungle_mushroom_01.png^[multiply:#f3df2a",
	wield_image = "dfcaverns_jungle_mushroom_01.png^[multiply:#f3df2a",
	groups = jungle_plant_groups,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:jungle_mushroom_2", {
	description = S("Large Primordial Jungle Mushroom"),
	_doc_items_longdesc = df_primordial_items.doc.small_mushroom_desc,
	_doc_items_usagehelp = df_primordial_items.doc.small_mushroom_usage,
	tiles = {"dfcaverns_jungle_mushroom_02.png"},
	inventory_image = "dfcaverns_jungle_mushroom_02.png",
	wield_image = "dfcaverns_jungle_mushroom_02.png",
	groups = jungle_plant_groups,
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	is_ground_content = false,
	walkable = false,
	floodable = true,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

----------------------------------------------------------------------------------------
-- Dirt

minetest.register_node("df_primordial_items:dirt_with_jungle_grass", {
	description = S("Dirt With Primordial Jungle Grass"),
	_doc_items_longdesc = df_primordial_items.doc.dirt_with_jungle_grass_desc,
	_doc_items_usagehelp = df_primordial_items.doc.dirt_with_jungle_grass_usage,
	tiles = {"dfcaverns_jungle_plant_grass_node_01.png"},
	paramtype = "light",
	groups = {crumbly = 3, soil = 1, light_sensitive_fungus = 13, handy=1,shovely=1, dirt=2, building_block=1, opaque=1},
	_dfcaverns_dead_node = df_dependencies.node_name_dirt,
	is_ground_content = false,
	drop = df_dependencies.node_name_dirt,
	sounds = df_dependencies.sound_dirt(),
	_mcl_blast_resistance = 0.5,
	_mcl_hardness = 0.6,
})

minetest.register_abm{
	label = "df_primordial_items:jungle_grass_spread",
	nodenames = {df_dependencies.node_name_dirt},
	neighbors = {"df_primordial_items:dirt_with_jungle_grass"},
	interval = 60,
	chance = 50,
	catch_up = true,
	action = function(pos)
		local above_def = minetest.registered_nodes[minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name]
		if above_def and (above_def.buildable_to == true or above_def.walkable == false) then
			minetest.swap_node(pos, {name="df_primordial_items:dirt_with_jungle_grass"})
		end
	end,
}

minetest.register_node("df_primordial_items:plant_matter", {
	description = S("Primordial Plant Matter"),
	_doc_items_longdesc = df_primordial_items.doc.plant_matter_desc,
	_doc_items_usagehelp = df_primordial_items.doc.plant_matter_usage,
	tiles = {"dfcaverns_jungle_plant_matter_01.png"},
	is_ground_content = false,
	groups = {crumbly = 3, soil = 1, flammable = 1, handy=1,shovely=1, dirt=2, building_block=1, fire_encouragement=1, fire_flammability=1},
	sounds = df_dependencies.sound_dirt(),
	on_timer = function(pos, elapsed)
		if elapsed > 130 then
			-- the timer triggered more than ten seconds after it was suppposed to,
			-- it may have been in an unloaded block. Rather than have all the timers
			-- go off at once now that the block's loaded, stagger them out again.
			minetest.get_node_timer(pos):start(math.random(10, 120))
			return
		end
		if minetest.find_node_near(pos, 1, {"air"}) == nil then
			minetest.set_node(pos, {name="df_primordial_items:packed_roots"})
		end
	end,
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})

minetest.register_node("df_primordial_items:packed_roots", {
	description = S("Packed Primordial Jungle Roots"),
	_doc_items_longdesc = df_primordial_items.doc.packed_roots_desc,
	_doc_items_usagehelp = df_primordial_items.doc.packed_roots_usage,
	tiles = {"dfcaverns_jungle_plant_packed_roots_01.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	_mcl_blast_resistance = 3,
	_mcl_hardness = 3,
})

if minetest.get_modpath("footprints") then
	local HARDPACK_PROBABILITY = tonumber(minetest.settings:get("footprints_hardpack_probability")) or 0.9 -- Chance walked dirt/grass is worn and compacted to footprints:trail.
	local HARDPACK_COUNT = tonumber(minetest.settings:get("footprints_hardpack_count")) or 10 -- Number of times the above chance needs to be passed for soil to compact.

	footprints.register_trample_node("df_primordial_items:dirt_with_jungle_grass", {
		trampled_node_def_override = {description = S("Dirt With Primordial Jungle Grass and Footprint"),},
		footprint_opacity = 128,
		hard_pack_node_name = "footprints:trail",
		hard_pack_probability = HARDPACK_PROBABILITY,
		hard_pack_count = HARDPACK_COUNT,
	})
	footprints.register_trample_node("df_primordial_items:plant_matter", {
		trampled_node_def_override = {description = S("Primordial Plant Matter with Footprint"),},
		footprint_opacity = 128,
		hard_pack_node_name = "df_primordial_items:packed_roots",
		hard_pack_probability = HARDPACK_PROBABILITY,
		hard_pack_count = HARDPACK_COUNT,
	})
end

minetest.register_craft({
	type = "fuel",
	recipe = "df_primordial_items:packed_roots",
	burntime = 40,
})

minetest.register_craft({
	type = "fuel",
	recipe = "df_primordial_items:plant_matter",
	burntime = 20,
})

----------------------------------------------------------------------------------------
-- Roots

minetest.register_node("df_primordial_items:jungle_roots_1", {
	description = S("Primordial Jungle Roots"),
	_doc_items_longdesc = df_primordial_items.doc.roots_desc,
	_doc_items_usagehelp = df_primordial_items.doc.roots_usage,
	tiles = {"dfcaverns_jungle_root_01.png"},
	inventory_image = "dfcaverns_jungle_root_01.png",
	wield_image = "dfcaverns_jungle_root_01.png",
	groups = {snappy = 3, flammable = 1, vines = 1, handy=1,axey=1,shearsy=1,swordy=1, deco_block=1,destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=3, fire_flammability=10, compostability=50},
	paramtype = "light",
	drawtype = "plantlike",
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	walkable = false,
	climbable = true,
	is_ground_content = false,
	_mcl_blast_resistance = 0.3,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:jungle_roots_2", {
	description = S("Primordial Jungle Root"),
	_doc_items_longdesc = df_primordial_items.doc.roots_desc,
	_doc_items_usagehelp = df_primordial_items.doc.roots_usage,
	tiles = {"dfcaverns_jungle_root_02.png"},
	inventory_image = "dfcaverns_jungle_root_02.png",
	wield_image = "dfcaverns_jungle_root_02.png",
	groups = {snappy = 3, flammable = 1, vines = 1, handy=1,axey=1,shearsy=1,swordy=1, deco_block=1,destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=3, fire_flammability=10, compostability=50},
	paramtype = "light",
	drawtype = "plantlike",
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	is_ground_content = false,
	sunlight_propagates = true,
	walkable = false,
	climbable = true,
	_mcl_blast_resistance = 0.3,
	_mcl_hardness = 0.2,
})

--------------------------------------------------------------------------------
-- Thorns

minetest.register_node("df_primordial_items:jungle_thorns", {
	description = S("Primordial Jungle Thorns"),
	_doc_items_longdesc = df_primordial_items.doc.thorn_desc,
	_doc_items_usagehelp = df_primordial_items.doc.thorn_usage,
	tiles = {"dfcaverns_jungle_thorns_01.png"},
	visual_scale = 1.41,
	inventory_image = "dfcaverns_jungle_thorns_01.png",
	wield_image = "dfcaverns_jungle_thorns_01.png",
	groups = {snappy = 3, flammable = 1, primordial_jungle_plant = 1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=30, fire_flammability=100, compostability=50},
	paramtype = "light",
	drawtype = "plantlike",
	walkable = false,
	floodable = true,
	is_ground_content = false,
	place_param2 = 3,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	damage_per_second = 1,
	_mcl_blast_resistance = 0.5,
	_mcl_hardness = 0.3,
})

-- TODO I had an idea to make thorns grow into mazes naturally using cellular automata rules, but it turned out to be
-- complicated and probably not worth it right now. Deal with it later.

--local thorn_dir =
--{
--	{x=1,y=0,z=1},
--	{x=-1,y=0,z=-1},
--	{x=1,y=0,z=0},
--	{x=1,y=0,z=-1},
--	{x=-1,y=0,z=0},
--	{x=-1,y=0,z=1},
--}
--
--
--local thorn_name = "df_primordial_items:jungle_thorns"
--minetest.register_abm({
--	label = "Primordial thorn growth",
--	nodenames = {thorn_name},
--	neighbors = {"group:soil"},
--	interval = 1.0,
--	chance = 5,
--	catch_up = true,
--	action = function(pos, node, active_object_count, active_object_count_wider)
--		if math.random() < 0.1 then
--			local above = vector.add({x=0,y=1,z=0},pos)
--			local below = vector.add({x=0,y=-1,z=0},pos)
--			local above_node = minetest.get_node(above)
--			local below_node = minetest.get_node(below)
--			if above_node.name == "air" and minetest.get_item_group(below_node.name, "soil") then
--				minetest.set_node(above, {name=thorn_name})
--			end
--			if below_node.name == "air" then
--				minetest.set_node(below, {name=thorn_name})
--			end
--			return
--		end
--
--		local dir = thorn_dir[math.random(#thorn_dir)]
--		local target_pos = vector.add(dir, pos)
--		-- This gets the corners of the target zone
--		local pos1 = vector.add(target_pos, thorn_dir[1])
--		local pos2 = vector.add(target_pos, thorn_dir[2])
--
--		local list, counts = minetest.find_nodes_in_area(pos1, pos2, {thorn_name})
--		local count = counts[thorn_name]
--		local target_node = minetest.get_node(target_pos)
--		-- Cellular automaton rule B3/S12345, approximately
--		if count == 3 and target_node.name == "air" then
--			minetest.set_node(target_pos, {name=thorn_name})
--		elseif count > 5 then
--			minetest.set_node(target_pos, {name="air"})
--		end
--	end
--})


code:
local S = minetest.get_translator(minetest.get_current_modname())

-- Leaves
minetest.register_node("df_primordial_items:jungle_leaves", {
	description = S("Primordial Jungle Tree Leaves"),
	_doc_items_longdesc = df_primordial_items.doc.leaves_desc,
	_doc_items_usagehelp = df_primordial_items.doc.leaves_usage,
	drawtype = "plantlike",
	walkable = false,
	waving = 2,
	visual_scale = 1.4,
	tiles = {"dfcaverns_jungle_leaves_01.png"},
	inventory_image = "dfcaverns_jungle_leaves_01.png",
	wield_image = "dfcaverns_jungle_leaves_01.png",
	paramtype = "light",
	is_ground_content = false,
	buildable_to = true,
	groups = {snappy = 3, leafdecay = 1, flammable = 2, leaves = 1, handy=1, hoey=1, shearsy=1, swordy=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60, compostability=30},
	sounds = df_dependencies.sound_leaves(),
	drop = {
		max_items = 1,
		items = {
			{
				items = {"df_primordial_items:jungletree_sapling"},
				rarity = 10,
			},
			{
				items = {"df_primordial_items:jungle_leaves"},
			}
		}
	},
	after_place_node = df_dependencies.after_place_leaves,
	place_param2 = 1, -- Prevent leafdecay for placed nodes
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

minetest.register_node("df_primordial_items:jungle_leaves_glowing", {
	description = S("Phosphorescent Primordial Jungle Tree Leaves"),
	_doc_items_longdesc = df_primordial_items.doc.glowing_leaves_desc,
	_doc_items_usagehelp = df_primordial_items.doc.glowing_leaves_usage,
	drawtype = "plantlike",
	walkable = false,
	waving = 2,
	visual_scale = 1.4,
	tiles = {"dfcaverns_jungle_leaves_02.png"},
	inventory_image = "dfcaverns_jungle_leaves_02.png",
	wield_image = "dfcaverns_jungle_leaves_02.png",
	paramtype = "light",
	is_ground_content = false,
	buildable_to = true,
	light_source = 2,
	groups = {snappy = 3, leafdecay = 1, flammable = 2, leaves = 1, handy=1, hoey=1, shearsy=1, swordy=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60, compostability=30},
	sounds = df_dependencies.sound_leaves(),
	drop = {
		max_items = 1,
		items = {
			{
				items = {"df_primordial_items:jungletree_sapling"},
				rarity = 10,
			},
			{
				items = {"df_primordial_items:jungle_leaves_glowing"},
			}
		}
	},
	after_place_node = df_dependencies.after_place_leaves,
	place_param2 = 1, -- Prevent leafdecay for placed nodes
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
})

-- Trunk

minetest.register_node("df_primordial_items:jungle_tree", {
	description = S("Primordial Jungle Tree"),
	_doc_items_longdesc = df_primordial_items.doc.tree_desc,
	_doc_items_usagehelp = df_primordial_items.doc.tree_usage,
	tiles = {"dfcaverns_jungle_wood_02.png", "dfcaverns_jungle_wood_02.png", "dfcaverns_jungle_wood_01.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, primordial_jungle_tree = 1, handy=1,axey=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	on_place = minetest.rotate_node,
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})

minetest.register_node("df_primordial_items:jungle_tree_mossy", {
	description = S("Mossy Primordial Jungle Tree"),
	_doc_items_longdesc = df_primordial_items.doc.tree_desc,
	_doc_items_usagehelp = df_primordial_items.doc.tree_usage,
	tiles = {"dfcaverns_jungle_wood_02.png", "dfcaverns_jungle_wood_02.png", "dfcaverns_jungle_wood_03.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, primordial_jungle_tree = 1, handy=1,axey=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	on_place = minetest.rotate_node,
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})

minetest.register_node("df_primordial_items:jungle_tree_glowing", {
	description = S("Phosphorescent Primordial Jungle Tree"),
	_doc_items_longdesc = df_primordial_items.doc.tree_glowing_desc,
	_doc_items_usagehelp = df_primordial_items.doc.tree_glowing_usage,
	tiles = {"dfcaverns_jungle_wood_02.png", "dfcaverns_jungle_wood_02.png", "dfcaverns_jungle_wood_04.png"},
	paramtype2 = "facedir",
	is_ground_content = false,
	light_source = 4,
	groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, primordial_jungle_tree = 1, handy=1,axey=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
	sounds = df_dependencies.sound_wood(),
	on_place = minetest.rotate_node,
	_mcl_blast_resistance = 2,
	_mcl_hardness = 2,
})

df_dependencies.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,
})

minetest.register_craft({
	output = df_dependencies.node_name_junglewood .. " 4",
	recipe = {
		{"group:primordial_jungle_tree"},
	}
})

----------------------------
-- Spawn

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

local get_tree_nodes = function()
	local rand = math.random()
	if rand < 0.5 then
		return c_trunk_glow, c_leaves_glow
	end
	if rand < 0.75 then
		return c_trunk_mossy, c_leaves
	end
	return c_trunk, c_leaves
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
			local trunknode = get_tree_nodes()
			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] = trunknode
				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, glow)
		local trunknode, leafnode
		if buildable_to(data[bi]) then
			trunknode, leafnode = get_tree_nodes()
			data[bi] = trunknode
		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] = leafnode
						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] = get_tree_nodes()
		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

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, attached_node = 1, flammable = 1, sapling = 1, light_sensitive_fungus = 13, dig_by_piston=1,destroy_by_lava_flow=1,deco_block=1, compostability=30,dig_immediate=3},
	_dfcaverns_dead_node = df_dependencies.node_name_dry_shrub,
	selection_box = {
		type = "fixed",
		fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16}
	},
	paramtype = "light",
	drawtype = "plantlike",
	buildable_to = true,
	walkable = false,
	is_ground_content = false,
	sounds = df_dependencies.sound_leaves(),
	use_texture_alpha = "clip",
	sunlight_propagates = true,
	_mcl_blast_resistance = 0.2,
	_mcl_hardness = 0.2,
	on_construct = function(pos)
		if df_primordial_items.jungletree_growth_permitted(pos) then
			minetest.get_node_timer(pos):start(math.random(
				df_trees.config.tree_min_growth_delay,
				df_trees.config.tree_max_growth_delay))
		end
	end,
	on_destruct = function(pos)
		minetest.get_node_timer(pos):stop()
	end,
	on_timer = function(pos, elapsed)
		if df_farming and df_farming.kill_if_sunlit(pos) then
			return
		end
		if minetest.get_node_light(pos) > 6 then
			df_primordial_items.spawn_jungle_tree(pos)
		else
			minetest.get_node_timer(pos):start(df_trees.config.tree_min_growth_delay)
		end
	end,
})


code:
# textdomain: df_primordial_items

### ceiling_fungus.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Lantern=Ursprüngliche Pilzlaterne
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Lantern Stalk=Ursprünglicher Pilzlaternenstiel

### ceiling_fungus.lua ###
### fungal_nodes.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Orb=Urpilzkugel

### doc.lua ###

A strangely glowing starchy nodule from a plant that grew deeper than any plant has a right to.=

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Compared to the behemoths found elsewhere in the deep places of the world, the giant mushrooms of the primordial jungles are on the smaller side - often overwhelmed by the green plants that grow in the mysterious light below. Still, they can become substantial resources.=Im Vergleich zu den Giganten, die anderswo in den Tiefen der Welt zu finden sind, sind die riesigen Pilze des Urdschungels eher klein - oft überwältigt von den grünen Pflanzen, die im mysteriösen Licht unten wachsen. Dennoch können sie zu erheblichen Ressourcen werden.

Eating this fruit will improve your vitality.=
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Fibers extracted from gigantic fungal hyphae.=Fasern aus riesigen Pilzhyphen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Fungal fibers have infiltrated the ground in a spongy mass, making the soil half mineral and half living matter.=Pilzfasern haben den Boden in einer schwammigen Masse infiltriert und den Boden halb mineralisch und halb lebendig gemacht.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Fungus in its purest form, these gigantic rope-like hyphae creep over the surface of soil and burrow in to feed wherever nutrients are sensed.=Diese gigantischen seilartigen Hyphen, Pilze in ihrer reinsten Form, kriechen über die Oberfläche des Bodens und graben sich ein, um sich dort zu ernähren, wo Nährstoffe wahrgenommen werden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Ivy is climbable, if it hangs close enough to the ground it can serve as a path between floor and ceiling.=Efeu ist kletterbar, wenn er nahe genug am Boden hängt, kann er als Weg zwischen Boden und Decke dienen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Like wood of the surface world, primordial jungle trees can be chopped and carved as building material or as fuel.=Ursprüngliche Dschungelbäume können wie Holz der Oberflächenwelt als Baumaterial oder als Brennstoff gehackt und geschnitzt werden.

Much energy is contained in this tuber. It tastes surprisingly good, too. You could cook with it but any change in its pure state would only reduce its value.=

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Much like a rope, hyphae have fibers inside that can be unraveled and used for a variety of crafts.=Ähnlich wie ein Seil haben Hyphen Fasern im Inneren, die entwirrt und für eine Vielzahl von Handwerken verwendet werden können.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Much like the giant mushrooms of higher cavern layers, these can be carved into woody material for use as fuel or for building things. The grain of these primordial mushrooms is knurled.=Ähnlich wie die Riesenpilze höherer Höhlenschichten können diese in Holzmaterial geschnitzt werden, um sie als Brennstoff oder zum Bauen zu verwenden. Das Korn dieser Urpilze ist gerändelt.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Questing fibers of fungal mycelium sometimes erupt from the soil and reach upward, driven by chemical cues to seek out nourishment above. They look a lot like white grass, at a glance.=Suchende Fasern aus Pilzmyzel brechen manchmal aus dem Boden aus und reichen nach oben, angetrieben von chemischen Hinweisen, um oben nach Nahrung zu suchen. Sie sehen auf den ersten Blick wie weißes Gras aus.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Some fronds of primordial jungle trees also become host to the phosphorescent fungus that creeps through cracks in the bark.=Einige Wedel ursprünglicher Dschungelbäume beherbergen auch den phosphoreszierenden Pilz, der durch Risse in der Rinde kriecht.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Somewhere above an enormous plant has wedged its roots down through the rock and emerged from the ceiling of another cavern.=Irgendwo oben hat eine riesige Pflanze ihre Wurzeln durch den Felsen geklemmt und ist von der Decke einer anderen Höhle aufgetaucht.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Tangled weaves of ivy hang from the ceiling where there are wide enough gaps between the bright sources of light.=Von der Decke hängen verworrene Efeu-Gewebe, an denen zwischen den hellen Lichtquellen ausreichend große Lücken bestehen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The cracks in the bark of some primordial jungle trees become host to phosphorescent veins of symbiotic fungus.=Die Risse in der Rinde einiger ursprünglicher Dschungelbäume beherbergen phosphoreszierende Adern symbiotischer Pilze.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The dark-leaved ferns of the primordial jungle harken back to an earlier era of life in the world.=Die dunkelblättrigen Farne des Urdschungels erinnern an eine frühere Ära des Lebens in der Welt.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The glowing bark fungus doesn't extend into the wood of the trunk, resulting in surprisingly mundane building material when hewn.=Der glühende Rindenpilz dringt nicht in das Holz des Stammes ein, was beim Hauen zu überraschend banalem Baumaterial führt.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The gnarled interwoven root-like foundations of this plant material is not useful as building material, but can serve as a fuel source.=Die knorrigen, verwobenen, wurzelartigen Fundamente dieses Pflanzenmaterials sind nicht als Baumaterial geeignet, können aber als Brennstoffquelle dienen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The grandest of the great mushroom species can be found in the deepest primordial caverns. Their broad caps have hanging gills.=Die größte der großen Pilzarten befindet sich in den tiefsten Urhöhlen. Ihre breiten Kappen haben hängende Kiemen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The large woody plants of the primordial jungle are similar in appearance to the jungle trees of the surface, but are a result of convergent evolution from ancient cycad plants toward a common form.=Die großen Holzpflanzen des Urdschungels ähneln in ihrem Aussehen den Dschungelbäumen der Oberfläche, sind jedoch das Ergebnis einer konvergenten Entwicklung von alten Cycad-Pflanzen zu einer gemeinsamen Form.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The soft flesh of these large mushrooms is much less woody than other giant mushrooms, making it ill-suited to structural use. This makes it rather more nutritious, however.=Das weiche Fleisch dieser großen Pilze ist viel weniger holzig als andere Riesenpilze, was sie für strukturelle Zwecke ungeeignet macht. Dies macht es jedoch etwas nahrhafter.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The soil of the primordial jungle is rife with strange life at every scale.=Der Boden des Urdschungels ist voller seltsamer Leben in jeder Größenordnung.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The steady light and unchanging growing conditions of the primordial caverns have led to great mountainous masses of plant material growing in particularly fertile spots, hardly identifiable as individual organisms.=Das stetige Licht und die unveränderlichen Wachstumsbedingungen der Urhöhlen haben dazu geführt, dass an besonders fruchtbaren Stellen große Gebirgsmassen an Pflanzenmaterial wachsen, die kaum als einzelne Organismen zu identifizieren sind.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The still air of these ancient caverns have allowed ferns to grow to prodigious sizes, where storms and rain would normally tear their weaker fronds off on the surface of the world.=Die stille Luft dieser alten Höhlen hat es Farnen ermöglicht, zu erstaunlichen Größen zu wachsen, wo Stürme und Regen normalerweise ihre schwächeren Wedel auf der Oberfläche der Welt abreißen würden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These fibrous plants that grow in the deep appear similar to grass at a glance, but they are more closely related to horsetails - a form of vegetation from before the advent of modern plant forms. Ironically, pale cave wheat is more kin to surface grass than this is.=Diese faserigen Pflanzen, die in der Tiefe wachsen, sehen auf den ersten Blick wie Gras aus, sind jedoch enger mit Schachtelhalmen verwandt - einer Vegetationsform vor dem Aufkommen moderner Pflanzenformen. Ironischerweise ist blasser Höhlenweizen mehr verwandt mit Oberflächengras als dies.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These hanging roots are climbable.=Diese hängenden Wurzeln sind kletterbar.

This strange fruit from the depths has absorbed healthful energies.=

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
When a fern grows to such sizes its stem becomes dense enough to be used as a form of wood.=Wenn ein Farn so groß wird, wird sein Stamm dicht genug, um als Holzform verwendet zu werden.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
When left uncultivated mycelial soil will sprout all manner of strange wild fungi.=Wenn nicht kultivierter Myzelboden belassen wird, sprießen alle Arten von seltsamen Wildpilzen.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
When left uncultivated primordial jungle soil will sprout all manner of strange wild plants.=Wenn sie nicht kultiviert werden, sprießen alle Arten von seltsamen Wildpflanzen aus dem ursprünglichen Dschungelboden.

### edibles.lua ###

Glowtato=
Primordial Fruit=

### fungal_nodes.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Primordial Mycelium=Schmutz mit Urmyzel
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Primordial Mycelium and Footprint=Schmutz mit Urmyzel und Fußabdruck
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Grass=Urpilzgras
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Pod=Urpilzschote

### giant_fern.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Fern Wood=Farnholz
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Fern Leaves=Riesige Farnblätter
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Fern Sapling=Riesenfarnsetzling
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Fern Stem=Riesenfarnstamm

### giant_mycelium.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Hypha=Riesenhyphe
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Hypha Apical Meristem=Riesenhypha Apical Meristem
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Mycelial Fibers=Riesige Myzelfasern
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Mycelial thread=Myzelfaden
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Rooted Giant Hypha=Verwurzelte Riesenhyphe

### jungle_mushroom.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dark Jungle Mushroom Cap=Dunkle Dschungel-Pilz-Kappe
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Diced Mushroom=Pilzwürfel
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Pale Jungle Mushroom Cap=Blasse Dschungel-Pilz-Kappe
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Mushroom Sapling=Ur-Dschungel-Pilz-Schössling
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Mushroom Trunk=Ursprünglicher Dschungelpilzstamm

### jungle_nodes.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt With Primordial Jungle Grass=Schmutz mit ursprünglichem Dschungelgras
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt With Primordial Jungle Grass and Footprint=Schmutz mit ursprünglichem Dschungelgras und Fußabdruck
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Large Primordial Jungle Mushroom=Großer Ur-Dschungelpilz
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Packed Primordial Jungle Roots=Gepackte ursprüngliche Dschungelwurzeln
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fern=Urfarn
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Flower=Urblume
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Grass=Ursprüngliches Dschungelgras
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Ivy=Ursprünglicher Dschungel-Efeu
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Mushroom=Ursprünglicher Dschungelpilz
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Pod=Ursprünglicher Dschungel-Pod
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Root=Ursprüngliche Dschungelwurzel
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Roots=Ursprüngliche Dschungelwurzeln
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Thorns=Ursprüngliche Dschungeldornen
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Plant Matter=Urpflanzenmaterie
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Plant Matter with Footprint=Urpflanzen mit Fußabdruck

### jungle_tree.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Mossy Primordial Jungle Tree=Moosiger Urdschungelbaum
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Phosphorescent Primordial Jungle Tree=Phosphoreszierender Urdschungelbaum
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Phosphorescent Primordial Jungle Tree Leaves=Phosphoreszierende Ur-Dschungelbaumblätter
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Tree=Ursprünglicher Dschungelbaum
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Tree Leaves=Ursprüngliche Dschungelbaumblätter
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Tree Sapling=Ursprünglicher Dschungelbaumsetzling

### primordial_mushroom.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Glowing Primordial Mushroom Gills=Glühende Urpilzkiemen
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Cap Wood=Urkappenholz
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Cap=Urpilzkappe
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Gills=Urpilzkiemen
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Spawn=Urpilzlaich
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Trunk=Urpilzstamm
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Trunk Wood=Urpilzstammholz


code:
# textdomain: df_primordial_items

### ceiling_fungus.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Lantern=Lanterna fungina primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Lantern Stalk=Gambo di lanterna fungina primordiale

### ceiling_fungus.lua ###
### fungal_nodes.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Orb=Globo fungino primordiale

### doc.lua ###

A strangely glowing starchy nodule from a plant that grew deeper than any plant has a right to.=

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Compared to the behemoths found elsewhere in the deep places of the world, the giant mushrooms of the primordial jungles are on the smaller side - often overwhelmed by the green plants that grow in the mysterious light below. Still, they can become substantial resources.=Rispetto ai behemoth che si trovano altrove nelle profondità del mondo, i funghi giganti delle giungle primordiali sono sul lato più piccolo, spesso sopraffatti dalle piante verdi che crescono nella misteriosa luce sottostante. Tuttavia, possono diventare risorse sostanziali.

Eating this fruit will improve your vitality.=
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Fibers extracted from gigantic fungal hyphae.=Fibre estratte da gigantesche ife fungine.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Fungal fibers have infiltrated the ground in a spongy mass, making the soil half mineral and half living matter.=Le fibre fungine si sono infiltrate nel terreno in una massa spugnosa, rendendo il suolo metà minerale e metà materia vivente.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Fungus in its purest form, these gigantic rope-like hyphae creep over the surface of soil and burrow in to feed wherever nutrients are sensed.=Funghi nella sua forma più pura, queste gigantesche ife simili a corde strisciano sulla superficie del terreno e si insinuano per nutrirsi ovunque vengano percepiti i nutrienti.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Ivy is climbable, if it hangs close enough to the ground it can serve as a path between floor and ceiling.=Ivy è scalabile, se pende abbastanza vicino al suolo può fungere da percorso tra il pavimento e il soffitto.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Like wood of the surface world, primordial jungle trees can be chopped and carved as building material or as fuel.=Come il legno del mondo di superficie, gli alberi della giungla primordiale possono essere tagliati e intagliati come materiale da costruzione o come combustibile.

Much energy is contained in this tuber. It tastes surprisingly good, too. You could cook with it but any change in its pure state would only reduce its value.=

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Much like a rope, hyphae have fibers inside that can be unraveled and used for a variety of crafts.=Proprio come una corda, le ife hanno fibre all'interno che possono essere svelate e utilizzate per una varietà di mestieri.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Much like the giant mushrooms of higher cavern layers, these can be carved into woody material for use as fuel or for building things. The grain of these primordial mushrooms is knurled.=Proprio come i funghi giganti degli strati superiori delle caverne, questi possono essere scolpiti in materiale legnoso da utilizzare come combustibile o per costruire oggetti. Il chicco di questi funghi primordiali è zigrinato.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Questing fibers of fungal mycelium sometimes erupt from the soil and reach upward, driven by chemical cues to seek out nourishment above. They look a lot like white grass, at a glance.=Le fibre di ricerca del micelio fungino a volte eruttano dal suolo e si allungano verso l'alto, spinte da segnali chimici a cercare nutrimento sopra. Assomigliano molto all'erba bianca, a prima vista.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Some fronds of primordial jungle trees also become host to the phosphorescent fungus that creeps through cracks in the bark.=Alcune fronde di alberi primordiali della giungla diventano anche ospiti del fungo fosforescente che si insinua attraverso le fessure della corteccia.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Somewhere above an enormous plant has wedged its roots down through the rock and emerged from the ceiling of another cavern.=Da qualche parte sopra un'enorme pianta ha incuneato le sue radici nella roccia ed è emersa dal soffitto di un'altra caverna.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Tangled weaves of ivy hang from the ceiling where there are wide enough gaps between the bright sources of light.=Intrecci aggrovigliati di edera pendono dal soffitto dove ci sono spazi abbastanza ampi tra le sorgenti luminose luminose.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The cracks in the bark of some primordial jungle trees become host to phosphorescent veins of symbiotic fungus.=Le crepe nella corteccia di alcuni alberi primordiali della giungla ospitano vene fosforescenti di funghi simbiotici.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The dark-leaved ferns of the primordial jungle harken back to an earlier era of life in the world.=Le felci dalle foglie scure della giungla primordiale rimandano a un'era precedente della vita nel mondo.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The glowing bark fungus doesn't extend into the wood of the trunk, resulting in surprisingly mundane building material when hewn.=Il fungo della corteccia incandescente non si estende nel legno del tronco, risultando in materiale da costruzione sorprendentemente banale quando viene tagliato.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The gnarled interwoven root-like foundations of this plant material is not useful as building material, but can serve as a fuel source.=Le fondamenta nodose intrecciate simili a radici di questo materiale vegetale non sono utili come materiale da costruzione, ma possono servire come fonte di combustibile.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The grandest of the great mushroom species can be found in the deepest primordial caverns. Their broad caps have hanging gills.=La più grande delle grandi specie di funghi si trova nelle più profonde caverne primordiali. I loro berretti larghi hanno branchie pendenti.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The large woody plants of the primordial jungle are similar in appearance to the jungle trees of the surface, but are a result of convergent evolution from ancient cycad plants toward a common form.=Le grandi piante legnose della giungla primordiale sono simili nell'aspetto agli alberi della giungla della superficie, ma sono il risultato dell'evoluzione convergente dalle antiche piante delle Cicade verso una forma comune.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The soft flesh of these large mushrooms is much less woody than other giant mushrooms, making it ill-suited to structural use. This makes it rather more nutritious, however.=La polpa morbida di questi grandi funghi è molto meno legnosa di altri funghi giganti, rendendola poco adatta all'uso strutturale. Tuttavia, questo lo rende un po 'più nutriente.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The soil of the primordial jungle is rife with strange life at every scale.=Il suolo della giungla primordiale è pieno di strane forme di vita ad ogni scala.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The steady light and unchanging growing conditions of the primordial caverns have led to great mountainous masses of plant material growing in particularly fertile spots, hardly identifiable as individual organisms.=La luce costante e le condizioni di crescita immutate delle caverne primordiali hanno portato a grandi masse montuose di materiale vegetale che crescono in punti particolarmente fertili, difficilmente identificabili come singoli organismi.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
The still air of these ancient caverns have allowed ferns to grow to prodigious sizes, where storms and rain would normally tear their weaker fronds off on the surface of the world.=L'aria immobile di queste antiche caverne ha permesso alle felci di raggiungere dimensioni prodigiose, dove le tempeste e la pioggia normalmente strapperebbero le loro fronde più deboli sulla superficie del mondo.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These fibrous plants that grow in the deep appear similar to grass at a glance, but they are more closely related to horsetails - a form of vegetation from before the advent of modern plant forms. Ironically, pale cave wheat is more kin to surface grass than this is.=Queste piante fibrose che crescono in profondità sembrano a prima vista simili all'erba, ma sono più strettamente imparentate con gli equiseti, una forma di vegetazione antecedente all'avvento delle moderne forme vegetali. Ironia della sorte, il grano chiaro delle caverne è più simile all'erba in superficie di quanto non lo sia.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
These hanging roots are climbable.=Queste radici pendenti sono scalabili.

This strange fruit from the depths has absorbed healthful energies.=

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
When a fern grows to such sizes its stem becomes dense enough to be used as a form of wood.=Quando una felce raggiunge tali dimensioni, il suo gambo diventa abbastanza denso da essere usato come una forma di legno.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
When left uncultivated mycelial soil will sprout all manner of strange wild fungi.=Se lasciato incolto il terreno miceliale germoglierà ogni sorta di strani funghi selvatici.

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
When left uncultivated primordial jungle soil will sprout all manner of strange wild plants.=Se lasciato incolto, il terreno della giungla primordiale germoglierà ogni sorta di strane piante selvatiche.

### edibles.lua ###

Glowtato=
Primordial Fruit=

### fungal_nodes.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Primordial Mycelium=Sporcizia con micelio primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt with Primordial Mycelium and Footprint=Sporcizia con micelio primordiale e impronta
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Grass=Erba fungina primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fungal Pod=Capsula Fungina Primordiale

### giant_fern.lua ###

Fern Wood=
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Fern Leaves=Foglie di felce gigante
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Fern Sapling=Alberello di felce gigante
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Fern Stem=Fusto di felce gigante

### giant_mycelium.lua ###

Giant Hypha=
Giant Hypha Apical Meristem=
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Giant Mycelial Fibers=Fibre miceliali giganti
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Mycelial thread=Filo miceliale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Rooted Giant Hypha=Hypha gigante radicato

### jungle_mushroom.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dark Jungle Mushroom Cap=Cappello a fungo della giungla oscura
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Diced Mushroom=Funghi a cubetti
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Pale Jungle Mushroom Cap=Cappello a fungo della giungla pallido
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Mushroom Sapling=Alberello di funghi della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Mushroom Trunk=Tronco di funghi della giungla primordiale

### jungle_nodes.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt With Primordial Jungle Grass=Sporcizia Con Erba Primordiale Della Giungla
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Dirt With Primordial Jungle Grass and Footprint=Sporcizia con erba della giungla primordiale e impronta
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Large Primordial Jungle Mushroom=Grande fungo della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Packed Primordial Jungle Roots=Radici della giungla primordiali imballate
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Fern=Felce primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Flower=Fiore primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Grass=Erba della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Ivy=Edera della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Mushroom=Fungo della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Pod=Capsula della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Root=Radice della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Roots=Radici della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Thorns=Spine della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Plant Matter=Materia vegetale primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Plant Matter with Footprint=Materia vegetale primordiale con impronta

### jungle_tree.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Mossy Primordial Jungle Tree=Albero della giungla primordiale muschioso
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Phosphorescent Primordial Jungle Tree=Albero della giungla primordiale fosforescente
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Phosphorescent Primordial Jungle Tree Leaves=Foglie di albero della giungla primordiale fosforescente
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Tree=Albero della giungla primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Tree Leaves=Foglie primordiali dell'albero della giungla
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Jungle Tree Sapling=Alberello dell'albero della giungla primordiale

### primordial_mushroom.lua ###

#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Glowing Primordial Mushroom Gills=Incandescente branchie di funghi primordiali
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Cap Wood=Cap legno primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Cap=Cappello del fungo primordiale
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Gills=Branchie di funghi primordiali
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Spawn=Spawn dei Funghi Primordiali
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Trunk=Tronco di funghi primordiali
#WARNING: AUTOTRANSLATED BY GOOGLE TRANSLATE
Primordial Mushroom Trunk Wood=Tronco di funghi primordiali in legno


code:
# textdomain: df_primordial_items

### ceiling_fungus.lua ###

Primordial Fungal Lantern=
Primordial Fungal Lantern Stalk=

### ceiling_fungus.lua ###
### fungal_nodes.lua ###

Primordial Fungal Orb=

### doc.lua ###

A strangely glowing starchy nodule from a plant that grew deeper than any plant has a right to.=

Compared to the behemoths found elsewhere in the deep places of the world, the giant mushrooms of the primordial jungles are on the smaller side - often overwhelmed by the green plants that grow in the mysterious light below. Still, they can become substantial resources.=

Eating this fruit will improve your vitality.=
Fibers extracted from gigantic fungal hyphae.=

Fungal fibers have infiltrated the ground in a spongy mass, making the soil half mineral and half living matter.=

Fungus in its purest form, these gigantic rope-like hyphae creep over the surface of soil and burrow in to feed wherever nutrients are sensed.=

Ivy is climbable, if it hangs close enough to the ground it can serve as a path between floor and ceiling.=

Like wood of the surface world, primordial jungle trees can be chopped and carved as building material or as fuel.=

Much energy is contained in this tuber. It tastes surprisingly good, too. You could cook with it but any change in its pure state would only reduce its value.=

Much like a rope, hyphae have fibers inside that can be unraveled and used for a variety of crafts.=

Much like the giant mushrooms of higher cavern layers, these can be carved into woody material for use as fuel or for building things. The grain of these primordial mushrooms is knurled.=

Questing fibers of fungal mycelium sometimes erupt from the soil and reach upward, driven by chemical cues to seek out nourishment above. They look a lot like white grass, at a glance.=

Some fronds of primordial jungle trees also become host to the phosphorescent fungus that creeps through cracks in the bark.=

Somewhere above an enormous plant has wedged its roots down through the rock and emerged from the ceiling of another cavern.=

Tangled weaves of ivy hang from the ceiling where there are wide enough gaps between the bright sources of light.=

The cracks in the bark of some primordial jungle trees become host to phosphorescent veins of symbiotic fungus.=

The dark-leaved ferns of the primordial jungle harken back to an earlier era of life in the world.=

The glowing bark fungus doesn't extend into the wood of the trunk, resulting in surprisingly mundane building material when hewn.=

The gnarled interwoven root-like foundations of this plant material is not useful as building material, but can serve as a fuel source.=

The grandest of the great mushroom species can be found in the deepest primordial caverns. Their broad caps have hanging gills.=

The large woody plants of the primordial jungle are similar in appearance to the jungle trees of the surface, but are a result of convergent evolution from ancient cycad plants toward a common form.=

The soft flesh of these large mushrooms is much less woody than other giant mushrooms, making it ill-suited to structural use. This makes it rather more nutritious, however.=

The soil of the primordial jungle is rife with strange life at every scale.=

The steady light and unchanging growing conditions of the primordial caverns have led to great mountainous masses of plant material growing in particularly fertile spots, hardly identifiable as individual organisms.=

The still air of these ancient caverns have allowed ferns to grow to prodigious sizes, where storms and rain would normally tear their weaker fronds off on the surface of the world.=

These fibrous plants that grow in the deep appear similar to grass at a glance, but they are more closely related to horsetails - a form of vegetation from before the advent of modern plant forms. Ironically, pale cave wheat is more kin to surface grass than this is.=

These hanging roots are climbable.=

This strange fruit from the depths has absorbed healthful energies.=

When a fern grows to such sizes its stem becomes dense enough to be used as a form of wood.=

When left uncultivated mycelial soil will sprout all manner of strange wild fungi.=

When left uncultivated primordial jungle soil will sprout all manner of strange wild plants.=

### edibles.lua ###

Glowtato=
Primordial Fruit=

### fungal_nodes.lua ###

Dirt with Primordial Mycelium=
Dirt with Primordial Mycelium and Footprint=
Primordial Fungal Grass=
Primordial Fungal Pod=

### giant_fern.lua ###

Fern Wood=
Giant Fern Leaves=
Giant Fern Sapling=
Giant Fern Stem=

### giant_mycelium.lua ###

Giant Hypha=
Giant Hypha Apical Meristem=
Giant Mycelial Fibers=
Mycelial thread=
Rooted Giant Hypha=

### jungle_mushroom.lua ###

Dark Jungle Mushroom Cap=
Diced Mushroom=
Pale Jungle Mushroom Cap=
Primordial Jungle Mushroom Sapling=
Primordial Jungle Mushroom Trunk=

### jungle_nodes.lua ###

Dirt With Primordial Jungle Grass=
Dirt With Primordial Jungle Grass and Footprint=
Large Primordial Jungle Mushroom=
Packed Primordial Jungle Roots=
Primordial Fern=
Primordial Flower=
Primordial Jungle Grass=
Primordial Jungle Ivy=
Primordial Jungle Mushroom=
Primordial Jungle Pod=
Primordial Jungle Root=
Primordial Jungle Roots=
Primordial Jungle Thorns=
Primordial Plant Matter=
Primordial Plant Matter with Footprint=

### jungle_tree.lua ###

Mossy Primordial Jungle Tree=
Phosphorescent Primordial Jungle Tree=
Phosphorescent Primordial Jungle Tree Leaves=
Primordial Jungle Tree=
Primordial Jungle Tree Leaves=
Primordial Jungle Tree Sapling=

### primordial_mushroom.lua ###

Glowing Primordial Mushroom Gills=
Primordial Cap Wood=
Primordial Mushroom Cap=
Primordial Mushroom Gills=
Primordial Mushroom Spawn=
Primordial Mushroom Trunk=
Primordial Mushroom Trunk Wood=


code:
name = df_primordial_items
description = A collection of flora found in the "primordial" cavern layer of DF Caverns
depends = df_dependencies, mapgen_helper, subterrane, df_underworld_items, df_trees
optional_depends = footprints, df_farming