summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/credits.c2047
1 files changed, 2027 insertions, 20 deletions
diff --git a/src/credits.c b/src/credits.c
index 665279f8e..d6eea4cac 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1,14 +1,36 @@
#include "global.h"
+#include "asm.h"
+#include "decompress.h"
#include "m4a.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
#include "songs.h"
#include "sound.h"
+#include "species.h"
#include "sprite.h"
#include "task.h"
#include "text.h"
+u32 NationalPokedexNumToSpecies(u16 nationalNum);
+
+struct MonCoords {
+ u8 x, y;
+};
+
+
+extern void *species_and_otid_get_pal(u32, u16, u16);
+
+asm(".set REG_BASE, 0x4000000");
+asm(".set OFFSET_REG_BG3HOFS, 0x1c");
+asm(".set OFFSET_REG_BG3VOFS, 0x1e");
+asm(".set OFFSET_REG_BLDCNT, 0x50");
+asm(".set OFFSET_REG_BLDALPHA, 0x52");
+asm(".set REG_BG3HOFS, REG_BASE + OFFSET_REG_BG3HOFS");
+asm(".set REG_BG3VOFS, REG_BASE + OFFSET_REG_BG3VOFS");
+asm(".set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT");
+asm(".set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA");
+
enum {
PAGE_TITLE,
PAGE_DIRECTOR,
@@ -74,8 +96,11 @@ enum {
enum {
TDA_0 = 0,
TDA_TASK_C_ID = 1,
+ TDA_TASK_E_ID = 2,
TDA_TASK_D_ID = 3,
TDA_4 = 4,
+ TDA_PLAYER_CYCLIST = 5,
+ TDA_RIVAL_CYCLIST = 6,
TDA_7 = 7, // Has something to do with the bike scene
TDA_11 = 11, // Gets set depending on whether the bike or the grass scene should be shown
TDA_12 = 12,
@@ -90,10 +115,20 @@ enum {
TDB_3 = 3,
TDC_0 = 0,
-
- TDD_0 = 0,
- TDD_1 = 1,
+ TDC_1 = 1,
+ TDC_2 = 2,
+ TDC_3 = 3,
+ TDC_4 = 4,
+ TDC_5 = 5,
+
+ TDD_STATE = 0,
+ TDD_TASK_A_ID = 1,
TDD_2 = 2,
+ TDD_3 = 3,
+
+ TDE_0 = 0,
+ TDE_1 = 1,
+ TDE_TASK_A_ID = 2,
};
struct Unk201C000 {
@@ -101,6 +136,7 @@ struct Unk201C000 {
u16 var_88;
u16 var_8A;
u16 var_8C;
+ u16 var_8E;
};
struct HallOfFame {
@@ -121,30 +157,60 @@ extern u8 unk_201e800[0x800];
extern u8 unk_201f000[0x800];
extern u16 unk_201f800[];
+extern struct SpriteTemplate gUnknown_02024E8C;
+
extern s16 gUnknown_02039320;
extern u16 gUnknown_02039322; // TASK A
extern u8 gUnknown_02039324;
extern u8 gUnknown_02039325;
-extern u16 gUnknown_0203935C;
+
+extern u16 gUnknown_02039358;
+extern u16 gUnknown_0203935A;
+extern s16 gUnknown_0203935C;
+
extern u8 gReservedSpritePaletteCount;
+// data/data2
+extern struct MonCoords gMonFrontPicCoords[];
+extern struct SpriteSheet gMonFrontPicTable[];
+
// data/starter_choose
extern u16 gBirchBagGrassPal[32];
extern u8 gBirchBagTilemap[];
extern u8 gBirchHelpGfx[];
-// data/credits
+// data/hall_of_fame
+extern void *gUnknown_0840B5A0[];
+
+// data/credits
extern u16 gUnknown_0840B7BC[32];
extern u16 gUnknown_0840B7FC[32];
+extern u8 gUnknown_0840B85A[];
extern struct CreditsEntry *gCreditsEntryPointerTable[][5];
+extern u8 gUnknown_0840CA00[][2];
extern struct SpriteSheet gUnknown_0840CAA0;
extern struct SpritePalette gUnknown_0840CAB0;
+extern union AnimCmd *gSpriteAnimTable_0840CA54[];
+extern union AnimCmd *gSpriteAnimTable_0840CA94[];
+extern struct SpriteTemplate gSpriteTemplate_840CAEC;
+
+// data/intro_credits_graphics
+extern const struct SpriteSheet gIntro2BrendanSpriteSheet;
+extern const struct SpriteSheet gIntro2MaySpriteSheet;
+extern const struct SpriteSheet gIntro2BicycleSpriteSheet;
+extern const struct SpritePalette gIntro2SpritePalettes[];
+extern const struct SpriteSheet gUnknown_08416E24;
+extern const struct SpriteSheet gUnknown_08416E34;
+
+// graphics
+extern u8 gCreditsCopyrightEnd_Gfx[];
+extern u16 gIntroCopyright_Pal[16];
static void task_a_8143B38(u8 taskIdA);
-void task_a_8143B68(u8 taskIdA);
+static void task_a_8143B68(u8 taskIdA);
static void task_a_8143BFC(u8 taskIdA);
-static void task_a_080C9BFC(u8 taskIdA);
+static void task_a_80C9BFC(u8 taskIdA);
static void task_a_8143CC0(u8 taskIdA);
static void task_a_8143D04(u8 taskIdA);
static void task_a_8143EBC(u8 taskIdA);
@@ -157,12 +223,14 @@ static void task_a_8144114(u8 taskIdA);
static void sub_8144130(void);
static void task_b_81441B8(u8 taskIdB);
static u8 sub_8144454(u8 page, u8 taskIdA);
-
void task_d_8144514(u8 taskIdD);
-u8 sub_8144ECC(u8 data, u8 taskIdA);
-void sub_81450AC(u8 taskIdA);
+static bool8 sub_8144ECC(u8 data, u8 taskIdA);
+static void sub_81450AC(u8 taskIdA);
void sub_8145128(u16, u16, u16);
-void sub_81452D0(int, int);
+void sub_81452D0(u16 arg0, u16 arg1);
+static void spritecb_player_8145378(struct Sprite *sprite);
+static void spritecb_rival_8145420(struct Sprite *sprite);
+u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3);
void sub_81458DC(void);
static void vblank_8143948(void) {
@@ -245,7 +313,6 @@ void sub_81439D0(void) {
BeginNormalPaletteFade(-1, 0, 16, 0, 0);
-
savedIme = REG_IME;
REG_IME = 0;
REG_IE |= INTR_FLAG_VBLANK;
@@ -269,7 +336,7 @@ void sub_81439D0(void) {
gUnknown_02039322 = taskIdA;
}
-void task_a_8143B38(u8 taskIdA) {
+static void task_a_8143B38(u8 taskIdA) {
if (gPaletteFade.active)
{
return;
@@ -278,7 +345,7 @@ void task_a_8143B38(u8 taskIdA) {
gTasks[taskIdA].func = task_a_8143B68;
}
-void task_a_8143B68(u8 taskIdA) {
+static void task_a_8143B68(u8 taskIdA) {
u16 data11;
if (gTasks[taskIdA].data[TDA_4])
@@ -320,10 +387,10 @@ static void task_a_8143BFC(u8 taskIdA) {
REG_DISPCNT = 0;
sub_81450AC(taskIdA);
- gTasks[taskIdA].func = task_a_080C9BFC;
+ gTasks[taskIdA].func = task_a_80C9BFC;
}
-static void task_a_080C9BFC(u8 taskIdA) {
+static void task_a_80C9BFC(u8 taskIdA) {
u16 backup;
SetVBlankCallback(NULL);
@@ -357,7 +424,7 @@ static void task_a_8143CC0(u8 taskIdA) {
}
#ifdef NONMATCHING
-static void task_a_8143D04(u8 taskIdA) {
+void task_a_8143D04(u8 taskIdA) {
switch (gMain.state) {
default:
case 0: {
@@ -396,8 +463,8 @@ static void task_a_8143D04(u8 taskIdA) {
case 1: {
gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(task_d_8144514, 0);
- gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_0] = 1;
- gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_1] = taskIdA;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA;
gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7];
BeginNormalPaletteFade(-1, 0, 16, 0, 0);
@@ -415,7 +482,7 @@ static void task_a_8143D04(u8 taskIdA) {
}
#else
__attribute__((naked))
-static void task_a_8143D04(u8 taskId) {
+void task_a_8143D04(u8 taskId) {
asm(".syntax unified\n\
push {r4-r7,lr}\n\
mov r7, r9\n\
@@ -612,6 +679,7 @@ _08143EB4: .4byte gUnknown_0203935C\n\
_08143EB8: .4byte task_a_8143B38\n\
.syntax divided\n");
}
+
#endif
static void task_a_8143EBC(u8 taskIdA) {
@@ -935,3 +1003,1942 @@ static u8 sub_8144454(u8 page, u8 taskIdA) {
return FALSE;
}
+
+#define UNK_DEFINE_44 (0x44)
+
+#ifdef NONMATCHING
+void task_d_8144514(u8 taskIdD) {
+ u8 local1;
+
+ switch (gTasks[taskIdD].data[TDD_STATE])
+ {
+ case 0:
+ break;
+
+ case 1:
+ if (unk_201C000.var_8A == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14])
+ {
+ break;
+ }
+
+ gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] = 0;
+ gTasks[taskIdD].data[TDD_STATE] += 1;
+
+ break;
+
+ case 2:
+ if (unk_201C000.var_88 == UNK_DEFINE_44)
+ {
+ break;
+ }
+
+ if (gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68)
+ {
+ break;
+ }
+
+ local1 = sub_81456B4(
+ unk_201C000.var_00[unk_201C000.var_8C],
+ gUnknown_0840CA00[unk_201C000.var_8A][0],
+ gUnknown_0840CA00[unk_201C000.var_8A][1],
+ unk_201C000.var_8A
+ );
+
+ if (unk_201C000.var_8C > unk_201C000.var_8E - 1)
+ {
+ unk_201C000.var_8C += 1;
+ gSprites[local1].data3 = 50;
+ }
+ else
+ {
+ unk_201C000.var_8C = 0;
+ gSprites[local1].data3 = 512;
+ }
+
+ unk_201C000.var_88 += 1;
+
+ if (unk_201C000.var_8A == 2)
+ {
+ unk_201C000.var_8A = 0;
+ }
+ else
+ {
+ unk_201C000.var_8A += 1;
+ }
+
+ gTasks[taskIdD].data[TDD_3] = 50;
+ gTasks[taskIdD].data[TDD_STATE] += 1;
+ break;
+
+ case 3:
+ if (gTasks[taskIdD].data[TDD_3] != 0)
+ {
+ gTasks[taskIdD].data[TDD_3] -= 1;
+ break;
+ }
+
+ gTasks[taskIdD].data[TDD_STATE] = 1;
+ break;
+ }
+}
+#else
+__attribute__((naked))
+void task_d_8144514(u8 taskIdD) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ ldr r6, _08144548 @ =0x0201c000\n\
+ ldr r3, _0814454C @ =gTasks\n\
+ lsls r0, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r2, r0, r3\n\
+ movs r1, 0x8\n\
+ ldrsh r0, [r2, r1]\n\
+ cmp r0, 0x1\n\
+ beq _08144550\n\
+ cmp r0, 0x1\n\
+ bgt _0814453C\n\
+ b _08144658\n\
+_0814453C:\n\
+ cmp r0, 0x2\n\
+ beq _08144584\n\
+ cmp r0, 0x3\n\
+ bne _08144546\n\
+ b _08144644\n\
+_08144546:\n\
+ b _08144658\n\
+ .align 2, 0\n\
+_08144548: .4byte 0x0201c000\n\
+_0814454C: .4byte gTasks\n\
+_08144550:\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x8A\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0814456E\n\
+ movs r4, 0xA\n\
+ ldrsh r0, [r2, r4]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r3\n\
+ movs r4, 0x24\n\
+ ldrsh r0, [r1, r4]\n\
+ cmp r0, 0\n\
+ beq _08144658\n\
+_0814456E:\n\
+ movs r0, 0xA\n\
+ ldrsh r1, [r2, r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r3\n\
+ movs r1, 0\n\
+ strh r1, [r0, 0x24]\n\
+ ldrh r0, [r2, 0x8]\n\
+ adds r0, 0x1\n\
+ b _08144656\n\
+_08144584:\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x88\n\
+ ldrh r1, [r0]\n\
+ mov r9, r0\n\
+ cmp r1, 0x44\n\
+ beq _08144658\n\
+ movs r4, 0xA\n\
+ ldrsh r1, [r2, r4]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r3\n\
+ ldr r1, [r0]\n\
+ ldr r0, _081445EC @ =sub_8143B68\n\
+ cmp r1, r0\n\
+ bne _08144658\n\
+ adds r7, r6, 0\n\
+ adds r7, 0x8C\n\
+ ldrh r0, [r7]\n\
+ lsls r0, 1\n\
+ adds r0, r6\n\
+ ldrh r0, [r0]\n\
+ ldr r4, _081445F0 @ =gUnknown_0840CA00\n\
+ adds r5, r6, 0\n\
+ adds r5, 0x8A\n\
+ ldrh r3, [r5]\n\
+ lsls r2, r3, 1\n\
+ adds r1, r2, r4\n\
+ ldrb r1, [r1]\n\
+ adds r4, 0x1\n\
+ adds r2, r4\n\
+ ldrb r2, [r2]\n\
+ bl sub_81456B4\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldrh r1, [r7]\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x8E\n\
+ ldrh r0, [r0]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ bge _081445F8\n\
+ adds r0, r1, 0x1\n\
+ strh r0, [r7]\n\
+ ldr r1, _081445F4 @ =gSprites\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ movs r1, 0x32\n\
+ b _0814460A\n\
+ .align 2, 0\n\
+_081445EC: .4byte task_a_8143B68\n\
+_081445F0: .4byte gUnknown_0840CA00\n\
+_081445F4: .4byte gSprites\n\
+_081445F8:\n\
+ movs r0, 0\n\
+ strh r0, [r7]\n\
+ ldr r1, _08144620 @ =gSprites\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ movs r1, 0x80\n\
+ lsls r1, 2\n\
+_0814460A:\n\
+ strh r1, [r0, 0x34]\n\
+ mov r1, r9\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r5]\n\
+ cmp r0, 0x2\n\
+ bne _08144624\n\
+ movs r0, 0\n\
+ b _08144626\n\
+ .align 2, 0\n\
+_08144620: .4byte gSprites\n\
+_08144624:\n\
+ adds r0, 0x1\n\
+_08144626:\n\
+ strh r0, [r5]\n\
+ ldr r0, _08144640 @ =gTasks\n\
+ mov r2, r8\n\
+ lsls r1, r2, 2\n\
+ add r1, r8\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ movs r0, 0x32\n\
+ strh r0, [r1, 0xE]\n\
+ ldrh r0, [r1, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0x8]\n\
+ b _08144658\n\
+ .align 2, 0\n\
+_08144640: .4byte gTasks\n\
+_08144644:\n\
+ ldrh r1, [r2, 0xE]\n\
+ movs r3, 0xE\n\
+ ldrsh r0, [r2, r3]\n\
+ cmp r0, 0\n\
+ beq _08144654\n\
+ subs r0, r1, 0x1\n\
+ strh r0, [r2, 0xE]\n\
+ b _08144658\n\
+_08144654:\n\
+ movs r0, 0x1\n\
+_08144656:\n\
+ strh r0, [r2, 0x8]\n\
+_08144658:\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
+
+__attribute__((naked))
+void task_c_8144664(u8 taskIdC) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r1, _0814468C @ =gTasks\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ movs r2, 0x8\n\
+ ldrsh r0, [r0, r2]\n\
+ adds r6, r1, 0\n\
+ cmp r0, 0x32\n\
+ bls _08144680\n\
+ b _0814492C\n\
+_08144680:\n\
+ lsls r0, 2\n\
+ ldr r1, _08144690 @ =_08144694\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_0814468C: .4byte gTasks\n\
+_08144690: .4byte _08144694\n\
+ .align 2, 0\n\
+_08144694:\n\
+ .4byte _08144760\n\
+ .4byte _08144784\n\
+ .4byte _081447D8\n\
+ .4byte _081447F0\n\
+ .4byte _0814482C\n\
+ .4byte _08144850\n\
+ .4byte _0814489C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _081448A8\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _081448C8\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _081448EC\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _0814492C\n\
+ .4byte _08144920\n\
+_08144760:\n\
+ lsls r4, r5, 2\n\
+ adds r4, r5\n\
+ lsls r4, 3\n\
+ adds r4, r6\n\
+ ldrh r0, [r4, 0x12]\n\
+ lsls r0, 16\n\
+ asrs r0, 17\n\
+ movs r1, 0x7F\n\
+ ands r0, r1\n\
+ movs r1, 0xC\n\
+ bl Sin\n\
+ ldr r1, _08144780 @ =gUnknown_0203935A\n\
+ strh r0, [r1]\n\
+ b _081447A8\n\
+ .align 2, 0\n\
+_08144780: .4byte gUnknown_0203935A\n\
+_08144784:\n\
+ ldr r7, _081447B0 @ =gUnknown_0203935A\n\
+ movs r3, 0\n\
+ ldrsh r4, [r7, r3]\n\
+ cmp r4, 0\n\
+ beq _081447B4\n\
+ lsls r4, r5, 2\n\
+ adds r4, r5\n\
+ lsls r4, 3\n\
+ adds r4, r6\n\
+ ldrh r0, [r4, 0x12]\n\
+ lsls r0, 16\n\
+ asrs r0, 17\n\
+ movs r1, 0x7F\n\
+ ands r0, r1\n\
+ movs r1, 0xC\n\
+ bl Sin\n\
+ strh r0, [r7]\n\
+_081447A8:\n\
+ ldrh r0, [r4, 0x12]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x12]\n\
+ b _0814492C\n\
+ .align 2, 0\n\
+_081447B0: .4byte gUnknown_0203935A\n\
+_081447B4:\n\
+ ldr r3, _081447D4 @ =gSprites\n\
+ lsls r1, r5, 2\n\
+ adds r1, r5\n\
+ lsls r1, 3\n\
+ adds r1, r6\n\
+ movs r0, 0xC\n\
+ ldrsh r2, [r1, r0]\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ movs r2, 0x2\n\
+ strh r2, [r0, 0x2E]\n\
+ strh r4, [r1, 0x12]\n\
+ b _08144848\n\
+ .align 2, 0\n\
+_081447D4: .4byte gSprites\n\
+_081447D8:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r1, r0, r6\n\
+ ldrh r2, [r1, 0x12]\n\
+ movs r3, 0x12\n\
+ ldrsh r0, [r1, r3]\n\
+ cmp r0, 0x3F\n\
+ bgt _08144848\n\
+ adds r0, r2, 0x1\n\
+ strh r0, [r1, 0x12]\n\
+ b _08144866\n\
+_081447F0:\n\
+ ldr r3, _08144828 @ =gSprites\n\
+ lsls r2, r5, 2\n\
+ adds r2, r5\n\
+ lsls r2, 3\n\
+ adds r2, r6\n\
+ movs r0, 0xC\n\
+ ldrsh r1, [r2, r0]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ movs r1, 0x3\n\
+ strh r1, [r0, 0x2E]\n\
+ movs r0, 0xE\n\
+ ldrsh r1, [r2, r0]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x2E]\n\
+ movs r0, 0x78\n\
+ strh r0, [r2, 0x10]\n\
+ ldrh r0, [r2, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r2, 0x8]\n\
+ b _0814492C\n\
+ .align 2, 0\n\
+_08144828: .4byte gSprites\n\
+_0814482C:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r1, r0, r6\n\
+ ldrh r2, [r1, 0x10]\n\
+ movs r3, 0x10\n\
+ ldrsh r0, [r1, r3]\n\
+ cmp r0, 0\n\
+ beq _08144844\n\
+ subs r0, r2, 0x1\n\
+ strh r0, [r1, 0x10]\n\
+ b _0814492C\n\
+_08144844:\n\
+ movs r0, 0x40\n\
+ strh r0, [r1, 0x12]\n\
+_08144848:\n\
+ ldrh r0, [r1, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0x8]\n\
+ b _0814492C\n\
+_08144850:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r4, r0, r6\n\
+ ldrh r1, [r4, 0x12]\n\
+ movs r2, 0x12\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r0, 0\n\
+ ble _0814487C\n\
+ subs r0, r1, 0x1\n\
+ strh r0, [r4, 0x12]\n\
+_08144866:\n\
+ movs r1, 0x7F\n\
+ ands r0, r1\n\
+ movs r1, 0x14\n\
+ bl Sin\n\
+ ldr r1, _08144878 @ =gUnknown_0203935A\n\
+ strh r0, [r1]\n\
+ b _0814492C\n\
+ .align 2, 0\n\
+_08144878: .4byte gUnknown_0203935A\n\
+_0814487C:\n\
+ ldr r2, _08144898 @ =gSprites\n\
+ movs r3, 0xC\n\
+ ldrsh r1, [r4, r3]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x2E]\n\
+ ldrh r0, [r4, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x8]\n\
+ b _0814492C\n\
+ .align 2, 0\n\
+_08144898: .4byte gSprites\n\
+_0814489C:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r0, r6\n\
+ movs r1, 0x32\n\
+ b _0814492A\n\
+_081448A8:\n\
+ ldr r3, _081448C4 @ =gSprites\n\
+ lsls r1, r5, 2\n\
+ adds r1, r5\n\
+ lsls r1, 3\n\
+ adds r1, r6\n\
+ movs r0, 0xE\n\
+ ldrsh r2, [r1, r0]\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ movs r2, 0x2\n\
+ b _081448E0\n\
+ .align 2, 0\n\
+_081448C4: .4byte gSprites\n\
+_081448C8:\n\
+ ldr r3, _081448E8 @ =gSprites\n\
+ lsls r1, r5, 2\n\
+ adds r1, r5\n\
+ lsls r1, 3\n\
+ adds r1, r6\n\
+ movs r0, 0xC\n\
+ ldrsh r2, [r1, r0]\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ movs r2, 0x4\n\
+_081448E0:\n\
+ strh r2, [r0, 0x2E]\n\
+ movs r0, 0x32\n\
+ strh r0, [r1, 0x8]\n\
+ b _0814492C\n\
+ .align 2, 0\n\
+_081448E8: .4byte gSprites\n\
+_081448EC:\n\
+ ldr r3, _0814491C @ =gSprites\n\
+ lsls r2, r5, 2\n\
+ adds r2, r5\n\
+ lsls r2, 3\n\
+ adds r2, r6\n\
+ movs r0, 0xC\n\
+ ldrsh r1, [r2, r0]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ movs r1, 0x5\n\
+ strh r1, [r0, 0x2E]\n\
+ movs r0, 0xE\n\
+ ldrsh r1, [r2, r0]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r3\n\
+ movs r1, 0x3\n\
+ strh r1, [r0, 0x2E]\n\
+ movs r0, 0x32\n\
+ strh r0, [r2, 0x8]\n\
+ b _0814492C\n\
+ .align 2, 0\n\
+_0814491C: .4byte gSprites\n\
+_08144920:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r0, r6\n\
+ movs r1, 0\n\
+_0814492A:\n\
+ strh r1, [r0, 0x8]\n\
+_0814492C:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+
+#define UNK_DEF_1F3 (499)
+
+void task_e_8144934(u8 taskIdE) {
+ s16 taskIdC;
+
+ switch (gTasks[taskIdE].data[TDE_0])
+ {
+ default:
+ case 0:
+ if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
+ {
+
+ if (gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_B_ID]].data[TDB_CURRENT_PAGE] == PAGE_ART_DIRECTOR)
+ {
+ gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 20;
+ gTasks[taskIdE].data[TDE_1] = 0x7FFF;
+ }
+ }
+
+ sub_8149020(0);
+ break;
+
+ case 1:
+ sub_8149020(0);
+ break;
+
+ case 2:
+ if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
+ {
+ taskIdC = gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID];
+
+ // Floor to multiple of 128
+ if ((gTasks[taskIdC].data[TDC_5] & - 128) == 640)
+ {
+ gTasks[taskIdC].data[TDC_0] = 1;
+ gTasks[taskIdE].data[TDE_1] = 0x7FFF;
+ }
+ }
+ sub_8149020(1);
+ break;
+
+ case 3:
+ if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
+ {
+
+ if (gTasks[taskIdE].data[TDE_1] == UNK_DEF_1F3)
+ {
+ gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 10;
+ gTasks[taskIdE].data[TDE_1] = 0x7FFF;
+ }
+ else
+ {
+ gTasks[taskIdE].data[TDE_1] += 1;
+ }
+ }
+
+ sub_8149020(1);
+ break;
+
+ case 4:
+ sub_8149020(2);
+ break;
+ }
+}
+
+#define UNK_DEFINE_45 (0x45)
+
+static void sub_8144A68(u8 data, u8 taskIdA) {
+ switch (data)
+ {
+ case 0:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8);
+ break;
+
+ case 1:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8);
+ break;
+
+ case 2:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8);
+ break;
+
+ case 3:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = - 32;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8);
+ break;
+
+ case 4:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 88;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_8148EC0(2, 0x2000, 0x200, 8);
+ break;
+ }
+
+ gTasks[taskIdA].data[TDA_TASK_E_ID] = CreateTask(task_e_8144934, 0);
+ gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_0] = data;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_1] = 0;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_TASK_A_ID] = taskIdA;
+
+ gTasks[taskIdA].data[TDA_TASK_C_ID] = CreateTask(task_c_8144664, 0);
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_0] = 0;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_1] = taskIdA;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_2] = gTasks[taskIdA].data[TDA_PLAYER_CYCLIST];
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_3] = gTasks[taskIdA].data[TDA_RIVAL_CYCLIST];
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_4] = 0;
+
+ if (data == 2)
+ {
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_5] = UNK_DEFINE_45;
+ }
+}
+
+static bool8 sub_8144ECC(u8 data, u8 taskIdA) {
+ u8 spriteId;
+
+ switch (gMain.state)
+ {
+ default:
+ case 0:
+ REG_DISPCNT = 0;
+ REG_BG3HOFS = 8;
+ REG_BG3VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gMain.state = 1;
+ break;
+
+ case 1:
+ gUnknown_02039358 = 34;
+ gUnknown_0203935A = 0;
+ sub_8148CB0(data);
+ gMain.state += 1;
+ break;
+
+ case 2:
+ if (gSaveBlock2.playerGender == MALE)
+ {
+ LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet);
+ LoadCompressedObjectPic(&gUnknown_08416E34);
+ LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet);
+ LoadSpritePalettes(gIntro2SpritePalettes);
+
+ spriteId = intro_create_brendan_sprite(120, 46);
+ gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = spritecb_player_8145378;
+ gSprites[spriteId].anims = gSpriteAnimTable_0840CA54;
+
+ spriteId = intro_create_may_sprite(272, 46);
+ gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = spritecb_rival_8145420;
+ gSprites[spriteId].anims = gSpriteAnimTable_0840CA94;
+ }
+ else
+ {
+ LoadCompressedObjectPic(&gIntro2MaySpriteSheet);
+ LoadCompressedObjectPic(&gUnknown_08416E24);
+ LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet);
+ LoadSpritePalettes(gIntro2SpritePalettes);
+
+ spriteId = intro_create_may_sprite(120, 46);
+ gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = spritecb_player_8145378;
+ gSprites[spriteId].anims = gSpriteAnimTable_0840CA54;
+
+ spriteId = intro_create_brendan_sprite(272, 46);
+ gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = spritecb_rival_8145420;
+ gSprites[spriteId].anims = gSpriteAnimTable_0840CA94;
+ };
+
+ gMain.state += 1;
+ break;
+
+ case 3:
+ sub_8144A68(data, taskIdA);
+ sub_8148E90(data);
+ gMain.state = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void sub_81450AC(u8 taskIdA) {
+ if (gTasks[taskIdA].data[TDA_0] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_0]);
+ gTasks[taskIdA].data[TDA_0] = 0;
+ }
+
+ if (gTasks[taskIdA].data[TDA_TASK_C_ID] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_TASK_C_ID]);
+ gTasks[taskIdA].data[TDA_TASK_C_ID] = 0;
+ }
+
+ if (gTasks[taskIdA].data[TDA_TASK_E_ID] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_TASK_E_ID]);
+ gTasks[taskIdA].data[TDA_TASK_E_ID] = 0;
+ }
+
+ if (gTasks[taskIdA].data[TDA_TASK_D_ID] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_TASK_D_ID]);
+ gTasks[taskIdA].data[TDA_TASK_D_ID] = 0;
+ }
+
+ gUnknown_0203935C = 1;
+}
+
+__attribute__((naked))
+void sub_8145128(u16 arg0, u16 arg1, u16 arg2) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ adds r3, r0, 0\n\
+ adds r4, r2, 0\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ lsls r1, 16\n\
+ lsrs r7, r1, 16\n\
+ lsls r4, 16\n\
+ lsrs r5, r4, 16\n\
+ ldr r0, _081451EC @ =gCreditsCopyrightEnd_Gfx\n\
+ movs r6, 0xC0\n\
+ lsls r6, 19\n\
+ adds r3, r6\n\
+ adds r1, r3, 0\n\
+ bl LZ77UnCompVram\n\
+ ldr r0, _081451F0 @ =gIntroCopyright_Pal\n\
+ adds r1, r5, 0\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ lsrs r4, 20\n\
+ lsls r4, 28\n\
+ lsrs r4, 16\n\
+ movs r2, 0\n\
+ adds r1, r4, 0x1\n\
+ ldr r3, _081451F4 @ =0x000003ff\n\
+_0814515E:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r7\n\
+ adds r0, r6\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, r3\n\
+ bls _0814515E\n\
+ movs r2, 0\n\
+ adds r0, r4, 0x2\n\
+ adds r6, r4, 0\n\
+ adds r6, 0x17\n\
+ movs r1, 0x2B\n\
+ adds r1, r4\n\
+ mov r12, r1\n\
+ adds r4, 0x42\n\
+ ldr r5, _081451F8 @ =0x060001c8\n\
+ adds r3, r0, 0\n\
+_08145184:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r7\n\
+ adds r0, r5\n\
+ adds r1, r2, r3\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, 0x14\n\
+ bls _08145184\n\
+ movs r2, 0\n\
+ ldr r5, _081451FC @ =0x06000248\n\
+ adds r3, r6, 0\n\
+_0814519E:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r7\n\
+ adds r0, r5\n\
+ adds r1, r2, r3\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, 0x13\n\
+ bls _0814519E\n\
+ movs r2, 0\n\
+ ldr r5, _08145200 @ =0x060002c8\n\
+ mov r3, r12\n\
+_081451B8:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r7\n\
+ adds r0, r5\n\
+ adds r1, r2, r3\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, 0x16\n\
+ bls _081451B8\n\
+ movs r2, 0\n\
+ ldr r3, _08145204 @ =0x06000348\n\
+_081451D0:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r7\n\
+ adds r0, r3\n\
+ adds r1, r2, r4\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, 0xB\n\
+ bls _081451D0\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_081451EC: .4byte gCreditsCopyrightEnd_Gfx\n\
+_081451F0: .4byte gIntroCopyright_Pal\n\
+_081451F4: .4byte 0x000003ff\n\
+_081451F8: .4byte 0x060001c8\n\
+_081451FC: .4byte 0x06000248\n\
+_08145200: .4byte 0x060002c8\n\
+_08145204: .4byte 0x06000348\n\
+ .syntax divided\n");
+}
+
+u16 sub_8145208(u8 arg0) {
+
+ u16 out = (arg0 & 0x3F) + 80;
+
+ if (arg0 == 0xFF)
+ {
+ return 1;
+ }
+
+ if (arg0 & (1 << 7))
+ {
+ out |= 0x800;
+ }
+
+ if (arg0 & (1 << 6))
+ {
+ out |= 0x400;
+ }
+
+ return out;
+}
+
+__attribute__((naked))
+void sub_814524C(int arg0, u8 arg1, u8 arg2, u16 arg3, int arg4) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0xC\n\
+ str r0, [sp]\n\
+ ldr r0, [sp, 0x2C]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r10, r1\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ str r2, [sp, 0x4]\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ str r3, [sp, 0x8]\n\
+ lsls r0, 16\n\
+ lsrs r0, 20\n\
+ lsls r0, 28\n\
+ lsrs r0, 16\n\
+ mov r9, r0\n\
+ movs r5, 0\n\
+_0814527A:\n\
+ movs r4, 0\n\
+ lsls r7, r5, 1\n\
+ ldr r1, [sp, 0x4]\n\
+ adds r0, r1, r5\n\
+ adds r2, r5, 0x1\n\
+ mov r8, r2\n\
+ lsls r0, 6\n\
+ ldr r1, [sp, 0x8]\n\
+ adds r6, r0, r1\n\
+_0814528C:\n\
+ adds r0, r7, r5\n\
+ adds r0, r4\n\
+ ldr r2, [sp]\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ bl sub_8145208\n\
+ mov r2, r10\n\
+ adds r1, r2, r4\n\
+ lsls r1, 1\n\
+ adds r1, r6\n\
+ movs r2, 0xC0\n\
+ lsls r2, 19\n\
+ adds r1, r2\n\
+ add r0, r9\n\
+ strh r0, [r1]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x2\n\
+ bls _0814528C\n\
+ mov r1, r8\n\
+ lsls r0, r1, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x4\n\
+ bls _0814527A\n\
+ add sp, 0xC\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+
+#ifdef NONMATCHING
+void sub_81452D0(u16 arg0, u16 arg1) {
+ u16 i;
+
+
+ for (i = 0; i < 0x400; i ++)
+ {
+ (u16 *) (VRAM + )
+ }
+ sub_814524C(&gUnknown_0840B85A, 7, 7, arg0, arg1);
+ sub_814524C(&gUnknown_0840B869, 11, 7, arg0, arg1);
+ sub_814524C(&gUnknown_0840B878, 15, 7, arg0, arg1);
+ sub_814524C(&gUnknown_0840B85A, 19, 7, arg0, arg1);
+}
+#else
+__attribute__((naked))
+void sub_81452D0(u16 arg0, u16 arg1) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x4\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ lsls r1, 16\n\
+ lsrs r6, r1, 16\n\
+ lsrs r1, 20\n\
+ lsls r1, 28\n\
+ lsrs r1, 16\n\
+ movs r2, 0\n\
+ ldr r7, _08145360 @ =gUnknown_0840B83C\n\
+ movs r4, 0xC0\n\
+ lsls r4, 19\n\
+ adds r1, 0x1\n\
+ ldr r3, _08145364 @ =0x000003ff\n\
+_081452EE:\n\
+ lsls r0, r2, 1\n\
+ adds r0, r5\n\
+ adds r0, r4\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, r3\n\
+ bls _081452EE\n\
+ str r6, [sp]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x3\n\
+ movs r2, 0x7\n\
+ adds r3, r5, 0\n\
+ bl sub_814524C\n\
+ ldr r0, _08145368 @ =gUnknown_0840B84B\n\
+ str r6, [sp]\n\
+ movs r1, 0x7\n\
+ movs r2, 0x7\n\
+ adds r3, r5, 0\n\
+ bl sub_814524C\n\
+ ldr r4, _0814536C @ =gUnknown_0840B85A\n\
+ str r6, [sp]\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ movs r2, 0x7\n\
+ adds r3, r5, 0\n\
+ bl sub_814524C\n\
+ str r6, [sp]\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x10\n\
+ movs r2, 0x7\n\
+ adds r3, r5, 0\n\
+ bl sub_814524C\n\
+ ldr r0, _08145370 @ =gUnknown_0840B869\n\
+ str r6, [sp]\n\
+ movs r1, 0x14\n\
+ movs r2, 0x7\n\
+ adds r3, r5, 0\n\
+ bl sub_814524C\n\
+ ldr r0, _08145374 @ =gUnknown_0840B878\n\
+ str r6, [sp]\n\
+ movs r1, 0x18\n\
+ movs r2, 0x7\n\
+ adds r3, r5, 0\n\
+ bl sub_814524C\n\
+ add sp, 0x4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08145360: .4byte gUnknown_0840B83C\n\
+_08145364: .4byte 0x000003ff\n\
+_08145368: .4byte gUnknown_0840B84B\n\
+_0814536C: .4byte gUnknown_0840B85A\n\
+_08145370: .4byte gUnknown_0840B869\n\
+_08145374: .4byte gUnknown_0840B878\n\
+ .syntax divided\n");
+}
+#endif
+
+static void spritecb_player_8145378(struct Sprite *sprite) {
+ if (gUnknown_0203935C != 0)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ switch (sprite->data0)
+ {
+ case 0:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ break;
+
+ case 1:
+ StartSpriteAnimIfDifferent(sprite, 1);
+ if (sprite->pos1.x > - 32)
+ {
+ sprite->pos1.x -= 1;
+ }
+ break;
+
+ case 2:
+ StartSpriteAnimIfDifferent(sprite, 2);
+ break;
+
+ case 3:
+ StartSpriteAnimIfDifferent(sprite, 3);
+ break;
+
+ case 4:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ if (sprite->pos1.x > 120)
+ {
+ sprite->pos1.x -= 1;
+ }
+ break;
+
+ case 5:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ if (sprite->pos1.x > - 32)
+ {
+ sprite->pos1.x -= 1;
+ }
+ break;
+ }
+}
+
+static void spritecb_rival_8145420(struct Sprite *sprite) {
+ if (gUnknown_0203935C != 0)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ switch (sprite->data0)
+ {
+ case 0:
+ sprite->pos2.y = 0;
+ StartSpriteAnimIfDifferent(sprite, 0);
+ break;
+
+ case 1:
+ if (sprite->pos1.x > 200)
+ {
+ StartSpriteAnimIfDifferent(sprite, 1);
+ }
+ else
+ {
+ StartSpriteAnimIfDifferent(sprite, 2);
+ }
+
+ if (sprite->pos1.x > - 32)
+ {
+ sprite->pos1.x -= 2;
+ }
+
+ sprite->pos2.y = - gUnknown_0203935A;
+ break;
+
+ case 2:
+ sprite->data7 += 1;
+ StartSpriteAnimIfDifferent(sprite, 0);
+
+ if ((sprite->data7 & 3) == 0)
+ {
+ sprite->pos1.x += 1;
+ }
+ break;
+
+ case 3:
+ StartSpriteAnimIfDifferent(sprite, 0);
+
+ if (sprite->pos1.x > - 32)
+ {
+ sprite->pos1.x -= 1;
+ }
+ break;
+
+
+ }
+}
+
+__attribute__((naked))
+void spritecb_81454E0(struct Sprite *sprite) {
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ sub sp, 0x4\n\
+ adds r5, r0, 0\n\
+ ldr r0, _081454F8 @ =gUnknown_0203935C\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ cmp r0, 0\n\
+ beq _081454FC\n\
+ adds r0, r5, 0\n\
+ bl DestroySprite\n\
+ b _081456A6\n\
+ .align 2, 0\n\
+_081454F8: .4byte gUnknown_0203935C\n\
+_081454FC:\n\
+ ldrh r0, [r5, 0x3C]\n\
+ adds r0, 0x1\n\
+ strh r0, [r5, 0x3C]\n\
+ movs r2, 0x2E\n\
+ ldrsh r0, [r5, r2]\n\
+ cmp r0, 0xA\n\
+ bhi _08145544\n\
+ lsls r0, 2\n\
+ ldr r1, _08145514 @ =_08145518\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08145514: .4byte _08145518\n\
+ .align 2, 0\n\
+_08145518:\n\
+ .4byte _08145544\n\
+ .4byte _0814559E\n\
+ .4byte _08145620\n\
+ .4byte _08145660\n\
+ .4byte _08145544\n\
+ .4byte _08145544\n\
+ .4byte _08145544\n\
+ .4byte _08145544\n\
+ .4byte _08145544\n\
+ .4byte _08145544\n\
+ .4byte _08145696\n\
+_08145544:\n\
+ ldrb r1, [r5, 0x1]\n\
+ movs r0, 0x4\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ movs r1, 0x1\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x1]\n\
+ movs r0, 0x30\n\
+ ldrsh r1, [r5, r0]\n\
+ movs r0, 0x1F\n\
+ ands r1, r0\n\
+ lsls r1, 1\n\
+ ldrb r2, [r5, 0x3]\n\
+ movs r0, 0x3F\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x3]\n\
+ movs r0, 0x10\n\
+ strh r0, [r5, 0x32]\n\
+ ldrh r4, [r5, 0x30]\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ movs r0, 0x80\n\
+ lsls r0, 9\n\
+ movs r1, 0x10\n\
+ bl __divsi3\n\
+ adds r1, r0, 0\n\
+ str r1, [sp]\n\
+ adds r0, r4, 0\n\
+ movs r2, 0\n\
+ movs r3, 0\n\
+ bl SetOamMatrix\n\
+ adds r2, r5, 0\n\
+ adds r2, 0x3E\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x5\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ movs r0, 0x1\n\
+ strh r0, [r5, 0x2E]\n\
+ b _081456A6\n\
+_0814559E:\n\
+ ldrh r1, [r5, 0x32]\n\
+ movs r2, 0x32\n\
+ ldrsh r0, [r5, r2]\n\
+ cmp r0, 0xFF\n\
+ bgt _081455D4\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x8\n\
+ strh r0, [r5, 0x32]\n\
+ ldrh r4, [r5, 0x30]\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ movs r0, 0x32\n\
+ ldrsh r1, [r5, r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 9\n\
+ bl __divsi3\n\
+ adds r1, r0, 0\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ str r1, [sp]\n\
+ adds r0, r4, 0\n\
+ movs r2, 0\n\
+ movs r3, 0\n\
+ bl SetOamMatrix\n\
+ b _081455DA\n\
+_081455D4:\n\
+ ldrh r0, [r5, 0x2E]\n\
+ adds r0, 0x1\n\
+ strh r0, [r5, 0x2E]\n\
+_081455DA:\n\
+ movs r2, 0x30\n\
+ ldrsh r1, [r5, r2]\n\
+ cmp r1, 0x2\n\
+ beq _081456A6\n\
+ cmp r1, 0x2\n\
+ bgt _081455EC\n\
+ cmp r1, 0x1\n\
+ beq _081455F2\n\
+ b _081456A6\n\
+_081455EC:\n\
+ cmp r1, 0x3\n\
+ beq _0814560A\n\
+ b _081456A6\n\
+_081455F2:\n\
+ ldrh r1, [r5, 0x3C]\n\
+ movs r0, 0x3\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08145602\n\
+ ldrh r0, [r5, 0x22]\n\
+ adds r0, 0x1\n\
+ strh r0, [r5, 0x22]\n\
+_08145602:\n\
+ ldrh r0, [r5, 0x20]\n\
+ subs r0, 0x2\n\
+ strh r0, [r5, 0x20]\n\
+ b _081456A6\n\
+_0814560A:\n\
+ ldrh r0, [r5, 0x3C]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _08145618\n\
+ ldrh r0, [r5, 0x22]\n\
+ adds r0, 0x1\n\
+ strh r0, [r5, 0x22]\n\
+_08145618:\n\
+ ldrh r0, [r5, 0x20]\n\
+ adds r0, 0x2\n\
+ strh r0, [r5, 0x20]\n\
+ b _081456A6\n\
+_08145620:\n\
+ ldrh r1, [r5, 0x34]\n\
+ movs r2, 0x34\n\
+ ldrsh r0, [r5, r2]\n\
+ cmp r0, 0\n\
+ beq _08145630\n\
+ subs r0, r1, 0x1\n\
+ strh r0, [r5, 0x34]\n\
+ b _081456A6\n\
+_08145630:\n\
+ ldr r1, _0814565C @ =REG_BLDCNT\n\
+ movs r2, 0xF4\n\
+ lsls r2, 4\n\
+ adds r0, r2, 0\n\
+ strh r0, [r1]\n\
+ adds r1, 0x2\n\
+ movs r0, 0x10\n\
+ strh r0, [r1]\n\
+ ldrb r1, [r5, 0x1]\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ strb r0, [r5, 0x1]\n\
+ movs r0, 0x10\n\
+ strh r0, [r5, 0x34]\n\
+ ldrh r0, [r5, 0x2E]\n\
+ adds r0, 0x1\n\
+ strh r0, [r5, 0x2E]\n\
+ b _081456A6\n\
+ .align 2, 0\n\
+_0814565C: .4byte REG_BLDCNT\n\
+_08145660:\n\
+ ldrh r1, [r5, 0x34]\n\
+ movs r2, 0x34\n\
+ ldrsh r0, [r5, r2]\n\
+ cmp r0, 0\n\
+ beq _08145684\n\
+ subs r1, 0x1\n\
+ strh r1, [r5, 0x34]\n\
+ ldr r3, _08145680 @ =REG_BLDALPHA\n\
+ movs r0, 0x34\n\
+ ldrsh r2, [r5, r0]\n\
+ movs r0, 0x10\n\
+ subs r0, r2\n\
+ lsls r0, 8\n\
+ adds r1, r0\n\
+ strh r1, [r3]\n\
+ b _081456A6\n\
+ .align 2, 0\n\
+_08145680: .4byte REG_BLDALPHA\n\
+_08145684:\n\
+ adds r2, r5, 0\n\
+ adds r2, 0x3E\n\
+ ldrb r0, [r2]\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ strb r0, [r2]\n\
+ movs r0, 0xA\n\
+ strh r0, [r5, 0x2E]\n\
+ b _081456A6\n\
+_08145696:\n\
+ ldr r0, _081456B0 @ =REG_BLDCNT\n\
+ movs r1, 0\n\
+ strh r1, [r0]\n\
+ adds r0, 0x2\n\
+ strh r1, [r0]\n\
+ adds r0, r5, 0\n\
+ bl DestroySprite\n\
+_081456A6:\n\
+ add sp, 0x4\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_081456B0: .4byte REG_BLDCNT\n\
+ .syntax divided\n");
+}
+
+#ifdef NONMATCHING
+u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3) {
+ u32 species;
+ u32 personality;
+ void *palette;
+ u8 spriteId;
+ u8 spriteId2;
+
+ species = NationalPokedexNumToSpecies(nationalNum);
+ switch (species) {
+ case SPECIES_UNOWN:
+ personality = gSaveBlock2.pokedex.unownPersonality;
+ break;
+
+ case SPECIES_SPINDA:
+ personality = gSaveBlock2.pokedex.spindaPersonality;
+ break;
+
+ default:
+ personality = 0;
+ break;
+ }
+
+ LoadSpecialPokePic(
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].x,
+ gMonFrontPicCoords[species].y,
+ 0x2000000,
+ gUnknown_0840B5A0[arg3],
+ species,
+ personality,
+ 1
+ );
+
+ palette = species_and_otid_get_pal(species, 0, 0xFFFF);
+ LoadCompressedPalette(palette, 0x100 + (arg3 * 16), 0x20);
+ sub_8143648(arg3, arg3);
+
+ spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
+ gSprites[spriteId].oam.paletteNum = arg3;
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].data1 = arg3 + 1;
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].callback = spritecb_81454E0;
+
+ spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1);
+ gSprites[spriteId2].data0 = spriteId;
+
+ StartSpriteAnimIfDifferent(&gSprites[spriteId2], arg3);
+
+ return spriteId;
+}
+#else
+__attribute__((naked))
+u8 sub_81456B4(u16 nationalNum, u16 x, u16 y, u16 arg3) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x14\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ mov r10, r1\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ str r2, [sp, 0x10]\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ mov r9, r3\n\
+ adds r0, r6, 0\n\
+ bl NationalPokedexNumToSpecies\n\
+ adds r6, r0, 0\n\
+ cmp r6, 0xC9\n\
+ beq _081456F8\n\
+ movs r0, 0x9A\n\
+ lsls r0, 1\n\
+ cmp r6, r0\n\
+ beq _081456EE\n\
+ movs r7, 0\n\
+ b _081456FC\n\
+_081456EE:\n\
+ ldr r0, _081456F4 @ =gSaveBlock2\n\
+ ldr r7, [r0, 0x20]\n\
+ b _081456FC\n\
+ .align 2, 0\n\
+_081456F4: .4byte gSaveBlock2\n\
+_081456F8:\n\
+ ldr r0, _081457E8 @ =gSaveBlock2\n\
+ ldr r7, [r0, 0x1C]\n\
+_081456FC:\n\
+ lsls r0, r6, 3\n\
+ ldr r1, _081457EC @ =gMonFrontPicTable\n\
+ adds r0, r1\n\
+ ldr r1, _081457F0 @ =gMonFrontPicCoords\n\
+ lsls r2, r6, 2\n\
+ adds r2, r1\n\
+ ldrb r1, [r2]\n\
+ ldrb r2, [r2, 0x1]\n\
+ movs r3, 0x80\n\
+ lsls r3, 18\n\
+ ldr r4, _081457F4 @ =gUnknown_0840B5A0\n\
+ mov r8, r4\n\
+ mov r5, r9\n\
+ lsls r4, r5, 2\n\
+ add r4, r8\n\
+ ldr r4, [r4]\n\
+ str r4, [sp]\n\
+ str r6, [sp, 0x4]\n\
+ str r7, [sp, 0x8]\n\
+ movs r4, 0x1\n\
+ str r4, [sp, 0xC]\n\
+ bl LoadSpecialPokePic\n\
+ ldr r2, _081457F8 @ =0x0000ffff\n\
+ adds r0, r6, 0\n\
+ movs r1, 0\n\
+ bl species_and_otid_get_pal\n\
+ lsls r5, 4\n\
+ mov r8, r5\n\
+ movs r1, 0x80\n\
+ lsls r1, 1\n\
+ add r1, r8\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ movs r2, 0x20\n\
+ bl LoadCompressedPalette\n\
+ mov r7, r9\n\
+ lsls r6, r7, 24\n\
+ lsrs r6, 24\n\
+ mov r0, r9\n\
+ adds r1, r6, 0\n\
+ bl sub_8143648\n\
+ ldr r0, _081457FC @ =gUnknown_02024E8C\n\
+ mov r2, r10\n\
+ lsls r1, r2, 16\n\
+ asrs r1, 16\n\
+ ldr r3, [sp, 0x10]\n\
+ lsls r2, r3, 16\n\
+ asrs r2, 16\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ adds r4, r0, 0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ ldr r5, _08145800 @ =gSprites\n\
+ lsls r2, r4, 4\n\
+ adds r2, r4\n\
+ lsls r2, 2\n\
+ adds r3, r2, r5\n\
+ ldrb r1, [r3, 0x5]\n\
+ movs r0, 0xF\n\
+ ands r0, r1\n\
+ mov r7, r8\n\
+ orrs r0, r7\n\
+ movs r1, 0xD\n\
+ negs r1, r1\n\
+ ands r0, r1\n\
+ movs r1, 0x4\n\
+ orrs r0, r1\n\
+ strb r0, [r3, 0x5]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x30]\n\
+ movs r0, 0x3E\n\
+ adds r0, r3\n\
+ mov r8, r0\n\
+ ldrb r0, [r0]\n\
+ orrs r0, r1\n\
+ mov r1, r8\n\
+ strb r0, [r1]\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x1C\n\
+ adds r2, r0\n\
+ ldr r0, _08145804 @ =spritecb_81454E0\n\
+ str r0, [r2]\n\
+ ldr r0, _08145808 @ =gSpriteTemplate_840CAEC\n\
+ movs r2, 0x20\n\
+ ldrsh r1, [r3, r2]\n\
+ movs r7, 0x22\n\
+ ldrsh r2, [r3, r7]\n\
+ movs r3, 0x1\n\
+ bl CreateSprite\n\
+ adds r1, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ strh r4, [r0, 0x2E]\n\
+ adds r1, r6, 0\n\
+ bl StartSpriteAnimIfDifferent\n\
+ adds r0, r4, 0\n\
+ add sp, 0x14\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_081457E8: .4byte gSaveBlock2\n\
+_081457EC: .4byte gMonFrontPicTable\n\
+_081457F0: .4byte gMonFrontPicCoords\n\
+_081457F4: .4byte gUnknown_0840B5A0\n\
+_081457F8: .4byte 0x0000ffff\n\
+_081457FC: .4byte gUnknown_02024E8C\n\
+_08145800: .4byte gSprites\n\
+_08145804: .4byte spritecb_81454E0\n\
+_08145808: .4byte gSpriteTemplate_840CAEC\n\
+ .syntax divided\n");
+}
+#endif
+
+void spritecb_814580C(struct Sprite *sprite) {
+ if (gSprites[sprite->data0].data0 == 10 || gUnknown_0203935C)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ sprite->invisible = gSprites[sprite->data0].invisible;
+ sprite->oam.objMode = gSprites[sprite->data0].oam.objMode;
+ sprite->oam.affineMode = gSprites[sprite->data0].oam.affineMode;
+ sprite->oam.matrixNum = gSprites[sprite->data0].oam.matrixNum;
+ sprite->pos1.x = gSprites[sprite->data0].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data0].pos1.y;
+}
+
+__attribute__((naked))
+void sub_81458DC(void) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ ldr r7, _0814597C @ =0x0201c000\n\
+ ldr r0, _08145980 @ =0x00004023\n\
+ bl VarGet\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ bl GetStarterPokemon\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ bl SpeciesToNationalPokedexNum\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r10, r0\n\
+ movs r4, 0x1\n\
+ movs r5, 0\n\
+ ldr r0, _08145984 @ =0x00000181\n\
+ mov r8, r0\n\
+_0814590E:\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x1\n\
+ bl sub_8090D90\n\
+ lsls r0, 24\n\
+ adds r6, r7, 0\n\
+ adds r6, 0x90\n\
+ cmp r0, 0\n\
+ beq _0814592C\n\
+ lsls r0, r5, 1\n\
+ adds r0, r6, r0\n\
+ strh r4, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+_0814592C:\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ cmp r4, r8\n\
+ bls _0814590E\n\
+ adds r4, r5, 0\n\
+ ldr r0, _08145984 @ =0x00000181\n\
+ lsls r1, r4, 16\n\
+ mov r9, r1\n\
+ movs r2, 0x8E\n\
+ adds r2, r7\n\
+ mov r8, r2\n\
+ adds r1, r7, 0\n\
+ adds r1, 0x86\n\
+ str r1, [sp]\n\
+ cmp r4, r0\n\
+ bhi _08145964\n\
+ adds r1, r6, 0\n\
+ movs r3, 0\n\
+ adds r2, r0, 0\n\
+_08145954:\n\
+ lsls r0, r4, 1\n\
+ adds r0, r1, r0\n\
+ strh r3, [r0]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ cmp r4, r2\n\
+ bls _08145954\n\
+_08145964:\n\
+ movs r2, 0xE5\n\
+ lsls r2, 2\n\
+ adds r0, r7, r2\n\
+ strh r5, [r0]\n\
+ mov r1, r9\n\
+ lsrs r0, r1, 16\n\
+ cmp r0, 0x43\n\
+ bhi _08145988\n\
+ mov r2, r8\n\
+ strh r5, [r2]\n\
+ b _0814598E\n\
+ .align 2, 0\n\
+_0814597C: .4byte 0x0201c000\n\
+_08145980: .4byte 0x00004023\n\
+_08145984: .4byte 0x00000181\n\
+_08145988:\n\
+ movs r0, 0x44\n\
+ mov r1, r8\n\
+ strh r0, [r1]\n\
+_0814598E:\n\
+ movs r5, 0\n\
+ movs r2, 0xE5\n\
+ lsls r2, 2\n\
+ adds r4, r7, r2\n\
+ mov r9, r5\n\
+ b _0814599E\n\
+_0814599A:\n\
+ cmp r5, 0x43\n\
+ bhi _081459EE\n\
+_0814599E:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldrh r1, [r4]\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ lsls r1, r5, 1\n\
+ adds r1, r7, r1\n\
+ lsls r0, r2, 1\n\
+ adds r3, r6, r0\n\
+ ldrh r0, [r3]\n\
+ strh r0, [r1]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ mov r0, r9\n\
+ strh r0, [r3]\n\
+ ldrh r0, [r4]\n\
+ subs r0, 0x1\n\
+ strh r0, [r4]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r2, r0\n\
+ beq _081459E8\n\
+ ldrh r0, [r4]\n\
+ lsls r0, 1\n\
+ adds r0, r6, r0\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r3]\n\
+ ldrh r0, [r4]\n\
+ lsls r0, 1\n\
+ adds r0, r6, r0\n\
+ mov r1, r9\n\
+ strh r1, [r0]\n\
+_081459E8:\n\
+ ldrh r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _0814599A\n\
+_081459EE:\n\
+ mov r2, r8\n\
+ ldrh r0, [r2]\n\
+ cmp r0, 0x43\n\
+ bhi _08145A26\n\
+ adds r5, r0, 0\n\
+ movs r2, 0\n\
+ cmp r5, 0x43\n\
+ bhi _08145A5C\n\
+ mov r3, r8\n\
+_08145A00:\n\
+ lsls r1, r5, 1\n\
+ adds r1, r7, r1\n\
+ lsls r0, r2, 1\n\
+ adds r0, r7, r0\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r1]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ ldrh r0, [r3]\n\
+ cmp r2, r0\n\
+ bne _08145A1A\n\
+ movs r2, 0\n\
+_08145A1A:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x43\n\
+ bls _08145A00\n\
+ b _08145A5C\n\
+_08145A26:\n\
+ movs r4, 0\n\
+ ldrh r0, [r7]\n\
+ cmp r0, r10\n\
+ beq _08145A42\n\
+_08145A2E:\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ lsls r0, r4, 1\n\
+ adds r0, r7, r0\n\
+ ldrh r0, [r0]\n\
+ cmp r0, r10\n\
+ beq _08145A42\n\
+ cmp r4, 0x43\n\
+ bls _08145A2E\n\
+_08145A42:\n\
+ mov r1, r8\n\
+ ldrh r0, [r1]\n\
+ subs r0, 0x1\n\
+ cmp r4, r0\n\
+ bge _08145A5C\n\
+ lsls r0, r4, 1\n\
+ adds r0, r7, r0\n\
+ ldr r2, [sp]\n\
+ ldrh r1, [r2]\n\
+ strh r1, [r0]\n\
+ mov r0, r10\n\
+ strh r0, [r2]\n\
+ b _08145A62\n\
+_08145A5C:\n\
+ mov r2, r10\n\
+ ldr r1, [sp]\n\
+ strh r2, [r1]\n\
+_08145A62:\n\
+ movs r0, 0x44\n\
+ mov r1, r8\n\
+ strh r0, [r1]\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}