Simplify some dex interaction

utilize get/set flag method calls, add xml docs for the two methods
This commit is contained in:
Kurt 2017-10-18 21:43:42 -07:00
parent a53e8ddb7e
commit 228b0e84fb
5 changed files with 36 additions and 76 deletions

View File

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

View File

@ -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

View File

@ -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

View File

@ -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)
/// <summary>
/// Gets the <see cref="bool"/> status of the Flag at the specified offset and index.
/// </summary>
/// <param name="offset">Offset to read from</param>
/// <param name="bitIndex">Bit index to read</param>
/// <returns>Flag is Set (true) or not Set (false)</returns>
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)
/// <summary>
/// Sets the <see cref="bool"/> status of the Flag at the specified offset and index.
/// </summary>
/// <param name="offset">Offset to read from</param>
/// <param name="bitIndex">Bit index to read</param>
/// <param name="value">Flag status to set</param>
/// <remarks>Flag is Set (true) or not Set (false)</remarks>
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

View File

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