diff --git a/ambience.zip b/ambience.zip index 894f02b..ce42fb7 100644 Binary files a/ambience.zip and b/ambience.zip differ diff --git a/ambience/init.lua b/ambience/init.lua index c2522dc..62aa7c3 100644 --- a/ambience/init.lua +++ b/ambience/init.lua @@ -1,54 +1,158 @@ -local night = {"Crickets_At_NightCombo", "horned_owl", "Wolves_Howling"} -local day = {"bird"} -local cave = {"Bats_in_Cave","drippingwater_drip.1","drippingwater_drip.2","drippingwater_drip.3", "Single_Water_Droplet", "Spooky_Water_Drops"} +local night = { + handler = {}, + {name="horned_owl", length=3}, + {name="Wolves_Howling", length=11} +} -math.randomseed(3) -sound_playing = 0 +local night_frequent = { + handler = {}, + {name="Crickets_At_NightCombo", length=69} +} -minetest.register_globalstep(function(time) - local time = minetest.env:get_timeofday() - -- minetest.chat_send_all(time .. " " .. sound_playing) +local day = { + handler = {}, + {name="bird", length=30} +} - if sound_playing == 0 then - sound_playing = time - end +local day_frequent = { + handler = {}, + {name="", length=0} +} - if sound_playing > 1 and time < 0.05 then - sound_playing = 0.05 - end - - for _,player in ipairs(minetest.get_connected_players()) do - if player:getpos().y < 0 then - if math.random(10000) >9980 then - minetest.sound_play(cave[math.random(1, #cave)], {to_player = player:get_player_name()}) +local cave = { + handler = {}, + {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}, + {name="Single_Water_Droplet", length=3}, + {name="Spooky_Water_Drops", length=7} +} + +-- 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}) + if handler ~= nil then + list.handler[player_name] = handler + minetest.after(list[number].length, function(args) + local list = args[1] + local player_name = args[2] + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil end - else - --random wolves & owls at night - if time > 0.8 or time < 0.2 then - if math.random(10000) >9997 then - minetest.sound_play("Wolves_Howling") - end - if math.random(10000) >9997 then - minetest.sound_play("horned_owl") - end - end - - if time > sound_playing then - if time > 0.8 or time < 0.2 then - sound_playing = time + 0.07 - minetest.sound_play("Crickets_At_NightCombo") - return true - end - sound_playing = time + 0.1 - minetest.sound_play("bird") - return true + end, {list, player_name}) + end + end +end + +-- stops all sounds that are not in still_playing +local stop_sound = function(still_playing, player) + local player_name = player:get_player_name() + if still_playing.cave == nil then + local list = cave + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.cave_frequent == nil then + local list = cave_frequent + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.night == nil then + local list = night + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.night_frequent == nil then + local list = night_frequent + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.day == nil then + local list = day + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.day_frequent == nil then + local list = day_frequent + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end +end + +local timer = 0 +minetest.register_globalstep(function(dtime) + timer = timer+dtime + if timer < 5 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 -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 + end + end + end +end) \ No newline at end of file diff --git a/ambience/init.lua.03 b/ambience/init.lua.03 new file mode 100644 index 0000000..c2522dc --- /dev/null +++ b/ambience/init.lua.03 @@ -0,0 +1,54 @@ +local night = {"Crickets_At_NightCombo", "horned_owl", "Wolves_Howling"} +local day = {"bird"} +local cave = {"Bats_in_Cave","drippingwater_drip.1","drippingwater_drip.2","drippingwater_drip.3", "Single_Water_Droplet", "Spooky_Water_Drops"} + +math.randomseed(3) +sound_playing = 0 + +minetest.register_globalstep(function(time) + local time = minetest.env:get_timeofday() + -- minetest.chat_send_all(time .. " " .. sound_playing) + + if sound_playing == 0 then + sound_playing = time + end + + if sound_playing > 1 and time < 0.05 then + sound_playing = 0.05 + end + + for _,player in ipairs(minetest.get_connected_players()) do + if player:getpos().y < 0 then + if math.random(10000) >9980 then + minetest.sound_play(cave[math.random(1, #cave)], {to_player = player:get_player_name()}) + end + else + --random wolves & owls at night + if time > 0.8 or time < 0.2 then + if math.random(10000) >9997 then + minetest.sound_play("Wolves_Howling") + end + if math.random(10000) >9997 then + minetest.sound_play("horned_owl") + end + end + + if time > sound_playing then + if time > 0.8 or time < 0.2 then + sound_playing = time + 0.07 + minetest.sound_play("Crickets_At_NightCombo") + return true + end + sound_playing = time + 0.1 + minetest.sound_play("bird") + return true + end + + + + + end + end + + +end) diff --git a/ambience/init.lua.04 b/ambience/init.lua.04 new file mode 100644 index 0000000..c2522dc --- /dev/null +++ b/ambience/init.lua.04 @@ -0,0 +1,54 @@ +local night = {"Crickets_At_NightCombo", "horned_owl", "Wolves_Howling"} +local day = {"bird"} +local cave = {"Bats_in_Cave","drippingwater_drip.1","drippingwater_drip.2","drippingwater_drip.3", "Single_Water_Droplet", "Spooky_Water_Drops"} + +math.randomseed(3) +sound_playing = 0 + +minetest.register_globalstep(function(time) + local time = minetest.env:get_timeofday() + -- minetest.chat_send_all(time .. " " .. sound_playing) + + if sound_playing == 0 then + sound_playing = time + end + + if sound_playing > 1 and time < 0.05 then + sound_playing = 0.05 + end + + for _,player in ipairs(minetest.get_connected_players()) do + if player:getpos().y < 0 then + if math.random(10000) >9980 then + minetest.sound_play(cave[math.random(1, #cave)], {to_player = player:get_player_name()}) + end + else + --random wolves & owls at night + if time > 0.8 or time < 0.2 then + if math.random(10000) >9997 then + minetest.sound_play("Wolves_Howling") + end + if math.random(10000) >9997 then + minetest.sound_play("horned_owl") + end + end + + if time > sound_playing then + if time > 0.8 or time < 0.2 then + sound_playing = time + 0.07 + minetest.sound_play("Crickets_At_NightCombo") + return true + end + sound_playing = time + 0.1 + minetest.sound_play("bird") + return true + end + + + + + end + end + + +end) diff --git a/ambience/init.lua.bug2 b/ambience/init.lua.bug2 new file mode 100644 index 0000000..08f881c --- /dev/null +++ b/ambience/init.lua.bug2 @@ -0,0 +1,154 @@ +local night = { + handler = {}, + {name="horned_owl", length=3}, + {name="Wolves_Howling", length=11} +} + +local night_frequent = { + handler = {}, + {name="Crickets_At_NightCombo", length=69} +} + +local day = { + handler = {}, + {name="bird", length=30} +} + +local day_frequent = { + handler = {}, + {name="", length=0} +} + +local cave = { + handler = {}, + {name="Bats_in_Cave", length=5} +} + +local cave_frequent = { + handler = {}, + {name="dippingwater_drip", length=2}, + {name="Single_Water_Droplet", length=3}, + {name="Spooky_Water_Drops", length=7} +} + +-- 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}) + if handler ~= nil then + list.handler[player_name] = handler + minetest.after(list[number].length, function(args) + local list = args[1] + local player_name = args[2] + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end, {list, player_name}) + end + end +end + +-- stops all sounds that are not in still_playing +local stop_sound = function(still_playing, player) + local player_name = player:get_player_name() + if still_playing.cave == nil then + local list = cave + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.cave_frequent == nil then + local list = cave_frequent + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.night == nil then + local list = night + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.night_frequent == nil then + local list = night_frequent + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.day == nil then + local list = day + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end + if still_playing.day_frequent == nil then + local list = day_frequent + if list.handler[player_name] ~= nil then + minetest.sound_stop(list.handler[player_name]) + list.handler[player_name] = nil + end + end +end + +local timer = 0 +minetest.register_globalstep(function(dtime) + timer = timer+dtime + if timer < 5 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 + end + end + end +end) \ No newline at end of file diff --git a/ambience/sounds/drippingwater_dripa.ogg b/ambience/sounds/drippingwater_dripa.ogg new file mode 100644 index 0000000..84c3e01 Binary files /dev/null and b/ambience/sounds/drippingwater_dripa.ogg differ diff --git a/ambience/sounds/drippingwater_dripb.ogg b/ambience/sounds/drippingwater_dripb.ogg new file mode 100644 index 0000000..18790fc Binary files /dev/null and b/ambience/sounds/drippingwater_dripb.ogg differ diff --git a/ambience/sounds/drippingwater_dripc.ogg b/ambience/sounds/drippingwater_dripc.ogg new file mode 100644 index 0000000..f367406 Binary files /dev/null and b/ambience/sounds/drippingwater_dripc.ogg differ