PKHeX/PKHeX.Core/Saves/Substructures/Gen6/Puff6.cs
Kurt e21d108fb2 Split PokeCrypto from PKX
All logic in PokeCrypto is separate from the rest of the PKHeX.Core
library; makes it easy to just rip this portion out and reuse in other
projects without needing the entirety of PKHeX.Core logic

optimize out the CheckEncrypted to the actual path, separate methods.
Only usages of this method were with hardcoded Format values, so no
impact
2020-01-04 14:48:39 -08:00

84 lines
No EOL
2.5 KiB
C#

using System;
namespace PKHeX.Core
{
public sealed class Puff6 : SaveBlock
{
private const int MaxPuffID = 26; // Supreme Winter Poké Puff
private const int PuffSlots = 100;
public Puff6(SaveFile SAV, int offset) : base(SAV) => Offset = offset;
public byte[] Puffs
{
get => SAV.GetData(Offset, PuffSlots);
set => SAV.SetData(value, Offset);
}
public int PuffCount
{
get => BitConverter.ToInt32(Data, Offset + PuffSlots);
set => BitConverter.GetBytes(value).CopyTo(Data, Offset + PuffSlots);
}
public void Reset()
{
Array.Clear(Data, Offset, PuffSlots);
// Set the first few default Puffs
Data[Offset + 0] = 1;
Data[Offset + 1] = 2;
Data[Offset + 2] = 3;
Data[Offset + 3] = 4;
Data[Offset + 4] = 5;
PuffCount = 5;
}
public void MaxCheat(bool special = false)
{
if (special)
{
for (int i = 0; i < PuffSlots; i++)
Data[Offset + i] = (byte)(21 + Util.Rand.Next(2)); // Supreme Wish or Honor
}
else
{
for (int i = 0; i < PuffSlots; i++)
Data[Offset + i] = (byte)((i % MaxPuffID) + 1);
Util.Shuffle(Data, Offset, Offset + PuffSlots);
}
PuffCount = PuffSlots;
}
public void Sort(bool reverse = false)
{
Array.Sort(Data, Offset, PuffCount);
if (reverse)
Array.Reverse(Data, Offset, PuffCount);
}
}
public sealed class BattleBox6 : SaveBlock
{
public BattleBox6(SaveFile SAV, int offset) : base(SAV) => Offset = offset;
private int LockedFlagOffset => Offset + (6 * PokeCrypto.SIZE_6STORED);
public bool Locked
{
get => LockedWiFiTournament || LockedLiveTournament;
set => LockedWiFiTournament = LockedLiveTournament = value;
}
public bool LockedWiFiTournament
{
get => (Data[LockedFlagOffset] & 1) != 0;
set => Data[LockedFlagOffset] = (byte)((Data[Offset + LockedFlagOffset] & ~1) | (value ? 1 : 0));
}
public bool LockedLiveTournament
{
get => (Data[LockedFlagOffset] & 2) != 0;
set => Data[LockedFlagOffset] = (byte)((Data[Offset + LockedFlagOffset] & ~2) | (value ? 2 : 0));
}
}
}