From edf36e8a3464bf6cd3ef27063ccd59849744b45e Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 3 Sep 2019 18:16:10 -0700 Subject: [PATCH] Fix sav4 checksum calc DPPt have a footer that's 0x14 bytes; HGSS is only 0x10 (first u32 was removed from struct). --- PKHeX.Core/Saves/SAV4.cs | 5 +++-- PKHeX.Core/Saves/SAV4HGSS.cs | 3 ++- PKHeX.Core/Saves/SAV4Sinnoh.cs | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/PKHeX.Core/Saves/SAV4.cs b/PKHeX.Core/Saves/SAV4.cs index 93bdc6dcd..6f056324e 100644 --- a/PKHeX.Core/Saves/SAV4.cs +++ b/PKHeX.Core/Saves/SAV4.cs @@ -83,9 +83,10 @@ public override void CopyChangesFrom(SaveFile sav) public bool DP => Version == GameVersion.DP; // Checksums - private static ushort CalcBlockChecksum(byte[] data) => Checksums.CRC16_CCITT(data, 0, data.Length - 0x14); + protected abstract int FooterSize { get; } + private ushort CalcBlockChecksum(byte[] data) => Checksums.CRC16_CCITT(data, 0, data.Length - FooterSize); private static ushort GetBlockChecksumSaved(byte[] data) => BitConverter.ToUInt16(data, data.Length - 2); - private static bool GetBlockChecksumValid(byte[] data) => CalcBlockChecksum(data) == GetBlockChecksumSaved(data); + private bool GetBlockChecksumValid(byte[] data) => CalcBlockChecksum(data) == GetBlockChecksumSaved(data); protected override void SetChecksums() { diff --git a/PKHeX.Core/Saves/SAV4HGSS.cs b/PKHeX.Core/Saves/SAV4HGSS.cs index d64d79c4a..7b1b4246a 100644 --- a/PKHeX.Core/Saves/SAV4HGSS.cs +++ b/PKHeX.Core/Saves/SAV4HGSS.cs @@ -12,8 +12,9 @@ public sealed class SAV4HGSS : SAV4 protected override SAV4 CloneInternal() => Exportable ? new SAV4HGSS(Data) : new SAV4HGSS(); protected override int GeneralSize => 0xF628; - protected override int StorageSize => 0x12300; // Start 0xF700, +0 starts box data + protected override int StorageSize => 0x12310; // Start 0xF700, +0 starts box data protected override int StorageStart => 0xF700; // unused section right after GeneralSize, alignment? + protected override int FooterSize => 0x10; private void Initialize() { diff --git a/PKHeX.Core/Saves/SAV4Sinnoh.cs b/PKHeX.Core/Saves/SAV4Sinnoh.cs index 398fc40f8..f9b8094d1 100644 --- a/PKHeX.Core/Saves/SAV4Sinnoh.cs +++ b/PKHeX.Core/Saves/SAV4Sinnoh.cs @@ -8,6 +8,7 @@ namespace PKHeX.Core public abstract class SAV4Sinnoh : SAV4 { protected override int StorageStart => GeneralSize; + protected override int FooterSize => 0x14; protected SAV4Sinnoh() { } protected SAV4Sinnoh(byte[] data) : base(data) { }