243 lines
5.0 KiB
Lua
243 lines
5.0 KiB
Lua
--[[
|
|
-- Music will get called with a string parameter indicating status.
|
|
-- Valid Parameters:
|
|
-- load - game is loading.
|
|
-- land - player landed.
|
|
-- takeoff - player took off.
|
|
-- combat - Player just got a hostile on screen.
|
|
-- idle - Current playing music ran out.
|
|
]]--
|
|
last = "idle"
|
|
function choose(str)
|
|
-- Means to only change song if needed.
|
|
if str == nil then
|
|
str = "ambient"
|
|
end
|
|
|
|
if str == "load" then
|
|
choose_load()
|
|
|
|
elseif str == "intro" then
|
|
choose_intro()
|
|
|
|
elseif str == "credits" then
|
|
choose_credits()
|
|
|
|
elseif str == "land" then
|
|
choose_land()
|
|
|
|
elseif str == "takeoff" then
|
|
choose_takeoff()
|
|
|
|
elseif str == "ambient" then
|
|
choose_ambient()
|
|
|
|
elseif str == "combat" then
|
|
choose_combat()
|
|
|
|
elseif str == "idle" and last ~= "idle" then
|
|
-- We'll play the same as last unless it was takeoff.
|
|
if last == "takeoff" then
|
|
choose_ambient()
|
|
else
|
|
choose(last)
|
|
end
|
|
end
|
|
|
|
if str ~= "idle" then
|
|
last = str -- Save the last string so we can use it.
|
|
end
|
|
end
|
|
|
|
function checkIfPlayingOrStop(song)
|
|
if music.isPlaying() then
|
|
if music.current() ~= song then
|
|
music.stop()
|
|
end
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Loading songs.
|
|
function choose_load()
|
|
load_song = "machina"
|
|
-- Don't play again if needed.
|
|
if checkIfPlayOrStop(load_song) then
|
|
return
|
|
end
|
|
music.load(load_song)
|
|
music.play()
|
|
music.play()
|
|
end
|
|
|
|
-- Intro music.
|
|
function choose_intro()
|
|
intro_song = "intro"
|
|
-- Don't play again if needed.
|
|
if checkIfPlayingOrStop(intro_song) then
|
|
return
|
|
end
|
|
music.load(intro_song)
|
|
music.play()
|
|
end
|
|
|
|
-- Credits music.
|
|
function choose_credits()
|
|
credits_song = "empire1"
|
|
-- Don't play again if needed.
|
|
if checkIfPlayingOrStop(credits_song) then
|
|
return
|
|
end
|
|
music.load(credits_song)
|
|
music.play()
|
|
end
|
|
|
|
-- Landing songs.
|
|
function choose_land()
|
|
planet = space.getPlanet()
|
|
class = planet:class()
|
|
|
|
if class == "M" then
|
|
mus = "agriculture"
|
|
elseif name == "Anecu" then -- TODO: We need a way to differenciate aquatics.
|
|
mus = "ocean"
|
|
elseif class == "P" then
|
|
mus = "snow"
|
|
else
|
|
if planet:services() > 0 then
|
|
mus = "cosmostation"
|
|
else
|
|
mus = "agriculture"
|
|
end
|
|
end
|
|
|
|
music.load(mus)
|
|
music.play()
|
|
end
|
|
|
|
-- Takeoff songs.
|
|
function choose_takeoff()
|
|
-- No need to restart.
|
|
if last == "takeoff" and music.isPlaying() then
|
|
return
|
|
end
|
|
takeoff = { "liftoff", "launch2", "launch3chatstart" }
|
|
music.load(takeoff[rnd.int(1, #takeoff)])
|
|
music.play()
|
|
end
|
|
|
|
-- Save old data.
|
|
last_sysFaction = nil
|
|
last_sysNebuDens = nil
|
|
last_sysNebuVol = nil
|
|
ambient_neutral = { "ambient2", "mission",
|
|
"peace1", "peace2", "peace4", "peace6" }
|
|
-- Choose ambient songs.
|
|
function choose_ambient()
|
|
force = true
|
|
|
|
-- Check to see if we want to update.
|
|
if music.isPlaying() then
|
|
if last == "takeoff" then
|
|
return
|
|
elseif last == "ambient" then
|
|
force = false
|
|
end
|
|
end
|
|
|
|
-- Get information about the current system.
|
|
sys = space.getSystem()
|
|
factions = sys:faction()
|
|
nebu_dens, nebu_vol = sys:nebulae()
|
|
|
|
-- Check to see if changing faction zone.
|
|
if not factions[last_sysFaction] then
|
|
-- Table must not be empty.
|
|
if next(factions) ~= nil then
|
|
force = true
|
|
end
|
|
|
|
if force then
|
|
-- Give first value to last faction.
|
|
for k, v in pairs(factions) do
|
|
last_sysFaction = k
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Check to see if entering nebulae.
|
|
nebu = nebu_dens > 0
|
|
if nebu ~= last_sysNebuDens then
|
|
force = true
|
|
last_sysNebuDens = nebu
|
|
end
|
|
|
|
-- Must be forced.
|
|
if force then
|
|
-- Choose the music, bias by faction first.
|
|
add_neatral = false
|
|
if factions["Collective"] then
|
|
ambient = { "collective1" }
|
|
elseif factions["Empire"] then
|
|
ambient = { "empire1", "empire1", "empire1", "empire1" }
|
|
add_neutral = true
|
|
elseif nebu then
|
|
ambient = { "ambient1", "ambient1", "ambient1", "ambient1" }
|
|
add_neutral = true
|
|
else
|
|
ambient = ambient_neutral
|
|
end
|
|
|
|
-- Check if we need to append neutral ambient songs.
|
|
if add_neutral then
|
|
for k,v in pairs(ambient_neutral) do
|
|
table.insert(ambient, v)
|
|
end
|
|
end
|
|
|
|
-- Make sure it's not already in the list or that we have to stop the
|
|
-- currently playing song.
|
|
if music.isPlaying() then
|
|
cur = music.current()
|
|
for k,v in pairs(ambient) do
|
|
if cur == v then
|
|
return
|
|
end
|
|
end
|
|
|
|
music.stop()
|
|
return
|
|
end
|
|
|
|
-- Load music and play.
|
|
music.load(ambient[rnd.int(1, #ambient)])
|
|
music.play()
|
|
end
|
|
end
|
|
|
|
-- Battle songs.
|
|
function choose_combat()
|
|
-- Stop music first, but since it'll get saved it'll run this next.
|
|
if music.isPlaying() then
|
|
music.stop()
|
|
return
|
|
end
|
|
|
|
-- Get some data about the system.
|
|
sys = space.getSystem()
|
|
nebu_dens, nebu_vol = sys:nebulae()
|
|
|
|
nebu = nebu_dens > 0
|
|
if nebu then
|
|
combat = { "nebu_battle1" }
|
|
else
|
|
combat = { "galacticbattle" }
|
|
end
|
|
|
|
music.load(combat[rnd.int(1, #combat)])
|
|
music.play()
|
|
end
|
|
|