diff --git a/ambience.zip b/ambience.zip index 7cf0582..b31e4bd 100644 Binary files a/ambience.zip and b/ambience.zip differ diff --git a/ambience/init.lua b/ambience/init.lua index 229cb33..10b1c9a 100644 --- a/ambience/init.lua +++ b/ambience/init.lua @@ -1,18 +1,19 @@ local night = { handler = {}, - {name="horned_owl", length=3}, - {name="horned_owl", length=3}, + frequency = 10, {name="horned_owl", length=3}, {name="Wolves_Howling", length=11} } local night_frequent = { handler = {}, + frequency = 25, {name="Crickets_At_NightCombo", length=69} } local day = { handler = {}, + frequency = 5, {name="Best Cardinal Bird", length=4}, {name="craw", length=3}, {name="bluejay", length=18} @@ -20,6 +21,7 @@ local day = { local day_frequent = { handler = {}, + frequency = 25, {name="robin2", length=43}, {name="birdsongnl", length=72}, {name="bird", length=30} @@ -27,23 +29,91 @@ local day_frequent = { local cave = { handler = {}, + frequency = 5, {name="Bats_in_Cave", length=5} } local cave_frequent = { handler = {}, - {name="drippingwater_dripa", length=2}, - {name="drippingwater_dripb", length=2}, - {name="drippingwater_dripc", length=2}, + frequency = 100, + {name="drippingwater_drip_a", length=2}, + {name="drippingwater_drip_b", length=2}, + {name="drippingwater_drip_c", length=2}, {name="Single_Water_Droplet", length=3}, {name="Spooky_Water_Drops", length=7} } +local water = { + handler = {}, + frequency = 0,--dolphins dont fit into small lakes + {name="dolphins", length=6}, + {name="dolphins_screaming", length=16.5} +} + +local water_frequent = { + handler = {}, + frequency = 100, + on_stop = "drowning_gasp", + {name="scuba1bubbles", length=11}, + {name="scuba1calm", length=10}, + {name="scuba1calm2", length=8.5}, + {name="scuba1interestingbubbles", length=11}, + {name="scuba1tubulentbubbles", length=10.5} +} + +local play_music = minetest.setting_getbool("music") or false +local music = { + handler = {}, + frequency = 1, + {name="mtest", length=4*60+33, gain=0.3} +} + +local is_daytime = function() + return (minetest.env:get_timeofday() > 0.2 and minetest.env:get_timeofday() < 0.8) +end + +local get_ambience = function(player) + local pos = player:getpos() + pos.y = pos.y+1.5 + local nodename = minetest.env:get_node(pos).name + if string.find(nodename, "default:water") then + if music then + return {water=water, water_frequent=water_frequent, music=music} + else + return {water=water, water_frequent=water_frequent} + end + end + if player:getpos().y < 0 then + if music then + return {cave=cave, cave_frequent=cave_frequent, music=music} + else + return {cave=cave, cave_frequent=cave_frequent} + end + end + if is_daytime() then + if music then + return {day=day, day_frequent=day_frequent, music=music} + else + return {day=day, day_frequent=day_frequent} + end + else + if music then + return {night=night, night_frequent=night_frequent, music=music} + else + return {night=night, night_frequent=night_frequent} + end + end +end + -- start playing the sound, set the handler and delete the handler after sound is played local play_sound = function(player, list, number) local player_name = player:get_player_name() if list.handler[player_name] == nil then - local handler = minetest.sound_play(list[number].name, {to_player=player_name}) + local gain = 1.0 + if list[number].gain ~= nil then + gain = list[number].gain + end + local handler = minetest.sound_play(list[number].name, {to_player=player_name, gain=gain}) if handler ~= nil then list.handler[player_name] = handler minetest.after(list[number].length, function(args) @@ -64,6 +134,9 @@ local stop_sound = function(still_playing, player) if still_playing.cave == nil then local list = cave if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end minetest.sound_stop(list.handler[player_name]) list.handler[player_name] = nil end @@ -71,6 +144,9 @@ local stop_sound = function(still_playing, player) if still_playing.cave_frequent == nil then local list = cave_frequent if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end minetest.sound_stop(list.handler[player_name]) list.handler[player_name] = nil end @@ -78,6 +154,9 @@ local stop_sound = function(still_playing, player) if still_playing.night == nil then local list = night if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end minetest.sound_stop(list.handler[player_name]) list.handler[player_name] = nil end @@ -85,6 +164,9 @@ local stop_sound = function(still_playing, player) if still_playing.night_frequent == nil then local list = night_frequent if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end minetest.sound_stop(list.handler[player_name]) list.handler[player_name] = nil end @@ -92,6 +174,9 @@ local stop_sound = function(still_playing, player) if still_playing.day == nil then local list = day if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end minetest.sound_stop(list.handler[player_name]) list.handler[player_name] = nil end @@ -99,6 +184,39 @@ local stop_sound = function(still_playing, player) if still_playing.day_frequent == nil then local list = day_frequent if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.music == nil then + local list = music + if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.water == nil then + local list = water + if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.water_frequent == nil then + local list = water_frequent + if list.handler[player_name] ~= nil then + if list.on_stop ~= nil then + minetest.sound_play(list.on_stop, {to_player=player:get_player_name()}) + end minetest.sound_stop(list.handler[player_name]) list.handler[player_name] = nil end @@ -108,56 +226,17 @@ end local timer = 0 minetest.register_globalstep(function(dtime) timer = timer+dtime - if timer < 5 then + if timer < 1 then return end timer = 0 - -- normal sounds - if math.random(1, 100) <= 5 then - if minetest.env:get_timeofday() < 0.2 or minetest.env:get_timeofday() > 0.8 then - for _,player in ipairs(minetest.get_connected_players()) do - if player:getpos().y < 0 then - stop_sound({cave=true, cave_frequent=true}, player) - play_sound(player, cave, math.random(1, #cave)) - else - stop_sound({night=true, night_frequent=true}, player) - play_sound(player, night, math.random(1, #night)) - end - end - else - for _,player in ipairs(minetest.get_connected_players()) do - if player:getpos().y < 0 then - stop_sound({cave=true, cave_frequent=true}, player) - play_sound(player, cave, math.random(1, #cave)) - else - stop_sound({day=true, day_frequent=true}, player) - play_sound(player, day, math.random(1, #day)) - end - end - end - end - -- frequent sounds - if math.random(1, 100) <= 50 then - if minetest.env:get_timeofday() < 0.2 or minetest.env:get_timeofday() > 0.8 then - for _,player in ipairs(minetest.get_connected_players()) do - if player:getpos().y < 0 then - stop_sound({cave=true, cave_frequent=true}, player) - play_sound(player, cave_frequent, math.random(1, #cave_frequent)) - else - stop_sound({night=true, night_frequent=true}, player) - play_sound(player, night_frequent, math.random(1, #night_frequent)) - end - end - else - for _,player in ipairs(minetest.get_connected_players()) do - if player:getpos().y < 0 then - stop_sound({cave=true, cave_frequent=true}, player) - play_sound(player, cave_frequent, math.random(1, #cave_frequent)) - else - stop_sound({day=true, day_frequent=true}, player) - play_sound(player, day_frequent, math.random(1, #day_frequent)) - end + for _,player in ipairs(minetest.get_connected_players()) do + local ambiences = get_ambience(player) + stop_sound(ambiences, player) + for _,ambience in pairs(ambiences) do + if math.random(1, 100) <= ambience.frequency then + play_sound(player, ambience, math.random(1, #ambience)) end end end diff --git a/ambience/initFunc.lua b/ambience/initFunc.lua index 4828a42..3f12f7c 100644 --- a/ambience/initFunc.lua +++ b/ambience/initFunc.lua @@ -44,9 +44,9 @@ local cave_frequent = { local is_daytime = function() local daytime if minetest.env:get_timeofday() < 0.2 or minetest.env:get_timeofday() > 0.8 then - daytime = true - else daytime = false + else + daytime = true end return daytime end @@ -54,31 +54,17 @@ end local setting = function (player_parm) local settinglist if player_parm:getpos().y < 0 then - settinglist = cave + settinglist = {cave, cave_frequent} else if is_daytime then - settinglist = day + settinglist = {day, day_frequent} else - settinglist = night + settinglist = {night, night_frequent} end end return settinglist end -local setting_frequent = function (setting_parm) - local setting_frequent_list - if setting_parm == cave then - setting_frequent_list = cave_frequent - elseif setting_parm == day then - setting_frequent_list = day_frequent - else - setting_frequent_list = night_frequent - end - return setting_frequent_list -end - - - -- start playing the sound, set the handler and delete the handler after sound is played local play_sound = function(player, list, number) local player_name = player:get_player_name() @@ -152,22 +138,20 @@ minetest.register_globalstep(function(dtime) return end timer = 0 - - -- normal sounds - if math.random(1, 100) <= 5 then --this 5 is what I am trying to change based on setting - for _,player in ipairs(minetest.get_connected_players()) do - player_setting = setting(player) - stop_sound({cave=true, cave_frequent=true}, player)--big problem here - play_sound(player, player_setting, math.random(1, #player_setting)) - end - end - -- frequent sounds - if math.random(1, 100) <= 50 then - for _,player in ipairs(minetest.get_connected_players()) do - player_setting_frequent = setting_frequent(player) - stop_sound({cave=true, cave_frequent=true}, player)--big problem here - play_sound(player, player_setting_frequent, math.random(1, #player_setting_frequent)) + for _,player in ipairs(minetest.get_connected_players()) do + player_setting = setting(player) + + -- normal sounds + if math.random(1, 100) <= 5 then --this 5 is what I am trying to change based on setting + stop_sound({player_setting}, player)--big problem here + play_sound(player, player_setting[1], math.random(1, #player_setting[0])) + end + + -- frequent sounds + if math.random(1, 100) <= 50 then + stop_sound({player_setting}, player)--big problem here + play_sound(player, player_setting[2], math.random(1, #player_setting[1])) end end -end) \ No newline at end of file +) \ No newline at end of file diff --git a/ambience/sounds/ambiance.ogg b/ambience/sounds/ambiance.ogg new file mode 100644 index 0000000..e759293 Binary files /dev/null and b/ambience/sounds/ambiance.ogg differ diff --git a/ambience/sounds/birdsongnl.ogg b/ambience/sounds/birdsongnl.ogg index 6cbd85a..c2a67d1 100644 Binary files a/ambience/sounds/birdsongnl.ogg and b/ambience/sounds/birdsongnl.ogg differ diff --git a/ambience/sounds/dark_ambiance.ogg b/ambience/sounds/dark_ambiance.ogg new file mode 100644 index 0000000..4ca4174 Binary files /dev/null and b/ambience/sounds/dark_ambiance.ogg differ diff --git a/ambience/sounds/drowning_gasp.ogg b/ambience/sounds/drowning_gasp.ogg new file mode 100644 index 0000000..5d62a8e Binary files /dev/null and b/ambience/sounds/drowning_gasp.ogg differ diff --git a/ambience/sounds/eastern_feeling.ogg b/ambience/sounds/eastern_feeling.ogg new file mode 100644 index 0000000..d691313 Binary files /dev/null and b/ambience/sounds/eastern_feeling.ogg differ diff --git a/ambience/sounds/mtest.ogg b/ambience/sounds/mtest.ogg new file mode 100644 index 0000000..da84263 Binary files /dev/null and b/ambience/sounds/mtest.ogg differ diff --git a/ambience/sounds/robin2.ogg b/ambience/sounds/robin2.ogg index 13e95e2..16c39e6 100644 Binary files a/ambience/sounds/robin2.ogg and b/ambience/sounds/robin2.ogg differ