From 3bb2970d68e73e99b25f8ffde547dd4d145a2b04 Mon Sep 17 00:00:00 2001 From: Kaphotics Date: Fri, 23 Sep 2016 18:47:03 -0700 Subject: [PATCH] Relocate header/footer checks --- PKHeX/MainWindow/Main.cs | 27 ++++++--------------------- PKHeX/Saves/SaveUtil.cs | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/PKHeX/MainWindow/Main.cs b/PKHeX/MainWindow/Main.cs index e67ab6663..46fd32305 100644 --- a/PKHeX/MainWindow/Main.cs +++ b/PKHeX/MainWindow/Main.cs @@ -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); diff --git a/PKHeX/Saves/SaveUtil.cs b/PKHeX/Saves/SaveUtil.cs index b9106095d..273e34298 100644 --- a/PKHeX/Saves/SaveUtil.cs +++ b/PKHeX/Saves/SaveUtil.cs @@ -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) {