diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/field/region_map.c | 168 | ||||
-rw-r--r-- | src/field/use_pokeblock.c | 2 | ||||
-rw-r--r-- | src/pokenav_after.c (renamed from src/field/pokenav.c) | 2 | ||||
-rw-r--r-- | src/pokenav_before.c | 5004 |
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 |