#include // Final buffer goes at 3:A100 of the save file char buf[0x1b0]; int s02_ADB1; char s02_ADB1_b; char s02_ADB2; char s02_ADB3; char s02_ADB4; char sSaveBlockChecksum; char func() { s02_ADB1_b = (s02_ADB1 >> 0) & 0xFF; s02_ADB2 = (s02_ADB1 >> 8) & 0xFF; s02_ADB3 = (s02_ADB1 >> 16) & 0xFF; s02_ADB4 = (s02_ADB1 >> 24) & 0xFF; s02_ADB2 ^= (s02_ADB1_b + 1) ^ s02_ADB4; s02_ADB3 += s02_ADB2; s02_ADB4 = s02_ADB2 ^ (s02_ADB4 + (s02_ADB3 / 2)); s02_ADB1 = (s02_ADB4 << 24) | (s02_ADB3 << 16) | (s02_ADB2 << 8) | s02_ADB1_b; return s02_ADB4; } int main() { int bufi = 0; // sSaveSource = $FCDF; sSaveBlockChecksum = 0x7F; s02_ADB1 = 0x8C10E62F; for (int i = 0; i < 0x48; i++) { buf[bufi] = (char)(bufi & 0xFF); buf[bufi] ^= func(); sSaveBlockChecksum += buf[bufi]; bufi++; buf[bufi] = (char)(bufi & 0xFF); sSaveBlockChecksum ^= buf[bufi]; buf[bufi] ^= func(); bufi++; } buf[bufi] = sSaveBlockChecksum; bufi++; // sSaveSource = $FA7A; sSaveBlockChecksum = 0xC2; s02_ADB1 = 0x6AF528C2; for (int i = 0; i < 0x14; i++) { buf[bufi] = (char)(bufi & 0xFF); buf[bufi] ^= func(); sSaveBlockChecksum ^= buf[bufi]; bufi++; } buf[bufi] = sSaveBlockChecksum; bufi++; // sSaveSource = $F84E; for (int i = 0; i < 0x03; i++) { buf[bufi] = (char)(bufi & 0xFF); bufi++; } // sSaveSource = $F859; sSaveBlockChecksum = 0x06; s02_ADB1 = 0xEF7305A6; for (int i = 0; i < 0x4C; i++) { buf[bufi] = (char)(bufi & 0xFF); buf[bufi] ^= func(); sSaveBlockChecksum ^= buf[bufi]; bufi++; buf[bufi] = (char)(bufi & 0xFF); buf[bufi] ^= func(); sSaveBlockChecksum += buf[bufi]; bufi++; } buf[bufi] = sSaveBlockChecksum; bufi++; // sSaveSource = $DE41; s02_ADB1 = 0x2A7FEC38; sSaveBlockChecksum = 0x3C; for (int i = 0; i < 0x21; i++) { buf[bufi] = (char)(bufi & 0xFF); sSaveBlockChecksum += buf[bufi]; buf[bufi] ^= func(); bufi++; } buf[bufi] = sSaveBlockChecksum; bufi++; // sSaveSource = $DE99; sSaveBlockChecksum = 0xE2; s02_ADB1 = 0x4BFC1115; for (int i = 0 ; i < 0x40; i++) { buf[bufi] = (char)(bufi & 0xFF); buf[bufi] ^= func(); sSaveBlockChecksum += buf[bufi]; bufi++; } buf[bufi] = sSaveBlockChecksum; bufi++; s02_ADB1 = 0xA23F387C; sSaveBlockChecksum = 0x16; // sSaveSource = $A003; for (int i = 0; i < 0x04; i++) { buf[bufi] = (char)(bufi & 0xFF); buf[bufi] ^= func(); sSaveBlockChecksum ^= buf[bufi]; sSaveBlockChecksum += buf[bufi]; bufi++; } buf[bufi] = sSaveBlockChecksum; bufi++; sSaveBlockChecksum = 0x00; // sSaveSource = $FFE1; buf[bufi] = (char)(bufi & 0xFF); sSaveBlockChecksum += buf[bufi]; sSaveSource = 0xB16B; *(sSaveSource++) = sSaveBlockChecksum; bufi++; // sSaveSource = $FFE2; // buf[bufi] = *(sSaveSource++); // sSaveBlockChecksum ^= buf[bufi]; // buf[bufi] = sSaveBlockChecksum; // sSaveSource = $B16C; // *(sSaveSource++) = sSaveBlockChecksum; // bufi++; // sSaveSource = $FF04; // buf[bufi] = *(sSaveSource++); // sSaveBlockChecksum += buf[bufi]; // buf[bufi] = sSaveBlockChecksum; // sSaveSource = $B16D; // *(sSaveSource++) = sSaveBlockChecksum; // bufi++; // sSaveSource = $FF05; // buf[bufi] = *(sSaveSource++); // sSaveBlockChecksum ^= buf[bufi]; // buf[bufi] = sSaveBlockChecksum; // sSaveSource = $B16E; // *(sSaveSource++) = sSaveBlockChecksum; // bufi++; // s02_ADB1 = $EFBEADDE; // bufi++; // bufi++; // sSaveBlockChecksum = $55; // sSaveSource = $F350; // *(sSaveSource++) = sSaveBlockChecksum; // *(sSaveSource++) = sSaveBlockChecksum; // rept ($1AB) {; // sSaveSource = $F350; // sSaveBlockChecksum = *sSaveSource; // sSaveBlockChecksum += buf[bufi]; // *(sSaveSource++) = sSaveBlockChecksum; // sSaveBlockChecksum = *sSaveSource; // sSaveBlockChecksum ^= buf[bufi]; // *(sSaveSource++) = sSaveBlockChecksum; // buf[bufi] ^= func(s02_ADB1); // bufi++; // }; // sSaveBlockChecksum = $CC; // sSaveSource = $ADB1; // sSaveBlockChecksum ^= buf[bufi]; // *(sSaveSource++) = sSaveBlockChecksum; // bufi++; // sSaveBlockChecksum ^= buf[bufi]; // *(sSaveSource++) = sSaveBlockChecksum; // bufi++; // sSaveBlockChecksum ^= buf[bufi]; // *(sSaveSource++) = sSaveBlockChecksum; // bufi++; // sSaveBlockChecksum ^= buf[bufi]; // *(sSaveSource++) = sSaveBlockChecksum; // bufi++; // sSaveSource = $F350; // buf[bufi] = *(sSaveSource++); // buf[bufi] ^= func(s02_ADB1); // bufi++; // buf[bufi] = *(sSaveSource++); // buf[bufi] ^= func(s02_ADB1); // bufi++; }