summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-12-11 11:02:42 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2019-12-11 11:02:42 -0500
commitf55abfddc54e936ccae318d0b4e6efe8f8998d42 (patch)
treefe10b8079095252830facd352c010e717205fda3
parent6645ad8ccf92b74cb00098601a4dafcc8349de62 (diff)
through sub_8103A40
-rw-r--r--asm/pokedex_screen.s716
-rw-r--r--include/list_menu.h4
-rw-r--r--include/pokedex_screen.h1
-rw-r--r--include/strings.h1
-rw-r--r--src/list_menu.c8
-rw-r--r--src/pokedex.c3
-rw-r--r--src/pokedex_screen.c216
7 files changed, 221 insertions, 728 deletions
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s
index f6b2ec5aa..8eab9c420 100644
--- a/asm/pokedex_screen.s
+++ b/asm/pokedex_screen.s
@@ -5,722 +5,6 @@
.text
- thumb_func_start sub_8103518
-sub_8103518: @ 8103518
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsNationalPokedexEnabled
- movs r1, 0x97
- str r1, [sp]
- cmp r0, 0
- beq _0810353A
- movs r2, 0xC1
- lsls r2, 1
- str r2, [sp]
-_0810353A:
- movs r0, 0
- mov r10, r0
- cmp r4, 0x5
- bhi _08103568
- lsls r0, r4, 2
- ldr r1, _0810354C @ =_08103550
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0810354C: .4byte _08103550
- .align 2, 0
-_08103550:
- .4byte _08103568
- .4byte _08103604
- .4byte _0810369C
- .4byte _0810373C
- .4byte _081037D8
- .4byte _08103874
-_08103568:
- movs r1, 0
- mov r8, r1
-_0810356C:
- mov r4, r8
- adds r4, 0x1
- lsls r0, r4, 16
- lsrs r5, r0, 16
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r6, r0, 24
- mov r9, r4
- cmp r7, 0
- beq _081035C4
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- ldr r2, _081035BC @ =gUnknown_203ACF0
- ldr r1, [r2]
- ldr r2, [r1, 0x44]
- mov r1, r8
- lsls r3, r1, 3
- adds r2, r3, r2
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xB
- muls r0, r1
- ldr r1, _081035C0 @ =gSpeciesNames
- adds r0, r1
- str r0, [r2]
- mov r10, r5
- adds r4, r3, 0
- b _081035D6
- .align 2, 0
-_081035BC: .4byte gUnknown_203ACF0
-_081035C0: .4byte gSpeciesNames
-_081035C4:
- ldr r2, _081035FC @ =gUnknown_203ACF0
- ldr r0, [r2]
- ldr r1, [r0, 0x44]
- mov r0, r8
- lsls r2, r0, 3
- adds r1, r2, r1
- ldr r0, _08103600 @ =gUnknown_8415F66
- str r0, [r1]
- adds r4, r2, 0
-_081035D6:
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- ldr r2, _081035FC @ =gUnknown_203ACF0
- ldr r1, [r2]
- ldr r3, [r1, 0x44]
- adds r3, r4, r3
- lsls r2, r6, 17
- lsls r1, r7, 16
- adds r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r2, r0
- str r2, [r3, 0x4]
- mov r8, r9
- mov r0, r8
- cmp r0, 0x96
- ble _0810356C
- b _08103906
- .align 2, 0
-_081035FC: .4byte gUnknown_203ACF0
-_08103600: .4byte gUnknown_8415F66
-_08103604:
- movs r1, 0
- mov r8, r1
- ldr r2, _08103690 @ =gUnknown_203ACF0
- mov r9, r2
-_0810360C:
- ldr r1, _08103694 @ =gUnknown_8443FC0
- mov r2, r8
- lsls r0, r2, 1
- adds r0, r1
- ldrh r5, [r0]
- ldr r0, [sp]
- cmp r5, r0
- bgt _08103682
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r7, 0
- beq _08103682
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r2, [r1, 0x44]
- mov r1, r10
- lsls r4, r1, 3
- adds r2, r4, r2
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xB
- muls r0, r1
- ldr r1, _08103698 @ =gSpeciesNames
- adds r0, r1
- str r0, [r2]
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r1, [r1, 0x44]
- adds r4, r1
- lsls r2, r6, 17
- lsls r1, r7, 16
- adds r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r2, r0
- str r2, [r4, 0x4]
- mov r0, r10
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
-_08103682:
- movs r0, 0x1
- add r8, r0
- movs r0, 0xCD
- lsls r0, 1
- cmp r8, r0
- ble _0810360C
- b _08103906
- .align 2, 0
-_08103690: .4byte gUnknown_203ACF0
-_08103694: .4byte gUnknown_8443FC0
-_08103698: .4byte gSpeciesNames
-_0810369C:
- movs r1, 0
- mov r8, r1
- ldr r2, _08103730 @ =gUnknown_203ACF0
- mov r9, r2
-_081036A4:
- ldr r1, _08103734 @ =gUnknown_84448FE
- mov r2, r8
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, [sp]
- cmp r5, r0
- bgt _08103722
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _08103722
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r2, [r1, 0x44]
- mov r1, r10
- lsls r4, r1, 3
- adds r2, r4, r2
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xB
- muls r0, r1
- ldr r1, _08103738 @ =gSpeciesNames
- adds r0, r1
- str r0, [r2]
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r1, [r1, 0x44]
- adds r4, r1
- lsls r2, r6, 17
- lsls r1, r7, 16
- adds r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r2, r0
- str r2, [r4, 0x4]
- mov r0, r10
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
-_08103722:
- movs r0, 0x1
- add r8, r0
- movs r0, 0xCD
- lsls r0, 1
- cmp r8, r0
- ble _081036A4
- b _08103906
- .align 2, 0
-_08103730: .4byte gUnknown_203ACF0
-_08103734: .4byte gUnknown_84448FE
-_08103738: .4byte gSpeciesNames
-_0810373C:
- movs r1, 0
- mov r8, r1
- ldr r2, _081037C8 @ =gUnknown_203ACF0
- mov r9, r2
-_08103744:
- ldr r1, _081037CC @ =gUnknown_84442F6
- mov r2, r8
- lsls r0, r2, 1
- adds r0, r1
- ldrh r5, [r0]
- ldr r0, [sp]
- cmp r5, r0
- bgt _081037BA
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _081037BA
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r2, [r1, 0x44]
- mov r1, r10
- lsls r4, r1, 3
- adds r2, r4, r2
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xB
- muls r0, r1
- ldr r1, _081037D0 @ =gSpeciesNames
- adds r0, r1
- str r0, [r2]
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r1, [r1, 0x44]
- adds r4, r1
- lsls r2, r6, 17
- lsls r1, r7, 16
- adds r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r2, r0
- str r2, [r4, 0x4]
- mov r0, r10
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
-_081037BA:
- movs r0, 0x1
- add r8, r0
- ldr r0, _081037D4 @ =0x00000181
- cmp r8, r0
- ble _08103744
- b _08103906
- .align 2, 0
-_081037C8: .4byte gUnknown_203ACF0
-_081037CC: .4byte gUnknown_84442F6
-_081037D0: .4byte gSpeciesNames
-_081037D4: .4byte 0x00000181
-_081037D8:
- movs r1, 0
- mov r8, r1
- ldr r2, _08103864 @ =gUnknown_203ACF0
- mov r9, r2
-_081037E0:
- ldr r1, _08103868 @ =gUnknown_84445FA
- mov r2, r8
- lsls r0, r2, 1
- adds r0, r1
- ldrh r5, [r0]
- ldr r0, [sp]
- cmp r5, r0
- bgt _08103856
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _08103856
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r2, [r1, 0x44]
- mov r1, r10
- lsls r4, r1, 3
- adds r2, r4, r2
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xB
- muls r0, r1
- ldr r1, _0810386C @ =gSpeciesNames
- adds r0, r1
- str r0, [r2]
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- mov r2, r9
- ldr r1, [r2]
- ldr r1, [r1, 0x44]
- adds r4, r1
- lsls r2, r6, 17
- lsls r1, r7, 16
- adds r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r2, r0
- str r2, [r4, 0x4]
- mov r0, r10
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
-_08103856:
- movs r0, 0x1
- add r8, r0
- ldr r0, _08103870 @ =0x00000181
- cmp r8, r0
- ble _081037E0
- b _08103906
- .align 2, 0
-_08103864: .4byte gUnknown_203ACF0
-_08103868: .4byte gUnknown_84445FA
-_0810386C: .4byte gSpeciesNames
-_08103870: .4byte 0x00000181
-_08103874:
- movs r1, 0
- mov r8, r1
-_08103878:
- mov r4, r8
- adds r4, 0x1
- lsls r0, r4, 16
- lsrs r5, r0, 16
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- bl sub_8104AB0
- lsls r0, 24
- lsrs r6, r0, 24
- mov r9, r4
- cmp r7, 0
- beq _081038D0
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- ldr r2, _081038C8 @ =gUnknown_203ACF0
- ldr r1, [r2]
- ldr r2, [r1, 0x44]
- mov r1, r8
- lsls r3, r1, 3
- adds r2, r3, r2
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xB
- muls r0, r1
- ldr r1, _081038CC @ =gSpeciesNames
- adds r0, r1
- str r0, [r2]
- mov r10, r5
- adds r4, r3, 0
- b _081038E2
- .align 2, 0
-_081038C8: .4byte gUnknown_203ACF0
-_081038CC: .4byte gSpeciesNames
-_081038D0:
- ldr r2, _08103918 @ =gUnknown_203ACF0
- ldr r0, [r2]
- ldr r1, [r0, 0x44]
- mov r0, r8
- lsls r2, r0, 3
- adds r1, r2, r1
- ldr r0, _0810391C @ =gUnknown_8415F66
- str r0, [r1]
- adds r4, r2, 0
-_081038E2:
- adds r0, r5, 0
- bl NationalPokedexNumToSpecies
- ldr r2, _08103918 @ =gUnknown_203ACF0
- ldr r1, [r2]
- ldr r3, [r1, 0x44]
- adds r3, r4, r3
- lsls r2, r6, 17
- lsls r1, r7, 16
- adds r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r2, r0
- str r2, [r3, 0x4]
- mov r8, r9
- ldr r0, _08103920 @ =0x00000181
- cmp r8, r0
- ble _08103878
-_08103906:
- mov r0, r10
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08103918: .4byte gUnknown_203ACF0
-_0810391C: .4byte gUnknown_8415F66
-_08103920: .4byte 0x00000181
- thumb_func_end sub_8103518
-
- thumb_func_start sub_8103924
-sub_8103924: @ 8103924
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x4
- bgt _08103936
- cmp r1, 0x1
- bge _08103950
- b _0810393A
-_08103936:
- cmp r1, 0x5
- beq _08103964
-_0810393A:
- ldr r1, _08103948 @ =gUnknown_845218C
- ldr r4, _0810394C @ =gUnknown_203ACF0
- ldr r0, [r4]
- ldrh r2, [r0, 0x36]
- ldrh r3, [r0, 0x34]
- b _0810396E
- .align 2, 0
-_08103948: .4byte gUnknown_845218C
-_0810394C: .4byte gUnknown_203ACF0
-_08103950:
- ldr r1, _0810395C @ =gUnknown_845218C
- ldr r4, _08103960 @ =gUnknown_203ACF0
- ldr r0, [r4]
- ldrh r2, [r0, 0x3A]
- ldrh r3, [r0, 0x38]
- b _0810396E
- .align 2, 0
-_0810395C: .4byte gUnknown_845218C
-_08103960: .4byte gUnknown_203ACF0
-_08103964:
- ldr r1, _08103980 @ =gUnknown_845218C
- ldr r4, _08103984 @ =gUnknown_203ACF0
- ldr r0, [r4]
- ldrh r2, [r0, 0x3E]
- ldrh r3, [r0, 0x3C]
-_0810396E:
- adds r0, r5, 0
- bl ListMenuInitInRect
- ldr r1, [r4]
- adds r1, 0x41
- strb r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08103980: .4byte gUnknown_845218C
-_08103984: .4byte gUnknown_203ACF0
- thumb_func_end sub_8103924
-
- thumb_func_start sub_8103988
-sub_8103988: @ 8103988
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bgt _08103998
- cmp r0, 0x1
- bge _081039B8
- b _0810399C
-_08103998:
- cmp r0, 0x5
- beq _081039D4
-_0810399C:
- ldr r0, _081039B4 @ =gUnknown_203ACF0
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x41
- ldrb r0, [r0]
- adds r1, r2, 0
- adds r1, 0x36
- adds r2, 0x34
- bl DestroyListMenuTask
- b _081039E8
- .align 2, 0
-_081039B4: .4byte gUnknown_203ACF0
-_081039B8:
- ldr r0, _081039D0 @ =gUnknown_203ACF0
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x41
- ldrb r0, [r0]
- adds r1, r2, 0
- adds r1, 0x3A
- adds r2, 0x38
- bl DestroyListMenuTask
- b _081039E8
- .align 2, 0
-_081039D0: .4byte gUnknown_203ACF0
-_081039D4:
- ldr r0, _081039EC @ =gUnknown_203ACF0
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x41
- ldrb r0, [r0]
- adds r1, r2, 0
- adds r1, 0x3E
- adds r2, 0x3C
- bl DestroyListMenuTask
-_081039E8:
- pop {r0}
- bx r0
- .align 2, 0
-_081039EC: .4byte gUnknown_203ACF0
- thumb_func_end sub_8103988
-
- thumb_func_start sub_81039F0
-sub_81039F0: @ 81039F0
- push {r4,lr}
- sub sp, 0x10
- mov r1, sp
- ldr r0, _08103A18 @ =gUnknown_84521B4
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldr r0, [r0]
- str r0, [r1]
- ldr r2, _08103A1C @ =gUnknown_203ACF0
- ldr r0, [r2]
- adds r0, 0x48
- ldr r1, _08103A20 @ =gUnknown_8452174
- ldrh r3, [r0]
- ldrh r0, [r1, 0xE]
- cmp r3, r0
- bls _08103A24
- mov r1, sp
- subs r0, r3, r0
- b _08103A28
- .align 2, 0
-_08103A18: .4byte gUnknown_84521B4
-_08103A1C: .4byte gUnknown_203ACF0
-_08103A20: .4byte gUnknown_8452174
-_08103A24:
- mov r1, sp
- movs r0, 0
-_08103A28:
- strh r0, [r1, 0x8]
- ldr r1, [r2]
- adds r1, 0x62
- mov r0, sp
- bl AddScrollIndicatorArrowPair
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x10
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81039F0
-
- thumb_func_start sub_8103A40
-sub_8103A40: @ 8103A40
- push {r4-r7,lr}
- sub sp, 0x4
- adds r4, r1, 0
- lsls r2, 24
- lsrs r6, r2, 24
- lsls r0, r4, 16
- lsrs r5, r0, 16
- movs r0, 0x1
- lsrs r4, 17
- ands r4, r0
- ldr r7, _08103AC0 @ =gUnknown_203ACF0
- ldr r0, [r7]
- adds r0, 0x40
- ldrb r0, [r0]
- str r6, [sp]
- movs r1, 0
- adds r2, r5, 0
- movs r3, 0xC
- bl sub_8104A34
- cmp r4, 0
- beq _08103AB6
- ldr r0, [r7]
- adds r0, 0x40
- ldrb r0, [r0]
- movs r1, 0
- movs r2, 0x28
- adds r3, r6, 0
- bl BlitMoveInfoIcon
- ldr r0, _08103AC4 @ =gBaseStats
- lsls r4, r5, 3
- subs r4, r5
- lsls r4, 2
- adds r4, r0
- ldrb r5, [r4, 0x6]
- ldr r0, [r7]
- adds r0, 0x40
- ldrb r0, [r0]
- adds r1, r5, 0x1
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0x78
- adds r3, r6, 0
- bl BlitMoveInfoIcon
- ldrb r1, [r4, 0x7]
- cmp r5, r1
- beq _08103AB6
- ldr r0, [r7]
- adds r0, 0x40
- ldrb r0, [r0]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0x98
- adds r3, r6, 0
- bl BlitMoveInfoIcon
-_08103AB6:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08103AC0: .4byte gUnknown_203ACF0
-_08103AC4: .4byte gBaseStats
- thumb_func_end sub_8103A40
-
thumb_func_start sub_8103AC8
sub_8103AC8: @ 8103AC8
push {r4,r5,lr}
diff --git a/include/list_menu.h b/include/list_menu.h
index 94a49d2c2..237805f38 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -73,8 +73,8 @@ struct ListMenuWindowRect
extern struct ListMenuTemplate gMultiuseListMenuTemplate;
s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
-u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
-u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove);
+u8 ListMenuInit(const struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
+u8 ListMenuInitInRect(const struct ListMenuTemplate *listMenuTemplate, const struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove);
s32 ListMenu_ProcessInput(u8 listTaskId);
void DestroyListMenuTask(u8 listTaskId, u16 *cursorPos, u16 *itemsAbove);
void RedrawListMenu(u8 listTaskId);
diff --git a/include/pokedex_screen.h b/include/pokedex_screen.h
index 8855a47fc..9cc362d59 100644
--- a/include/pokedex_screen.h
+++ b/include/pokedex_screen.h
@@ -2,5 +2,6 @@
#define GUARD_POKEDEX_SCREEN_H
void CB2_OpenPokedexFromStartMenu(void);
+s8 sub_8104AB0(u16 nationalDexNo, u8 caseID, u8 unk);
#endif //GUARD_POKEDEX_SCREEN_H
diff --git a/include/strings.h b/include/strings.h
index 140e9fc41..8ad1dc533 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -974,5 +974,6 @@ extern const u8 gUnknown_8415DD1[];
extern const u8 gUnknown_8415DD7[];
extern const u8 gUnknown_8415F3D[];
extern const u8 gUnknown_8415F4A[];
+extern const u8 gUnknown_8415F66[];
#endif //GUARD_STRINGS_H
diff --git a/src/list_menu.c b/src/list_menu.c
index 484da31ad..6c4d50961 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -70,7 +70,7 @@ static EWRAM_DATA struct MysteryGiftLinkMenuStruct sMysteryGiftLinkMenu = {0};
struct ListMenuOverride gListMenuOverride;
struct ListMenuTemplate gMultiuseListMenuTemplate;
-static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
+static u8 ListMenuInitInternal(const struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove);
static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown);
static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count);
static void ListMenuDrawCursor(struct ListMenu *list);
@@ -172,7 +172,7 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str
return LIST_NOTHING_CHOSEN;
}
-u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove)
+u8 ListMenuInit(const struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove)
{
u8 taskId = ListMenuInitInternal(listMenuTemplate, cursorPos, itemsAbove);
PutWindowTilemap(listMenuTemplate->windowId);
@@ -180,7 +180,7 @@ u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 it
return taskId;
}
-u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove)
+u8 ListMenuInitInRect(const struct ListMenuTemplate *listMenuTemplate, const struct ListMenuWindowRect *rect, u16 cursorPos, u16 itemsAbove)
{
s32 i;
u8 taskId = ListMenuInitInternal(listMenuTemplate, cursorPos, itemsAbove);
@@ -338,7 +338,7 @@ u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
return list->itemsAbove * yMultiplier + list->template.upText_Y;
}
-static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove)
+static u8 ListMenuInitInternal(const struct ListMenuTemplate *listMenuTemplate, u16 cursorPos, u16 itemsAbove)
{
u8 listTaskId = CreateTask(ListMenuDummyTask, 0);
struct ListMenu *list = (struct ListMenu *)gTasks[listTaskId].data;
diff --git a/src/pokedex.c b/src/pokedex.c
index 84ca59549..fc9781c48 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -1,9 +1,8 @@
#include "global.h"
#include "pokedex.h"
+#include "pokedex_screen.h"
#include "constants/species.h"
-extern s8 sub_8104AB0(u16 nationalDexNo, u8 caseID, u8 unk);
-
ALIGNED(4) static const u8 gExpandedPlaceholder_PokedexDescription[] = _("");
#include "data/pokemon/pokedex_text.h"
diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c
index 52ca3f28b..1951146fa 100644
--- a/src/pokedex_screen.c
+++ b/src/pokedex_screen.c
@@ -18,7 +18,11 @@
#include "overworld.h"
#include "strings.h"
#include "menu.h"
+#include "pokedex_screen.h"
+#include "data.h"
+#include "pokedex.h"
#include "constants/songs.h"
+#include "constants/species.h"
struct PokedexScreenData
{
@@ -42,10 +46,12 @@ struct PokedexScreenData
u8 field_2E;
u8 field_2F;
u32 field_30;
- u8 filler_34[0x4];
+ u16 field_34;
+ u16 field_36;
u16 field_38;
u16 field_3A;
- u8 filler_3C[0x4];
+ u16 field_3C;
+ u16 field_3E;
u8 field_40;
u8 field_41;
u8 field_42;
@@ -77,14 +83,15 @@ void sub_8102F80(u8 taskId);
void sub_810317C(void);
void sub_8103238(u8 taskId);
void sub_810345C(void);
-void sub_8103924(struct ListMenuTemplate * a0, u8 a1);
-u8 sub_81039F0(void);
u16 sub_8103518(u8 a0);
+void sub_8103924(const struct ListMenuTemplate * a0, u8 a1);
+u8 sub_81039F0(void);
void sub_8103988(u8 a0);
void sub_8103AC8(u8 taskId);
void sub_81047B0(u8 *a0);
void sub_81047C8(u8 a0, u8 a1, const u8 *a2, u8 a3, u8 a4, u8 a5);
void sub_810491C(u8 a0, u8 a1, u16 a2, u8 a3, u8 a4, u8 a5);
+void sub_8104A34(u8 windowId, u8 a1, u16 species, u8 a3, u8 y);
u16 sub_8104BBC(u8 a0, u8 a1);
void sub_8104C2C(const u8 *a0);
void sub_81042EC(u8 taskId);
@@ -98,6 +105,10 @@ extern const u16 gUnknown_84404C8[];
extern const u16 gUnknown_84406E0[];
extern const u16 gUnknown_8440EF0[];
extern const u16 gUnknown_8443460[];
+extern const u16 gUnknown_8443FC0[];
+extern const u16 gUnknown_84442F6[];
+extern const u16 gUnknown_84448FE[];
+extern const u16 gUnknown_84445FA[];
extern const struct BgTemplate gUnknown_8451EBC[4];
extern const struct WindowTemplate gUnknown_8451ECC[];
extern const struct PokedexScreenData gUnknown_8451EE4;
@@ -111,6 +122,8 @@ extern const struct ListMenuTemplate gUnknown_84520BC;
extern const struct ScrollArrowsTemplate gUnknown_84520D4;
extern const struct ScrollArrowsTemplate gUnknown_84520E4;
extern const struct PokedexScreenWindowGfx gUnknown_84520F4[];
+extern const struct ListMenuWindowRect gUnknown_845218C;
+extern const struct ScrollArrowsTemplate gUnknown_84521B4;
void sub_81024C0(void)
{
@@ -627,3 +640,198 @@ void sub_810345C(void)
CopyWindowToVram(0, 2);
CopyWindowToVram(1, 2);
}
+
+u16 sub_8103518(u8 a0)
+{
+ s32 max_n = IsNationalPokedexEnabled() ? NATIONAL_DEX_DEOXYS : NATIONAL_DEX_MEW;
+ u16 ndex_num;
+ u16 ret = NATIONAL_DEX_NONE;
+ s32 i;
+ bool8 caught;
+ bool8 seen;
+
+ switch (a0)
+ {
+ default:
+ case 0:
+ for (i = 0; i < NATIONAL_DEX_MEW; i++)
+ {
+ ndex_num = i + 1;
+ seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
+ caught = sub_8104AB0(ndex_num, FLAG_GET_CAUGHT, 0);
+ if (seen)
+ {
+ gUnknown_203ACF0->field_44[i].label = gSpeciesNames[NationalPokedexNumToSpecies(ndex_num)];
+ ret = ndex_num;
+ }
+ else
+ {
+ gUnknown_203ACF0->field_44[i].label = gUnknown_8415F66;
+ }
+ gUnknown_203ACF0->field_44[i].index = (caught << 17) + (seen << 16) + NationalPokedexNumToSpecies(ndex_num);
+ }
+ break;
+ case 1:
+ for (i = 0; i < SPECIES_CHIMECHO; i++)
+ {
+ ndex_num = gUnknown_8443FC0[i];
+ if (ndex_num <= max_n)
+ {
+ seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
+ caught = sub_8104AB0(ndex_num, FLAG_GET_CAUGHT, 0);
+ if (seen)
+ {
+ gUnknown_203ACF0->field_44[ret].label = gSpeciesNames[NationalPokedexNumToSpecies(ndex_num)];
+ gUnknown_203ACF0->field_44[ret].index = (caught << 17) + (seen << 16) + NationalPokedexNumToSpecies(ndex_num);
+ ret++;
+ }
+ }
+ }
+ break;
+ case 2:
+ for (i = 0; i < SPECIES_CHIMECHO; i++)
+ {
+ ndex_num = SpeciesToNationalPokedexNum(gUnknown_84448FE[i]);
+ if (ndex_num <= max_n)
+ {
+ seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
+ caught = sub_8104AB0(ndex_num, FLAG_GET_CAUGHT, 0);
+ if (caught)
+ {
+ gUnknown_203ACF0->field_44[ret].label = gSpeciesNames[NationalPokedexNumToSpecies(ndex_num)];
+ gUnknown_203ACF0->field_44[ret].index = (caught << 17) + (seen << 16) + NationalPokedexNumToSpecies(ndex_num);
+ ret++;
+ }
+ }
+ }
+ break;
+ case 3:
+ for (i = 0; i < NATIONAL_DEX_DEOXYS; i++)
+ {
+ ndex_num = gUnknown_84442F6[i];
+ if (ndex_num <= max_n)
+ {
+ seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
+ caught = sub_8104AB0(ndex_num, FLAG_GET_CAUGHT, 0);
+ if (caught)
+ {
+ gUnknown_203ACF0->field_44[ret].label = gSpeciesNames[NationalPokedexNumToSpecies(ndex_num)];
+ gUnknown_203ACF0->field_44[ret].index = (caught << 17) + (seen << 16) + NationalPokedexNumToSpecies(ndex_num);
+ ret++;
+ }
+ }
+ }
+ break;
+ case 4:
+ for (i = 0; i < NATIONAL_DEX_DEOXYS; i++)
+ {
+ ndex_num = gUnknown_84445FA[i];
+ if (ndex_num <= max_n)
+ {
+ seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
+ caught = sub_8104AB0(ndex_num, FLAG_GET_CAUGHT, 0);
+ if (caught)
+ {
+ gUnknown_203ACF0->field_44[ret].label = gSpeciesNames[NationalPokedexNumToSpecies(ndex_num)];
+ gUnknown_203ACF0->field_44[ret].index = (caught << 17) + (seen << 16) + NationalPokedexNumToSpecies(ndex_num);
+ ret++;
+ }
+ }
+ }
+ break;
+ case 5:
+ for (i = 0; i < NATIONAL_DEX_DEOXYS; i++)
+ {
+ ndex_num = i + 1;
+ seen = sub_8104AB0(ndex_num, FLAG_GET_SEEN, 0);
+ caught = sub_8104AB0(ndex_num, FLAG_GET_CAUGHT, 0);
+ if (seen)
+ {
+ gUnknown_203ACF0->field_44[i].label = gSpeciesNames[NationalPokedexNumToSpecies(ndex_num)];
+ ret = ndex_num;
+ }
+ else
+ {
+ gUnknown_203ACF0->field_44[i].label = gUnknown_8415F66;
+ }
+ gUnknown_203ACF0->field_44[i].index = (caught << 17) + (seen << 16) + NationalPokedexNumToSpecies(ndex_num);
+ }
+ break;
+ }
+ return ret;
+}
+
+void sub_8103924(const struct ListMenuTemplate * template, u8 a1)
+{
+ switch (a1)
+ {
+ default:
+ case 0:
+ gUnknown_203ACF0->field_41 = ListMenuInitInRect(template, &gUnknown_845218C, gUnknown_203ACF0->field_36, gUnknown_203ACF0->field_34);
+ break;
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ gUnknown_203ACF0->field_41 = ListMenuInitInRect(template, &gUnknown_845218C, gUnknown_203ACF0->field_3A, gUnknown_203ACF0->field_38);
+ break;
+ case 5:
+ gUnknown_203ACF0->field_41 = ListMenuInitInRect(template, &gUnknown_845218C, gUnknown_203ACF0->field_3E, gUnknown_203ACF0->field_3C);
+ break;
+ }
+}
+
+void sub_8103988(u8 a0)
+{
+ switch (a0)
+ {
+ default:
+ case 0:
+ DestroyListMenuTask(gUnknown_203ACF0->field_41, &gUnknown_203ACF0->field_36, &gUnknown_203ACF0->field_34);
+ break;
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ DestroyListMenuTask(gUnknown_203ACF0->field_41, &gUnknown_203ACF0->field_3A, &gUnknown_203ACF0->field_38);
+ break;
+ case 5:
+ DestroyListMenuTask(gUnknown_203ACF0->field_41, &gUnknown_203ACF0->field_3E, &gUnknown_203ACF0->field_3C);
+ break;
+ }
+}
+
+u8 sub_81039F0(void)
+{
+ struct ScrollArrowsTemplate template = gUnknown_84521B4;
+ if (gUnknown_203ACF0->field_48 > gUnknown_8452174.maxShowed)
+ template.fullyDownThreshold = gUnknown_203ACF0->field_48 - gUnknown_8452174.maxShowed;
+ else
+ template.fullyDownThreshold = 0;
+ return AddScrollIndicatorArrowPair(&template, &gUnknown_203ACF0->field_62);
+}
+
+struct PokedexListItem
+{
+ u16 species;
+ bool8 seen:1;
+ bool8 caught:1;
+};
+
+void sub_8103A40(u8 windowId, s32 itemId, u8 y)
+{
+ u32 itemId_ = itemId;
+ u16 species = itemId_;
+ bool8 seen = (itemId_ >> 16) & 1; // not used but required to match
+ bool8 caught = (itemId_ >> 17) & 1;
+ u8 type1;
+ sub_8104A34(gUnknown_203ACF0->field_40, 0, species, 12, y);
+ if (caught)
+ {
+ BlitMoveInfoIcon(gUnknown_203ACF0->field_40, 0, 0x28, y);
+ type1 = gBaseStats[species].type1;
+ BlitMoveInfoIcon(gUnknown_203ACF0->field_40, type1 + 1, 0x78, y);
+ if (type1 != gBaseStats[species].type2)
+ BlitMoveInfoIcon(gUnknown_203ACF0->field_40, gBaseStats[species].type2 + 1, 0x98, y);
+ }
+}