mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-23 12:33:06 +00:00
Add batrev party viewing/handling
ezpz party 4 bytes at end: pkm, 0 (b) party index (b), 0x8000 (be u16) not sure if there's a better way to detect party count...
This commit is contained in:
parent
a7f9f69b02
commit
047272c2ba
2 changed files with 39 additions and 15 deletions
|
@ -10,7 +10,7 @@ namespace PKHeX.Core
|
|||
{
|
||||
0x42, 0x43, 0x5E, 0x63, 0x64, 0x65, 0x66, 0x67, 0x87
|
||||
};
|
||||
public override int SIZE_PARTY => PKX.SIZE_4PARTY;
|
||||
public override int SIZE_PARTY => PKX.SIZE_4STORED;
|
||||
public override int SIZE_STORED => PKX.SIZE_4STORED;
|
||||
public override int Format => 4;
|
||||
public override PersonalInfo PersonalInfo => PersonalTable.HGSS[Species];
|
||||
|
@ -29,13 +29,13 @@ namespace PKHeX.Core
|
|||
RefreshChecksum();
|
||||
if (Valid && Sanity == 0)
|
||||
Sanity = 0x4000;
|
||||
if (Data.Length != SIZE_PARTY)
|
||||
Array.Resize(ref Data, SIZE_PARTY);
|
||||
SetStats(GetStats(PersonalInfo));
|
||||
}
|
||||
public BK4()
|
||||
{
|
||||
Data = new byte[SIZE_PARTY];
|
||||
Sanity = 0x4000;
|
||||
SetStats(GetStats(PersonalInfo));
|
||||
}
|
||||
public override PKM Clone() => new BK4((byte[])Encrypt().Clone(), Identifier);
|
||||
|
||||
|
@ -322,14 +322,15 @@ namespace PKHeX.Core
|
|||
// Unused 0x87
|
||||
#endregion
|
||||
|
||||
public override int Stat_Level { get => Data[0x8C]; set => Data[0x8C] = (byte)value; }
|
||||
public override int Stat_HPCurrent { get => BigEndian.ToUInt16(Data, 0x8E); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x8E); }
|
||||
public override int Stat_HPMax { get => BigEndian.ToUInt16(Data, 0x90); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x90); }
|
||||
public override int Stat_ATK { get => BigEndian.ToUInt16(Data, 0x92); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x92); }
|
||||
public override int Stat_DEF { get => BigEndian.ToUInt16(Data, 0x94); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x94); }
|
||||
public override int Stat_SPE { get => BigEndian.ToUInt16(Data, 0x96); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x96); }
|
||||
public override int Stat_SPA { get => BigEndian.ToUInt16(Data, 0x98); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x98); }
|
||||
public override int Stat_SPD { get => BigEndian.ToUInt16(Data, 0x9A); set => BigEndian.GetBytes((ushort)value).CopyTo(Data, 0x9A); }
|
||||
// Not stored
|
||||
public override int Stat_Level { get => CurrentLevel; set {} }
|
||||
public override int Stat_HPCurrent { get; set; }
|
||||
public override int Stat_HPMax { get; set; }
|
||||
public override int Stat_ATK { get; set; }
|
||||
public override int Stat_DEF { get; set; }
|
||||
public override int Stat_SPE { get; set; }
|
||||
public override int Stat_SPA { get; set; }
|
||||
public override int Stat_SPD { get; set; }
|
||||
|
||||
// Methods
|
||||
protected override ushort CalculateChecksum()
|
||||
|
|
|
@ -75,11 +75,17 @@ namespace PKHeX.Core
|
|||
{
|
||||
get => _currentSlot;
|
||||
// 4 save slots, data reading depends on current slot
|
||||
set => Box = 0x978 + 0x6FF00 * (_currentSlot = value);
|
||||
set
|
||||
{
|
||||
_currentSlot = value;
|
||||
var ofs = 0x6FF00 * _currentSlot;
|
||||
Box = ofs + 0x978;
|
||||
Party = ofs + 0x65F48; // near the end of the slot chunk
|
||||
}
|
||||
}
|
||||
|
||||
public override int SIZE_STORED => PKX.SIZE_4STORED;
|
||||
protected override int SIZE_PARTY => PKX.SIZE_4PARTY - 0x10; // PBR has a party
|
||||
protected override int SIZE_PARTY => PKX.SIZE_4STORED + 4;
|
||||
public override PKM BlankPKM => new BK4();
|
||||
public override Type PKMType => typeof(BK4);
|
||||
|
||||
|
@ -98,7 +104,19 @@ namespace PKHeX.Core
|
|||
public override int MaxMoney => 999999;
|
||||
|
||||
public override int BoxCount => 18;
|
||||
public override bool HasParty => false;
|
||||
|
||||
public override int PartyCount
|
||||
{
|
||||
get
|
||||
{
|
||||
int ctr = 0;
|
||||
for (int i = 0; i < 6; i++)
|
||||
if (Data[GetPartyOffset(i) + 4] != 0) // sanity
|
||||
ctr += 1;
|
||||
return ctr;
|
||||
}
|
||||
protected set { }
|
||||
}
|
||||
|
||||
// Checksums
|
||||
protected override void SetChecksums()
|
||||
|
@ -125,7 +143,7 @@ namespace PKHeX.Core
|
|||
// Storage
|
||||
public override int GetPartyOffset(int slot) // TODO
|
||||
{
|
||||
return -1;
|
||||
return Party + SIZE_PARTY * slot;
|
||||
}
|
||||
public override int GetBoxOffset(int box)
|
||||
{
|
||||
|
@ -157,6 +175,11 @@ namespace PKHeX.Core
|
|||
pkm.RefreshChecksum();
|
||||
}
|
||||
|
||||
protected override void SetPartyValues(PKM pkm, bool isParty)
|
||||
{
|
||||
pkm.Sanity = (ushort)(isParty ? 0xC000 : 0x4000);
|
||||
}
|
||||
|
||||
public static byte[] DecryptPBRSaveData(byte[] input)
|
||||
{
|
||||
byte[] output = new byte[input.Length];
|
||||
|
|
Loading…
Reference in a new issue