[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;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										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_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  },
 | 
				
			||||||
  {0, 0 }
 | 
					  { "current",    musicL_current    },
 | 
				
			||||||
 | 
					  { 0, 0 }
 | 
				
			||||||
}; /**< Music specific methods. */
 | 
					}; /**< Music specific methods. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* What is available? */
 | 
					/* What is available? */
 | 
				
			||||||
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