[Add] More music improvements.
This commit is contained in:
		
							parent
							
								
									f38da7322b
								
							
						
					
					
						commit
						2c68677e81
					
				@ -87,6 +87,8 @@ end
 | 
			
		||||
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
 | 
			
		||||
@ -108,9 +110,9 @@ function choose_ambient()
 | 
			
		||||
  -- Check to see if changing faction zone.
 | 
			
		||||
  if not factions[last_sysFaction] then
 | 
			
		||||
    -- Table must not be empty.
 | 
			
		||||
    --if next(factions) ~= nil then
 | 
			
		||||
    if next(factions) ~= nil then
 | 
			
		||||
      force = true
 | 
			
		||||
    --end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if force then
 | 
			
		||||
      -- Give first value to last faction.
 | 
			
		||||
@ -130,20 +132,39 @@ function choose_ambient()
 | 
			
		||||
 | 
			
		||||
  -- Must be forced.
 | 
			
		||||
  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.
 | 
			
		||||
    add_neatral = false
 | 
			
		||||
    if factions["Collective"] then
 | 
			
		||||
      ambient = { "collective1" }
 | 
			
		||||
    elseif nebu and rnd.int(0,1) == 0 then
 | 
			
		||||
      ambient = { "ambient1" }
 | 
			
		||||
    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 = { "ambient2", "mission",
 | 
			
		||||
          "peace1", "peace2", "peace4", "peace6" }
 | 
			
		||||
      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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											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_table);  /* Open table. */
 | 
			
		||||
 | 
			
		||||
  /* Add our own. */
 | 
			
		||||
  lua_register(L, "include", llua_packfileLoader);
 | 
			
		||||
@ -126,6 +127,13 @@ int llua_loadBasic(lua_State* L) {
 | 
			
		||||
  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) {
 | 
			
		||||
  char* buf, *filename;
 | 
			
		||||
  uint32_t bufsize;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										38
									
								
								src/music.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								src/music.c
									
									
									
									
									
								
							@ -45,18 +45,22 @@ static int musicL_load(lua_State* L);
 | 
			
		||||
static int musicL_play(lua_State* L);
 | 
			
		||||
static int musicL_stop(lua_State* L);
 | 
			
		||||
static int musicL_isPlaying(lua_State* L);
 | 
			
		||||
static int musicL_current(lua_State* L);
 | 
			
		||||
static const luaL_reg music_methods[] = {
 | 
			
		||||
  { "load",       musicL_load       },
 | 
			
		||||
  { "play",       musicL_play       },
 | 
			
		||||
  { "stop",       musicL_stop       },
 | 
			
		||||
  { "isPlaying",  musicL_isPlaying  },
 | 
			
		||||
  {0, 0 }
 | 
			
		||||
  { "current",    musicL_current    },
 | 
			
		||||
  { 0, 0 }
 | 
			
		||||
}; /**< Music specific methods. */
 | 
			
		||||
 | 
			
		||||
/* What is available? */
 | 
			
		||||
static char** music_selection = NULL; /**< 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 SDL_RWops* music_rw    = NULL; /**< Current music RWops. */
 | 
			
		||||
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.
 | 
			
		||||
 *    @return 0 on success.
 | 
			
		||||
 */
 | 
			
		||||
@ -130,8 +132,6 @@ int music_init(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @fn void music_exit(void)
 | 
			
		||||
 *
 | 
			
		||||
 * @brief Exits the music subsystem.
 | 
			
		||||
 */
 | 
			
		||||
void music_exit(void) {
 | 
			
		||||
@ -145,8 +145,6 @@ void music_exit(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @fn static void music_free(void)
 | 
			
		||||
 *
 | 
			
		||||
 * @brief Free the current playing music.
 | 
			
		||||
 */
 | 
			
		||||
static void music_free(void) {
 | 
			
		||||
@ -156,6 +154,8 @@ static void music_free(void) {
 | 
			
		||||
    Mix_FreeMusic(music_music);
 | 
			
		||||
    /*SDL_FreeRW(music_rw);*/ /*FreeMusic frees it itself. */
 | 
			
		||||
    free(music_data);
 | 
			
		||||
    free(music_name);
 | 
			
		||||
    music_name  = NULL;
 | 
			
		||||
    music_music = NULL;
 | 
			
		||||
    music_rw    = NULL;
 | 
			
		||||
    music_data  = NULL;
 | 
			
		||||
@ -163,8 +163,6 @@ static void music_free(void) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @fn static int music_find(void)
 | 
			
		||||
 *
 | 
			
		||||
 * @brief Internal music loading routines.
 | 
			
		||||
 *    @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.
 | 
			
		||||
 *    @param vol Volume to set to (between 0 and 1).
 | 
			
		||||
 *    @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.
 | 
			
		||||
 *    @param name Name of the file to load.
 | 
			
		||||
 */
 | 
			
		||||
@ -245,6 +239,7 @@ void music_load(const char* name) {
 | 
			
		||||
 | 
			
		||||
  /* Load the data. */
 | 
			
		||||
  snprintf(filename, PATH_MAX, MUSIC_PREFIX"%s"MUSIC_SUFFIX, name);
 | 
			
		||||
  music_name = strdup(name);
 | 
			
		||||
  music_data = ldata_read(filename, &size);
 | 
			
		||||
  music_rw = SDL_RWFromMem(music_data, size);
 | 
			
		||||
  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.
 | 
			
		||||
 */
 | 
			
		||||
void music_play(void) {
 | 
			
		||||
@ -325,8 +318,6 @@ void music_setPos(double sec) {
 | 
			
		||||
/* Music lua stuff. */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @fn static int music_luaInit(void)
 | 
			
		||||
 *
 | 
			
		||||
 * @brief Initializes the music Lua control system.
 | 
			
		||||
 *    @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.
 | 
			
		||||
 */
 | 
			
		||||
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.
 | 
			
		||||
 *    @param L Lua State to load the music functions into.
 | 
			
		||||
 *    @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.
 | 
			
		||||
 *    @param situation choose a new music to play.
 | 
			
		||||
 *    @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.
 | 
			
		||||
 *
 | 
			
		||||
 * ARGH! DO NOT CALL MIX_* FUNCTIONS FROM WITHIN THE CALLBACKS!
 | 
			
		||||
@ -454,3 +437,8 @@ static int musicL_isPlaying(lua_State* L) {
 | 
			
		||||
  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