Relocate header/footer checks

This commit is contained in:
Kaphotics 2016-09-23 18:47:03 -07:00
parent c76aa1d5d8
commit 3bb2970d68
2 changed files with 27 additions and 21 deletions

View File

@ -605,26 +605,7 @@ private void openFile(byte[] input, string path, string ext)
MysteryGift tg; PKM temp; string c;
byte[] footer = new byte[0];
byte[] header = new byte[0];
#region Header/Footer detect
if (input.Length > SaveUtil.SIZE_G4RAW) // DeSmuME
{
bool dsv = SaveUtil.FOOTER_DSV.SequenceEqual(input.Skip(input.Length - SaveUtil.FOOTER_DSV.Length));
if (dsv)
{
footer = input.Skip(SaveUtil.SIZE_G4RAW).ToArray();
input = input.Take(footer.Length).ToArray();
}
}
if (input.Length == SaveUtil.SIZE_G3BOXGCI)
{
bool gci = SaveUtil.HEADER_GCI.SequenceEqual(input.Take(SaveUtil.HEADER_GCI.Length));
if (gci)
{
header = input.Take(SaveUtil.SIZE_G3BOXGCI - SaveUtil.SIZE_G3BOX).ToArray();
input = input.Skip(header.Length).ToArray();
}
}
#endregion
SaveUtil.CheckHeaderFooter(ref input, ref header, ref footer);
#region Powersaves Read-Only Conversion
if (input.Length == 0x10009C) // Resize to 1MB
{
@ -654,7 +635,11 @@ private void openFile(byte[] input, string path, string ext)
#endregion
#region SAV/PKM
else if (SaveUtil.getSAVGeneration(input) != -1)
{ openSAV(input, path); SAV.Footer = footer; SAV.Header = header; }
{
openSAV(input, path);
SAV.Footer = footer;
SAV.Header = header;
}
else if ((temp = PKMConverter.getPKMfromBytes(input)) != null)
{
PKM pk = PKMConverter.convertToFormat(temp, SAV.Generation, out c);

View File

@ -512,6 +512,27 @@ internal static ushort check32(byte[] data)
val += BitConverter.ToUInt32(data, i);
return (ushort)((val & 0xFFFF) + (val >> 16));
}
internal static void CheckHeaderFooter(ref byte[] input, ref byte[] header, ref byte[] footer)
{
if (input.Length > SIZE_G4RAW) // DeSmuME Gen4/5 DSV
{
bool dsv = FOOTER_DSV.SequenceEqual(input.Skip(input.Length - FOOTER_DSV.Length));
if (dsv)
{
footer = input.Skip(SIZE_G4RAW).ToArray();
input = input.Take(footer.Length).ToArray();
}
}
if (input.Length == SIZE_G3BOXGCI)
{
bool gci = HEADER_GCI.SequenceEqual(input.Take(HEADER_GCI.Length));
if (gci)
{
header = input.Take(SIZE_G3BOXGCI - SIZE_G3BOX).ToArray();
input = input.Skip(header.Length).ToArray();
}
}
}
public static int getDexFormIndexBW(int species, int formct)
{