1
0
spegling av https://github.com/FaceDeer/dfcaverns.git synced 2025-10-24 22:05:42 +02:00

make giant mushrooms edible, make jungle trees growable

This commit is contained in:
FaceDeer
2019-08-12 23:00:41 -06:00
förälder 1a86f38f71
incheckning c64f0a6f63
9 ändrade filer med 181 tillägg och 1 borttagningar

Visa fil

Visa fil

@@ -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")

Visa fil

@@ -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,

Visa fil

@@ -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,
})

Visa fil

@@ -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.

Efter

Bredd:  |  Höjd:  |  Storlek: 200 B

Binary file not shown.

Efter

Bredd:  |  Höjd:  |  Storlek: 1.1 KiB

Binary file not shown.

Före

Bredd:  |  Höjd:  |  Storlek: 1.1 KiB

Efter

Bredd:  |  Höjd:  |  Storlek: 532 B

Visa fil

@@ -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