215 lines
5.4 KiB
Lua
215 lines
5.4 KiB
Lua
-- mods/default/functions.lua
|
|
|
|
--
|
|
-- Sounds
|
|
--
|
|
|
|
function default.node_sound_defaults(table)
|
|
table = table or {}
|
|
table.footstep = table.footstep or
|
|
{name="", gain=1.0}
|
|
table.dug = table.dug or
|
|
{name="default_dug_node", gain=0.25}
|
|
table.place = table.place or
|
|
{name="default_place_node_hard", gain=1.0}
|
|
return table
|
|
end
|
|
|
|
function default.node_sound_stone_defaults(table)
|
|
table = table or {}
|
|
table.footstep = table.footstep or
|
|
{name="default_hard_footstep", gain=0.5}
|
|
table.dug = table.dug or
|
|
{name="default_hard_footstep", gain=1.0}
|
|
default.node_sound_defaults(table)
|
|
return table
|
|
end
|
|
|
|
function default.node_sound_dirt_defaults(table)
|
|
table = table or {}
|
|
table.footstep = table.footstep or
|
|
{name="default_dirt_footstep", gain=1.0}
|
|
table.dug = table.dug or
|
|
{name="default_dirt_footstep", gain=1.5}
|
|
table.place = table.place or
|
|
{name="default_place_node", gain=1.0}
|
|
default.node_sound_defaults(table)
|
|
return table
|
|
end
|
|
|
|
function default.node_sound_sand_defaults(table)
|
|
table = table or {}
|
|
table.footstep = table.footstep or
|
|
{name="default_sand_footstep", gain=0.5}
|
|
table.dug = table.dug or
|
|
{name="default_sand_footstep", gain=1.0}
|
|
table.place = table.place or
|
|
{name="default_place_node", gain=1.0}
|
|
default.node_sound_defaults(table)
|
|
return table
|
|
end
|
|
|
|
function default.node_sound_wood_defaults(table)
|
|
table = table or {}
|
|
table.footstep = table.footstep or
|
|
{name="default_wood_footstep", gain=0.5}
|
|
table.dug = table.dug or
|
|
{name="default_wood_footstep", gain=1.0}
|
|
default.node_sound_defaults(table)
|
|
return table
|
|
end
|
|
|
|
function default.node_sound_leaves_defaults(table)
|
|
table = table or {}
|
|
table.footstep = table.footstep or
|
|
{name="default_grass_footstep", gain=0.35}
|
|
table.dug = table.dug or
|
|
{name="default_grass_footstep", gain=0.85}
|
|
table.dig = table.dig or
|
|
{name="default_dig_crumbly", gain=0.4}
|
|
table.place = table.place or
|
|
{name="default_place_node", gain=1.0}
|
|
default.node_sound_defaults(table)
|
|
return table
|
|
end
|
|
|
|
function default.node_sound_glass_defaults(table)
|
|
table = table or {}
|
|
table.footstep = table.footstep or
|
|
{name="default_glass_footstep", gain=0.5}
|
|
table.dug = table.dug or
|
|
{name="default_break_glass", gain=1.0}
|
|
default.node_sound_defaults(table)
|
|
return table
|
|
end
|
|
|
|
--
|
|
-- Legacy
|
|
--
|
|
|
|
function default.spawn_falling_node(p, nodename)
|
|
spawn_falling_node(p, nodename)
|
|
end
|
|
|
|
--
|
|
-- Global callbacks
|
|
--
|
|
|
|
-- Global environment step function
|
|
function on_step(dtime)
|
|
-- print("on_step")
|
|
end
|
|
minetest.register_globalstep(on_step)
|
|
|
|
function on_placenode(p, node)
|
|
--print("on_placenode")
|
|
end
|
|
minetest.register_on_placenode(on_placenode)
|
|
|
|
function on_dignode(p, node)
|
|
--print("on_dignode")
|
|
end
|
|
minetest.register_on_dignode(on_dignode)
|
|
|
|
function on_punchnode(p, node)
|
|
end
|
|
minetest.register_on_punchnode(on_punchnode)
|
|
|
|
|
|
--
|
|
-- Grow trees
|
|
--
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"default:sapling"},
|
|
interval = 10,
|
|
chance = 50,
|
|
action = function(pos, node)
|
|
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
|
|
local is_soil = minetest.get_item_group(nu, "soil")
|
|
if is_soil == 0 then
|
|
return
|
|
end
|
|
|
|
minetest.log("action", "A sapling grows into a tree at "..minetest.pos_to_string(pos))
|
|
local vm = minetest.get_voxel_manip()
|
|
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
|
|
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
|
|
local data = vm:get_data()
|
|
default.grow_tree(data, a, pos, math.random(1, 4) == 1, math.random(1,100000))
|
|
vm:set_data(data)
|
|
vm:write_to_map(data)
|
|
vm:update_map()
|
|
end
|
|
})
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"default:junglesapling"},
|
|
interval = 10,
|
|
chance = 50,
|
|
action = function(pos, node)
|
|
local nu = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
|
|
local is_soil = minetest.get_item_group(nu, "soil")
|
|
if is_soil == 0 then
|
|
return
|
|
end
|
|
|
|
minetest.log("action", "A jungle sapling grows into a tree at "..minetest.pos_to_string(pos))
|
|
local vm = minetest.get_voxel_manip()
|
|
local minp, maxp = vm:read_from_map({x=pos.x-16, y=pos.y-1, z=pos.z-16}, {x=pos.x+16, y=pos.y+16, z=pos.z+16})
|
|
local a = VoxelArea:new{MinEdge=minp, MaxEdge=maxp}
|
|
local data = vm:get_data()
|
|
default.grow_jungletree(data, a, pos, math.random(1,100000))
|
|
vm:set_data(data)
|
|
vm:write_to_map(data)
|
|
vm:update_map()
|
|
end
|
|
})
|
|
|
|
--
|
|
-- Lavacooling
|
|
--
|
|
|
|
default.cool_lava_source = function(pos)
|
|
minetest.set_node(pos, {name="default:obsidian"})
|
|
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
|
|
end
|
|
|
|
default.cool_lava_flowing = function(pos)
|
|
minetest.set_node(pos, {name="default:stone"})
|
|
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
|
|
end
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"default:lava_flowing"},
|
|
neighbors = {"group:water"},
|
|
interval = 1,
|
|
chance = 1,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
default.cool_lava_flowing(pos, node, active_object_count, active_object_count_wider)
|
|
end,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"default:lava_source"},
|
|
neighbors = {"group:water"},
|
|
interval = 1,
|
|
chance = 1,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
default.cool_lava_source(pos, node, active_object_count, active_object_count_wider)
|
|
end,
|
|
})
|
|
|
|
-- dig upwards
|
|
--
|
|
|
|
function default.dig_up(pos, node, digger)
|
|
if digger == nil then return end
|
|
local np = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
local nn = minetest.get_node(np)
|
|
if nn.name == node.name then
|
|
minetest.node_dig(np, nn, digger)
|
|
end
|
|
end
|
|
|