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);