You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
5.0 KiB
196 lines
5.0 KiB
#include <stdio.h>
|
|
|
|
// 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++;
|
|
}
|
|
|