mirror of
https://github.com/pret/pokepinballrs.git
synced 2026-03-21 17:24:13 -05:00
More high_scores.c decomp
This commit is contained in:
parent
2458e6d2b1
commit
211f782fcb
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"files.associations": {
|
||||
"functions.h": "c"
|
||||
}
|
||||
}
|
||||
1297
asm/high_scores.s
1297
asm/high_scores.s
File diff suppressed because it is too large
Load Diff
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user