From 3034d55d47ea8325654900b80d7f5104c93929ae Mon Sep 17 00:00:00 2001 From: morkt Date: Mon, 24 Oct 2016 19:54:47 +0400 Subject: [PATCH] (DatOpener.QueryScheme): added game lookup by filename. --- ArcFormats/NonColor/ArcDAT.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ArcFormats/NonColor/ArcDAT.cs b/ArcFormats/NonColor/ArcDAT.cs index 8198d178..af7199da 100644 --- a/ArcFormats/NonColor/ArcDAT.cs +++ b/ArcFormats/NonColor/ArcDAT.cs @@ -107,12 +107,13 @@ namespace GameRes.Formats.NonColor if (!IsSaneCount (count)) return null; - var scheme = QueryScheme(); + var scheme = QueryScheme (file.Name); if (null == scheme) return null; var file_map = ReadFilenameMap (scheme); uint index_offset = 4; + int skipped = 0; var dir = new List (count); for (int i = 0; i < count; ++i) { @@ -135,7 +136,8 @@ namespace GameRes.Formats.NonColor } else { - System.Diagnostics.Trace.WriteLine ("Unknown hash", hash.ToString ("X8")); +// System.Diagnostics.Trace.WriteLine ("Unknown hash", hash.ToString ("X8")); + ++skipped; continue; } if (flags != 2) @@ -160,6 +162,8 @@ namespace GameRes.Formats.NonColor return null; dir.Add (entry); } + if (skipped != 0) + System.Diagnostics.Trace.WriteLine (string.Format ("Missing {0} names", skipped)); return new ArcDatArchive (file, this, dir, scheme.Hash); } @@ -259,8 +263,11 @@ namespace GameRes.Formats.NonColor set { KnownSchemes = ((ArcDatScheme)value).KnownSchemes; } } - Scheme QueryScheme () + Scheme QueryScheme (string arc_name) { + var title = FormatCatalog.Instance.LookupGame (arc_name); + if (!string.IsNullOrEmpty (title) && KnownSchemes.ContainsKey (title)) + return KnownSchemes[title]; var options = Query (arcStrings.ArcEncryptedNotice); Scheme scheme; if (string.IsNullOrEmpty (options.Scheme) || !KnownSchemes.TryGetValue (options.Scheme, out scheme))