private static CustomCharacterData ProcessCharacteryEntry(ZipFile zipFile, ZipEntry dataFileEntry) { var lines = dataFileEntry.ReadAllLines(); var data = ParseCharacterData(lines); string customCharacterDir = Path.GetDirectoryName(dataFileEntry.FileName); string customCharacterDirFilter = customCharacterDir + "/"; var directories = new Dictionary <string, List <Texture2D> >() { { customCharacterDir, null }, { $"{customCharacterDir}/sprites", null }, { $"{customCharacterDir}/foyercard", null }, { $"{customCharacterDir}/punchout", null }, { $"{customCharacterDir}/punchout/sprites", null } }; foreach (var entry in zipFile) { if (!entry.FileName.StartsWith(customCharacterDirFilter, StringComparison.OrdinalIgnoreCase)) { continue; } if (!entry.FileName.EndsWith(".png", StringComparison.OrdinalIgnoreCase)) { continue; } byte[] textureData = entry.ReadAllBytes(); string fileName = Path.GetFileName(entry.FileName); string resourceName = fileName.Substring(0, fileName.Length - 4); Texture2D texture = ResourceExtractor.BytesToTexture(textureData, resourceName); string directoryName = Path.GetDirectoryName(entry.FileName); if (directories.TryGetValue(directoryName, out var list)) { if (list == null) { list = new List <Texture2D>(); directories[directoryName] = list; } list.Add(texture); } else { Tools.Print($"Skipped loading {entry.FileName} in {zipFile.Name}"); } } List <Texture2D> textures; if (directories.TryGetValue($"{customCharacterDir}/sprites", out textures) && textures != null) { Tools.Print("Found: Sprites folder"); data.sprites = textures; } if (directories.TryGetValue($"{customCharacterDir}/foyercard", out textures) && textures != null) { Tools.Print("Found: Foyer card folder"); data.foyerCardSprites = textures; } if (directories.TryGetValue(customCharacterDir, out textures) && textures != null) { foreach (var tex in textures) { string name = tex.name.ToLower(); if (name.Equals("icon")) { Tools.Print("Found: Icon "); data.minimapIcon = tex; } if (name.Equals("bosscard")) { Tools.Print("Found: Bosscard"); data.bossCard = tex; } if (name.Equals("playersheet")) { Tools.Print("Found: Playersheet"); data.playerSheet = tex; } if (name.Equals("facecard")) { Tools.Print("Found: Facecard"); data.faceCard = tex; } } } if (directories.TryGetValue($"{customCharacterDir}/punchout/sprites", out textures) && textures != null) { Tools.Print("Found: Punchout Sprites folder"); data.punchoutSprites = textures; } if (directories.TryGetValue($"{customCharacterDir}/punchout", out textures) && textures != null) { data.punchoutFaceCards = new List <Texture2D>(); foreach (var tex in textures) { string name = tex.name.ToLower(); if (name.Contains("facecard1") || name.Contains("facecard2") || name.Contains("facecard3")) { data.punchoutFaceCards.Add(tex); Tools.Print("Found: Punchout facecard " + tex.name); } } } return(data); }