Skip to content

Commit

Permalink
add ambience sounds and helper function
Browse files Browse the repository at this point in the history
  • Loading branch information
BuckarooBanzay committed Feb 3, 2025
1 parent 62037ad commit ac57d43
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 6 deletions.
4 changes: 2 additions & 2 deletions .luacheckrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ std = "min+minetest"
unused_args = false

globals = {
"scifi_nodes"
"scifi_nodes",
"minetest"
}

read_globals = {
Expand All @@ -13,7 +14,6 @@ read_globals = {
"stairsplus",
"xpanes",
"screwdriver",
"minetest",
"mesecon",
"unifieddyes",
"letters",
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ CC BY 3.0

CC0
* scifi_nodes_digicode.ogg https://freesound.org/people/benjaminharveydesign/sounds/315921/
* scifi_nodes_ambience_fan.ogg https://freesound.org/people/itinerantmonk108/sounds/554430/
* scifi_nodes_ambience_vent.ogg https://freesound.org/people/kentspublicdomain/sounds/324665/
* scifi_nodes_ambience_engine.ogg https://freesound.org/people/firestorm185/sounds/423221/


# Contributors:
Expand Down
73 changes: 73 additions & 0 deletions ambience.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@

-- currently playing sounds per mapblock
-- mapblock_pos[number]
local currently_playing = {}

-- clear the currently playing tracker every few seconds
local function clear_currently_playing()
currently_playing = {}
minetest.after(5, clear_currently_playing)
end
minetest.after(5, clear_currently_playing)

-- mapblock resolution
local function get_key(pos)
return minetest.pos_to_string(vector.round(vector.divide(pos, 16)))
end

local function add_currently_playing(pos, value)
local key = get_key(pos)
local count = currently_playing[key]
if not count then
-- new entry
count = value
else
-- update entry
count = count + value
end
currently_playing[key] = count
end

-- limit plaing sounds per mapblock
local function can_play(pos)
local count = currently_playing[get_key(pos)]
return not count or count < 10
end

-- register ambience sounds with node-timer
function scifi_nodes.register_ambience(nodename, soundname, opts)
assert(opts)
opts.interval = opts.interval or 60

local function play(pos)
minetest.sound_play(soundname ,{
max_hear_distance = opts.max_hear_distance or 16,
pos = pos,
gain = opts.gain or 0.7
})
end

minetest.override_item(nodename, {
on_timer = function(pos)
local timer = minetest.get_node_timer(pos)

if not can_play(pos) then
-- too many sounds playing, recheck again soon
timer:start(2)
return
end

-- increment usage count
add_currently_playing(pos, 1)
play(pos)

-- restart timer
timer:start(opts.interval)
end,
on_construct = function(pos)
play(pos)
local timer = minetest.get_node_timer(pos)
timer:start(opts.interval)
end
})
end
1 change: 1 addition & 0 deletions init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ if minetest.get_modpath("default") then
dofile(MP.."/chest.lua")
end

dofile(MP.."/ambience.lua")
dofile(MP.."/plants.lua")
dofile(MP.."/models.lua")
dofile(MP.."/nodes.lua")
Expand Down
22 changes: 19 additions & 3 deletions nodes.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,13 @@
"texture_name": "white2"
},
"engine": {
"description": "Engine"
"description": "Engine",
"ambience": {
"scifi_nodes_ambience_engine": {
"interval": 16.1,
"gain": 2.0
}
}
},
"wall": {
"description": "metal wall"
Expand Down Expand Up @@ -58,7 +64,12 @@
"description": "transparent vent",
"texture_name": "vent2",
"texture_modifier": "^[makealpha:33,33,33",
"drawtype": "glasslike"
"drawtype": "glasslike",
"ambience": {
"scifi_nodes_ambience_vent": {
"interval": 4.2
}
}
},
"stripes": {
"description": "hazard stripes",
Expand Down Expand Up @@ -261,7 +272,12 @@
"light": 5
},
"fan": {
"description": "Fan"
"description": "Fan",
"ambience": {
"scifi_nodes_ambience_fan": {
"interval": 7
}
}
},
"ppllght": {
"description": "Purple wall light",
Expand Down
10 changes: 9 additions & 1 deletion nodes.lua
Original file line number Diff line number Diff line change
Expand Up @@ -537,7 +537,8 @@ for name, def in pairs(nodes) do
end

-- register node
minetest.register_node("scifi_nodes:"..name, node_def)
local nodename = "scifi_nodes:" .. name
minetest.register_node(nodename , node_def)

-- unified dyes registration
if def.colorable and has_unifieddyes_mod then
Expand Down Expand Up @@ -574,6 +575,13 @@ for name, def in pairs(nodes) do
})
end

if def.ambience then
for soundname, opts in pairs(def.ambience) do
print(dump(opts))
scifi_nodes.register_ambience(nodename, soundname, opts)
end
end

-- advtrains platform registration
if has_advtrains_mod and def.advtrains_platform then
advtrains.register_platform("scifi_nodes", "scifi_nodes:" .. name)
Expand Down
Binary file added sounds/scifi_nodes_ambience_engine.ogg
Binary file not shown.
Binary file added sounds/scifi_nodes_ambience_fan.ogg
Binary file not shown.
Binary file added sounds/scifi_nodes_ambience_vent.ogg
Binary file not shown.

0 comments on commit ac57d43

Please sign in to comment.