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));
        }