From a885f6b48f791568dbab4aad0d5c3751e1071a7c Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 13 Mar 2020 19:56:53 -0700 Subject: [PATCH] Clean up PID/EC auto-update Now loads & saves version-less data fine Co-Authored-By: lusamine --- PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs | 2 +- PKHeX.WinForms/Controls/PKM Editor/EditPK7.cs | 3 +-- PKHeX.WinForms/Controls/PKM Editor/EditPK8.cs | 2 +- .../Controls/PKM Editor/LoadSave.cs | 24 +++++++++---------- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs b/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs index 309ad6bb7..e840a5228 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/EditPK6.cs @@ -28,12 +28,12 @@ namespace PKHeX.WinForms.Controls if (!(Entity is PK6 pk6)) throw new FormatException(nameof(Entity)); - CheckTransferPIDValid(); SaveMisc1(pk6); SaveMisc2(pk6); SaveMisc3(pk6); SaveMisc4(pk6); SaveMisc6(pk6); + CheckTransferPIDValid(pk6); pk6.EncounterType = WinFormsUtil.GetIndex(CB_EncounterType); diff --git a/PKHeX.WinForms/Controls/PKM Editor/EditPK7.cs b/PKHeX.WinForms/Controls/PKM Editor/EditPK7.cs index 7d5db4805..51e50eeb5 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/EditPK7.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/EditPK7.cs @@ -25,12 +25,12 @@ namespace PKHeX.WinForms.Controls if (!(Entity is PK7 pk7)) throw new FormatException(nameof(Entity)); - CheckTransferPIDValid(); SaveMisc1(pk7); SaveMisc2(pk7); SaveMisc3(pk7); SaveMisc4(pk7); SaveMisc6(pk7); + CheckTransferPIDValid(pk7); // Toss in Party Stats SavePartyStats(pk7); @@ -71,7 +71,6 @@ namespace PKHeX.WinForms.Controls if (!(Entity is PB7 pk7)) throw new FormatException(nameof(Entity)); - CheckTransferPIDValid(); SaveMisc1(pk7); SaveMisc2(pk7); SaveMisc3(pk7); diff --git a/PKHeX.WinForms/Controls/PKM Editor/EditPK8.cs b/PKHeX.WinForms/Controls/PKM Editor/EditPK8.cs index 52860b06e..f70416a70 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/EditPK8.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/EditPK8.cs @@ -27,13 +27,13 @@ namespace PKHeX.WinForms.Controls if (!(Entity is PK8 pk8)) throw new FormatException(nameof(Entity)); - CheckTransferPIDValid(); SaveMisc1(pk8); SaveMisc2(pk8); SaveMisc3(pk8); SaveMisc4(pk8); SaveMisc6(pk8); SaveMisc8(pk8); + CheckTransferPIDValid(pk8); // Toss in Party Stats SavePartyStats(pk8); diff --git a/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs b/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs index e260d21ed..ac5017c4a 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs @@ -345,32 +345,32 @@ namespace PKHeX.WinForms.Controls } // Misc - private void CheckTransferPIDValid() + private static void CheckTransferPIDValid(PKM pk) { - if (Entity.Version >= 24) + if (pk.Version >= 24 && pk.Version != 0) return; - uint EC = Util.GetHexValue(TB_EC.Text); - uint PID = Util.GetHexValue(TB_PID.Text); + uint EC = pk.EncryptionConstant; + uint PID = pk.PID; uint LID = PID & 0xFFFF; uint HID = PID >> 16; - uint XOR = (uint)(Entity.TID ^ LID ^ Entity.SID ^ HID); + uint XOR = (uint)(pk.TID ^ LID ^ pk.SID ^ HID); // Ensure we don't have a shiny. if (XOR >> 3 == 1) // Illegal, fix. (not 16=8) { - // Keep as shiny, so we have to mod the PID - PID ^= XOR; - TB_PID.Text = PID.ToString("X8"); - TB_EC.Text = PID.ToString("X8"); + // Keep as shiny, so we have to mod the EC + pk.EncryptionConstant = PID ^ 0x80000000; } else if ((XOR ^ 0x8000) >> 3 == 1 && PID != EC) { - TB_EC.Text = (PID ^ 0x80000000).ToString("X8"); + // Already anti-shiny, ensure the anti-shiny relationship is present. + pk.EncryptionConstant = PID ^ 0x80000000; } - else // Not illegal, no fix. + else { - TB_EC.Text = PID.ToString("X8"); + // Ensure the copy correlation is present. + pk.EncryptionConstant = PID; } }