Compare commits

...

7 Commits

Author SHA1 Message Date
trans_soup 0bdbc5539a disable player fall damage. 2023-10-22 21:27:48 +02:00
trans_soup f3d46e4d71 fix decomposition starting level.
leaves now preserve their level when they start decomposing.
2023-10-22 21:16:26 +02:00
trans_soup 4c21d9a015 fix decomposition with new leveled leaves.
decomposition will now start for all levels of leaves.
2023-10-22 21:11:07 +02:00
trans_soup 27288f4a84 make decaying leaves have random level. 2023-10-22 21:09:38 +02:00
trans_soup 20a85bd7b1 add group "leafy" to leaves. 2023-10-22 21:07:00 +02:00
trans_soup 54267faa88 make regular leaves leveled. 2023-10-22 21:06:38 +02:00
trans_soup 0f1452ca06 remove old comments. 2023-10-22 21:02:00 +02:00
4 changed files with 29 additions and 77 deletions

View File

@ -5,5 +5,8 @@ blockgame.register_on_joinplayer(function(player)
data.properties.pointable = false
data.properties.zoom_fov = 15
data.properties.eye_height = 1.7
player:set_armor_groups({
fall_damage_add_percent = -100,
})
end)
end)

View File

@ -44,7 +44,12 @@ local start_decompose_cost = 4000
blockgame.register_increasing_abm({
id = modname .. ":begin_decompose",
label = "decompose leaves",
nodenames = {leaves},
nodenames = {
leaves .. "_1",
leaves .. "_2",
leaves .. "_3",
leaves .. "_4",
},
neighbors = {"group:dirty", leaves_decomposing},
interval = 15,
chance = 8,
@ -59,9 +64,8 @@ blockgame.register_increasing_abm({
return data.value >= start_decompose_cost
end,
action = function (pos, node, data)
-- NOTE: might wanna access the 4 from somewhere, instead of directly knowing it.
-- that way this won't have to change if decomposing leaves max levels change.
local level = math.random(1, 4)
local def = minetest.registered_nodes[node.name]
local level = def.level
minetest.set_node(pos, {name = leaves_decomposing .. "_" .. level})
end,
})

View File

@ -1,5 +1,7 @@
local modname = minetest.get_current_modname()
local level_max = minetest.registered_items[modname .. ":leaves"].level_max
blockgame.register_abm({
label = "make unsupported leaves fall",
nodenames = {
@ -25,8 +27,8 @@ blockgame.register_abm({
end, 3)
if not is_supported then
-- TODO: become randomly-sized leaves pile when layered leaves is added.
minetest.set_node(pos, {name = modname .. ":leaves"})
local level = math.random(1, level_max)
minetest.set_node(pos, {name = modname .. ":leaves_" .. level})
minetest.check_for_falling(pos)
-- TODO: send out event here that makes nearby leaves check if they're unsupported as well?
end

View File

@ -1,5 +1,7 @@
local modname = minetest.get_current_modname()
local leaves_level_max = 4
local base_def = {
drawtype = "allfaces_optional",
paramtype = "light",
@ -9,6 +11,7 @@ local base_def = {
extends_leaves_support = 1,
air_flowable = 1,
falling_node = 1,
leafy = 1,
},
}
@ -43,11 +46,17 @@ local nutty_drops = {
},
}
reg_leaves("leaves", {
blockgame.register_leveled_node(modname .. ":leaves", blockgame.underride({
description = "Leaves",
level_max = leaves_level_max,
tiles = {
modname .. "_leaves.png",
},
walkable = false,
supports_falling = true,
})
level_max = leaves_level_max,
}, base_def))
reg_leaves("leaves_growing", {
description = "Growing Leaves",
texture = "leaves_alive",
@ -64,82 +73,16 @@ reg_leaves("leaves_alive", {
},
})
--[[
local function check_decompose (pos)
local node = minetest.get_node(pos)
return blockgame.item_matches(node.name, {"group:leaves_decomposing"})
end
]]--
-- TODO: generalize stacking node registration and put into API.
local decomposing_leaves_layers = 4
--[[
local function after_place_stack (pos)
if not check_decompose(pos) then return end
local below = pos + blockgame.vector.dirs.down
if check_decompose(below) then
local node = minetest.get_node(pos)
local below_node = minetest.get_node(below)
local def = minetest.registered_nodes[node.name]
local below_def = minetest.registered_nodes[below_node.name]
if below_def.level ~= decomposing_leaves_layers then
local max_diff = decomposing_leaves_layers - below_def.level
local diff = math.min(max_diff, def.level)
minetest.swap_node(below, {name = modname .. ":leaves_decomposing_" .. (below_def.level + diff)})
if diff == def.level then
minetest.remove_node(pos)
else
minetest.swap_node(pos, {name = modname .. ":leaves_decomposing_" .. (def.level - diff)})
end
end
end
local above = pos:offset(0, 1, 0)
if check_decompose(above) then
after_place_stack(above)
end
end
local function reg_decomposing (level)
local height = level / decomposing_leaves_layers
local description = "Decomposing Leaves (" .. level .. "/" .. decomposing_leaves_layers .. ")"
if level == decomposing_leaves_layers then description = "Decomposing Leaves" end
local drawtype = "nodebox"
local node_box = {
["type"] = "fixed",
fixed = { -0.5, -0.5, -0.5, 0.5, -0.5 + height, 0.5 },
}
if level == decomposing_leaves_layers then
drawtype = "allfaces_optional"
node_box = nil
end
reg_leaves("leaves_decomposing_" .. level, )
end
for level=1, decomposing_leaves_layers do
reg_decomposing(level)
end
minetest.register_alias(modname .. ":leaves_decomposing", modname .. ":leaves_decomposing_" .. decomposing_leaves_layers)
]]--
blockgame.register_leveled_node("leaves_decomposing", blockgame.underride({
description = "Decomposing Leaves",
level_max = decomposing_leaves_layers,
level_max = leaves_level_max,
tiles = {
modname .. "_leaves_decomposing.png",
},
groups = {
leaves_decomposing = decomposing_leaves_layers,
leaves_decomposing = leaves_level_max,
},
walkable = false,
supports_falling = true,
level_max = decomposing_leaves_layers,
level_max = leaves_level_max,
}, base_def))