mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-23 20:43:07 +00:00
e21d108fb2
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
84 lines
No EOL
2.5 KiB
C#
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));
|
|
}
|
|
}
|
|
} |