PKHeX/PKHeX.Core/Saves/Substructures/Gen5/Daycare5.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

46 lines
No EOL
1.7 KiB
C#

using System;
namespace PKHeX.Core
{
public sealed class Daycare5 : SaveBlock
{
// struct daycareSlot
// bool32 occupied
// pk5party pkm
// u32 expGained
private const int SlotSize = 4 + PokeCrypto.SIZE_5PARTY + 4; // occupied u32 flag, pk5, exp
// struct daycare
// daycareSlot[2]
// ???->end ???
public const int DaycareSeedSize = 16; // 8 bytes, b2w2 only
public Daycare5(SaveFile sav, int offset) : base(sav) => Offset = offset;
public ulong? GetSeed()
{
if (!(SAV is SAV5B2W2))
return null;
return BitConverter.ToUInt64(Data, Offset + 0x1CC);
}
public void SetSeed(string value)
{
if (!(SAV is SAV5B2W2))
return;
var data = Util.GetBytesFromHexString(value);
SAV.SetData(data, Offset + 0x1CC);
}
private int GetDaycareSlotOffset(int slot) => Offset + (SlotSize * slot);
public int GetPKMOffset(int slot) => GetDaycareSlotOffset(slot) + 4;
private int GetDaycareEXPOffset(int slot) => GetDaycareSlotOffset(slot) + 4 + PokeCrypto.SIZE_5PARTY;
public bool? IsOccupied(int slot) => BitConverter.ToUInt32(Data, GetDaycareSlotOffset(slot)) == 1;
public void SetOccupied(int slot, bool occupied) => SAV.SetData(BitConverter.GetBytes((uint)(occupied ? 1 : 0)), GetDaycareSlotOffset(slot));
public uint? GetEXP(int slot) => BitConverter.ToUInt32(Data, GetDaycareEXPOffset(slot));
public void SetEXP(int slot, uint EXP) => SAV.SetData(BitConverter.GetBytes(EXP), GetDaycareEXPOffset(slot));
}
}