public string VerifyArchive() { string result = ""; char endl = '\n'; ProgressBar progressBar = new ProgressBar("Verify Archive"); progressBar.SetProgressBar(0, assetDictionary.Values.Count + 1, 1); progressBar.Show(); //foreach (Section_LHDR LHDR in DICT.LTOC.LHDRList) // foreach (uint assetID in LHDR.assetIDlist) // if (!ContainsAsset(assetID)) // result += $"Archive: Asset 0x{assetID.ToString("X8")} appears to be present in a layer, but it's not in the AHDR dictionary. This archive is likely unusable." + endl; List <Asset> ordered = assetDictionary.Values.OrderBy(f => f.assetName).ToList(); ordered = ordered.OrderBy(f => f.assetType).ToList(); if (!ContainsAssetWithType(AssetType.JSP)) { result += $"Archive: Does not contain any JSP asset." + endl; } progressBar.PerformStep(); foreach (Asset asset in ordered) { bool found = false; foreach (Section_LHDR LHDR in DICT.LTOC.LHDRList) { foreach (uint assetID in LHDR.assetIDlist) { if (assetID == asset.assetID) { if (found == false) { found = true; } else { result += $"Archive: Asset {asset} is present in more than one layer. This is unexpected." + endl; } } } } if (found == false) { result += $"Archive: Asset {asset} appears to not be present in the AHDR dictionary, but it's not in any layer. This archive is likely unusable." + endl; } List <string> resultParam = new List <string>(); try { asset.Verify(ref resultParam); foreach (string s in resultParam) { result += $"[{asset.assetType}] {asset.assetName}: " + s + endl; } } catch (Exception e) { result += $"Failed verification on [{asset.assetType}] {asset.assetName}: " + e.Message + endl; } progressBar.PerformStep(); } progressBar.Close(); return(result); }