More high_scores.c decomp

This commit is contained in:
Marcus Huderle 2024-02-19 16:07:14 -06:00
parent 2458e6d2b1
commit 211f782fcb
7 changed files with 825 additions and 1321 deletions

5
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"files.associations": {
"functions.h": "c"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -152,14 +152,13 @@ extern s16 sub_EAC0();
extern s16 sub_EBEC(void);
extern s16 sub_ED28(void);
extern void sub_EE64(void);
//extern ? sub_F21C();
//extern ? sub_F3BC();
extern s32 sub_F3DC(u32, u32, u8);
extern void sub_F434(u32, u32, u8);
extern void sub_F21C(u32, u32);
extern int CompareScores(u32, u32, u32, u32);
extern s32 GetNewHighScoreIndex(u32, u32, u32);
extern void sub_F434(u32, u32, u32, int);
extern u32 sub_F4FC(u32);
extern void sub_F670(u32, u32, u32, u32);
extern void sub_F6E0(void);
//extern ? sub_F74C();
extern void sub_F670(u32, u32, s16, u32);
extern void SetDefaultHighScores(void);
extern void sub_F8B0(u8, u32, s16);
extern void sub_FAE8(u32, u32, s16);
extern s8 sub_FD20(void);
@ -175,7 +174,7 @@ extern void sub_10480(void);
extern void sub_1050C(void);
//extern ? sub_10528();
extern void sub_10544(void);
//extern ? sub_105A0();
extern void sub_105A0(u16, u16, int, int, int, int);
// src/intro.c
extern void IntroMain(void);

View File

@ -11,8 +11,8 @@ struct HighScoreEntry
union {
struct {
u32 name[HIGH_SCORE_NAME_LENGTH];
u32 scoreHi;
u32 scoreLo;
u32 score100Millions;
} parts;
u32 raw[HIGH_SCORE_NAME_LENGTH + 2];
} data;

View File

@ -276,6 +276,17 @@ extern s8 gUnknown_0202A564;
extern s8 gUnknown_02019C20;
extern s8 gUnknown_0202ADE8;
extern const u16 gUnknown_086A7FAC[];
extern s16 gUnknown_0202C5C0[];
struct unkStruct_8079730
{
u32 unk0;
u32 unk4;
u32 unk8;
};
extern const struct unkStruct_8079730 gUnknown_08079730[][8];
extern struct UnkStruct_086A7768 gUnknown_086A7768[0x8];
extern s16 gUnknown_086A7788[0x8];
extern s16 gUnknown_0202ADA0[];

View File

@ -61,6 +61,7 @@ extern u8 gUnknown_080947A0[];
extern u8 gUnknown_0809DDE0[];
extern u8 gUnknown_0809DFE0[];
extern u32 gUnknown_08079870[8];
extern const struct HighScoreEntry gUnknown_08079430[2][8];
void HighScoresMain(void)
{
@ -250,7 +251,7 @@ void sub_CFD4(void)
"\tldr r0, [r4]\n"
"\tldr r1, [r4, #4]\n"
"\tldrb r2, [r4, #0xb]\n"
"\tbl sub_F3DC\n"
"\tbl GetNewHighScoreIndex\n"
"\tadds r3, r0, #0\n"
"\tstr r3, [r4, #0xc]\n"
"\tmovs r0, #1\n"
@ -856,7 +857,7 @@ void sub_DCF0(void)
if (gMain.newKeys & A_BUTTON)
{
m4aSongNumStart(0x65);
sub_F6E0();
SetDefaultHighScores();
SaveFile_WriteToSram();
sub_02B4();
m4aMPlayAllStop();
@ -1854,10 +1855,10 @@ s16 sub_E994(void)
gUnknown_0202C610[field][0].data.parts.name[1];
gUnknown_0202C5F0[2] = (gUnknown_0202C610[field][0].data.parts.name[2] << 8) |
gUnknown_0202C610[field][0].data.parts.name[3];
gUnknown_0202C5F0[3] = gUnknown_0202C610[field][0].data.parts.scoreLo >> 16;
gUnknown_0202C5F0[4] = gUnknown_0202C610[field][0].data.parts.scoreLo;
gUnknown_0202C5F0[5] = gUnknown_0202C610[field][0].data.parts.score100Millions >> 16;
gUnknown_0202C5F0[6] = gUnknown_0202C610[field][0].data.parts.score100Millions;
gUnknown_0202C5F0[3] = gUnknown_0202C610[field][0].data.parts.scoreHi >> 16;
gUnknown_0202C5F0[4] = gUnknown_0202C610[field][0].data.parts.scoreHi;
gUnknown_0202C5F0[5] = gUnknown_0202C610[field][0].data.parts.scoreLo >> 16;
gUnknown_0202C5F0[6] = gUnknown_0202C610[field][0].data.parts.scoreLo;
gUnknown_0202C5F0[7] = 0;
}
else
@ -1912,10 +1913,10 @@ s16 sub_EAC0(void)
gUnknown_0202C610[field][0].data.parts.name[1];
gUnknown_0202C5F0[2] = (gUnknown_0202C610[field][0].data.parts.name[2] << 8) |
gUnknown_0202C610[field][0].data.parts.name[3];
gUnknown_0202C5F0[3] = gUnknown_0202C610[field][0].data.parts.scoreLo >> 16;
gUnknown_0202C5F0[4] = gUnknown_0202C610[field][0].data.parts.scoreLo;
gUnknown_0202C5F0[5] = gUnknown_0202C610[field][0].data.parts.score100Millions >> 16;
gUnknown_0202C5F0[6] = gUnknown_0202C610[field][0].data.parts.score100Millions;
gUnknown_0202C5F0[3] = gUnknown_0202C610[field][0].data.parts.scoreHi >> 16;
gUnknown_0202C5F0[4] = gUnknown_0202C610[field][0].data.parts.scoreHi;
gUnknown_0202C5F0[5] = gUnknown_0202C610[field][0].data.parts.scoreLo >> 16;
gUnknown_0202C5F0[6] = gUnknown_0202C610[field][0].data.parts.scoreLo;
gUnknown_0202C5F0[7] = 0;
}
else
@ -1970,9 +1971,9 @@ s16 sub_EBEC(void)
gUnknown_0202C550[field].data.parts.name[1] = gUnknown_0201A4D0[1][1] & 0xFF;
gUnknown_0202C550[field].data.parts.name[2] = (gUnknown_0201A4D0[2][1] >> 8) & 0xFF;
gUnknown_0202C550[field].data.parts.name[3] = gUnknown_0201A4D0[2][1] & 0xFF;
gUnknown_0202C550[field].data.parts.scoreLo = (gUnknown_0201A4D0[3][1] << 16) |
gUnknown_0202C550[field].data.parts.scoreHi = (gUnknown_0201A4D0[3][1] << 16) |
gUnknown_0201A4D0[4][1];
gUnknown_0202C550[field].data.parts.score100Millions = (gUnknown_0201A4D0[5][1] << 16) |
gUnknown_0202C550[field].data.parts.scoreLo = (gUnknown_0201A4D0[5][1] << 16) |
gUnknown_0201A4D0[6][1];
if (gUnknown_0201C1B0 == 9)
return -1;
@ -2025,9 +2026,9 @@ s16 sub_ED28(void)
gUnknown_0202C550[field].data.parts.name[1] = gUnknown_0201A4D0[1][0] & 0xFF;
gUnknown_0202C550[field].data.parts.name[2] = (gUnknown_0201A4D0[2][0] >> 8) & 0xFF;
gUnknown_0202C550[field].data.parts.name[3] = gUnknown_0201A4D0[2][0] & 0xFF;
gUnknown_0202C550[field].data.parts.scoreLo = (gUnknown_0201A4D0[3][0] << 16) |
gUnknown_0202C550[field].data.parts.scoreHi = (gUnknown_0201A4D0[3][0] << 16) |
gUnknown_0201A4D0[4][0];
gUnknown_0202C550[field].data.parts.score100Millions = (gUnknown_0201A4D0[5][0] << 16) |
gUnknown_0202C550[field].data.parts.scoreLo = (gUnknown_0201A4D0[5][0] << 16) |
gUnknown_0201A4D0[6][0];
if (gUnknown_0201C1B0 == 9)
return -1;
@ -2039,3 +2040,788 @@ s16 sub_ED28(void)
return 0;
}
#ifdef NONMATCHING
void sub_EE64(void)
{
int i, j;
for (i = 0; i < 4; i++)
{
sub_105A0(gUnknown_086A7FAC[gUnknown_0202C610[0][0].data.parts.name[i]] + 0x80, 8, i + 6, 3, 1, 1);
}
for (i = 1; i < 8; i++)
{
for (j = 0; j < 4; j++)
{
sub_105A0(gUnknown_086A7FAC[gUnknown_0202C610[0][i].data.parts.name[j]] + 0xA0, 8, j + 6, i * 2 + 3, 1, 2);
}
}
sub_F21C(gUnknown_0202C610[0][0].data.parts.scoreHi, gUnknown_0202C610[0][0].data.parts.scoreLo);
for (i = 0; i < 14; i++)
{
if ((i + 1) % 3 == 0)
sub_105A0(gUnknown_0202C5C0[i] + 0x120, 9, i + 12, 2, 1, 2);
else
sub_105A0(gUnknown_0202C5C0[i] + 0xE0, 9, i + 12, 2, 1, 2);
}
sub_105A0(gUnknown_0202C5C0[i] + 0xE0, 9, 26, 2, 1, 2);
for (i = 1; i < 8; i++)
{
struct HighScoreEntry *entry = &gUnknown_0202C610[0][i];
sub_F21C(entry->data.parts.scoreHi, entry->data.parts.scoreLo);
for (j = 0; j < 14; j++)
{
if ((j + 1) % 3 == 0)
sub_105A0(gUnknown_0202C5C0[j] + 0x1A0, 9, 12, i * 2 + 3, 1, 2);
else
sub_105A0(gUnknown_0202C5C0[j] + 0x160, 9, 12, i * 2 + 3, 1, 2);
}
sub_105A0(gUnknown_0202C5C0[j] + 0x160, 9, 26, 3 + i * 2, 1, 2);
}
for (i = 0; i < 4; i++)
{
sub_105A0(gUnknown_086A7FAC[gUnknown_0202C610[1][0].data.parts.name[i]] + 0x80, 8, i + 4, 35, 1, 1);
}
for (i = 1; i < 8; i++)
{
for (j = 0; j < 4; j++)
{
sub_105A0(gUnknown_086A7FAC[gUnknown_0202C610[1][i].data.parts.name[j]] + 0xA0, 8, j + 4, i * 2 + 35, 1, 2);
}
}
sub_F21C(gUnknown_0202C610[1][0].data.parts.scoreHi, gUnknown_0202C610[1][0].data.parts.scoreLo);
for (i = 0; i < 14; i++)
{
if ((i + 1) % 3 == 0)
sub_105A0(gUnknown_0202C5C0[i] + 0x120, 9, i + 10, 34, 1, 2);
else
sub_105A0(gUnknown_0202C5C0[i] + 0xE0, 9, i + 10, 34, 1, 2);
}
sub_105A0(gUnknown_0202C5C0[i] + 0xE0, 9, 24, 34, 1, 2);
for (i = 1; i < 8; i++)
{
struct HighScoreEntry *entry = &gUnknown_0202C610[1][i];
sub_F21C(entry->data.parts.scoreHi, entry->data.parts.scoreLo);
for (j = 0; j < 14; j++)
{
if ((j + 1) % 3 == 0)
sub_105A0(gUnknown_0202C5C0[j] + 0x1A0, 9, j + 10, i * 2 + 35, 1, 2);
else
sub_105A0(gUnknown_0202C5C0[j] + 0x160, 9, j + 10, i * 2 + 35, 1, 2);
}
sub_105A0(gUnknown_0202C5C0[j] + 0x160, 9, 24, i * 2 + 35, 1, 2);
}
}
#else
NAKED
void sub_EE64(void)
{
asm_unified("\n\
push {r4, r5, r6, r7, lr}\n\
mov r7, sl\n\
mov r6, sb\n\
mov r5, r8\n\
push {r5, r6, r7}\n\
sub sp, #0x10\n\
movs r6, #0\n\
ldr r4, _0800EF20 @ =gUnknown_086A7FAC\n\
ldr r5, _0800EF24 @ =gUnknown_0202C610\n\
_0800EE76:\n\
ldm r5!, {r0}\n\
lsls r0, r0, #1\n\
adds r0, r0, r4\n\
ldrh r0, [r0]\n\
adds r0, #0x80\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r2, r6, #6\n\
movs r1, #1\n\
str r1, [sp]\n\
str r1, [sp, #4]\n\
movs r1, #8\n\
movs r3, #3\n\
bl sub_105A0\n\
adds r6, #1\n\
cmp r6, #3\n\
ble _0800EE76\n\
movs r5, #1\n\
ldr r0, _0800EF20 @ =gUnknown_086A7FAC\n\
mov sb, r0\n\
ldr r1, _0800EF24 @ =gUnknown_0202C610\n\
mov sl, r1\n\
_0800EEA4:\n\
movs r6, #0\n\
lsls r7, r5, #1\n\
adds r2, r5, #1\n\
mov r8, r2\n\
adds r4, r7, #0\n\
adds r0, r4, r5\n\
lsls r0, r0, #3\n\
mov r1, sl\n\
adds r5, r0, r1\n\
_0800EEB6:\n\
ldm r5!, {r0}\n\
lsls r0, r0, #1\n\
add r0, sb\n\
ldrh r0, [r0]\n\
adds r0, #0xa0\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r2, r6, #6\n\
movs r1, #1\n\
str r1, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #8\n\
adds r3, r4, #3\n\
bl sub_105A0\n\
adds r6, #1\n\
cmp r6, #3\n\
ble _0800EEB6\n\
mov r5, r8\n\
cmp r5, #7\n\
ble _0800EEA4\n\
ldr r1, _0800EF24 @ =gUnknown_0202C610\n\
ldr r0, [r1, #0x10]\n\
ldr r1, [r1, #0x14]\n\
bl sub_F21C\n\
movs r6, #0\n\
movs r5, #0xc\n\
ldr r4, _0800EF28 @ =gUnknown_0202C5C0\n\
movs r7, #1\n\
_0800EEF4:\n\
adds r0, r6, #1\n\
movs r1, #3\n\
bl __modsi3\n\
cmp r0, #0\n\
bne _0800EF2C\n\
movs r2, #0x90\n\
lsls r2, r2, #1\n\
adds r0, r2, #0\n\
ldrh r1, [r4]\n\
adds r0, r0, r1\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
str r7, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
adds r2, r5, #0\n\
movs r3, #2\n\
bl sub_105A0\n\
b _0800EF44\n\
.align 2, 0\n\
_0800EF20: .4byte gUnknown_086A7FAC\n\
_0800EF24: .4byte gUnknown_0202C610\n\
_0800EF28: .4byte gUnknown_0202C5C0\n\
_0800EF2C:\n\
ldrh r0, [r4]\n\
adds r0, #0xe0\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
str r7, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
adds r2, r5, #0\n\
movs r3, #2\n\
bl sub_105A0\n\
_0800EF44:\n\
adds r5, #1\n\
adds r4, #2\n\
adds r6, #1\n\
cmp r6, #0xd\n\
ble _0800EEF4\n\
ldr r4, _0800EFC8 @ =gUnknown_0202C5C0\n\
ldrh r0, [r4, #0x1c]\n\
adds r0, #0xe0\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
movs r1, #1\n\
str r1, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
movs r2, #0x1a\n\
movs r3, #2\n\
bl sub_105A0\n\
movs r5, #1\n\
ldr r2, _0800EFCC @ =gUnknown_0202C610\n\
str r2, [sp, #8]\n\
mov sl, r5\n\
movs r0, #2\n\
mov sb, r0\n\
_0800EF76:\n\
lsls r4, r5, #1\n\
adds r1, r4, r5\n\
lsls r1, r1, #3\n\
ldr r0, [sp, #8]\n\
adds r0, #0x10\n\
adds r0, r1, r0\n\
ldr r0, [r0]\n\
ldr r2, _0800EFD0 @ =gUnknown_0202C624\n\
adds r1, r1, r2\n\
ldr r1, [r1]\n\
bl sub_F21C\n\
movs r6, #0\n\
adds r7, r4, #0\n\
adds r5, #1\n\
mov r8, r5\n\
movs r5, #0xc\n\
ldr r4, _0800EFC8 @ =gUnknown_0202C5C0\n\
_0800EF9A:\n\
adds r0, r6, #1\n\
movs r1, #3\n\
bl __modsi3\n\
cmp r0, #0\n\
bne _0800EFD4\n\
movs r1, #0xd0\n\
lsls r1, r1, #1\n\
adds r0, r1, #0\n\
ldrh r2, [r4]\n\
adds r0, r0, r2\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
mov r1, sl\n\
str r1, [sp]\n\
mov r2, sb\n\
str r2, [sp, #4]\n\
movs r1, #9\n\
adds r2, r5, #0\n\
adds r3, r7, #3\n\
bl sub_105A0\n\
b _0800EFF4\n\
.align 2, 0\n\
_0800EFC8: .4byte gUnknown_0202C5C0\n\
_0800EFCC: .4byte gUnknown_0202C610\n\
_0800EFD0: .4byte gUnknown_0202C624\n\
_0800EFD4:\n\
movs r1, #0xb0\n\
lsls r1, r1, #1\n\
adds r0, r1, #0\n\
ldrh r2, [r4]\n\
adds r0, r0, r2\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
mov r1, sl\n\
str r1, [sp]\n\
mov r2, sb\n\
str r2, [sp, #4]\n\
movs r1, #9\n\
adds r2, r5, #0\n\
adds r3, r7, #3\n\
bl sub_105A0\n\
_0800EFF4:\n\
adds r5, #1\n\
adds r4, #2\n\
adds r6, #1\n\
cmp r6, #0xd\n\
ble _0800EF9A\n\
movs r1, #0xb0\n\
lsls r1, r1, #1\n\
adds r0, r1, #0\n\
ldr r2, _0800F0E4 @ =gUnknown_0202C5C0\n\
ldrh r2, [r2, #0x1c]\n\
adds r0, r0, r2\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r3, r7, #3\n\
mov r1, sl\n\
str r1, [sp]\n\
mov r2, sb\n\
str r2, [sp, #4]\n\
movs r1, #9\n\
movs r2, #0x1a\n\
bl sub_105A0\n\
mov r5, r8\n\
cmp r5, #7\n\
ble _0800EF76\n\
movs r6, #0\n\
ldr r7, _0800F0E8 @ =gUnknown_086A7FAC\n\
ldr r0, _0800F0EC @ =gUnknown_0202C610\n\
adds r5, r0, #0\n\
adds r5, #0xc0\n\
movs r4, #1\n\
_0800F032:\n\
ldm r5!, {r0}\n\
lsls r0, r0, #1\n\
adds r0, r0, r7\n\
ldrh r0, [r0]\n\
adds r0, #0x80\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r2, r6, #4\n\
str r4, [sp]\n\
str r4, [sp, #4]\n\
movs r1, #8\n\
movs r3, #0x23\n\
bl sub_105A0\n\
adds r6, #1\n\
cmp r6, #3\n\
ble _0800F032\n\
movs r5, #1\n\
ldr r0, _0800F0E8 @ =gUnknown_086A7FAC\n\
mov sb, r0\n\
ldr r1, _0800F0F0 @ =gUnknown_0202C6D0\n\
mov sl, r1\n\
_0800F05E:\n\
movs r6, #0\n\
lsls r7, r5, #1\n\
adds r2, r5, #1\n\
mov r8, r2\n\
adds r4, r7, #0\n\
adds r0, r4, r5\n\
lsls r0, r0, #3\n\
mov r1, sl\n\
adds r5, r0, r1\n\
_0800F070:\n\
ldm r5!, {r0}\n\
lsls r0, r0, #1\n\
add r0, sb\n\
ldrh r0, [r0]\n\
adds r0, #0xa0\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r2, r6, #4\n\
movs r1, #1\n\
str r1, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #8\n\
adds r3, r4, #0\n\
adds r3, #0x23\n\
bl sub_105A0\n\
adds r6, #1\n\
cmp r6, #3\n\
ble _0800F070\n\
mov r5, r8\n\
cmp r5, #7\n\
ble _0800F05E\n\
ldr r1, _0800F0EC @ =gUnknown_0202C610\n\
adds r0, r1, #0\n\
adds r0, #0xd0\n\
ldr r0, [r0]\n\
adds r1, #0xd4\n\
ldr r1, [r1]\n\
bl sub_F21C\n\
movs r6, #0\n\
movs r5, #0xa\n\
ldr r4, _0800F0E4 @ =gUnknown_0202C5C0\n\
movs r7, #1\n\
_0800F0B6:\n\
adds r0, r6, #1\n\
movs r1, #3\n\
bl __modsi3\n\
cmp r0, #0\n\
bne _0800F0F4\n\
movs r2, #0x90\n\
lsls r2, r2, #1\n\
adds r0, r2, #0\n\
ldrh r1, [r4]\n\
adds r0, r0, r1\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
str r7, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
adds r2, r5, #0\n\
movs r3, #0x22\n\
bl sub_105A0\n\
b _0800F10C\n\
.align 2, 0\n\
_0800F0E4: .4byte gUnknown_0202C5C0\n\
_0800F0E8: .4byte gUnknown_086A7FAC\n\
_0800F0EC: .4byte gUnknown_0202C610\n\
_0800F0F0: .4byte gUnknown_0202C6D0\n\
_0800F0F4:\n\
ldrh r0, [r4]\n\
adds r0, #0xe0\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
str r7, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
adds r2, r5, #0\n\
movs r3, #0x22\n\
bl sub_105A0\n\
_0800F10C:\n\
adds r5, #1\n\
adds r4, #2\n\
adds r6, #1\n\
cmp r6, #0xd\n\
ble _0800F0B6\n\
ldr r4, _0800F19C @ =gUnknown_0202C5C0\n\
lsls r0, r6, #1\n\
adds r0, r0, r4\n\
ldrh r0, [r0]\n\
adds r0, #0xe0\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
movs r1, #1\n\
str r1, [sp]\n\
movs r1, #2\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
movs r2, #0x18\n\
movs r3, #0x22\n\
bl sub_105A0\n\
movs r5, #1\n\
ldr r2, _0800F1A0 @ =gUnknown_0202C610\n\
str r2, [sp, #0xc]\n\
mov sl, r5\n\
movs r0, #2\n\
mov sb, r0\n\
_0800F142:\n\
lsls r4, r5, #1\n\
adds r1, r4, r5\n\
lsls r1, r1, #3\n\
ldr r0, [sp, #0xc]\n\
adds r0, #0xd0\n\
adds r0, r1, r0\n\
ldr r0, [r0]\n\
ldr r2, _0800F1A4 @ =gUnknown_0202C6E4\n\
adds r1, r1, r2\n\
ldr r1, [r1]\n\
bl sub_F21C\n\
movs r6, #0\n\
adds r7, r4, #0\n\
adds r5, #1\n\
mov r8, r5\n\
_0800F162:\n\
adds r4, r6, #1\n\
adds r0, r4, #0\n\
movs r1, #3\n\
bl __modsi3\n\
cmp r0, #0\n\
bne _0800F1A8\n\
lsls r1, r6, #1\n\
ldr r0, _0800F19C @ =gUnknown_0202C5C0\n\
adds r1, r1, r0\n\
movs r2, #0xd0\n\
lsls r2, r2, #1\n\
adds r0, r2, #0\n\
ldrh r1, [r1]\n\
adds r0, r0, r1\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r2, r6, #0\n\
adds r2, #0xa\n\
mov r1, sl\n\
str r1, [sp]\n\
mov r1, sb\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
adds r3, r7, #0\n\
adds r3, #0x23\n\
bl sub_105A0\n\
b _0800F1D2\n\
.align 2, 0\n\
_0800F19C: .4byte gUnknown_0202C5C0\n\
_0800F1A0: .4byte gUnknown_0202C610\n\
_0800F1A4: .4byte gUnknown_0202C6E4\n\
_0800F1A8:\n\
lsls r1, r6, #1\n\
ldr r2, _0800F218 @ =gUnknown_0202C5C0\n\
adds r1, r1, r2\n\
movs r2, #0xb0\n\
lsls r2, r2, #1\n\
adds r0, r2, #0\n\
ldrh r1, [r1]\n\
adds r0, r0, r1\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r2, r6, #0\n\
adds r2, #0xa\n\
mov r1, sl\n\
str r1, [sp]\n\
mov r1, sb\n\
str r1, [sp, #4]\n\
movs r1, #9\n\
adds r3, r7, #0\n\
adds r3, #0x23\n\
bl sub_105A0\n\
_0800F1D2:\n\
adds r6, r4, #0\n\
cmp r4, #0xd\n\
ble _0800F162\n\
lsls r1, r4, #1\n\
ldr r2, _0800F218 @ =gUnknown_0202C5C0\n\
adds r1, r1, r2\n\
movs r2, #0xb0\n\
lsls r2, r2, #1\n\
adds r0, r2, #0\n\
ldrh r1, [r1]\n\
adds r0, r0, r1\n\
lsls r0, r0, #0x10\n\
lsrs r0, r0, #0x10\n\
adds r3, r7, #0\n\
adds r3, #0x23\n\
mov r1, sl\n\
str r1, [sp]\n\
mov r2, sb\n\
str r2, [sp, #4]\n\
movs r1, #9\n\
movs r2, #0x18\n\
bl sub_105A0\n\
mov r5, r8\n\
cmp r5, #7\n\
ble _0800F142\n\
add sp, #0x10\n\
pop {r3, r4, r5}\n\
mov r8, r3\n\
mov sb, r4\n\
mov sl, r5\n\
pop {r4, r5, r6, r7}\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
_0800F218: .4byte gUnknown_0202C5C0\n\
");
}
#endif
void sub_F21C(u32 scoreHi, u32 scoreLo)
{
int i;
u32 var0;
u32 var1;
u16 *arr;
if (scoreHi == 0 && scoreLo == 0)
{
for (i = 0; i < 14; i++)
gUnknown_0202C5C0[i] = 10;
gUnknown_0202C5C0[14] = 0;
}
else
{
if (scoreHi > 9999999)
{
scoreHi = 9999999;
scoreLo = 99999999;
}
else if (scoreLo > 99999999)
{
scoreLo = 99999999;
}
arr = gUnknown_0202C5C0;
var0 = scoreHi / 1000000;
arr[0] = var0;
scoreHi %= 1000000;
arr[1] = scoreHi / 100000;
scoreHi %= 100000;
arr[2] = scoreHi / 10000;
scoreHi %= 10000;
arr[3] = scoreHi / 1000;
scoreHi %= 1000;
arr[4] = scoreHi / 100;
scoreHi %= 100;
arr[5] = scoreHi / 10;
arr[6] = scoreHi %= 10;
arr[7] = scoreLo / 10000000;
var1 = scoreLo % 10000000;
arr[8] = var1 / 1000000;
var1 %= 1000000;
arr[9] = var1 / 100000;
var1 %= 100000;
arr[10] = var1 / 10000;
var1 %= 10000;
arr[11] = var1 / 1000;
var1 %= 1000;
arr[12] = var1 / 100;
var1 %= 100;
arr[13] = var1 / 10;
arr[14] = var1 %= 10;
if ((s16)var0 == 0)
{
for (i = 0; i < 15 && gUnknown_0202C5C0[i] == 0; i++)
gUnknown_0202C5C0[i] = 10;
}
}
}
int CompareScores(u32 scoreHiA, u32 scoreLoA, u32 scoreHiB, u32 scoreLoB)
{
if (scoreHiA > scoreHiB)
return 1;
if (scoreHiA < scoreHiB)
return -1;
if (scoreLoA > scoreLoB)
return 1;
if (scoreLoA < scoreLoB)
return -1;
return 0;
}
int GetNewHighScoreIndex(u32 scoreHi, u32 scoreLo, u32 field)
{
int i;
for (i = 0; i < 8; i++)
{
int comparisonResult = CompareScores(
scoreHi,
scoreLo,
gUnknown_0202C610[field][i].data.parts.scoreHi,
gUnknown_0202C610[field][i].data.parts.scoreLo
);
if (comparisonResult >= 0)
return i;
}
return -1;
}
void sub_F434(u32 scoreHi, u32 scoreLo, u32 field, int newHighScoreIndex)
{
int i;
for (i = 7; i > newHighScoreIndex; i--)
{
gUnknown_0202C610[field][i].data.parts.name[0] = gUnknown_0202C610[field][i-1].data.parts.name[0];
gUnknown_0202C610[field][i].data.parts.name[1] = gUnknown_0202C610[field][i-1].data.parts.name[1];
gUnknown_0202C610[field][i].data.parts.name[2] = gUnknown_0202C610[field][i-1].data.parts.name[2];
gUnknown_0202C610[field][i].data.parts.name[3] = gUnknown_0202C610[field][i-1].data.parts.name[3];
gUnknown_0202C610[field][i].data.parts.scoreHi = gUnknown_0202C610[field][i-1].data.parts.scoreHi;
gUnknown_0202C610[field][i].data.parts.scoreLo = gUnknown_0202C610[field][i-1].data.parts.scoreLo;
}
gUnknown_0202C610[field][i].data.parts.name[0] = 0;
gUnknown_0202C610[field][i].data.parts.name[1] = 0;
gUnknown_0202C610[field][i].data.parts.name[2] = 0;
gUnknown_0202C610[field][i].data.parts.name[3] = 0;
gUnknown_0202C610[field][i].data.parts.scoreHi = scoreHi;
gUnknown_0202C610[field][i].data.parts.scoreLo = scoreLo;
}
u32 sub_F4FC(u32 field)
{
int i, j;
int newHighScoreIndex;
int comparisonResult;
newHighScoreIndex = GetNewHighScoreIndex(gUnknown_0202C550[field].data.parts.scoreHi, gUnknown_0202C550[field].data.parts.scoreLo, field);
comparisonResult = CompareScores(
gUnknown_0202C610[field][newHighScoreIndex].data.parts.scoreHi,
gUnknown_0202C610[field][newHighScoreIndex].data.parts.scoreLo,
gUnknown_0202C550[field].data.parts.scoreHi,
gUnknown_0202C550[field].data.parts.scoreLo
);
if (comparisonResult == 0 &&
gUnknown_0202C610[field][newHighScoreIndex].data.parts.name[0] == gUnknown_0202C550[field].data.parts.name[0] &&
gUnknown_0202C610[field][newHighScoreIndex].data.parts.name[1] == gUnknown_0202C550[field].data.parts.name[1] &&
gUnknown_0202C610[field][newHighScoreIndex].data.parts.name[2] == gUnknown_0202C550[field].data.parts.name[2] &&
gUnknown_0202C610[field][newHighScoreIndex].data.parts.name[3] == gUnknown_0202C550[field].data.parts.name[3])
{
return newHighScoreIndex;
}
if (newHighScoreIndex == -1)
{
return -1;
}
for (i = 7; i > newHighScoreIndex; i--)
{
for (j = 0; j < 6; j++)
{
gUnknown_0202C610[field][i].data.raw[j] = gUnknown_0202C610[field][i-1].data.raw[j];
}
}
gUnknown_0202C610[field][i].data.parts.name[0] = gUnknown_0202C550[field].data.parts.name[0];
gUnknown_0202C610[field][i].data.parts.name[1] = gUnknown_0202C550[field].data.parts.name[1];
gUnknown_0202C610[field][i].data.parts.name[2] = gUnknown_0202C550[field].data.parts.name[2];
gUnknown_0202C610[field][i].data.parts.name[3] = gUnknown_0202C550[field].data.parts.name[3];
gUnknown_0202C610[field][i].data.parts.scoreHi = gUnknown_0202C550[field].data.parts.scoreHi;
gUnknown_0202C610[field][i].data.parts.scoreLo = gUnknown_0202C550[field].data.parts.scoreLo;
return newHighScoreIndex;
}
void sub_F670(u32 arg0, u32 arg1, s16 arg2, u32 arg3)
{
arg0 = gUnknown_086A7FAC[arg0];
sub_105A0(
gUnknown_08079730[arg3][arg1].unk8 * 32 + 0x80 + arg0,
8,
gUnknown_08079730[arg3][arg1].unk0 + arg2,
gUnknown_08079730[arg3][arg1].unk4,
1,
gUnknown_08079730[arg3][arg1].unk8 + 1
);
}
void SetDefaultHighScores(void)
{
int field, highScoreIndex, i;
gUnknown_0202BEB0 = 0;
for (field = 0; field < 2; field++)
for (highScoreIndex = 0; highScoreIndex < 8; highScoreIndex++)
for (i = 0; i < 6; i++)
gMain_saveData.highScores[field][highScoreIndex].data.raw[i] = gUnknown_08079430[field][highScoreIndex].data.raw[i];
}
void sub_F74C(void)
{
int field, highScoreIndex, k;
u8 letter;
u32 scoreHi, scoreLo;
for (field = 0; field < 2; field++)
{
letter = Random() % 42;
gMain_saveData.highScores[field][0].data.parts.name[0] = letter;
for (k = 1; k < 4; k++)
{
if ((u8)(Random() % 10) < 8)
letter = Random() % 42;
gMain_saveData.highScores[field][0].data.parts.name[k] = letter;
}
scoreHi = Random();
scoreLo = Random();
gMain_saveData.highScores[field][0].data.parts.scoreHi = scoreHi;
gMain_saveData.highScores[field][0].data.parts.scoreLo = scoreLo;
for (highScoreIndex = 1; highScoreIndex < 8; highScoreIndex++)
{
letter = Random() % 42;
gMain_saveData.highScores[field][highScoreIndex].data.parts.name[0] = letter;
for (k = 1; k < 4; k++)
{
if ((u8)(Random() % 10) < 8)
letter = Random() % 42;
gMain_saveData.highScores[field][highScoreIndex].data.parts.name[k] = letter;
}
scoreHi = Random() % scoreHi;
if (scoreHi != 0)
scoreLo = Random();
else
scoreLo = Random() % scoreLo;
gMain_saveData.highScores[field][highScoreIndex].data.parts.scoreHi = scoreHi;
gMain_saveData.highScores[field][highScoreIndex].data.parts.scoreLo = scoreLo;
}
}
}

View File

@ -197,7 +197,7 @@ void sub_52C64(void)
gMain_saveData.unk141 = 0;
gMain_saveData.ballSpeed = 0;
sub_525CC(-1);
sub_F6E0();
SetDefaultHighScores();
ResetPokedex();
gMain_saveData.unk143 = 0;
}