summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokenav_unk_5.s1396
-rw-r--r--include/pokenav.h15
-rw-r--r--include/region_map.h6
-rw-r--r--ld_script.txt2
-rw-r--r--src/pokenav.c25
-rwxr-xr-xsrc/pokenav_unk_4.c2
-rwxr-xr-xsrc/pokenav_unk_5.c636
-rw-r--r--src/region_map.c2
8 files changed, 667 insertions, 1417 deletions
diff --git a/asm/pokenav_unk_5.s b/asm/pokenav_unk_5.s
deleted file mode 100644
index add5fb189..000000000
--- a/asm/pokenav_unk_5.s
+++ /dev/null
@@ -1,1396 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
-@ File centered around AllocSubstruct(3)
-
- thumb_func_start sub_81CC4D4
-sub_81CC4D4: @ 81CC4D4
- push {r4,lr}
- movs r0, 0x3
- movs r1, 0x14
- bl AllocSubstruct
- adds r4, r0, 0
- cmp r4, 0
- beq _081CC4F0
- ldr r1, =0x00000884
- movs r0, 0x10
- bl AllocSubstruct
- cmp r0, 0
- bne _081CC4F8
-_081CC4F0:
- movs r0, 0
- b _081CC51A
- .pool
-_081CC4F8:
- ldr r0, =gMapHeader
- ldrb r0, [r0, 0x14]
- bl sub_8124668
- str r0, [r4, 0xC]
- cmp r0, 0
- bne _081CC514
- ldr r0, =sub_81CC568
- b _081CC516
- .pool
-_081CC514:
- ldr r0, =sub_81CC5B4
-_081CC516:
- str r0, [r4, 0x10]
- movs r0, 0x1
-_081CC51A:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81CC4D4
-
- thumb_func_start sub_81CC524
-sub_81CC524: @ 81CC524
- push {lr}
- bl sub_8124658
- ldr r1, =gSaveBlock2Ptr
- ldr r3, [r1]
- movs r1, 0x1
- ands r1, r0
- lsls r1, 3
- ldrb r2, [r3, 0x15]
- movs r0, 0x9
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x15]
- movs r0, 0x10
- bl FreePokenavSubstruct
- movs r0, 0x3
- bl FreePokenavSubstruct
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CC524
-
- thumb_func_start sub_81CC554
-sub_81CC554: @ 81CC554
- push {lr}
- movs r0, 0x3
- bl GetSubstructPtr
- ldr r1, [r0, 0x10]
- bl _call_via_r1
- pop {r1}
- bx r1
- thumb_func_end sub_81CC554
-
- thumb_func_start sub_81CC568
-sub_81CC568: @ 81CC568
- push {r4,lr}
- adds r4, r0, 0
- bl sub_81230AC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _081CC58C
- cmp r0, 0x4
- bgt _081CC582
- cmp r0, 0x3
- beq _081CC588
- b _081CC5AC
-_081CC582:
- cmp r0, 0x5
- beq _081CC59E
- b _081CC5AC
-_081CC588:
- movs r0, 0x1
- b _081CC5AE
-_081CC58C:
- bl sub_8124658
- lsls r0, 24
- cmp r0, 0
- bne _081CC59A
- movs r0, 0x3
- b _081CC5AE
-_081CC59A:
- movs r0, 0x2
- b _081CC5AE
-_081CC59E:
- ldr r0, =sub_81CC5DC
- str r0, [r4, 0x10]
- movs r0, 0x4
- b _081CC5AE
- .pool
-_081CC5AC:
- movs r0, 0
-_081CC5AE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81CC568
-
- thumb_func_start sub_81CC5B4
-sub_81CC5B4: @ 81CC5B4
- push {lr}
- adds r2, r0, 0
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _081CC5CC
- movs r0, 0
- b _081CC5D2
- .pool
-_081CC5CC:
- ldr r0, =sub_81CC5DC
- str r0, [r2, 0x10]
- movs r0, 0x4
-_081CC5D2:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81CC5B4
-
- thumb_func_start sub_81CC5DC
-sub_81CC5DC: @ 81CC5DC
- ldr r0, =0x000186a1
- bx lr
- .pool
- thumb_func_end sub_81CC5DC
-
- thumb_func_start sub_81CC5E4
-sub_81CC5E4: @ 81CC5E4
- push {lr}
- movs r0, 0x3
- bl GetSubstructPtr
- ldr r0, [r0, 0xC]
- pop {r1}
- bx r1
- thumb_func_end sub_81CC5E4
-
- thumb_func_start sub_81CC5F4
-sub_81CC5F4: @ 81CC5F4
- push {r4,lr}
- ldr r1, =0x00001948
- movs r0, 0x4
- bl AllocSubstruct
- adds r4, r0, 0
- cmp r4, 0
- beq _081CC624
- ldr r0, =sub_81CC6F4
- movs r1, 0x1
- bl CreateLoopedTask
- str r0, [r4, 0x4]
- ldr r0, =sub_81CC6BC
- str r0, [r4]
- movs r0, 0x1
- b _081CC626
- .pool
-_081CC624:
- movs r0, 0
-_081CC626:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81CC5F4
-
- thumb_func_start sub_81CC62C
-sub_81CC62C: @ 81CC62C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x4
- bl GetSubstructPtr
- adds r5, r0, 0
- ldr r0, =gUnknown_086230E4
- lsls r4, 2
- adds r4, r0
- ldr r0, [r4]
- movs r1, 0x1
- bl CreateLoopedTask
- str r0, [r5, 0x4]
- ldr r0, =sub_81CC6BC
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CC62C
-
- thumb_func_start sub_81CC65C
-sub_81CC65C: @ 81CC65C
- push {lr}
- movs r0, 0x4
- bl GetSubstructPtr
- ldr r0, [r0]
- bl _call_via_r0
- pop {r1}
- bx r1
- thumb_func_end sub_81CC65C
-
- thumb_func_start sub_81CC670
-sub_81CC670: @ 81CC670
- push {r4,lr}
- movs r0, 0x4
- bl GetSubstructPtr
- adds r4, r0, 0
- bl FreeRegionMapIconResources
- bl sub_81CC9EC
- ldrb r0, [r4, 0x8]
- bl RemoveWindow
- movs r0, 0x10
- bl FreePokenavSubstruct
- movs r0, 0x4
- bl FreePokenavSubstruct
- bl SetPokenavVBlankCallback
- movs r0, 0
- bl SetBgMode
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81CC670
-
- thumb_func_start sub_81CC6A4
-sub_81CC6A4: @ 81CC6A4
- push {lr}
- bl TransferPlttBuffer
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl UpdateRegionMapVideoRegs
- pop {r0}
- bx r0
- thumb_func_end sub_81CC6A4
-
- thumb_func_start sub_81CC6BC
-sub_81CC6BC: @ 81CC6BC
- push {lr}
- movs r0, 0x4
- bl GetSubstructPtr
- ldr r0, [r0, 0x4]
- bl IsLoopedTaskActive
- pop {r1}
- bx r1
- thumb_func_end sub_81CC6BC
-
- thumb_func_start sub_81CC6D0
-sub_81CC6D0: @ 81CC6D0
- push {lr}
- bl sub_81CC5E4
- cmp r0, 0
- bne _081CC6EC
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- lsrs r0, 3
- movs r1, 0x1
- ands r0, r1
- b _081CC6EE
- .pool
-_081CC6EC:
- movs r0, 0
-_081CC6EE:
- pop {r1}
- bx r1
- thumb_func_end sub_81CC6D0
-
- thumb_func_start sub_81CC6F4
-sub_81CC6F4: @ 81CC6F4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x4
- bl GetSubstructPtr
- adds r5, r0, 0
- cmp r4, 0x7
- bls _081CC706
- b _081CC83E
-_081CC706:
- lsls r0, r4, 2
- ldr r1, =_081CC714
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081CC714:
- .4byte _081CC734
- .4byte _081CC784
- .4byte _081CC7B6
- .4byte _081CC7BE
- .4byte _081CC7CE
- .4byte _081CC7E2
- .4byte _081CC804
- .4byte _081CC82A
-_081CC734:
- movs r0, 0
- bl SetVBlankCallback_
- movs r0, 0x1
- bl HideBg
- movs r0, 0x2
- bl HideBg
- movs r0, 0x3
- bl HideBg
- movs r0, 0x1
- bl SetBgMode
- ldr r4, =gUnknown_086230D8
- adds r0, r4, 0
- movs r1, 0x2
- bl InitBgTemplates
- movs r0, 0x10
- bl GetSubstructPtr
- adds r5, r0, 0
- adds r4, 0x4
- bl sub_81CC6D0
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_8122CF8
- bl sub_81CC9C0
-_081CC77C:
- movs r0, 0
- b _081CC840
- .pool
-_081CC784:
- bl sub_8122DB0
- lsls r0, 24
- cmp r0, 0
- bne _081CC83A
- bl sub_81CC5E4
- cmp r0, 0
- bne _081CC7AC
- movs r0, 0x4
- movs r1, 0x9
- bl CreateRegionMapPlayerIcon
- movs r0, 0x5
- movs r1, 0xA
- bl CreateRegionMapCursor
- bl sub_812454C
- b _081CC77C
-_081CC7AC:
- movs r0, 0
- movs r1, 0x6
- bl sub_8123030
- b _081CC77C
-_081CC7B6:
- bl sub_81CCD10
-_081CC7BA:
- movs r0, 0x1
- b _081CC840
-_081CC7BE:
- bl sub_81CCD24
- cmp r0, 0
- bne _081CC83A
- adds r0, r5, 0
- bl sub_81CCA1C
- b _081CC7BA
-_081CC7CE:
- bl sub_81CCAFC
- cmp r0, 0
- bne _081CC83A
- adds r0, r5, 0
- bl sub_81CCB0C
- bl sub_81C7B40
- b _081CC77C
-_081CC7E2:
- adds r0, r5, 0
- bl sub_81CCC4C
- cmp r0, 0
- bne _081CC83A
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- ldr r0, =sub_81CC6A4
- bl SetVBlankCallback_
- b _081CC77C
- .pool
-_081CC804:
- bl sub_81CC6D0
- lsls r0, 24
- movs r4, 0x5
- cmp r0, 0
- bne _081CC812
- movs r4, 0x4
-_081CC812:
- adds r0, r4, 0
- bl LoadLeftHeaderGfxForIndex
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x1
- bl sub_81C7FA0
- movs r0, 0x1
- bl sub_81C7AC0
- b _081CC77C
-_081CC82A:
- bl IsPaletteFadeActive
- cmp r0, 0
- bne _081CC83A
- bl sub_81C8010
- cmp r0, 0
- beq _081CC7BA
-_081CC83A:
- movs r0, 0x2
- b _081CC840
-_081CC83E:
- movs r0, 0x4
-_081CC840:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81CC6F4
-
- thumb_func_start sub_81CC848
-sub_81CC848: @ 81CC848
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x4
- bl GetSubstructPtr
- cmp r4, 0
- beq _081CC85C
- cmp r4, 0x1
- beq _081CC864
- b _081CC870
-_081CC85C:
- bl sub_81CCB0C
- movs r0, 0
- b _081CC872
-_081CC864:
- bl sub_81CCC4C
- cmp r0, 0
- beq _081CC870
- movs r0, 0x2
- b _081CC872
-_081CC870:
- movs r0, 0x4
-_081CC872:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81CC848
-
- thumb_func_start sub_81CC878
-sub_81CC878: @ 81CC878
- push {lr}
- cmp r0, 0x1
- beq _081CC8A2
- cmp r0, 0x1
- bgt _081CC888
- cmp r0, 0
- beq _081CC88E
- b _081CC8D0
-_081CC888:
- cmp r0, 0x2
- beq _081CC8BE
- b _081CC8D0
-_081CC88E:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0
- bl sub_81CCC5C
- bl sub_8123418
- movs r0, 0
- b _081CC8D2
-_081CC8A2:
- bl sub_8123514
- lsls r0, 24
- cmp r0, 0
- bne _081CC8C6
- bl sub_81CCC88
- cmp r0, 0
- bne _081CC8C6
- movs r0, 0x1
- bl sub_81C7BA4
- movs r0, 0
- b _081CC8D2
-_081CC8BE:
- bl IsDma3ManagerBusyWithBgCopy_
- cmp r0, 0
- beq _081CC8CA
-_081CC8C6:
- movs r0, 0x2
- b _081CC8D2
-_081CC8CA:
- movs r0, 0x4
- bl sub_81C7E14
-_081CC8D0:
- movs r0, 0x4
-_081CC8D2:
- pop {r1}
- bx r1
- thumb_func_end sub_81CC878
-
- thumb_func_start sub_81CC8D8
-sub_81CC8D8: @ 81CC8D8
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x4
- bl GetSubstructPtr
- adds r5, r0, 0
- cmp r4, 0x1
- beq _081CC90C
- cmp r4, 0x1
- bgt _081CC8F2
- cmp r4, 0
- beq _081CC8FC
- b _081CC952
-_081CC8F2:
- cmp r4, 0x2
- beq _081CC924
- cmp r4, 0x3
- beq _081CC940
- b _081CC952
-_081CC8FC:
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- bl sub_81CCB0C
- movs r0, 0
- b _081CC954
-_081CC90C:
- adds r0, r5, 0
- bl sub_81CCC4C
- cmp r0, 0
- bne _081CC948
- movs r0, 0x1
- bl sub_81CCC5C
- bl sub_8123418
- movs r0, 0
- b _081CC954
-_081CC924:
- bl sub_8123514
- lsls r0, 24
- cmp r0, 0
- bne _081CC948
- bl sub_81CCC88
- cmp r0, 0
- bne _081CC948
- movs r0, 0x2
- bl sub_81C7BA4
- movs r0, 0
- b _081CC954
-_081CC940:
- bl IsDma3ManagerBusyWithBgCopy_
- cmp r0, 0
- beq _081CC94C
-_081CC948:
- movs r0, 0x2
- b _081CC954
-_081CC94C:
- movs r0, 0x5
- bl sub_81C7E14
-_081CC952:
- movs r0, 0x4
-_081CC954:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81CC8D8
-
- thumb_func_start sub_81CC95C
-sub_81CC95C: @ 81CC95C
- push {lr}
- cmp r0, 0x1
- beq _081CC982
- cmp r0, 0x1
- bgt _081CC96C
- cmp r0, 0
- beq _081CC972
- b _081CC9B8
-_081CC96C:
- cmp r0, 0x2
- beq _081CC996
- b _081CC9B8
-_081CC972:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0
- bl sub_81C7AC0
- movs r0, 0
- b _081CC9BA
-_081CC982:
- bl IsPaletteFadeActive
- cmp r0, 0
- bne _081CC99E
- bl sub_81C7FDC
- bl sub_81C78A0
- movs r0, 0
- b _081CC9BA
-_081CC996:
- bl MainMenuLoopedTaskIsBusy
- cmp r0, 0
- beq _081CC9A2
-_081CC99E:
- movs r0, 0x2
- b _081CC9BA
-_081CC9A2:
- movs r0, 0x1
- bl HideBg
- movs r0, 0x2
- bl HideBg
- movs r0, 0x3
- bl HideBg
- movs r0, 0
- b _081CC9BA
-_081CC9B8:
- movs r0, 0x4
-_081CC9BA:
- pop {r1}
- bx r1
- thumb_func_end sub_81CC95C
-
- thumb_func_start sub_81CC9C0
-sub_81CC9C0: @ 81CC9C0
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, =gUnknown_086230F8
-_081CC9C6:
- adds r0, r4, 0
- bl LoadCompressedSpriteSheet
- adds r4, 0x8
- adds r5, 0x1
- cmp r5, 0
- beq _081CC9C6
- ldr r0, =gUnknown_08623100
- bl Pokenav_AllocAndLoadPalettes
- bl sub_81CCE58
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CC9C0
-
- thumb_func_start sub_81CC9EC
-sub_81CC9EC: @ 81CC9EC
- push {r4,r5,lr}
- movs r0, 0x4
- bl GetSubstructPtr
- adds r4, r0, 0
- movs r0, 0x6
- bl FreeSpriteTilesByTag
- movs r0, 0xB
- bl FreeSpritePaletteByTag
- adds r5, r4, 0
- adds r5, 0xC
- movs r4, 0x2
-_081CCA08:
- ldm r5!, {r0}
- bl DestroySprite
- subs r4, 0x1
- cmp r4, 0
- bge _081CCA08
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81CC9EC
-
- thumb_func_start sub_81CCA1C
-sub_81CCA1C: @ 81CCA1C
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x40
- movs r3, 0x1
- bl sub_8199DF0
- movs r0, 0x1
- movs r1, 0x11
- movs r2, 0x41
- movs r3, 0x1
- bl sub_8199DF0
- add r1, sp, 0x4
- movs r2, 0x82
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- adds r4, r5, 0
- adds r4, 0x18
- ldr r2, =0x01000400
- adds r0, r1, 0
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0x1
- adds r1, r4, 0
- bl SetBgTilemapBuffer
- ldr r0, =gUnknown_08623110
- bl AddWindow
- movs r4, 0
- strh r0, [r5, 0x8]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x42
- movs r2, 0x40
- bl LoadUserWindowBorderGfx_
- ldrb r0, [r5, 0x8]
- movs r1, 0x42
- movs r2, 0x4
- bl DrawTextBorderOuter
- ldr r1, =gUnknown_08622888
- str r4, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl decompress_and_copy_tile_data_to_vram
- ldrb r0, [r5, 0x8]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r5, 0x8]
- bl PutWindowTilemap
- ldrb r0, [r5, 0x8]
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r0, =gUnknown_08622868
- movs r1, 0x10
- movs r2, 0x20
- bl CopyPaletteIntoBufferUnfaded
- ldr r0, =gHoennMapZoomIcons_Pal
- movs r1, 0x30
- movs r2, 0x20
- bl CopyPaletteIntoBufferUnfaded
- bl sub_8124658
- lsls r0, 24
- cmp r0, 0
- bne _081CCAE0
- ldr r1, =0xffffa000
- movs r0, 0x1
- movs r2, 0
- bl ChangeBgY
- b _081CCAEA
- .pool
-_081CCAE0:
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
-_081CCAEA:
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81CCA1C
-
- thumb_func_start sub_81CCAFC
-sub_81CCAFC: @ 81CCAFC
- push {lr}
- bl free_temp_tile_data_buffers_if_possible
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_81CCAFC
-
- thumb_func_start sub_81CCB0C
-sub_81CCB0C: @ 81CCB0C
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r0, 0x10
- bl GetSubstructPtr
- adds r5, r0, 0
- ldrb r0, [r5, 0x2]
- cmp r0, 0x4
- bls _081CCB22
- b _081CCC40
-_081CCB22:
- lsls r0, 2
- ldr r1, =_081CCB30
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081CCB30:
- .4byte _081CCC1C
- .4byte _081CCBDC
- .4byte _081CCB44
- .4byte _081CCB8E
- .4byte _081CCBDC
-_081CCB44:
- ldrb r0, [r4, 0x8]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r4, 0x8]
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0xC
- bl PutWindowRectTilemap
- ldrb r0, [r4, 0x8]
- adds r2, r5, 0x4
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x7
- movs r3, 0
- bl AddTextPrinterParameterized
- ldrh r1, [r5]
- ldrb r2, [r5, 0x3]
- adds r0, r4, 0
- bl sub_81CCD70
- ldrb r0, [r4, 0x8]
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0
- bl sub_81CCFA4
- b _081CCC40
-_081CCB8E:
- ldrb r0, [r4, 0x8]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r4, 0x8]
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0xC
- bl PutWindowRectTilemap
- ldrb r0, [r4, 0x8]
- adds r2, r5, 0x4
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x7
- movs r3, 0
- bl AddTextPrinterParameterized
- ldr r1, =0x00001041
- movs r0, 0xC
- str r0, [sp]
- movs r0, 0xB
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x11
- movs r3, 0x6
- bl FillBgTilemapBufferRect
- b _081CCC0C
- .pool
-_081CCBDC:
- ldrb r0, [r4, 0x8]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldrb r0, [r4, 0x8]
- bl PutWindowTilemap
- ldrb r0, [r4, 0x8]
- adds r2, r5, 0x4
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x7
- movs r3, 0
- bl AddTextPrinterParameterized
- ldrh r1, [r5]
- ldrb r2, [r5, 0x3]
- adds r0, r4, 0
- bl sub_81CCDE8
-_081CCC0C:
- ldrb r0, [r4, 0x8]
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0x1
- bl sub_81CCFA4
- b _081CCC40
-_081CCC1C:
- ldr r1, =0x00001041
- movs r0, 0xC
- str r0, [sp]
- movs r0, 0xD
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r2, 0x11
- movs r3, 0x4
- bl FillBgTilemapBufferRect
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- movs r0, 0x1
- bl sub_81CCFA4
-_081CCC40:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CCB0C
-
- thumb_func_start sub_81CCC4C
-sub_81CCC4C: @ 81CCC4C
- push {lr}
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_81CCC4C
-
- thumb_func_start sub_81CCC5C
-sub_81CCC5C: @ 81CCC5C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =sub_81CCC9C
- movs r1, 0x3
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CCC5C
-
- thumb_func_start sub_81CCC88
-sub_81CCC88: @ 81CCC88
- push {lr}
- ldr r0, =sub_81CCC9C
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81CCC88
-
- thumb_func_start sub_81CCC9C
-sub_81CCC9C: @ 81CCC9C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _081CCCE0
- movs r1, 0x90
- lsls r1, 3
- movs r0, 0x1
- movs r2, 0x1
- bl ChangeBgY
- cmp r0, 0
- blt _081CCCD6
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- adds r0, r4, 0
- bl DestroyTask
-_081CCCD6:
- bl sub_81CCF78
- b _081CCD04
- .pool
-_081CCCE0:
- movs r1, 0x90
- lsls r1, 3
- movs r0, 0x1
- movs r2, 0x2
- bl ChangeBgY
- ldr r1, =0xffffa000
- cmp r0, r1
- bgt _081CCD00
- movs r0, 0x1
- movs r2, 0
- bl ChangeBgY
- adds r0, r5, 0
- bl DestroyTask
-_081CCD00:
- bl sub_81CCF78
-_081CCD04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CCC9C
-
- thumb_func_start sub_81CCD10
-sub_81CCD10: @ 81CCD10
- push {lr}
- ldr r0, =sub_81CCD34
- movs r1, 0x1
- bl CreateLoopedTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CCD10
-
- thumb_func_start sub_81CCD24
-sub_81CCD24: @ 81CCD24
- push {lr}
- ldr r0, =sub_81CCD34
- bl FuncIsActiveLoopedTask
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81CCD24
-
- thumb_func_start sub_81CCD34
-sub_81CCD34: @ 81CCD34
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x4
- bl GetSubstructPtr
- adds r2, r0, 0
- cmp r4, 0x15
- ble _081CCD48
- movs r0, 0x4
- b _081CCD62
-_081CCD48:
- ldr r0, =gUnknown_08623118
- lsls r1, r4, 3
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- movs r1, 0xC8
- muls r1, r4
- ldr r3, =0x00000818
- adds r1, r3
- adds r1, r2, r1
- bl LZ77UnCompWram
- movs r0, 0x1
-_081CCD62:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81CCD34
-
- thumb_func_start sub_81CCD70
-sub_81CCD70: @ 81CCD70
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r0, 0
- adds r3, r1, 0
- movs r4, 0
- ldr r0, =gUnknown_08623118
- ldrh r1, [r0]
- adds r5, r0, 0
- cmp r1, r3
- bne _081CCD8A
- ldrh r0, [r5, 0x2]
- cmp r0, r2
- beq _081CCDA0
-_081CCD8A:
- adds r4, 0x1
- cmp r4, 0x15
- bgt _081CCDA0
- lsls r0, r4, 3
- adds r1, r0, r5
- ldrh r0, [r1]
- cmp r0, r3
- bne _081CCD8A
- ldrh r0, [r1, 0x2]
- cmp r0, r2
- bne _081CCD8A
-_081CCDA0:
- cmp r4, 0x16
- beq _081CCDD4
- ldr r1, =0x00001041
- movs r0, 0xC
- str r0, [sp]
- movs r0, 0xB
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r2, 0x11
- movs r3, 0x6
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0xC8
- adds r1, r4, 0
- muls r1, r0
- ldr r0, =0x00000818
- adds r1, r0
- adds r1, r6, r1
- movs r0, 0xA
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r2, 0x12
- movs r3, 0x6
- bl CopyToBgTilemapBufferRect
-_081CCDD4:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CCD70
-
- thumb_func_start sub_81CCDE8
-sub_81CCDE8: @ 81CCDE8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0xC
- mov r9, r0
- movs r5, 0
- ldr r6, =gStringVar1
- movs r4, 0x88
- lsls r4, 21
- lsls r1, 24
- mov r8, r1
- lsls r7, r2, 24
- b _081CCE34
- .pool
-_081CCE08:
- adds r0, r6, 0
- movs r2, 0
- movs r3, 0xC
- bl StringCopyPadded
- mov r1, r9
- ldrb r0, [r1, 0x8]
- lsrs r1, r4, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x7
- adds r2, r6, 0
- movs r3, 0
- bl AddTextPrinterParameterized
- movs r0, 0x80
- lsls r0, 21
- adds r4, r0
- adds r5, 0x1
-_081CCE34:
- lsls r2, r5, 24
- lsrs r2, 24
- mov r1, r8
- lsrs r0, r1, 24
- lsrs r1, r7, 24
- bl GetLandmarkName
- adds r1, r0, 0
- cmp r1, 0
- bne _081CCE08
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81CCDE8
-
- thumb_func_start sub_81CCE58
-sub_81CCE58: @ 81CCE58
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r0, 0x4
- bl GetSubstructPtr
- adds r4, r0, 0
- bl sub_8124658
- lsls r0, 24
- movs r2, 0x84
- cmp r0, 0
- bne _081CCE74
- movs r2, 0xE4
-_081CCE74:
- movs r5, 0
- lsls r7, r2, 16
- adds r4, 0xC
- mov r8, r4
- movs r6, 0x98
- lsls r6, 16
-_081CCE80:
- asrs r1, r6, 16
- ldr r0, =gUnknown_086231D0
- asrs r2, r7, 16
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, =gSprites
- adds r2, r0
- movs r0, 0
- strh r0, [r2, 0x2E]
- lsls r4, r5, 2
- strh r4, [r2, 0x30]
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r0, r1, 22
- adds r1, r0, 0
- strh r0, [r2, 0x32]
- movs r0, 0x96
- strh r0, [r2, 0x34]
- strh r4, [r2, 0x36]
- adds r1, r4
- ldr r4, =0x000003ff
- adds r0, r4, 0
- ands r1, r0
- ldr r4, =0xfffffc00
- adds r0, r4, 0
- ands r3, r0
- orrs r3, r1
- strh r3, [r2, 0x4]
- mov r0, r8
- adds r0, 0x4
- mov r8, r0
- subs r0, 0x4
- stm r0!, {r2}
- movs r4, 0x80
- lsls r4, 14
- adds r6, r4
- adds r5, 0x1
- cmp r5, 0x2
- ble _081CCE80
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81CCE58
-
- thumb_func_start sub_81CCEF4
-sub_81CCEF4: @ 81CCEF4
- push {r4,r5,lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x34]
- movs r1, 0x34
- ldrsh r4, [r3, r1]
- cmp r4, 0
- beq _081CCF06
- subs r0, 0x1
- b _081CCF6E
-_081CCF06:
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- ble _081CCF16
- strh r4, [r3, 0x2E]
-_081CCF16:
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3C
- ble _081CCF26
- strh r4, [r3, 0x30]
-_081CCF26:
- ldrh r5, [r3, 0x30]
- ldrh r2, [r3, 0x32]
- adds r1, r5, r2
- ldr r2, =0x000003ff
- adds r0, r2, 0
- ands r1, r0
- ldrh r2, [r3, 0x4]
- ldr r0, =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, 0x4]
- ldrh r1, [r3, 0x38]
- movs r2, 0x38
- ldrsh r0, [r3, r2]
- cmp r0, 0x3
- bgt _081CCF5C
- movs r2, 0x2E
- ldrsh r0, [r3, r2]
- cmp r0, 0
- bne _081CCF70
- adds r0, r1, 0x1
- strh r0, [r3, 0x38]
- b _081CCF6C
- .pool
-_081CCF5C:
- lsls r0, r5, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r3, r2]
- cmp r0, r1
- bne _081CCF70
- strh r4, [r3, 0x38]
- strh r4, [r3, 0x2E]
-_081CCF6C:
- movs r0, 0x78
-_081CCF6E:
- strh r0, [r3, 0x34]
-_081CCF70:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81CCEF4
-
- thumb_func_start sub_81CCF78
-sub_81CCF78: @ 81CCF78
- push {r4,lr}
- movs r0, 0x4
- bl GetSubstructPtr
- adds r4, r0, 0
- movs r0, 0x1
- bl GetBgY
- asrs r0, 8
- movs r1, 0x84
- subs r1, r0
- adds r4, 0xC
- movs r2, 0x2
-_081CCF92:
- ldm r4!, {r0}
- strh r1, [r0, 0x22]
- subs r2, 0x1
- cmp r2, 0
- bge _081CCF92
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81CCF78
-
- thumb_func_start sub_81CCFA4
-sub_81CCFA4: @ 81CCFA4
- push {r4-r6,lr}
- adds r4, r0, 0
- movs r0, 0x4
- bl GetSubstructPtr
- movs r1, 0x1
- ands r4, r1
- lsls r5, r4, 2
- movs r6, 0x5
- negs r6, r6
- adds r4, r0, 0
- adds r4, 0xC
- movs r3, 0x2
-_081CCFBE:
- ldm r4!, {r0}
- adds r0, 0x3E
- ldrb r2, [r0]
- adds r1, r6, 0
- ands r1, r2
- orrs r1, r5
- strb r1, [r0]
- subs r3, 0x1
- cmp r3, 0
- bge _081CCFBE
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81CCFA4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/pokenav.h b/include/pokenav.h
index 443ab11d5..0d46f04f3 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -2,6 +2,7 @@
#define GUARD_POKENAV_H
#include "bg.h"
+#include "main.h"
typedef u32 (*LoopedTask)(int state);
@@ -55,6 +56,8 @@ bool32 IsLoopedTaskActive(u32 taskId);
void SetPokenavMode(u16 mode);
u32 GetPokenavMode(void);
bool32 CanViewRibbonsMenu(void);
+void SetPokenavVBlankCallback(void);
+void SetVBlankCallback_(IntrCallback callback);
// pokenav_match_call_ui.c
struct MatchCallListTemplate
@@ -121,6 +124,7 @@ void sub_81C79BC(const u16 *a0, const u16 *a1, u32 a2, u32 a3, u32 a4, u16 *a5);
void sub_81C7B40(void);
struct Sprite *PauseSpinningPokenavSprite(void);
void ResumeSpinningPokenavSprite(void);
+void sub_81C7E14(u32 arg0);
// pokenav_unk_1.c
bool32 sub_81C9298(void);
@@ -164,10 +168,19 @@ bool32 sub_81CAE08(int);
int sub_81CB128(int index);
// pokenav_unk_4.c
-u32 sub_81CB260(void);
+bool32 sub_81CB260(void);
void sub_81CB29C(int index);
u32 sub_81CB2CC(void);
void sub_81CB2E0(void);
void sub_81CBD48(u16 windowId, u32 a1);
+// pokenav_unk_5.c
+u32 sub_81CC4D4(void);
+void sub_81CC524(void);
+u32 sub_81CC554(void);
+bool32 sub_81CC5F4(void);
+void sub_81CC62C(int);
+u32 sub_81CC65C(void);
+void sub_81CC670(void);
+
#endif //GUARD_POKENAV_H
diff --git a/include/region_map.h b/include/region_map.h
index ed1c1a201..798e6f56d 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -90,7 +90,7 @@ struct RegionMapLocation
// Exported RAM declarations
// Exported ROM declarations
-void sub_8122CF8(struct RegionMap *regionMap, struct BgTemplate *template, bool8 zoomed);
+void sub_8122CF8(struct RegionMap *regionMap, const struct BgTemplate *template, bool8 zoomed);
bool8 sub_8122DB0(void);
void UpdateRegionMapVideoRegs(void);
void InitRegionMap(struct RegionMap *regionMap, u8 argument);
@@ -108,6 +108,10 @@ u16 CorrectSpecialMapSecId(u16 mapSecId);
void sub_8122D88(struct RegionMap *regionMap);
void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y);
void MCB2_FlyMap(void);
+bool8 sub_8124658(void);
+void sub_812454C(void);
+void sub_8123030(u16 a0, u32 a1);
+void sub_8123418(void);
extern const struct RegionMapLocation gRegionMapEntries[];
diff --git a/ld_script.txt b/ld_script.txt
index 68d7cb19e..f210e83ca 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -307,7 +307,7 @@ SECTIONS {
asm/pokenav_unk_2.o(.text);
src/pokenav_unk_3.o(.text);
src/pokenav_unk_4.o(.text);
- asm/pokenav_unk_5.o(.text);
+ src/pokenav_unk_5.o(.text);
asm/pokenav_unk_6.o(.text);
asm/pokenav_unk_7.o(.text);
asm/pokenav_unk_8.o(.text);
diff --git a/src/pokenav.c b/src/pokenav.c
index 5556dbc42..be3826bed 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -30,57 +30,50 @@ struct UnknownPokenavCallbackStruct
{
bool32 (*unk0)(void);
u32 (*unk4)(void);
- u32 (*unk8)(void);
+ bool32 (*unk8)(void);
void (*unkC)(int);
u32 (*unk10)(void);
void (*unk14)(void);
void (*unk18)(void);
};
-extern u32 sub_81C9924(void);
+extern bool32 sub_81C9924(void);
extern u32 sub_81C99C0(void);
extern void sub_81C9990(int);
-extern u32 sub_81C9940(void);
-extern u32 sub_81CC4D4(void);
-extern u32 sub_81CC554(void);
-extern u32 sub_81CC5F4(void);
-extern void sub_81CC62C(int);
-extern u32 sub_81CC65C(void);
-extern void sub_81CC524(void);
-extern void sub_81CC670(void);
+extern bool32 sub_81C9940(void);
extern u32 sub_81CCFD8(void);
extern u32 sub_81CD070(void);
-extern u32 sub_81CDDD4(void);
+extern bool32 sub_81CDDD4(void);
extern void sub_81CDE2C(int);
extern u32 sub_81CDE64(void);
extern void sub_81CD1C0(void);
extern void sub_81CECA0(void);
extern u32 sub_81CEF3C(void);
extern u32 sub_81CEFDC(void);
-extern u32 sub_81CF330(void);
+extern bool32 sub_81CF330(void);
extern void sub_81CF3A0(int);
extern u32 sub_81CF3D0(void);
extern void sub_81CEFF0(void);
extern void sub_81CF3F8(void);
extern u32 sub_81CD024(void);
extern u32 sub_81CEF98(void);
-extern u32 sub_81CF368(void);
+extern bool32 sub_81CF368(void);
extern u32 sub_81CF9BC(void);
extern u32 sub_81CFA34(void);
-extern u32 sub_81CFDD0(void);
+extern bool32 sub_81CFDD0(void);
extern void sub_81CFE40(int);
extern u32 sub_81CFE70(void);
extern void sub_81CFA48(void);
extern void sub_81CFE98(void);
extern u32 sub_81D0450(void);
extern u32 sub_81D04A0(void);
-extern u32 sub_81D0978(void);
+extern bool32 sub_81D0978(void);
extern void sub_81D09B0(int);
extern u32 sub_81D09E0(void);
extern void sub_81D04B8(void);
extern void sub_81D09F4(void);
extern u32 sub_81CFA04(void);
-extern u32 sub_81CFE08(void);
+extern bool32 sub_81CFE08(void);
static bool32 SetActivePokenavMenu(u32 menuId);
static bool32 AnyMonHasRibbon(void);
diff --git a/src/pokenav_unk_4.c b/src/pokenav_unk_4.c
index 38a531bec..6fa76daf2 100755
--- a/src/pokenav_unk_4.c
+++ b/src/pokenav_unk_4.c
@@ -27,7 +27,7 @@
struct Pokenav4Struct
{
- u32 (*unk0)(void);
+ bool32 (*unk0)(void);
u32 unk4;
u8 filler8[0x6];
u8 unkE;
diff --git a/src/pokenav_unk_5.c b/src/pokenav_unk_5.c
new file mode 100755
index 000000000..eccc200d5
--- /dev/null
+++ b/src/pokenav_unk_5.c
@@ -0,0 +1,636 @@
+#include "global.h"
+#include "bg.h"
+#include "decompress.h"
+#include "landmark.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "pokenav.h"
+#include "region_map.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+#include "text_window.h"
+#include "window.h"
+#include "constants/songs.h"
+
+struct Pokenav5Struct
+{
+ u8 filler0[0xC];
+ bool32 unkC;
+ u32 (*unk10)(struct Pokenav5Struct *);
+};
+
+struct Pokenav5Struct_2
+{
+ bool32 (*unk0)(void);
+ u32 unk4;
+ u16 unk8;
+ struct Sprite *cityFeatureTextSprites[3];
+ u8 unk18[0x800];
+ u8 cityZoomPics[22][0xC8];
+};
+
+struct CityZoomPic
+{
+ u16 mapSecId;
+ u16 unk2;
+ const u32 *data;
+};
+
+static u32 sub_81CC568(struct Pokenav5Struct *);
+static u32 sub_81CC5B4(struct Pokenav5Struct *);
+static u32 sub_81CC5DC(struct Pokenav5Struct *);
+static u32 sub_81CC6F4(int);
+static u32 sub_81CCD34(int);
+static bool32 sub_81CC6BC(void);
+static void sub_81CC9EC(void);
+static void sub_81CC9C0(void);
+static void sub_81CCD10(void);
+static bool32 sub_81CCD24(void);
+static void sub_81CCA1C(struct Pokenav5Struct_2 *);
+static bool32 sub_81CCAFC(void);
+static void sub_81CCB0C(struct Pokenav5Struct_2 *);
+static bool32 sub_81CCC4C(struct Pokenav5Struct_2 *);
+static void sub_81CCC5C(int);
+static bool32 sub_81CCC88(void);
+static void sub_81CCE58(void);
+static void sub_81CCD70(struct Pokenav5Struct_2 *, int, int);
+static void sub_81CCDE8(struct Pokenav5Struct_2 *, int, int);
+static void sub_81CCFA4(int);
+static void sub_81CCC9C(u8 taskId);
+static void sub_81CCF78(void);
+
+extern const LoopedTask gUnknown_086230E4[];
+extern const struct BgTemplate gUnknown_086230D8[2];
+extern const struct CompressedSpriteSheet gUnknown_086230F8[1];
+extern const struct SpritePalette gUnknown_08623100[];
+extern const struct WindowTemplate gUnknown_08623110;
+extern const u32 gUnknown_08622888[];
+extern const u16 gUnknown_08622868[];
+extern const u16 gHoennMapZoomIcons_Pal[];
+extern const struct CityZoomPic gUnknown_08623118[22];
+extern const struct SpriteTemplate gUnknown_086231D0;
+
+u32 sub_81CC4D4(void)
+{
+ struct Pokenav5Struct *state = AllocSubstruct(3, sizeof(struct Pokenav5Struct));
+ if (!state)
+ return FALSE;
+
+ if (!AllocSubstruct(16, sizeof(struct RegionMap)))
+ return FALSE;
+
+ state->unkC = sub_8124668(gMapHeader.regionMapSectionId);
+ if (!state->unkC)
+ state->unk10 = sub_81CC568;
+ else
+ state->unk10 = sub_81CC5B4;
+
+ return TRUE;
+}
+
+void sub_81CC524(void)
+{
+ gSaveBlock2Ptr->regionMapZoom = sub_8124658();
+ FreePokenavSubstruct(16);
+ FreePokenavSubstruct(3);
+}
+
+u32 sub_81CC554(void)
+{
+ struct Pokenav5Struct *state = GetSubstructPtr(3);
+ state->unk10(state);
+}
+
+static u32 sub_81CC568(struct Pokenav5Struct *state)
+{
+ switch (sub_81230AC())
+ {
+ case 3:
+ return 1;
+ case 4:
+ if (!sub_8124658())
+ return 3;
+ return 2;
+ case 5:
+ state->unk10 = sub_81CC5DC;
+ return 4;
+ }
+
+ return 0;
+}
+
+static u32 sub_81CC5B4(struct Pokenav5Struct *state)
+{
+ if (gMain.newKeys & B_BUTTON)
+ {
+ state->unk10 = sub_81CC5DC;
+ return 4;
+ }
+
+ return 0;
+}
+
+static u32 sub_81CC5DC(struct Pokenav5Struct *state)
+{
+ return POKENAV_MENU_1;
+}
+
+bool32 sub_81CC5E4(void)
+{
+ struct Pokenav5Struct *state = GetSubstructPtr(3);
+ return state->unkC;
+}
+
+bool32 sub_81CC5F4(void)
+{
+ struct Pokenav5Struct_2 *state = AllocSubstruct(4, sizeof(struct Pokenav5Struct_2));
+ if (!state)
+ return FALSE;
+
+ state->unk4 = CreateLoopedTask(sub_81CC6F4, 1);
+ state->unk0 = sub_81CC6BC;
+ return TRUE;
+}
+
+void sub_81CC62C(int index)
+{
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ state->unk4 = CreateLoopedTask(gUnknown_086230E4[index], 1);
+ state->unk0 = sub_81CC6BC;
+}
+
+u32 sub_81CC65C(void)
+{
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ return state->unk0();
+}
+
+void sub_81CC670(void)
+{
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ FreeRegionMapIconResources();
+ sub_81CC9EC();
+ RemoveWindow(state->unk8);
+ FreePokenavSubstruct(16);
+ FreePokenavSubstruct(4);
+ SetPokenavVBlankCallback();
+ SetBgMode(0);
+}
+
+static void sub_81CC6A4(void)
+{
+ TransferPlttBuffer();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ UpdateRegionMapVideoRegs();
+}
+
+static bool32 sub_81CC6BC(void)
+{
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ return IsLoopedTaskActive(state->unk4);
+}
+
+static bool8 sub_81CC6D0(void)
+{
+ if (sub_81CC5E4())
+ return FALSE;
+
+ return gSaveBlock2Ptr->regionMapZoom == 1;
+}
+
+static u32 sub_81CC6F4(int taskState)
+{
+ int var0;
+ struct RegionMap *regionMap;
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ switch (taskState)
+ {
+ case 0:
+ SetVBlankCallback_(NULL);
+ HideBg(1);
+ HideBg(2);
+ HideBg(3);
+ SetBgMode(1);
+ InitBgTemplates(gUnknown_086230D8, ARRAY_COUNT(gUnknown_086230D8));
+ regionMap = GetSubstructPtr(16);
+ sub_8122CF8(regionMap, &gUnknown_086230D8[1], sub_81CC6D0());
+ sub_81CC9C0();
+ return 0;
+ case 1:
+ if (sub_8122DB0())
+ return 2;
+
+ if (!sub_81CC5E4())
+ {
+ CreateRegionMapPlayerIcon(4, 9);
+ CreateRegionMapCursor(5, 10);
+ sub_812454C();
+ }
+ else
+ {
+ sub_8123030(0, 6);
+ }
+ return 0;
+ case 2:
+ sub_81CCD10();
+ return 1;
+ case 3:
+ if (sub_81CCD24())
+ return 2;
+
+ sub_81CCA1C(state);
+ return 1;
+ case 4:
+ if (sub_81CCAFC())
+ return 2;
+
+ sub_81CCB0C(state);
+ sub_81C7B40();
+ return 0;
+ case 5:
+ if (sub_81CCC4C(state))
+ return 2;
+
+ ShowBg(1);
+ ShowBg(2);
+ SetVBlankCallback_(sub_81CC6A4);
+ return 0;
+ case 6:
+ if (!sub_81CC6D0())
+ var0 = 4;
+ else
+ var0 = 5;
+
+ LoadLeftHeaderGfxForIndex(var0);
+ sub_81C7FA0(var0, 1, 1);
+ sub_81C7AC0(1);
+ return 0;
+ case 7:
+ if (IsPaletteFadeActive() || sub_81C8010())
+ return 2;
+ return 1;
+ default:
+ return 4;
+ }
+}
+
+u32 sub_81CC848(int taskState)
+{
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ switch (taskState)
+ {
+ case 0:
+ sub_81CCB0C(state);
+ return 0;
+ case 1:
+ if (sub_81CCC4C(state))
+ return 2;
+ break;
+ }
+
+ return 4;
+}
+
+u32 sub_81CC878(int taskState)
+{
+ switch (taskState)
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ sub_81CCC5C(0);
+ sub_8123418();
+ return 0;
+ case 1:
+ if (sub_8123514() || sub_81CCC88())
+ return 2;
+
+ sub_81C7BA4(1);
+ return 0;
+ case 2:
+ if (IsDma3ManagerBusyWithBgCopy_())
+ return 2;
+
+ sub_81C7E14(4);
+ break;
+ }
+
+ return 4;
+}
+
+u32 sub_81CC8D8(int taskState)
+{
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ switch (taskState)
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ sub_81CCB0C(state);
+ return 0;
+ case 1:
+ if (sub_81CCC4C(state))
+ return 2;
+
+ sub_81CCC5C(1);
+ sub_8123418();
+ return 0;
+ case 2:
+ if (sub_8123514() || sub_81CCC88())
+ return 2;
+
+ sub_81C7BA4(2);
+ return 0;
+ case 3:
+ if (IsDma3ManagerBusyWithBgCopy_())
+ return 2;
+
+ sub_81C7E14(5);
+ break;
+ }
+
+ return 4;
+}
+
+u32 sub_81CC95C(int taskState)
+{
+ switch (taskState)
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ sub_81C7AC0(0);
+ return 0;
+ case 1:
+ if (IsPaletteFadeActive())
+ return 2;
+
+ sub_81C7FDC();
+ sub_81C78A0();
+ return 0;
+ case 2:
+ if (MainMenuLoopedTaskIsBusy())
+ return 2;
+
+ HideBg(1);
+ HideBg(2);
+ HideBg(3);
+ return 0;
+ }
+
+ return 4;
+}
+
+static void sub_81CC9C0(void)
+{
+ int i;
+ for (i = 0; i < ARRAY_COUNT(gUnknown_086230F8); i++)
+ LoadCompressedSpriteSheet(&gUnknown_086230F8[i]);
+
+ Pokenav_AllocAndLoadPalettes(gUnknown_08623100);
+ sub_81CCE58();
+}
+
+static void sub_81CC9EC(void)
+{
+ int i;
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ FreeSpriteTilesByTag(6);
+ FreeSpritePaletteByTag(11);
+ for (i = 0; i < 3; i++)
+ DestroySprite(state->cityFeatureTextSprites[i]);
+}
+
+static void sub_81CCA1C(struct Pokenav5Struct_2 *state)
+{
+ sub_8199DF0(1, PIXEL_FILL(0), 0x40, 1);
+ sub_8199DF0(1, PIXEL_FILL(1), 0x41, 1);
+ CpuFill16(0x1040, state->unk18, 0x800);
+ SetBgTilemapBuffer(1, state->unk18);
+ state->unk8 = AddWindow(&gUnknown_08623110);
+ LoadUserWindowBorderGfx_(state->unk8, 0x42, 0x40);
+ DrawTextBorderOuter(state->unk8, 0x42, 4);
+ decompress_and_copy_tile_data_to_vram(1, gUnknown_08622888, 0, 0, 0);
+ FillWindowPixelBuffer(state->unk8, PIXEL_FILL(1));
+ PutWindowTilemap(state->unk8);
+ CopyWindowToVram(state->unk8, 3);
+ CopyPaletteIntoBufferUnfaded(gUnknown_08622868, 0x10, 0x20);
+ CopyPaletteIntoBufferUnfaded(gHoennMapZoomIcons_Pal, 0x30, 0x20);
+ if (!sub_8124658())
+ ChangeBgY(1, -0x6000, 0);
+ else
+ ChangeBgY(1, 0, 0);
+
+ ChangeBgX(1, 0, 0);
+}
+
+static bool32 sub_81CCAFC(void)
+{
+ return free_temp_tile_data_buffers_if_possible();
+}
+
+static void sub_81CCB0C(struct Pokenav5Struct_2 *state)
+{
+ struct RegionMap *regionMap = GetSubstructPtr(16);
+ switch (regionMap->iconDrawType)
+ {
+ case MAPSECTYPE_CITY_CANFLY:
+ FillWindowPixelBuffer(state->unk8, PIXEL_FILL(1));
+ PutWindowRectTilemap(state->unk8, 0, 0, 12, 2);
+ AddTextPrinterParameterized(state->unk8, 7, regionMap->mapSecName, 0, 1, TEXT_SPEED_FF, NULL);
+ sub_81CCD70(state, regionMap->mapSecId, regionMap->posWithinMapSec);
+ CopyWindowToVram(state->unk8, 3);
+ sub_81CCFA4(0);
+ break;
+ case MAPSECTYPE_CITY_CANTFLY:
+ FillWindowPixelBuffer(state->unk8, PIXEL_FILL(1));
+ PutWindowRectTilemap(state->unk8, 0, 0, 12, 2);
+ AddTextPrinterParameterized(state->unk8, 7, regionMap->mapSecName, 0, 1, TEXT_SPEED_FF, NULL);
+ FillBgTilemapBufferRect(1, 0x1041, 17, 6, 12, 11, 17);
+ CopyWindowToVram(state->unk8, 3);
+ sub_81CCFA4(1);
+ break;
+ case MAPSECTYPE_PLAIN:
+ case MAPSECTYPE_BATTLE_FRONTIER:
+ FillWindowPixelBuffer(state->unk8, PIXEL_FILL(1));
+ PutWindowTilemap(state->unk8);
+ AddTextPrinterParameterized(state->unk8, 7, regionMap->mapSecName, 0, 1, TEXT_SPEED_FF, NULL);
+ sub_81CCDE8(state, regionMap->mapSecId, regionMap->posWithinMapSec);
+ CopyWindowToVram(state->unk8, 3);
+ sub_81CCFA4(1);
+ break;
+ case MAPSECTYPE_NONE:
+ FillBgTilemapBufferRect(1, 0x1041, 17, 4, 12, 13, 17);
+ CopyBgTilemapBufferToVram(1);
+ sub_81CCFA4(1);
+ break;
+ }
+}
+
+static bool32 sub_81CCC4C(struct Pokenav5Struct_2 *state)
+{
+ return IsDma3ManagerBusyWithBgCopy();
+}
+
+static void sub_81CCC5C(int arg0)
+{
+ u8 taskId = CreateTask(sub_81CCC9C, 3);
+ gTasks[taskId].data[0] = arg0;
+}
+
+static bool32 sub_81CCC88(void)
+{
+ return FuncIsActiveTask(sub_81CCC9C);
+}
+
+static void sub_81CCC9C(u8 taskId)
+{
+ if (gTasks[taskId].data[0])
+ {
+ if (ChangeBgY(1, 0x480, 1) >= 0)
+ {
+ ChangeBgY(1, 0, 0);
+ DestroyTask(taskId);
+ }
+
+ sub_81CCF78();
+ }
+ else
+ {
+ if (ChangeBgY(1, 0x480, 2) <= -0x6000)
+ {
+ ChangeBgY(1, -0x6000, 0);
+ DestroyTask(taskId);
+ }
+
+ sub_81CCF78();
+ }
+}
+
+static void sub_81CCD10(void)
+{
+ CreateLoopedTask(sub_81CCD34, 1);
+}
+
+static bool32 sub_81CCD24(void)
+{
+ return FuncIsActiveLoopedTask(sub_81CCD34);
+}
+
+static u32 sub_81CCD34(int taskState)
+{
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ if (taskState < (int)ARRAY_COUNT(gUnknown_08623118))
+ {
+ LZ77UnCompWram(gUnknown_08623118[taskState].data, state->cityZoomPics[taskState]);
+ return 1;
+ }
+
+ return 4;
+}
+
+static void sub_81CCD70(struct Pokenav5Struct_2 *state, int mapSecId, int pos)
+{
+ int i;
+ for (i = 0; i < (int)ARRAY_COUNT(gUnknown_08623118) && (gUnknown_08623118[i].mapSecId != mapSecId || gUnknown_08623118[i].unk2 != pos); i++)
+ ;
+
+ if (i == ARRAY_COUNT(gUnknown_08623118))
+ return;
+
+ FillBgTilemapBufferRect_Palette0(1, 0x1041, 17, 6, 12, 11);
+ CopyToBgTilemapBufferRect(1, state->cityZoomPics[i], 18, 6, 10, 10);
+}
+
+static void sub_81CCDE8(struct Pokenav5Struct_2 *state, int mapSecId, int pos)
+{
+ int i = 0;
+ while (1)
+ {
+ const u8 *landmarkName = GetLandmarkName(mapSecId, pos, i);
+ if (!landmarkName)
+ break;
+
+ StringCopyPadded(gStringVar1, landmarkName, CHAR_SPACE, 12);
+ AddTextPrinterParameterized(state->unk8, 7, gStringVar1, 0, i * 16 + 17, TEXT_SPEED_FF, NULL);
+ i++;
+ }
+}
+
+static void sub_81CCE58(void)
+{
+ int i;
+ int y;
+ struct Sprite *sprite;
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+
+ if (!sub_8124658())
+ y = 228;
+ else
+ y = 132;
+
+ for (i = 0; i < 3; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_086231D0, 152 + i * 32, y, 8);
+ sprite = &gSprites[spriteId];
+ sprite->data[0] = 0;
+ sprite->data[1] = i * 4;
+ sprite->data[2] = sprite->oam.tileNum;
+ sprite->data[3] = 150;
+ sprite->data[4] = i * 4;
+ sprite->oam.tileNum += i * 4;
+ state->cityFeatureTextSprites[i] = sprite;
+ }
+}
+
+void sub_81CCEF4(struct Sprite *sprite)
+{
+ if (sprite->data[3])
+ {
+ sprite->data[3]--;
+ return;
+ }
+
+ if (++sprite->data[0] > 11)
+ sprite->data[0] = 0;
+
+ if (++sprite->data[1] > 60)
+ sprite->data[1] = 0;
+
+ sprite->oam.tileNum = sprite->data[2] + sprite->data[1];
+ if (sprite->data[5] < 4)
+ {
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[5]++;
+ sprite->data[3] = 120;
+ }
+ }
+ else
+ {
+ if (sprite->data[1] == sprite->data[4])
+ {
+ sprite->data[5] = 0;
+ sprite->data[0] = 0;
+ sprite->data[3] = 120;
+ }
+ }
+}
+
+static void sub_81CCF78(void)
+{
+ int i;
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ int y = 132 - (GetBgY(1) >> 8);
+ for (i = 0; i < 3; i++)
+ state->cityFeatureTextSprites[i]->pos1.y = y;
+}
+
+static void sub_81CCFA4(int invisible)
+{
+ int i;
+ struct Pokenav5Struct_2 *state = GetSubstructPtr(4);
+ for (i = 0; i < 3; i++)
+ state->cityFeatureTextSprites[i]->invisible = invisible;
+}
diff --git a/src/region_map.c b/src/region_map.c
index 90017a4ad..a98964e5c 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -493,7 +493,7 @@ void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed)
while (sub_8122DB0());
}
-void sub_8122CF8(struct RegionMap *regionMap, struct BgTemplate *template, bool8 zoomed)
+void sub_8122CF8(struct RegionMap *regionMap, const struct BgTemplate *template, bool8 zoomed)
{
gRegionMap = regionMap;
gRegionMap->initStep = 0;