Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b84c32b
Excise antimatter generator code for easier testing
AbbyRead Mar 22, 2026
160a22d
Merge branch 'sound-fixes' into sounds-part3
AbbyRead Mar 22, 2026
916bab1
Remove stupid function alias
AbbyRead Mar 22, 2026
5a8fee7
Reimplement sound as player-dependent (mtg fire-esque)
AbbyRead Mar 22, 2026
e1334cd
Rename bespoke_sfx to sbz_audio
AbbyRead Mar 22, 2026
de0a5d2
Move sound assets from sbz_resources/sounds to sbz_audio
AbbyRead Mar 22, 2026
040aaf5
Fix unintentional extra subfolder
AbbyRead Mar 22, 2026
487b5e2
Update readme to reflect sbz_resources/sounds move
AbbyRead Mar 22, 2026
93427a1
Move sbz_base/sounds content to sbz_audio/licensed
AbbyRead Mar 22, 2026
9285cd3
Move sound_api.lua contents to sbz_audio/init.lua
AbbyRead Mar 22, 2026
1772d55
Update the audio api signature
AbbyRead Mar 22, 2026
6c2b42a
Update dependencies where needed
AbbyRead Mar 22, 2026
68e71c4
Remove deprecated functions and update comments
AbbyRead Mar 22, 2026
6b40a5c
Update remaining deprecated function calls
AbbyRead Mar 22, 2026
49b19d1
Add verbosity shame to chat
AbbyRead Mar 22, 2026
24f7151
Submit to peer pressure
AbbyRead Mar 22, 2026
b558140
Change inventory page turn sound effect
AbbyRead Mar 22, 2026
8a3d0e9
Table chat sound effects until I can implement them better
AbbyRead Mar 23, 2026
0d32798
Reorganize and clarify audio content
AbbyRead Mar 24, 2026
affd4a6
Just have sbz_base depend on sbz_audio
AbbyRead Mar 24, 2026
bc4b98f
Clarify a bit
AbbyRead Mar 24, 2026
08c188d
Remove failed attempt at backward compatibility
AbbyRead Mar 24, 2026
3b3adaf
Clarify since deprecated still implies inclusion
AbbyRead Mar 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 0 additions & 17 deletions mods/bespoke_sfx/COPYRIGHT.md

This file was deleted.

25 changes: 0 additions & 25 deletions mods/bespoke_sfx/README.md

This file was deleted.

1 change: 0 additions & 1 deletion mods/bespoke_sfx/init.lua

This file was deleted.

2 changes: 0 additions & 2 deletions mods/bespoke_sfx/mod.conf

This file was deleted.

71 changes: 71 additions & 0 deletions mods/sbz_audio/COPYRIGHT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Assets Organized by License and Type

## New, Internally-Created Audio

### Recorded Foley

