summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-11-11 15:35:22 -0800
committerGitHub <noreply@github.com>2017-11-11 15:35:22 -0800
commit67ad331441f29545b84d152cbbb4f188098a9c5a (patch)
tree24a7840f1c49602a6ad033ea6cc1cb27b7e12be4 /src
parent999c4d59793e761ca71ab7b27272de46d78de138 (diff)
parent92fda2cc0d5afa76e94927cb72ceac9700f54c1b (diff)
Merge pull request #457 from huderlem/pokenav
pokenav decompilation
Diffstat (limited to 'src')
-rw-r--r--src/field/region_map.c168
-rw-r--r--src/field/use_pokeblock.c2
-rw-r--r--src/pokenav_after.c (renamed from src/field/pokenav.c)2
-rw-r--r--src/pokenav_before.c5004
4 files changed, 5089 insertions, 87 deletions
diff --git a/src/field/region_map.c b/src/field/region_map.c
index d643c373d..973e7decc 100644
--- a/src/field/region_map.c
+++ b/src/field/region_map.c
@@ -337,9 +337,9 @@ bool8 sub_80FA940(void)
InitializeCursorPosition();
gRegionMap->unk74 = gRegionMap->cursorPosX;
gRegionMap->unk76 = gRegionMap->cursorPosY;
- gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSecId);
- gRegionMap->mapSecId = sub_80FB9C0(gRegionMap->mapSecId);
- GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSectionId);
+ gRegionMap->mapSectionId = sub_80FB9C0(gRegionMap->mapSectionId);
+ GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16);
break;
case 6:
if (gRegionMap->zoomed == FALSE)
@@ -434,7 +434,7 @@ static u8 sub_80FAB78(void)
static u8 _swiopen(void)
{
- u16 mapSecId;
+ u16 mapSectionId;
if (gRegionMap->unk7A != 0)
return INPUT_EVENT_2;
@@ -451,12 +451,12 @@ static u8 _swiopen(void)
if (gRegionMap->cursorDeltaY < 0)
gRegionMap->cursorPosY--;
- mapSecId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
- gRegionMap->unk16 = sub_80FB758(mapSecId);
- if (mapSecId != gRegionMap->mapSecId)
+ mapSectionId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
+ gRegionMap->unk16 = sub_80FB758(mapSectionId);
+ if (mapSectionId != gRegionMap->mapSectionId)
{
- gRegionMap->mapSecId = mapSecId;
- GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ gRegionMap->mapSectionId = mapSectionId;
+ GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16);
}
sub_80FBA18();
gRegionMap->inputCallback = sub_80FAB78;
@@ -516,16 +516,16 @@ static u8 sub_80FADE4(void)
if (r3 != gRegionMap->unk64 || r1 != gRegionMap->unk66)
{
- u16 mapSecId;
+ u16 mapSectionId;
gRegionMap->unk64 = r3;
gRegionMap->unk66 = r1;
- mapSecId = GetRegionMapSectionAt(r3, r1);
- gRegionMap->unk16 = sub_80FB758(mapSecId);
- if (mapSecId != gRegionMap->mapSecId)
+ mapSectionId = GetRegionMapSectionAt(r3, r1);
+ gRegionMap->unk16 = sub_80FB758(mapSectionId);
+ if (mapSectionId != gRegionMap->mapSectionId)
{
- gRegionMap->mapSecId = mapSecId;
- GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ gRegionMap->mapSectionId = mapSectionId;
+ GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16);
}
sub_80FBA18();
}
@@ -723,19 +723,19 @@ static void InitializeCursorPosition(void)
case 2:
case 4:
case 5:
- gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
+ gRegionMap->mapSectionId = gMapHeader.regionMapSectionId;
gRegionMap->playerIsInCave = FALSE;
mapWidth = gMapHeader.mapData->width;
mapHeight = gMapHeader.mapData->height;
x = gSaveBlock1.pos.x;
y = gSaveBlock1.pos.y;
- if (gRegionMap->mapSecId == MAPSEC_UNDERWATER6)
+ if (gRegionMap->mapSectionId == MAPSEC_UNDERWATER6)
gRegionMap->playerIsInCave = TRUE;
break;
case 3:
case 6:
mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum);
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
mapHeight = mapHeader->mapData->height;
@@ -744,7 +744,7 @@ static void InitializeCursorPosition(void)
break;
case 8:
mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum);
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
mapHeight = mapHeader->mapData->height;
@@ -755,8 +755,8 @@ static void InitializeCursorPosition(void)
{
struct WarpData *r4;
- gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
- if (gRegionMap->mapSecId != MAPSEC_UNK_0x57)
+ gRegionMap->mapSectionId = gMapHeader.regionMapSectionId;
+ if (gRegionMap->mapSectionId != MAPSEC_UNK_0x57)
{
r4 = &gSaveBlock1.warp4;
mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum);
@@ -765,7 +765,7 @@ static void InitializeCursorPosition(void)
{
r4 = &gSaveBlock1.warp2;
mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum);
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
}
gRegionMap->playerIsInCave = FALSE;
mapWidth = mapHeader->mapData->width;
@@ -778,21 +778,21 @@ static void InitializeCursorPosition(void)
r9 = x;
- r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSecId].width;
+ r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSectionId].width;
if (r1 == 0)
r1 = 1;
x /= r1;
- if (x >= gRegionMapLocations[gRegionMap->mapSecId].width)
- x = gRegionMapLocations[gRegionMap->mapSecId].width - 1;
+ if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width)
+ x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1;
- r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSecId].height;
+ r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSectionId].height;
if (r1 == 0)
r1 = 1;
y /= r1;
- if (y >= gRegionMapLocations[gRegionMap->mapSecId].height)
- y = gRegionMapLocations[gRegionMap->mapSecId].height - 1;
+ if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height)
+ y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1;
- switch (gRegionMap->mapSecId)
+ switch (gRegionMap->mapSectionId)
{
case MAPSEC_ROUTE_114:
if (y != 0)
@@ -821,8 +821,8 @@ static void InitializeCursorPosition(void)
x++;
break;
}
- gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN;
- gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN;
+ gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
}
static void sub_80FB600(void)
@@ -837,16 +837,16 @@ static void sub_80FB600(void)
switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4))
{
case 1:
- gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY;
+ gRegionMap->mapSectionId = MAPSEC_SLATEPORT_CITY;
break;
case 2:
- gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY;
+ gRegionMap->mapSectionId = MAPSEC_LILYCOVE_CITY;
break;
case 3:
- gRegionMap->mapSecId = MAPSEC_ROUTE_124;
+ gRegionMap->mapSectionId = MAPSEC_ROUTE_124;
break;
case 4:
- gRegionMap->mapSecId = MAPSEC_ROUTE_131;
+ gRegionMap->mapSectionId = MAPSEC_ROUTE_131;
break;
default:
case 0:
@@ -854,31 +854,31 @@ static void sub_80FB600(void)
struct MapHeader *mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
u16 r1;
- gRegionMap->mapSecId = mapHeader->regionMapSectionId;
- r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSecId].width;
+ gRegionMap->mapSectionId = mapHeader->regionMapSectionId;
+ r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSectionId].width;
if (r1 == 0)
r1 = 1;
x = sp2 / r1;
- if (x >= gRegionMapLocations[gRegionMap->mapSecId].width)
- x = gRegionMapLocations[gRegionMap->mapSecId].width - 1;
+ if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width)
+ x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1;
- r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSecId].height;
+ r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSectionId].height;
if (r1 == 0)
r1 = 1;
y = sp4 / r1;
- if (y >= gRegionMapLocations[gRegionMap->mapSecId].height)
- y = gRegionMapLocations[gRegionMap->mapSecId].height - 1;
+ if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height)
+ y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1;
}
break;
}
gRegionMap->playerIsInCave = FALSE;
- gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN;
- gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN;
+ gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN;
}
-static u16 sub_80FB758(u16 mapSecId)
+static u16 sub_80FB758(u16 mapSectionId)
{
- switch (mapSecId)
+ switch (mapSectionId)
{
case MAPSEC_NONE:
return 0;
@@ -929,21 +929,21 @@ u16 GetRegionMapSectionAt_(u16 x, u16 y)
return GetRegionMapSectionAt(x, y);
}
-static u16 sub_80FB9C0(u16 mapSecId)
+static u16 sub_80FB9C0(u16 mapSectionId)
{
u16 i;
for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++)
{
- if (gUnknown_083E7684[i][0] == mapSecId)
+ if (gUnknown_083E7684[i][0] == mapSectionId)
return gUnknown_083E7684[i][1];
}
- return mapSecId;
+ return mapSectionId;
}
-u16 sub_80FBA04(u16 mapSecId)
+u16 sub_80FBA04(u16 mapSectionId)
{
- return sub_80FB9C0(mapSecId);
+ return sub_80FB9C0(mapSectionId);
}
static void sub_80FBA18(void)
@@ -952,7 +952,7 @@ static void sub_80FBA18(void)
u16 y;
u16 i;
- if (gRegionMap->mapSecId == MAPSEC_NONE)
+ if (gRegionMap->mapSectionId == MAPSEC_NONE)
{
gRegionMap->everGrandeCityArea = 0;
return;
@@ -987,7 +987,7 @@ static void sub_80FBA18(void)
else
{
x--;
- if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId)
+ if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSectionId)
i++;
}
}
@@ -1006,7 +1006,7 @@ static bool8 sub_80FBAA0(u16 a)
for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++)
{
- if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId)
+ if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSectionId)
return TRUE;
}
return FALSE;
@@ -1303,44 +1303,44 @@ void sub_80FBF94(void)
gRegionMap->blinkPlayerIcon = TRUE;
}
-const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length)
+const u8 *GetMapSectionName(u8 *dest, u16 mapSectionId, u16 length)
{
- if (mapSecId == MAPSEC_SECRET_BASE)
+ if (mapSectionId == MAPSEC_SECRET_BASE)
return GetSecretBaseMapName(dest);
- if (mapSecId < MAPSEC_NONE)
- return StringCopy(dest, gRegionMapLocations[mapSecId].regionMapSectionId);
+ if (mapSectionId < MAPSEC_NONE)
+ return StringCopy(dest, gRegionMapLocations[mapSectionId].regionMapSectionId);
if (length == 0)
length = 18;
return StringFill(dest, CHAR_SPACE, length);
}
-const u8 *CopyMapName(u8 *dest, u16 mapSecId)
+const u8 *CopyMapName(u8 *dest, u16 mapSectionId)
{
- switch (mapSecId)
+ switch (mapSectionId)
{
case MAPSEC_UNK_0x57:
return StringCopy(dest, gOtherText_Ferry);
case MAPSEC_SECRET_BASE:
return StringCopy(dest, gOtherText_SecretBase);
default:
- return GetMapSectionName(dest, mapSecId, 0);
+ return GetMapSectionName(dest, mapSectionId, 0);
}
}
-const u8 *CopyLocationName(u8 *dest, u16 mapSecId)
+const u8 *CopyLocationName(u8 *dest, u16 mapSectionId)
{
- if (mapSecId == MAPSEC_EVIL_TEAM_HIDEOUT)
+ if (mapSectionId == MAPSEC_EVIL_TEAM_HIDEOUT)
return StringCopy(dest, gOtherText_Hideout);
else
- return CopyMapName(dest, mapSecId);
+ return CopyMapName(dest, mapSectionId);
}
-static void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height)
+static void GetRegionMapLocationPosition(u16 mapSectionId, u16 *x, u16 *y, u16 *width, u16 *height)
{
- *x = gRegionMapLocations[mapSecId].x;
- *y = gRegionMapLocations[mapSecId].y;
- *width = gRegionMapLocations[mapSecId].width;
- *height = gRegionMapLocations[mapSecId].height;
+ *x = gRegionMapLocations[mapSectionId].x;
+ *y = gRegionMapLocations[mapSectionId].y;
+ *width = gRegionMapLocations[mapSectionId].width;
+ *height = gRegionMapLocations[mapSectionId].height;
}
struct UnknownStruct3
@@ -1414,7 +1414,7 @@ static const u8 sUnknown_083E7920[][3] =
struct UnknownStruct4
{
const u8 *const *unk0;
- u16 mapSecId;
+ u16 mapSectionId;
u16 flag;
};
@@ -1433,7 +1433,7 @@ static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons
// Fly targets that are not cities or towns
static const u16 sSpecialFlyAreas[][2] =
{
- // flag, mapSecId
+ // flag, mapSectionId
{0x848, MAPSEC_BATTLE_TOWER},
{0xFFFF, MAPSEC_NONE},
};
@@ -1550,7 +1550,7 @@ void CB2_InitFlyRegionMap(void)
InitRegionMap(&ewram0_3.regionMap, 0);
CreateRegionMapCursor(0, 0);
CreateRegionMapPlayerIcon(1, 1);
- ewram0_3.unk6 = ewram0_3.regionMap.mapSecId;
+ ewram0_3.unk6 = ewram0_3.regionMap.mapSectionId;
StringFill(ewramBlankMapName, CHAR_SPACE, 12);
PrintFlyTargetName();
break;
@@ -1615,12 +1615,12 @@ static void PrintFlyTargetName(void)
{
const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i];
- if (ewram0_3.regionMap.mapSecId == r4->mapSecId)
+ if (ewram0_3.regionMap.mapSectionId == r4->mapSectionId)
{
if (FlagGet(r4->flag))
{
MenuDrawTextWindow(16, 14, 29, 19);
- MenuPrint(ewram0_3.regionMap.mapSecName, 17, 15);
+ MenuPrint(ewram0_3.regionMap.mapSectionName, 17, 15);
MenuPrint_RightAligned(r4->unk0[ewram0_3.regionMap.everGrandeCityArea], 29, 17);
return;
}
@@ -1632,7 +1632,7 @@ static void PrintFlyTargetName(void)
if (zero == 0)
{
MenuDrawTextWindow(16, 16, 29, 19);
- MenuPrint(ewram0_3.regionMap.mapSecName, 17, 17);
+ MenuPrint(ewram0_3.regionMap.mapSectionName, 17, 17);
MenuZeroFillWindowRect(16, 14, 29, 15);
}
}
@@ -1712,10 +1712,10 @@ static void CreateSpecialAreaFlyTargetIcons(void)
if (FlagGet(sSpecialFlyAreas[i][0]))
{
- u16 mapSecId = sSpecialFlyAreas[i][1];
+ u16 mapSectionId = sSpecialFlyAreas[i][1];
u8 spriteId;
- GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height);
+ GetRegionMapLocationPosition(mapSectionId, &x, &y, &width, &height);
x = (x + 1) * 8;
y = (y + 2) * 8;
spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10);
@@ -1724,7 +1724,7 @@ static void CreateSpecialAreaFlyTargetIcons(void)
gSprites[spriteId].oam.size = 1;
gSprites[spriteId].callback = SpriteCB_FlyTargetIcons;
StartSpriteAnim(&gSprites[spriteId], 6);
- gSprites[spriteId].data0 = mapSecId;
+ gSprites[spriteId].data0 = mapSectionId;
}
}
}
@@ -1732,8 +1732,8 @@ static void CreateSpecialAreaFlyTargetIcons(void)
static void SpriteCB_FlyTargetIcons(struct Sprite *sprite)
{
- // Blink if our mapSecId is the one selected on the map
- if (ewram0_3.regionMap.mapSecId == sprite->data0)
+ // Blink if our mapSectionId is the one selected on the map
+ if (ewram0_3.regionMap.mapSectionId == sprite->data0)
{
// Toggle visibility every 16 frames
sprite->data1++;
@@ -1810,7 +1810,7 @@ static void sub_80FC69C(void)
FreeRegionMapIconResources();
if (ewramA6E != 0)
{
- switch (ewram0_3.regionMap.mapSecId)
+ switch (ewram0_3.regionMap.mapSectionId)
{
case MAPSEC_SOUTHERN_ISLAND:
sub_8053538(22);
@@ -1825,10 +1825,10 @@ static void sub_80FC69C(void)
sub_8053538((FlagGet(0x854) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11);
break;
default:
- if (sUnknown_083E7920[ewram0_3.regionMap.mapSecId][2] != 0)
- sub_8053538(sUnknown_083E7920[ewram0_3.regionMap.mapSecId][2]);
+ if (sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2] != 0)
+ sub_8053538(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2]);
else
- warp1_set_2(sUnknown_083E7920[ewram0_3.regionMap.mapSecId][0], sUnknown_083E7920[ewram0_3.regionMap.mapSecId][1], -1);
+ warp1_set_2(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][0], sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][1], -1);
break;
}
sub_80865BC();
diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c
index 5fbecec0d..54ed89ef2 100644
--- a/src/field/use_pokeblock.c
+++ b/src/field/use_pokeblock.c
@@ -244,7 +244,7 @@ static void sub_8136294(void)
case 6:
gUnknown_083DFEC4->unk76AA = 0;
gUnknown_083DFEC4->unk87E0 = NULL;
- gUnknown_083DFEC4->unk030C = 0x20;
+ gUnknown_083DFEC4->unk030C.val = 0x20;
gUnknown_02039304->unk50++;
break;
case 7:
diff --git a/src/field/pokenav.c b/src/pokenav_after.c
index 21d7bb4e3..84ed7b14b 100644
--- a/src/field/pokenav.c
+++ b/src/pokenav_after.c
@@ -38,5 +38,3 @@ void sub_80F700C(u8 *arg0, u16 arg1) {
ptr[2] = 0x80;
ptr[3] = 0xFF;
}
-
-IWRAM_DATA MainCallback gUnknown_03000744;
diff --git a/src/pokenav_before.c b/src/pokenav_before.c
new file mode 100644
index 000000000..5cd1c8942
--- /dev/null
+++ b/src/pokenav_before.c
@@ -0,0 +1,5004 @@
+#include "global.h"
+#include "main.h"
+#include "pokenav.h"
+#include "ewram.h"
+#include "battle.h"
+#include "data2.h"
+#include "de_rom_8040FE0.h"
+#include "flags.h"
+#include "landmark.h"
+#include "link.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "region_map.h"
+#include "songs.h"
+#include "string_util.h"
+#include "sound.h"
+#include "task.h"
+#include "text.h"
+#include "unknown_task.h"
+
+extern u8 ewram[];
+
+struct UnknownPokenav0 {
+ /* 0x0000 */ u8 var0[0x0300];
+ /* 0x0300 */ void (*var300)(void);
+ /* 0x0304 */ u16 var304;
+ /* 0x0306 */ u16 var306;
+ /* 0x0308 */ u32 var308;
+ /* 0x030C */ u8 fill030C[0x6a9f];
+ /* 0x6dab */ u8 var6dab;
+ /* 0x6dac */ u8 var6dac;
+ /* 0x6dad */ u8 var6dad;
+ /* 0x6dae */ u8 var6dae;
+ /* 0x6daf */ u8 fill6daf[0x3];
+ /* 0x6db2 */ u8 var6db2[5];
+ /* 0x6db7 */ u8 fill6db7[0x25];
+ /* 0x6ddc */ s8 var6ddc;
+ /* 0x6ddd */ u8 fill6ddd[0x13];
+ /* 0x6df0 */ s8 var6df0;
+ /* 0x6df1 */ u8 fill6df1[0xB];
+ /* 0x6dfc */ u8 var6dfc;
+ /* 0x6dfd */ u8 fill6dfd[0x17];
+ /* 0x6e14 */ u8 var6e14;
+ /* 0x6e15 */ u8 var6e15;
+ /* 0x6e16 */ u8 var6e16;
+ /* 0x6e17 */ u8 var6e17;
+ /* 0x6e18 */ u8 fill6e18[0x78];
+ /* 0x6e90 */ u8 var6e90;
+ /* 0x6e91 */ u8 fill6e91[0x4];
+ /* 0x6e95 */ u8 var6e95;
+ /* 0x6e96 */ u8 var6e96[0x814];
+ /* 0x76AA */ u8 var76aa;
+ /* 0x76AB */ u8 fill76AB[0x10BD];
+ /* 0x8768 */ u32 var8768;
+ /* 0x876C */ u8 fill876C[0x2];
+ /* 0x876E */ u8 var876E;
+ /* 0x876F */ u8 fill876F[0x5];
+ /* 0x8774 */ s16 var8774;
+ /* 0x8776 */ u8 fill8776[0x55];
+ /* 0x87CB */ u8 var87CB;
+ /* 0x87CC */ u8 fill87CC[0xC];
+ /* 0x87D8 */ u8 var87D8;
+ /* 0x87D9 */ u8 fill87D9[0x1];
+ /* 0x87DA */ s16 var87DA;
+ /* 0x87DC */ s16 var87DC;
+ /* 0x87DE */ u8 fill87DE[0x4a];
+ /* 0x8828 */ u8 playerPartyCount;
+ /* 0x8829 */ u8 fill8829[0x07bf];
+ /* 0x8FE8 */ s8 var8fe8;
+ /* 0x8FE9 */ u8 fill8FE9[0x16];
+ /* 0x8FFF */ u8 var8fff[5];
+ /* 0x9004 */ u8 fill9004[0x340];
+ /* 0x9344 */ u8 var9344;
+ /* 0x9345 */ u8 fill9345[0x3b8b];
+ /* 0xced0 */ u32 varCED0;
+ /* 0xced4 */ u8 fillCED4[0x284];
+ /* 0xD158 */ u16 varD158;
+ /* 0xD15A */ u8 fillD15A[0x8];
+ /* 0xD162 */ u8 varD162;
+};
+
+struct UnknownPokenav0_1 {
+ u8 fill6dad[0x6dad];
+ s8 var6dad;
+ s8 var6dae;
+};
+
+IWRAM_DATA void (*gUnknown_03000744)(void);
+
+extern const u8 gUnknown_083E0314[];
+extern const u16 gUnknown_08E9F9E8[];
+extern const u16 gUnknown_083E0274[];
+extern const u8 gUnknown_08E9FC64[];
+extern const u8 gUnknown_083E0354[];
+extern const u8 gUnknown_08E9FD64[];
+extern const u8 gUnknown_08E9FE54[];
+extern const u8 gUnknown_08E9FD1C[];
+extern const u16 gPokenavConditionSearch2_Pal[];
+extern const u8 gUnknown_083E0334[];
+extern const u16 gUnknown_083E02B4[];
+extern const u8 gPokenavConditionSearch2_Gfx[];
+extern const u8 gUnknownPalette_81E6692[];
+extern const u8 gUnknown_083E0254[];
+extern const u8 gUnknown_08E9FEB4[];
+extern const u8 gUnknown_083E01AC[];
+extern const u8 gUnknown_08E9AC4C[];
+extern const u8 gPokenavConditionMenu2_Pal[];
+extern const u8 gPokenavConditionView_Gfx[];
+extern const u8 gUnknown_08E9ABB4[];
+extern const u8 gUnknown_08E9AC2C[];
+extern const u8 *const gPokenavCityMaps[][2];
+extern const u8 gPokenavHoennMapSquares_Pal[];
+extern const u8 gPokenavHoennMapSquares_Gfx[];
+extern const u16 gUnknown_083E003C[];
+extern const u8 *const gUnknown_083E31B0[];
+extern const u8 *const gUnknown_083E31CC[];
+extern const u8 *const gUnknown_083E31D8[];
+extern u8 *gUnknown_083DFEC8;
+extern const u8 gUnknown_083DFEEC[];
+extern const u8 gUnknown_083E005C[];
+extern const u8 gUnknown_083E007C[];
+extern const u8 gPokenavOutlineTilemap[];
+extern const u8 gPokenavOutlineTiles[];
+extern const u8 gPokenavOutlinePalette[];
+extern const u8 gUnknown_083DFECC[];
+extern const u8 gUnknown_083DFF8C[];
+extern const u8 gPokenavHoennMapMisc_Gfx[];
+extern const u8 gUnknown_08E99FB0[];
+extern const u8 gUnknown_08E9A100[];
+extern const u16 gPokenavHoennMap1_Pal[];
+
+static void sub_80EBCA8();
+static void sub_80EEE20();
+static bool8 sub_80EEE54();
+static void sub_80EEE08();
+static void sub_80EED2C(u8);
+static void sub_80EC268();
+static void sub_80EED1C();
+static void sub_80EE9C0(u8, u8, u8);
+static bool8 sub_80EEA0C();
+static bool8 sub_80EEC10();
+static void sub_80EED9C();
+static void sub_80EDB88();
+static void sub_80EC4A0();
+static void sub_80EC81C();
+static void sub_80EE96C();
+static void sub_80EE3D8();
+static bool8 sub_80EEF34();
+static void sub_80EED0C();
+static void sub_80EC67C();
+static void sub_80EC86C();
+static bool8 sub_80EEC90();
+static void sub_80ED620();
+static void sub_80EC960();
+static void sub_80ED01C();
+static void sub_80ECC08();
+static void sub_80ED31C();
+static void sub_80ED4D8();
+static void sub_80ED858();
+static void sub_80EDDBC();
+static void sub_80EDE70();
+static void sub_80EDEE4();
+static void sub_80EE06C();
+static void sub_80EE294();
+static void sub_80EE58C();
+static void sub_80EE658();
+static void sub_80EE8F4();
+static void sub_80EEDC4();
+
+extern bool8 sub_80F0944(void);
+extern void sub_80F081C();
+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_80F1614(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 *);
+extern void sub_80EF7D4(void);
+extern void sub_80EF54C(u8);
+extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16);
+extern void sub_80EF58C(u8);
+extern void sub_80F6FFC();
+extern void sub_80F3294();
+extern void sub_80F0B24();
+extern bool8 sub_80F0B44();
+extern void sub_80F0F64();
+extern bool8 sub_80F0FEC();
+extern void sub_80F6FB8();
+extern void sub_80F6DB8();
+extern void sub_80F0CD8();
+extern bool8 sub_80F6E9C();
+extern bool8 sub_80F0D5C();
+extern bool8 sub_80F6ED4();
+extern bool8 sub_80F0EF4();
+extern void sub_80F2FB0();
+extern void sub_80F0FA0();
+extern void sub_80F0C28();
+extern bool8 sub_80F0C48();
+extern bool8 sub_80F70FC();
+extern void sub_80F708C(u32);
+extern void sub_80F4394();
+extern void sub_80F0EC0();
+extern void sub_80F700C();
+extern void sub_80F42C4();
+extern void sub_80F0FFC();
+extern void sub_80F6F10();
+extern void sub_80F3C2C();
+extern void sub_80F15A8();
+extern void sub_80F6A4C();
+extern bool8 sub_80F6AF0();
+extern void sub_80F3B00();
+extern bool8 sub_80F3B58();
+extern void sub_80F1494();
+extern u8 sub_80F68E8();
+extern void sub_80F3B94();
+extern bool8 sub_80F3BD4();
+extern void sub_80F66E0();
+extern bool8 sub_80F1080();
+extern void sub_80F38B8();
+extern bool8 sub_80F38EC();
+extern void sub_80F638C();
+extern bool8 sub_80F63D0();
+extern void sub_80F4CF0();
+extern void sub_80EFF34();
+extern bool8 sub_80EFF68();
+extern void sub_80F35B4();
+extern void sub_80F6134();
+extern u8 sub_80F5DD4();
+extern void ShowMapNamePopUpWindow();
+extern bool8 sub_80F0718();
+extern bool8 sub_80F3264();
+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;
+
+
+void sub_80EBA5C() {
+ switch (gMain.state) {
+ default:
+ gMain.state = 0;
+ case 0:
+ ewram0_10.var6dac = is_c1_link_related_active();
+ if (!ewram0_10.var6dac) {
+ ewram0_10.var6dab = 0;
+ gMain.state++;
+ SetMainCallback2(&sub_80EBBE8);
+ break;
+ }
+ break;
+ case 1:
+ SetVBlankCallback(NULL);
+ break;
+ case 2:
+ ResetPaletteFade();
+ break;
+ case 3:
+ ResetSpriteData();
+ break;
+ case 4:
+ FreeAllSpritePalettes();
+ break;
+ case 5:
+ ResetTasks();
+ break;
+ case 6:
+ remove_some_task();
+ break;
+ case 7:
+ sub_80F1A90();
+ gMain.state++;
+ case 8:
+ if (sub_80F1AC4()) return;
+ break;
+ case 9:
+ sub_80F2688();
+ gMain.state++;
+
+ case 10:
+ if (sub_80F26BC()) return;
+ break;
+ case 11:
+ sub_80F36F0();
+ gMain.state++;
+ case 12:
+ if (sub_80F3724()) return;
+ break;
+ case 13:
+ sub_80EBC10();
+ sub_80EBDBC(&sub_80EBDD8);
+ break;
+ case 14:
+ ewram0_10.var6dab = 1;
+ PlaySE(SE_PN_ON);
+ SetMainCallback2(&sub_80EBD90);
+ SetVBlankCallback(&sub_80EBD18);
+ sub_80F1A74();
+ break;
+ }
+
+ gMain.state++;
+}
+
+void sub_80EBBE8() {
+ u8 var1;
+ if (!ewram0_10.var6dab) {
+ var1 = ewram0_10.var6dab;
+ do {
+ sub_80EBA5C();
+ var1 = ewram0_10.var6dab;
+ } while (!var1);
+ }
+}
+
+void sub_80EBC10() {
+ u16 i;
+ u16 *var1;
+
+ gKeyRepeatStartDelay = 0x14;
+ ewram0_10.playerPartyCount = CalculatePlayerPartyCount();
+ ewram0_10.var6ddc = 0;
+ ewram0_10.var9344 = 0;
+ ewram0_10.var8768 = 0;
+ ewram0_10.varCED0 = 0;
+
+ for (i = 0; i < 5; ++i) {
+ ewram0_10.var8fff[i] = 0;
+ var1 = (u16 *)ewram0_10.var0;
+ var1[i*2 + 0x4820] = 0x9B;
+ var1[i*2 + 0x4821] = 0x5B;
+ }
+
+ ewram0_10.var6e95 = 0;
+ sub_80EBCA8();
+}
+
+void sub_80EBCA8() {
+ ewram0_10.var6db2[0] = 1;
+ ewram0_10.var6db2[1] = 2;
+ ewram0_10.var6db2[2] = 3;
+
+ if (FlagGet(SYS_RIBBON_GET)) {
+ ewram0_10.var6db2[3] = 4;
+ }
+ else {
+ ewram0_10.var6db2[3] = 0;
+ }
+
+ ewram0_10.var6db2[4] = 5;
+}
+
+void sub_80EBD18() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_80F1FF0();
+}
+
+void sub_80EBD30() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ UpdateRegionMapVideoRegs();
+ sub_80EFE7C();
+}
+
+void sub_80EBD4C() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_80F5BF0();
+ sub_8089668();
+}
+
+void sub_80EBD68() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_80F6F64();
+}
+
+void sub_80EBD80() {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+}
+
+void sub_80EBD90() {
+ ewram0_10.var300();
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ UpdatePaletteFade();
+ sub_80F19FC();
+}
+
+void sub_80EBDBC(void (*func)(void)) {
+ ewram0_10.var300 = func;
+ ewram0_10.var304 = 0;
+}
+
+void sub_80EBDD8() {
+ switch (ewram0_10.var304) {
+ case 0:
+ SetVBlankCallback(NULL);
+ REG_DISPCNT = 0;
+ ewram0_10.var6dad = ewram0_10.var6ddc;
+ ewram0_10.var6dae = 5;
+ ewram0_10.var304++;
+ break;
+ case 1:
+ sub_80F3FF0();
+ ewram0_10.var304++;
+ case 2:
+ if (sub_80F4024()) return;
+ ewram0_10.var304++;
+ break;
+ case 3:
+ sub_80F2598();
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80EEE20();
+ ewram0_10.var304++;
+ case 5:
+ if (sub_80EEE54()) return;
+ sub_80EEE08();
+ ewram0_10.var304++;
+ return;
+ case 6:
+ sub_80EF248(0);
+ ewram0_10.var304++;
+ case 7:
+ if (sub_80EF284(0)) return;
+ ewram0_10.var304++;
+ break;
+ case 8:
+ sub_80F1B8C(0);
+ ewram0_10.var304++;
+ case 9:
+ if (sub_80F1BC8(0)) return;
+ ewram0_10.var304++;
+ break;
+ case 10:
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 11:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ ewram0_10.var304++;
+ return;
+ case 12:
+ sub_80EED2C(0);
+ ewram0_10.var304++;
+ return;
+ case 13:
+ if (gPaletteFade.active) return;
+ ewram0_10.var304++;
+ return;
+ case 14:
+ sub_80F2C80(0);
+ ewram0_10.var304++;
+ case 15:
+ if (sub_80F2CBC(0)) return;
+ ewram0_10.var304++;
+ break;
+ case 16:
+ sub_80F1DF0();
+ ewram0_10.var304++;
+ return;
+ case 17:
+ if (!sub_80F1E50()) {
+ sub_80EF428(0, 0);
+ sub_80EBDBC(&sub_80EC268);
+ }
+ return;
+
+ }
+
+}
+
+void sub_80EC00C() {
+ switch (ewram0_10.var304) {
+ case 0:
+ if (!sub_80EEF78()) {
+ SetVBlankCallback(&sub_80EBD80);
+ sub_80EED1C();
+ ewram0_10.var6dad = ewram0_10.var6ddc;
+ ewram0_10.var6dae = 5;
+ sub_80EEE08();
+ ewram0_10.var304++;
+ }
+ break;
+ case 1:
+ sub_80EF248(0);
+ ewram0_10.var304++;
+ case 2:
+ if (sub_80EF284(0)) return;
+ ewram0_10.var304++;
+ break;
+ case 3:
+ sub_80F1B8C(0);
+ ewram0_10.var304++;
+ case 4:
+ if (sub_80F1BC8(0)) return;
+ ewram0_10.var304++;
+ break;
+ case 5:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 6:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 7:
+ sub_80EED2C(0);
+ ewram0_10.var304++;
+ break;
+ case 8:
+ if (gPaletteFade.active) return;
+ ewram0_10.var304++;
+ return;
+ case 9:
+ sub_80F2598();
+ ewram0_10.var304++;
+ break;
+ case 10:
+ sub_80F2C80(0);
+ ewram0_10.var304++;
+ case 11:
+ if (sub_80F2CBC(0)) return;
+ ewram0_10.var304++;
+ return;
+ case 12:
+ sub_80F1DF0();
+ ewram0_10.var304++;
+ return;
+ case 13:
+ if (sub_80F1E50()) return;
+ sub_80EF428(0, ewram0_10.var6dad);
+ sub_80EBDBC(&sub_80EC268);
+ }
+}
+
+void sub_80EC210() {
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F2D04(1);
+ sub_80EE9C0(0, ewram0_10.var6ddc, 0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80EEA0C()) return;
+ sub_80EBDBC(&sub_80EC268);
+ }
+}
+
+void sub_80EC268() {
+ u8 var1;
+ switch (ewram0_10.var304) {
+ case 0:
+ if (sub_80EEC10() != 0) {
+ PlaySE(0x5);
+ sub_80EF428(0, ewram0_10.var6dad);
+ sub_80EED9C();
+ break;
+ }
+ else {
+ if (gMain.newKeys & A_BUTTON) {
+ ewram0_10.var6ddc = ewram0_10.var6dad;
+ switch (ewram0_10.var6db2[ewram0_10.var6ddc] - 1) {
+ case 0:
+ PlaySE(5);
+ sub_80EBDBC(&sub_80EC4A0);
+ break;
+ case 1:
+ PlaySE(5);
+ sub_80EBDBC(&sub_80EC81C);
+ break;
+ case 4:
+ ewram0_10.var304 = 1;
+ break;
+ case 3:
+ ewram0_10.var304 = 2;
+ break;
+ case 2:
+ ewram0_10.var304 = 6;
+ break;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON) {
+ ewram0_10.var304 = 1;
+ }
+ break;
+ }
+ case 1:
+ sub_80F208C();
+ sub_80EBDBC(&sub_80EE96C);
+ break;
+ case 2:
+ sub_80F6208();
+ ewram0_10.var304++;
+ case 3:
+ if (sub_80F6250()) return;
+ ewram0_10.var304++;
+ break;
+ case 4:
+ if (sub_8055870()) return;
+ if (ewram0_10.var8fe8 != 0) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EDB88);
+ break;
+ }
+ else {
+ PlaySE(0x20);
+ sub_80EF428(0, 5);
+ ewram0_10.var304 = 0xFF;
+ break;
+ }
+ case 6:
+ sub_80F6C20();
+ if (ewram0_10.varD158 != 0) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EE3D8);
+ break;
+ }
+ else {
+ PlaySE(0x20);
+ sub_80EF428(0, 6);
+ ewram0_10.var304 = 0xFF;
+ break;
+ }
+ case 0xFF:
+ if ((var1 = sub_80EEC10()) != 0) {
+ PlaySE(0x5);
+ sub_80EF428(0, ewram0_10.var6dad);
+ ewram0_10.var304 = 0;
+ sub_80EED9C();
+ }
+ else {
+ if (!(gMain.newKeys & (A_BUTTON | B_BUTTON))) return;
+ sub_80EF428(0, ewram0_10.var6dad);
+ ewram0_10.var304 = var1;
+ break;
+ }
+ }
+}
+
+void sub_80EC4A0() {
+ u32 var1;
+ u32 var2;
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F1E84();
+ sub_80F2D04(0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (!sub_80F1F10()) {
+ if (gSaveBlock2.regionMapZoom) {
+ var1 = 0x7;
+ }
+ else var1 = 0x8;
+ sub_80EEFBC(var1);
+ ewram0_10.var304++;
+ }
+ break;
+ case 2:
+ if (!(var2 = sub_80EEF34())) {
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 0x10, var2);
+ ewram0_10.var304++;
+ }
+ break;
+ case 3:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(NULL);
+ sub_80EED0C();
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80F2620();
+ ewram0_10.var304++;
+ break;
+ case 5:
+ sub_80EF814();
+ ewram0_10.var304++;
+ break;
+ case 6:
+ sub_80EF840();
+ ewram0_10.var304++;
+ case 7:
+ if (sub_80EF874()) return;
+ ewram0_10.var304++;
+ break;
+ case 8:
+ sub_80F2C80(0x4);
+ ewram0_10.var304++;
+ case 9:
+ if (sub_80F2CBC(0x4)) return;
+ ewram0_10.var304++;
+ break;
+ case 0xA:
+ sub_80F2DD8();
+ SetVBlankCallback(&sub_80EBD30);
+ ewram0_10.var304++;
+ break;
+ case 0xB:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 0xC:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ ewram0_10.var304++;
+ break;
+ case 0xD:
+ sub_80EED2C(0x1);
+ ewram0_10.var304++;
+ break;
+ case 0xE:
+ if (gPaletteFade.active) return;
+ sub_80EBDBC(&sub_80EC67C);
+ }
+}
+
+void sub_80EC67C() {
+ u32 var1;
+ u32 var2;
+ switch (ewram0_10.var304) {
+ case 0:
+ switch (sub_80FAB60()) {
+ case 1:
+ sub_80EED9C();
+ break;
+ case 3:
+ sub_80EF9F8();
+ break;
+ case 4:
+ PlaySE(0x5);
+ ewram0_10.var304 = 1;
+ break;
+ case 5:
+ PlaySE(0x5);
+ ewram0_10.var304 = 4;
+ break;
+ }
+ break;
+ case 1:
+ if (!ewram0_10.var6e90) {
+ sub_80FAEC4();
+ ewram0_10.var304++;
+ break;
+ }
+ if (sub_80EFBDC(1)) return;
+ sub_80FAEC4();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if ((var2 = sub_80FAFC0())) return;
+ if (!ewram0_10.var6e90) {
+ sub_80EFBB0();
+ ewram0_10.var304 = var2;
+ break;
+ }
+ ewram0_10.var304++;
+ break;
+ case 3:
+ if ((var1 = sub_80EFBDC(0))) return;
+ sub_80EFBB0();
+ ewram0_10.var304 = var1;
+ break;
+ case 4:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 0x10, 0);
+ ewram0_10.var304++;
+ break;
+ case 5:
+ if (gPaletteFade.active) return;
+ sub_80F2DF4();
+ sub_80F2D04(0x4);
+ gSaveBlock2.regionMapZoom = (ewram0_10.var6e90 == 1) ? 1 : 0;
+ sub_80EBDBC(&sub_80EC00C);
+ }
+}
+
+void sub_80EC81C() {
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F2D04(0);
+ sub_80EE9C0(1, 0, 1);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80EEA0C()) return;
+ sub_80EBDBC(&sub_80EC86C);
+ }
+}
+
+void sub_80EC86C() {
+ switch (ewram0_10.var304) {
+ case 0:
+ if (sub_80EEC90()) {
+ PlaySE(0x5);
+ sub_80EF428(1, ewram0_10.var6dad);
+ sub_80EED9C();
+ break;
+ }
+ if (gMain.newKeys & A_BUTTON) {
+ PlaySE(0x5);
+ ewram0_10.var6df0 = ewram0_10.var6dad;
+ switch (ewram0_10.var6df0) {
+ case 0:
+ sub_80EBDBC(&sub_80ED620);
+ break;
+ case 1:
+ sub_80EBDBC(&sub_80EC960);
+ break;
+ case 2:
+ sub_80EBDBC(&sub_80EC210);
+ break;
+ }
+ break;
+ }
+ else if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ ewram0_10.var6df0 = 0x2;
+ ewram0_10.var6dad = 0x2;
+ ewram0_10.var304++;
+ break;
+ }
+ break;
+ case 1:
+ if (sub_80F1E6C()) return;
+ sub_80EBDBC(&sub_80EC210);
+ }
+}
+
+void sub_80EC960() {
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80EE9C0(2, 0, 5);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80EEA0C()) return;
+ sub_80EBDBC(&sub_80ECC08);
+ }
+}
+
+void sub_80EC9A8() {
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F2D04(5);
+ sub_80EE9C0(1, ewram0_10.var6df0, 0xC);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80EEA0C()) return;
+ sub_80EBDBC(&sub_80EC86C);
+ sub_80EF428(1, ewram0_10.var6dad);
+ }
+}
+
+void sub_80ECA10() {
+ switch (ewram0_10.var304) {
+ case 0:
+ if (sub_80EEF78()) return;
+ SetVBlankCallback(&sub_80EBD80);
+ sub_80EED1C();
+ ewram0_10.var6dad = ewram0_10.var6df0;
+ ewram0_10.var6dae = 0x3;
+ sub_80EEE08();
+ ewram0_10.var304++;
+ break;
+ case 1:
+ sub_80EF248(0x1);
+ ewram0_10.var304++;
+ case 2:
+ if (sub_80EF284(0x1)) return;
+ ewram0_10.var304++;
+ break;
+ case 3:
+ sub_80F1B8C(0x1);
+ ewram0_10.var304++;
+ case 4:
+ if (sub_80F1BC8(0x1)) return;
+ ewram0_10.var304++;
+ break;
+ case 5:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 6:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 7:
+ sub_80EED2C(0);
+ ewram0_10.var304++;
+ break;
+ case 8:
+ sub_80F2598();
+ ewram0_10.var304++;
+ break;
+ case 9:
+ if (gPaletteFade.active) return;
+ ewram0_10.var304++;
+ break;
+ case 0xA:
+ sub_80F2C80(0x1);
+ ewram0_10.var304++;
+
+ case 0xB:
+ if (sub_80F2CBC(0x1)) return;
+ ewram0_10.var304++;
+ break;
+ case 0xC:
+ sub_80F1DF0();
+ ewram0_10.var304++;
+ break;
+ case 0xD:
+ if (sub_80F1E50()) return;
+ sub_80EF428(1, ewram0_10.var6dad);
+ sub_80EBDBC(&sub_80EC86C);
+ }
+}
+
+void sub_80ECC08() {
+ switch (ewram0_10.var304) {
+ case 0:
+ if (sub_80EEC90()) {
+ PlaySE(0x5);
+ sub_80EF428(2, ewram0_10.var6dad);
+ sub_80EED9C();
+ break;
+ }
+
+ if (gMain.newKeys & A_BUTTON) {
+ PlaySE(0x5);
+ switch ((s8)ewram0_10.var6dad) {
+ case 0:
+ ewram0_10.var87D8 = 22;
+ break;
+ case 1:
+ ewram0_10.var87D8 = 23;
+ break;
+ case 2:
+ ewram0_10.var87D8 = 24;
+ break;
+ case 3:
+ ewram0_10.var87D8 = 33;
+ break;
+ case 4:
+ ewram0_10.var87D8 = 47;
+ break;
+ case 5:
+ sub_80EBDBC(&sub_80EC9A8);
+ return;
+ }
+
+ ewram0_10.var6dfc = ewram0_10.var6dad;
+ ewram0_10.var76aa = 1;
+ sub_80EBDBC(&sub_80ED01C);
+ }
+ else if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ ewram0_10.var6dad = 0x5;
+ ewram0_10.var304++;
+ }
+ break;
+ case 1:
+ if (sub_80F1E6C()) return;;
+ sub_80EBDBC(&sub_80EC9A8);
+ break;
+ }
+}
+
+void sub_80ECD80() {
+ u16 var1;
+ switch (ewram0_10.var304) {
+ case 0:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 0x10, 0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (gPaletteFade.active) return;
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (sub_80EEF78()) return;
+ SetVBlankCallback(&sub_80EBD80);
+ ewram0_10.var304++;
+ break;
+ case 3:
+ sub_80EED1C();
+ sub_80F3130();
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80F2D6C(0x1);
+ ewram0_10.var304++;
+ break;
+ case 5:
+ sub_80F2D6C(0x5);
+ ewram0_10.var304++;
+ break;
+ case 6:
+ ewram0_10.var6dad = ewram0_10.var6dfc;
+ ewram0_10.var6dae = 0x6;
+ sub_80EEE08();
+ ewram0_10.var304++;
+ break;
+ case 7:
+ sub_80EF248(0x2);
+ ewram0_10.var304++;
+ case 8:
+ if (sub_80EF284(0x2)) return;
+ ewram0_10.var304++;
+ break;
+ case 9:
+ sub_80F1B8C(0x2);
+ ewram0_10.var304++;
+ case 10:
+ if (sub_80F1BC8(0x2)) return;
+ ewram0_10.var304++;
+ break;
+ case 11:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 12:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 13:
+ sub_80EED2C(0);
+ ewram0_10.var304++;
+ break;
+ case 14:
+ sub_80F2598();
+ ewram0_10.var304++;
+ break;
+ case 15:
+ if (gPaletteFade.active) return;
+ ewram0_10.var304++;
+ break;
+ case 16:
+ sub_80F2C80(0x1);
+ ewram0_10.var304++;
+ case 17:
+ if ((var1 = sub_80F2CBC(0x1))) return;
+ ewram0_10.var306 = var1;
+ ewram0_10.var304++;
+ break;
+ case 18:
+ sub_80F2C80(0x5);
+ ewram0_10.var304++;
+ case 19:
+ if (sub_80F2CBC(0x5)) return;
+ sub_80F1DF0();
+ ewram0_10.var304++;
+ break;
+ case 20:
+ if (sub_80F1E50()) return;
+ sub_80EF428(2, ewram0_10.var6dad);
+ sub_80EBDBC(&sub_80ECC08);
+ }
+}
+
+void sub_80ED01C() {
+ u16 var1;
+ u16 var3;
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F1E84();
+ sub_80F2D04(0x1);
+ sub_80F2D04(0x5);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80F1F10()) return;
+ sub_80EEFBC(0);
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if ((var1 = sub_80EEF34())) return;
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 0x10, var1);
+ ewram0_10.var304++;
+ break;
+ case 3:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(NULL);
+ sub_80EED0C();
+ sub_80EF814();
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80F2620();
+ ewram0_10.var304++;
+ break;
+ case 5:
+ sub_80F4D44();
+ ewram0_10.var304++;
+ case 6:
+ if (!sub_80F4D88()) {
+ ewram0_10.var304 += 2;
+ break;
+ }
+ ewram0_10.var304++;
+ break;
+ case 7:
+ if (sub_8055870()) return;
+ ewram0_10.var304--;
+ break;
+ case 8:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 9:
+ sub_80F0264(0);
+ ewram0_10.var304++;
+ case 10:
+ if (sub_80F02A0()) return;
+ ewram0_10.var304++;
+ break;
+ case 11:
+ sub_80F3008(0);
+ ewram0_10.var304++;
+ break;
+ case 12:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 13:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 14:
+ sub_80EED2C(0x4);
+ ewram0_10.var304++;
+ break;
+ case 15:
+ if (gPaletteFade.active) return;
+ ewram0_10.var306 = (u8)(gPaletteFade.active << 24);
+ ewram0_10.var304++;
+ break;
+ case 16:
+ sub_80F2C80(0x1);
+ ewram0_10.var304++;
+ case 17:
+ if ((var3 = sub_80F2CBC(0x1))) return;
+ ewram0_10.var306 = var3;
+ ewram0_10.var304++;
+ break;
+ case 18:
+ sub_80F2C80(ewram0_10.var6dfc + 7);
+ ewram0_10.var304++;
+ case 19:
+ if (sub_80F2CBC(ewram0_10.var6dfc + 7)) return;
+ sub_80EBDBC(&sub_80ED31C);
+ break;
+ }
+}
+
+void sub_80ED31C() {
+ switch (ewram0_10.var304) {
+ case 0:
+ switch (sub_80F5DD4()) {
+ case 1:
+ PlaySE(0x5);
+ ShowMapNamePopUpWindow();
+ break;
+ case 2:
+ PlaySE(0x5);
+ ewram0_10.var304++;
+ break;
+ default:
+ if (gMain.newKeys & A_BUTTON) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80ED4D8);
+ }
+ else if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80ECD80);
+ }
+ break;
+ }
+ break;
+ case 1:
+ if (sub_80F0718()) return;
+ ShowMapNamePopUpWindow();
+ sub_80F3264();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (sub_8055870()) return;
+ ewram0_10.var304 = 0;
+ break;
+ }
+}
+
+void sub_80ED3D0() {
+ switch (ewram0_10.var304) {
+ case 0:
+ SetVBlankCallback(NULL);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ sub_80EED0C();
+ sub_80F6134();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ sub_80EEFBC(0);
+ ewram0_10.var304++;
+ break;
+ case 3:
+ sub_80F0264(0);
+ ewram0_10.var304++;
+ case 4:
+ if (sub_80F02A0()) return;
+ ewram0_10.var304++;
+ break;
+ case 5:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 6:
+ sub_80F3008(0);
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 7:
+ sub_80EED2C(0x4);
+ ewram0_10.var304++;
+ break;
+ case 8:
+ if (gPaletteFade.active) return;
+ sub_80EBDBC(&sub_80ED31C);
+ }
+}
+
+void sub_80ED4D8() {
+ switch (ewram0_10.var304) {
+ case 0:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 0x10, 0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(NULL);
+ sub_80EED0C();
+ sub_80F3130();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 3:
+ sub_80F4CF0();
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80EFF34();
+ ewram0_10.var304++;
+ case 5:
+ if (sub_80EFF68()) return;
+ ewram0_10.var304++;
+ break;
+ case 6:
+ sub_80F35B4();
+ sub_80EEFBC(0x2);
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(sub_80EBD4C);
+ ewram0_10.var304++;
+ break;
+ case 7:
+ sub_80EED2C(0x2);
+ ewram0_10.var304++;
+ break;
+ case 8:
+ if (gPaletteFade.active) return;
+ sub_80EBDBC(&sub_80ED858);
+ break;
+ }
+}
+
+void sub_80ED620() {
+ u8 var1;
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F1E84();
+ sub_80F2D04(0x1);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80F1F10()) return;
+ sub_80EEFBC(0x1);
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (!(var1 = sub_80EEF34())) {
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 0x10, var1);
+ ewram0_10.var304++;
+ }
+ break;
+ case 3:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(NULL);
+ sub_80EED0C();
+ sub_80EF814();
+ ewram0_10.var76aa = (u8)(gPaletteFade.active << 24);
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80F2620();
+ ewram0_10.var304++;
+ break;
+ case 5:
+ ewram0_10.varD162 = 0x2;
+ sub_80F4BD0();
+ ewram0_10.var304++;
+ break;
+ case 6:
+ sub_80EFF34();
+ ewram0_10.var304++;
+ case 7:
+ if (sub_80EFF68()) return;
+ ewram0_10.var304++;
+ break;
+ case 8:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 9:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 10:
+ sub_80F33A8();
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD4C);
+ ewram0_10.var304++;
+ break;
+ case 11:
+ sub_80EED2C(0x2);
+ ewram0_10.var304++;
+ break;
+ case 12:
+ if (gPaletteFade.active) return;
+ ewram0_10.var304++;
+ break;
+ case 13:
+ sub_80F2C80(0x1);
+ ewram0_10.var304++;
+ case 14:
+ if (sub_80F2CBC(0x1)) return;
+ ewram0_10.var304++;
+ break;
+ case 15:
+ sub_80F2C80(0x6);
+ ewram0_10.var304++;
+ case 16:
+ if (sub_80F2CBC(0x6)) return;
+ sub_80EBDBC(&sub_80ED858);
+ break;
+ }
+}
+
+#if 0
+void sub_80F4F78();
+void sub_80F0174(u32);
+bool8 sub_80F4FB4();
+void sub_80F3668();
+bool8 sub_80F7500();
+void sub_80F3698();
+bool8 sub_80F5038();
+void sub_80F2F48();
+void sub_80F3CE8();
+void sub_80F3614();
+void sub_80F357C();
+void sub_80F4FDC();
+
+void sub_80ED858() {
+ u8 var1;
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F4F78();
+ sub_80F5B38();
+ ewram0_10.var304 = 0x1;
+ break;
+ case 1:
+ if (sub_80F5B50()) return;
+ ewram0_10.var304 = 0x2;
+ break;
+ case 2:
+ sub_80F0174(0x1);
+ ewram0_10.var304 = 0x3;
+ break;
+ case 3:
+ if (sub_80F4FB4()) return;
+ sub_80F3C94();
+ sub_80F3D00();
+ ewram0_10.var304 = 0x4;
+ break;
+ case 4:
+ if ( (gMain.heldKeys & 0x40) && (ewram0_10.var87CB) && (!(ewram0_10.var76aa) || (ewram0_10.var87DC)) ) {
+ PlaySE(0x5);
+ sub_80F5060(0x1);
+ move_anim_execute();
+ ewram0_10.var304 = 0x5;
+ }
+ else if ( (gMain.heldKeys & 0x80) && (ewram0_10.var87CB) && (!(ewram0_10.var76aa) || (ewram0_10.var76aa >= ewram0_10.var87DC)) ) {
+ PlaySE(0x5);
+ sub_80F5060(0);
+ move_anim_execute();
+ ewram0_10.var304 = 0x5;
+ }
+ if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80F4FDC();
+ move_anim_execute();
+ ewram0_10.var304 = 0x9;
+ }
+ else if (gMain.newKeys & A_BUTTON) {
+ if (ewram0_10.var76aa) {
+ if (ewram0_10.var6dac) {
+ PlaySE(0x5);
+ ewram0_10.var304 = 0x7;
+ }
+ }
+ else if ((ewram0_10.var87DC == ewram0_10.var87DA - 1)) {
+ PlaySE(0x5);
+ ewram0_10.var304 = 0x9;
+ }
+ }
+
+/*
+ if (gMain.heldKeys & 0x40) {
+ if (ewram0_10.var87CB) {
+ if (ewram0_10.var76aa) {
+ if (!ewram0_10.var87DC) goto label1;
+ }
+ PlaySE(0x5);
+ sub_80F5060(0x1);
+ move_anim_execute();
+ ewram0_10.var304 = 0x5;
+
+ }
+ else goto label1;
+ }
+ else goto label1;
+ break;
+label1:
+ if (gMain.heldKeys & 0x80) {
+ if (ewram0_10.var87CB) {
+ if (ewram0_10.var76aa) {
+ if (!(ewram0_10.var76aa < ewram0_10.var87DC)) goto label2;
+ }
+ PlaySE(0x5);
+ sub_80F5060(0x1);
+ move_anim_execute();
+ ewram0_10.var304 = 0x5;
+ }
+ else goto label2;
+ }
+ else goto label2;
+ break;
+label2:
+ if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80F4FDC();
+ move_anim_execute();
+ ewram0_10.var304 = 0x9;
+ }
+ else if (gMain.newKeys & A_BUTTON) {
+ if (!ewram0_10.var76aa) {
+ if ((ewram0_10.var87DC == ewram0_10.var87DA - 1)) {
+ PlaySE(0x5);
+ ewram0_10.var304 = 0x9;
+ }
+ }
+ else {
+ PlaySE(0x5);
+ ewram0_10.var304 = 0x9;
+ }
+ }
+*/
+ break;
+
+ case 5:
+ if (gpu_sync_bg_show()) return;
+ sub_80F3D00();
+ ewram0_10.var304 = 0x6;
+ break;
+ case 6:
+ if (sub_8055870()) return;
+ ewram0_10.var304 = 0x4;
+ break;
+ case 7:
+ sub_80EEFBC(0x3);
+ sub_80F3668();
+ ewram0_10.var304 = 0x8;
+ break;
+ case 8:
+ if (sub_80F7500()) return;
+ sub_80EEFBC(0x2);
+ sub_80F3698();
+ ewram0_10.var304 = 0x4;
+ break;
+ case 9:
+ if (!(var1 = sub_80F5038())) {
+ sub_80F0174(0);
+ sub_80F2F48();
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 0x10, var1);
+ ewram0_10.var304 = 0xB;
+ }
+ break;
+ case 0xA:
+ if (gPaletteFade.active) return;
+ sub_80F3CE8();
+ sub_80F5BDC();
+ if (!ewram0_10.var76aa) {
+ sub_80F357C();
+ sub_80F2D6C(0x1);
+ sub_80F2D6C(0x6);
+ sub_80EBDBC(&sub_80ECA10);
+ }
+ else {
+ sub_80F3614();
+ sub_80EBDBC(&sub_80ED3D0);
+ }
+ break;
+ }
+
+}
+#else
+__attribute__((naked))
+void sub_80ED858() {
+ asm_unified("push {r4,r5,lr}\n\
+ sub sp, 0x4\n\
+ ldr r1, _080ED878 @ =gSharedMem\n\
+ movs r2, 0xC1\n\
+ lsls r2, 2\n\
+ adds r0, r1, r2\n\
+ ldrh r0, [r0]\n\
+ adds r5, r1, 0\n\
+ cmp r0, 0xB\n\
+ bls _080ED86E\n\
+ b _080EDB7A\n\
+_080ED86E:\n\
+ lsls r0, 2\n\
+ ldr r1, _080ED87C @ =_080ED880\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080ED878: .4byte gSharedMem\n\
+_080ED87C: .4byte _080ED880\n\
+ .align 2, 0\n\
+_080ED880:\n\
+ .4byte _080ED8B0\n\
+ .4byte _080ED8CC\n\
+ .4byte _080ED8EC\n\
+ .4byte _080ED904\n\
+ .4byte _080ED91A\n\
+ .4byte _080EDA68\n\
+ .4byte _080EDA8C\n\
+ .4byte _080EDAA4\n\
+ .4byte _080EDAC0\n\
+ .4byte _080EDAE8\n\
+ .4byte _080EDB7A\n\
+ .4byte _080EDB28\n\
+_080ED8B0:\n\
+ bl sub_80F4F78\n\
+ bl sub_80F5B38\n\
+ ldr r0, _080ED8C8 @ =gSharedMem\n\
+ movs r4, 0xC1\n\
+ lsls r4, 2\n\
+ adds r0, r4\n\
+ movs r1, 0x1\n\
+ strh r1, [r0]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080ED8C8: .4byte gSharedMem\n\
+_080ED8CC:\n\
+ bl sub_80F5B50\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080ED8D8\n\
+ b _080EDB7A\n\
+_080ED8D8:\n\
+ ldr r0, _080ED8E8 @ =gSharedMem\n\
+ movs r1, 0xC1\n\
+ lsls r1, 2\n\
+ adds r0, r1\n\
+ movs r1, 0x2\n\
+ strh r1, [r0]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080ED8E8: .4byte gSharedMem\n\
+_080ED8EC:\n\
+ movs r0, 0x1\n\
+ bl sub_80F0174\n\
+ ldr r0, _080ED900 @ =gSharedMem\n\
+ movs r2, 0xC1\n\
+ lsls r2, 2\n\
+ adds r0, r2\n\
+ movs r1, 0x3\n\
+ strh r1, [r0]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080ED900: .4byte gSharedMem\n\
+_080ED904:\n\
+ bl sub_80F4FB4\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080ED910\n\
+ b _080EDB7A\n\
+_080ED910:\n\
+ bl sub_80F3C94\n\
+ bl sub_80F3D00\n\
+ b _080EDAD4\n\
+_080ED91A:\n\
+ ldr r2, _080ED960 @ =gMain\n\
+ ldrh r1, [r2, 0x2C]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ adds r3, r2, 0\n\
+ cmp r0, 0\n\
+ beq _080ED970\n\
+ ldr r1, _080ED964 @ =0x000087cb\n\
+ adds r0, r5, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080ED970\n\
+ ldr r2, _080ED968 @ =0x000076aa\n\
+ adds r0, r5, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080ED948\n\
+ ldr r4, _080ED96C @ =0x000087dc\n\
+ adds r0, r5, r4\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ cmp r0, 0\n\
+ beq _080ED970\n\
+_080ED948:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ bl sub_80F5060\n\
+ bl move_anim_execute\n\
+ movs r2, 0xC1\n\
+ lsls r2, 2\n\
+ adds r1, r5, r2\n\
+ b _080ED9B8\n\
+ .align 2, 0\n\
+_080ED960: .4byte gMain\n\
+_080ED964: .4byte 0x000087cb\n\
+_080ED968: .4byte 0x000076aa\n\
+_080ED96C: .4byte 0x000087dc\n\
+_080ED970:\n\
+ ldrh r1, [r3, 0x2C]\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080ED9CC\n\
+ ldr r4, _080ED9C0 @ =0x000087cb\n\
+ adds r0, r5, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080ED9CC\n\
+ ldr r1, _080ED9C4 @ =0x000076aa\n\
+ adds r0, r5, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080ED9A2\n\
+ ldr r2, _080ED9C8 @ =0x000087dc\n\
+ adds r0, r5, r2\n\
+ subs r4, 0x57\n\
+ adds r1, r5, r4\n\
+ movs r4, 0\n\
+ ldrsh r2, [r0, r4]\n\
+ movs r4, 0\n\
+ ldrsh r0, [r1, r4]\n\
+ cmp r2, r0\n\
+ bge _080ED9CC\n\
+_080ED9A2:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0\n\
+ bl sub_80F5060\n\
+ bl move_anim_execute\n\
+ movs r0, 0xC1\n\
+ lsls r0, 2\n\
+ adds r1, r5, r0\n\
+_080ED9B8:\n\
+ movs r0, 0x5\n\
+ strh r0, [r1]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080ED9C0: .4byte 0x000087cb\n\
+_080ED9C4: .4byte 0x000076aa\n\
+_080ED9C8: .4byte 0x000087dc\n\
+_080ED9CC:\n\
+ ldrh r2, [r3, 0x2E]\n\
+ movs r0, 0x2\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _080ED9F8\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ bl sub_80F4FDC\n\
+ bl move_anim_execute\n\
+ ldr r0, _080ED9F4 @ =gSharedMem\n\
+ movs r1, 0xC1\n\
+ lsls r1, 2\n\
+ adds r0, r1\n\
+ movs r1, 0x9\n\
+ strh r1, [r0]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080ED9F4: .4byte gSharedMem\n\
+_080ED9F8:\n\
+ movs r0, 0x1\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _080EDA02\n\
+ b _080EDB7A\n\
+_080EDA02:\n\
+ adds r4, r5, 0\n\
+ ldr r2, _080EDA38 @ =0x000076aa\n\
+ adds r0, r4, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080EDA44\n\
+ ldr r1, _080EDA3C @ =0x000087dc\n\
+ adds r0, r4, r1\n\
+ movs r2, 0\n\
+ ldrsh r1, [r0, r2]\n\
+ ldr r2, _080EDA40 @ =0x000087da\n\
+ adds r0, r4, r2\n\
+ movs r2, 0\n\
+ ldrsh r0, [r0, r2]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ beq _080EDA26\n\
+ b _080EDB7A\n\
+_080EDA26:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0xC1\n\
+ lsls r0, 2\n\
+ adds r1, r4, r0\n\
+ movs r0, 0x9\n\
+ strh r0, [r1]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080EDA38: .4byte 0x000076aa\n\
+_080EDA3C: .4byte 0x000087dc\n\
+_080EDA40: .4byte 0x000087da\n\
+_080EDA44:\n\
+ ldr r1, _080EDA64 @ =0x00006dac\n\
+ adds r0, r5, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _080EDA50\n\
+ b _080EDB7A\n\
+_080EDA50:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r2, 0xC1\n\
+ lsls r2, 2\n\
+ adds r1, r5, r2\n\
+ movs r0, 0x7\n\
+ strh r0, [r1]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080EDA64: .4byte 0x00006dac\n\
+_080EDA68:\n\
+ bl gpu_sync_bg_show\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080EDA74\n\
+ b _080EDB7A\n\
+_080EDA74:\n\
+ bl sub_80F3D00\n\
+ ldr r0, _080EDA88 @ =gSharedMem\n\
+ movs r4, 0xC1\n\
+ lsls r4, 2\n\
+ adds r0, r4\n\
+ movs r1, 0x6\n\
+ strh r1, [r0]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080EDA88: .4byte gSharedMem\n\
+_080EDA8C:\n\
+ bl sub_8055870\n\
+ cmp r0, 0\n\
+ bne _080EDB7A\n\
+ ldr r0, _080EDAA0 @ =gSharedMem\n\
+ movs r1, 0xC1\n\
+ lsls r1, 2\n\
+ adds r0, r1\n\
+ b _080EDADC\n\
+ .align 2, 0\n\
+_080EDAA0: .4byte gSharedMem\n\
+_080EDAA4:\n\
+ movs r0, 0x3\n\
+ bl sub_80EEFBC\n\
+ bl sub_80F3668\n\
+ ldr r0, _080EDABC @ =gSharedMem\n\
+ movs r2, 0xC1\n\
+ lsls r2, 2\n\
+ adds r0, r2\n\
+ movs r1, 0x8\n\
+ strh r1, [r0]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080EDABC: .4byte gSharedMem\n\
+_080EDAC0:\n\
+ bl sub_80F7500\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080EDB7A\n\
+ movs r0, 0x2\n\
+ bl sub_80EEFBC\n\
+ bl sub_80F3698\n\
+_080EDAD4:\n\
+ ldr r0, _080EDAE4 @ =gSharedMem\n\
+ movs r4, 0xC1\n\
+ lsls r4, 2\n\
+ adds r0, r4\n\
+_080EDADC:\n\
+ movs r1, 0x4\n\
+ strh r1, [r0]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080EDAE4: .4byte gSharedMem\n\
+_080EDAE8:\n\
+ bl sub_80F5038\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0\n\
+ bne _080EDB7A\n\
+ movs r0, 0\n\
+ bl sub_80F0174\n\
+ bl sub_80F2F48\n\
+ ldr r5, _080EDB24 @ =gSharedMem\n\
+ movs r1, 0xC2\n\
+ lsls r1, 2\n\
+ adds r0, r5, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x1\n\
+ negs r1, r1\n\
+ str r4, [sp]\n\
+ movs r2, 0\n\
+ movs r3, 0x10\n\
+ bl BeginNormalPaletteFade\n\
+ movs r2, 0xC1\n\
+ lsls r2, 2\n\
+ adds r1, r5, r2\n\
+ movs r0, 0xB\n\
+ strh r0, [r1]\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080EDB24: .4byte gSharedMem\n\
+_080EDB28:\n\
+ ldr r0, _080EDB60 @ =gPaletteFade\n\
+ ldrb r1, [r0, 0x7]\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080EDB7A\n\
+ bl sub_80F3CE8\n\
+ bl sub_80F5BDC\n\
+ ldr r0, _080EDB64 @ =gSharedMem\n\
+ ldr r4, _080EDB68 @ =0x000076aa\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080EDB70\n\
+ bl sub_80F357C\n\
+ movs r0, 0x1\n\
+ bl sub_80F2D6C\n\
+ movs r0, 0x6\n\
+ bl sub_80F2D6C\n\
+ ldr r0, _080EDB6C @ =sub_80ECA10\n\
+ bl sub_80EBDBC\n\
+ b _080EDB7A\n\
+ .align 2, 0\n\
+_080EDB60: .4byte gPaletteFade\n\
+_080EDB64: .4byte gSharedMem\n\
+_080EDB68: .4byte 0x000076aa\n\
+_080EDB6C: .4byte sub_80ECA10\n\
+_080EDB70:\n\
+ bl sub_80F3614\n\
+ ldr r0, _080EDB84 @ =sub_80ED3D0\n\
+ bl sub_80EBDBC\n\
+_080EDB7A:\n\
+ add sp, 0x4\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080EDB84: .4byte sub_80ED3D0\n");
+}
+#endif
+
+void sub_80EDB88() {
+ u8 var1;
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F1E84();
+ sub_80F2D04(0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80F1F10()) return;
+ sub_80EEFBC(0x4);
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (!(var1 = sub_80EEF34())) {
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 0x10, var1);
+ ewram0_10.var304++;
+ }
+ break;
+ case 3:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(0);
+ sub_80EED0C();
+ sub_80EF814();
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80F2620();
+ ewram0_10.var304++;
+ break;
+ case 5:
+ sub_80F638C();
+ ewram0_10.var304++;
+ case 6:
+ if (!sub_80F63D0()) {
+ ewram0_10.var304 += 0x2;
+ break;
+ }
+ ewram0_10.var304++;
+ break;
+ case 7:
+ if (sub_8055870()) return;
+ ewram0_10.var304--;
+ break;
+ case 8:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 9:
+ sub_80F0264(0x1);
+ ewram0_10.var304++;
+ case 10:
+ if (sub_80F02A0()) return;
+ ewram0_10.var304++;
+ break;
+ case 11:
+ sub_80F2C80(0x2);
+ ewram0_10.var304++;
+ case 12:
+ if (sub_80F2CBC(0x2)) return;
+ ewram0_10.var304++;
+ break;
+ case 13:
+ sub_80F3008(0x1);
+ ewram0_10.var304++;
+ break;
+ case 14:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 15:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 16:
+ sub_80EED2C(0x4);
+ ewram0_10.var304++;
+ break;
+ case 17:
+ if (gPaletteFade.active) return;
+ sub_80EBDBC(&sub_80EDDBC);
+ break;
+ }
+}
+
+void sub_80EDDBC() {
+ switch (ewram0_10.var304) {
+ case 0:
+ switch (sub_80F5DD4()) {
+ case 1:
+ PlaySE(0x5);
+ ShowMapNamePopUpWindow();
+ break;
+ case 2:
+ PlaySE(0x5);
+ ewram0_10.var304++;
+ break;
+ default:
+ if (gMain.newKeys & A_BUTTON) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EDEE4);
+ }
+ else if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EDE70);
+ }
+ break;
+ }
+ break;
+ case 1:
+ if (sub_80F0718()) return;
+ ShowMapNamePopUpWindow();
+ sub_80F3264();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (sub_8055870()) return;
+ ewram0_10.var304 = 0;
+ break;
+
+ }
+}
+
+void sub_80EDE70() {
+ switch (ewram0_10.var304) {
+ case 0:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 0x10, 0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (gPaletteFade.active) return;
+ sub_80F3130();
+ sub_80F2D6C(0x2);
+ ewram0_10.var304++;
+ break;
+ case 2:
+ sub_80EBDBC(&sub_80EC00C);
+ break;
+ }
+
+}
+
+void sub_80EDEE4() {
+ switch (ewram0_10.var304) {
+ case 0:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 0x10, 0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(NULL);
+ sub_80EED0C();
+ sub_80F3130();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ sub_80F66E0();
+ sub_80EEE08();
+ ewram0_10.var304++;
+ break;
+ case 3:
+ if (sub_80F1080()) return;
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80EEFBC(0x5);
+ sub_80F38B8();
+ ewram0_10.var304++;
+ case 5:
+ if (sub_80F38EC()) return;
+ ewram0_10.var304++;
+ break;
+ case 6:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 7:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 8:
+ sub_80EED2C(0x3);
+ ewram0_10.var304++;
+ break;
+ case 9:
+ if (gPaletteFade.active) return;
+ ewram0_10.var304++;
+ break;
+ case 10:
+ if (sub_80F170C()) return;
+ sub_80EBDBC(&sub_80EE06C);
+ break;
+ }
+}
+
+void sub_80EE06C() {
+ u32 var1;
+ u16 var2;
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F15A8();
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (gMain.newAndRepeatedKeys & 0x40) {
+ if (ewram0_10.var87DC) {
+ PlaySE(0x5);
+ sub_80F6A4C(-1);
+ ewram0_10.var304++;
+ }
+ else goto label1;
+ }
+ else goto label1;
+ break;
+label1:
+ if (gMain.newAndRepeatedKeys & 0x80) {
+ if (ewram0_10.var87DC < ewram0_10.var8774) {
+ PlaySE(0x5);
+ sub_80F6A4C(1);
+ ewram0_10.var304++;
+ }
+ else goto label2;
+ }
+ else goto label2;
+ break;
+label2:
+ if (gMain.newKeys & A_BUTTON) {
+ PlaySE(0x5);
+ sub_80EEFBC(0xB);
+ ewram0_10.var304 = 0x4;
+ }
+ else if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EE294);
+ }
+ break;
+ case 2:
+ if (sub_80F6AF0()) return;
+ ewram0_10.var304++;
+ break;
+ case 3:
+ var1 = sub_8055870();
+ if (var1) return;
+ ewram0_10.var304 = var1;
+ break;
+ case 4:
+ sub_80F3B00();
+ ewram0_10.var304++;
+ break;
+ case 5:
+ if (sub_80F3B58()) return;
+ sub_80F1494();
+ ewram0_10.var304++;
+ sub_80EED9C();
+ break;
+ case 6:
+ switch (sub_80F68E8()) {
+ case 1:
+ PlaySE(0x5);
+ sub_80F3B94();
+ ewram0_10.var304 = 0x7;
+ break;
+ default:
+ case 0:
+ if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80F3B94();
+ ewram0_10.var304 = 0x8;
+ }
+ break;
+ }
+ break;
+ case 7:
+ if (sub_80F3BD4()) return;
+ ewram0_10.var304 = 0x4;
+ break;
+ case 8:
+ var2 = sub_80F3BD4();
+ if (var2) return;
+ sub_80EEFBC(0x5);
+ ewram0_10.var304 = var2;
+ break;
+ }
+}
+
+void sub_80EE294() {
+ switch (ewram0_10.var304) {
+ case 0:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 0x10, 0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(NULL);
+ sub_80EED0C();
+ sub_80F3C2C();
+ sub_80EEE08();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ sub_80F6134();
+ sub_80F0264(0x1);
+ ewram0_10.var304++;
+ case 3:
+ if (sub_80F02A0()) return;
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80EEFBC(0x4);
+ sub_80F3008(0x1);
+ SetVBlankCallback(&sub_80EBD18);
+ ewram0_10.var304++;
+ break;
+ case 5:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 6:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ ewram0_10.var304++;
+ break;
+ case 7:
+ sub_80EED2C(0x4);
+ ewram0_10.var304++;
+ break;
+ case 8:
+ if (gPaletteFade.active) return;
+ sub_80EBDBC(&sub_80EDDBC);
+ break;
+ }
+}
+
+void sub_80EE3D8() {
+ u8 var1;
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F1E84();
+ sub_80F2D04(0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80F1F10()) return;
+ sub_80EEFBC(0x9);
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (!(var1 = sub_80EEF34())) {
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x0, 0x10, var1);
+ ewram0_10.var304++;
+ }
+ break;
+ case 3:
+ if (gPaletteFade.active) return;
+ SetVBlankCallback(NULL);
+ sub_80EED0C();
+ sub_80EF814();
+ sub_80EEE08();
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80F2620();
+ ewram0_10.var304++;
+ break;
+ case 5:
+ sub_80F0264(0x2);
+ ewram0_10.var304++;
+ case 6:
+ if (sub_80F02A0()) return;
+ ewram0_10.var304++;
+ break;
+ case 7:
+ sub_80F2C80(0x3);
+ ewram0_10.var304++;
+ case 8:
+ if (sub_80F2CBC(0x3)) return;
+ ewram0_10.var304++;
+ break;
+ case 9:
+ sub_80F3008(0x2);
+ ewram0_10.var304++;
+ break;
+ case 10:
+ if (sub_8055870()) return;
+ ewram0_10.var304++;
+ break;
+ case 11:
+ sub_80F6F10();
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0x10, 0, 0);
+ SetVBlankCallback(&sub_80EBD68);
+ ewram0_10.var304++;
+ break;
+ case 12:
+ sub_80EED2C(0x5);
+ ewram0_10.var304++;
+ break;
+ case 13:
+ if (gPaletteFade.active) return;
+ sub_80EBDBC(&sub_80EE58C);
+ break;
+ }
+}
+
+void sub_80EE58C() {
+ switch (ewram0_10.var304) {
+ case 0:
+ switch (sub_80F5DD4()) {
+ case 1:
+ PlaySE(0x5);
+ sub_80F0FFC(ewram0_10.var876E);
+ break;
+ case 2:
+ PlaySE(0x5);
+ ewram0_10.var304++;
+ break;
+ default:
+ if (gMain.newKeys & A_BUTTON) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EE658);
+ }
+ else if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80EBDBC(&sub_80EE8F4);
+ }
+ break;
+ }
+ break;
+ case 1:
+ if (sub_80F0718()) return;
+ sub_80F0FFC(ewram0_10.var876E);
+ sub_80F3264();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ if (sub_8055870()) return;
+ ewram0_10.var304 = 0;
+ break;
+ }
+}
+
+void sub_80EE658() {
+ switch (ewram0_10.var304) {
+ case 0:
+ sub_80F3294(0x1);
+ sub_80EEFBC(0xA);
+ sub_80F0B24();
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (sub_80F0B44()) return;
+ ewram0_10.var304++;
+ break;
+ case 2:
+ sub_80F0F64();
+ ewram0_10.var304++;
+ break;
+ case 3:
+ if (sub_80F0FEC()) return;
+ sub_80F6FB8(0x1);
+ ewram0_10.var304++;
+ break;
+ case 4:
+ sub_80F6DB8();
+ ewram0_10.var304++;
+ break;
+ case 5:
+ sub_80F700C((u8 *)(gSharedMem + 0x8788), *(u16 *)(gSharedMem + 0x8788 - 0x1A));
+ sub_80F42C4((u8 *)(gSharedMem + 0x8788));
+ ewram0_10.var304++;
+ break;
+ case 6:
+ sub_80F0CD8();
+ ewram0_10.var304++;
+ case 7:
+ if (sub_80F6E9C()) return;
+ if (sub_80F0D5C()) return;
+ ewram0_10.var304++;
+ break;
+ case 8:
+ if (gMain.heldKeys & 0x40) {
+ if (ewram0_10.var87DC) {
+ PlaySE(0x5);
+ sub_80F708C(-1);
+ ewram0_10.var304 = 0x10;
+ }
+ else goto label1;
+ }
+ else goto label1;
+ break;
+label1:
+ if (gMain.heldKeys & 0x80) {
+ if (ewram0_10.var87DC < ewram0_10.var8774) {
+ PlaySE(0x5);
+ sub_80F708C(1);
+ ewram0_10.var304 = 0x10;
+ }
+ else goto label2;
+ }
+ else goto label2;
+ break;
+label2:
+ if (gMain.newKeys & B_BUTTON) {
+ PlaySE(0x5);
+ sub_80F4394();
+ sub_80F0EC0();
+ ewram0_10.var304++;
+ }
+ break;
+ case 9:
+ if (sub_80F6ED4()) return;
+ if (sub_80F0EF4()) return;
+ sub_80F6FB8(0);
+ sub_80F2FB0();
+ ewram0_10.var304++;
+ break;
+ case 10:
+ sub_80F6134();
+ ewram0_10.var304++;
+ break;
+ case 11:
+ sub_80F0FA0();
+ ewram0_10.var304++;
+ break;
+ case 12:
+ if (sub_80F0FEC()) return;
+ ewram0_10.var304++;
+ break;
+ case 13:
+ sub_80F0C28();
+ ewram0_10.var304++;
+ break;
+ case 14:
+ if (sub_80F0C48()) return;
+ ewram0_10.var304++;
+ break;
+ case 15:
+ sub_80EEFBC(0x9);
+ sub_80F3294(0);
+ sub_80EBDBC(&sub_80EE58C);
+ sub_80EED9C();
+ break;
+ case 16:
+ if (sub_80F70FC()) return;
+ ewram0_10.var304++;
+ break;
+ case 17:
+ if (sub_8055870()) return;
+ ewram0_10.var304 = 0x8;
+ break;
+ }
+}
+
+void sub_80EE8F4() {
+ switch (ewram0_10.var304) {
+ case 0:
+ BeginNormalPaletteFade(ewram0_10.var308, -1, 0, 0x10, 0);
+ ewram0_10.var304++;
+ break;
+ case 1:
+ if (gPaletteFade.active) return;
+ sub_80F3130();
+ sub_80F2D6C(0x2);
+ sub_80F6FFC();
+ ewram0_10.var304++;
+ break;
+ case 2:
+ sub_80EBDBC(&sub_80EC00C);
+ break;
+ }
+}
+
+void sub_80EE96C() {
+ u16 var1 = ewram0_10.var304;
+ if (!var1) {
+ PlaySE(0x6F);
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, var1);
+ ewram0_10.var304++;
+ }
+ else {
+ if (gPaletteFade.active) return;
+ sub_80F5BDC();
+ sub_805469C();
+ }
+}
+
+void sub_80EE9C0(u8 param1, u8 param2, u8 param3) {
+ sub_80F1E84();
+ ewram0_10.var6e14 = param1;
+ ewram0_10.var6e15 = param2;
+ ewram0_10.var6e16 = 0;
+ ewram0_10.var6e17 = param3;
+}
+
+#if 0
+bool8 sub_80EEA0C() {
+ switch (ewram0_10.var6e16) {
+ case 0:
+ if (sub_80F1F10()) return 1;
+ if (ewram0_10.var6e17 != 0xC) {
+ ewram0_10.var6e16 = 0x1;
+ return 1;
+ }
+ else {
+ ewram0_10.var6e16 = 0x3;
+ return 1;
+ }
+ case 1:
+ sub_80F2C80(ewram0_10.var6e17);
+ ewram0_10.var6e16++;
+ case 2:
+ if (sub_80F2CBC(ewram0_10.var6e17)) return 1;
+ ewram0_10.var6e16++;
+ case 3:
+
+ }
+}
+#else
+__attribute__((naked))
+bool8 sub_80EEA0C() {
+ asm_unified(
+ "push {r4,lr}\n\
+ ldr r1, _080EEA28 @ =gSharedMem\n\
+ ldr r2, _080EEA2C @ =0x00006e16\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0x8\n\
+ bls _080EEA1E\n\
+ b _080EEBFA\n\
+_080EEA1E:\n\
+ lsls r0, 2\n\
+ ldr r1, _080EEA30 @ =_080EEA34\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080EEA28: .4byte gSharedMem\n\
+_080EEA2C: .4byte 0x00006e16\n\
+_080EEA30: .4byte _080EEA34\n\
+ .align 2, 0\n\
+_080EEA34:\n\
+ .4byte _080EEA58\n\
+ .4byte _080EEA98\n\
+ .4byte _080EEAAE\n\
+ .4byte _080EEAD4\n\
+ .4byte _080EEB3E\n\
+ .4byte _080EEB68\n\
+ .4byte _080EEB88\n\
+ .4byte _080EEBAC\n\
+ .4byte _080EEBE4\n\
+_080EEA58:\n\
+ bl sub_80F1F10\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080EEA64\n\
+ b _080EEC08\n\
+_080EEA64:\n\
+ ldr r1, _080EEA7C @ =gSharedMem\n\
+ ldr r4, _080EEA80 @ =0x00006e17\n\
+ adds r0, r1, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xC\n\
+ beq _080EEA88\n\
+ ldr r0, _080EEA84 @ =0x00006e16\n\
+ adds r1, r0\n\
+ movs r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _080EEC08\n\
+ .align 2, 0\n\
+_080EEA7C: .4byte gSharedMem\n\
+_080EEA80: .4byte 0x00006e17\n\
+_080EEA84: .4byte 0x00006e16\n\
+_080EEA88:\n\
+ ldr r2, _080EEA94 @ =0x00006e16\n\
+ adds r1, r2\n\
+ movs r0, 0x3\n\
+ strb r0, [r1]\n\
+ b _080EEC08\n\
+ .align 2, 0\n\
+_080EEA94: .4byte 0x00006e16\n\
+_080EEA98:\n\
+ ldr r4, _080EEAC8 @ =gSharedMem\n\
+ ldr r1, _080EEACC @ =0x00006e17\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_80F2C80\n\
+ ldr r2, _080EEAD0 @ =0x00006e16\n\
+ adds r4, r2\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+_080EEAAE:\n\
+ ldr r4, _080EEAC8 @ =gSharedMem\n\
+ ldr r1, _080EEACC @ =0x00006e17\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_80F2CBC\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080EEAC2\n\
+ b _080EEC08\n\
+_080EEAC2:\n\
+ ldr r2, _080EEAD0 @ =0x00006e16\n\
+ adds r1, r4, r2\n\
+ b _080EEB76\n\
+ .align 2, 0\n\
+_080EEAC8: .4byte gSharedMem\n\
+_080EEACC: .4byte 0x00006e17\n\
+_080EEAD0: .4byte 0x00006e16\n\
+_080EEAD4:\n\
+ adds r2, r3, 0\n\
+ ldr r4, _080EEAF8 @ =0x00006e15\n\
+ adds r0, r2, r4\n\
+ ldrb r1, [r0]\n\
+ subs r4, 0x68\n\
+ adds r0, r2, r4\n\
+ strb r1, [r0]\n\
+ ldr r1, _080EEAFC @ =0x00006e14\n\
+ adds r0, r2, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ beq _080EEB14\n\
+ cmp r0, 0x1\n\
+ bgt _080EEB00\n\
+ cmp r0, 0\n\
+ beq _080EEB06\n\
+ b _080EEB28\n\
+ .align 2, 0\n\
+_080EEAF8: .4byte 0x00006e15\n\
+_080EEAFC: .4byte 0x00006e14\n\
+_080EEB00:\n\
+ cmp r0, 0x2\n\
+ beq _080EEB20\n\
+ b _080EEB28\n\
+_080EEB06:\n\
+ ldr r4, _080EEB10 @ =0x00006dae\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x5\n\
+ b _080EEB26\n\
+ .align 2, 0\n\
+_080EEB10: .4byte 0x00006dae\n\
+_080EEB14:\n\
+ ldr r0, _080EEB1C @ =0x00006dae\n\
+ adds r1, r2, r0\n\
+ movs r0, 0x3\n\
+ b _080EEB26\n\
+ .align 2, 0\n\
+_080EEB1C: .4byte 0x00006dae\n\
+_080EEB20:\n\
+ ldr r2, _080EEB58 @ =0x00006dae\n\
+ adds r1, r3, r2\n\
+ movs r0, 0x6\n\
+_080EEB26:\n\
+ strb r0, [r1]\n\
+_080EEB28:\n\
+ ldr r4, _080EEB5C @ =gSharedMem\n\
+ ldr r1, _080EEB60 @ =0x00006e14\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_80F1B8C\n\
+ ldr r2, _080EEB64 @ =0x00006e16\n\
+ adds r4, r2\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+_080EEB3E:\n\
+ ldr r4, _080EEB5C @ =gSharedMem\n\
+ ldr r1, _080EEB60 @ =0x00006e14\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_80F1BC8\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080EEC08\n\
+ ldr r2, _080EEB64 @ =0x00006e16\n\
+ adds r1, r4, r2\n\
+ b _080EEB76\n\
+ .align 2, 0\n\
+_080EEB58: .4byte 0x00006dae\n\
+_080EEB5C: .4byte gSharedMem\n\
+_080EEB60: .4byte 0x00006e14\n\
+_080EEB64: .4byte 0x00006e16\n\
+_080EEB68:\n\
+ bl sub_8055870\n\
+ cmp r0, 0\n\
+ bne _080EEC08\n\
+ ldr r1, _080EEB80 @ =gSharedMem\n\
+ ldr r4, _080EEB84 @ =0x00006e16\n\
+ adds r1, r4\n\
+_080EEB76:\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _080EEC08\n\
+ .align 2, 0\n\
+_080EEB80: .4byte gSharedMem\n\
+_080EEB84: .4byte 0x00006e16\n\
+_080EEB88:\n\
+ bl sub_80F1DF0\n\
+ ldr r4, _080EEBA0 @ =gSharedMem\n\
+ ldr r1, _080EEBA4 @ =0x00006e14\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ bl sub_80EF490\n\
+ ldr r2, _080EEBA8 @ =0x00006e16\n\
+ adds r4, r2\n\
+ b _080EEBCC\n\
+ .align 2, 0\n\
+_080EEBA0: .4byte gSharedMem\n\
+_080EEBA4: .4byte 0x00006e14\n\
+_080EEBA8: .4byte 0x00006e16\n\
+_080EEBAC:\n\
+ bl sub_80F1E50\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080EEC08\n\
+ ldr r4, _080EEBD4 @ =gSharedMem\n\
+ ldr r1, _080EEBD8 @ =0x00006e14\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ ldr r2, _080EEBDC @ =0x00006dad\n\
+ adds r1, r4, r2\n\
+ ldrb r1, [r1]\n\
+ bl sub_80EF428\n\
+ ldr r0, _080EEBE0 @ =0x00006e16\n\
+ adds r4, r0\n\
+_080EEBCC:\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ b _080EEC08\n\
+ .align 2, 0\n\
+_080EEBD4: .4byte gSharedMem\n\
+_080EEBD8: .4byte 0x00006e14\n\
+_080EEBDC: .4byte 0x00006dad\n\
+_080EEBE0: .4byte 0x00006e16\n\
+_080EEBE4:\n\
+ bl sub_80EF4F8\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080EEC08\n\
+ ldr r1, _080EEC00 @ =gSharedMem\n\
+ ldr r2, _080EEC04 @ =0x00006e16\n\
+ adds r1, r2\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+_080EEBFA:\n\
+ movs r0, 0\n\
+ b _080EEC0A\n\
+ .align 2, 0\n\
+_080EEC00: .4byte gSharedMem\n\
+_080EEC04: .4byte 0x00006e16\n\
+_080EEC08:\n\
+ movs r0, 0x1\n\
+_080EEC0A:\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1\n"
+
+ );
+}
+#endif
+
+// var6dad and var6dae must be s8 in this func
+bool8 sub_80EEC10() {
+ if (gMain.newKeys & 0x40) {
+ do {
+ if (--ewram0_11.var6dad < 0) {
+ ewram0_11.var6dad = ewram0_11.var6dae - 1;
+ }
+
+ } while (!ewram0_10.var6db2[ewram0_11.var6dad]);
+ return 1;
+ }
+ if (gMain.newKeys & 0x80) {
+ do {
+ if (++ewram0_11.var6dad >= ewram0_11.var6dae) {
+ ewram0_11.var6dad = 0;
+ }
+ } while (!ewram0_10.var6db2[ewram0_11.var6dad]);
+ return 1;
+ }
+ return 0;
+}
+
+bool8 sub_80EEC90() {
+ if (gMain.newKeys & 0x40) {
+ if (--ewram0_11.var6dad < 0) {
+ ewram0_11.var6dad = ewram0_11.var6dae - 1;
+ }
+ return 1;
+ }
+ if (gMain.newKeys & 0x80) {
+ if (++ewram0_11.var6dad >= ewram0_11.var6dae) {
+ ewram0_11.var6dad = 0;
+ }
+ return 1;
+ }
+ return 0;
+}
+
+void sub_80EED0C() {
+ REG_DISPCNT = 512;
+}
+
+void sub_80EED1C() {
+ REG_DISPCNT = 0x92 << 5;
+}
+
+void sub_80EED2C(u8 param1) {
+ switch (param1) {
+ case 0:
+ REG_DISPCNT = 0xFA << 5;
+ break;
+ case 1:
+ REG_DISPCNT = 0x1741;
+ break;
+ case 3:
+ case 4:
+ REG_DISPCNT = 0xFA << 5;
+ break;
+ case 2:
+ REG_DISPCNT = 0x7b40;
+ break;
+ case 5:
+ REG_DISPCNT = 0xFD << 6;
+ break;
+ }
+}
+
+void sub_80EED9C(void) {
+ gUnknown_03000744 = ewram0_10.var300;
+ ewram0_10.var300 = &sub_80EEDC4;
+ ewram0_10.var300();
+}
+
+void sub_80EEDC4(void) {
+ if (sub_8055870() != 0x1) {
+ ewram0_10.var300 = gUnknown_03000744;
+ }
+}
+
+void sub_80EEDE8(void) {
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+}
+
+void sub_80EEE08(void) {
+ gUnknown_083DFEC4->unkD160 = 0;
+}
+
+void sub_80EEE20(void) {
+ gUnknown_083DFEC4->unkD160 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC) {
+ while (sub_80EEE54());
+ }
+}
+
+bool8 sub_80EEE54(void) {
+ switch (gUnknown_083DFEC4->unkD160) {
+ case 0:
+ LZ77UnCompVram(gPokenavHoennMapMisc_Gfx, (void *)VRAM + 0xC000);
+ break;
+ case 1:
+ LZ77UnCompVram(gUnknown_08E99FB0, (void *)VRAM + 0xD800);
+ break;
+ case 2:
+ LoadPalette(gPokenavHoennMap1_Pal, 0x10, 0x20);
+ break;
+ case 3:
+ sub_80EF58C(0);
+ sub_80EF58C(1);
+ sub_80EF58C(2);
+ break;
+ case 4:
+ gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG1CNT = 0x1B0C;
+ gUnknown_083DFEC4->unkD160++;
+ default:
+ return 0;
+ }
+ gUnknown_083DFEC4->unkD160++;
+ return 1;
+}
+
+bool8 sub_80EEF34(void) {
+ bool8 retVal = TRUE;
+
+ if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 32)
+ {
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk030C.unk030C.unk0 += 2;
+ if (gUnknown_083DFEC4->unk030C.unk030C.unk0 > 31)
+ {
+ gUnknown_083DFEC4->unk030C.unk030C.unk0 = 32;
+ retVal = FALSE;
+ }
+
+ REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
+ return retVal;
+}
+
+bool8 sub_80EEF78(void)
+{
+ bool8 retVal = TRUE;
+
+ if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 0)
+ {
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk030C.unk030C.unk0 -= 2;
+ if (gUnknown_083DFEC4->unk030C.unk030C.unk0 <= 0)
+ {
+ gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
+ retVal = FALSE;
+ }
+
+ REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
+ return retVal;
+}
+
+void sub_80EEFBC(u8 a)
+{
+ u8 var1;
+
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 0, 17, 2);
+
+ switch (a)
+ {
+ case 0:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 17, 0, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 11:
+ sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 2:
+ var1 = gUnknown_083DFEC4->unk6DAC;
+ if (!var1)
+ {
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 2, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, var1, 6, 7, 2);
+ }
+ else
+ {
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ }
+ break;
+ case 3:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 4, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 4:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 2, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 7:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 4, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 8:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 4, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 5:
+ case 9:
+ sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 2, 10, 2);
+ sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ case 10:
+ sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2);
+ break;
+ }
+}
+
+void sub_80EF248(u8 a)
+{
+ gUnknown_083DFEC4->unkD160 = 0;
+
+ if (!gUnknown_083DFEC4->unk6DAC)
+ {
+ while (sub_80EF284(a));
+ }
+}
+
+bool8 sub_80EF284(u8 a)
+{
+ switch (gUnknown_083DFEC4->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E7224);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowConfig_81E7224);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ {
+ return TRUE;
+ }
+ break;
+ case 4:
+ DmaCopy16Defvars(3, gUnknown_083DFEEC, (void *)VRAM + 0x5000, 0xA0);
+ break;
+ case 5:
+ LZ77UnCompVram(gUnknown_083DFF8C, (void *)VRAM + 0xF800);
+ break;
+ case 6:
+ DmaCopy16Defvars(3, gUnknown_083E005C, (void *)VRAM + 0x8000, 0x20);
+ break;
+ case 7:
+ LZ77UnCompVram(gUnknown_083E007C, (void *)VRAM + 0xE000);
+ break;
+ case 8:
+ LZ77UnCompVram(gPokenavOutlineTilemap, (void *)VRAM + 0xE800);
+ break;
+ case 9:
+ LZ77UnCompVram(gPokenavOutlineTiles, (void *)VRAM + 0x8020);
+ break;
+ case 10:
+ sub_80EF54C(a);
+ LoadPalette(gUnknown_083DFECC, 0xF0, 0x20);
+ LoadPalette(gPokenavOutlinePalette, 0x40, 0x20);
+ sub_80EF7D4();
+ break;
+ case 11:
+ REG_BG0CNT = 0x1F01;
+ REG_BG2CNT = 0x1D0A;
+ REG_BG3CNT = 0x1C0B;
+ REG_BLDCNT = 0;
+
+ gUnknown_083DFEC4->unkD160++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unkD160++;
+ return TRUE;
+}
+
+void sub_80EF428(u8 a, u8 b)
+{
+ u8 *tileBuffer;
+ const u8 *pcText = 0;
+
+ switch (a)
+ {
+ case 0:
+ pcText = gUnknown_083E31B0[b];
+ break;
+ case 1:
+ pcText = gUnknown_083E31CC[b];
+ break;
+ case 2:
+ pcText = gUnknown_083E31D8[b];
+ break;
+ }
+
+ tileBuffer = gUnknown_083DFEC8;
+ sub_8072C74(&tileBuffer[0x800], pcText, 0xC0, 2);
+ MenuPrint(&tileBuffer[0x800], 3, 17);
+}
+
+void sub_80EF490(u8 a)
+{
+ u16 var1, var2;
+
+ if (a == 2)
+ {
+ a = 1;
+ }
+
+ gUnknown_083DFEC4->unkCE4E = a * 30;
+ var1 = gUnknown_083DFEC4->unkCE4C;
+ var2 = a * 30;
+ if (var1 < var2)
+ {
+ gUnknown_083DFEC4->unkCE50 = 2;
+ }
+ else if (var1 > var2)
+ {
+ gUnknown_083DFEC4->unkCE50 = -2;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unkCE50 = 0;
+ }
+}
+
+bool8 sub_80EF4F8(void)
+{
+ u16 *palettes;
+
+ if (gUnknown_083DFEC4->unkCE4C == gUnknown_083DFEC4->unkCE4E)
+ {
+ return FALSE;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unkCE4C = gUnknown_083DFEC4->unkCE50 + gUnknown_083DFEC4->unkCE4C;
+
+ palettes = gUnknown_083DFEC4->palettesCE52;
+ LoadPalette(&palettes[gUnknown_083DFEC4->unkCE4C], 0x31, 4);
+ return TRUE;
+ }
+
+}
+
+void sub_80EF54C(u8 a)
+{
+ if (a == 2)
+ {
+ a = 1;
+ }
+
+ gUnknown_083DFEC4->unkCE4C = a * 30;
+ LoadPalette(&gUnknown_083DFEC4->palettesCE52[gUnknown_083DFEC4->unkCE4C], 0x31, 4);
+}
+
+void sub_80EF58C(u8 a)
+{
+ u16 i;
+ u16 * palettes;
+ const u16 *var1;
+
+ switch (a)
+ {
+ case 0:
+ for (i = 0; i < 62; i++)
+ {
+ gUnknown_083DFEC4->palettesCE52[i] = 0;
+ }
+ break;
+ case 1:
+ palettes = gUnknown_083DFEC4->palettesCE52;
+ var1 = gUnknown_083E003C;
+ sub_80EF624(&var1[1], &var1[3], 16, 2, palettes);
+ break;
+ case 2:
+ palettes = gUnknown_083DFEC4->palettesCE8E;
+ var1 = gUnknown_083E003C;
+ sub_80EF624(&var1[3], &var1[7], 16, 2, palettes);
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes)
+{
+ u16 red1, green1, blue1;
+ u16 red2, green2, blue2;
+ s32 redDiv, greenDiv, blueDiv;
+ u16 *palettes2;
+ u16 i, j;
+
+ i = 0;
+ while (i < d)
+ {
+ red1 = (*a & 0x1F) << 8;
+ green1 = ((*a >> 5) & 0x1F) << 8;
+ blue1 = ((*a >> 10) & 0x1F) << 8;
+
+ red2 = (*b & 0x1F) << 8;
+ green2 = ((*b >> 5) & 0x1F) << 8;
+ blue2 = ((*b >> 10) & 0x1F) << 8;
+
+ redDiv = (red2 - red1) / c;
+ greenDiv = (green2 - green1) / c;
+ blueDiv = (blue2 - blue1) / c;
+
+ palettes2 = palettes;
+ for (j = 0; j < c - 1; j++)
+ {
+ *palettes2 = (((blue1 << 8) >> 16) << 10) | (((green1 << 8) >> 16) << 5) | ((red1 << 8) >> 16);
+ palettes2 += d;
+ red1 += redDiv;
+ green1 += greenDiv;
+ blue1 += blueDiv;
+ }
+
+ *palettes2 = (red2 >> 8) | (blue2 << 2) | (green2 >> 3);
+ palettes++;
+
+ a++;
+ b++;
+ i++;
+ }
+}
+#else
+__attribute__((naked))
+void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes)
+{
+ 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, 0x38\n\
+ str r0, [sp]\n\
+ str r1, [sp, 0x4]\n\
+ ldr r4, [sp, 0x58]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ str r2, [sp, 0x8]\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ str r3, [sp, 0xC]\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x10]\n\
+ lsls r0, r3, 16\n\
+ ldr r1, [sp, 0x10]\n\
+ cmp r1, r3\n\
+ bcs _080EF72E\n\
+ subs r2, 0x1\n\
+ str r2, [sp, 0x20]\n\
+ str r0, [sp, 0x2C]\n\
+_080EF654:\n\
+ ldr r2, [sp]\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x1F\n\
+ ands r0, r1\n\
+ lsls r7, r0, 8\n\
+ lsls r1, 16\n\
+ lsrs r0, r1, 21\n\
+ movs r2, 0x1F\n\
+ ands r0, r2\n\
+ lsls r6, r0, 8\n\
+ lsrs r1, 26\n\
+ ands r1, r2\n\
+ lsls r5, r1, 8\n\
+ ldr r0, [sp, 0x4]\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1F\n\
+ ands r0, r1\n\
+ lsls r0, 8\n\
+ str r0, [sp, 0x14]\n\
+ lsls r1, 16\n\
+ lsrs r0, r1, 21\n\
+ ands r0, r2\n\
+ lsls r0, 8\n\
+ str r0, [sp, 0x18]\n\
+ lsrs r1, 26\n\
+ ands r1, r2\n\
+ lsls r1, 8\n\
+ str r1, [sp, 0x1C]\n\
+ ldr r1, [sp, 0x14]\n\
+ subs r0, r1, r7\n\
+ ldr r1, [sp, 0x8]\n\
+ bl __divsi3\n\
+ mov r10, r0\n\
+ ldr r2, [sp, 0x18]\n\
+ subs r0, r2, r6\n\
+ ldr r1, [sp, 0x8]\n\
+ bl __divsi3\n\
+ mov r9, r0\n\
+ ldr r1, [sp, 0x1C]\n\
+ subs r0, r1, r5\n\
+ ldr r1, [sp, 0x8]\n\
+ bl __divsi3\n\
+ mov r8, r0\n\
+ adds r3, r4, 0\n\
+ movs r4, 0\n\
+ ldr r2, [sp]\n\
+ adds r2, 0x2\n\
+ str r2, [sp, 0x30]\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, 0x2\n\
+ str r0, [sp, 0x34]\n\
+ adds r1, r3, 0x2\n\
+ str r1, [sp, 0x24]\n\
+ ldr r2, [sp, 0x10]\n\
+ adds r2, 0x1\n\
+ str r2, [sp, 0x28]\n\
+ ldr r0, [sp, 0x20]\n\
+ cmp r4, r0\n\
+ bge _080EF700\n\
+ ldr r1, [sp, 0xC]\n\
+ lsls r1, 1\n\
+ mov r12, r1\n\
+_080EF6D6:\n\
+ lsls r0, r7, 8\n\
+ lsrs r2, r0, 16\n\
+ lsls r0, r6, 8\n\
+ lsrs r1, r0, 16\n\
+ lsls r0, r5, 8\n\
+ lsrs r0, 16\n\
+ lsls r0, 10\n\
+ lsls r1, 5\n\
+ orrs r0, r1\n\
+ orrs r2, r0\n\
+ strh r2, [r3]\n\
+ add r3, r12\n\
+ add r7, r10\n\
+ add r6, r9\n\
+ add r5, r8\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ ldr r2, [sp, 0x20]\n\
+ cmp r4, r2\n\
+ blt _080EF6D6\n\
+_080EF700:\n\
+ ldr r4, [sp, 0x14]\n\
+ lsrs r2, r4, 8\n\
+ ldr r1, [sp, 0x1C]\n\
+ lsls r0, r1, 2\n\
+ ldr r4, [sp, 0x18]\n\
+ lsrs r1, r4, 3\n\
+ orrs r0, r1\n\
+ orrs r2, r0\n\
+ strh r2, [r3]\n\
+ ldr r0, [sp, 0x30]\n\
+ str r0, [sp]\n\
+ ldr r1, [sp, 0x34]\n\
+ str r1, [sp, 0x4]\n\
+ ldr r4, [sp, 0x24]\n\
+ ldr r2, [sp, 0x28]\n\
+ lsls r0, r2, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x10]\n\
+ ldr r1, [sp, 0x2C]\n\
+ lsrs r0, r1, 16\n\
+ ldr r2, [sp, 0x10]\n\
+ cmp r2, r0\n\
+ bcc _080EF654\n\
+_080EF72E:\n\
+ add sp, 0x38\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");
+}
+#endif // NONMATCHING
+
+void sub_80EF740(void)
+{
+ gUnknown_083DFEC4->unk6DA0 = (gUnknown_083DFEC4->unk6DA0 + 1) & 1;
+ if (gUnknown_083DFEC4->unk6DA0)
+ {
+ gUnknown_083DFEC4->unk6DA2++;
+ }
+
+ REG_BG3HOFS = gUnknown_083DFEC4->unk6DA2;
+}
+
+void sub_80EF780(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0 || (gUnknown_083DFEC4->unk6DA2 & 0x7) != 0)
+ {
+ sub_80EF740();
+ }
+ else
+ {
+ u16 value = gUnknown_083DFEC4->unk6DA2 & 0x7;
+ gUnknown_083DFEC4->unk6DA2 = value;
+ gUnknown_083DFEC4->unk6DA0 = value;
+ REG_BG3HOFS = value;
+ }
+}
+
+void sub_80EF7D4(void)
+{
+ gUnknown_083DFEC4->unk6DA2 = 0;
+ gUnknown_083DFEC4->unk6DA0 = 0;
+ gUnknown_083DFEC4->taskId6DA4 = CreateTask(sub_80EF780, 80);
+}
+
+void sub_80EF814(void)
+{
+ if (FuncIsActiveTask(sub_80EF780))
+ {
+ DestroyTask(gUnknown_083DFEC4->taskId6DA4);
+ }
+}
+
+void sub_80EF840(void)
+{
+ gUnknown_083DFEC4->unkD160 = 0;
+
+ if (gUnknown_083DFEC4->unk6DAC == 0)
+ {
+ while (sub_80EF874() != 0);
+ }
+}
+
+// The only non-matching part is the gSaveBlock2.regionMapZoom access.
+#ifdef NONMATCHING
+bool8 sub_80EF874(void)
+{
+ switch (gUnknown_083DFEC4->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E7224);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowConfig_81E7224);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ {
+ return TRUE;
+ }
+ break;
+ case 4:
+ MenuZeroFillScreen();
+ break;
+ case 5:
+ sub_80FA904(&gUnknown_083DFEC4->regionMap, gSaveBlock2.regionMapZoom);
+ break;
+ case 6:
+ if (sub_80FA940())
+ {
+ return TRUE;
+ }
+ break;
+ case 7:
+ LZ77UnCompVram(gPokenavHoennMapSquares_Gfx, (void *)VRAM + 0x5000);
+ break;
+ case 8:
+ LoadPalette(gPokenavHoennMapSquares_Pal, 0x30, 0x20);
+ sub_80EFC3C();
+ break;
+ case 9:
+ if (sub_80EFC64())
+ {
+ return TRUE;
+ }
+ break;
+ case 10:
+ MenuDrawTextWindow(13, 3, 29, 17);
+ sub_80EF9F8();
+ break;
+ case 11:
+ if (!gUnknown_083DFEC4->regionMap.zoomed)
+ {
+ gUnknown_083DFEC4->unk7698 = 160;
+ REG_BG0VOFS = 160;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk7698 = 256;
+ REG_BG0VOFS = 0;
+ }
+
+ REG_BG0CNT = REG_BG0CNT;
+ REG_BG0CNT |= 1;
+ REG_BLDCNT = 0;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unkD160++;
+ return TRUE;
+}
+#else
+asm(".include \"constants/gba_constants.inc\"\n");
+
+__attribute__((naked))
+bool8 sub_80EF874(void)
+{
+ asm(".syntax unified\n\
+ push {lr}\n\
+ ldr r0, _080EF890 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080EF894 @ =0x0000d160\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0xB\n\
+ bls _080EF886\n\
+ b _080EF9D8\n\
+_080EF886:\n\
+ lsls r0, 2\n\
+ ldr r1, _080EF898 @ =_080EF89C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080EF890: .4byte gUnknown_083DFEC4\n\
+_080EF894: .4byte 0x0000d160\n\
+_080EF898: .4byte _080EF89C\n\
+ .align 2, 0\n\
+_080EF89C:\n\
+ .4byte _080EF8CC\n\
+ .4byte _080EF8D2\n\
+ .4byte _080EF8E0\n\
+ .4byte _080EF8EC\n\
+ .4byte _080EF8F6\n\
+ .4byte _080EF8FC\n\
+ .4byte _080EF920\n\
+ .4byte _080EF92C\n\
+ .4byte _080EF940\n\
+ .4byte _080EF954\n\
+ .4byte _080EF960\n\
+ .4byte _080EF972\n\
+_080EF8CC:\n\
+ bl sub_80EEDE8\n\
+ b _080EF9DC\n\
+_080EF8D2:\n\
+ ldr r0, _080EF8DC @ =gWindowConfig_81E7224\n\
+ bl SetUpWindowConfig\n\
+ b _080EF9DC\n\
+ .align 2, 0\n\
+_080EF8DC: .4byte gWindowConfig_81E7224\n\
+_080EF8E0:\n\
+ ldr r0, _080EF8E8 @ =gWindowConfig_81E7224\n\
+ bl MultistepInitMenuWindowBegin\n\
+ b _080EF9DC\n\
+ .align 2, 0\n\
+_080EF8E8: .4byte gWindowConfig_81E7224\n\
+_080EF8EC:\n\
+ bl MultistepInitMenuWindowContinue\n\
+ cmp r0, 0\n\
+ bne _080EF9DC\n\
+ b _080EF9EA\n\
+_080EF8F6:\n\
+ bl MenuZeroFillScreen\n\
+ b _080EF9DC\n\
+_080EF8FC:\n\
+ ldr r0, _080EF914 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r2, _080EF918 @ =0x00006e18\n\
+ adds r0, r2\n\
+ ldr r1, _080EF91C @ =gSaveBlock2\n\
+ ldrb r1, [r1, 0x15]\n\
+ lsrs r1, 3\n\
+ movs r2, 0x1\n\
+ ands r1, r2\n\
+ bl sub_80FA904\n\
+ b _080EF9DC\n\
+ .align 2, 0\n\
+_080EF914: .4byte gUnknown_083DFEC4\n\
+_080EF918: .4byte 0x00006e18\n\
+_080EF91C: .4byte gSaveBlock2\n\
+_080EF920:\n\
+ bl sub_80FA940\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080EF9DC\n\
+ b _080EF9EA\n\
+_080EF92C:\n\
+ ldr r0, _080EF938 @ =gPokenavHoennMapSquares_Gfx\n\
+ ldr r1, _080EF93C @ =0x06005000\n\
+ bl LZ77UnCompVram\n\
+ b _080EF9DC\n\
+ .align 2, 0\n\
+_080EF938: .4byte gPokenavHoennMapSquares_Gfx\n\
+_080EF93C: .4byte 0x06005000\n\
+_080EF940:\n\
+ ldr r0, _080EF950 @ =gPokenavHoennMapSquares_Pal\n\
+ movs r1, 0x30\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ bl sub_80EFC3C\n\
+ b _080EF9DC\n\
+ .align 2, 0\n\
+_080EF950: .4byte gPokenavHoennMapSquares_Pal\n\
+_080EF954:\n\
+ bl sub_80EFC64\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080EF9DC\n\
+ b _080EF9EA\n\
+_080EF960:\n\
+ movs r0, 0xD\n\
+ movs r1, 0x3\n\
+ movs r2, 0x1D\n\
+ movs r3, 0x11\n\
+ bl MenuDrawTextWindow\n\
+ bl sub_80EF9F8\n\
+ b _080EF9DC\n\
+_080EF972:\n\
+ ldr r0, _080EF990 @ =gUnknown_083DFEC4\n\
+ ldr r1, [r0]\n\
+ ldr r2, _080EF994 @ =0x00006e90\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080EF9A0\n\
+ ldr r2, _080EF998 @ =0x00007698\n\
+ adds r0, r1, r2\n\
+ movs r1, 0xA0\n\
+ strh r1, [r0]\n\
+ ldr r0, _080EF99C @ =REG_BG0VOFS\n\
+ strh r1, [r0]\n\
+ b _080EF9B0\n\
+ .align 2, 0\n\
+_080EF990: .4byte gUnknown_083DFEC4\n\
+_080EF994: .4byte 0x00006e90\n\
+_080EF998: .4byte 0x00007698\n\
+_080EF99C: .4byte REG_BG0VOFS\n\
+_080EF9A0:\n\
+ ldr r0, _080EF9C8 @ =0x00007698\n\
+ adds r1, r0\n\
+ movs r2, 0\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ strh r0, [r1]\n\
+ ldr r0, _080EF9CC @ =REG_BG0VOFS\n\
+ strh r2, [r0]\n\
+_080EF9B0:\n\
+ ldr r2, _080EF9D0 @ =REG_BG0CNT\n\
+ ldrh r0, [r2]\n\
+ strh r0, [r2]\n\
+ ldrh r0, [r2]\n\
+ movs r1, 0x1\n\
+ orrs r0, r1\n\
+ strh r0, [r2]\n\
+ ldr r1, _080EF9D4 @ =REG_BLDCNT\n\
+ movs r0, 0\n\
+ strh r0, [r1]\n\
+ b _080EF9DC\n\
+ .align 2, 0\n\
+_080EF9C8: .4byte 0x00007698\n\
+_080EF9CC: .4byte REG_BG0VOFS\n\
+_080EF9D0: .4byte REG_BG0CNT\n\
+_080EF9D4: .4byte REG_BLDCNT\n\
+_080EF9D8:\n\
+ movs r0, 0\n\
+ b _080EF9EC\n\
+_080EF9DC:\n\
+ ldr r0, _080EF9F0 @ =gUnknown_083DFEC4\n\
+ ldr r1, [r0]\n\
+ ldr r2, _080EF9F4 @ =0x0000d160\n\
+ adds r1, r2\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+_080EF9EA:\n\
+ movs r0, 0x1\n\
+_080EF9EC:\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080EF9F0: .4byte gUnknown_083DFEC4\n\
+_080EF9F4: .4byte 0x0000d160\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+#ifdef NONMATCHING
+void sub_80EF9F8(void)
+{
+ s32 zero;
+ u16 i;
+ u8 *mapSectionName;
+ u32 offset;
+ u16 mapSectionId;
+ u8 b;
+ u8 **pointer;
+ u16 var1 = 4;
+
+
+ switch (gUnknown_083DFEC4->regionMap.unk16)
+ {
+ case 1:
+ case 4:
+ sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1);
+ var1 += 2;
+
+ if (gLinkOpen == TRUE)
+ {
+ sub_80F1A80();
+ }
+ else
+ {
+ i = 0;
+ while (i < 4 && (mapSectionName = GetLandmarkName(gUnknown_083DFEC4->regionMap.mapSectionId, gUnknown_083DFEC4->regionMap.everGrandeCityArea, i)) != NULL)
+ {
+ sub_8072A18(mapSectionName, 0x70, var1 * 8, 0x78, 1);
+ var1 += 2;
+ i++;
+ }
+
+ // This check is always true, but somehow the compiler still performed it.
+ asm("mov %0, #0\n":"=r"(zero)); // zero = 0
+ if (!zero && var1 < 16)
+ {
+ MenuFillWindowRectWithBlankTile(14, var1, 28, 15);
+ }
+ }
+ break;
+ case 2:
+ sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1);
+ var1 += 2;
+
+ mapSectionId = gUnknown_083DFEC4->regionMap.mapSectionId;
+ b = gUnknown_083DFEC4->regionMap.everGrandeCityArea;
+ offset = (b << 2) + (mapSectionId << 3);
+ pointer = (u8 **)((u8 *)&gUnknown_083DFEC4->unkCDCC + offset);
+ if (*pointer != NULL)
+ {
+ MenuFillWindowRectWithBlankTile(14, var1, 15, 15);
+ MenuFillWindowRectWithBlankTile(26, var1, 28, 15);
+
+ sub_8095C8C((void *)VRAM + 0xF800, 16, 6, *pointer, 0, 0, 10, 10, 10);
+
+ var1 += 11;
+ }
+
+ // This check is always true, but somehow the compiler still performed it.
+ asm("mov %0, #0\n":"=r"(zero)); // zero = 0
+ if (!zero && var1 < 16)
+ {
+ MenuFillWindowRectWithBlankTile(14, var1, 28, 15);
+ }
+ break;
+ case 3:
+ sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1);
+ var1 += 2;
+
+ // This check is always true, but somehow the compiler still performed it.
+ asm("mov %0, #0\n":"=r"(zero)); // zero = 0
+ if (!zero && var1 < 16)
+ {
+ MenuFillWindowRectWithBlankTile(14, var1, 28, 15);
+ }
+ break;
+ case 0:
+ default:
+ // This check is always true, but somehow the compiler still performed it.
+ asm("mov %0, #0\n":"=r"(zero)); // zero = 0
+ if (!zero && var1 < 16)
+ {
+ MenuFillWindowRectWithBlankTile(14, var1, 28, 15);
+ }
+ break;
+ }
+
+ if (gUnknown_083DFEC4->regionMap.unk16 == 2)
+ {
+ sub_80EFD74();
+ }
+ else
+ {
+ sub_80EFDA0();
+ }
+}
+#else
+__attribute__((naked))
+void sub_80EF9F8(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x14\n\
+ movs r5, 0x4\n\
+ ldr r0, _080EFA18 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080EFA1C @ =0x00006e2e\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x4\n\
+ bls _080EFA0E\n\
+ b _080EFB6A\n\
+_080EFA0E:\n\
+ lsls r0, 2\n\
+ ldr r1, _080EFA20 @ =_080EFA24\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080EFA18: .4byte gUnknown_083DFEC4\n\
+_080EFA1C: .4byte 0x00006e2e\n\
+_080EFA20: .4byte _080EFA24\n\
+ .align 2, 0\n\
+_080EFA24:\n\
+ .4byte _080EFB6A\n\
+ .4byte _080EFA38\n\
+ .4byte _080EFAC0\n\
+ .4byte _080EFB4C\n\
+ .4byte _080EFA38\n\
+_080EFA38:\n\
+ ldr r0, _080EFA64 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r2, _080EFA68 @ =0x00006e18\n\
+ adds r0, r2\n\
+ lsls r2, r5, 19\n\
+ lsrs r2, 16\n\
+ movs r1, 0x1\n\
+ str r1, [sp]\n\
+ movs r1, 0x70\n\
+ movs r3, 0x78\n\
+ bl sub_8072A18\n\
+ adds r0, r5, 0x2\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ ldr r0, _080EFA6C @ =gLinkOpen\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _080EFA70\n\
+ bl sub_80F1A80\n\
+ b _080EFB82\n\
+ .align 2, 0\n\
+_080EFA64: .4byte gUnknown_083DFEC4\n\
+_080EFA68: .4byte 0x00006e18\n\
+_080EFA6C: .4byte gLinkOpen\n\
+_080EFA70:\n\
+ movs r4, 0\n\
+ b _080EFA92\n\
+_080EFA74:\n\
+ lsls r2, r5, 19\n\
+ lsrs r2, 16\n\
+ movs r0, 0x1\n\
+ str r0, [sp]\n\
+ adds r0, r1, 0\n\
+ movs r1, 0x70\n\
+ movs r3, 0x78\n\
+ bl sub_8072A18\n\
+ adds r0, r5, 0x2\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+_080EFA92:\n\
+ cmp r4, 0x3\n\
+ bhi _080EFB6A\n\
+ ldr r0, _080EFAB8 @ =gUnknown_083DFEC4\n\
+ ldr r1, [r0]\n\
+ ldr r2, _080EFABC @ =0x00006e2c\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ adds r2, 0x3\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ lsls r2, r4, 24\n\
+ lsrs r2, 24\n\
+ bl GetLandmarkName\n\
+ adds r1, r0, 0\n\
+ cmp r1, 0\n\
+ bne _080EFA74\n\
+ b _080EFB6A\n\
+ .align 2, 0\n\
+_080EFAB8: .4byte gUnknown_083DFEC4\n\
+_080EFABC: .4byte 0x00006e2c\n\
+_080EFAC0:\n\
+ ldr r0, _080EFB38 @ =gUnknown_083DFEC4\n\
+ ldr r4, [r0]\n\
+ ldr r1, _080EFB3C @ =0x00006e18\n\
+ adds r0, r4, r1\n\
+ lsls r2, r5, 19\n\
+ lsrs r2, 16\n\
+ movs r1, 0x1\n\
+ str r1, [sp]\n\
+ movs r1, 0x70\n\
+ movs r3, 0x78\n\
+ bl sub_8072A18\n\
+ adds r0, r5, 0x2\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ ldr r2, _080EFB40 @ =0x00006e2c\n\
+ adds r0, r4, r2\n\
+ ldrh r1, [r0]\n\
+ adds r2, 0x3\n\
+ adds r0, r4, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 2\n\
+ lsls r1, 3\n\
+ adds r0, r1\n\
+ ldr r1, _080EFB44 @ =0x0000cdcc\n\
+ adds r4, r1\n\
+ adds r6, r4, r0\n\
+ ldr r0, [r6]\n\
+ cmp r0, 0\n\
+ beq _080EFB6A\n\
+ lsls r4, r5, 24\n\
+ lsrs r4, 24\n\
+ movs r0, 0xE\n\
+ adds r1, r4, 0\n\
+ movs r2, 0xF\n\
+ movs r3, 0xF\n\
+ bl MenuFillWindowRectWithBlankTile\n\
+ movs r0, 0x1A\n\
+ adds r1, r4, 0\n\
+ movs r2, 0x1C\n\
+ movs r3, 0xF\n\
+ bl MenuFillWindowRectWithBlankTile\n\
+ ldr r0, _080EFB48 @ =0x0600f800\n\
+ ldr r3, [r6]\n\
+ movs r1, 0\n\
+ str r1, [sp]\n\
+ str r1, [sp, 0x4]\n\
+ movs r1, 0xA\n\
+ str r1, [sp, 0x8]\n\
+ str r1, [sp, 0xC]\n\
+ str r1, [sp, 0x10]\n\
+ movs r1, 0x10\n\
+ movs r2, 0x6\n\
+ bl sub_8095C8C\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xB\n\
+ b _080EFB66\n\
+ .align 2, 0\n\
+_080EFB38: .4byte gUnknown_083DFEC4\n\
+_080EFB3C: .4byte 0x00006e18\n\
+_080EFB40: .4byte 0x00006e2c\n\
+_080EFB44: .4byte 0x0000cdcc\n\
+_080EFB48: .4byte 0x0600f800\n\
+_080EFB4C:\n\
+ ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r2, _080EFB9C @ =0x00006e18\n\
+ adds r0, r2\n\
+ lsls r2, r5, 19\n\
+ lsrs r2, 16\n\
+ movs r1, 0x1\n\
+ str r1, [sp]\n\
+ movs r1, 0x70\n\
+ movs r3, 0x78\n\
+ bl sub_8072A18\n\
+ adds r0, r5, 0x2\n\
+_080EFB66:\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+_080EFB6A:\n\
+ movs r0, 0\n\
+ cmp r0, 0\n\
+ bne _080EFB82\n\
+ cmp r5, 0xF\n\
+ bhi _080EFB82\n\
+ lsls r1, r5, 24\n\
+ lsrs r1, 24\n\
+ movs r0, 0xE\n\
+ movs r2, 0x1C\n\
+ movs r3, 0xF\n\
+ bl MenuFillWindowRectWithBlankTile\n\
+_080EFB82:\n\
+ ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080EFBA0 @ =0x00006e2e\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x2\n\
+ bne _080EFBA4\n\
+ bl sub_80EFD74\n\
+ b _080EFBA8\n\
+ .align 2, 0\n\
+_080EFB98: .4byte gUnknown_083DFEC4\n\
+_080EFB9C: .4byte 0x00006e18\n\
+_080EFBA0: .4byte 0x00006e2e\n\
+_080EFBA4:\n\
+ bl sub_80EFDA0\n\
+_080EFBA8:\n\
+ add sp, 0x14\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80EFBB0(void)
+{
+ if (!gUnknown_083DFEC4->regionMap.zoomed)
+ {
+ sub_80EEFBC(8);
+ }
+ else
+ {
+ sub_80EEFBC(7);
+ }
+}
+
+bool8 sub_80EFBDC(bool8 a)
+{
+ bool8 retVal = TRUE;
+ u16 var1 = gUnknown_083DFEC4->unk7698;
+
+ if (a)
+ {
+ if (var1 > 168)
+ {
+ var1 = var1 - 8;
+ }
+ else
+ {
+ var1 = 160;
+ retVal = FALSE;
+ }
+ }
+ else
+ {
+ if (var1 < 248)
+ {
+ var1 = var1 + 8;
+ }
+ else
+ {
+ var1 = 256;
+ retVal = FALSE;
+ }
+ }
+
+ gUnknown_083DFEC4->unk7698 = var1;
+ REG_BG0VOFS = var1 & 0xFF;
+
+ return retVal;
+}
+
+void sub_80EFC3C(void)
+{
+ gUnknown_083DFEC4->unkBC9A = 0;
+ gUnknown_083DFEC4->unkBC9B = 0;
+ sub_80EFD3C();
+}
+
+#ifdef NONMATCHING // "var1 = gUnknown_083DFEC4->unkBC9A;" is the only thing that doesnt' match.
+bool8 sub_80EFC64(void)
+{
+ u16 i;
+ u16 var1;
+ u16 var2;
+
+ if (gUnknown_083DFEC4->unkBC9A < 16)
+ {
+ var1 = gUnknown_083DFEC4->unkBC9A;
+ var2 = gUnknown_083DFEC4->unkBC9B;
+ for (i = 0; i < 2; i++)
+ {
+ if (gPokenavCityMaps[var1][i] != 0)
+ {
+ LZ77UnCompVram(gPokenavCityMaps[var1][i], gUnknown_083DFEC4->unkBC9C[var2]);
+ gUnknown_083DFEC4->unkCDCC[var1][i] = gUnknown_083DFEC4->unkBC9C[var2];
+ var2++;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unkCDCC[var1][i] = NULL;
+ }
+ }
+
+ gUnknown_083DFEC4->unkBC9A++;
+ if (gUnknown_083DFEC4->unkBC9A < 16)
+ {
+ gUnknown_083DFEC4->unkBC9B = var2;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+#else
+__attribute__((naked))
+bool8 sub_80EFC64(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ sub sp, 0x8\n\
+ ldr r4, _080EFCD0 @ =gUnknown_083DFEC4\n\
+ ldr r2, [r4]\n\
+ ldr r0, _080EFCD4 @ =0x0000bc9a\n\
+ adds r1, r2, r0\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xF\n\
+ bhi _080EFD2C\n\
+ ldrb r1, [r1]\n\
+ mov r8, r1\n\
+ ldr r1, _080EFCD8 @ =0x0000bc9b\n\
+ adds r0, r2, r1\n\
+ ldrb r7, [r0]\n\
+ movs r2, 0\n\
+ ldr r0, _080EFCDC @ =gPokenavCityMaps\n\
+ mov r9, r0\n\
+ adds r3, r4, 0\n\
+_080EFC8E:\n\
+ lsls r0, r2, 2\n\
+ mov r4, r8\n\
+ lsls r1, r4, 3\n\
+ adds r6, r0, r1\n\
+ mov r1, r9\n\
+ adds r0, r6, r1\n\
+ ldr r1, [r0]\n\
+ cmp r1, 0\n\
+ beq _080EFCE8\n\
+ movs r0, 0xC8\n\
+ adds r5, r7, 0\n\
+ muls r5, r0\n\
+ ldr r4, _080EFCE0 @ =0x0000bc9c\n\
+ adds r5, r4\n\
+ ldr r4, [r3]\n\
+ adds r5, r4, r5\n\
+ adds r0, r1, 0\n\
+ adds r1, r5, 0\n\
+ str r2, [sp]\n\
+ str r3, [sp, 0x4]\n\
+ bl LZ77UnCompVram\n\
+ ldr r0, _080EFCE4 @ =0x0000cdcc\n\
+ adds r4, r0\n\
+ adds r4, r6\n\
+ str r5, [r4]\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ ldr r2, [sp]\n\
+ ldr r3, [sp, 0x4]\n\
+ b _080EFCF2\n\
+ .align 2, 0\n\
+_080EFCD0: .4byte gUnknown_083DFEC4\n\
+_080EFCD4: .4byte 0x0000bc9a\n\
+_080EFCD8: .4byte 0x0000bc9b\n\
+_080EFCDC: .4byte gPokenavCityMaps\n\
+_080EFCE0: .4byte 0x0000bc9c\n\
+_080EFCE4: .4byte 0x0000cdcc\n\
+_080EFCE8:\n\
+ ldr r0, [r3]\n\
+ ldr r4, _080EFD1C @ =0x0000cdcc\n\
+ adds r0, r4\n\
+ adds r0, r6\n\
+ str r1, [r0]\n\
+_080EFCF2:\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r2, 0x1\n\
+ bls _080EFC8E\n\
+ ldr r0, _080EFD20 @ =gUnknown_083DFEC4\n\
+ ldr r2, [r0]\n\
+ ldr r0, _080EFD24 @ =0x0000bc9a\n\
+ adds r1, r2, r0\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0xF\n\
+ bhi _080EFD2C\n\
+ ldr r1, _080EFD28 @ =0x0000bc9b\n\
+ adds r0, r2, r1\n\
+ strb r7, [r0]\n\
+ movs r0, 0x1\n\
+ b _080EFD2E\n\
+ .align 2, 0\n\
+_080EFD1C: .4byte 0x0000cdcc\n\
+_080EFD20: .4byte gUnknown_083DFEC4\n\
+_080EFD24: .4byte 0x0000bc9a\n\
+_080EFD28: .4byte 0x0000bc9b\n\
+_080EFD2C:\n\
+ movs r0, 0\n\
+_080EFD2E:\n\
+ add sp, 0x8\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80EFD3C(void)
+{
+ gUnknown_083DFEC4->unk769E = 0;
+ gUnknown_083DFEC4->unk769C = 47;
+ gUnknown_083DFEC4->unk769D = 0;
+ gUnknown_083DFEC4->unk769A = 0;
+}
+
+void sub_80EFD74(void)
+{
+ gUnknown_083DFEC4->unk769E = 1;
+
+ if (gUnknown_083DFEC4->unk769D == 1)
+ {
+ gUnknown_083DFEC4->unk769D = 2;
+ }
+}
+
+void sub_80EFDA0(void)
+{
+ sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9AC2C, 0, 0, 15, 1, 15);
+ gUnknown_083DFEC4->unk769E = 0;
+}
+
+void sub_80EFDE4(u8 param0)
+{
+ u16 var1 = 60 - gUnknown_083DFEC4->unk769C;
+
+ if (var1 > 15)
+ {
+ var1 = 15;
+ }
+
+ if (gUnknown_083DFEC4->unk769E != 0)
+ {
+ sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9ABB4, gUnknown_083DFEC4->unk769C, 0, var1, 1, 60);
+
+ if (var1 < 15)
+ {
+ u16 var2 = var1 + 14;
+
+ sub_8095C8C((void *)VRAM + 0xF800, var2, 16, gUnknown_08E9ABB4, 0, 0, (u16)(15 - var1), 1, 60);
+ }
+ }
+}
+
+void sub_80EFE7C(void)
+{
+ u16 var1;
+ u8 var2 = gUnknown_083DFEC4->unk769D;
+
+ switch (var2)
+ {
+ case 0:
+ var1 = ++gUnknown_083DFEC4->unk769C;
+
+ if (var1 > 59)
+ {
+ gUnknown_083DFEC4->unk769C = var2;
+ }
+
+ sub_80EFDE4(gUnknown_083DFEC4->unk769E);
+
+ switch (gUnknown_083DFEC4->unk769C)
+ {
+ case 0:
+ case 15:
+ case 30:
+ case 45:
+ gUnknown_083DFEC4->unk769D = 1;
+ gUnknown_083DFEC4->unk769A = 0;
+ break;
+ }
+ break;
+ case 1:
+ var1 = ++gUnknown_083DFEC4->unk769A;
+ if (var1 > 120)
+ {
+ gUnknown_083DFEC4->unk769A = 0;
+ gUnknown_083DFEC4->unk769D = 0;
+ }
+ break;
+ case 2:
+ sub_80EFDE4(1);
+ gUnknown_083DFEC4->unk769D = 1;
+ break;
+ }
+}
+
+void sub_80EFF34(void)
+{
+ gUnknown_083DFEC4->unkD160 = 0;
+
+ if (gUnknown_083DFEC4->unk6DAC == 0)
+ {
+ while (sub_80EFF68());
+ }
+}
+
+bool8 sub_80EFF68(void)
+{
+ switch (gUnknown_083DFEC4->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ gUnknown_083DFEC4->unkD162[0] = 11;
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E7080);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowConfig_81E7080);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ {
+ return TRUE;
+ }
+ break;
+ case 4:
+ MenuZeroFillScreen();
+ break;
+ case 5:
+ sub_80F1614();
+ break;
+ case 6:
+ if (sub_80F162C(0))
+ {
+ return TRUE;
+ }
+ break;
+ case 7:
+ LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)VRAM + 0x5000);
+ break;
+ case 8:
+ LZ77UnCompVram(gUnknown_08E9AC4C, (void *)VRAM + 0xF000);
+ LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20);
+ break;
+ case 9:
+ if (gUnknown_083DFEC4->unk76AA == 1)
+ {
+ sub_8095C8C((void *)VRAM + 0xF000, 0, 5, gUnknown_083E01AC, 0, 0, 9, 4, 9);
+ }
+ break;
+ case 10:
+ LZ77UnCompVram(gUnknown_08E9FEB4, (void *)VRAM + 0xB800);
+ break;
+ case 11:
+ 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 12:
+ sub_80F01E0((u16)gUnknown_083DFEC4->unk8fe9);
+ break;
+ case 13:
+ REG_BG3CNT = 0x1E03;
+ REG_BG2CNT = 0x1702;
+ REG_BLDCNT = 0x844;
+ REG_BLDALPHA = 0x40B;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unkD160++;
+ return TRUE;
+}
+
+void sub_80F0174(bool8 a)
+{
+ if (a)
+ {
+ REG_DISPCNT |= DISPCNT_BG2_ON;
+ }
+ else
+ {
+ REG_DISPCNT &= ~DISPCNT_BG2_ON;
+ }
+}
+
+void sub_80F01A4(void)
+{
+ REG_WIN0H = WIN_RANGE(0, 240);
+ REG_WIN1H = WIN_RANGE(0, 155);
+ REG_WIN0V = WIN_RANGE(56, 121);
+ REG_WIN1V = WIN_RANGE(56, 121);
+ REG_WININ = 0x3F3F;
+ REG_WINOUT = 0x001B;
+}
+
+void sub_80F01E0(u16 a)
+{
+ MenuPrint(gUnknown_083DFEC4->unk8829[a], 13, 1);
+
+ if (gUnknown_083DFEC4->unk76AA == 1)
+ {
+ MenuPrint(gUnknown_083DFEC4->unk88E9[a], 13, 3);
+ sub_80F443C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk2);
+ MenuPrint(gUnknown_083DFEC4->unk8788, 1, 6);
+ }
+}
+
+void sub_80F0264(u8 a)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ gUnknown_083DFEC4->unk87CA = a;
+
+ if (gUnknown_083DFEC4->unk6DAC == 0)
+ {
+ while (sub_80F02A0());
+ }
+}
+
+#ifdef NONMATCHING // small nonmatching part is in the third else clause in case 7.
+bool8 sub_80F02A0(void)
+{
+ const u16 *pointer;
+
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ sub_80EEDE8();
+
+ gUnknown_083DFEC4->unk87C8 = gUnknown_083DFEC4->unk87CA == 1;
+ gUnknown_083DFEC4->unkD162[0] = 11;
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E70D4);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowConfig_81E70D4);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ {
+ return TRUE;
+ }
+ break;
+ case 4:
+ MenuZeroFillScreen();
+ break;
+ case 5:
+ LZ77UnCompVram(gUnknown_08E9FC64, (void *)VRAM + 0xE800);
+ break;
+ case 6:
+ LZ77UnCompVram(gPokenavConditionSearch2_Gfx, (void *)VRAM + 0x8000);
+ break;
+ case 7:
+ LoadPalette(gUnknown_083E02B4, 0xB0, 0x20);
+ LoadPalette(gUnknown_083E02B4, 0xF0, 0x20);
+ LoadPalette(gUnknown_083E0334, 0x40, 0x20);
+
+ if (gUnknown_083DFEC4->unk87CA == 0)
+ {
+ LoadPalette(gPokenavConditionSearch2_Pal, 0x30, 0x20);
+ gPlttBufferUnfaded[0] = gPokenavConditionSearch2_Pal[5];
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
+ LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
+ LoadPalette(&gPokenavConditionSearch2_Pal[5], 0xBF, 0x2);
+ }
+ else if (gUnknown_083DFEC4->unk87CA == 1)
+ {
+ LoadPalette(gUnknown_083E0274, 0x30, 0x20);
+ gPlttBufferUnfaded[0] = gUnknown_083E0274[5];
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
+ LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
+ LoadPalette(&gUnknown_083E0274[5], 0xBF, 0x2);
+ }
+ else
+ {
+ LoadPalette(gUnknown_08E9F9E8, 0x30, 0x20);
+ pointer = &gUnknown_08E9F9E8[5];
+ gPlttBufferUnfaded[0] = gUnknown_08E9F9E8[5];
+ LoadPalette(gUnknown_083E0314, 0x50, 0x20);
+ LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
+ LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
+ LoadPalette(pointer, 0xBF, 0x2);
+ LoadPalette(pointer, 0x5F, 0x2);
+ }
+ break;
+ case 8:
+ if (gUnknown_083DFEC4->unk87CA != 2)
+ {
+ sub_8095C8C((void *)VRAM + 0xE800, 0, 5, gUnknown_08E9FD1C, 0, 0, 9, 4, 9);
+ }
+ else
+ {
+ sub_8095C8C((void *)VRAM + 0xE800, 0, 4, gUnknown_08E9FE54, 0, 0, 12, 10, 12);
+ sub_8095C8C((void *)VRAM + 0xE800, 0, 8, gUnknown_08E9FD64, 0, 0, 12, 10, 12);
+ }
+ break;
+ case 9:
+ LZ77UnCompVram(gUnknown_083E0354, (void *)VRAM + 0x5000);
+ break;
+ case 10:
+ DmaClear16(3, (void *)VRAM + 0xF800, 0x800);
+ break;
+ case 11:
+ sub_80F0900();
+ break;
+ case 12:
+ if (sub_80F0944())
+ {
+ return TRUE;
+ }
+ break;
+ case 13:
+ if (gUnknown_083DFEC4->unk87CA != 2)
+ {
+ ShowMapNamePopUpWindow();
+ }
+ else
+ {
+ sub_80F081C(0);
+ sub_80F0FFC(gUnknown_083DFEC4->unk876E);
+ }
+ break;
+ case 14:
+ REG_BG2CNT = 0x1D0A;
+ REG_BG3CNT = 0x1E03;
+ REG_BG0CNT = 0x1F01;
+ REG_BG3VOFS = 0xF8;
+
+ gUnknown_083DFEC4->unk8776 = 0xF8;
+ gUnknown_083DFEC4->unk8778 = 0;
+
+ REG_BLDCNT = 0;
+ gUnknown_083DFEC4->unkD160++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+#else
+__attribute__((naked))
+bool8 sub_80F02A0(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ mov r6, r8\n\
+ push {r6}\n\
+ sub sp, 0x18\n\
+ ldr r1, _080F02C4 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r1]\n\
+ ldr r2, _080F02C8 @ =0x00000306\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ adds r2, r1, 0\n\
+ cmp r0, 0xE\n\
+ bls _080F02BA\n\
+ b _080F05FA\n\
+_080F02BA:\n\
+ lsls r0, 2\n\
+ ldr r1, _080F02CC @ =_080F02D0\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_080F02C4: .4byte gUnknown_083DFEC4\n\
+_080F02C8: .4byte 0x00000306\n\
+_080F02CC: .4byte _080F02D0\n\
+ .align 2, 0\n\
+_080F02D0:\n\
+ .4byte _080F030C\n\
+ .4byte _080F0344\n\
+ .4byte _080F0350\n\
+ .4byte _080F035C\n\
+ .4byte _080F0368\n\
+ .4byte _080F036E\n\
+ .4byte _080F0380\n\
+ .4byte _080F0394\n\
+ .4byte _080F04BC\n\
+ .4byte _080F053C\n\
+ .4byte _080F0550\n\
+ .4byte _080F0574\n\
+ .4byte _080F057A\n\
+ .4byte _080F0586\n\
+ .4byte _080F05BC\n\
+_080F030C:\n\
+ bl sub_80EEDE8\n\
+ ldr r0, _080F0334 @ =gUnknown_083DFEC4\n\
+ ldr r1, [r0]\n\
+ movs r2, 0\n\
+ ldr r3, _080F0338 @ =0x000087ca\n\
+ adds r0, r1, r3\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _080F0322\n\
+ movs r2, 0x1\n\
+_080F0322:\n\
+ ldr r3, _080F033C @ =0x000087c8\n\
+ adds r0, r1, r3\n\
+ strb r2, [r0]\n\
+ ldr r0, _080F0340 @ =0x0000d162\n\
+ adds r1, r0\n\
+ movs r0, 0xB\n\
+ strb r0, [r1]\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F0334: .4byte gUnknown_083DFEC4\n\
+_080F0338: .4byte 0x000087ca\n\
+_080F033C: .4byte 0x000087c8\n\
+_080F0340: .4byte 0x0000d162\n\
+_080F0344:\n\
+ ldr r0, _080F034C @ =gWindowConfig_81E70D4\n\
+ bl SetUpWindowConfig\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F034C: .4byte gWindowConfig_81E70D4\n\
+_080F0350:\n\
+ ldr r0, _080F0358 @ =gWindowConfig_81E70D4\n\
+ bl MultistepInitMenuWindowBegin\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F0358: .4byte gWindowConfig_81E70D4\n\
+_080F035C:\n\
+ bl MultistepInitMenuWindowContinue\n\
+ cmp r0, 0\n\
+ beq _080F0366\n\
+ b _080F0618\n\
+_080F0366:\n\
+ b _080F0626\n\
+_080F0368:\n\
+ bl MenuZeroFillScreen\n\
+ b _080F0618\n\
+_080F036E:\n\
+ ldr r0, _080F0378 @ =gUnknown_08E9FC64\n\
+ ldr r1, _080F037C @ =0x0600e800\n\
+ bl LZ77UnCompVram\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F0378: .4byte gUnknown_08E9FC64\n\
+_080F037C: .4byte 0x0600e800\n\
+_080F0380:\n\
+ ldr r0, _080F038C @ =gPokenavConditionSearch2_Gfx\n\
+ ldr r1, _080F0390 @ =0x06008000\n\
+ bl LZ77UnCompVram\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F038C: .4byte gPokenavConditionSearch2_Gfx\n\
+_080F0390: .4byte 0x06008000\n\
+_080F0394:\n\
+ ldr r6, _080F03FC @ =gUnknown_083E02B4\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xB0\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xF0\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ ldr r0, _080F0400 @ =gUnknown_083E0334\n\
+ movs r1, 0x40\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ ldr r0, _080F0404 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0408 @ =0x000087ca\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080F0418\n\
+ ldr r4, _080F040C @ =gPokenavConditionSearch2_Pal\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x30\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ ldr r1, _080F0410 @ =gPlttBufferUnfaded\n\
+ ldrh r0, [r4, 0xA]\n\
+ strh r0, [r1]\n\
+ ldr r0, _080F0414 @ =gUnknownPalette_81E6692\n\
+ movs r1, 0xB0\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ adds r0, r6, 0x2\n\
+ movs r1, 0xB1\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x10\n\
+ movs r1, 0xB5\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ adds r4, 0xA\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xBF\n\
+ b _080F04A8\n\
+ .align 2, 0\n\
+_080F03FC: .4byte gUnknown_083E02B4\n\
+_080F0400: .4byte gUnknown_083E0334\n\
+_080F0404: .4byte gUnknown_083DFEC4\n\
+_080F0408: .4byte 0x000087ca\n\
+_080F040C: .4byte gPokenavConditionSearch2_Pal\n\
+_080F0410: .4byte gPlttBufferUnfaded\n\
+_080F0414: .4byte gUnknownPalette_81E6692\n\
+_080F0418:\n\
+ cmp r0, 0x1\n\
+ bne _080F0464\n\
+ ldr r4, _080F0458 @ =gUnknown_083E0274\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x30\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ ldr r1, _080F045C @ =gPlttBufferUnfaded\n\
+ ldrh r0, [r4, 0xA]\n\
+ strh r0, [r1]\n\
+ ldr r0, _080F0460 @ =gUnknownPalette_81E6692\n\
+ movs r1, 0xB0\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ adds r0, r6, 0x2\n\
+ movs r1, 0xB1\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x10\n\
+ movs r1, 0xB5\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ adds r4, 0xA\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xBF\n\
+ b _080F04A8\n\
+ .align 2, 0\n\
+_080F0458: .4byte gUnknown_083E0274\n\
+_080F045C: .4byte gPlttBufferUnfaded\n\
+_080F0460: .4byte gUnknownPalette_81E6692\n\
+_080F0464:\n\
+ ldr r4, _080F04B0 @ =gUnknown_08E9F9E8\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x30\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ ldr r1, _080F04B4 @ =gPlttBufferUnfaded\n\
+ adds r5, r4, 0\n\
+ adds r5, 0xA\n\
+ ldrh r0, [r4, 0xA]\n\
+ strh r0, [r1]\n\
+ ldr r0, _080F04B8 @ =gUnknown_083E0314\n\
+ movs r1, 0x50\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ adds r0, r6, 0x2\n\
+ movs r1, 0xB1\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x10\n\
+ movs r1, 0xB5\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xBF\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x5F\n\
+_080F04A8:\n\
+ movs r2, 0x2\n\
+ bl LoadPalette\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F04B0: .4byte gUnknown_08E9F9E8\n\
+_080F04B4: .4byte gPlttBufferUnfaded\n\
+_080F04B8: .4byte gUnknown_083E0314\n\
+_080F04BC:\n\
+ ldr r0, _080F04E8 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r2, _080F04EC @ =0x000087ca\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x2\n\
+ beq _080F04F8\n\
+ ldr r0, _080F04F0 @ =0x0600e800\n\
+ ldr r3, _080F04F4 @ =gUnknown_08E9FD1C\n\
+ movs r1, 0\n\
+ str r1, [sp]\n\
+ str r1, [sp, 0x4]\n\
+ movs r2, 0x9\n\
+ str r2, [sp, 0x8]\n\
+ movs r1, 0x4\n\
+ str r1, [sp, 0xC]\n\
+ str r2, [sp, 0x10]\n\
+ movs r1, 0\n\
+ movs r2, 0x5\n\
+ bl sub_8095C8C\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F04E8: .4byte gUnknown_083DFEC4\n\
+_080F04EC: .4byte 0x000087ca\n\
+_080F04F0: .4byte 0x0600e800\n\
+_080F04F4: .4byte gUnknown_08E9FD1C\n\
+_080F04F8:\n\
+ ldr r3, _080F0530 @ =0x0600e800\n\
+ mov r8, r3\n\
+ ldr r3, _080F0534 @ =gUnknown_08E9FE54\n\
+ movs r4, 0\n\
+ str r4, [sp]\n\
+ str r4, [sp, 0x4]\n\
+ movs r5, 0xC\n\
+ str r5, [sp, 0x8]\n\
+ movs r6, 0xA\n\
+ str r6, [sp, 0xC]\n\
+ str r5, [sp, 0x10]\n\
+ mov r0, r8\n\
+ movs r1, 0\n\
+ movs r2, 0x4\n\
+ bl sub_8095C8C\n\
+ ldr r3, _080F0538 @ =gUnknown_08E9FD64\n\
+ str r4, [sp]\n\
+ str r4, [sp, 0x4]\n\
+ str r5, [sp, 0x8]\n\
+ str r6, [sp, 0xC]\n\
+ str r5, [sp, 0x10]\n\
+ mov r0, r8\n\
+ movs r1, 0\n\
+ movs r2, 0x8\n\
+ bl sub_8095C8C\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F0530: .4byte 0x0600e800\n\
+_080F0534: .4byte gUnknown_08E9FE54\n\
+_080F0538: .4byte gUnknown_08E9FD64\n\
+_080F053C:\n\
+ ldr r0, _080F0548 @ =gUnknown_083E0354\n\
+ ldr r1, _080F054C @ =0x06005000\n\
+ bl LZ77UnCompVram\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F0548: .4byte gUnknown_083E0354\n\
+_080F054C: .4byte 0x06005000\n\
+_080F0550:\n\
+ ldr r2, _080F0568 @ =0x0600f800\n\
+ add r1, sp, 0x14\n\
+ movs r0, 0\n\
+ strh r0, [r1]\n\
+ ldr r0, _080F056C @ =0x040000d4\n\
+ str r1, [r0]\n\
+ str r2, [r0, 0x4]\n\
+ ldr r1, _080F0570 @ =0x81000400\n\
+ str r1, [r0, 0x8]\n\
+ ldr r0, [r0, 0x8]\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F0568: .4byte 0x0600f800\n\
+_080F056C: .4byte 0x040000d4\n\
+_080F0570: .4byte 0x81000400\n\
+_080F0574:\n\
+ bl sub_80F0900\n\
+ b _080F0618\n\
+_080F057A:\n\
+ bl sub_80F0944\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080F0618\n\
+ b _080F0626\n\
+_080F0586:\n\
+ ldr r0, _080F059C @ =gUnknown_083DFEC4\n\
+ ldr r4, [r0]\n\
+ ldr r1, _080F05A0 @ =0x000087ca\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x2\n\
+ beq _080F05A4\n\
+ bl ShowMapNamePopUpWindow\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F059C: .4byte gUnknown_083DFEC4\n\
+_080F05A0: .4byte 0x000087ca\n\
+_080F05A4:\n\
+ movs r0, 0\n\
+ bl sub_80F081C\n\
+ ldr r2, _080F05B8 @ =0x0000876e\n\
+ adds r0, r4, r2\n\
+ ldrb r0, [r0]\n\
+ bl sub_80F0FFC\n\
+ b _080F0618\n\
+ .align 2, 0\n\
+_080F05B8: .4byte 0x0000876e\n\
+_080F05BC:\n\
+ ldr r1, _080F0600 @ =REG_BG2CNT\n\
+ ldr r3, _080F0604 @ =0x00001d0a\n\
+ adds r0, r3, 0\n\
+ strh r0, [r1]\n\
+ adds r1, 0x2\n\
+ adds r3, 0xF9\n\
+ adds r0, r3, 0\n\
+ strh r0, [r1]\n\
+ subs r1, 0x6\n\
+ adds r3, 0xFE\n\
+ adds r0, r3, 0\n\
+ strh r0, [r1]\n\
+ adds r1, 0x16\n\
+ movs r0, 0xF8\n\
+ strh r0, [r1]\n\
+ ldr r1, [r2]\n\
+ ldr r0, _080F0608 @ =0x00008776\n\
+ adds r2, r1, r0\n\
+ movs r3, 0\n\
+ movs r0, 0xF8\n\
+ strh r0, [r2]\n\
+ ldr r2, _080F060C @ =0x00008778\n\
+ adds r0, r1, r2\n\
+ strh r3, [r0]\n\
+ ldr r0, _080F0610 @ =REG_BLDCNT\n\
+ strh r3, [r0]\n\
+ ldr r3, _080F0614 @ =0x0000d160\n\
+ adds r1, r3\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+_080F05FA:\n\
+ movs r0, 0\n\
+ b _080F0628\n\
+ .align 2, 0\n\
+_080F0600: .4byte REG_BG2CNT\n\
+_080F0604: .4byte 0x00001d0a\n\
+_080F0608: .4byte 0x00008776\n\
+_080F060C: .4byte 0x00008778\n\
+_080F0610: .4byte REG_BLDCNT\n\
+_080F0614: .4byte 0x0000d160\n\
+_080F0618:\n\
+ ldr r0, _080F0634 @ =gUnknown_083DFEC4\n\
+ ldr r1, [r0]\n\
+ ldr r0, _080F0638 @ =0x00000306\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+_080F0626:\n\
+ movs r0, 0x1\n\
+_080F0628:\n\
+ add sp, 0x18\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080F0634: .4byte gUnknown_083DFEC4\n\
+_080F0638: .4byte 0x00000306\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING