make giant mushrooms edible, make jungle trees growable

This commit is contained in:
FaceDeer 2019-08-12 23:00:41 -06:00
parent 1a86f38f71
commit c64f0a6f63
9 changed files with 181 additions and 1 deletions

View File

View File

@ -3,6 +3,7 @@ df_primordial_items.doc = {}
local MP = minetest.get_modpath(minetest.get_current_modname())
dofile(MP.."/doc.lua")
dofile(MP.."/jungle_nodes.lua")
dofile(MP.."/jungle_tree.lua")
dofile(MP.."/jungle_mushroom.lua")

View File

@ -65,6 +65,27 @@ minetest.register_node("df_primordial_items:jungle_mushroom_cap_2", {
},
})
minetest.register_craftitem("df_primordial_items:diced_mushroom", {
description = S("Diced Mushroom"),
_doc_items_longdesc = df_primordial_items.doc.big_mushroom_desc,
_doc_items_usagehelp = df_primordial_items.doc.big_mushroom_usage,
inventory_image = "dfcaverns_mush_diced_giant_mushroom.png",
groups = {food = 1},
on_use = minetest.item_eat(1),
})
minetest.register_craft({
output = "df_primordial_items:diced_mushroom 4",
type = "shapeless",
recipe = { "df_primordial_items:jungle_mushroom_cap_1"},
})
minetest.register_craft({
output = "df_primordial_items:diced_mushroom 4",
type = "shapeless",
recipe = { "df_primordial_items:jungle_mushroom_cap_2"},
})
minetest.register_node("df_primordial_items:jungle_mushroom_sapling", {
description = S("Primordial Jungle Mushroom Sapling"),
_doc_items_longdesc = df_primordial_items.doc.big_mushroom_desc,

View File

@ -15,8 +15,21 @@ minetest.register_node("df_primordial_items:jungle_leaves", {
wield_image = "dfcaverns_jungle_leaves_01.png",
paramtype = "light",
is_ground_content = false,
buildable_to = true,
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
sounds = default.node_sound_leaves_defaults(),
drop = {
max_items = 1,
items = {
{
items = {"df_primordial_items:jungletree_sapling"},
rarity = 10,
},
{
items = {"df_primordial_items:jungle_leaves"},
}
}
},
after_place_node = default.after_place_leaves,
})
@ -32,9 +45,22 @@ minetest.register_node("df_primordial_items:jungle_leaves_glowing", {
wield_image = "dfcaverns_jungle_leaves_02.png",
paramtype = "light",
is_ground_content = false,
buildable_to = true,
light_source = 4,
groups = {snappy = 3, leafdecay = 3, flammable = 2, leaves = 1},
sounds = default.node_sound_leaves_defaults(),
drop = {
max_items = 1,
items = {
{
items = {"df_primordial_items:jungletree_sapling"},
rarity = 10,
},
{
items = {"df_primordial_items:jungle_leaves"},
}
}
},
after_place_node = default.after_place_leaves,
})
@ -76,3 +102,125 @@ minetest.register_node("df_primordial_items:jungle_tree_glowing", {
sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node
})
default.register_leafdecay({
trunks = {"df_primordial_items:jungle_tree", "df_primordial_items:jungle_tree_mossy", "df_primordial_items:jungle_tree_glowing"},
leaves = {"df_primordial_items:jungle_leaves", "df_primordial_items:jungle_leaves_glowing"},
radius = 1,
})
----------------------------
-- Spawn
-- TODO: make use of the variant trunk and leaf nodes
local c_leaves = minetest.get_content_id("df_primordial_items:jungle_leaves")
local c_leaves_glow = minetest.get_content_id("df_primordial_items:jungle_leaves_glowing")
local c_trunk = minetest.get_content_id("df_primordial_items:jungle_tree")
local c_trunk_mossy = minetest.get_content_id("df_primordial_items:jungle_tree_mossy")
local c_trunk_glow = minetest.get_content_id("df_primordial_items:jungle_tree_glowing")
df_primordial_items.spawn_jungle_tree = function(pos)
local x, y, z = pos.x, pos.y, pos.z
local height = math.random(8,14)
local vm = minetest.get_voxel_manip()
local minp, maxp = vm:read_from_map(
{x = x - 2, y = y - 2, z = z - 2},
{x = x + 2, y = y + height, z = z + 2}
)
local area = VoxelArea:new({MinEdge = minp, MaxEdge = maxp})
local data = vm:get_data()
local vi = area:indexp(pos)
df_primordial_items.spawn_jungle_tree_vm(height, vi, area, data)
vm:set_data(data)
vm:write_to_map()
vm:update_map()
end
df_primordial_items.spawn_jungle_tree_vm = function(height, vi, area, data)
local ystride = area.ystride
local zstride = area.zstride
local buildable_to = mapgen_helper.buildable_to
local roots_done = {[vi] = true}
for i = 1, 6 do
local root_column = vi + math.random(-1,1) + math.random(-1,1)*zstride
if not roots_done[root_column] then
for y = -2, math.random(0,1) do -- root height is 1 to 2 nodes above ground
local root_index = root_column + y * ystride
if buildable_to(data[root_index]) then
data[root_index] = c_trunk
end
end
end
roots_done[root_column] = true
end
-- puts a trunk node in the center and surrounds it with leaves
local branch = function(bi)
if buildable_to(data[bi]) then
data[bi] = c_trunk
else
return -- if a branch is placed in a non-viable place, don't add leaves
end
for x = -1, 1 do
for z = -1, 1 do
for y = -1, 1 do
if math.random() < 0.75 then
local li = bi + x + z*zstride + y*ystride
if buildable_to(data[li]) then
data[li] = c_leaves
end
end
end
end
end
end
for i = 0, height-2 do
local y_index = vi + i * ystride
if buildable_to(data[y_index]) then
data[y_index] = c_trunk
else
return -- if we hit something we can't grow through, stop.
end
if i > 4 then
local branch_index = y_index + math.random(-1,1) + math.random(-1,1)*zstride
branch(branch_index)
end
end
branch(vi + (height-1)*ystride) -- topper
end
--TODO: separate setting
local min_growth_delay = tonumber(minetest.settings:get("dfcaverns_mycelium_min_growth_delay")) or 240
local max_growth_delay = tonumber(minetest.settings:get("dfcaverns_mycelium_max_growth_delay")) or 400
minetest.register_node("df_primordial_items:jungletree_sapling", {
description = S("Primordial Jungle Tree Sapling"),
_doc_items_longdesc = df_primordial_items.doc.tree_desc,
_doc_items_usagehelp = df_primordial_items.doc.tree_usage,
tiles = {"dfcaverns_jungle_sapling.png"},
inventory_image = "dfcaverns_jungle_sapling.png",
wield_image = "dfcaverns_jungle_sapling.png",
groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1},
paramtype = "light",
drawtype = "plantlike",
buildable_to = true,
walkable = false,
sounds = default.node_sound_leaves_defaults(),
use_texture_alpha = true,
sunlight_propagates = true,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(min_growth_delay, max_growth_delay))
end,
on_destruct = function(pos)
minetest.get_node_timer(pos):stop()
end,
on_timer = function(pos, elapsed)
df_primordial_items.spawn_jungle_tree(pos)
end,
})

View File

@ -656,6 +656,7 @@ minetest.register_node("df_primordial_items:mush_sapling", {
use_texture_alpha = true,
sunlight_propagates = true,
on_construct = function(pos)
--TODO: timer
local mushroom = df_primordial.get_primordial_mushroom
local rotation = (math.random(1,4)-1)*90
minetest.set_node(pos, {name="air"}) -- clear sapling so mushroom can replace it

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 532 B

View File

@ -1 +1,10 @@
All primordial item textures were created by ClockGen and licensed under the CC BY 4.0
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