[Add] More music improvements.
This commit is contained in:
parent
f38da7322b
commit
2c68677e81
@ -87,6 +87,8 @@ end
|
|||||||
last_sysFaction = nil
|
last_sysFaction = nil
|
||||||
last_sysNebuDens = nil
|
last_sysNebuDens = nil
|
||||||
last_sysNebuVol = nil
|
last_sysNebuVol = nil
|
||||||
|
ambient_neutral = { "ambient2", "mission",
|
||||||
|
"peace1", "peace2", "peace4", "peace6" }
|
||||||
-- Choose ambient songs.
|
-- Choose ambient songs.
|
||||||
function choose_ambient()
|
function choose_ambient()
|
||||||
force = true
|
force = true
|
||||||
@ -108,9 +110,9 @@ function choose_ambient()
|
|||||||
-- Check to see if changing faction zone.
|
-- Check to see if changing faction zone.
|
||||||
if not factions[last_sysFaction] then
|
if not factions[last_sysFaction] then
|
||||||
-- Table must not be empty.
|
-- Table must not be empty.
|
||||||
--if next(factions) ~= nil then
|
if next(factions) ~= nil then
|
||||||
force = true
|
force = true
|
||||||
--end
|
end
|
||||||
|
|
||||||
if force then
|
if force then
|
||||||
-- Give first value to last faction.
|
-- Give first value to last faction.
|
||||||
@ -130,20 +132,39 @@ function choose_ambient()
|
|||||||
|
|
||||||
-- Must be forced.
|
-- Must be forced.
|
||||||
if force then
|
if force then
|
||||||
-- Stop playing first and have this trigger again.
|
|
||||||
if music.isPlaying() then
|
|
||||||
music.stop()
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Choose the music, bias by faction first.
|
-- Choose the music, bias by faction first.
|
||||||
|
add_neatral = false
|
||||||
if factions["Collective"] then
|
if factions["Collective"] then
|
||||||
ambient = { "collective1" }
|
ambient = { "collective1" }
|
||||||
elseif nebu and rnd.int(0,1) == 0 then
|
elseif factions["Empire"] then
|
||||||
ambient = { "ambient1" }
|
ambient = { "empire1", "empire1", "empire1", "empire1" }
|
||||||
|
add_neutral = true
|
||||||
|
elseif nebu then
|
||||||
|
ambient = { "ambient1", "ambient1", "ambient1", "ambient1" }
|
||||||
|
add_neutral = true
|
||||||
else
|
else
|
||||||
ambient = { "ambient2", "mission",
|
ambient = ambient_neutral
|
||||||
"peace1", "peace2", "peace4", "peace6" }
|
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
|
end
|
||||||
|
|
||||||
-- Load music and play.
|
-- Load music and play.
|
||||||
|
BIN
snd/music/empire1.ogg
Normal file
BIN
snd/music/empire1.ogg
Normal file
Binary file not shown.
@ -119,6 +119,7 @@ int llua_loadBasic(lua_State* L) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
llua_load(L, luaopen_math); /* Open math. */
|
llua_load(L, luaopen_math); /* Open math. */
|
||||||
|
llua_load(L, luaopen_table); /* Open table. */
|
||||||
|
|
||||||
/* Add our own. */
|
/* Add our own. */
|
||||||
lua_register(L, "include", llua_packfileLoader);
|
lua_register(L, "include", llua_packfileLoader);
|
||||||
@ -126,6 +127,13 @@ int llua_loadBasic(lua_State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief include(string module)
|
||||||
|
*
|
||||||
|
* Loads a module into the current Lua state from inside the data file.
|
||||||
|
* @param module Name of the module to load.
|
||||||
|
* @return An error string on error.
|
||||||
|
*/
|
||||||
static int llua_packfileLoader(lua_State* L) {
|
static int llua_packfileLoader(lua_State* L) {
|
||||||
char* buf, *filename;
|
char* buf, *filename;
|
||||||
uint32_t bufsize;
|
uint32_t bufsize;
|
||||||
|
36
src/music.c
36
src/music.c
@ -45,11 +45,13 @@ static int musicL_load(lua_State* L);
|
|||||||
static int musicL_play(lua_State* L);
|
static int musicL_play(lua_State* L);
|
||||||
static int musicL_stop(lua_State* L);
|
static int musicL_stop(lua_State* L);
|
||||||
static int musicL_isPlaying(lua_State* L);
|
static int musicL_isPlaying(lua_State* L);
|
||||||
|
static int musicL_current(lua_State* L);
|
||||||
static const luaL_reg music_methods[] = {
|
static const luaL_reg music_methods[] = {
|
||||||
{ "load", musicL_load },
|
{ "load", musicL_load },
|
||||||
{ "play", musicL_play },
|
{ "play", musicL_play },
|
||||||
{ "stop", musicL_stop },
|
{ "stop", musicL_stop },
|
||||||
{ "isPlaying", musicL_isPlaying },
|
{ "isPlaying", musicL_isPlaying },
|
||||||
|
{ "current", musicL_current },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
}; /**< Music specific methods. */
|
}; /**< Music specific methods. */
|
||||||
|
|
||||||
@ -57,6 +59,8 @@ static const luaL_reg music_methods[] = {
|
|||||||
static char** music_selection = NULL; /**< Available music selection. */
|
static char** music_selection = NULL; /**< Available music selection. */
|
||||||
static int nmusic_selection = 0; /**< Size of available music selection. */
|
static int nmusic_selection = 0; /**< Size of available music selection. */
|
||||||
|
|
||||||
|
/* Current music. */
|
||||||
|
static char* music_name = NULL; /**< Current music name. */
|
||||||
static void* music_data = NULL; /**< Current music data. */
|
static void* music_data = NULL; /**< Current music data. */
|
||||||
static SDL_RWops* music_rw = NULL; /**< Current music RWops. */
|
static SDL_RWops* music_rw = NULL; /**< Current music RWops. */
|
||||||
static Mix_Music* music_music = NULL; /**< Current music. */
|
static Mix_Music* music_music = NULL; /**< Current music. */
|
||||||
@ -111,8 +115,6 @@ static int music_runLua(char* situation) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn int music init(void)
|
|
||||||
*
|
|
||||||
* @brief Initializes the music subsystem.
|
* @brief Initializes the music subsystem.
|
||||||
* @return 0 on success.
|
* @return 0 on success.
|
||||||
*/
|
*/
|
||||||
@ -130,8 +132,6 @@ int music_init(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn void music_exit(void)
|
|
||||||
*
|
|
||||||
* @brief Exits the music subsystem.
|
* @brief Exits the music subsystem.
|
||||||
*/
|
*/
|
||||||
void music_exit(void) {
|
void music_exit(void) {
|
||||||
@ -145,8 +145,6 @@ void music_exit(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn static void music_free(void)
|
|
||||||
*
|
|
||||||
* @brief Free the current playing music.
|
* @brief Free the current playing music.
|
||||||
*/
|
*/
|
||||||
static void music_free(void) {
|
static void music_free(void) {
|
||||||
@ -156,6 +154,8 @@ static void music_free(void) {
|
|||||||
Mix_FreeMusic(music_music);
|
Mix_FreeMusic(music_music);
|
||||||
/*SDL_FreeRW(music_rw);*/ /*FreeMusic frees it itself. */
|
/*SDL_FreeRW(music_rw);*/ /*FreeMusic frees it itself. */
|
||||||
free(music_data);
|
free(music_data);
|
||||||
|
free(music_name);
|
||||||
|
music_name = NULL;
|
||||||
music_music = NULL;
|
music_music = NULL;
|
||||||
music_rw = NULL;
|
music_rw = NULL;
|
||||||
music_data = NULL;
|
music_data = NULL;
|
||||||
@ -163,8 +163,6 @@ static void music_free(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn static int music_find(void)
|
|
||||||
*
|
|
||||||
* @brief Internal music loading routines.
|
* @brief Internal music loading routines.
|
||||||
* @return 0 on success.
|
* @return 0 on success.
|
||||||
*/
|
*/
|
||||||
@ -217,8 +215,6 @@ static int music_find(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn int music_volume(const double vol)
|
|
||||||
*
|
|
||||||
* @brief Set the music volume.
|
* @brief Set the music volume.
|
||||||
* @param vol Volume to set to (between 0 and 1).
|
* @param vol Volume to set to (between 0 and 1).
|
||||||
* @return 0 on success.
|
* @return 0 on success.
|
||||||
@ -230,8 +226,6 @@ int music_volume(const double vol) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn void music_load(const char* name)
|
|
||||||
*
|
|
||||||
* @brief Load the music by name.
|
* @brief Load the music by name.
|
||||||
* @param name Name of the file to load.
|
* @param name Name of the file to load.
|
||||||
*/
|
*/
|
||||||
@ -245,6 +239,7 @@ void music_load(const char* name) {
|
|||||||
|
|
||||||
/* Load the data. */
|
/* Load the data. */
|
||||||
snprintf(filename, PATH_MAX, MUSIC_PREFIX"%s"MUSIC_SUFFIX, name);
|
snprintf(filename, PATH_MAX, MUSIC_PREFIX"%s"MUSIC_SUFFIX, name);
|
||||||
|
music_name = strdup(name);
|
||||||
music_data = ldata_read(filename, &size);
|
music_data = ldata_read(filename, &size);
|
||||||
music_rw = SDL_RWFromMem(music_data, size);
|
music_rw = SDL_RWFromMem(music_data, size);
|
||||||
music_music = Mix_LoadMUS_RW(music_rw);
|
music_music = Mix_LoadMUS_RW(music_rw);
|
||||||
@ -255,8 +250,6 @@ void music_load(const char* name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn void music_play(void)
|
|
||||||
*
|
|
||||||
* @brief Play the loaded music.
|
* @brief Play the loaded music.
|
||||||
*/
|
*/
|
||||||
void music_play(void) {
|
void music_play(void) {
|
||||||
@ -325,8 +318,6 @@ void music_setPos(double sec) {
|
|||||||
/* Music lua stuff. */
|
/* Music lua stuff. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn static int music_luaInit(void)
|
|
||||||
*
|
|
||||||
* @brief Initializes the music Lua control system.
|
* @brief Initializes the music Lua control system.
|
||||||
* @return 0 on success.
|
* @return 0 on success.
|
||||||
*/
|
*/
|
||||||
@ -364,8 +355,6 @@ static int music_luaInit(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn static void music_luaQuit(void)
|
|
||||||
*
|
|
||||||
* @brief Quit the music Lua control system.
|
* @brief Quit the music Lua control system.
|
||||||
*/
|
*/
|
||||||
static void music_luaQuit(void) {
|
static void music_luaQuit(void) {
|
||||||
@ -379,8 +368,6 @@ static void music_luaQuit(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn int lua_loadMusic(lua_State* L, int read_only)
|
|
||||||
*
|
|
||||||
* @brief Load the music functions into a lua_State.
|
* @brief Load the music functions into a lua_State.
|
||||||
* @param L Lua State to load the music functions into.
|
* @param L Lua State to load the music functions into.
|
||||||
* @param read_only Load the write functions?
|
* @param read_only Load the write functions?
|
||||||
@ -393,8 +380,6 @@ int lua_loadMusic(lua_State* L, int read_only) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn int music_choose(char* situation)
|
|
||||||
*
|
|
||||||
* @brief Actually run the music stuff, based on situation.
|
* @brief Actually run the music stuff, based on situation.
|
||||||
* @param situation choose a new music to play.
|
* @param situation choose a new music to play.
|
||||||
* @return 0 on success.
|
* @return 0 on success.
|
||||||
@ -408,8 +393,6 @@ int music_choose(char* situation) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @fn static void music_rechoose(void)
|
|
||||||
*
|
|
||||||
* @brief Attempts to rechoose the music.
|
* @brief Attempts to rechoose the music.
|
||||||
*
|
*
|
||||||
* ARGH! DO NOT CALL MIX_* FUNCTIONS FROM WITHIN THE CALLBACKS!
|
* ARGH! DO NOT CALL MIX_* FUNCTIONS FROM WITHIN THE CALLBACKS!
|
||||||
@ -454,3 +437,8 @@ static int musicL_isPlaying(lua_State* L) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int musicL_current(lua_State* L) {
|
||||||
|
lua_pushstring(L, (music_name != NULL) ? music_name : "none");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user