diff --git a/License.txt b/License.txt new file mode 100644 index 0000000..01a530a --- /dev/null +++ b/License.txt @@ -0,0 +1,2 @@ +License for the code: LGPL +License for all the models, textures and sound: CC BY-SA 4.0 \ No newline at end of file diff --git a/init.lua b/init.lua index 21f8a6b..e74925d 100644 --- a/init.lua +++ b/init.lua @@ -36,6 +36,9 @@ minetest.register_node("nsspf:boletus_edulis", { paramtype2 = 'facedir', tiles = {"boletus_edulis.png"}, groups = {snappy=3}, + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, on_use = minetest.item_eat(2), selection_box = { type = 'fixed', @@ -68,6 +71,9 @@ minetest.register_node("nsspf:cooked_boletus_edulis", { minetest.register_node("nsspf:boletus_edulis_fungusdirt", { description = "Boletus edulis Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -87,6 +93,9 @@ minetest.register_node("nsspf:cantharellus_cibarius", { mesh = "cantharellus_cibarius.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"cantharellus_cibarius.png"}, groups = {snappy=3}, on_use = minetest.item_eat(1), @@ -121,6 +130,9 @@ minetest.register_node("nsspf:cooked_cantharellus_cibarius", { minetest.register_node("nsspf:cantharellus_cibarius_fungusdirt", { description = "Cantharellus cibarius Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -140,6 +152,9 @@ minetest.register_node("nsspf:suillus_grevillei", { mesh = "suillus_grevillei.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"suillus_grevillei.png"}, groups = {snappy=3}, on_use = minetest.item_eat(1), @@ -174,6 +189,9 @@ minetest.register_node("nsspf:cooked_suillus_grevillei", { minetest.register_node("nsspf:suillus_grevillei_fungusdirt", { description = "Suillus grevillei Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -192,6 +210,9 @@ minetest.register_node("nsspf:morchella_conica", { drawtype = "mesh", mesh = "morchella_conica.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"morchella_conica.png"}, groups = {snappy=3}, @@ -227,6 +248,9 @@ minetest.register_node("nsspf:cooked_morchella_conica", { minetest.register_node("nsspf:morchella_conica_fungusdirt", { description = "Morchella conica Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -246,6 +270,9 @@ minetest.register_node("nsspf:russula_xerampelina", { mesh = "russula.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"russula_xerampelina.png"}, groups = {snappy=3}, on_use = minetest.item_eat(-8), @@ -281,6 +308,9 @@ minetest.register_node("nsspf:cooked_russula_xerampelina", { minetest.register_node("nsspf:russula_xerampelina_fungusdirt", { description = "Russula xerampelina Dirt", tiles = {"default_dirt.png"}, + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, drop = { max_items = 1, items = { @@ -299,6 +329,9 @@ minetest.register_node("nsspf:boletus_pinophilus", { mesh = "boletus.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"boletus_pinophilus.png"}, groups = {snappy=3}, on_use = minetest.item_eat(2), @@ -318,6 +351,9 @@ minetest.register_node("nsspf:cooked_boletus_pinophilus", { mesh = "boletus.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"cooked_boletus_pinophilus.png"}, groups = {snappy=3}, on_use = minetest.item_eat(16), @@ -333,6 +369,9 @@ minetest.register_node("nsspf:cooked_boletus_pinophilus", { minetest.register_node("nsspf:boletus_pinophilus_fungusdirt", { description = "Boletus pinophilus Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -353,6 +392,9 @@ minetest.register_node("nsspf:boletus_satanas", { paramtype = 'light', paramtype2 = 'facedir', tiles = {"boletus_satanas.png"}, + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, groups = {snappy=3}, on_use = minetest.item_eat(-20), selection_box = { @@ -386,6 +428,9 @@ minetest.register_node("nsspf:cooked_boletus_satanas", { minetest.register_node("nsspf:boletus_satanas_fungusdirt", { description = "Boletus satanas Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -405,6 +450,9 @@ minetest.register_node("nsspf:amanita_phalloides", { mesh = "amanita.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"amanita_phalloides.png"}, groups = {snappy=3}, on_use = minetest.item_eat(-20), @@ -439,6 +487,9 @@ minetest.register_node("nsspf:cooked_amanita_phalloides", { minetest.register_node("nsspf:amanita_muscaria_fungusdirt", { description = "Amanita muscaria Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -459,6 +510,9 @@ minetest.register_node("nsspf:amanita_muscaria", { paramtype = 'light', paramtype2 = 'facedir', tiles = {"amanita_muscaria.png"}, + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, groups = {snappy=3}, on_use = minetest.item_eat(-20), selection_box = { @@ -492,6 +546,9 @@ minetest.register_node("nsspf:cooked_amanita_muscaria", { minetest.register_node("nsspf:amanita_phalloides_fungusdirt", { description = "Amanita phalloides Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -505,7 +562,7 @@ minetest.register_node("nsspf:amanita_phalloides_fungusdirt", { groups = {crumbly = 3}, }) -function nsspf_register_mycorrhizalmycelium (name, descr, tree, int, ch) +function nsspf_register_mycorrhizalmycelium (name, descr, tree, int, ch, spread) minetest.register_node("nsspf:"..name.."_mycelium", { description = descr, @@ -525,12 +582,12 @@ function nsspf_register_mycorrhizalmycelium (name, descr, tree, int, ch) nodenames = {"default:dirt"}, neighbors = {tree}, interval = 30*int, - chance = 6*ch, + chance = 80*ch, action = function(pos, node) local flag = 0 for dx = -2,2 do - for dy = -2,2 do - for dz = -2,1 do + for dy = -2,1 do + for dz = -2,2 do local pos1 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} local n = minetest.get_node(pos1).name if n and string.match(n,"mycelium") then -- if the name contains "mycelium" then exit @@ -547,11 +604,12 @@ function nsspf_register_mycorrhizalmycelium (name, descr, tree, int, ch) minetest.register_abm({ nodenames = {"nsspf:"..name.."_mycelium"}, - neighbors = {"air"}, + neighbors = {"air","default:water_source"}, interval = 1, chance = 1, action = function(pos, node) minetest.set_node(pos, {name="nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos):start(300) end }) @@ -569,7 +627,7 @@ function nsspf_register_mycorrhizalmycelium (name, descr, tree, int, ch) nodenames = {"default:dirt"}, neighbors = {"nsspf:"..name.."_mycelium"}, interval = 12*int, - chance = 4*ch, + chance = 10*ch, action = function(pos, node) minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "nsspf:"..name.."_mycelium"}) end @@ -578,8 +636,8 @@ function nsspf_register_mycorrhizalmycelium (name, descr, tree, int, ch) minetest.register_abm({ nodenames = {"nsspf:"..name.."_mycelium"}, neighbors = {"default:dirt_with_grass"}, - interval = 4*int, - chance = 8*ch, + interval = 5*int, + chance = 1*ch, action = function(pos, node) local pos1 = {x=pos.x, y=pos.y+2, z=pos.z} local pos2 = {x=pos.x, y=pos.y+1, z=pos.z} @@ -587,27 +645,62 @@ function nsspf_register_mycorrhizalmycelium (name, descr, tree, int, ch) local nn = minetest.get_node(pos2).name if n== "air" and nn== "default:dirt_with_grass" then minetest.set_node(pos1, {name = "nsspf:"..name}) + minetest.get_node_timer(pos1):start(300) end end }) + minetest.register_abm({ + nodenames = {"nsspf:"..name.."_mycelium"}, + neighbors = {"nsspf:"..name.."_mycelium"}, + interval = 10, + chance = 1, + action = function(pos, node) + local flag = 0 + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos1 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.get_node(pos1).name + if n and string.match(n,"mycelium") then -- if the name contains "mycelium" then exit + flag = flag+1 + end + end + end + end + if flag > spread then + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos2 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local k = minetest.get_node(pos2).name + if k and string.match(k,"mycelium") then + minetest.set_node({x = pos2.x, y = pos2.y, z = pos2.z}, {name = "nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos2):start(300) + end + end + end + end + end + end + }) end -nsspf_register_mycorrhizalmycelium ('amanita_muscaria','Amanita muscaria Mycelium', "default:pine_tree", 10, 10) -nsspf_register_mycorrhizalmycelium ('amanita_phalloides','Amanita phalloides Mycelium', "default:pine_tree", 16, 12) -nsspf_register_mycorrhizalmycelium ('boletus_edulis','Boletus edulis Mycelium', "default:tree", 16, 12) -nsspf_register_mycorrhizalmycelium ('boletus_satanas','Boletus satanas Mycelium', "default:tree", 18, 14) -nsspf_register_mycorrhizalmycelium ('boletus_pinophilus','Boletus pinophilus Mycelium', "default:pine_tree", 14, 14) -nsspf_register_mycorrhizalmycelium ('suillus_grevillei','Suillus grevillei Mycelium','default:pine_tree', 6, 6) -nsspf_register_mycorrhizalmycelium ('russula_xerampelina','Russula xerampelina Mycelium', "default:pine_tree", 8, 8) -nsspf_register_mycorrhizalmycelium ('cantharellus_cibarius','Cantherellus cibarius Mycelium', "default:pine_tree", 9, 9) -nsspf_register_mycorrhizalmycelium ('morchella_conica','Morchella conica Mycelium', "default:aspen_tree", 10, 10) +nsspf_register_mycorrhizalmycelium ('amanita_muscaria','Amanita muscaria Mycelium', "default:pine_tree", 10, 10, 8) +nsspf_register_mycorrhizalmycelium ('amanita_phalloides','Amanita phalloides Mycelium', "default:pine_tree", 16, 12, 8) +nsspf_register_mycorrhizalmycelium ('boletus_edulis','Boletus edulis Mycelium', "default:tree", 10, 10, 8) +nsspf_register_mycorrhizalmycelium ('boletus_satanas','Boletus satanas Mycelium', "default:tree", 12, 12, 8) +nsspf_register_mycorrhizalmycelium ('boletus_pinophilus','Boletus pinophilus Mycelium', "default:pine_tree", 12, 12, 8) +nsspf_register_mycorrhizalmycelium ('suillus_grevillei','Suillus grevillei Mycelium','default:pine_tree', 8, 8, 12) +nsspf_register_mycorrhizalmycelium ('russula_xerampelina','Russula xerampelina Mycelium', "default:pine_tree", 9, 9, 12) +nsspf_register_mycorrhizalmycelium ('cantharellus_cibarius','Cantherellus cibarius Mycelium', "default:pine_tree", 8, 8, 14) +nsspf_register_mycorrhizalmycelium ('morchella_conica','Morchella conica Mycelium', "default:aspen_tree", 10, 10, 8) --tuber -function nsspf_register_tuber (name, descr, tree, int, ch, gnam) +function nsspf_register_tuber (name, descr, tree, int, ch, gnam, spread) minetest.register_node("nsspf:"..name.."_tuber_mycelium", { description = descr, @@ -623,11 +716,11 @@ function nsspf_register_tuber (name, descr, tree, int, ch, gnam) action = function(pos, node) local flag = 0 for dx = -2,2 do - for dy = -2,2 do - for dz = -2,1 do + for dy = -2,1 do + for dz = -2,2 do local pos1 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} local n = minetest.get_node(pos1).name - if n == "nsspf:tuber_magnatum_pico" or n == "nsspf:tuber_melanosporum" or n == "nsspf:tuber_borchii" or n == "nsspf:terfezia_arenaria" then + if n == "nsspf:tuber_magnatum_pico_tuber_mycelium" or n == "nsspf:tuber_melanosporum_tuber_mycelium" or n == "nsspf:tuber_borchii_tuber_mycelium" or n == "nsspf:terfezia_arenaria_tuber_mycelium" then return end end @@ -639,12 +732,13 @@ function nsspf_register_tuber (name, descr, tree, int, ch, gnam) minetest.register_abm({ nodenames = {"nsspf:"..name.."_tuber_mycelium"}, - neighbors = {"air"}, + neighbors = {"air","default:water_source"}, interval = 1, chance = 1, action = function(pos, node) minetest.set_node(pos, {name="nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos):start(300) end }) @@ -688,17 +782,56 @@ function nsspf_register_tuber (name, descr, tree, int, ch, gnam) minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "nsspf:"..name.."_fruit"}) end }) + + minetest.register_abm({ + nodenames = {"nsspf:"..name.."_mycelium"}, + neighbors = {"nsspf:"..name.."_mycelium"}, + interval = 10, + chance = 1, + action = function(pos, node) + local flag = 0 + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos1 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.get_node(pos1).name + if n and string.match(n,"mycelium") then -- if the name contains "mycelium" then exit + flag = flag+1 + end + end + end + end + if flag > spread then + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos2 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local k = minetest.get_node(pos2).name + if k and string.match(k,"mycelium") then + minetest.set_node({x = pos2.x, y = pos2.y, z = pos2.z}, {name = "nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos2):start(300) + end + end + end + end + end + end + }) + end -nsspf_register_tuber ("tuber_magnatum_pico","Tuber magnatum pico","default:tree", 30, 30, 20) -nsspf_register_tuber ("tuber_melanosporum","Tuber melanosporum","default:pine_tree", 18, 18, 16) -nsspf_register_tuber ("tuber_borchii","Tuber borchii","default:aspen_tree", 12, 12, 12) -nsspf_register_tuber ("terfezia_arenaria","Terfezia arenaria","default:acacia_tree", 10, 10, 12) +nsspf_register_tuber ("tuber_magnatum_pico","Tuber magnatum pico","default:tree", 30, 30, 20, 20) +nsspf_register_tuber ("tuber_melanosporum","Tuber melanosporum","default:pine_tree", 18, 18, 16, 16) +nsspf_register_tuber ("tuber_borchii","Tuber borchii","default:aspen_tree", 12, 12, 12, 14) +nsspf_register_tuber ("terfezia_arenaria","Terfezia arenaria","default:acacia_tree", 10, 10, 12, 20) minetest.register_node("nsspf:tuber_melanosporum_fungusdirt", { description = "Tuber melanosporum Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -714,6 +847,9 @@ minetest.register_node("nsspf:tuber_melanosporum_fungusdirt", { minetest.register_node("nsspf:tuber_magnatum_pico_fungusdirt", { description = "Tuber magnatum pico Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -729,6 +865,9 @@ minetest.register_node("nsspf:tuber_magnatum_pico_fungusdirt", { minetest.register_node("nsspf:tuber_borchii_fungusdirt", { description = "Tuber borchii Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -744,6 +883,9 @@ minetest.register_node("nsspf:tuber_borchii_fungusdirt", { minetest.register_node("nsspf:terfezia_arenaria_fungusdirt", { description = "Terfezia arenaria Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -765,6 +907,9 @@ minetest.register_node("nsspf:fistulina_hepatica", { mesh = "fistulina_hepatica.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"fistulina_hepatica.png"}, groups = {snappy=3}, on_use = minetest.item_eat(4), @@ -802,6 +947,9 @@ minetest.register_node("nsspf:armillaria_mellea", { drawtype = "mesh", mesh = "armillaria_mellea.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"armillaria_mellea.png"}, groups = {snappy=3}, @@ -816,6 +964,28 @@ minetest.register_node("nsspf:armillaria_mellea", { }, }) +minetest.register_node("nsspf:fomes_fomentarius", { + description = "Fomes fomentarius", + drawtype = "mesh", + mesh = "fomes_fomentarius.b3d", + paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, + paramtype2 = 'facedir', + tiles = {"fomes_fomentarius.png"}, + groups = {snappy=3}, + on_use = minetest.item_eat(-1), + selection_box = { + type = 'fixed', + fixed = {-0.2, 0, 0.2, 0.2, 0.4, 0.5}, -- Right, Bottom, Back, Left, Top, Front + }, + collision_box = { + type = 'fixed', + fixed = {-0.2, 0, 0.2, 0.2, 0.4, 0.5}, -- Right, Bottom, Back, Left, Top, Front + }, +}) + minetest.register_node("nsspf:cooked_armillaria_mellea", { description = "Cooked Armillaria mellea", drawtype = "mesh", @@ -840,6 +1010,9 @@ minetest.register_node("nsspf:mycena_chlorophos", { drawtype = "mesh", mesh = "mycena_chlorophos.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"mycena_chlorophos.png"}, groups = {snappy=3}, @@ -879,6 +1052,9 @@ minetest.register_node("nsspf:mycena_chlorophos_light", { mesh = "mycena_chlorophos.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"mycena_chlorophos_light.png"}, groups = {snappy=3}, light_source = 8, @@ -898,6 +1074,9 @@ minetest.register_node("nsspf:panellus_pusillus", { drawtype = "mesh", mesh = "panellus_pusillus.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"panellus_pusillus.png"}, groups = {snappy=3}, @@ -936,6 +1115,9 @@ minetest.register_node("nsspf:panellus_pusillus_light", { drawtype = "mesh", mesh = "panellus_pusillus.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"panellus_pusillus_light.png"}, groups = {snappy=3}, @@ -958,22 +1140,25 @@ function nssbf_register_saprotrophicontrees (name, descr, tree, int, ch) minetest.register_abm({ nodenames = {tree}, neighbors = {"air"}, - interval = 30*int, - chance = 20*ch, + interval = 20*int, + chance = 40*ch, action = function(pos, node) local pos1 = {x=pos.x, y=pos.y, z=pos.z-1} - local n = minetest.env:get_node(pos1).name + local n = minetest.get_node(pos1).name if n == 'air' then minetest.set_node({x = pos.x, y = pos.y, z = pos.z-1}, {name = "nsspf:"..name}) + minetest.get_node_timer(pos):start(300) end end }) + end -nssbf_register_saprotrophicontrees ('armillaria_mellea', 'Armillaria mellea', 'default:tree', 12, 20) +nssbf_register_saprotrophicontrees ('armillaria_mellea', 'Armillaria mellea', 'default:tree', 16, 24) nssbf_register_saprotrophicontrees ('panellus_pusillus', 'Panellus pusillus', 'default:tree', 25, 52) -nssbf_register_saprotrophicontrees ('fistulina_hepatica', 'Fistulina hepatica', 'default:pine_tree', 10, 20) +nssbf_register_saprotrophicontrees ('fomes_fomentarius', 'Fomes fomentarius', 'default:aspen_tree', 13, 18) +nssbf_register_saprotrophicontrees ('fistulina_hepatica', 'Fistulina hepatica', 'default:pine_tree', 16, 24) nssbf_register_saprotrophicontrees ('mycena_chlorophos', 'Mycena clorophos', 'default:dirt', 30, 50) nssbf_register_saprotrophicontrees ('clitocybula_azurea', 'Clitocybula azurea', 'default:jungletree', 12, 30) nssbf_register_saprotrophicontrees ('ganoderma_lucidum', 'Ganoderma lucidum', 'default:jungletree', 14, 30) @@ -985,9 +1170,9 @@ local OPEN_CHECK = 10 set_fluo = function (pos) if (minetest.get_node_light(pos, nil) < 10) and ((minetest.get_timeofday() < 19500) or (minetest.get_timeofday() > 5000)) then - minetest.env:add_node(pos, { name = "nsspf:mycena_chlorophos_light" }) + minetest.add_node(pos, { name = "nsspf:mycena_chlorophos_light" }) else - minetest.env:add_node(pos, { name = "nsspf:mycena_chlorophos" }) + minetest.add_node(pos, { name = "nsspf:mycena_chlorophos" }) end end @@ -1029,6 +1214,9 @@ minetest.register_node("nsspf:macrolepiota_procera", { paramtype = 'light', paramtype2 = 'facedir', tiles = {"macrolepiota_procera.png"}, + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, groups = {snappy=3}, on_use = minetest.item_eat(3), selection_box = { @@ -1062,6 +1250,9 @@ minetest.register_node("nsspf:cooked_macrolepiota_procera", { minetest.register_node("nsspf:macrolepiota_procera_fungusdirt", { description = "Macrolepiota procera Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1082,6 +1273,9 @@ minetest.register_node("nsspf:psilocybe_cubensis", { paramtype = 'light', paramtype2 = 'facedir', tiles = {"psilocybe_cubensis.png"}, + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, groups = {snappy=3}, on_use = minetest.item_eat(-7), selection_box = { @@ -1115,6 +1309,9 @@ minetest.register_node("nsspf:cooked_psilocybe_cubensis", { minetest.register_node("nsspf:psilocybe_cubensis_fungusdirt", { description = "Psilocybe cubensis Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1132,6 +1329,9 @@ minetest.register_node("nsspf:lycoperdon_pyriforme", { description = "Lycoperdon pyriforme", drawtype = "mesh", mesh = "lycoperdon_pyriforme.b3d", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype = 'light', paramtype2 = 'facedir', tiles = {"lycoperdon_pyriforme.png"}, @@ -1168,6 +1368,9 @@ minetest.register_node("nsspf:cooked_lycoperdon_pyriforme", { minetest.register_node("nsspf:lycoperdon_pyriforme_fungusdirt", { description = "Lycoperdon pyriforme Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1187,6 +1390,9 @@ minetest.register_node("nsspf:gyromitra_esculenta", { mesh = "gyromitra_esculenta.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"gyromitra_esculenta.png"}, groups = {snappy=3}, on_use = minetest.item_eat(-20), @@ -1221,6 +1427,9 @@ minetest.register_node("nsspf:cooked_gyromitra_esculenta", { minetest.register_node("nsspf:gyromitra_esculenta_fungusdirt", { description = "Gyromitra esculenta Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1239,6 +1448,9 @@ minetest.register_node("nsspf:coprinus_atramentarius", { drawtype = "mesh", mesh = "coprinus_atramentarius.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"coprinus_atramentarius.png"}, groups = {snappy=3}, @@ -1274,6 +1486,9 @@ minetest.register_node("nsspf:cooked_coprinus_atramentarius", { minetest.register_node("nsspf:coprinus_atramentarius_fungusdirt", { description = "Coprinus atramentarius Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1288,7 +1503,7 @@ minetest.register_node("nsspf:coprinus_atramentarius_fungusdirt", { }) -function nsspf_register_saprotrophicground (name, descr, int, ch) +function nsspf_register_saprotrophicground (name, descr, int, ch, spread) minetest.register_node("nsspf:"..name.."_mycelium", { description = descr, @@ -1307,8 +1522,8 @@ function nsspf_register_saprotrophicground (name, descr, int, ch) minetest.register_abm({ nodenames = {"nsspf:"..name.."_mycelium"}, neighbors = {"default:dirt_with_grass"}, - interval = 4*int, - chance = 2*ch, + interval = 3*int, + chance = 1*ch, action = function(pos, node) local pos1 = {x=pos.x, y=pos.y+2, z=pos.z} local pos2 = {x=pos.x, y=pos.y+1, z=pos.z} @@ -1316,11 +1531,12 @@ function nsspf_register_saprotrophicground (name, descr, int, ch) local nn = minetest.get_node(pos2).name if n== "air" and nn== "default:dirt_with_grass" then minetest.set_node(pos1, {name = "nsspf:"..name}) + minetest.get_node_timer(pos1):start(300) end end }) - minetest.register_abm({ +--[[ minetest.register_abm({ nodenames = {"nsspf:"..name.."_mycelium"}, neighbors = {"default:dirt_with_snow"}, interval = 1, @@ -1328,46 +1544,86 @@ function nsspf_register_saprotrophicground (name, descr, int, ch) action = function(pos, node) minetest.set_node(pos, {name="default:dirt"}) end - }) + })]] minetest.register_abm({ nodenames = {"default:dirt"}, neighbors = {"nsspf:"..name.."_mycelium"}, - interval = 10*int, - chance = 4*ch, + interval = 6*int, + chance = 7+ch, action = function(pos, node) minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "nsspf:"..name.."_mycelium"}) end }) - minetest.register_abm({ - nodenames = {"default:dirt"}, - neighbors = {"default:dirt"}, - interval = 30*int, - chance = 1000*ch, + minetest.register_abm({ + nodenames = {"default:dirt_with_grass"}, + neighbors = {"air"}, + interval = 18*int, + chance = 5000*ch, action = function(pos, node) - --controllo altitudine - minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "nsspf:"..name.."_mycelium"}) + local pos3 = {x=pos.x, y=pos.y-1, z=pos.z} + local n = minetest.get_node(pos3).name + if n== "default:dirt" then + minetest.set_node(pos3, {name = "nsspf:"..name.."_mycelium"}) + end end }) - +--[[ minetest.register_abm({ nodenames = {"nsspf:"..name.."_mycelium"}, - neighbors = {"air"}, + neighbors = {"air","default:water_source"}, interval = 1, chance = 1, action = function(pos, node) minetest.set_node(pos, {name="nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos):start(300) + end + })]] + + minetest.register_abm({ + nodenames = {"nsspf:"..name.."_mycelium"}, + neighbors = {"nsspf:"..name.."_mycelium"}, + interval = 10, + chance = 1, + action = function(pos, node) + local flag = 0 + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos1 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.get_node(pos1).name + if n and string.match(n,"mycelium") then -- if the name contains "mycelium" then exit + flag = flag+1 + end + end + end + end + if flag > spread then + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos2 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local k = minetest.get_node(pos2).name + if k and string.match(k,"mycelium") then + minetest.set_node({x = pos2.x, y = pos2.y, z = pos2.z}, {name = "nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos2):start(300) + end + end + end + end + end end }) + end -nsspf_register_saprotrophicground ('macrolepiota_procera','Macrolepiota procera', 10, 10) -nsspf_register_saprotrophicground ('coprinus_atramentarius','Coprinus atramentarius', 18, 10 ) -nsspf_register_saprotrophicground ('lycoperdon_pyriforme','Lycoperdon piriforme',8, 10 ) -nsspf_register_saprotrophicground ('psilocybe_cubensis','Psilocybe cubensis', 22, 13) -nsspf_register_saprotrophicground ('gyromitra_esculenta','Gyromitra esculenta', 14, 10 ) +nsspf_register_saprotrophicground ('macrolepiota_procera','Macrolepiota procera', 10, 12, 10) +nsspf_register_saprotrophicground ('coprinus_atramentarius','Coprinus atramentarius', 16, 16, 6) +nsspf_register_saprotrophicground ('lycoperdon_pyriforme','Lycoperdon piriforme',10, 10, 8) +nsspf_register_saprotrophicground ('psilocybe_cubensis','Psilocybe cubensis', 20, 16, 12) +nsspf_register_saprotrophicground ('gyromitra_esculenta','Gyromitra esculenta', 12, 14, 8) --jungle fungi @@ -1376,6 +1632,9 @@ minetest.register_node("nsspf:lentinus_strigosus", { drawtype = "mesh", mesh = "lentinus_strigosus.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"lentinus_strigosus.png"}, groups = {snappy=3}, @@ -1413,6 +1672,9 @@ minetest.register_node("nsspf:ganoderma_lucidum", { description = "Ganoderma lucidum", drawtype = "mesh", mesh = "fistulina_hepatica.b3d", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype = 'light', paramtype2 = 'facedir', tiles = {"ganoderma_lucidum.png"}, @@ -1453,6 +1715,9 @@ minetest.register_node("nsspf:marasmius_haematocephalus", { mesh = "marasmius_haematocephalus.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"marasmius_haematocephalus.png"}, groups = {snappy=3}, on_use = minetest.item_eat(-1), @@ -1491,6 +1756,9 @@ minetest.register_node("nsspf:clitocybula_azurea", { mesh = "clitocybula_azurea.b3d", paramtype = 'light', paramtype2 = 'facedir', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, tiles = {"clitocybula_azurea.png"}, groups = {snappy=3}, on_use = minetest.item_eat(-6), @@ -1526,27 +1794,30 @@ minetest.register_node("nsspf:cooked_clitocybula_azurea", { minetest.register_abm({ nodenames = {"default:jungletree"}, neighbors = {"air"}, - interval = 400.0, - chance = 80, + interval = 180.0, + chance = 700, action = function(pos, node) local pos1 = {x=pos.x, y=pos.y+1, z=pos.z} local n = minetest.env:get_node(pos1).name if n == 'air' then minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z}, {name = "nsspf:marasmius_haematocephalus"}) + minetest.get_node_timer(pos):start(300) end end }) + minetest.register_abm({ nodenames = {"default:jungletree"}, neighbors = {"air"}, - interval = 400.0, - chance = 80, + interval = 180.0, + chance = 500, action = function(pos, node) local pos1 = {x=pos.x, y=pos.y+1, z=pos.z} local n = minetest.env:get_node(pos1).name if n == 'air' then minetest.set_node({x = pos.x, y = pos.y+1, z = pos.z}, {name = "nsspf:lentinus_strigosus"}) + minetest.get_node_timer(pos):start(300) end end }) @@ -1557,6 +1828,9 @@ minetest.register_node("nsspf:clitocybe_glacialis", { description = "Clitocybe glacialis", drawtype = "mesh", mesh = "clitocybe_glacialis.b3d", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype = 'light', paramtype2 = 'facedir', tiles = {"clitocybe_glacialis.png"}, @@ -1593,6 +1867,9 @@ minetest.register_node("nsspf:cooked_clitocybe_glacialis", { minetest.register_node("nsspf:clitocybe_glacialis_fungusdirt", { description = "Clitocybe glacialis Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1610,6 +1887,9 @@ minetest.register_node("nsspf:hygrophorus_goetzii", { description = "Hygrophorus goetzii", drawtype = "mesh", mesh = "hygrophorus_goetzii.b3d", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype = 'light', paramtype2 = 'facedir', tiles = {"hygrophorus_goetzii.png"}, @@ -1646,6 +1926,9 @@ minetest.register_node("nsspf:cooked_hygrophorus_goetzii", { minetest.register_node("nsspf:hygrophorus_goetzii_fungusdirt", { description = "Hygrophorus goetzii Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1664,6 +1947,9 @@ minetest.register_node("nsspf:plectania_nannfeldtii", { drawtype = "mesh", mesh = "plectania_nannfeldtii.b3d", paramtype = 'light', + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + end, paramtype2 = 'facedir', tiles = {"plectania_nannfeldtii.png"}, groups = {snappy=3}, @@ -1699,6 +1985,9 @@ minetest.register_node("nsspf:cooked_plectania_nannfeldtii", { minetest.register_node("nsspf:plectania_nannfeldtii_fungusdirt", { description = "Plectania nannfeldtii Dirt", + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="default:dirt"}) + end, tiles = {"default_dirt.png"}, drop = { max_items = 1, @@ -1712,9 +2001,9 @@ minetest.register_node("nsspf:plectania_nannfeldtii_fungusdirt", { groups = {crumbly = 3}, }) --- mette il micelio fungusdirt +--snowbank -function nsspf_register_snowbankfungi (name, descr, int, ch) +function nsspf_register_snowbankfungi (name, descr, int, ch, spread) minetest.register_abm({ nodenames = {"nsspf:"..name.."_mycelium"}, @@ -1723,6 +2012,7 @@ function nsspf_register_snowbankfungi (name, descr, int, ch) chance = 1, action = function(pos, node) minetest.set_node(pos, {name="nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos):start(300) end }) @@ -1743,24 +2033,25 @@ function nsspf_register_snowbankfungi (name, descr, int, ch) minetest.register_abm({ nodenames = {"nsspf:"..name.."_mycelium"}, neighbors = {"default:dirt_with_snow"}, - interval = 4*int, - chance = 4*ch, + interval = 2*int, + chance = 3*ch, action = function(pos, node) local pos1 = {x=pos.x, y=pos.y+2, z=pos.z} local pos2 = {x=pos.x, y=pos.y+1, z=pos.z} local n = minetest.get_node(pos1).name local nn = minetest.get_node(pos2).name - if n== "air" and nn== "default:dirt_with_snow" then + if (n== "air" or n== "default:snow") and nn== "default:dirt_with_snow" then minetest.set_node(pos1, {name = "nsspf:"..name}) + minetest.get_node_timer(pos1):start(300) end end }) minetest.register_abm({ nodenames = {"default:dirt_with_snow"}, - neighbors = {"air"}, + neighbors = {"air", "default:snow"}, interval = 30*int, - chance = 20*ch, + chance = 40*ch, action = function(pos, node) local pos3 = {x=pos.x, y=pos.y-1, z=pos.z} local n = minetest.get_node(pos3).name @@ -1774,18 +2065,52 @@ function nsspf_register_snowbankfungi (name, descr, int, ch) nodenames = {"default:dirt"}, neighbors = {"nsspf:"..name.."_mycelium"}, interval = 12*int, - chance = 4*ch, + chance = 10*ch, action = function(pos, node) minetest.set_node({x = pos.x, y = pos.y, z = pos.z}, {name = "nsspf:"..name.."_mycelium"}) end }) - + minetest.register_abm({ + nodenames = {"nsspf:"..name.."_mycelium"}, + neighbors = {"nsspf:"..name.."_mycelium"}, + interval = 10, + chance = 1, + action = function(pos, node) + local flag = 0 + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos1 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local n = minetest.get_node(pos1).name + if n and string.match(n,"mycelium") then -- if the name contains "mycelium" then exit + flag = flag+1 + end + end + end + end + if flag > spread then + for dx = -4,4 do + for dy = -4,1 do + for dz = -4,4 do + local pos2 = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz} + local k = minetest.get_node(pos2).name + if k and string.match(k,"mycelium") then + minetest.set_node({x = pos2.x, y = pos2.y, z = pos2.z}, {name = "nsspf:"..name.."_fungusdirt"}) + minetest.get_node_timer(pos2):start(300) + end + end + end + end + end + end + }) + end -nsspf_register_snowbankfungi ('plectania_nannfeldtii','Plectania nannfeldtii', 18, 10) -nsspf_register_snowbankfungi ('hygrophorus_goetzii','Hygrophorus goetzii', 16, 10) -nsspf_register_snowbankfungi ('clitocybe_glacialis','Clitocybe glacialis', 15, 10) +nsspf_register_snowbankfungi ('plectania_nannfeldtii','Plectania nannfeldtii', 18, 10, 8) +nsspf_register_snowbankfungi ('hygrophorus_goetzii','Hygrophorus goetzii', 16, 10, 6) +nsspf_register_snowbankfungi ('clitocybe_glacialis','Clitocybe glacialis', 15, 10, 6) function nsspf_register_recipes (name) @@ -1826,6 +2151,65 @@ nsspf_register_recipes ('marasmius_haematocephalus') nsspf_register_recipes ('clitocybula_azurea') + minetest.register_craft({ + output = 'nsspf:amadou', + type = "shapeless", + recipe = {'nsspf:fomes_fomentarius'}, + }) + +minetest.register_craftitem("nsspf:amadou", { + description = descr, + image = "amadou.png", +}) + +minetest.register_craft({ + type = "fuel", + recipe = "nsspf:amadou", + burntime = 120, +}) + +if minetest.get_modpath("nssm") then + + minetest.register_craftitem("nsspf:long_lasting_amadou", { + description = 'Long Lasting Amadou', + image = "long_lasting_amadou.png", + }) + + minetest.register_craft({ + output = 'nsspf:long_lasting_amadou', + type = "shapeless", + recipe = {'nssm:black_powder', 'nsspf:amadou'}, + }) + + minetest.register_craft({ + type = "fuel", + recipe = "nsspf:long_lasting_amadou", + burntime = 400, + }) + +end + +if minetest.get_modpath("tnt") then + + minetest.register_craftitem("nsspf:lasting_amadou", { + description = 'Lasting amadou', + image = "lasting_amadou.png", + }) + + minetest.register_craft({ + output = 'nsspf:lasting_amadou', + type = "shapeless", + recipe = {'tnt:gunpowder', 'nsspf:amadou'}, + }) + + minetest.register_craft({ + type = "fuel", + recipe = "nsspf:lasting_amadou", + burntime = 300, + }) + +end + minetest.register_abm({ nodenames = {"flowers:mushroom_red"}, interval = 1, diff --git a/models/blend/fomes_fomentarius.blend b/models/blend/fomes_fomentarius.blend new file mode 100644 index 0000000..a1d9a80 Binary files /dev/null and b/models/blend/fomes_fomentarius.blend differ diff --git a/models/blend/fomes_fomentarius.blend1 b/models/blend/fomes_fomentarius.blend1 new file mode 100644 index 0000000..d2c27a0 Binary files /dev/null and b/models/blend/fomes_fomentarius.blend1 differ diff --git a/models/fomes_fomentarius.b3d b/models/fomes_fomentarius.b3d new file mode 100644 index 0000000..8fb1ab0 Binary files /dev/null and b/models/fomes_fomentarius.b3d differ diff --git a/textures/amadou.png b/textures/amadou.png new file mode 100644 index 0000000..29a28c8 Binary files /dev/null and b/textures/amadou.png differ diff --git a/textures/fomes_fomentarius.png b/textures/fomes_fomentarius.png new file mode 100644 index 0000000..2417f1c Binary files /dev/null and b/textures/fomes_fomentarius.png differ diff --git a/textures/lasting_amadou.png b/textures/lasting_amadou.png new file mode 100644 index 0000000..6f97d44 Binary files /dev/null and b/textures/lasting_amadou.png differ diff --git a/textures/long_lasting_amadou.png b/textures/long_lasting_amadou.png new file mode 100644 index 0000000..7d63a5b Binary files /dev/null and b/textures/long_lasting_amadou.png differ