(YSK): restore BMP entries.

This commit is contained in:
morkt
2018-09-16 20:07:32 +04:00
parent e0c6bff0b9
commit 41f21eec9e

View File

@@ -44,7 +44,8 @@ namespace GameRes.Formats.GPlay
public YskOpener ()
{
Signatures = new uint[] { 0x36314141, 0x39324141, 0 };
// "AA1640124080", "AA7790743350"
Signatures = new uint[] { 0x36314141, 0x39324141, 0x37374141, 0 };
}
const ulong DefaultKey = 0x1234567812345678ul;
@@ -99,6 +100,28 @@ namespace GameRes.Formats.GPlay
return new BinMemoryStream (data, entry.Name);
}
}
else if (entry.Name.HasExtension ("BMP"))
{
var data = arc.File.View.ReadBytes (entry.Offset, entry.Size);
int bpp = data.ToUInt16 (0x1C);
if (4 == bpp)
data[0x1C] = 8;
else if (16 == bpp)
data[0x1C] = 24;
int pixels_src = 0x36;
int pixels_length = data.Length - pixels_src;
if (pixels_length > 0x493AA)
{
using (var dec = new DesTransform (DefaultKey))
{
for (int src = pixels_src + 0x493AA; src + 8 <= data.Length; src += 0xA0)
{
dec.TransformBlock (data, src, 8, data, src);
}
}
}
return new BinMemoryStream (data, entry.Name);
}
else
{
return base.OpenEntry (arc, entry);