internal void Sort(FolderAsset parent, string name, int fileNameBaseOffset, byte[] fileNames) { int fileNameOffset = FileNameOffset - fileNameBaseOffset; int fileIndex = FileIndex; if (Used) { throw new InvalidDataException(); } Used = true; Parent = parent; Name = name; while (true) { byte nameCode = fileNames[fileNameOffset++]; if (nameCode == 0) { break; } byte nameLength = (byte)(nameCode & 0x7F); bool isFolder = (nameCode & 0x80) != 0; string childName = Encoding.ASCII.GetString(fileNames, fileNameOffset, nameLength); fileNameOffset += nameLength; if (isFolder) { int folderIndex = fileNames[fileNameOffset++] + (fileNames[fileNameOffset++] << 8); RomFolder folder = Rom.Folders[folderIndex & 0xFFF]; folder.Unknown2 = (byte)(folderIndex >> 12); if (folder.Unknown2 != 15) { } folder.Sort(this, childName, fileNameBaseOffset, fileNames); } else { RomFile file = Rom.Files[fileIndex++]; file.Sort(this, childName); } } }