many worldgen mods and gonna try technic now

This commit is contained in:
2026-09-13 03:30:48 -06:00
parent bac6ac94a3
commit 548749cb1a
4811 changed files with 163271 additions and 1 deletions
@@ -0,0 +1,117 @@
local S = minetest.get_translator(minetest.get_current_modname())
---------------------------------------------------------------------------------------
-- Glownode and stalk
minetest.register_node("df_primordial_items:glownode", {
description = S("Primordial Fungal Lantern"),
_doc_items_longdesc = df_primordial_items.doc.glownode_desc,
_doc_items_usagehelp = df_primordial_items.doc.glownode_usage,
drawtype = "glasslike",
tiles = {"dfcaverns_mush_glownode.png"},
paramtype = "light",
sunlight_propagates = true,
is_ground_content = false,
groups = {cracky = 3, oddly_breakable_by_hand = 3, handy=1, glass=1, building_block=1, material_glass=1},
sounds = df_dependencies.sound_glass(),
light_source = minetest.LIGHT_MAX,
_mcl_blast_resistance = 0.3,
_mcl_hardness = 0.3,
})
minetest.register_node("df_primordial_items:glownode_stalk", {
description = S("Primordial Fungal Lantern Stalk"),
_doc_items_longdesc = df_primordial_items.doc.glownode_stalk_desc,
_doc_items_usagehelp = df_primordial_items.doc.glownode_stalk_usage,
tiles = {"dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_top.png", "dfcaverns_mush_stalk_side.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, handy=1,axey=1,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:glow_orb_hanging", {
description = S("Primordial Fungal Orb"),
_doc_items_longdesc = df_primordial_items.doc.glow_orb_desc,
_doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage,
tiles = {"dfcaverns_mush_orb_vert.png"},
inventory_image = "dfcaverns_mush_orb_vert.png",
wield_image = "dfcaverns_mush_orb_vert.png",
groups = {snappy = 3, flammable = 1, attached_node = 1, plant = 1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
paramtype = "light",
paramtype2 = "degrotate",
drawtype = "plantlike",
buildable_to = true,
is_ground_content = false,
walkable = false,
light_source = 6,
sounds = df_dependencies.sound_leaves(),
use_texture_alpha = "clip",
sunlight_propagates = true,
_mcl_blast_resistance = 0.2,
_mcl_hardness = 0.2,
})
local c_stalk = minetest.get_content_id("df_primordial_items:glownode_stalk")
local c_node = minetest.get_content_id("df_primordial_items:glownode")
local c_air = minetest.get_content_id("air")
df_primordial_items.spawn_ceiling_spire_vm = function(vi, area, data)
local spire_height = math.random(1,10)
local ystride = area.ystride
local zstride = area.zstride
for i = 0, spire_height do
if data[vi-i*ystride] == c_air then
data[vi-i*ystride] = c_stalk
end
end
local bottom = vi - (spire_height +1) * ystride
if data[bottom] == c_air then
data[bottom] = c_node
end
if spire_height > 4 then -- thicken it all up
for i = 0, math.floor(spire_height/2) do
local current_vi = vi-i*ystride
if data[current_vi+1] == c_air then
data[current_vi+1] = c_stalk
end
if data[current_vi-1] == c_air then
data[current_vi-1] = c_stalk
end
if data[current_vi+zstride] == c_air then
data[current_vi+zstride] = c_stalk
end
if data[current_vi-zstride] == c_air then
data[current_vi-zstride] = c_stalk
end
end
if spire_height > 7 then
bottom = bottom-ystride
if data[bottom] == c_air then
data[bottom] = c_node
end
if data[bottom-ystride] == c_air then
data[bottom-ystride] = c_node
end
if data[bottom+1] == c_air then
data[bottom+1] = c_node
end
if data[bottom-1] == c_air then
data[bottom-1] = c_node
end
if data[bottom+zstride] == c_air then
data[bottom+zstride] = c_node
end
if data[bottom-zstride] == c_air then
data[bottom-zstride] = c_node
end
end
end
end
@@ -0,0 +1,80 @@
if not minetest.get_modpath("doc") then
return
end
local S = minetest.get_translator(minetest.get_current_modname())
df_primordial_items.doc.big_mushroom_desc = S("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.")
df_primordial_items.doc.big_mushroom_usage = S("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.")
df_primordial_items.doc.dirt_with_jungle_grass_desc = S("The soil of the primordial jungle is rife with strange life at every scale.")
df_primordial_items.doc.dirt_with_jungle_grass_usage = S("When left uncultivated primordial jungle soil will sprout all manner of strange wild plants.")
df_primordial_items.doc.dirt_with_mycelium_desc = S("Fungal fibers have infiltrated the ground in a spongy mass, making the soil half mineral and half living matter.")
df_primordial_items.doc.dirt_with_mycelium_usage = S("When left uncultivated mycelial soil will sprout all manner of strange wild fungi.")
df_primordial_items.doc.fern_desc = S("The dark-leaved ferns of the primordial jungle harken back to an earlier era of life in the world.")
--df_primordial_items.doc.fern_usage =
df_primordial_items.doc.grass_desc = S("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.")
--df_primordial_items.doc.grass_usage =
df_primordial_items.doc.ivy_desc = S("Tangled weaves of ivy hang from the ceiling where there are wide enough gaps between the bright sources of light.")
df_primordial_items.doc.ivy_usage = S("Ivy is climbable, if it hangs close enough to the ground it can serve as a path between floor and ceiling.")
df_primordial_items.doc.roots_desc = S("Somewhere above an enormous plant has wedged its roots down through the rock and emerged from the ceiling of another cavern.")
df_primordial_items.doc.roots_usage = S("These hanging roots are climbable.")
df_primordial_items.doc.fungal_grass_desc = S("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.")
--df_primordial_items.doc.fungal_grass_usage =
df_primordial_items.doc.tree_desc = S("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.")
df_primordial_items.doc.tree_usage = S("Like wood of the surface world, primordial jungle trees can be chopped and carved as building material or as fuel.")
df_primordial_items.doc.tree_glowing_desc = S("The cracks in the bark of some primordial jungle trees become host to phosphorescent veins of symbiotic fungus.")
df_primordial_items.doc.tree_glowing_usage = S("The glowing bark fungus doesn't extend into the wood of the trunk, resulting in surprisingly mundane building material when hewn.")
--df_primordial_items.doc.leaves_desc =
--df_primordial_items.doc.leaves_usage =
df_primordial_items.doc.glowing_leaves_desc = S("Some fronds of primordial jungle trees also become host to the phosphorescent fungus that creeps through cracks in the bark.")
--df_primordial_items.doc.glowing_leaves_usage =
df_primordial_items.doc.giant_fern_desc = S("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.")
df_primordial_items.doc.giant_fern_usage = S("When a fern grows to such sizes its stem becomes dense enough to be used as a form of wood.")
df_primordial_items.doc.giant_hyphae_desc = S("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.")
df_primordial_items.doc.giant_hyphae_usage = S("Much like a rope, hyphae have fibers inside that can be unraveled and used for a variety of crafts.")
df_primordial_items.doc.mycelial_fibers_desc = S("Fibers extracted from gigantic fungal hyphae.")
--df_primordial_items.doc.mycelial_fibers_usage =
df_primordial_items.doc.mycelial_thread_desc = df_primordial_items.doc.mycelial_fibers_desc
--df_primordial_items.doc.mycelial_thread_usage =
df_primordial_items.doc.giant_mushroom_desc = S("The grandest of the great mushroom species can be found in the deepest primordial caverns. Their broad caps have hanging gills.")
df_primordial_items.doc.giant_mushroom_usage = S("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.")
--df_primordial_items.doc.gills_desc =
--df_primordial_items.doc.gills_usage =
--df_primordial_items.doc.glow_orb_desc =
--df_primordial_items.doc.glow_orb_usage =
--df_primordial_items.doc.glow_plant_desc =
--df_primordial_items.doc.glow_plant_usage =
--df_primordial_items.doc.glow_pod_desc =
--df_primordial_items.doc.glow_pod_usage =
-- The giant hanging fungal structures from the ceiling
--df_primordial_items.doc.glownode_desc =
--df_primordial_items.doc.glownode_usage =
--df_primordial_items.doc.glownode_stalk_desc =
--df_primordial_items.doc.glownode_stalk_usage =
df_primordial_items.doc.packed_roots_desc = S("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.")
df_primordial_items.doc.packed_roots_usage = S("The gnarled interwoven root-like foundations of this plant material is not useful as building material, but can serve as a fuel source.")
df_primordial_items.doc.plant_matter_desc = df_primordial_items.doc.packed_roots_desc
df_primordial_items.doc.plant_matter_usage = df_primordial_items.doc.packed_roots_usage
--df_primordial_items.doc.small_mushroom_desc =
--df_primordial_items.doc.small_mushroom_usage =
--
--df_primordial_items.doc.thorn_desc =
--df_primordial_items.doc.thorn_usage =
df_primordial_items.doc.primordial_fruit_desc = S("This strange fruit from the depths has absorbed healthful energies.")
df_primordial_items.doc.primordial_fruit_usage = S("Eating this fruit will improve your vitality.")
df_primordial_items.doc.glowtato_desc = S("A strangely glowing starchy nodule from a plant that grew deeper than any plant has a right to.")
df_primordial_items.doc.glowtato_usage = S("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.")
@@ -0,0 +1,25 @@
local S = minetest.get_translator(minetest.get_current_modname())
minetest.register_craftitem("df_primordial_items:primordial_fruit", {
description = S("Primordial Fruit"),
_doc_items_longdesc = df_primordial_items.doc.primordial_fruit_desc,
_doc_items_usagehelp = df_primordial_items.doc.primordial_fruit_usage,
inventory_image = "dfcaverns_primordial_fruit.png",
groups = {food = 8, eatable=8, plant=1},
sound = {eat = {name = "df_farming_gummy_chew", gain = 1.0}},
on_use = minetest.item_eat(8),
_hunger_ng = {heals = 8},
_mcl_saturation = 12,
})
minetest.register_craftitem("df_primordial_items:glowtato", {
description = S("Glowtato"),
_doc_items_longdesc = df_primordial_items.doc.glowtato_desc,
_doc_items_usagehelp = df_primordial_items.doc.glowtato_usage,
inventory_image = "dfcaverns_glowtato.png",
sound = {eat = {name = "df_farming_chomp_crunch", gain = 1.0}},
groups = {food = 8, dfcaverns_cookable = 1, eatable=8, plant=1},
on_use = minetest.item_eat(8),
_hunger_ng = {satiates = 8},
_mcl_saturation = 8,
})
@@ -0,0 +1,174 @@
local S = minetest.get_translator(minetest.get_current_modname())
-----------------------------------------------------------------------------------------------
-- Plants
-- Grass
minetest.register_node("df_primordial_items:fungal_grass_1", {
description = S("Primordial Fungal Grass"),
_doc_items_longdesc = df_primordial_items.doc.fungal_grass_desc,
_doc_items_usagehelp = df_primordial_items.doc.fungal_grass_usage,
tiles = {"dfcaverns_mush_grass_01.png"},
inventory_image = "dfcaverns_mush_grass_01.png",
wield_image = "dfcaverns_mush_grass_01.png",
groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 11, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
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:fungal_grass_2", {
description = S("Primordial Fungal Grass"),
_doc_items_longdesc = df_primordial_items.doc.fungal_grass_desc,
_doc_items_usagehelp = df_primordial_items.doc.fungal_grass_usage,
tiles = {"dfcaverns_mush_grass_02.png"},
inventory_image = "dfcaverns_mush_grass_02.png",
wield_image = "dfcaverns_mush_grass_02.png",
groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 11, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
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,
})
-- Glowing
minetest.register_node("df_primordial_items:glow_orb", {
description = S("Primordial Fungal Orb"),
_doc_items_longdesc = df_primordial_items.doc.glow_orb_desc,
_doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage,
tiles = {"dfcaverns_mush_orb.png"},
inventory_image = "dfcaverns_mush_orb.png",
wield_image = "dfcaverns_mush_orb.png",
groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 13, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
paramtype = "light",
drawtype = "plantlike",
buildable_to = true,
is_ground_content = false,
walkable = false,
floodable = true,
light_source = 9,
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_orb_stalks", {
description = S("Primordial Fungal Orb"),
_doc_items_longdesc = df_primordial_items.doc.glow_orb_desc,
_doc_items_usagehelp = df_primordial_items.doc.glow_orb_usage,
tiles = {"dfcaverns_mush_stalks.png"},
inventory_image = "dfcaverns_mush_stalks.png",
wield_image = "dfcaverns_mush_stalks.png",
groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 13, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
paramtype = "light",
drawtype = "plantlike",
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,
})
minetest.register_node("df_primordial_items:glow_pods", {
description = S("Primordial Fungal Pod"),
_doc_items_longdesc = df_primordial_items.doc.glow_pod_desc,
_doc_items_usagehelp = df_primordial_items.doc.glow_pod_usage,
tiles = {"dfcaverns_mush_pods.png"},
inventory_image = "dfcaverns_mush_pods.png",
wield_image = "dfcaverns_mush_pods.png",
groups = {snappy = 3, attached_node = 1, flammable = 1, primordial_fungal_plant = 1, light_sensitive_fungus = 13, plant=1, handy=1, swordy=1, hoey=1, destroy_by_lava_flow=1,dig_by_piston=1},
paramtype = "light",
drawtype = "plantlike",
drop = {
max_items = 2,
items = {
{
rarity = 3,
items = {"df_primordial_items:primordial_fruit"},
},
{
rarity = 3,
items = {"df_primordial_items:primordial_fruit"},
},
},
},
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,
})
------------------------------------------------------------------------------------
-- Dirt
minetest.register_node("df_primordial_items:dirt_with_mycelium", {
description = S("Dirt with Primordial Mycelium"),
_doc_items_longdesc = df_primordial_items.doc.dirt_with_mycelium_desc,
_doc_items_usagehelp = df_primordial_items.doc.dirt_with_mycelium_usage,
tiles = {"dfcaverns_mush_soil.png"},
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,
paramtype = "light",
drop = df_dependencies.node_name_dirt,
sounds = df_dependencies.sound_dirt(),
light_source = 3,
_mcl_blast_resistance = 0.5,
_mcl_hardness = 0.6,
})
minetest.register_abm{
label = "df_primordial_items:dirt_with_mycelium_spread",
nodenames = {df_dependencies.node_name_dirt},
neighbors = {"df_primordial_items:dirt_with_mycelium"},
interval = 60,
chance = 50,
catch_up = true,
action = function(pos)
minetest.swap_node(pos, {name="df_primordial_items:dirt_with_mycelium"})
end,
}
if minetest.get_modpath("footprints") then
local HARDPACK_PROBABILITY = minetest.settings:get("footprints_hardpack_probability") or 0.9 -- Chance walked dirt/grass is worn and compacted to footprints:trail.
local HARDPACK_COUNT = 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_mycelium", {
trampled_node_def_override = {description = S("Dirt with Primordial Mycelium and Footprint"),},
footprint_opacity = 196,
hard_pack_node_name = "footprints:trail",
hard_pack_probability = HARDPACK_PROBABILITY,
hard_pack_count = HARDPACK_COUNT,
})
end
@@ -0,0 +1,351 @@
local S = minetest.get_translator(minetest.get_current_modname())
------------------------------------------------------------------------------------
-- Nodes
minetest.register_node("df_primordial_items:giant_fern_tree", {
description = S("Giant Fern Stem"),
_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
tiles = {"dfcaverns_jungle_fern_stem.png","dfcaverns_jungle_fern_stem.png","dfcaverns_jungle_fern_bark.png",},
groups = {tree=1, choppy=2, oddly_breakable_by_hand=1, flammable= 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
sounds = df_dependencies.sound_wood(),
sunlight_propagates = true,
on_place = minetest.rotate_node,
_mcl_blast_resistance = 2,
_mcl_hardness = 1,
})
minetest.register_node("df_primordial_items:giant_fern_tree_slant_bottom", {
description = S("Giant Fern Stem"),
_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
tiles = {
"dfcaverns_jungle_fern_stem.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_stem.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
},
paramtype2 = "facedir",
drawtype = "mesh",
mesh = "dfcaverns_fern_slant.obj",
paramtype = "light",
drop = "df_primordial_items:giant_fern_tree",
groups = {choppy = 2, tree = 1, oddly_breakable_by_hand=1, flammable = 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
sounds = df_dependencies.sound_wood(),
is_ground_content = false,
on_place = minetest.rotate_node,
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
{-0.5, 0.0, -0.875, 0.5, 0.5, 0.125},
},
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.625, 0.5, 0.0, 0.375},
{-0.5, 0.0, -0.875, 0.5, 0.5, 0.125},
},
},
_mcl_blast_resistance = 2,
_mcl_hardness = 1,
})
minetest.register_node("df_primordial_items:giant_fern_tree_slant_top", {
description = S("Giant Fern Stem"),
_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
tiles = {
"dfcaverns_jungle_fern_stem.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_stem.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
},
paramtype2 = "facedir",
drawtype = "mesh",
mesh = "dfcaverns_fern_slant_2.obj",
paramtype = "light",
drop = "df_primordial_items:giant_fern_tree",
groups = {choppy = 2, tree = 1, oddly_breakable_by_hand=1, flammable = 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
sounds = df_dependencies.sound_wood(),
is_ground_content = false,
on_place = minetest.rotate_node,
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.125, 0.5, 0.0, 0.875},
{-0.5, 0.0, -0.375, 0.5, 0.5, 0.625},
},
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.125, 0.5, 0.0, 0.875},
{-0.5, 0.0, -0.375, 0.5, 0.5, 0.625},
},
},
_mcl_blast_resistance = 2,
_mcl_hardness = 1,
})
minetest.register_node("df_primordial_items:giant_fern_tree_slant_full", {
description = S("Giant Fern Stem"),
_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
tiles = {
"dfcaverns_jungle_fern_stem.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
"dfcaverns_jungle_fern_bark.png",
},
paramtype2 = "facedir",
drawtype = "mesh",
mesh = "dfcaverns_fern_slant_full.obj",
paramtype = "light",
drop = "df_primordial_items:giant_fern_tree",
groups = {choppy = 2, tree = 1, oddly_breakable_by_hand=1, flammable = 2, fern_stem = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
sounds = df_dependencies.sound_wood(),
is_ground_content = false,
on_place = minetest.rotate_node,
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.75, 0.5, 0, 0.25},
{-0.5, 0, -1.25, 0.5, 0.5, -0.25},
},
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.75, 0.5, 0, 0.25},
{-0.5, 0, -1.25, 0.5, 0.5, -0.25},
},
},
_mcl_blast_resistance = 2,
_mcl_hardness = 1,
})
minetest.register_node("df_primordial_items:fern_wood", {
description = S("Fern Wood"),
_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
paramtype2 = "facedir",
tiles = {df_dependencies.texture_wood .. "^[multiply:#10FF10"},
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=10},
sounds = df_dependencies.sound_wood(),
_mcl_blast_resistance = 3,
_mcl_hardness = 1,
})
minetest.register_craft({
output = "df_primordial_items:fern_wood 4",
recipe = {
{"group:fern_stem"},
}
})
df_dependencies.register_all_stairs_and_fences("fern_wood", {burntime=7})
minetest.register_node("df_primordial_items:giant_fern_leaves", {
description = S("Giant Fern Leaves"),
_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
tiles = {"dfcaverns_jungle_fern_leaves_01.png"},
visual_scale = 1.41,
inventory_image = "dfcaverns_jungle_fern_leaves_01.png",
wield_image = "dfcaverns_jungle_fern_leaves_01.png",
groups = {snappy = 3, leafdecay = 2, flammable = 2, leaves = 1, handy=1, hoey=1, shearsy=1, swordy=1, deco_block=1, dig_by_piston=1, fire_encouragement=15, fire_flammability=30, compostability=30},
is_ground_content = false,
paramtype = "light",
drawtype = "plantlike",
buildable_to = true,
walkable = false,
waving = 2,
sounds = df_dependencies.sound_leaves(),
use_texture_alpha = "clip",
sunlight_propagates = true,
after_place_node = df_dependencies.after_place_leaves,
place_param2 = 1, -- Prevent leafdecay for placed nodes
drop = {
max_items = 1,
items = {
{
-- player will get sapling with 1/10 chance
items = {"df_primordial_items:fern_sapling"},
rarity = 10,
},
{
items = {"df_primordial_items:giant_fern_leaves"},
}
}
},
_mcl_blast_resistance = 0.2,
_mcl_hardness = 0.2,
})
df_dependencies.register_leafdecay({
trunks = {"df_primordial_items:giant_fern_tree_slant_full", "df_primordial_items:giant_fern_tree_slant_top", "df_primordial_items:giant_fern_tree_slant_bottom", "df_primordial_items:giant_fern_tree"},
leaves = {"df_primordial_items:giant_fern_leaves"},
radius = 2,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:fern_wood",
burntime = 7,
})
minetest.register_craft({
type = "fuel",
recipe = "group:fern_stem",
burntime = 28,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:giant_fern_leaves",
burntime = 2,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:fern_sapling",
burntime = 2,
})
------------------------------------------------------------------------------------
-- Schematics
local n1 = { name = "air", prob = 0 }
local n2 = { name = "df_primordial_items:giant_fern_leaves" }
local n3 = { name = "df_primordial_items:giant_fern_tree_slant_top" }
local n4 = { name = "df_primordial_items:giant_fern_tree_slant_full" }
local n5 = { name = "df_primordial_items:giant_fern_tree" }
local n6 = { name = "df_primordial_items:giant_fern_tree_slant_bottom" }
local fern_4_nodes_tall = {
size = {y = 4, x = 3, z = 4},
center_pos = {y = 0, x = 1, z = 3},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1,
n1, n2, n1, n2, n1, n1, n1, n1, n1, n1, n2, n3, n2, n1, n4, n1, n1,
n1, n1, n1, n6, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
}
}
local fern_5_nodes_tall = {
size = {y = 5, x = 3, z = 4},
center_pos = {y = 0, x = 1, z = 3},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n2, n1, n2, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n2, n3, n2, n1, n4, n1, n1, n1, n1, n1, n5, n1, n2, n6, n2,
n1, n1, n1, n1, n1, n1, n1, n1, n1,
}
}
local fern_6_nodes_tall = {
size = {y = 6, x = 5, z = 4},
center_pos = {y = 0, x = 2, z = 3},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n2, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n2, n2, n3, n2, n2, n1, n1, n4, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n2, n5, n2, n1, n2, n2,
n6, n2, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1,
}
}
local fern_9_nodes_tall = {
size = {y = 9, x = 5, z = 5},
center_pos = {y = 0, x = 2, z = 4},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n2, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n2, n2, n3, n2, n2, n1, n1, n4, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n2, n2, n3, n2, n2, n2, n2, n6, n2, n2, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1,
n5, n1, n1, n1, n2, n5, n2, n1, n1, n2, n6, n2, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1,
}
}
local ferns = {fern_4_nodes_tall, fern_5_nodes_tall, fern_6_nodes_tall, fern_9_nodes_tall}
local rotations = {0, 90, 180, 270}
df_primordial_items.get_fern_schematic = function()
return ferns[math.random(1,4)]
end
minetest.register_node("df_primordial_items:fern_sapling", {
description = S("Giant Fern Sapling"),
_doc_items_longdesc = df_primordial_items.doc.giant_fern_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_fern_usage,
tiles = {"dfcaverns_jungle_fern_03.png"},
inventory_image = "dfcaverns_jungle_fern_03.png",
wield_image = "dfcaverns_jungle_fern_03.png",
groups = {snappy = 3, attached_node = 1, flammable = 1, sapling = 1, light_sensitive_fungus = 13, attached_node=1,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,
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.giant_fern_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_giant_fern(pos)
else
minetest.get_node_timer(pos):start(df_trees.config.tree_min_growth_delay)
end
end,
})
df_primordial_items.spawn_giant_fern = function(pos)
local fern = df_primordial_items.get_fern_schematic()
local rotation = rotations[math.random(1,#rotations)]
minetest.set_node(pos, {name="air"}) -- clear sapling so fern can replace it
mapgen_helper.place_schematic(pos, fern, rotation)
end
@@ -0,0 +1,441 @@
-- 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,
})
@@ -0,0 +1,17 @@
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")
@@ -0,0 +1,183 @@
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
@@ -0,0 +1,514 @@
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
--})
@@ -0,0 +1,272 @@
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,
})
@@ -0,0 +1,24 @@
Sounds and textures are under various licenses, see the license.txt file in the /sounds and /textures directories for details.
License for Code
----------------
Copyright (C) 2019 FaceDeer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,224 @@
# 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
@@ -0,0 +1,221 @@
# 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
@@ -0,0 +1,148 @@
# 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=
@@ -0,0 +1,4 @@
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
@@ -0,0 +1,74 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
g tunnel_tube_slant_2_Bottom_tunnel_tube_slant_Cube.002_Bottom
v 0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 -0.500000 0.500000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt -0.000000 0.000000
vt 0.000000 1.000000
vn 0.0000 -1.0000 -0.0000
s 1
f 1/1/1 2/2/1 4/3/1 3/4/1
g tunnel_tube_slant_5_Front_tunnel_tube_slant_Cube.002_Front
v 0.500000 -0.500000 0.500000
v 0.500000 0.500000 0.000000
v -0.500000 0.500000 0.000000
v -0.500000 -0.500000 0.500000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vn 0.0000 0.4472 0.8944
s 1
f 5/5/2 6/6/2 7/7/2 8/8/2
g tunnel_tube_slant_1_Top_tunnel_tube_slant_Cube.002_Top
v 0.500000 0.500000 -1.000000
v -0.500000 0.500000 -1.000000
v 0.500000 0.500000 0.000000
v -0.500000 0.500000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.000000
vt 1.000000 -0.000000
vn 0.0000 1.0000 0.0000
s 1
f 9/9/3 10/10/3 12/11/3 11/12/3
g tunnel_tube_slant_3_Left_tunnel_tube_slant_Cube.002_Left
v -0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.000000
v -0.500000 0.500000 -1.000000
v -0.500000 -0.500000 -0.500000
vt -0.000000 0.000000
vt 0.500000 1.000000
vt 1.500000 1.000000
vt 1.000000 0.000000
vn -1.0000 0.0000 0.0000
s 1
f 13/13/4 14/14/4 15/15/4 16/16/4
g tunnel_tube_slant_6_Back_tunnel_tube_slant_Cube.002_Back
v 0.500000 0.500000 -1.000000
v 0.500000 -0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.500000 -1.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 1.000000
vn 0.0000 -0.4472 -0.8944
s 1
f 17/17/5 18/18/5 19/19/5 20/20/5
g tunnel_tube_slant_4_Right_tunnel_tube_slant_Cube.002_Right
v 0.500000 -0.500000 -0.500000
v 0.500000 0.500000 -1.000000
v 0.500000 0.500000 0.000000
v 0.500000 -0.500000 0.500000
vt 1.000000 0.000000
vt 1.500000 1.000000
vt 0.500000 1.000000
vt 0.000000 0.000000
vn 1.0000 0.0000 0.0000
s 1
f 21/21/6 22/22/6 23/23/6 24/24/6
@@ -0,0 +1,74 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
g tunnel_tube_slant_Cube.002_Bottom.001
v 0.500000 -0.500000 -0.000000
v 0.500000 -0.500000 1.000000
v -0.500000 -0.500000 -0.000000
v -0.500000 -0.500000 1.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt -0.000000 0.000000
vt 0.000000 1.000000
vn 0.0000 -1.0000 -0.0000
s 1
f 1/1/1 2/2/1 4/3/1 3/4/1
g tunnel_tube_slant_Cube.002_Front.001
v 0.500000 -0.500000 1.000000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 0.500000
v -0.500000 -0.500000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.000000
vn 0.0000 0.4472 0.8944
s 1
f 5/5/2 6/6/2 7/7/2 8/8/2
g tunnel_tube_slant_Cube.002_Top.001
v 0.500000 0.500000 -0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 0.500000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.000000
vt 1.000000 -0.000000
vn 0.0000 1.0000 0.0000
s 1
f 9/9/3 10/10/3 12/11/3 11/12/3
g tunnel_tube_slant_Cube.002_Left.001
v -0.500000 -0.500000 1.000000
v -0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.000000
vt -0.500000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.500000 0.000000
vn -1.0000 -0.0000 0.0000
s 1
f 13/13/4 14/14/4 15/15/4 16/16/4
g tunnel_tube_slant_Cube.002_Back.001
v 0.500000 0.500000 -0.500000
v 0.500000 -0.500000 -0.000000
v -0.500000 -0.500000 -0.000000
v -0.500000 0.500000 -0.500000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 1.000000
vn 0.0000 -0.4472 -0.8944
s 1
f 17/17/5 18/18/5 19/19/5 20/20/5
g tunnel_tube_slant_Cube.002_Right.001
v 0.500000 -0.500000 -0.000000
v 0.500000 0.500000 -0.500000
v 0.500000 0.500000 0.500000
v 0.500000 -0.500000 1.000000
vt 0.500000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt -0.500000 0.000000
vn 1.0000 -0.0000 0.0000
s 1
f 21/21/6 22/22/6 23/23/6 24/24/6
@@ -0,0 +1,74 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
g tunnel_tube_slant_Cube.002_Bottom.002
v 0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 -0.500000 0.500000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt -0.000000 0.000000
vt 0.000000 1.000000
vn 0.0000 -1.0000 -0.0000
s 1
f 1/1/1 2/2/1 4/3/1 3/4/1
g tunnel_tube_slant_Cube.002_Front.002
v 0.500000 -0.500000 0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 0.500000 -0.500000
v -0.500000 -0.500000 0.500000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vn 0.0000 0.7071 0.7071
s 1
f 5/5/2 6/6/2 7/7/2 8/8/2
g tunnel_tube_slant_Cube.002_Top.002
v 0.500000 0.500000 -1.500000
v -0.500000 0.500000 -1.500000
v 0.500000 0.500000 -0.500000
v -0.500000 0.500000 -0.500000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.000000
vt 1.000000 -0.000000
vn 0.0000 1.0000 0.0000
s 1
f 9/9/3 10/10/3 12/11/3 11/12/3
g tunnel_tube_slant_Cube.002_Left.002
v -0.500000 -0.500000 0.500000
v -0.500000 0.500000 -0.500000
v -0.500000 0.500000 -1.500000
v -0.500000 -0.500000 -0.500000
vt -0.000000 0.000000
vt 1.000000 1.000000
vt 2.000000 1.000000
vt 1.000000 0.000000
vn -1.0000 0.0000 0.0000
s 1
f 13/13/4 14/14/4 15/15/4 16/16/4
g tunnel_tube_slant_Cube.002_Back.002
v 0.500000 0.500000 -1.500000
v 0.500000 -0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.500000 -1.500000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 1.000000
vn 0.0000 -0.7071 -0.7071
s 1
f 17/17/5 18/18/5 19/19/5 20/20/5
g tunnel_tube_slant_Cube.002_Right.002
v 0.500000 -0.500000 -0.500000
v 0.500000 0.500000 -1.500000
v 0.500000 0.500000 -0.500000
v 0.500000 -0.500000 0.500000
vt 1.000000 0.000000
vt 2.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 0.000000
vn 1.0000 -0.0000 0.0000
s 1
f 21/21/6 22/22/6 23/23/6 24/24/6
@@ -0,0 +1,788 @@
local S = minetest.get_translator(minetest.get_current_modname())
minetest.register_node("df_primordial_items:mushroom_trunk", {
description = S("Primordial Mushroom Trunk"),
_doc_items_longdesc = df_primordial_items.doc.giant_mushroom_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_mushroom_usage,
tiles = {"dfcaverns_mush_shaft_top.png", "dfcaverns_mush_shaft_top.png", "dfcaverns_mush_shaft_side.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, handy=1,axey=1, 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 = 3,
_mcl_hardness = 3,
})
minetest.register_node("df_primordial_items:mushroom_cap", {
description = S("Primordial Mushroom Cap"),
_doc_items_longdesc = df_primordial_items.doc.giant_mushroom_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_mushroom_usage,
tiles = {"dfcaverns_mush_cap.png"},
paramtype2 = "facedir",
is_ground_content = false,
groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, handy=1,axey=1, 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:mushroom_gills", {
description = S("Primordial Mushroom Gills"),
_doc_items_longdesc = df_primordial_items.doc.gills_desc,
_doc_items_usagehelp = df_primordial_items.doc.gills_usage,
tiles = {"dfcaverns_mush_gills.png"},
inventory_image = "dfcaverns_mush_gills.png",
wield_image = "dfcaverns_mush_gills.png",
groups = {snappy = 3, flammable = 1, leaves = 1, leafdecay = 8,handy=1, hoey=1, shearsy=1, swordy=1, deco_block=1, dig_by_piston=1, fire_encouragement=15, fire_flammability=30, compostability=30},
paramtype = "light",
drawtype = "plantlike",
waving = 2,
walkable = false,
climbable = true,
is_ground_content = false,
sounds = df_dependencies.sound_leaves(),
use_texture_alpha = "clip",
sunlight_propagates = true,
drop = {
max_items = 1,
items = {
{
-- player will get sapling with 1/20 chance
items = {"df_primordial_items:mush_sapling"},
rarity = 20,
},
{
items = {"df_primordial_items:mushroom_gills"},
}
}
},
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:mushroom_gills_glowing", {
description = S("Glowing Primordial Mushroom Gills"),
_doc_items_longdesc = df_primordial_items.doc.gills_desc,
_doc_items_usagehelp = df_primordial_items.doc.gills_usage,
tiles = {"dfcaverns_mush_gills_glow.png"},
inventory_image = "dfcaverns_mush_gills_glow.png",
wield_image = "dfcaverns_mush_gills_glow.png",
groups = {snappy = 3, flammable = 1, leaves = 1, leafdecay = 8,handy=1, hoey=1, shearsy=1, swordy=1, deco_block=1, dig_by_piston=1, fire_encouragement=15, fire_flammability=30, compostability=30},
paramtype = "light",
drawtype = "plantlike",
waving = 2,
walkable = false,
climbable = true,
is_ground_content = false,
light_source = 6,
sounds = df_dependencies.sound_leaves(),
use_texture_alpha = "clip",
sunlight_propagates = true,
drop = {
max_items = 1,
items = {
{
-- player will get sapling with 1/20 chance
items = {"df_primordial_items:mush_sapling"},
rarity = 20,
},
{
items = {"df_primordial_items:mushroom_gills_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,
})
df_dependencies.register_leafdecay({
trunks = {"df_primordial_items:mushroom_trunk", "df_primordial_items:mushroom_cap"},
leaves = {"df_primordial_items:mushroom_gills", "df_primordial_items:mushroom_gills_glowing"},
radius = 5,
})
minetest.register_node("df_primordial_items:primordial_mush_trunk_wood", {
description = S("Primordial Mushroom Trunk Wood"),
_doc_items_longdesc = df_primordial_items.doc.giant_mushroom_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_mushroom_usage,
paramtype2 = "facedir",
tiles = {"dfcaverns_mush_shaft_side.png^(dfcaverns_mush_gills.png^[multiply:#888888)"},
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20},
sounds = df_dependencies.sound_wood(),
_mcl_blast_resistance = 4,
_mcl_hardness = 3,
})
minetest.register_craft({
output = "df_primordial_items:primordial_mush_trunk_wood 4",
recipe = {
{"df_primordial_items:mushroom_trunk"},
}
})
df_dependencies.register_all_stairs_and_fences("primordial_mush_trunk_wood", {burntime = 7})
minetest.register_node("df_primordial_items:primordial_mush_cap_wood", {
description = S("Primordial Cap Wood"),
_doc_items_longdesc = df_primordial_items.doc.giant_mushroom_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_mushroom_usage,
paramtype2 = "facedir",
tiles = {"dfcaverns_mush_cap.png^dfcaverns_mush_gills.png"},
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1, handy=1,axey=1, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20},
sounds = df_dependencies.sound_wood(),
_mcl_blast_resistance = 3,
_mcl_hardness = 2,
})
minetest.register_craft({
output = "df_primordial_items:primordial_mush_cap_wood 4",
recipe = {
{"df_primordial_items:mushroom_cap"},
}
})
df_dependencies.register_all_stairs_and_fences("primordial_mush_cap_wood", {burntime=12})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:primordial_mush_cap_wood",
burntime = 12,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:primordial_mush_trunk_wood",
burntime = 7,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:mushroom_cap",
burntime = 40,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:mushroom_trunk",
burntime = 30,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:mushroom_gills",
burntime = 2,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:mushroom_gills_glowing",
burntime = 4,
})
minetest.register_craft({
type = "fuel",
recipe = "df_primordial_items:mush_sapling",
burntime = 2,
})
------
-- Schematics:
-- Originally created by ClockGen, released under CC-BY 4.0
local replace_on_buildable_to = function(old_node_id, data, area, vi)
return mapgen_helper.buildable_to(old_node_id)
end
local n1 = {name="air", prob=0}
local n2 = {name="df_primordial_items:mushroom_gills"}
local n3 = {name="df_primordial_items:mushroom_cap", place_on_condition = replace_on_buildable_to}
local n4 = {name="df_primordial_items:mushroom_trunk", place_on_condition = replace_on_buildable_to}
local n5 = {name="df_primordial_items:mushroom_gills_glowing"}
local bc_mushroom_3 = {
size = {x=3, y=3, z=3},
center_pos = {x=1, y=0, z=1},
data = {
n1, n1, n1, n2, n2, n1, n3, n3, n3, n1, n4, n1, n2, n4, n5, n3, n3,
n3, n1, n1, n1, n1, n5, n1, n3, n3, n3,
},
}
local bc_mushroom_5 = {
size = {x=5, y=5, z=5},
center_pos = {x=2, y=0, z=2},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3,
n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n2, n1, n1, n1, n3, n2, n5, n2, n3, n1, n3, n3, n3, n1, n1,
n1, n4, n1, n1, n1, n1, n4, n1, n1, n1, n2, n4, n5, n1, n3, n2, n4,
n5, n3, n1, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n5, n2, n1, n1, n3, n5, n2, n2, n3, n1, n3, n3, n3, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3,
n1, n1, n1, n1, n1, n1,
},
}
local bc_mushroom_9 = {
size = {x=9, y=9, z=9},
center_pos = {x=4, y=0, z=4},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3,
n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n2, n3, n3, n3, n1,
n1, n1, n1, n1, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1,
n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n5,
n2, n1, n1, n1, n1, n3, n3, n2, n5, n2, n3, n3, n1, n1, n1, n1, n3,
n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1,
n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1,
n3, n3, n2, n2, n5, n2, n2, n3, n3, n1, n1, n3, n3, n3, n3, n3, n1,
n1, n1, n1, n1, n1, n4, n1, n1, n1, n1, n1, n1, n1, n1, n4, n1, n1,
n1, n1, n1, n1, n1, n1, n4, n1, n1, n1, n1, n1, n1, n1, n1, n4, n1,
n1, n5, n1, n1, n5, n1, n1, n4, n2, n1, n5, n1, n1, n5, n1, n5, n4,
n2, n1, n5, n1, n1, n5, n1, n5, n4, n2, n2, n5, n1, n3, n5, n2, n5,
n4, n2, n5, n5, n3, n1, n3, n3, n3, n3, n3, n3, n3, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
n1, n1, n2, n1, n1, n2, n1, n1, n1, n1, n1, n2, n1, n2, n2, n1, n1,
n1, n1, n1, n2, n5, n2, n2, n1, n1, n3, n3, n5, n2, n5, n2, n2, n3,
n3, n1, n1, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n5,
n1, n1, n1, n1, n1, n1, n3, n3, n5, n2, n2, n3, n3, n1, n1, n1, n1,
n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1,
n1, n1, n3, n3, n3, n5, n3, n3, n3, n1, n1, n1, n1, n1, n3, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
},
}
local bc_mushroom_21 = {
size = {y = 21, x = 19, z = 19},
center_pos = {x=9, y=0, z=9},
data = {
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n2, n3,
n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3,
n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5,
n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n5, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n5, n5, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n3, n3, n5, n5, n5, n5, n2, n3, n3, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n3, n3, n3, n3, n5, n3, n3, n3, n3, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n2, n1, n1, n2, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n5, n2, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n5, n2, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n5, n2, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n2, n1, n1, n2, n1, n5,
n2, n3, n3, n3, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n2, n5, n2,
n2, n5, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3,
n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1,
n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
n5, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n5, n1, n2, n2,
n1, n1, n5, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n5, n1,
n2, n2, n1, n1, n5, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1,
n5, n1, n2, n2, n1, n2, n5, n1, n5, n1, n1, n1, n1, n1, n1, n1, n3,
n5, n2, n5, n1, n2, n2, n1, n2, n5, n2, n5, n3, n1, n1, n1, n1, n1,
n1, n3, n3, n3, n5, n2, n2, n2, n5, n2, n5, n3, n3, n3, n1, n1, n1,
n1, n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n2, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n2, n1, n1, n1, n1, n2, n2, n2, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n5, n1, n2, n1, n1, n1, n2, n2, n2, n2, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n5, n1, n2, n1, n1, n1, n2, n2, n2, n2, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n5, n1, n2, n1, n1, n1, n2, n2, n2, n2,
n1, n1, n1, n1, n1, n1, n3, n3, n2, n5, n1, n2, n1, n1, n1, n2, n2,
n2, n2, n3, n3, n1, n1, n1, n1, n3, n3, n3, n5, n2, n2, n5, n5, n2,
n2, n2, n2, n3, n3, n3, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n4,
n4, n4, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n2, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
n2, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n2, n1,
n2, n1, n2, n1, n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n1, n1, n2,
n2, n1, n2, n5, n2, n1, n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n1,
n1, n2, n2, n2, n2, n5, n2, n1, n1, n1, n1, n1, n1, n2, n1, n1, n2,
n1, n1, n1, n2, n2, n2, n2, n5, n2, n1, n1, n1, n1, n3, n3, n2, n1,
n1, n2, n1, n1, n5, n2, n2, n2, n2, n5, n2, n3, n3, n1, n1, n3, n3,
n3, n2, n2, n2, n2, n5, n4, n2, n2, n2, n2, n5, n3, n3, n3, n1, n1,
n1, n1, n3, n3, n3, n3, n4, n4, n4, n4, n4, n3, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2,
n1, n1, n1, n1, n5, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n2, n1, n1, n1, n1, n5, n5, n1, n1, n1, n1, n2, n5, n1, n1, n1,
n1, n1, n1, n2, n1, n1, n1, n1, n5, n5, n1, n1, n1, n1, n2, n5, n1,
n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n5, n5, n1, n2, n1, n1, n2,
n5, n1, n1, n1, n3, n2, n1, n2, n1, n1, n1, n2, n4, n5, n1, n2, n1,
n1, n2, n5, n3, n1, n1, n3, n3, n2, n2, n5, n5, n2, n4, n4, n4, n2,
n2, n2, n2, n2, n3, n3, n1, n1, n1, n3, n3, n3, n3, n4, n4, n4, n4,
n4, n4, n4, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3,
n3, n3, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4,
n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n2, n2, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n4, n4, n4, n2, n2, n2,
n1, n1, n2, n1, n1, n1, n1, n5, n5, n1, n1, n1, n1, n4, n4, n4, n2,
n2, n2, n1, n1, n2, n1, n1, n1, n1, n5, n5, n1, n1, n5, n2, n4, n4,
n4, n2, n2, n2, n1, n1, n2, n1, n1, n1, n1, n5, n5, n1, n1, n5, n2,
n4, n4, n4, n2, n2, n2, n1, n5, n2, n1, n1, n3, n3, n5, n5, n1, n1,
n5, n2, n4, n4, n4, n2, n2, n2, n1, n5, n2, n3, n3, n3, n3, n3, n5,
n5, n2, n5, n4, n4, n4, n4, n4, n2, n2, n2, n5, n3, n3, n3, n1, n1,
n3, n3, n3, n4, n4, n4, n4, n4, n4, n4, n4, n4, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4,
n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n4, n4,
n4, n1, n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n1, n1, n1, n1, n5,
n4, n4, n4, n1, n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n1, n1, n5,
n1, n5, n4, n4, n4, n2, n1, n1, n1, n1, n1, n2, n1, n1, n2, n1, n1,
n1, n5, n1, n5, n4, n4, n4, n2, n1, n1, n1, n2, n1, n2, n1, n1, n2,
n1, n1, n1, n5, n1, n5, n4, n4, n4, n2, n1, n1, n1, n2, n1, n2, n1,
n1, n2, n1, n1, n1, n5, n1, n5, n4, n4, n4, n2, n1, n1, n1, n2, n1,
n2, n1, n3, n2, n1, n1, n1, n5, n2, n4, n4, n4, n4, n4, n5, n1, n1,
n2, n1, n2, n3, n3, n3, n2, n2, n5, n5, n4, n4, n4, n4, n4, n4, n4,
n2, n2, n2, n2, n3, n3, n1, n1, n3, n3, n3, n4, n4, n4, n4, n4, n4,
n4, n4, n4, n3, n3, n3, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3,
n3, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3,
n3, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n4, n4,
n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n4, n4, n4, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n4, n4, n4, n5, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n4, n4, n4, n5, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n4, n4, n4, n5, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n2, n4, n4, n4, n5, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n2, n4, n4, n4,
n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n2, n4,
n4, n4, n5, n1, n1, n1, n1, n1, n1, n1, n3, n3, n2, n2, n1, n1, n1,
n2, n4, n4, n4, n5, n1, n1, n1, n1, n2, n3, n3, n3, n3, n3, n2, n2,
n5, n5, n4, n4, n4, n4, n4, n2, n5, n5, n2, n3, n3, n3, n1, n1, n3,
n3, n3, n4, n4, n4, n4, n4, n4, n4, n4, n4, n3, n3, n3, n1, n1, n1,
n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n2, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n2, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n5, n2, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n5, n2, n1, n1, n1, n1, n1, n1, n5, n1,
n1, n1, n3, n5, n1, n1, n1, n1, n1, n5, n4, n2, n1, n1, n1, n1, n1,
n5, n3, n1, n1, n3, n3, n5, n5, n2, n5, n2, n4, n4, n4, n2, n2, n2,
n2, n5, n3, n3, n1, n1, n1, n3, n3, n3, n3, n4, n4, n4, n4, n4, n4,
n4, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n3,
n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3,
n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n5,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1,
n5, n5, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n5, n1, n1, n1, n1,
n1, n2, n5, n5, n1, n1, n1, n5, n3, n3, n1, n1, n3, n3, n3, n5, n2,
n5, n2, n2, n4, n5, n5, n2, n2, n5, n3, n3, n3, n1, n1, n1, n1, n3,
n3, n3, n3, n4, n4, n4, n4, n4, n3, n3, n3, n3, n1, n1, n1, n1, n1,
n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1,
n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1,
n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n2, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n2, n5, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n2, n5, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n2, n5, n1, n2, n2, n1, n1, n1, n1, n1, n1,
n1, n1, n3, n3, n2, n1, n1, n1, n2, n5, n2, n2, n2, n1, n2, n3, n3,
n1, n1, n1, n1, n3, n3, n3, n5, n2, n5, n2, n5, n2, n2, n2, n5, n3,
n3, n3, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n4, n4, n4, n3, n3,
n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n3,
n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5,
n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n5, n1, n1, n1, n2, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n5, n1, n5, n1, n2, n1, n2, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n5, n1, n5, n1, n2, n1, n2, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n5, n1, n5, n1, n2, n1, n2, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n5, n1, n2, n1, n2, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n5, n1, n2, n2,
n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n2, n5, n1, n5, n1,
n2, n2, n2, n1, n5, n5, n3, n1, n1, n1, n1, n1, n1, n3, n3, n3, n2,
n5, n2, n2, n2, n2, n5, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n3,
n3, n3, n3, n3, n3, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2,
n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n2, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n2, n5, n2, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n3, n3, n3, n2, n5, n2, n2, n1, n1, n2, n3, n3, n3, n1, n1,
n1, n1, n1, n1, n3, n3, n3, n3, n5, n2, n2, n5, n5, n3, n3, n3, n3,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n5, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1,
n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1,
n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n5, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n5, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n5, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n5, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n5, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n5, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n5, n1, n1, n1, n5,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n5, n5, n1,
n2, n5, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3,
n3, n2, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n3, n3, n3, n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n2,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n2, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n3, n3, n3, n2, n3, n3, n3, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n3, n3, n3, n3, n3, n3, n3, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3, n3, n3,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n3,
n3, n3, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1, n1,
}
}
df_primordial_items.get_primordial_mushroom = function()
local rand = math.random()
if rand < 0.3 then
return bc_mushroom_3
elseif rand < 0.7 then
return bc_mushroom_5
elseif rand < 0.975 then
return bc_mushroom_9
end
return bc_mushroom_21
end
minetest.register_node("df_primordial_items:mush_sapling", {
description = S("Primordial Mushroom Spawn"),
_doc_items_longdesc = df_primordial_items.doc.giant_mushroom_desc,
_doc_items_usagehelp = df_primordial_items.doc.giant_mushroom_usage,
tiles = {"dfcaverns_mush_sapling.png"},
inventory_image = "dfcaverns_mush_sapling.png",
wield_image = "dfcaverns_mush_sapling.png",
groups = {snappy = 3, attached_node = 1, flammable = 1, sapling = 1, light_sensitive_fungus = 11, 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,
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.primordial_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, elapsed)
if df_farming and df_farming.kill_if_sunlit(pos) then
return
end
df_primordial_items.spawn_primordial_mushroom(pos)
end,
})
df_primordial_items.spawn_primordial_mushroom = function(pos)
local mushroom = df_primordial_items.get_primordial_mushroom()
local rotation = (math.random(1,4)-1)*90
minetest.set_node(pos, {name="air"}) -- clear sapling so mushroom can replace it
mapgen_helper.place_schematic(pos, mushroom, rotation)
end
@@ -0,0 +1,22 @@
-- these methods should indicate whether a sapling placed at pos should bother attempting to grow.
-- check soil conditions and biome here, for example.
df_primordial_items.giant_fern_growth_permitted = function(pos)
return minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "soil") > 0
end
df_primordial_items.giant_mycelium_growth_permitted = function(pos)
return true
end
df_primordial_items.jungle_mushroom_growth_permitted = function(pos)
return minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "soil") > 0
end
df_primordial_items.jungletree_growth_permitted = function(pos)
return minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "soil") > 0
end
df_primordial_items.primordial_mushroom_growth_permitted = function(pos)
return minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name, "soil") > 0
end
@@ -0,0 +1,5 @@
dfcaverns_mycelium_min_growth_delay (Minimum mycelium growth delay) int 240
dfcaverns_mycelium_max_growth_delay (Maximum mycelium growth delay) int 400
dfcaverns_jungle_min_growth_delay (Minimum growth delay for large jungle plants) int 300
dfcaverns_jungle_max_growth_delay (Maximum growth delay for large jungle plants) int 1500
Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

@@ -0,0 +1,10 @@
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