Example #1
0
        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));
        }