mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-08-06 06:22:48 -05:00
Simplify RBY checksum calc
utilize unchecked byte overflow remove unnecessary zeroing -- t's immediately after the checksummed region. even if it was included, chk += 0 is still 0.
This commit is contained in:
parent
0c5c9bc33c
commit
da839988af
|
|
@ -205,35 +205,22 @@ protected override byte[] Write(bool DSV)
|
|||
public override bool IsPKMPresent(int Offset) => PKX.IsPKMPresentGB(Data, Offset);
|
||||
|
||||
// Checksums
|
||||
protected override void SetChecksums()
|
||||
{
|
||||
int CHECKSUM_OFS = Japanese ? 0x3594 : 0x3523;
|
||||
Data[CHECKSUM_OFS] = 0;
|
||||
uint chksum = 0;
|
||||
for (int i = 0x2598; i < CHECKSUM_OFS; i++)
|
||||
{
|
||||
chksum += Data[i];
|
||||
}
|
||||
|
||||
chksum = ~chksum;
|
||||
chksum &= 0xFF;
|
||||
|
||||
Data[CHECKSUM_OFS] = (byte)chksum;
|
||||
}
|
||||
public override bool ChecksumsValid
|
||||
{
|
||||
get
|
||||
{
|
||||
int CHECKSUM_OFS = Japanese ? 0x3594 : 0x3523;
|
||||
byte temp = Data[CHECKSUM_OFS]; // cache current chk
|
||||
SetChecksums(); // chksum is recalculated (after being set to 0 to perform check)
|
||||
byte chk = Data[CHECKSUM_OFS]; // correct checksum
|
||||
Data[CHECKSUM_OFS] = temp; // restore old chk
|
||||
return temp == chk;
|
||||
}
|
||||
}
|
||||
protected override void SetChecksums() => Data[CHECKSUM_OFS] = GetRBYChecksum(CHECKSUM_OFS);
|
||||
public override bool ChecksumsValid => Data[CHECKSUM_OFS] == GetRBYChecksum(CHECKSUM_OFS);
|
||||
public override string ChecksumInfo => ChecksumsValid ? "Checksum valid." : "Checksum invalid";
|
||||
|
||||
private const int CHECKSUM_START = 0x2598;
|
||||
private int CHECKSUM_OFS => Japanese ? 0x3594 : 0x3523;
|
||||
|
||||
private byte GetRBYChecksum(int end)
|
||||
{
|
||||
byte chksum = 0;
|
||||
for (int i = CHECKSUM_START; i < end; i++)
|
||||
chksum += Data[i];
|
||||
chksum ^= 0xFF;
|
||||
return chksum;
|
||||
}
|
||||
|
||||
// Trainer Info
|
||||
public override GameVersion Version { get; protected set; }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user