sounds and textures

This commit is contained in:
TomasJLuis 2015-04-19 16:17:50 +02:00
commit 9f4d2201c1
4 changed files with 129 additions and 0 deletions

129
init.lua Normal file
View File

@ -0,0 +1,129 @@
local load_time_start = os.clock()
local function table_icontains(t, v)
for i = 1,#t do
if t[i] == v then
return true
end
end
return false
end
local allowed_drawtypes = {"plantlike", "torchlike", "signlike", "raillike", "nodebox", "mesh"}
-- FIXME is this the best way to find out if a node can be flooded or not?
local flow_nodes
local function get_flow_nodes()
flow_nodes = {}
for n,i in pairs(minetest.registered_nodes) do
if table_icontains(allowed_drawtypes, i.drawtype)
then
local typ
if i.buildable_to then
typ = 1
else
local groups = i.groups
if groups
and groups.attached_node
and groups.attached_node > 0 then
typ = 2
end
end
if typ then
local sounds,sound = i.sounds
if sounds then
sound = sounds.dug
end
flow_nodes[n] = {typ, sound}
end
end
end
end
local function flow(pos, name)
local name = name or minetest.get_node(pos).name
local node = flow_nodes[name]
if not node then
return
end
if node[2] then
minetest.sound_play(node[2], {pos=pos})
end
local typ = node[1]
if typ == 1 then
minetest.remove_node(pos)
return true
elseif typ == 2 then
for _,item in pairs(minetest.get_node_drops(name)) do
minetest.add_item(pos, item)
end
minetest.remove_node(pos)
return true
end
end
local function update_liquids(pos, node, liquid)
local liquid_name = liquid or node.name
local liquid_type = minetest.registered_nodes[liquid_name].liquidtype
local param2 = node.param2
if liquid_type == "flowing" and (param2 > 7 or param2 == 0) then return end
pos.y = pos.y-1
local nd = minetest.get_node(pos).name
if nd ~= liquid_name and flow(pos, nd) then
return
end
pos.y = pos.y+1
for j = -1,1,2 do
for _,i in ipairs({
{0,j},
{j,0},
}) do
pos.x = pos.x+i[1]
pos.z = pos.z+i[2]
if flow(pos) then return end
pos.x = pos.x-i[1]
pos.z = pos.z-i[2]
if flow(pos) then return end
end
end
end
minetest.register_abm({
nodenames = {"group:liquid"},
interval = 3,
chance = 1,
action = function(pos, node)
if not flow_nodes then
get_flow_nodes()
end
update_liquids(pos, node)
end
})
minetest.register_abm({
nodenames = {"default:water_flowing"},
interval = 1.8,
chance = 1.5,
action = function(pos, node, active_object_count, active_object_count_wider)
minetest.sound_play("water", {pos = pos, gain = 0.125, max_hear_distance = 4})
end
})
minetest.register_abm({
nodenames = {"default:lava_source"},
interval = 2,
chance = 2,
action = function(pos, node, active_object_count, active_object_count_wider)
minetest.sound_play("lava", {pos = pos, gain = 0.125, max_hear_distance = 8})
if math.random(1,13) == 8 then
local rnd = math.random(0,1)*-1
minetest.add_particle(pos, {x=0.1*rnd, y=0.8, z=-0.1*rnd}, {x=-0.5*rnd, y=0.2, z=0.5*rnd}, 1.7, 1.2, true, "lava_particle.png")
end
end
})
minetest.log("info", string.format("[stronger_liquids] loaded after ca. %.2fs", os.clock() - load_time_start))

BIN
sounds/lava.ogg Normal file

Binary file not shown.

BIN
sounds/water.ogg Normal file

Binary file not shown.

BIN
textures/lava_particle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B