mirror of
https://github.com/crskycode/GARbro.git
synced 2025-01-11 12:39:16 +08:00
(rUGP): adjusted deserialization.
This commit is contained in:
parent
87fa9df020
commit
f099e55ac6
@ -55,6 +55,7 @@ namespace GameRes.Formats.Rugp
|
|||||||
{ "CIcon", "image" },
|
{ "CIcon", "image" },
|
||||||
{ "CRsa", "script" },
|
{ "CRsa", "script" },
|
||||||
{ "CVmFunc", "script" },
|
{ "CVmFunc", "script" },
|
||||||
|
{ "CWaveAudio", "audio" },
|
||||||
{ "CrelicHicompAudio", "audio" },
|
{ "CrelicHicompAudio", "audio" },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -277,6 +278,7 @@ namespace GameRes.Formats.Rugp
|
|||||||
public ArrayList LoadArray { get { return m_LoadArray; } }
|
public ArrayList LoadArray { get { return m_LoadArray; } }
|
||||||
public bool IsEncrypted { get { return 0 != (m_field_4C & 4); } }
|
public bool IsEncrypted { get { return 0 != (m_field_4C & 4); } }
|
||||||
private bool m_field_5C { get { return IsEncrypted; } }
|
private bool m_field_5C { get { return IsEncrypted; } }
|
||||||
|
public int Schema { get; private set; }
|
||||||
|
|
||||||
public const uint EncryptedSignature = 0x1EDB927C;
|
public const uint EncryptedSignature = 0x1EDB927C;
|
||||||
public const uint ObjectSignature = 0x29F6CBA4;
|
public const uint ObjectSignature = 0x29F6CBA4;
|
||||||
@ -382,13 +384,17 @@ namespace GameRes.Formats.Rugp
|
|||||||
if (!CoreSignatures.Contains (signature))
|
if (!CoreSignatures.Contains (signature))
|
||||||
throw new InvalidFormatException ("[RIO] invalid signature");
|
throw new InvalidFormatException ("[RIO] invalid signature");
|
||||||
int version = ReadUInt16();
|
int version = ReadUInt16();
|
||||||
if (version < 0x10 || version > 0x3FFF)
|
if (version >= 0x10 && version <= 0x3FFF)
|
||||||
throw new InvalidFormatException ("[RIO] invalid version");
|
|
||||||
if (version >= 0x11)
|
|
||||||
{
|
{
|
||||||
m_field_4C &= 0xFFFF;
|
Schema = version;
|
||||||
m_field_4C |= ReadUInt16() << 16;
|
if (version >= 0x11)
|
||||||
|
{
|
||||||
|
m_field_4C &= 0xFFFF;
|
||||||
|
m_field_4C |= ReadUInt16() << 16;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
m_input.Seek (-2, SeekOrigin.Current);
|
||||||
if (EncryptedSignature == signature)
|
if (EncryptedSignature == signature)
|
||||||
m_field_4C |= 0xC;
|
m_field_4C |= 0xC;
|
||||||
|
|
||||||
@ -1316,7 +1322,7 @@ namespace GameRes.Formats.Rugp
|
|||||||
{
|
{
|
||||||
field_24 = arc.ReadInt32();
|
field_24 = arc.ReadInt32();
|
||||||
}
|
}
|
||||||
else
|
else if (Version >= 2)
|
||||||
{
|
{
|
||||||
if (field_28.ToUInt16 (0) < 0x7D3)
|
if (field_28.ToUInt16 (0) < 0x7D3)
|
||||||
field_24 = 2;
|
field_24 = 2;
|
||||||
|
@ -53,6 +53,7 @@ namespace GameRes.Formats.Rugp
|
|||||||
Height = file.ReadUInt16(),
|
Height = file.ReadUInt16(),
|
||||||
BPP = 32,
|
BPP = 32,
|
||||||
ObjectOffset = object_pos,
|
ObjectOffset = object_pos,
|
||||||
|
Schema = rio.Schema,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +61,11 @@ namespace GameRes.Formats.Rugp
|
|||||||
{
|
{
|
||||||
var meta = (RioMetaData)info;
|
var meta = (RioMetaData)info;
|
||||||
file.Position = meta.ObjectOffset + 0x14;
|
file.Position = meta.ObjectOffset + 0x14;
|
||||||
int size = file.ReadInt32();
|
int size;
|
||||||
|
if (meta.Schema != 0)
|
||||||
|
size = file.ReadInt32();
|
||||||
|
else
|
||||||
|
size = (int)meta.Width * (int)meta.Height * 4;
|
||||||
var pixels = file.ReadBytes (size);
|
var pixels = file.ReadBytes (size);
|
||||||
return ImageData.Create (info, PixelFormats.Bgra32, null, pixels);
|
return ImageData.Create (info, PixelFormats.Bgra32, null, pixels);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user