public List <List <ScenarioData> > CreateScenarioIndexGroups(ScenarioType type, MapList.MapList maplist, IContainer gameDataPath, TextUtils.GameTextEncoding encoding, EndianUtils.Endianness endian, BitUtils.Bitness bits) { SortedDictionary <int, ScenarioWebsiteName> websiteNames = ScenarioWebsiteName.GenerateWebsiteNames(this.Version); Util.Assert(maplist.MapNames.Count == websiteNames.Count); List <ScenarioData> scenes = new List <ScenarioData>(); List <ScenarioFile.ScenarioFile> scenarioFiles = new List <ScenarioFile.ScenarioFile>(); bool haveSeenEP_030_010 = false; foreach (var d in websiteNames) { var names = maplist.MapNames[d.Key]; if (d.Value.Type != type) { continue; } string episodeID = names.Name3 == "dummy" ? names.Name1 : names.Name3; // the game has this file twice in scenario.dat, so ignore the first instance we encounter, as presumably the game would overwrite the first instance with the second? if (!haveSeenEP_030_010 && episodeID == "EP_030_010") { haveSeenEP_030_010 = true; continue; } int num = d.Key; var metadata = new ScenarioData() { ScenarioDatIndex = num, EpisodeId = episodeID, HumanReadableName = d.Value.Description != null ? d.Value.Description : episodeID }; System.IO.Stream stream = GenerateWebsite.TryGetScenarioFile(gameDataPath, num, Locale, Version); if (stream != null) { var orig = new ScenarioFile.ScenarioFile(stream, encoding, endian, bits); orig.Metadata = metadata; scenarioFiles.Add(orig); scenes.Add(metadata); } } foreach (var s in scenarioFiles.OrderBy(x => x.Metadata.EpisodeId)) { this.ScenarioFiles.Add(s.Metadata.EpisodeId, s); } return(ScenarioData.ProcessScenesToGroups(scenes)); }