From 228b0e84fb4a4b9532fee4f92396747ceb82fe2e Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 18 Oct 2017 21:43:42 -0700 Subject: [PATCH] Simplify some dex interaction utilize get/set flag method calls, add xml docs for the two methods --- PKHeX.Core/Saves/SAV1.cs | 20 +++---------- PKHeX.Core/Saves/SAV2.cs | 29 ++++--------------- PKHeX.Core/Saves/SAV3.cs | 29 ++++--------------- PKHeX.Core/Saves/SaveFile.cs | 25 ++++++++++++---- .../Save Editors/Gen4/SAV_Pokedex4.cs | 9 ++---- 5 files changed, 36 insertions(+), 76 deletions(-) diff --git a/PKHeX.Core/Saves/SAV1.cs b/PKHeX.Core/Saves/SAV1.cs index c4c0d5d5b..1649cda61 100644 --- a/PKHeX.Core/Saves/SAV1.cs +++ b/PKHeX.Core/Saves/SAV1.cs @@ -462,37 +462,25 @@ public override void SetSeen(int species, bool seen) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - - if (seen) - Data[PokedexSeenOffset + ofs] |= bitval; - else - Data[PokedexSeenOffset + ofs] &= (byte)~bitval; + SetFlag(PokedexSeenOffset + ofs, bit & 7, seen); } public override void SetCaught(int species, bool caught) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - - if (caught) - Data[PokedexCaughtOffset + ofs] |= bitval; - else - Data[PokedexCaughtOffset + ofs] &= (byte)~bitval; + SetFlag(PokedexCaughtOffset + ofs, bit & 7, caught); } public override bool GetSeen(int species) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - return (Data[PokedexSeenOffset + ofs] & bitval) != 0; + return GetFlag(PokedexSeenOffset + ofs, bit & 7); } public override bool GetCaught(int species) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - return (Data[PokedexCaughtOffset + ofs] & bitval) != 0; + return GetFlag(PokedexCaughtOffset + ofs, bit & 7); } private const int SpawnFlagCount = 0xF0; diff --git a/PKHeX.Core/Saves/SAV2.cs b/PKHeX.Core/Saves/SAV2.cs index fb37f72ef..fabe51306 100644 --- a/PKHeX.Core/Saves/SAV2.cs +++ b/PKHeX.Core/Saves/SAV2.cs @@ -479,29 +479,14 @@ public override void SetSeen(int species, bool seen) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - - if (seen) - Data[Offsets.PokedexSeen + ofs] |= bitval; - else - Data[Offsets.PokedexSeen + ofs] &= (byte)~bitval; + SetFlag(Offsets.PokedexSeen + ofs, bit & 7, seen); } public override void SetCaught(int species, bool caught) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - - if (!caught) - { - // Clear the Captured Flag - Data[Offsets.PokedexCaught + ofs] &= (byte)~bitval; - return; - } - - // Set the Captured Flag - Data[Offsets.PokedexCaught + ofs] |= bitval; - if (species == 201) + SetFlag(Offsets.PokedexCaught + ofs, bit & 7, caught); + if (caught && species == 201) SetUnownFormFlags(); } private void SetUnownFormFlags() @@ -514,17 +499,13 @@ public override bool GetSeen(int species) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - // Get the Seen Flag - return (Data[Offsets.PokedexSeen + ofs] & bitval) != 0; + return GetFlag(Offsets.PokedexSeen + ofs, bit & 7); } public override bool GetCaught(int species) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit & 7)); - // Get the Caught Flag - return (Data[Offsets.PokedexCaught + ofs] & bitval) != 0; + return GetFlag(Offsets.PokedexCaught + ofs, bit & 7); } // Misc diff --git a/PKHeX.Core/Saves/SAV3.cs b/PKHeX.Core/Saves/SAV3.cs index b3c921ed3..58ac3022b 100644 --- a/PKHeX.Core/Saves/SAV3.cs +++ b/PKHeX.Core/Saves/SAV3.cs @@ -535,50 +535,31 @@ public override bool GetCaught(int species) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte) (1 << (bit&7)); - int caughtOffset = BlockOfs[0] + 0x28 + ofs; - - return (Data[caughtOffset] & bitval) != 0; + return GetFlag(caughtOffset + ofs, bit & 7); } public override void SetCaught(int species, bool caught) { int bit = species - 1; int ofs = bit / 8; - int bitval = 1 << (bit&7); int caughtOffset = BlockOfs[0] + 0x28 + ofs; - - if (caught) - Data[caughtOffset] |= (byte)bitval; - else - Data[caughtOffset] &= (byte)~bitval; + SetFlag(caughtOffset + ofs, bit & 7, caught); } public override bool GetSeen(int species) { int bit = species - 1; int ofs = bit >> 3; - byte bitval = (byte)(1 << (bit&7)); - int seenOffset = BlockOfs[0] + 0x5C + ofs; - return (Data[seenOffset] & bitval) != 0; + return GetFlag(seenOffset + ofs, bit & 7); } public override void SetSeen(int species, bool seen) { int bit = species - 1; int ofs = bit / 8; - int bitval = 1 << (bit&7); - if (seen) - { - foreach (int o in SeenFlagOffsets) - Data[o + ofs] |= (byte)bitval; - } - else - { - foreach (int o in SeenFlagOffsets) - Data[o + ofs] &= (byte)~bitval; - } + foreach (int o in SeenFlagOffsets) + SetFlag(o + ofs, bit & 7, seen); } public bool NationalDex diff --git a/PKHeX.Core/Saves/SaveFile.cs b/PKHeX.Core/Saves/SaveFile.cs index e143242eb..8c384414c 100644 --- a/PKHeX.Core/Saves/SaveFile.cs +++ b/PKHeX.Core/Saves/SaveFile.cs @@ -298,14 +298,29 @@ public void SetEventFlag(int flagNumber, bool value) throw new ArgumentException($"Event Flag to set ({flagNumber}) is greater than max ({EventFlagMax})."); SetFlag(EventFlag + (flagNumber >> 3), flagNumber & 7, value); } - public bool GetFlag(int ofs, int n) + /// + /// Gets the status of the Flag at the specified offset and index. + /// + /// Offset to read from + /// Bit index to read + /// Flag is Set (true) or not Set (false) + public bool GetFlag(int offset, int bitIndex) { - return (Data[ofs] >> n & 1) != 0; + bitIndex &= 7; // ensure bit access is 0-7 + return (Data[offset] >> bitIndex & 1) != 0; } - public void SetFlag(int ofs, int n, bool value) + /// + /// Sets the status of the Flag at the specified offset and index. + /// + /// Offset to read from + /// Bit index to read + /// Flag status to set + /// Flag is Set (true) or not Set (false) + public void SetFlag(int offset, int bitIndex, bool value) { - Data[ofs] &= (byte)~(1 << (n & 7)); - Data[ofs] |= (byte)((value ? 1 : 0) << n); + bitIndex &= 7; // ensure bit access is 0-7 + Data[offset] &= (byte)~(1 << bitIndex); + Data[offset] |= (byte)((value ? 1 : 0) << bitIndex); } // Inventory diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs index 4a953122a..c4e05e757 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen4/SAV_Pokedex4.cs @@ -92,7 +92,7 @@ private void GetEntry() for (int i = 0; i < LangCount; i++) { CL[i].Enabled = true; - CL[i].Checked = (SAV.Data[l_ofs] & (byte)(1 << i)) != 0; + CL[i].Checked = SAV.GetFlag(l_ofs, i); } } else @@ -203,12 +203,7 @@ private void SetEntry() { l_ofs += PokeDexLanguageFlags; for (int i = 0; i < LangCount; i++) - { - if (CL[i].Checked) - SAV.Data[l_ofs] |= (byte)(1 << i); - else - SAV.Data[l_ofs] &= (byte)~(1 << i); - } + SAV.SetFlag(l_ofs, i, CL[i].Checked); } var forms = SAV.GetForms(species);