From 8dacc2f63e8b12d70636b5e93217dc7d417e57cc Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 30 Jan 2021 16:45:08 -0800 Subject: [PATCH] Clean up memcard handling a little --- PKHeX.Core/Saves/SAV3GCMemoryCard.cs | 9 +++------ PKHeX.Core/Saves/Util/SaveUtil.cs | 12 +++++++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/PKHeX.Core/Saves/SAV3GCMemoryCard.cs b/PKHeX.Core/Saves/SAV3GCMemoryCard.cs index 6db89917b..a1035996b 100644 --- a/PKHeX.Core/Saves/SAV3GCMemoryCard.cs +++ b/PKHeX.Core/Saves/SAV3GCMemoryCard.cs @@ -58,8 +58,6 @@ public static bool IsMemoryCardSize(byte[] Data) return true; } - private static readonly byte[] RawEmpty_DEntry = { 0xFF, 0xFF, 0xFF, 0xFF }; - // Control blocks private const int Header_Block = 0; private const int Directory_Block = 1; @@ -220,13 +218,11 @@ public GCMemoryCardState GetMemoryCardState() ? DirectoryBackup_Block : Directory_Block; - string Empty_DEntry = EncodingType.GetString(RawEmpty_DEntry, 0, 4); // Search for pokemon savegames in the directory for (int i = 0; i < NumEntries_Directory; i++) { int offset = (DirectoryBlock_Used * BLOCK_SIZE) + (i * DENTRY_SIZE); - string GameCode = EncodingType.GetString(Data, offset, 4); - if (GameCode == Empty_DEntry) + if (BitConverter.ToUInt32(Data, offset) == uint.MaxValue) // empty entry continue; int FirstBlock = BigEndian.ToUInt16(Data, offset + 0x36); @@ -236,7 +232,8 @@ public GCMemoryCardState GetMemoryCardState() if (FirstBlock + BlockCount > NumBlocks) continue; - var ver = SaveHandlerGCI.GetGameCode(GameCode); + var gameCode = EncodingType.GetString(Data, offset, 4); + var ver = SaveHandlerGCI.GetGameCode(gameCode); if (ver == GameVersion.COLO) { if (HasCOLO) // another entry already exists diff --git a/PKHeX.Core/Saves/Util/SaveUtil.cs b/PKHeX.Core/Saves/Util/SaveUtil.cs index 79868dd09..8d1698a3b 100644 --- a/PKHeX.Core/Saves/Util/SaveUtil.cs +++ b/PKHeX.Core/Saves/Util/SaveUtil.cs @@ -574,14 +574,15 @@ private static GameVersion GetIsG8SAV(byte[] data) public static SaveFile? GetVariantSAV(SAV3GCMemoryCard memCard) { // Pre-check for header/footer signatures - SaveFile sav; byte[] data = memCard.SelectedSaveData; - var split = DolphinHandler.TrySplit(data); - if (split == null) + if (data.Length == 0) return null; - data = split.Data; + var split = DolphinHandler.TrySplit(data); + if (split != null) + data = split.Data; + SaveFile sav; switch (memCard.SelectedGameVersion) { // Side Games @@ -593,7 +594,8 @@ private static GameVersion GetIsG8SAV(byte[] data) default: return null; } - sav.Metadata.SetExtraInfo(split.Header, split.Footer); + if (split != null) + sav.Metadata.SetExtraInfo(split.Header, split.Footer); return sav; }