public static string[] ForPac(TracklistModifier modifier, CMM cmm, string filename) { filename = filename.ToLower(); string key = filename.Substring(0, filename.IndexOfAny("_.".ToCharArray())); int stageId = StageIDMap.StageIDForPac(filename); if (cmm != null && cmm.Map.TryGetValue(stageId, out IEnumerable <Song> songs)) { return(songs.Select(s => s.Filename).ToArray()); } // Tracklist Modifier 1.0 [Phantom Wings] if (cmm.TracklistModifier != null) { byte currentTracklistId = cmm.TracklistModifier[stageId]; for (int i = 0; i < CMM.StandardCMMTracklistModifierData.Length; i++) { if (CMM.StandardCMMTracklistModifierData[i] == currentTracklistId) { int originalStageId = i; // Make sure the index is a valid stage ID. Some bytes // appear more than once, the first time at an index // that's not a valid stage ID (e.g. Battlefield's 00 // at index 0 or Bridge of Eldin's 0A at index 10.) if (Stage.Stages.Any(s => s.ID == i)) { stageId = originalStageId; break; } } } } // Tracklist Modifier [standardtoaster] stageId = modifier[stageId]; if (stageId == 5 && filename.StartsWith("stgmariopast_00")) { return(new[] { "A01", "A16", "A10" }); } if (stageId == 5 && filename.StartsWith("stgmariopast_01")) { return(new[] { "A02", "A03", "A04" }); } if (dict.TryGetValue(stageId, out string[] ret))
public Song GetSong(string filename, Song originalSong) { int stageID = StageIDMap.StageIDForPac(filename); if (AlternateStageLoaderData.TryGetDefinition(filename, out AlternateStageEntry entry)) { foreach (AlternateStageEntry.Alternate alt in entry.ButtonActivated.Where(b => filename.EndsWith($"_{b.Letter}.pac", StringComparison .InvariantCultureIgnoreCase))) { Song newSong = AltStageSongForcer.GetSong(stageID, alt.ButtonMask, originalSong); if (newSong.ID != originalSong.ID) { return(newSong); } } } return(SongLoaders.GetSong(stageID, originalSong)); }