From d4c1093dd9f3b4368eabbbfdb1da181b3a9e275f Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 7 Jul 2018 17:01:47 -0700 Subject: [PATCH] Add RS badge flags make logic generic --- PKHeX.Core/Saves/SAV3.cs | 36 +++++++++++-------- .../Save Editors/SAV_SimpleTrainer.cs | 7 +--- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/PKHeX.Core/Saves/SAV3.cs b/PKHeX.Core/Saves/SAV3.cs index 2f306787b..5e6e1abb7 100644 --- a/PKHeX.Core/Saves/SAV3.cs +++ b/PKHeX.Core/Saves/SAV3.cs @@ -321,24 +321,30 @@ public int Badges { get { - switch (Version) - { - case GameVersion.E: return BitConverter.ToUInt16(Data, BlockOfs[2] + 0x3FC) >> 7 & 0xFF; - case GameVersion.FRLG: return Data[BlockOfs[2] + 0x64]; - default: return 0; // RS - } + int startFlag = BadgeFlagStart; + int val = 0; + for (int i = 0; i < 8; i++) + if (GetEventFlag(startFlag + i)) + val |= 1 << i; + return val; } set { - switch (Version) - { - case GameVersion.E: - var val = BitConverter.ToUInt16(Data, BlockOfs[2] + 0x3FC) & ~(0xFF << 7) | (value << 7); - BitConverter.GetBytes((ushort)val).CopyTo(Data, BlockOfs[2] + 0x3FC); - break; - case GameVersion.FRLG: Data[BlockOfs[2] + 0x64] = (byte)value; break; - default: return; // RS - } + int startFlag = BadgeFlagStart; + for (int i = 0; i < 8; i++) + SetEventFlag(startFlag + i, (value & (1 << i)) != 0); + } + } + + private int BadgeFlagStart + { + get + { + if (Version == GameVersion.FRLG) + return 800; // dec + if (Version == GameVersion.RS) + return 0x807; // hex + return 0x867; // emerald } } public override uint Money diff --git a/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs b/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs index cd0754276..c3734e30c 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/SAV_SimpleTrainer.cs @@ -88,12 +88,7 @@ public SAV_SimpleTrainer(SaveFile sav) if (SAV is SAV3 sav3) { GB_Map.Visible = false; - switch (sav3.Version) - { - case GameVersion.E: badgeval = sav3.Badges; break; - case GameVersion.FRLG: badgeval = sav3.Badges; break; - default: GB_Badges.Visible = false; break; // RS - } + badgeval = sav3.Badges; L_Started.Visible = L_Fame.Visible = false; CAL_AdventureStartDate.Visible = CAL_HoFDate.Visible = false;