sm64coopdx/mods/arena/arena-sound.lua

130 lines
4.9 KiB
Lua

local m = gMarioStates[0]
local np = gNetworkPlayers[0]
local pauseMenuShouldShowMusic = true
local pauseMenuShowLevelID = true
local curMap = -1
local audioMainPaused = false
local audioMain --Used for the main audio
local audioSpecial --Used for things like cap music
local audioCurSeq
local bgms = {
[55] = {audio='snow.ogg', loopEnd = 500, loopStart = 0, volume = 1, name="Frosty Citadel - Sonic Gaiden" },
[56] = {audio='rainbow.ogg', loopEnd = 148.657, loopStart = 12.406, volume = 1, name="Rainbow Road - Coop Deluxe" },
[57] = {audio='city.ogg', loopEnd = 500, loopStart = 06.975, volume = 1, name="City Outskirts - Sonic Megamix" }
}
-- disable cap music
function music()
if bgms[np.currLevelNum] then
stop_cap_music()
end
end
hook_event(HOOK_UPDATE, music)
function handleMusic()
------------------------------------------------------
-- Handle stopping/starting of music --
------------------------------------------------------
--Handle main course music
if curMap ~= np.currLevelNum and m.area.macroObjects then
curMap = np.currLevelNum
audioCurSeq = get_current_background_music()
if audioMain then
audio_stream_stop(audioMain)
audio_stream_destroy(audioMain)
audioMain = nil
end
if bgms[curMap] and bgms[curMap].audio then
set_background_music(0,0,0)
audioMain = audio_stream_load(bgms[curMap].audio)
if audioMain then
audio_stream_set_looping(audioMain, true)
audio_stream_play(audioMain, true, bgms[curMap].volume)
print("Playing new audio " .. bgms[curMap].name)
else
djui_popup_create('Missing audio!: ' .. bgms[curMap].audio, 10)
print("Attempted to load filed audio file, but couldn't find it on the system: " .. bgms[curMap].audio)
end
else
print("No audio for this map, so not stopping default: " .. curMap)
end
end
--Handle cap music
if m.capTimer > 0 and bgms[-2] then
--Handle pausing main streamed music, if applicable.
if audioMain and not audioMainPaused then
audioMainPaused = true
audio_stream_pause(audioMain)
end
--Start up cap music if it's defined.
if not audioSpecial then
set_background_music(0,0,0)
stop_cap_music()
audioSpecial = audio_stream_load(bgms[-2].audio)
if audioSpecial then
audio_stream_set_looping(audioSpecial, true)
audio_stream_play(audioSpecial, true, bgms[-2].volume)
print("Playing cap audio " .. bgms[-2].name)
else
djui_popup_create('Missing audio!: ' .. bgms[-2].audio, 3)
print("Attempted to load filed audio file, but couldn't find it on the system: " .. bgms[-2].audio)
end
end
else
if audioSpecial then
audio_stream_stop(audioSpecial)
audio_stream_destroy(audioSpecial)
audioSpecial = nil
if audioMain and audioMainPaused then
audioMainPaused = false
audio_stream_play(audioMain, false, bgms[curMap].volume)
else
set_background_music(0, audioCurSeq, 10)
end
end
end
if audioMain then
audio_stream_set_volume(audioMain, is_game_paused() and bgms[curMap].volume/3.5 or bgms[curMap].volume)
local curPosition = audio_stream_get_position(audioMain)
if curPosition >= bgms[curMap].loopEnd then
local minus = bgms[curMap].loopStart - bgms[curMap].loopEnd
audio_stream_set_position(audioMain, curPosition - math.abs(minus))
end
end
if audioSpecial then
local curPosition = audio_stream_get_position(audioSpecial)
if curPosition >= bgms[-2].loopEnd then
local minus = bgms[-2].loopStart - bgms[-2].loopEnd
audio_stream_set_position(audioSpecial, curPosition - math.abs(minus))
end
end
end
function hud_render()
if pauseMenuShouldShowMusic and is_game_paused() then
djui_hud_set_resolution(RESOLUTION_DJUI)
djui_hud_set_font(FONT_NORMAL)
local screenWidth = djui_hud_get_screen_width()
local screenHeight = djui_hud_get_screen_height()
local height = 64
local y = screenHeight - height
djui_hud_set_color(200,200,200,255)
local text
if pauseMenuShowLevelID then
text = "Level ID: " .. np.currLevelNum
elseif audioSpecial then
text = "Music: " .. bgms[-2].name
elseif audioMain then
text = "Music: " .. bgms[curMap].name
end
djui_hud_print_text(text, 5, y, 1)
end
end
hook_event(HOOK_ON_HUD_RENDER, hud_render)
hook_event(HOOK_UPDATE, handleMusic)