mirror of
https://github.com/lifegpc/GARbro.git
synced 2026-07-08 01:31:41 +08:00
added game title lookup facility.
This commit is contained in:
@@ -166,8 +166,8 @@ namespace GameRes.Formats.Cyberworks
|
||||
return null;
|
||||
if (!has_images)
|
||||
return new ArcFile (file, this, dir);
|
||||
var options = Query<BellOptions> (arcStrings.ArcEncryptedNotice);
|
||||
return new BellArchive (file, this, dir, options.Scheme);
|
||||
var scheme = QueryScheme (file.Name);
|
||||
return new BellArchive (file, this, dir, scheme);
|
||||
}
|
||||
|
||||
byte[] ReadToc (string toc_name)
|
||||
@@ -275,6 +275,15 @@ namespace GameRes.Formats.Cyberworks
|
||||
return v;
|
||||
}
|
||||
|
||||
AImageScheme QueryScheme (string arc_name)
|
||||
{
|
||||
var title = FormatCatalog.Instance.LookupGame (arc_name);
|
||||
if (!string.IsNullOrEmpty (title) && KnownSchemes.ContainsKey (title))
|
||||
return KnownSchemes[title];
|
||||
var options = Query<BellOptions> (arcStrings.ArcEncryptedNotice);
|
||||
return options.Scheme;
|
||||
}
|
||||
|
||||
public override ResourceOptions GetDefaultOptions ()
|
||||
{
|
||||
return new BellOptions { Scheme = GetScheme (Settings.Default.BELLTitle) };
|
||||
|
||||
@@ -71,7 +71,6 @@ namespace GameRes.Formats.KiriKiri
|
||||
public class Xp3Scheme : ResourceScheme
|
||||
{
|
||||
public Dictionary<string, ICrypt> KnownSchemes;
|
||||
public Dictionary<string, string> ExeMap;
|
||||
}
|
||||
|
||||
// Archive version 1: encrypt file first, then calculate checksum
|
||||
@@ -749,25 +748,15 @@ NextEntry:
|
||||
|
||||
ICrypt GuessCryptAlgorithm (ArcView file)
|
||||
{
|
||||
if (0 == KiriKiriScheme.ExeMap.Count)
|
||||
var title = FormatCatalog.Instance.LookupGame (file.Name);
|
||||
if (string.IsNullOrEmpty (title))
|
||||
return null;
|
||||
var exe_pattern = VFS.CombinePath (VFS.GetDirectoryName (file.Name), "*.exe");
|
||||
foreach (var exe in VFS.GetFiles (exe_pattern).Select (e => Path.GetFileName (e.Name)))
|
||||
{
|
||||
string title;
|
||||
if (KiriKiriScheme.ExeMap.TryGetValue (exe, out title))
|
||||
{
|
||||
Settings.Default.XP3Scheme = title;
|
||||
return GetScheme (title);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return GetScheme (title);
|
||||
}
|
||||
|
||||
static Xp3Scheme KiriKiriScheme = new Xp3Scheme
|
||||
{
|
||||
KnownSchemes = new Dictionary<string, ICrypt>(),
|
||||
ExeMap = new Dictionary<string, string>(),
|
||||
};
|
||||
|
||||
public static IDictionary<string, ICrypt> KnownSchemes
|
||||
|
||||
@@ -90,7 +90,7 @@ namespace GameRes.Formats.ShiinaRio // 椎名里緒
|
||||
if (index_offset >= file.MaxOffset)
|
||||
return null;
|
||||
|
||||
var scheme = QueryEncryption();
|
||||
var scheme = QueryEncryption (file.Name);
|
||||
if (null == scheme)
|
||||
return null;
|
||||
var decoder = new Decoder (version, scheme);
|
||||
@@ -282,10 +282,18 @@ namespace GameRes.Formats.ShiinaRio // 椎名里緒
|
||||
return new GUI.WidgetWARC();
|
||||
}
|
||||
|
||||
EncryptionScheme QueryEncryption ()
|
||||
EncryptionScheme QueryEncryption (string arc_name)
|
||||
{
|
||||
var options = Query<WarOptions> (arcStrings.ArcEncryptedNotice);
|
||||
return options.Scheme;
|
||||
EncryptionScheme scheme = null;
|
||||
var title = FormatCatalog.Instance.LookupGame (arc_name);
|
||||
if (!string.IsNullOrEmpty (title))
|
||||
scheme = GetScheme (title);
|
||||
if (null == scheme)
|
||||
{
|
||||
var options = Query<WarOptions> (arcStrings.ArcEncryptedNotice);
|
||||
scheme = options.Scheme;
|
||||
}
|
||||
return scheme;
|
||||
}
|
||||
|
||||
static EncryptionScheme GetScheme (string scheme)
|
||||
|
||||
Reference in New Issue
Block a user