All audio assets within the cc0/foley folder are sounds recorded using a microphone and foley techniques, and edited and released [CC0 1.0](https://creativecommons.org/public-domain/cc0/) (Public Domain) by someone we _personally_ know and trust ONLY.

### Text-To-Speech Audio

All audio within the cc0/tts folder is released [CC0 1.0](https://creativecommons.org/public-domain/cc0/) (Public Domain). It is text-to-speech generated using formant synthesis (not voice samples) via [eSpeak-NG](https://github.com/espeak-ng/espeak-ng).

### Generated Waveforms

All audio within the cc0/gen folder is released [CC0 1.0](https://creativecommons.org/public-domain/cc0/) (Public Domain). These are procedurally generated waveforms produced using tools such as [sfxr](http://www.drpetter.se/project_sfxr.html) and [wafxr](https://fenomas.github.io/wafxr/).

### Mixed/Layered Sound Effects

All audio within the cc0/mix folder is released [CC0 1.0](https://creativecommons.org/public-domain/cc0/) (Public Domain), created by someone we _personally_ know and trust ONLY. These are composite sound effects assembled by layering and mixing sources from the other folders in this mod (foley, gen, etc.), all of which are themselves CC0.

## Legacy Audio Assets

### Sounds and SFX

`legacy/antistep.ogg` by ChefZander. CC0. Derivative of "Step 4.wav" by carrigsound. CC0. <https://freesound.org/s/32641/>.

`legacy/block_annihilated.ogg`
- "[SFX Hit] deep kick boom" Copyright (C) 2014 waveplaySFX. CC BY 4.0. <https://freesound.org/s/231349/>.
- Derivative asset for Skyblock: Zero.
- Copyright (C) 2024 ChefZander. CC BY 4.0.
- Copyright (C) 2026 AbbyRead. CC BY 4.0.

`legacy/charged_field_shutdown.ogg` is "hard_drive_shut_down_01.wav" by Noisehag. CC0. <https://freesound.org/s/110552/>.

`legacy/decay.ogg` is "pop.ogg" by dodrio. CC0. <https://freesound.org/s/554022/>.

`legacy/drill_dig.ogg`
- "[SFX Hit] deep kick boom" Copyright (C) 2014 waveplaySFX. CC BY 4.0. <https://freesound.org/s/231349/>.
- Derivative asset for Skyblock: Zero.
- Copyright (C) 2024 TheEt1234. CC BY 4.0.
- Copyright (C) 2026 AbbyRead. CC BY 4.0.

`legacy/firework_explode.ogg` is "Firework single shot 2" Copyright (C) 2022 MilanKovanda. CC BY 4.0. <https://freesound.org/s/624414/>.

`legacy/firework_launch.ogg` is "Firework launch (1)" by LukaCafuka. CC0. <https://freesound.org/s/750684/>.

`legacy/machine_build.ogg` by ChefZander. CC0. Derivative of "Key - Llave" by Lunevix. CC0. <https://freesound.org/s/503010/>.

`legacy/machine_open.ogg` by TheEt1234, corpserot. CC0.

`legacy/punch_core.ogg` by corpserot. CC0.

`legacy/step.ogg` is "Step 4.wav" by carrigsound. CC0. <https://freesound.org/s/32641/>.

`legacy/tnt_explode.ogg` is "tnt_explode.ogg" by TumeniNodes. CC0. <https://github.com/luanti-org/minetest_game/blob/95991f8dc4c97d3cc7945269bf2d5640c7fe6bc8/mods/tnt/sounds/tnt_explode.ogg>. Derivative of "Explosion2.wav" Copyright (C) 2009 steveygos03. CC BY 3.0. <https://freesound.org/s/80401/>

`legacy/tnt_ignite.ogg` is "tnt_ignite.ogg" by TumeniNodes, theneedle.tv. CC0. <https://github.com/luanti-org/minetest_game/blob/95991f8dc4c97d3cc7945269bf2d5640c7fe6bc8/mods/tnt/sounds/tnt_ignite.ogg>. Derivative of "sparkler_fuse_nm.wav" by Alex_hears_things. CC0. <https://freesound.org/s/316682/>

### Music

`legacy/bgm1.ogg` is "Cave Theme" by Brandon Morris. CC0. <https://opengameart.org/content/cave-theme>

`legacy/bgm2.ogg` is "Background space track" by yd. CC0. <https://opengameart.org/content/background-space-track>

`legacy/bgm3.ogg` is "Bleeding Out" by Brandon Morris. CC0. <https://opengameart.org/content/bleeding-out>

`legacy/bgm4.ogg` is "Factory Ambiance" by yd. CC0. <https://opengameart.org/content/factory-ambiance>

`legacy/bgm5.ogg` is "Galactic Temple" by yd. CC0. <https://opengameart.org/content/galactic-temple>

`legacy/bgm6.ogg` is "A Choice With Many Regrets" Copyright (C) 2025 Tsorthan Grove. CC BY 4.0. <https://opengameart.org/content/a-choice-with-many-regrets>
21 changes: 21 additions & 0 deletions mods/sbz_audio/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# SBZ Audio

## Usage

Mostly right now this is just a means of clear organization between stuff we need to be super clear on the license for (not in this mod) and stuff that's free and clear of copyright issues, which would be foley recorded and edited personally (by AbbyRead only at this time), text-to-speech generated via formant synthesis, generated waveforms, or layered mixes of the above. There's also now a folder for the older sound assets we were using: `legacy`.

## Contents

**sounds/cc0/foley** - Sounds recorded using a microphone and foley techniques, edited and released as CC0 1.0 (Public Domain).

**sounds/cc0/tts** - Text-to-speech placeholder audio generated using formant synthesis (not voice samples) via eSpeak-NG. No voice samples, no copyright concerns. CC0 1.0 (Public Domain).

**sounds/cc0/gen** - Procedurally generated waveforms, made using tools such as sfxr and wafxr. CC0 1.0 (Public Domain).

**sounds/cc0/mix** - Composite sound effects assembled by layering and mixing sources from the other folders (foley, sfxr, etc.). All source material is CC0, and so are the results. CC0 1.0 (Public Domain).

**sounds/legacy** - The audio content that was in sbz_resources and sbz_base mods previously. I've moved all that to this particular subfolder and updated both COPYRIGHT.md files to reflect the move. Currently, this should be the only place we drop outside audio content, as we have to be _very_ clear and specific about the license.

## License

See COPYRIGHT.md for per-folder details.
85 changes: 29 additions & 56 deletions mods/sbz_base/sound_api.lua → mods/sbz_audio/init.lua
Original file line number Diff line number Diff line change
@@ -1,36 +1,8 @@
sbz_api = sbz_api or {}

-- allow for a rightclick parameter too, so that its less annoying
core.register_on_mods_loaded(function()
for k, v in pairs(core.registered_nodes) do
-- If it has a sounds.rightclick specified...
if v.sounds and v.sounds.rightclick then
-- Save original handler (if any)
local old_rightclick = v.on_rightclick

local function new_rightclick(pos, node, clicker, stack, pointed)
if core.get_meta(pos):get_string 'formspec' ~= '' then
core.sound_play(v.sounds.rightclick, {
pos = pos,
})
end

if old_rightclick then
return old_rightclick(pos, node, clicker, stack, pointed)
end
end

core.override_item(k, {
on_rightclick = new_rightclick,
})
end
end
end)

sbz_api.sounds = sbz_api.sounds or {}
-- sbz_api.sounds is gone. Replace with sbz_audio wherever used.
sbz_audio = sbz_audio or {}

-- Use as a template (include fade if needed on any)
function sbz_api.sounds.blank()
function sbz_audio.blank()
local sounds = {
footstep = { name = '', gain = 0.2, pitch = 1.0 },
dig = { name = '', gain = 0.8, pitch = 1.0 },
Expand All @@ -40,7 +12,7 @@ function sbz_api.sounds.blank()
return sounds
end

function sbz_api.sounds.machine()
function sbz_audio.machine()
local sounds = {
footstep = { name = 'mix_thunk_slightly_metallic', gain = 0.2, pitch = 0.5 },
dig = { name = 'mix_metal_cabinet_hit', gain = 0.8, pitch = 1.0 },
Expand All @@ -50,7 +22,7 @@ function sbz_api.sounds.machine()
return sounds
end

function sbz_api.sounds.matter()
function sbz_audio.matter()
local sounds = {
footstep = { name = 'mix_choppy_rubber_step', gain = 0.1, pitch = 0.5 },
dig = { name = 'foley_matter_hit_thunky', gain = 0.8, pitch = 0.8 },
Expand All @@ -60,7 +32,7 @@ function sbz_api.sounds.matter()
return sounds
end

function sbz_api.sounds.dirt()
function sbz_audio.dirt()
local sounds = {
footstep = { name = 'mix_dirt_step', gain = 0.2, pitch = 0.8 },
dig = { name = 'mix_dirt_dig', gain = 0.6, pitch = 1.1 },
Expand All @@ -70,7 +42,7 @@ function sbz_api.sounds.dirt()
return sounds
end

function sbz_api.sounds.antimatter()
function sbz_audio.antimatter()
local sounds = {
footstep = { name = 'foley_antimatter_hum', gain = 0.2, pitch = 0.8 },
dig = { name = 'foley_antimatter_hit', gain = 0.8, pitch = 1.0 },
Expand All @@ -80,7 +52,7 @@ function sbz_api.sounds.antimatter()
return sounds
end

function sbz_api.sounds.wood_planks()
function sbz_audio.wood_planks()
local sounds = {
footstep = { name = 'gen_wump_wood', gain = 0.3, pitch = 0.9 },
dig = { name = 'foley_wood_thud_shallow', gain = 0.6, pitch = 0.8 },
Expand All @@ -90,7 +62,7 @@ function sbz_api.sounds.wood_planks()
return sounds
end

function sbz_api.sounds.wood_solid()
function sbz_audio.wood_solid()
local sounds = {
footstep = { name = 'mix_choppy_rubber_step', gain = 0.2, pitch = 0.8 },
dig = { name = 'mix_matter_hit_weird', gain = 0.8, pitch = 1.2 },
Expand All @@ -100,7 +72,7 @@ function sbz_api.sounds.wood_solid()
return sounds
end

function sbz_api.sounds.leaves()
function sbz_audio.leaves()
local sounds = {
footstep = { name = 'foley_leaf_step', gain = 0.1, pitch = 0.8 },
dig = { name = 'foley_leaf_step', gain = 0.2, pitch = 0.5 },
Expand All @@ -110,7 +82,7 @@ function sbz_api.sounds.leaves()
return sounds
end

function sbz_api.sounds.glass()
function sbz_audio.glass()
local sounds = {
footstep = { name = 'foley_matter_hit_light', gain = 0.1, pitch = 1.1 },
dig = { name = 'gen_soft_glass_bump', gain = 0.8, pitch = 1.2 },
Expand All @@ -120,7 +92,7 @@ function sbz_api.sounds.glass()
return sounds
end

function sbz_api.sounds.snow()
function sbz_audio.snow()
local sounds = {
footstep = { name = 'gen_snow_crunch_abrupt', gain = 0.2, pitch = 1.0 },
dig = { name = 'foley_snow_hit', gain = 0.5, pitch = 1.0 },
Expand All @@ -130,7 +102,7 @@ function sbz_api.sounds.snow()
return sounds
end

function sbz_api.sounds.ice()
function sbz_audio.ice()
local sounds = {
footstep = { name = 'foley_solid_step_soft', gain = 0.2, pitch = 1.0 },
dig = { name = 'gen_ice_chip', gain = 0.8, pitch = 1.0 },
Expand All @@ -140,7 +112,7 @@ function sbz_api.sounds.ice()
return sounds
end

function sbz_api.sounds.sand()
function sbz_audio.sand()
local sounds = {
footstep = { name = 'gen_sand_generic', gain = 0.1, pitch = 0.8 },
dig = { name = 'gen_sand_generic_hit', gain = 0.2, pitch = 0.6 },
Expand All @@ -150,17 +122,10 @@ function sbz_api.sounds.sand()
return sounds
end

function sbz_api.play_sfx(spec, params, pitch_randomness)
pitch_randomness = pitch_randomness or 0.035
local pitch = 1 + (math.random() * pitch_randomness * 2) - pitch_randomness
params.pitch = params.pitch or pitch
core.sound_play(spec, params, true)
end

-- Global default node sounds
core.register_on_mods_loaded(function()
local fallback_place_failed = { name = 'gen_error_fart', gain = 0.7, pitch = 1.0,}
local fallback_fall = { name = 'gen_pew_slow_fall', gain = 0.3, pitch = 1.1,}

for name, def in pairs(core.registered_nodes) do
local s = def.sounds or {}
if not s.place_failed or not s.fall then
Expand All @@ -173,17 +138,25 @@ core.register_on_mods_loaded(function()
end
end
end)

--[[ (not currently working as intended, so leaving it out for now)
-- Sounds triggered by chat
core.register_on_chat_message(
function(name, message)
-- Yo, you write a lot, cuz.
if #message >= 450 then -- 500 characters is the server-specified default maximum
core.sound_play("paperflip2", { gain = 0.7, to_player = name })
return
end

if message:find("[!]+") then
sbz_api.play_sfx("gen_chat_exclamation", { gain = 0.7, to_player = name })
core.sound_play("gen_chat_exclamation", { gain = 0.7, to_player = name })
elseif message:find("[?]+") then
sbz_api.play_sfx("gen_chat_question", { gain = 0.7, to_player = name })
elseif message:find("\\[PM\\]|@") then
sbz_api.play_sfx("gen_chat_pm_send", { gain = 0.7, to_player = name })
core.sound_play("gen_chat_question", { gain = 0.7, to_player = name })
elseif message:find("DM from ") then
core.sound_play("gen_chat_pm_send", { gain = 0.7, to_player = name })
else
sbz_api.play_sfx("gen_chat_generic", { gain = 0.7, to_player = name })
core.sound_play("gen_chat_generic", { gain = 0.7, to_player = name })
end
end
)
]]
2 changes: 2 additions & 0 deletions mods/sbz_audio/mod.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name = sbz_audio
description = General game BGM/sound assets and audio API
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
14 changes: 0 additions & 14 deletions mods/sbz_base/COPYRIGHT.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,3 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
`textures/theme_tilde_*.png` simple boxy UI theme textures by TheEt1234.

`textures/wieldhand.png` fully transparent texture by ChefZander.

## Music

`sounds/bgm1.ogg` is "Cave Theme" by Brandon Morris. CC0. <https://opengameart.org/content/cave-theme>

`sounds/bgm2.ogg` is "Background space track" by yd. CC0. <https://opengameart.org/content/background-space-track>

`sounds/bgm3.ogg` is "Bleeding Out" by Brandon Morris. CC0. <https://opengameart.org/content/bleeding-out>

`sounds/bgm4.ogg` is "Factory Ambiance" by yd. CC0. <https://opengameart.org/content/factory-ambiance>

`sounds/bgm5.ogg` is "Galactic Temple" by yd. CC0. <https://opengameart.org/content/galactic-temple>

`sounds/bgm6.ogg` is "A Choice With Many Regrets" Copyright (C) 2025 Tsorthan Grove. CC BY 4.0. <https://opengameart.org/content/a-choice-with-many-regrets>
2 changes: 0 additions & 2 deletions mods/sbz_base/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -505,8 +505,6 @@ function table.override(x, y)
return x
end

dofile(MP .. '/sound_api.lua')

sbz_api.filter_node_neighbors = function(start_pos, radius, filtering_function, break_after_one_result)
local returning = {}
local pos = vector.new()
Expand Down
2 changes: 1 addition & 1 deletion mods/sbz_base/mod.conf
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
name = sbz_base
depends = areas, player_monoids
depends = areas, player_monoids, sbz_audio
optional_depends = dbg
4 changes: 2 additions & 2 deletions mods/sbz_bio/habitat.lua
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ end

sbz_api.register_machine('sbz_bio:habitat_regulator', {
description = 'Habitat Regulator',
sounds = sbz_api.sounds.machine(),
sounds = sbz_audio.machine(),
tiles = { 'habitat_regulator.png' },
groups = { matter = 1, ui_bio = 1 },
control_action_raw = true,
Expand All @@ -229,7 +229,7 @@ sbz_api.register_machine('sbz_bio:habitat_regulator', {

core.register_node('sbz_bio:co2_compactor', {
description = 'CO2 Compactor',
sounds = sbz_api.sounds.matter(),
sounds = sbz_audio.matter(),
info_extra = "Stores 30 CO₂. Habitat regulator doesn't consider it a wall, but it can be passed through",
groups = { matter = 2, explody = 8 },
walkable = false,
Expand Down
Loading