public List <string> GetAllPaths() { List <string> returner = new List <string>(); //Look in map file first if (ProjectProperties.CurrentProjectPropperties.InputMap != null && ProjectProperties.CurrentProjectPropperties.InputMap.Exists) { if (ProjectProperties.CurrentProjectPropperties.InputMap is FileInfo) { using ( MpqEditor.MpqReader reader = new MpqEditor.MpqReader(ProjectProperties.CurrentProjectPropperties.InputMap.FullName)) { string[] files = reader.FindFiles(SupportedFiles); foreach (string file in files) { if (!returner.Contains(file)) { returner.Add(file); } } } } } //Look in standard library after if (Options.General.SC2Exe == null || !Options.General.SC2Exe.Exists) { RegistryKey key = Registry.LocalMachine; key = key.OpenSubKey("SOFTWARE\\Wow6432Node\\Blizzard Entertainment\\Starcraft II Retail"); Options.General.SC2Exe = new FileInfo((string)key.GetValue("GamePath")); } string sc2Dir = Options.General.SC2Exe.Directory.FullName; //no need to find new versions, just peek into the data directory to get all file path. //SC2Assets\Assets\Textures DirectoryInfo versionDir = new DirectoryInfo(Options.General.SC2Exe.Directory + @"\SC2Data"); String strModDir = versionDir.FullName; using (CascStorageContext casc = new CascStorageContext(strModDir)) { var files = casc.SearchFiles("*");//currently, only * operation is supported. foreach (var file in files) { //ignore if (!file.FileName.Contains(@"base.sc2assets/Assets/Textures/")) { continue; } bool supported = false; foreach (var ftype in SupportedFiles) { if (file.FileName.EndsWith(ftype.Substring(1))) { supported = true; } } if (!supported) { continue; } //add files to returner if (!returner.Contains(file.FileName)) { returner.Add(file.FileName); } } } //look in mod directories Stack <DirectoryInfo> modDirs = new Stack <DirectoryInfo>(); modDirs.Push(new DirectoryInfo(Options.General.SC2Exe.Directory + @"\Mods")); List <FileInfo> modfiles = new List <FileInfo>(); //parse base mods and store SC2Mod files while (modDirs.Count != 0) { DirectoryInfo curVdir = modDirs.Pop(); if (!curVdir.Exists) { continue; } foreach (var subDir in curVdir.GetDirectories()) { List <FileInfo> filesToSearch = new List <FileInfo>(); filesToSearch.AddRange(subDir.GetFiles("*.SC2Mod")); if (filesToSearch.Count > 0) { modfiles.AddRange(filesToSearch); } filesToSearch.Clear(); } } //Read Assets\Textures\files foreach (var archive in modfiles) { MpqEditor.MpqReader fileReader = new MpqEditor.MpqReader(archive.FullName); { if (!fileReader.Valid) { continue; } //fileReader.FindFiles("*.SC2Data"); foreach (var supportedfile in SupportedFiles) { string[] textureFiles = fileReader.FindFiles("Assets\\Textures\\" + supportedfile); foreach (var imagefile in textureFiles) { if (!returner.Contains(imagefile)) { returner.Add(imagefile); } } } fileReader.Dispose(); } } //no need to find new versions //StarCraft II\Versions\<newest>\patch.SC2Archive\Mods\Core.SC2Mod\Base.SC2Assets\Assets\Textures\.. //StarCraft II\Versions\<newest>\patch.SC2Archive\Mods\Liberty.SC2Mod\Base.SC2Assets\Assets\Textures\.. //StarCraft II\Versions\<newest>\patch.SC2Archive\Campaigns\Liberty.SC2Campaign\Base.SC2Assets\Assets\Textures\.. //StarCraft II\Mods\Core.SC2Mod\base.SC2Assets\Assets\Textures\.. //StarCraft II\Mods\Liberty.SC2Mod\base.SC2Assets\Assets\Textures\.. //StarCraft II\Mods\Liberty.SC2Mod\enGB.SC2Assets\Assets\Textures\.. //StarCraft II\*.SC2Assets|Assets\Textures\.. returner.Sort(); return(returner); }