summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pokenav_before.c1549
-rw-r--r--src/use_pokeblock.c4
2 files changed, 1511 insertions, 42 deletions
diff --git a/src/pokenav_before.c b/src/pokenav_before.c
index b33fa588c..0ce246ebd 100644
--- a/src/pokenav_before.c
+++ b/src/pokenav_before.c
@@ -19,8 +19,11 @@
#include "sound.h"
#include "task.h"
#include "text.h"
+#include "trig.h"
#include "scanline_effect.h"
#include "pokemon_storage_system.h"
+#include "pokemon_summary_screen.h"
+#include "use_pokeblock.h"
#include "constants/game_stat.h"
struct UnknownPokenav0
@@ -139,6 +142,7 @@ extern const u16 gPokenavHoennMap1_Pal[];
extern void (*const gUnknown_083E3270[])(u16, u16);
extern const u8 gUnknown_083E039C[];
extern const u8 gUnknown_083E03A0[];
+extern const u8 gUnknown_083E01F4[];
extern const u8 *const gTrainerEyeDescriptions[];
extern const u8 gUnknown_08E9FBA0[];
extern const u8 gPokenavRibbonView_Gfx[];
@@ -149,8 +153,47 @@ extern const u16 gUnknown_083E3C60[];
extern const u16 gPokenavRibbonsIconGfx[][2];
extern const u8 *const gRibbonDescriptions[][2];
extern const u8 *const gGiftRibbonDescriptions[][2];
+extern const u8 gUnknown_08E9FF58[];
+extern const u8 gPokenavRibbonPokeView_Gfx[];
+extern const u16 gUnknown_083E0124[];
+extern const u16 gUnknown_083E0144[];
+extern const u8 gPokenavMenuOptions_Gfx[];
+extern const u8 gPokenavConditionMenu_Gfx[];
+extern const u8 gPokenavConditionSearch_Gfx[];
+extern const struct SpriteTemplate gSpriteTemplate_83E4454;
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83E4450[];
+extern const u16 gUnknown_083E42F8[];
+extern const u16 gPokenavMenuOptions1_Pal[];
+extern const u16 gPokenavMenuOptions2_Pal[];
+extern const u16 gPokenavConditionMenu_Pal[];
+extern const u16 gPokenavCondition6_Pal[];
+extern const u16 gPokenavCondition7_Pal[];
+extern const struct SpriteSheet gSpriteSheet_PokenavBlueLight;
+extern const struct SpritePalette gSpritePalette_PokenavBlueLight;
+extern const struct SpriteTemplate gSpriteTemplate_83E4484;
+extern const u8 gPokenavMainMenu_Gfx[];
+extern const u8 gPokenavConditionMenuHeader_Gfx[];
+extern const u8 gPokenavRibbonsHeader_Gfx[];
+extern const u8 gPokenavHoennMapHeader_Gfx[];
+extern const u8 gPokenavConditionMenuOptions_Gfx[];
+extern const u8 gPokenavConditionMenuOptions2_Gfx[];
+extern const u8 gPokenavTrainersEyesHeader_Gfx[];
+extern const struct SpritePalette gUnknown_083E449C[];
+extern const struct SpriteTemplate gSpriteTemplate_83E4530;
+extern const struct SpriteTemplate gSpriteTemplate_83E4548;
+extern const struct SpriteTemplate gSpriteTemplate_83E44E0;
+extern const struct SpriteTemplate gSpriteTemplate_83E44F8;
+extern const struct SpriteSheet gUnknown_083E4568;
+extern const struct SpriteTemplate gSpriteTemplate_83E4570;
+extern const struct SpritePalette gUnknown_083E4588;
+extern const struct SpriteSheet gUnknown_083E4590[3];
+extern const struct SpritePalette gUnknown_083E45A8;
+extern const u16 gUnknown_08E9F988[];
+extern const struct SpriteTemplate gSpriteTemplate_83E45B8;
+extern const struct SpriteTemplate gSpriteTemplate_83E45F0;
extern u16 gUnknown_020388B4;
+extern u8 gUnknown_020388B0[];
// TODO: decompile the debug code so the compiler doesn't complain about
@@ -215,24 +258,61 @@ static void sub_80F0FA0(void);
static bool8 sub_80F0FEC(void);
static bool8 sub_80F0718(void);
void sub_80F0FFC(u8);
-void sub_80F19DC(u8*);
+static void sub_80F19DC(u8*);
static bool8 sub_80F1080(void);
void sub_80F1614(void);
void DrawMonRibbonIcons(void);
void sub_80F13FC(void);
void sub_80F1438(void);
static void sub_80F1494(void);
+bool8 sub_80F162C(u8);
+void sub_80F01E0(u16);
+static void sub_80F19FC(void);
+static void sub_80F1A74(void);
+static void sub_80F1A80(void);
+static void sub_80F1A90(void);
+static bool8 sub_80F1AC4(void);
+static void sub_80F1B8C(u8);
+static bool8 sub_80F1BC8(u8);
+static void sub_80F2458(u8);
+static void sub_80F2514(u8);
+static void sub_80F1DF0(void);
+static void sub_80F2218(struct Sprite *sprite);
+static bool8 sub_80F1E50(void);
+static bool8 sub_80F22F8(void);
+static void sub_80F2108(void);
+static bool8 sub_80F1E6C(void);
+static void sub_80F1E84(void);
+static void sub_80F2148(void);
+static void sub_80F2240(struct Sprite *sprite);
+static bool8 sub_80F1F10(void);
+static bool8 sub_80F2360(void);
+static void sub_80F2170(void);
+static bool8 sub_80F23C8(void);
+static void sub_80F21F8(void);
+static void sub_80F1FF0(void);
+static void sub_80F208C(void);
+static void sub_80F22B0(struct Sprite *sprite);
+static void sub_80F240C(struct Sprite *sprite);
+static void sub_80F2598(void);
+static void sub_80F2620(void);
+static bool8 sub_80F26BC(void);
+static void sub_80F2C58(struct Sprite *sprite);
+static void sub_80F2D04(u8);
+static void sub_80F2D6C(u8);
+static void sub_80F2DD8(void);
+static void sub_80F2DF4(void);
+static void sub_80F2FEC(struct Sprite *sprite);
+static void sub_80F2FB0(void);
+static void sub_80F3008(u8);
extern void sub_80F0900(void);
extern void sub_80F443C(u8 *, u16);
-extern bool8 sub_80F162C(u8);
-extern void sub_80F01E0(u16);
extern void sub_80F01A4(void);
extern void sub_80EFD3C(void);
extern void sub_8095C8C();
extern void sub_80EFDA0(void);
extern void sub_80EFD74(void);
-extern void sub_80F1A80(void);
extern bool8 sub_80EFC64(void);
extern void sub_80EFC3C(void);
extern void sub_80EF624(const u16 *, const u16 *, u8, u8, u16 *);
@@ -245,7 +325,6 @@ extern void sub_80F6FB8();
extern void sub_80F6DB8();
extern bool8 sub_80F6E9C();
extern bool8 sub_80F6ED4();
-extern void sub_80F2FB0();
extern bool8 sub_80F70FC();
extern void sub_80F708C(u32);
extern void sub_80F4394();
@@ -276,56 +355,35 @@ extern void sub_80F4D44();
extern bool8 sub_80F4D88();
extern void sub_80F0264(u8);
extern bool8 sub_80F02A0();
-extern void sub_80F3008();
extern void sub_80F3130();
-extern void sub_80F2D6C(u32);
-extern bool8 sub_80F1E6C();
extern void sub_80EF9F8(void);
extern bool8 sub_80EFBDC(bool8);
extern void sub_80EFBB0(void);
-extern void sub_80F2DF4();
-extern void sub_80F1E84();
-extern bool8 sub_80F1F10();
extern void sub_80EEFBC(u8);
-extern void sub_80F2620();
extern void sub_80EF814(void);
extern void sub_80EF840(void);
extern bool8 sub_80EF874(void);
-extern void sub_80F2DD8();
extern bool8 sub_80F6250();
extern void sub_80F6208();
-extern void sub_80F208C();
extern void sub_80F6C20();
extern void sub_80F3FF0();
extern bool8 sub_80F4024();
-extern void sub_80F2598();
extern void sub_80EF248(u8);
extern bool8 sub_80EF284(u8);
-extern void sub_80F1B8C();
-extern bool8 sub_80F1BC8(u32 unk);
-extern void sub_80F1DF0();
-extern bool8 sub_80F1E50();
extern void sub_80EF428(u8, u8);
extern bool8 sub_80EEF78();
-extern void sub_80F1A90();
-extern void sub_80F2D04(u32);
-extern bool8 sub_80F1AC4();
extern void sub_80F36F0();
extern bool8 sub_80F3724();
extern void sub_80EBC10();
extern void sub_80EBDBC(void (*func)(void));
extern void sub_80EBBE8();
-extern bool8 sub_80F26BC(void);
extern void sub_80EBDD8();
extern void sub_80EBD90();
extern void sub_80EBD18();
-extern void sub_80F1A74();
-extern void sub_80F1FF0();
extern void sub_80FB260();
extern void sub_80EFE7C(void);
extern void sub_80F5BF0();
extern void sub_80F6F64();
-extern void sub_80F19FC();
extern u16 gKeyRepeatStartDelay;
@@ -1225,11 +1283,11 @@ void sub_80ECD80()
ewram0_10.var304++;
break;
case 9:
- sub_80F1B8C(0x2);
+ sub_80F1B8C(2);
ewram0_10.var304++;
// fall through
case 10:
- if (!sub_80F1BC8(0x2))
+ if (!sub_80F1BC8(2))
ewram0_10.var304++;
break;
case 11:
@@ -3693,7 +3751,7 @@ bool8 sub_80EEE54(void)
sub_80EF58C(2);
break;
case 4:
- gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
+ gUnknown_083DFEC4->unk030C = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG1CNT = 0x1B0C;
@@ -3709,17 +3767,17 @@ bool8 sub_80EEF34(void)
{
bool8 retVal = TRUE;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 32)
+ if (gUnknown_083DFEC4->unk030C == 32)
return FALSE;
- gUnknown_083DFEC4->unk030C.unk030C.unk0 += 2;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 > 31)
+ gUnknown_083DFEC4->unk030C += 2;
+ if (gUnknown_083DFEC4->unk030C > 31)
{
- gUnknown_083DFEC4->unk030C.unk030C.unk0 = 32;
+ gUnknown_083DFEC4->unk030C = 32;
retVal = FALSE;
}
- REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
+ REG_BG1VOFS = gUnknown_083DFEC4->unk030C;
return retVal;
}
@@ -3727,17 +3785,17 @@ bool8 sub_80EEF78(void)
{
bool8 retVal = TRUE;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 0)
+ if (gUnknown_083DFEC4->unk030C == 0)
return FALSE;
- gUnknown_083DFEC4->unk030C.unk030C.unk0 -= 2;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 <= 0)
+ gUnknown_083DFEC4->unk030C -= 2;
+ if (gUnknown_083DFEC4->unk030C <= 0)
{
- gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
+ gUnknown_083DFEC4->unk030C = 0;
retVal = FALSE;
}
- REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
+ REG_BG1VOFS = gUnknown_083DFEC4->unk030C;
return retVal;
}
@@ -4560,7 +4618,7 @@ bool8 sub_80EFF68(void)
sub_80F01A4();
break;
case 12:
- sub_80F01E0((u16)gUnknown_083DFEC4->unk8fe9);
+ sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
break;
case 13:
REG_BG3CNT = 0x1E03;
@@ -5604,3 +5662,1414 @@ void sub_80F1614(void)
{
gUnknown_083DFEC4->unk8764 = 0;
}
+
+bool8 sub_80F162C(u8 arg0)
+{
+ switch (gUnknown_083DFEC4->unk8764)
+ {
+ case 0:
+ break;
+ case 1:
+ LZ77UnCompVram(gUnknown_08E9FF58, (void *)(VRAM + 0xE800));
+ break;
+ case 2:
+ DmaCopy16Defvars(3, gPokenavRibbonPokeView_Gfx, (void *)(VRAM + 0xE000), 0xE0);
+ break;
+ case 3:
+ if (!arg0)
+ LoadPalette(gUnknown_083E0124, 0xD0, 0x20);
+ else
+ LoadPalette(gUnknown_083E0144, 0xD0, 0x20);
+
+ gUnknown_083DFEC4->unk8766 = -80;
+ REG_BG0CNT = 0x1D0D;
+ gUnknown_083DFEC4->unk8764++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk8764++;
+ return TRUE;
+}
+
+bool8 sub_80F170C(void)
+{
+ gUnknown_083DFEC4->unk8766 += 0x10;
+ if (gUnknown_083DFEC4->unk8766 > 0)
+ gUnknown_083DFEC4->unk8766 = 0;
+
+ return gUnknown_083DFEC4->unk8766 != 0;
+}
+
+bool8 sub_80F173C(void)
+{
+ gUnknown_083DFEC4->unk8766 -= 0x10;
+ if (gUnknown_083DFEC4->unk8766 < -0x50)
+ gUnknown_083DFEC4->unk8766 = -0x50;
+
+ return gUnknown_083DFEC4->unk8766 != -0x50;
+}
+
+bool8 sub_80F1778(void)
+{
+ switch (gUnknown_083DFEC4->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ gUnknown_083DFEC4->unkD162 = 2;
+ break;
+ case 1:
+ sub_80F1614();
+ break;
+ case 2:
+ if (sub_80F162C(0))
+ return TRUE;
+ break;
+ case 3:
+ LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)(VRAM + 0x5000));
+ break;
+ case 4:
+ LZ77UnCompVram(gUnknown_08E9AC4C, (void *)(VRAM + 0xF000));
+ LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20);
+ break;
+ case 5:
+ sub_8095C8C((void *)VRAM + 0xF000, 0, 13, gUnknown_083E01F4, 0, 0, 12, 4, 12);
+ break;
+ case 6:
+ LZ77UnCompVram(gUnknown_08E9FEB4, (void *)(VRAM + 0xB800));
+ break;
+ case 7:
+ LoadPalette(gUnknown_083E0254, 0x30, 0x20);
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gPokenavConditionMenu2_Pal[2], 0xB1, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[16], 0xB5, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[30], 0xBF, 0x2);
+ sub_80F01A4();
+ break;
+ case 8:
+ sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
+ break;
+ case 9:
+ REG_BG3CNT = 0x1E03;
+ REG_BG2CNT = 0x1702;
+ REG_BLDCNT = 0x844;
+ REG_BLDALPHA = 0x40B;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unkD160++;
+ return TRUE;
+}
+
+void sub_80F1934(void)
+{
+ u8 *buffer = gUnknown_083DFEC4->unk8788;
+ if (gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk4)
+ {
+ u8 nature = GetNature(&gPlayerParty[sub_8137124(gUnknown_083DFEC4->unk87DC)]);
+ buffer = StringCopy(buffer, gOtherText_Nature2);
+ AlignStringInMenuWindow(buffer, gNatureNames[nature], 87, 0);
+ }
+ else
+ {
+ AlignStringInMenuWindow(buffer, gEmptyString_81E72B0, 87, 0);
+ }
+
+ Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 1, 112, 1);
+}
+
+static void sub_80F19DC(u8 *text)
+{
+ while (text[0] != EOS)
+ {
+ if (text[0] == EXT_CTRL_CODE_BEGIN && text[1] == CHAR_SPACE)
+ {
+ text[0] = EOS;
+ break;
+ }
+
+ text++;
+ }
+}
+
+static void sub_80F19FC(void)
+{
+ // FIXME r4/r5 swapped
+ register u8 *ptr asm("r5") = gUnknown_020388B0;
+ if (ptr[0] == 1)
+ {
+ const u8 *landmarkName = GetLandmarkName(
+ gUnknown_083DFEC4->regionMap.mapSectionId,
+ gUnknown_083DFEC4->regionMap.everGrandeCityArea,
+ ptr[1]);
+
+ if (landmarkName)
+ {
+ sub_8072A18(landmarkName, 0x70, 4 * (ptr[1] * 4 + 12), 0x78, 1);
+ if (++ptr[1] != 4)
+ return;
+ }
+
+ Menu_BlankWindowRect(14, ptr[1] * 2 + 6, 28, 15);
+ ptr[0] = 0;
+ }
+}
+
+static void sub_80F1A74(void)
+{
+ gUnknown_020388B0[0] = 0;
+}
+
+static void sub_80F1A80(void)
+{
+ gUnknown_020388B0[0] = 1;
+ gUnknown_020388B0[1] = 0;
+}
+
+static void sub_80F1A90(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (gUnknown_083DFEC4->unk6DAC == 0)
+ while (sub_80F1AC4());
+}
+
+static bool8 sub_80F1AC4(void)
+{
+ u16 i, j;
+
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ for (i = 0; i < 6; i++)
+ {
+ for (j = 0; j < 4; j++)
+ gUnknown_083DFEC4->unk320[i][j] = NULL;
+ }
+
+ gUnknown_083DFEC4->unk311 = 0;
+ break;
+ case 1:
+ LZ77UnCompWram(gPokenavMenuOptions_Gfx, gUnknown_083DFEC4->unk388);
+ break;
+ case 2:
+ LZ77UnCompWram(gPokenavConditionMenu_Gfx, gUnknown_083DFEC4->unk1788);
+ break;
+ case 3:
+ LZ77UnCompWram(gPokenavConditionSearch_Gfx, gUnknown_083DFEC4->unk2388);
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+
+static void sub_80F1B8C(u8 arg0)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (gUnknown_083DFEC4->unk6DAC == 0)
+ while (sub_80F1BC8(arg0));
+}
+
+#ifdef NONMATCHING
+// very close, but for some reason, (i + 1) is being stored in sp[0x10]
+static bool8 sub_80F1BC8(u8 arg0)
+{
+ u16 i, j;
+ u16 animNum;
+ u16 topOffset;
+ u16 height;
+ u16 middle;
+ u8 spriteId;
+
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ sub_80F2458(arg0);
+ break;
+ case 1:
+ sub_80F2514(arg0);
+ break;
+ case 2:
+ switch (arg0)
+ {
+ case 0:
+ topOffset = 42;
+ height = 20;
+ gUnknown_083DFEC4->unk30E = 5;
+ break;
+ case 1:
+ topOffset = 56;
+ height = 20;
+ gUnknown_083DFEC4->unk30E = 3;
+ break;
+ case 2:
+ topOffset = 40;
+ height = 16;
+ gUnknown_083DFEC4->unk30E = 6;
+ break;
+ default:
+ return FALSE;
+ }
+
+ animNum = 0;
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ middle = (height * i) + topOffset - 8;
+ gUnknown_083DFEC4->unk314[i] = (middle << 8) | (middle + 0x11);
+ if (!arg0)
+ {
+ if (gUnknown_083DFEC4->unk6DB2[i] == 0)
+ {
+ for (j = 0; j < 4; j++)
+ gUnknown_083DFEC4->unk320[i][j] = NULL;
+ continue;
+ }
+ else
+ {
+ animNum = (gUnknown_083DFEC4->unk6DB2[i] - 1) * 4;
+ }
+ }
+
+ for (j = 0; j < 4; j++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E4454, j * 32 + 256, (height * i) + topOffset, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk320[i][j] = &gSprites[spriteId];
+ gUnknown_083DFEC4->unk320[i][j]->data[0] = i;
+ gUnknown_083DFEC4->unk320[i][j]->data[1] = j;
+ gUnknown_083DFEC4->unk320[i][j]->data[2] = j * 32 + 152;
+ gUnknown_083DFEC4->unk320[i][j]->data[3] = j * 32 + 256;
+ StartSpriteAnim(gUnknown_083DFEC4->unk320[i][j], animNum++);
+
+ if ((arg0 == 2 || arg0 == 0) && i > 2)
+ gUnknown_083DFEC4->unk320[i][j]->oam.paletteNum = IndexOfSpritePaletteTag(0x1);
+ }
+ }
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+#else
+NAKED
+static bool8 sub_80F1BC8(u8 arg0)
+{
+ 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\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ ldr r1, _080F1BF4 @ =gUnknown_083DFEC4\n\
+ ldr r2, [r1]\n\
+ ldr r3, _080F1BF8 @ =0x00000306\n\
+ adds r0, r2, r3\n\
+ ldrh r0, [r0]\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0x1\n\
+ beq _080F1C0A\n\
+ cmp r0, 0x1\n\
+ bgt _080F1BFC\n\
+ cmp r0, 0\n\
+ beq _080F1C02\n\
+ b _080F1DC4\n\
+ .align 2, 0\n\
+_080F1BF4: .4byte gUnknown_083DFEC4\n\
+_080F1BF8: .4byte 0x00000306\n\
+_080F1BFC:\n\
+ cmp r0, 0x2\n\
+ beq _080F1C12\n\
+ b _080F1DC4\n\
+_080F1C02:\n\
+ mov r0, r9\n\
+ bl sub_80F2458\n\
+ b _080F1DC8\n\
+_080F1C0A:\n\
+ mov r0, r9\n\
+ bl sub_80F2514\n\
+ b _080F1DC8\n\
+_080F1C12:\n\
+ mov r4, r9\n\
+ cmp r4, 0x1\n\
+ beq _080F1C40\n\
+ cmp r4, 0x1\n\
+ bgt _080F1C22\n\
+ cmp r4, 0\n\
+ beq _080F1C2A\n\
+ b _080F1DC4\n\
+_080F1C22:\n\
+ mov r5, r9\n\
+ cmp r5, 0x2\n\
+ beq _080F1C54\n\
+ b _080F1DC4\n\
+_080F1C2A:\n\
+ movs r0, 0x2A\n\
+ str r0, [sp, 0x4]\n\
+ movs r1, 0x14\n\
+ str r1, [sp, 0x8]\n\
+ ldr r4, _080F1C3C @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x5\n\
+ b _080F1C62\n\
+ .align 2, 0\n\
+_080F1C3C: .4byte 0x0000030e\n\
+_080F1C40:\n\
+ movs r5, 0x38\n\
+ str r5, [sp, 0x4]\n\
+ movs r0, 0x14\n\
+ str r0, [sp, 0x8]\n\
+ ldr r4, _080F1C50 @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x3\n\
+ b _080F1C62\n\
+ .align 2, 0\n\
+_080F1C50: .4byte 0x0000030e\n\
+_080F1C54:\n\
+ movs r5, 0x28\n\
+ str r5, [sp, 0x4]\n\
+ movs r0, 0x10\n\
+ str r0, [sp, 0x8]\n\
+ ldr r4, _080F1CDC @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x6\n\
+_080F1C62:\n\
+ strb r0, [r1]\n\
+ movs r5, 0\n\
+ str r5, [sp]\n\
+ mov r8, r5\n\
+ adds r1, r3, 0\n\
+ ldr r0, [r1]\n\
+ ldr r2, _080F1CDC @ =0x0000030e\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r8, r0\n\
+ blt _080F1C7E\n\
+ b _080F1DC8\n\
+_080F1C7E:\n\
+ ldr r4, [sp, 0x8]\n\
+ mov r3, r8\n\
+ muls r3, r4\n\
+ ldr r5, [sp, 0x4]\n\
+ adds r0, r5, r3\n\
+ subs r0, 0x8\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r4, [r1]\n\
+ mov r2, r8\n\
+ lsls r1, r2, 1\n\
+ movs r5, 0xC5\n\
+ lsls r5, 2\n\
+ adds r2, r4, r5\n\
+ adds r2, r1\n\
+ lsls r1, r0, 8\n\
+ adds r0, 0x11\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ mov r0, r9\n\
+ cmp r0, 0\n\
+ bne _080F1CF2\n\
+ ldr r1, _080F1CE0 @ =0x00006db2\n\
+ adds r0, r4, r1\n\
+ mov r2, r8\n\
+ adds r1, r0, r2\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _080F1CE8\n\
+ movs r5, 0\n\
+ ldr r0, _080F1CE4 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ lsls r2, 4\n\
+ movs r3, 0xC8\n\
+ lsls r3, 2\n\
+ adds r1, r0, r3\n\
+ movs r3, 0\n\
+_080F1CC8:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r2\n\
+ adds r0, r1, r0\n\
+ str r3, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x3\n\
+ bls _080F1CC8\n\
+ b _080F1D92\n\
+ .align 2, 0\n\
+_080F1CDC: .4byte 0x0000030e\n\
+_080F1CE0: .4byte 0x00006db2\n\
+_080F1CE4: .4byte gUnknown_083DFEC4\n\
+_080F1CE8:\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0x1\n\
+ lsls r0, 18\n\
+ lsrs r0, 16\n\
+ str r0, [sp]\n\
+_080F1CF2:\n\
+ movs r5, 0\n\
+ ldr r4, [sp, 0x4]\n\
+ adds r0, r4, r3\n\
+ lsls r0, 16\n\
+ mov r10, r0\n\
+_080F1CFC:\n\
+ lsls r6, r5, 5\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r7, r6, r0\n\
+ lsls r1, r7, 16\n\
+ asrs r1, 16\n\
+ ldr r0, _080F1DB4 @ =gSpriteTemplate_83E4454\n\
+ mov r3, r10\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r3, 0x40\n\
+ beq _080F1DC4\n\
+ ldr r0, _080F1DB8 @ =gUnknown_083DFEC4\n\
+ ldr r2, [r0]\n\
+ lsls r1, r5, 2\n\
+ mov r4, r8\n\
+ lsls r0, r4, 4\n\
+ adds r1, r0\n\
+ movs r0, 0xC8\n\
+ lsls r0, 2\n\
+ adds r2, r0\n\
+ adds r4, r2, r1\n\
+ lsls r0, r3, 4\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ ldr r1, _080F1DBC @ =gSprites\n\
+ adds r0, r1\n\
+ str r0, [r4]\n\
+ mov r1, r8\n\
+ strh r1, [r0, 0x2E]\n\
+ ldr r0, [r4]\n\
+ strh r5, [r0, 0x30]\n\
+ ldr r1, [r4]\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x98\n\
+ strh r0, [r1, 0x32]\n\
+ ldr r0, [r4]\n\
+ strh r7, [r0, 0x34]\n\
+ ldr r0, [r4]\n\
+ ldr r1, [sp]\n\
+ adds r2, r1, 0x1\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ str r2, [sp]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ bl StartSpriteAnim\n\
+ mov r2, r9\n\
+ cmp r2, 0x2\n\
+ beq _080F1D6E\n\
+ cmp r2, 0\n\
+ bne _080F1D88\n\
+_080F1D6E:\n\
+ mov r3, r8\n\
+ cmp r3, 0x2\n\
+ bls _080F1D88\n\
+ movs r0, 0x1\n\
+ bl IndexOfSpritePaletteTag\n\
+ ldr r3, [r4]\n\
+ lsls r0, 4\n\
+ ldrb r2, [r3, 0x5]\n\
+ movs r1, 0xF\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0x5]\n\
+_080F1D88:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x3\n\
+ bls _080F1CFC\n\
+_080F1D92:\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ ldr r1, _080F1DB8 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r1]\n\
+ ldr r4, _080F1DC0 @ =0x0000030e\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r8, r0\n\
+ bge _080F1DB0\n\
+ b _080F1C7E\n\
+_080F1DB0:\n\
+ b _080F1DC8\n\
+ .align 2, 0\n\
+_080F1DB4: .4byte gSpriteTemplate_83E4454\n\
+_080F1DB8: .4byte gUnknown_083DFEC4\n\
+_080F1DBC: .4byte gSprites\n\
+_080F1DC0: .4byte 0x0000030e\n\
+_080F1DC4:\n\
+ movs r0, 0\n\
+ b _080F1DD8\n\
+_080F1DC8:\n\
+ ldr r0, _080F1DE8 @ =gUnknown_083DFEC4\n\
+ ldr r1, [r0]\n\
+ ldr r5, _080F1DEC @ =0x00000306\n\
+ adds r1, r5\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+ movs r0, 0x1\n\
+_080F1DD8:\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 {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080F1DE8: .4byte gUnknown_083DFEC4\n\
+_080F1DEC: .4byte 0x00000306\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+static void sub_80F1DF0(void)
+{
+ u16 i, j;
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (gUnknown_083DFEC4->unk320[i][j])
+ gUnknown_083DFEC4->unk320[i][j]->callback = sub_80F2218;
+ }
+ }
+
+ PlaySE(SE_WIN_OPEN);
+}
+
+static bool8 sub_80F1E50(void)
+{
+ if (sub_80F22F8())
+ {
+ sub_80F2108();
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+static bool8 sub_80F1E6C(void)
+{
+ return !sub_80F22F8();
+}
+
+static void sub_80F1E84(void)
+{
+ u16 i, j;
+
+ gUnknown_083DFEC4->unk30F = 0;
+ sub_80F2148();
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ if (i != gUnknown_083DFEC4->unk6DAD)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (gUnknown_083DFEC4->unk320[i][j])
+ gUnknown_083DFEC4->unk320[i][j]->callback = sub_80F2240;
+ }
+ }
+ }
+}
+
+static bool8 sub_80F1F10(void)
+{
+ u16 j;
+
+ switch (gUnknown_083DFEC4->unk30F)
+ {
+ case 0:
+ if (sub_80F2360())
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ sprite->affineAnims = gSpriteAffineAnimTable_83E4450;
+ InitSpriteAffineAnim(sprite);
+ sprite->data[4] = j * 4 - 6;
+ sprite->data[4] /= 2;
+ sprite->data[5] = sprite->data[4] * 8;
+ sprite->callback = sub_80F2240;
+ }
+
+ sub_80F2170();
+ gUnknown_083DFEC4->unk30F++;
+ }
+ break;
+ case 1:
+ if (sub_80F23C8())
+ {
+ sub_80F21F8();
+ FreeSpriteTilesByTag(0x0);
+ FreeSpritePaletteByTag(0x0);
+ FreeSpritePaletteByTag(0x1);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static void sub_80F1FF0(void)
+{
+ if (gUnknown_083DFEC4->unk311 == 1)
+ {
+ REG_WIN0V = gUnknown_083DFEC4->unk314[gUnknown_083DFEC4->unk6DAD];
+ REG_BLDY = gSineTable[gUnknown_083DFEC4->unk312] >> 5;
+ gUnknown_083DFEC4->unk312 += 3;
+ gUnknown_083DFEC4->unk312 &= 0x7F;
+ }
+ else if (gUnknown_083DFEC4->unk311 == 2)
+ {
+ REG_BLDALPHA = gUnknown_083E42F8[gUnknown_083DFEC4->unk312];
+ if (gUnknown_083DFEC4->unk312 < 15)
+ gUnknown_083DFEC4->unk312++;
+ }
+}
+
+static void sub_80F208C(void)
+{
+ sub_80F2148();
+}
+
+static void sub_80F2098(void)
+{
+ REG_WIN0H = 0x77F0;
+ REG_WIN0V = gUnknown_083DFEC4->unk314[gUnknown_083DFEC4->unk6DAD];
+ REG_WININ = 0x3F;
+ REG_WINOUT = 0x1F;
+ REG_DISPCNT |= DISPCNT_WIN0_ON;
+}
+
+static void sub_80F20F4(void)
+{
+ REG_DISPCNT &= ~DISPCNT_WIN0_ON;
+}
+
+static void sub_80F2108(void)
+{
+ if (!gUnknown_083DFEC4->unk311)
+ {
+ gUnknown_083DFEC4->unk311 = 1;
+ gUnknown_083DFEC4->unk312 = 0;
+ REG_BLDCNT = 0x90;
+ REG_BLDY = 0;
+ sub_80F2098();
+ }
+}
+
+static void sub_80F2148(void)
+{
+ gUnknown_083DFEC4->unk311 = 0;
+ REG_BLDCNT = 0;
+ sub_80F20F4();
+}
+
+static void sub_80F2170(void)
+{
+ u16 j;
+
+ if (!gUnknown_083DFEC4->unk311)
+ {
+ sub_80F20F4();
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ }
+
+ gUnknown_083DFEC4->unk311 = 2;
+ gUnknown_083DFEC4->unk312 = 0;
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x10;
+ }
+}
+
+static void sub_80F21F8()
+{
+ gUnknown_083DFEC4->unk311 = 0;
+ REG_BLDCNT = 0;
+}
+
+static void sub_80F2218(struct Sprite *sprite)
+{
+ sprite->pos1.x -= 8;
+ if (sprite->pos1.x <= sprite->data[2])
+ {
+ sprite->pos1.x = sprite->data[2];
+ sprite->callback = sub_80F22B0;
+ }
+}
+
+static void sub_80F2240(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gUnknown_083DFEC4->unk6DAD)
+ {
+ if (sprite->data[5])
+ {
+ sprite->pos1.x += sprite->data[4];
+ sprite->data[5] -= sprite->data[4];
+ }
+
+ if (sprite->affineAnimEnded)
+ sub_80F240C(sprite);
+ }
+ else
+ {
+ sprite->pos1.x += 8;
+ if (sprite->pos1.x >= sprite->data[3])
+ sub_80F240C(sprite);
+ }
+}
+
+static void sub_80F22B0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gUnknown_083DFEC4->unk6DAD)
+ {
+ if (sprite->pos2.x > -16)
+ sprite->pos2.x -= 4;
+ }
+ else
+ {
+ if (sprite->pos2.x < 0)
+ sprite->pos2.x += 4;
+ }
+}
+
+static bool8 sub_80F22F8(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < gUnknown_083DFEC4->unk6DAE; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[i][j];
+ if (!sprite)
+ return TRUE;
+
+ if (sprite->pos2.x != 0 && sprite->pos2.x != -16)
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_80F2360(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ if (i != gUnknown_083DFEC4->unk6DAD)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[i][j];
+ if (sprite)
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_80F23C8(void)
+{
+ u16 j;
+
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
+ if (sprite)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void sub_80F240C(struct Sprite *sprite)
+{
+ gUnknown_083DFEC4->unk320[sprite->data[0]][sprite->data[1]] = NULL;
+ if (sprite->affineAnimEnded)
+ FreeOamMatrix(sprite->oam.matrixNum);
+
+ DestroySprite(sprite);
+}
+
+static void sub_80F2458(u8 arg0)
+{
+ switch (arg0)
+ {
+ case 0:
+ gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk388;
+ gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk388);
+ gUnknown_083DFEC4->unk380.tag = 0x0;
+ break;
+ case 1:
+ gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk1788;
+ gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk1788);
+ gUnknown_083DFEC4->unk380.tag = 0x0;
+ break;
+ case 2:
+ gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk2388;
+ gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk2388);
+ gUnknown_083DFEC4->unk380.tag = 0x0;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpriteSheet(&gUnknown_083DFEC4->unk380);
+}
+
+static void sub_80F2514(u8 arg0)
+{
+ struct SpritePalette spritePalette;
+
+ switch (arg0)
+ {
+ case 0:
+ spritePalette.data = gPokenavMenuOptions1_Pal;
+ spritePalette.tag = 0;
+ LoadSpritePalette(&spritePalette);
+ spritePalette.data = gPokenavMenuOptions2_Pal;
+ spritePalette.tag = 0x1;
+ break;
+ case 1:
+ spritePalette.data = gPokenavConditionMenu_Pal;
+ spritePalette.tag = 0x0;
+ break;
+ case 2:
+ spritePalette.data = gPokenavCondition6_Pal;
+ spritePalette.tag = 0;
+ LoadSpritePalette(&spritePalette);
+ spritePalette.data = gPokenavCondition7_Pal;
+ spritePalette.tag = 0x1;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpritePalette(&spritePalette);
+}
+
+static void sub_80F2598(void)
+{
+ u8 spriteId;
+
+ gUnknown_083DFEC4->unk6D9C = NULL;
+ if (DoesSomeoneWantRematchIn(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE)
+ {
+ LoadSpriteSheet(&gSpriteSheet_PokenavBlueLight);
+ LoadSpritePalette(&gSpritePalette_PokenavBlueLight);
+ spriteId = CreateSprite(&gSpriteTemplate_83E4484, 12, 96, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk6D9C = &gSprites[spriteId];
+ }
+ else
+ {
+ FreeSpriteTilesByTag(0x19);
+ FreeSpritePaletteByTag(0x11);
+ }
+ }
+}
+
+static void sub_80F2620(void)
+{
+ if (gUnknown_083DFEC4->unk6D9C)
+ {
+ DestroySprite(gUnknown_083DFEC4->unk6D9C);
+ FreeSpriteTilesByTag(0x19);
+ FreeSpritePaletteByTag(0x11);
+ gUnknown_083DFEC4->unk6D9C = NULL;
+ }
+}
+
+void sub_80F2654(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 6)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+}
+
+void sub_80F2688(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while(sub_80F26BC());
+}
+
+static bool8 sub_80F26BC(void)
+{
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ LZ77UnCompWram(gPokenavMainMenu_Gfx, gUnknown_083DFEC4->unk3B98);
+ break;
+ case 1:
+ LZ77UnCompWram(gPokenavConditionMenuHeader_Gfx, gUnknown_083DFEC4->unk4198);
+ break;
+ case 2:
+ LZ77UnCompWram(gPokenavRibbonsHeader_Gfx, gUnknown_083DFEC4->unk4D98);
+ break;
+ case 3:
+ LZ77UnCompWram(gPokenavHoennMapHeader_Gfx, gUnknown_083DFEC4->unk5398);
+ break;
+ case 4:
+ LZ77UnCompWram(gPokenavConditionMenuOptions_Gfx, gUnknown_083DFEC4->unk5F98);
+ break;
+ case 5:
+ LZ77UnCompWram(gPokenavConditionMenuOptions2_Gfx, gUnknown_083DFEC4->unk6798);
+ break;
+ case 6:
+ LZ77UnCompWram(gPokenavTrainersEyesHeader_Gfx, gUnknown_083DFEC4->unk4798);
+ break;
+ case 7:
+ LoadSpritePalettes(gUnknown_083E449C);
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+
+static void sub_80F27DC(u8 arg0)
+{
+ struct SpriteSheet spriteSheet;
+
+ switch (arg0)
+ {
+ case 0:
+ spriteSheet.data = gUnknown_083DFEC4->unk3B98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk3B98);
+ spriteSheet.tag = 0x1;
+ break;
+ case 1:
+ spriteSheet.data = gUnknown_083DFEC4->unk4198;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4198);
+ spriteSheet.tag = 0x1;
+ break;
+ case 3:
+ spriteSheet.data = gUnknown_083DFEC4->unk4798;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4798);
+ spriteSheet.tag = 0x1;
+ break;
+ case 2:
+ spriteSheet.data = gUnknown_083DFEC4->unk4D98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4D98);
+ spriteSheet.tag = 0x1;
+ break;
+ case 4:
+ spriteSheet.data = gUnknown_083DFEC4->unk5398;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk5398);
+ spriteSheet.tag = 0x1;
+ break;
+ case 5:
+ spriteSheet.data = gUnknown_083DFEC4->unk5F98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk5F98);
+ spriteSheet.tag = 0x2;
+ break;
+ case 6:
+ spriteSheet.data = gUnknown_083DFEC4->unk6198;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6198);
+ spriteSheet.tag = 0x2;
+ break;
+ case 8:
+ spriteSheet.data = gUnknown_083DFEC4->unk6398;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6398);
+ spriteSheet.tag = 0x2;
+ break;
+ case 9:
+ spriteSheet.data = gUnknown_083DFEC4->unk6598;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6598);
+ spriteSheet.tag = 0x2;
+ break;
+ case 11:
+ spriteSheet.data = gUnknown_083DFEC4->unk6998;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6998);
+ spriteSheet.tag = 0x2;
+ break;
+ case 10:
+ spriteSheet.data = gUnknown_083DFEC4->unk6798;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6798);
+ spriteSheet.tag = 0x2;
+ break;
+ case 7:
+ spriteSheet.data = gUnknown_083DFEC4->unk6B98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6B98);
+ spriteSheet.tag = 0x2;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpriteSheet(&spriteSheet);
+}
+
+void sub_80F29B8(u8 arg0)
+{
+ u16 i;
+ s16 deltaX, endX, initialX;
+ u16 y;
+ s16 width;
+ struct Sprite **sprites;
+ const struct SpriteTemplate *spriteTemplate;
+ u8 spriteId;
+
+ spriteTemplate = NULL;
+ switch (arg0)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ initialX = -96;
+ y = 49 - gUnknown_083DFEC4->unk030C;
+ deltaX = 8;
+ endX = 32;
+ width = 64;
+ sprites = gUnknown_083DFEC4->unk3B88;
+ spriteTemplate = arg0 != 3 ? &gSpriteTemplate_83E44E0 : &gSpriteTemplate_83E44F8;
+ break;
+ case 4:
+ initialX = 272;
+ y = 49 - gUnknown_083DFEC4->unk030C;
+ deltaX = -8;
+ endX = 152;
+ width = 64;
+ spriteTemplate = &gSpriteTemplate_83E44E0;
+ sprites = gUnknown_083DFEC4->unk3B88;
+ break;
+ case 5:
+ case 6:
+ case 8:
+ case 9:
+ spriteTemplate = &gSpriteTemplate_83E4530;
+ // fall through
+ case 7:
+ case 10:
+ case 11:
+ if (spriteTemplate == NULL)
+ spriteTemplate = &gSpriteTemplate_83E4548;
+
+ initialX = -96;
+ y = 68 - gUnknown_083DFEC4->unk030C;
+ deltaX = 8;
+ endX = 16;
+ width = 32;
+ sprites = gUnknown_083DFEC4->unk3B90;
+ break;
+ default:
+ return;
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ spriteId = CreateSprite(spriteTemplate, i * width + initialX, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = deltaX;
+ gSprites[spriteId].data[1] = endX + i * width;
+ gSprites[spriteId].data[2] = i;
+ gSprites[spriteId].data[3] = arg0;
+ if (arg0 == 4 && i == 1)
+ {
+ int anim = !gUnknown_083DFEC4->regionMap.zoomed ? 1 : 2;
+ StartSpriteAnim(&gSprites[spriteId], anim);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], i);
+ }
+
+ if (arg0 < 4 && i == 1)
+ {
+ gSprites[spriteId].oam.shape = ST_OAM_SQUARE;
+ gSprites[spriteId].oam.size = 2;
+ }
+
+ sprites[i] = &gSprites[spriteId];
+ }
+ }
+}
+
+#define sEndX sprite->data[1]
+void sub_80F2BBC(struct Sprite *sprite)
+{
+ s16 x = sprite->pos1.x;
+ sprite->pos1.x += sprite->data[0];
+ if ((x <= sEndX && sprite->pos1.x >= sEndX) || (x >= sEndX && sprite->pos1.x <= sEndX))
+ {
+ sprite->pos1.x = sEndX;
+ if (sprite->data[3] == 4 && sprite->data[2] == 1)
+ sprite->callback = sub_80F2C58;
+ else
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+#undef sEndX
+
+static void sub_80F2C14(struct Sprite *sprite)
+{
+ u16 right;
+
+ sprite->pos1.x -= sprite->data[0];
+ right = sprite->pos1.x + 32;
+ if (right > 304)
+ {
+ if (sprite->data[2] == 1)
+ {
+ if (sprite->data[3] < 5)
+ FreeSpriteTilesByTag(0x1);
+ else
+ FreeSpriteTilesByTag(0x2);
+ }
+
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_80F2C58(struct Sprite *sprite)
+{
+ int anim = !gUnknown_083DFEC4->regionMap.zoomed ? 1 : 2;
+ StartSpriteAnim(sprite, anim);
+}
+
+void sub_80F2C80(u8 arg0)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F2CBC(arg0));
+}
+
+bool8 sub_80F2CBC(u8 arg0)
+{
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ sub_80F27DC(arg0);
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+ case 1:
+ sub_80F29B8(arg0);
+ gUnknown_083DFEC4->unk306++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+}
+
+static void sub_80F2D04(u8 arg0)
+{
+ u16 i;
+
+ if (arg0 < 5)
+ {
+ for (i = 0; i < 2; i++)
+ gUnknown_083DFEC4->unk3B88[i]->callback = sub_80F2C14;
+ }
+ else
+ {
+ for (i = 0; i < 2; i++)
+ gUnknown_083DFEC4->unk3B90[i]->callback = sub_80F2C14;
+ }
+}
+
+static void sub_80F2D6C(u8 arg0)
+{
+ u16 i;
+
+ if (arg0 < 5)
+ {
+ FreeSpriteTilesByTag(0x1);
+ for (i = 0; i < 2; i++)
+ DestroySprite(gUnknown_083DFEC4->unk3B88[i]);
+ }
+ else
+ {
+ FreeSpriteTilesByTag(0x2);
+ for (i = 0; i < 2; i++)
+ DestroySprite(gUnknown_083DFEC4->unk3B90[i]);
+ }
+}
+
+static void sub_80F2DD8(void)
+{
+ CreateRegionMapCursor(7, 7);
+ CreateRegionMapPlayerIcon(8, 8);
+ sub_80FBF94();
+}
+
+static void sub_80F2DF4(void)
+{
+ FreeRegionMapIconResources();
+}
+
+void sub_80F2E00(struct Sprite *sprite)
+{
+ sprite->pos1.x = gUnknown_083DFEC4->unk8766 + 38;
+}
+
+static void sub_80F2E18(u8 arg0)
+{
+ u8 spriteId;
+ struct SpriteTemplate spriteTemplate;
+ struct SpritePalette spritePalette;
+ struct SpriteSheet spriteSheet;
+
+ if (!gUnknown_083DFEC4->unk8768)
+ {
+ spriteSheet = gUnknown_083E4568;
+ spriteTemplate = gSpriteTemplate_83E4570;
+ spritePalette = gUnknown_083E4588;
+
+ spriteSheet.data = gUnknown_083DFEC4->unkD1E4[arg0];
+ spritePalette.data = gUnknown_083DFEC4->unk0[arg0];
+ gUnknown_083DFEC4->unkD1DC = LoadSpritePalette(&spritePalette);
+ gUnknown_083DFEC4->unkD1DE = LoadSpriteSheet(&spriteSheet);
+
+ spriteId = CreateSprite(&spriteTemplate, 38, 104, 0);
+ if (spriteId == MAX_SPRITES)
+ {
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gUnknown_083DFEC4->unk8768 = NULL;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk8768 = &gSprites[spriteId];
+ gUnknown_083DFEC4->unkD1E0 = (void *)(VRAM + 0x10000) + gUnknown_083DFEC4->unkD1DE * 32;
+ gUnknown_083DFEC4->unkD1DC = gUnknown_083DFEC4->unkD1DC * 16 + 0x100;
+ }
+ }
+ else
+ {
+ DmaCopy16Defvars(3, gUnknown_083DFEC4->unkD1E4[arg0], gUnknown_083DFEC4->unkD1E0, 0x800);
+ LoadPalette(gUnknown_083DFEC4->unk0[arg0], gUnknown_083DFEC4->unkD1DC, 0x20);
+ }
+}
+
+void sub_80F2F48(void)
+{
+ if (gUnknown_083DFEC4->unk8768)
+ {
+ DestroySprite(gUnknown_083DFEC4->unk8768);
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gUnknown_083DFEC4->unk8768 = NULL;
+ }
+}
+
+void sub_80F2F7C(u8 arg0)
+{
+ sub_80F2E18(arg0);
+ gUnknown_083DFEC4->unkCED0 = gUnknown_083DFEC4->unk8768;
+ gUnknown_083DFEC4->unkCED0->callback = sub_80F2FEC;
+}
+
+static void sub_80F2FB0(void)
+{
+ if (gUnknown_083DFEC4->unkCED0)
+ {
+ DestroySprite(gUnknown_083DFEC4->unkCED0);
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gUnknown_083DFEC4->unkCED0 = NULL;
+ gUnknown_083DFEC4->unk8768 = NULL;
+ }
+}
+
+static void sub_80F2FEC(struct Sprite *sprite)
+{
+ sprite->pos1.x = gUnknown_083DFEC4->unkD15A + 40;
+ sprite->pos1.y = 104;
+}
+
+static void sub_80F3008(u8 arg0)
+{
+ u16 i;
+ u8 spriteId;
+ struct SpritePalette spritePalette;
+ struct SpriteSheet spriteSheets[3];
+
+ memcpy(spriteSheets, gUnknown_083E4590, sizeof(gUnknown_083E4590));
+ spritePalette = gUnknown_083E45A8;
+ switch (arg0)
+ {
+ case 1:
+ case 2:
+ spritePalette.data = gUnknown_08E9F988;
+ break;
+ }
+
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalette(&spritePalette);
+ spriteId = CreateSprite(&gSpriteTemplate_83E45B8, 95, 0, 0);
+ if (spriteId == MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk87CC = NULL;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87CC = &gSprites[spriteId];
+ for (i = 0; i < 2; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E45F0, 168, i * 128 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk87D0[i] = &gSprites[spriteId];
+ gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].data[2] = i == 0 ? -1 : 1;
+ gSprites[spriteId].data[3] = i;
+ gSprites[spriteId].data[4] = 1;
+ StartSpriteAnim(&gSprites[spriteId], i);
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87D0[i] = NULL;
+ }
+ }
+ }
+}
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index bcfeed672..dd28bd148 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -243,7 +243,7 @@ static void sub_8136294(void)
case 6:
gUnknown_083DFEC4->unk76AA = 0;
gUnknown_083DFEC4->unk87E0 = NULL;
- gUnknown_083DFEC4->unk030C.val = 0x20;
+ gUnknown_083DFEC4->unk030C = 0x20;
gUnknown_02039304->unk50++;
break;
case 7:
@@ -285,7 +285,7 @@ static void sub_8136294(void)
break;
case 13:
sub_80F2E18(0);
- gUnknown_083DFEC4->unk8768->unk26 = 0xffd8;
+ gUnknown_083DFEC4->unk8768->pos2.y = 0xffd8;
gUnknown_02039304->unk50++;
break;
case 14: