forked from VoxeLibre/VoxeLibre
Adding the first 4 Jester trackers made for MineClone2
This commit is contained in:
parent
83ff2f1754
commit
10fa91cc42
|
@ -204,3 +204,4 @@
|
||||||
* The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game
|
* The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game
|
||||||
* Notch and Jeb for being the major forces behind Minecraft
|
* Notch and Jeb for being the major forces behind Minecraft
|
||||||
* Dark Reaven Music (https://soundcloud.com/dark-reaven-music) for the main menu theme (Calmed Cube), which is licensed under https://creativecommons.org/licenses/by-sa/3.0/
|
* Dark Reaven Music (https://soundcloud.com/dark-reaven-music) for the main menu theme (Calmed Cube), which is licensed under https://creativecommons.org/licenses/by-sa/3.0/
|
||||||
|
* Jester for helping to finely tune MineClone2 (https://www.youtube.com/@Jester-8-bit). Songs: Hailing Forest, Gift, 0dd BL0ck, Flock of One (License CC BY-SA 4.0)
|
|
@ -6,28 +6,48 @@ local music_enabled = minetest.settings:get_bool("mcl_game_music", true)
|
||||||
local pianowtune = "diminixed-pianowtune01"
|
local pianowtune = "diminixed-pianowtune01"
|
||||||
local end_tune = "diminixed-ambientwip"
|
local end_tune = "diminixed-ambientwip"
|
||||||
local nether_tune = "horizonchris96-traitor"
|
local nether_tune = "horizonchris96-traitor"
|
||||||
|
local odd_block = "Jester-0dd-BL0ck"
|
||||||
|
local flock_of_one = "Jester-Flock-of-One"
|
||||||
|
local gift = "Jester-Gift"
|
||||||
|
local hailing_forest = "Jester-Hailing_Forest"
|
||||||
|
|
||||||
local dimension_to_base_track = {
|
local dimension_to_base_track = {
|
||||||
["overworld"] = {pianowtune},
|
["overworld"] = {pianowtune, flock_of_one, gift, hailing_forest},
|
||||||
["nether"] = {nether_tune},
|
["nether"] = {nether_tune},
|
||||||
["end"] = {end_tune},
|
["end"] = {end_tune},
|
||||||
|
["mining"] = {odd_block},
|
||||||
}
|
}
|
||||||
|
|
||||||
local listeners = {}
|
local listeners = {}
|
||||||
|
|
||||||
local weather_state
|
local weather_state
|
||||||
|
|
||||||
local function pick_track(dimension, below_ground)
|
local function pick_track(dimension, underground)
|
||||||
if dimension == "overworld" and below_ground then
|
local track_key
|
||||||
-- Play mining track
|
|
||||||
|
if dimension == "overworld" and underground then
|
||||||
|
track_key = "mining"
|
||||||
else
|
else
|
||||||
-- Pick random dimension song
|
-- Pick random dimension song
|
||||||
|
track_key = dimension
|
||||||
end
|
end
|
||||||
-- Maybe just change the key to lookup and it's explicit what songs are for what context
|
|
||||||
|
|
||||||
local dimension_tracks = dimension_to_base_track[dimension]
|
minetest.log("track_key: " .. track_key)
|
||||||
local chosen_track = dimension_tracks[math.random(1, #dimension_tracks)]
|
|
||||||
return chosen_track
|
local dimension_tracks = dimension_to_base_track[track_key]
|
||||||
|
|
||||||
|
if dimension_tracks and #dimension_tracks >= 1 then
|
||||||
|
local index = 1
|
||||||
|
if #dimension_tracks > 1 then
|
||||||
|
index = math.random(1, #dimension_tracks)
|
||||||
|
end
|
||||||
|
local chosen_track = dimension_tracks[index]
|
||||||
|
--minetest.log("chosen_track: " .. chosen_track)
|
||||||
|
return chosen_track
|
||||||
|
else
|
||||||
|
--?
|
||||||
|
end
|
||||||
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,6 +57,7 @@ local function stop_music_for_listener_name(listener_name)
|
||||||
if not listener then return end
|
if not listener then return end
|
||||||
local handle = listener.handle
|
local handle = listener.handle
|
||||||
if not handle then return end
|
if not handle then return end
|
||||||
|
|
||||||
minetest.sound_stop(handle)
|
minetest.sound_stop(handle)
|
||||||
listeners[listener_name].handle = nil
|
listeners[listener_name].handle = nil
|
||||||
end
|
end
|
||||||
|
@ -48,7 +69,8 @@ local function stop_music_for_all()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function play_song(track, player_name, hp, dimension, day_count)
|
local function play_song(track, player_name, hp, dimension, day_count, underground)
|
||||||
|
minetest.log("action", "[mcl_music] Playing track: " .. track)
|
||||||
local spec = {
|
local spec = {
|
||||||
name = track,
|
name = track,
|
||||||
gain = 0.3,
|
gain = 0.3,
|
||||||
|
@ -62,12 +84,11 @@ local function play_song(track, player_name, hp, dimension, day_count)
|
||||||
}
|
}
|
||||||
local handle = minetest.sound_play(spec, parameters, false)
|
local handle = minetest.sound_play(spec, parameters, false)
|
||||||
listeners[player_name] = {
|
listeners[player_name] = {
|
||||||
spec = spec,
|
|
||||||
parameters = parameters,
|
|
||||||
handle = handle,
|
handle = handle,
|
||||||
hp = hp,
|
hp = hp,
|
||||||
dimension = dimension,
|
dimension = dimension,
|
||||||
day_count = day_count,
|
day_count = day_count,
|
||||||
|
underground = underground,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -77,47 +98,56 @@ local function play()
|
||||||
weather_state = new_weather_state
|
weather_state = new_weather_state
|
||||||
local is_good_weather = weather_state == "none" or weather_state == "clear"
|
local is_good_weather = weather_state == "none" or weather_state == "clear"
|
||||||
local is_weather_changed = weather_state ~= new_weather_state
|
local is_weather_changed = weather_state ~= new_weather_state
|
||||||
|
|
||||||
local time = minetest.get_timeofday()
|
local time = minetest.get_timeofday()
|
||||||
if time < 0.25 or time >= 0.75 then
|
if time < 0.25 or time >= 0.75 then
|
||||||
stop_music_for_all()
|
stop_music_for_all()
|
||||||
minetest.after(10, play)
|
minetest.after(10, play)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local day_count = minetest.get_day_count()
|
local day_count = minetest.get_day_count()
|
||||||
for _, player in pairs(minetest.get_connected_players()) do
|
for _, player in pairs(minetest.get_connected_players()) do
|
||||||
local player_name = player:get_player_name()
|
local player_name = player:get_player_name()
|
||||||
local hp = player:get_hp()
|
local hp = player:get_hp()
|
||||||
local pos = player:get_pos()
|
local pos = player:get_pos()
|
||||||
|
|
||||||
local below_ground = pos and pos.y < 0
|
|
||||||
|
|
||||||
local dimension = mcl_worlds.pos_to_dimension(pos)
|
local dimension = mcl_worlds.pos_to_dimension(pos)
|
||||||
|
|
||||||
local listener = listeners[player_name]
|
local underground = dimension == "overworld" and pos and pos.y < 0
|
||||||
|
|
||||||
|
local listener = listeners[player_name]
|
||||||
local handle = listener and listener.handle
|
local handle = listener and listener.handle
|
||||||
|
|
||||||
local old_hp = listener and listener.hp
|
local old_hp = listener and listener.hp
|
||||||
local old_dimension = listener and listener.dimension
|
local old_dimension = listener and listener.dimension
|
||||||
|
local old_underground = listener and listener.underground
|
||||||
|
|
||||||
local is_dimension_changed = old_dimension and (old_dimension ~= dimension) or false
|
local is_dimension_changed = old_dimension and (old_dimension ~= dimension) or false
|
||||||
local is_hp_changed = old_hp and (math.abs(old_hp - hp) > 0.00001) or false
|
local is_hp_changed = old_hp and (math.abs(old_hp - hp) > 0.00001) or false
|
||||||
|
local underground_changed = old_underground and underground ~= old_underground
|
||||||
|
|
||||||
|
|
||||||
-- TODO if y is less than 1, then pick mining track or not morning music
|
--minetest.log("handle: " .. dump (handle))
|
||||||
local track = pick_track(dimension, below_ground)
|
if is_hp_changed or is_dimension_changed or underground_changed
|
||||||
|
or (dimension == "overworld" and (is_weather_changed or not is_good_weather)) then
|
||||||
if is_hp_changed or is_dimension_changed
|
minetest.log("action", "[mcl_music] Stopping music")
|
||||||
or (dimension == "overworld" and (is_weather_changed or not is_good_weather))
|
|
||||||
or not track then
|
|
||||||
stop_music_for_listener_name(player_name)
|
stop_music_for_listener_name(player_name)
|
||||||
if not listeners[player_name] then
|
if not listeners[player_name] then
|
||||||
listeners[player_name] = {}
|
listeners[player_name] = {}
|
||||||
end
|
end
|
||||||
listeners[player_name].hp = hp
|
listeners[player_name].hp = hp
|
||||||
listeners[player_name].dimension = dimension
|
listeners[player_name].dimension = dimension
|
||||||
|
listeners[player_name].underground = underground
|
||||||
elseif not handle and (not listener or (listener.day_count ~= day_count)) then
|
elseif not handle and (not listener or (listener.day_count ~= day_count)) then
|
||||||
play_song(track, player_name, hp, dimension, day_count)
|
local track = pick_track(dimension, underground)
|
||||||
|
if track then
|
||||||
|
play_song(track, player_name, hp, dimension, day_count, underground)
|
||||||
|
else
|
||||||
|
--minetest.log("no track found. weird")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
--minetest.log("else")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue