Add ability to scale sheer walls.
Pummel on the face of a wall you can't dig with your bare hands and eventually you will find handholds there, allowing you to climb. This will hopefully provide an immersive alternative to /stuck for getting out of pits, which will also make players have to carefully extricate themselves from their situations instead of just using /stuck to bail and then running home to come back with supplies.
This commit is contained in:
parent
d1ff1d400c
commit
353462eddd
2
mods/nc_scaling/depends.txt
Normal file
2
mods/nc_scaling/depends.txt
Normal file
@ -0,0 +1,2 @@
|
||||
nc_api
|
||||
nc_api_craft
|
78
mods/nc_scaling/init.lua
Normal file
78
mods/nc_scaling/init.lua
Normal file
@ -0,0 +1,78 @@
|
||||
local modname = minetest.get_current_modname()
|
||||
|
||||
local maxdist = 4
|
||||
|
||||
minetest.register_node(modname .. ":steps", {
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
tiles = {
|
||||
"nc_scaling_blank.png",
|
||||
"nc_scaling_blank.png",
|
||||
"nc_scaling_blank.png",
|
||||
"nc_scaling_blank.png",
|
||||
"nc_scaling_blank.png",
|
||||
"nc_scaling_steps.png"
|
||||
},
|
||||
use_texture_alpha = true,
|
||||
drawtype = "nodebox",
|
||||
node_box = nodecore.fixedbox(-0.5, -0.5, 31/64, 0.5, 0.5, 0.5),
|
||||
walkable = false,
|
||||
climbable = true,
|
||||
pointable = false,
|
||||
buildable_to = true
|
||||
})
|
||||
|
||||
nodecore.register_limited_abm({
|
||||
label = "Scaling Decay",
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
limited_max = 100,
|
||||
nodenames = {modname .. ":steps"},
|
||||
action = function(pos)
|
||||
local n = minetest.get_meta(pos):get_string("n")
|
||||
if n then
|
||||
local pl = minetest.get_player_by_name(n)
|
||||
if pl and vector.distance(pl:get_pos(), pos) <= maxdist
|
||||
then return end
|
||||
end
|
||||
minetest.remove_node(pos)
|
||||
end
|
||||
})
|
||||
|
||||
nodecore.register_craft({
|
||||
label = "compress coal block",
|
||||
action = "pummel",
|
||||
duration = 5,
|
||||
normal = {x = 1},
|
||||
check = function(pos, data)
|
||||
if vector.distance(data.crafter:get_pos(), pos) > maxdist then return end
|
||||
if not data.wield:is_empty() then return end
|
||||
local node = minetest.get_node(pos)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
return not nodecore.toolspeed(data.wield, def.groups)
|
||||
end,
|
||||
nodes = {
|
||||
{
|
||||
match = {walkable = true}
|
||||
},
|
||||
{
|
||||
x = 1,
|
||||
match = "air",
|
||||
replace = modname .. ":steps"
|
||||
}
|
||||
},
|
||||
after = function(pos, data)
|
||||
local p = data.rel(1, 0, 0)
|
||||
local d = vector.subtract(p, pos)
|
||||
local fd = 0
|
||||
for i = 0, #nodecore.facedirs do
|
||||
if vector.equals(nodecore.facedirs[i].f, d) then
|
||||
fd = i
|
||||
break
|
||||
end
|
||||
end
|
||||
minetest.set_node(p, {name = modname .. ":steps", param2 = fd})
|
||||
minetest.get_meta(p):set_string("n", data.pname)
|
||||
end
|
||||
})
|
BIN
mods/nc_scaling/textures/nc_scaling_blank.png
Normal file
BIN
mods/nc_scaling/textures/nc_scaling_blank.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 B |
BIN
mods/nc_scaling/textures/nc_scaling_steps.png
Normal file
BIN
mods/nc_scaling/textures/nc_scaling_steps.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
Loading…
x
Reference in New Issue
Block a user