everness/env_sounds.lua
2024-02-16 11:23:15 -05:00

1175 lines
32 KiB
Lua

--[[
Everness. Never ending discovery in Everness mapgen.
Copyright (C) 2024 SaKeL
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
--]]
local SOUND_DEFS = {
['everness:cursed_lands'] = {
day = {
{
name = 'everness_ambience_graveyard_1',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_7',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_8',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_9',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_10',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_5',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_graveyard_6',
length = 6,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_1',
length = 1.9,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_2',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_3',
length = 6,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_4',
length = 10,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_5',
length = 14,
gain = 0.6,
},
},
night = {
{
name = 'everness_ambience_night_crickets_1',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_night_crickets_2',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_night_crickets_3',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_night_crickets_4',
length = 7,
gain = 0.6,
},
{
name = 'everness_ambience_night_crickets_5',
length = 6.5,
gain = 0.6,
},
{
name = 'everness_ambience_owl_1',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_1',
length = 1.9,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_2',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_3',
length = 6,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_4',
length = 10,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_5',
length = 14,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_6',
length = 10,
gain = 0.6,
},
}
},
['everness:cursed_lands_swamp'] = {
day = {
{
name = 'everness_ambience_swamp_1',
length = 6.8,
gain = 0.6,
},
{
name = 'everness_ambience_swamp_2',
length = 8.8,
gain = 0.6,
},
{
name = 'everness_ambience_swamp_3',
length = 8.7,
gain = 0.6,
},
{
name = 'everness_ambience_swamp_4',
length = 12,
gain = 0.6,
},
}
},
['everness:cursed_lands_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
{
name = 'everness_ambience_creepy_cave_1',
length = 5.5,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_1',
length = 1.9,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_2',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_3',
length = 6,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_4',
length = 10,
gain = 0.6,
},
{
name = 'everness_ambience_ghost_5',
length = 14,
gain = 0.6,
},
}
},
['everness:coral_forest_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
}
},
['everness:frosted_icesheet'] = {
day = {
{
name = 'everness_ambience_snow_storm_1',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_snow_storm_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_snow_storm_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_snow_storm_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_ice_cracking_1',
length = 2.4,
gain = 1.5,
},
{
name = 'everness_ambience_ice_cracking_2',
length = 2.5,
gain = 1.5,
},
{
name = 'everness_ambience_ice_cracking_3',
length = 3,
gain = 1.5,
},
}
},
['everness:frosted_icesheet_ocean'] = {
day = {
{
name = 'everness_ambience_snow_storm_1',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_snow_storm_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_snow_storm_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_snow_storm_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_ice_cracking_1',
length = 2.4,
gain = 1.5,
},
{
name = 'everness_ambience_ice_cracking_2',
length = 2.5,
gain = 1.5,
},
{
name = 'everness_ambience_ice_cracking_3',
length = 3,
gain = 1.5,
},
}
},
['everness:frosted_icesheet_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
}
},
['everness:crystal_forest_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
}
},
['everness:bamboo_forest_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
}
},
['everness:forsaken_desert_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
}
},
['everness:forsaken_tundra'] = {
day = {
{
name = 'everness_ambience_sulfur_1',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_sulfur_2',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_sulfur_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_sulfur_4',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_hot_stone_1',
length = 9,
gain = 1.5,
},
{
name = 'everness_ambience_hot_stone_2',
length = 9,
gain = 1.5,
},
}
},
['everness:forsaken_tundra_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
}
},
['everness:mineral_waters_under'] = {
day = {
{
name = 'everness_ambience_monster_sigh_cave',
length = 2,
gain = 0.6,
},
{
name = 'everness_ambience_rocks_falling_cave',
length = 12,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_1',
length = 11,
gain = 0.6,
},
{
name = 'everness_ambience_water_drips_cave_2',
length = 13,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_1',
length = 15,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_2',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_3',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_wind_cave_5',
length = 7.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_1',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_2',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_3',
length = 5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_4',
length = 8,
gain = 0.6,
},
{
name = 'everness_ambience_cave_5',
length = 8.5,
gain = 0.6,
},
{
name = 'everness_ambience_cave_6',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_7',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_8',
length = 9,
gain = 0.6,
},
{
name = 'everness_ambience_cave_9',
length = 10,
gain = 0.6,
},
{
name = 'everness_lava_1',
length = 10,
gain = 1.0,
},
{
name = 'everness_lava_2',
length = 10,
gain = 2.0,
},
}
},
}
local PLAYER_SOUNDS = {}
-- Update sound for player
local function update_sound(player)
local player_name = player:get_player_name()
local player_pos = player:get_pos()
local biome_data = minetest.get_biome_data(player_pos)
if not biome_data then
return
end
local biome_name = minetest.get_biome_name(biome_data.biome)
if not biome_name then
return
end
if not PLAYER_SOUNDS[player_name] then
local sound_def_biome = SOUND_DEFS[biome_name]
if not sound_def_biome then
return
end
local sound_def = sound_def_biome.day[1]
-- day
if #sound_def_biome.day > 1 then
sound_def = sound_def_biome.day[math.random(1, #sound_def_biome.day)]
end
-- night between 19:19:12 - 04:48:00
if sound_def_biome.night then
local tod = minetest.get_timeofday()
if tod > 0.805 or tod < 0.2 then
sound_def = sound_def_biome.night[1]
if #sound_def_biome.night > 1 then
sound_def = sound_def_biome.night[math.random(1, #sound_def_biome.night)]
end
end
end
PLAYER_SOUNDS[player_name] = minetest.sound_play(sound_def.name, {
to_player = player_name,
gain = 0,
}, false)
-- fade in
minetest.sound_fade(PLAYER_SOUNDS[player_name], (sound_def.gain / sound_def.length) / 2, sound_def.gain)
minetest.after(sound_def.length / 2, function(v_player_sounds, v_player_name)
-- fade out
if not PLAYER_SOUNDS[player_name] then
return
end
minetest.sound_fade(v_player_sounds[v_player_name], ((sound_def.gain / sound_def.length) / 2) * -1, 0)
end, PLAYER_SOUNDS, player_name)
-- remove handle
minetest.after(sound_def.length, function(v_player_sounds, v_player_name)
v_player_sounds[v_player_name] = nil
end, PLAYER_SOUNDS, player_name)
end
end
-- Update sound when player joins
minetest.register_on_joinplayer(function(player)
local player_name = player:get_player_name()
PLAYER_SOUNDS[player_name] = nil
update_sound(player)
end)
-- Cyclic sound update
local function cyclic_update()
for _, player in pairs(minetest.get_connected_players()) do
update_sound(player)
end
minetest.after(math.random(30, 180), cyclic_update)
end
minetest.after(0, cyclic_update)