mirror of
https://github.com/crskycode/GARbro.git
synced 2024-11-26 23:24:00 +08:00
(SAF): added ContainedFormats property.
This commit is contained in:
parent
b180d929b6
commit
7562aa5449
@ -57,6 +57,11 @@ namespace GameRes.Formats.Rits
|
|||||||
const byte DefaultKey5 = 0xDF;
|
const byte DefaultKey5 = 0xDF;
|
||||||
const byte DefaultKey6 = 0xEF;
|
const byte DefaultKey6 = 0xEF;
|
||||||
|
|
||||||
|
public SafOpener ()
|
||||||
|
{
|
||||||
|
ContainedFormats = new[] { "HBM", "BMP", "PNG", "WAV", "OGG", "TXT" };
|
||||||
|
}
|
||||||
|
|
||||||
public override ArcFile TryOpen (ArcView file)
|
public override ArcFile TryOpen (ArcView file)
|
||||||
{
|
{
|
||||||
int id = file.View.ReadInt16 (0);
|
int id = file.View.ReadInt16 (0);
|
||||||
@ -71,7 +76,7 @@ namespace GameRes.Formats.Rits
|
|||||||
return null;
|
return null;
|
||||||
if (0x501 == id)
|
if (0x501 == id)
|
||||||
DecryptIndex (index_buffer, count, DefaultKey5);
|
DecryptIndex (index_buffer, count, DefaultKey5);
|
||||||
reader = new SafIndexReader5 (index_buffer, count);
|
reader = new SafIndexReader5 (this, index_buffer, count);
|
||||||
}
|
}
|
||||||
else if ((id & 0xFF00) == 0x600)
|
else if ((id & 0xFF00) == 0x600)
|
||||||
{
|
{
|
||||||
@ -86,7 +91,7 @@ namespace GameRes.Formats.Rits
|
|||||||
DecryptIndexV6 (index_buffer, count, DefaultKey6);
|
DecryptIndexV6 (index_buffer, count, DefaultKey6);
|
||||||
DecryptNames (names_buffer, names_length);
|
DecryptNames (names_buffer, names_length);
|
||||||
}
|
}
|
||||||
reader = new SafIndexReader6 (index_buffer, names_buffer, count);
|
reader = new SafIndexReader6 (this, index_buffer, names_buffer, count);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
@ -152,6 +157,7 @@ namespace GameRes.Formats.Rits
|
|||||||
|
|
||||||
internal class SafIndexReader5 : IIndexReader
|
internal class SafIndexReader5 : IIndexReader
|
||||||
{
|
{
|
||||||
|
private ArchiveFormat m_saf;
|
||||||
protected byte[] m_index;
|
protected byte[] m_index;
|
||||||
protected int m_count;
|
protected int m_count;
|
||||||
private List<Entry> m_dir;
|
private List<Entry> m_dir;
|
||||||
@ -165,8 +171,9 @@ namespace GameRes.Formats.Rits
|
|||||||
|
|
||||||
bool m_ignore_dirs = false;
|
bool m_ignore_dirs = false;
|
||||||
|
|
||||||
public SafIndexReader5 (byte[] index, int count)
|
public SafIndexReader5 (ArchiveFormat saf, byte[] index, int count)
|
||||||
{
|
{
|
||||||
|
m_saf = saf;
|
||||||
m_index = index;
|
m_index = index;
|
||||||
m_count = count;
|
m_count = count;
|
||||||
m_dir = new List<Entry> (count);
|
m_dir = new List<Entry> (count);
|
||||||
@ -220,14 +227,10 @@ namespace GameRes.Formats.Rits
|
|||||||
{
|
{
|
||||||
var name = ReadName (index_offset);
|
var name = ReadName (index_offset);
|
||||||
name = Path.Combine (dir_name, name);
|
name = Path.Combine (dir_name, name);
|
||||||
var entry = new PackedEntry
|
var entry = m_saf.Create<PackedEntry> (name);
|
||||||
{
|
entry.Offset = (long)m_index.ToUInt32 (index_offset+OffsetPos) << 11;
|
||||||
Name = name,
|
entry.Size = m_index.ToUInt32 (index_offset+SizePos);
|
||||||
Type = FormatCatalog.Instance.GetTypeFromName (name),
|
entry.UnpackedSize = m_index.ToUInt32 (index_offset+UnpackedPos);
|
||||||
Offset = (long)m_index.ToUInt32 (index_offset+OffsetPos) << 11,
|
|
||||||
Size = m_index.ToUInt32 (index_offset+SizePos),
|
|
||||||
UnpackedSize = m_index.ToUInt32 (index_offset+UnpackedPos),
|
|
||||||
};
|
|
||||||
entry.IsPacked = entry.UnpackedSize != 0;
|
entry.IsPacked = entry.UnpackedSize != 0;
|
||||||
m_dir.Add (entry);
|
m_dir.Add (entry);
|
||||||
}
|
}
|
||||||
@ -251,7 +254,7 @@ namespace GameRes.Formats.Rits
|
|||||||
{
|
{
|
||||||
byte[] m_names;
|
byte[] m_names;
|
||||||
|
|
||||||
public SafIndexReader6 (byte[] index, byte[] names, int count) : base (index, count)
|
public SafIndexReader6 (ArchiveFormat saf, byte[] index, byte[] names, int count) : base (saf, index, count)
|
||||||
{
|
{
|
||||||
m_names = names;
|
m_names = names;
|
||||||
|
|
||||||
@ -274,4 +277,9 @@ namespace GameRes.Formats.Rits
|
|||||||
return Binary.GetCString (m_names, name_pos);
|
return Binary.GetCString (m_names, name_pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Export(typeof(ResourceAlias))]
|
||||||
|
[ExportMetadata("Extension", "STR")]
|
||||||
|
[ExportMetadata("Target", "TXT")]
|
||||||
|
public class StrFormat : ResourceAlias { }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user