summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/pokedex.s2373
-rw-r--r--arm9/asm/scrcmd.s2
-rw-r--r--arm9/asm/unk_0206BB28.s2
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/16/asm/module_16.s2
-rw-r--r--arm9/src/pokedex.c784
-rw-r--r--arm9/src/pokemon.c2
-rw-r--r--include/pokedex.h86
-rw-r--r--include/pokemon.h2
-rw-r--r--include/unk_02087A1C.h7
10 files changed, 883 insertions, 2379 deletions
diff --git a/arm9/asm/pokedex.s b/arm9/asm/pokedex.s
deleted file mode 100644
index 11a29cda..00000000
--- a/arm9/asm/pokedex.s
+++ /dev/null
@@ -1,2373 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .include "constants/species.h"
-
- .section .rodata
-
- .global UNK_020EE940
-UNK_020EE940: ; 0x020EE940
- .short SPECIES_MANAPHY
- .short SPECIES_MEW
- .short SPECIES_LUGIA
- .short SPECIES_HO_OH
- .short SPECIES_CELEBI
- .short SPECIES_JIRACHI
- .short SPECIES_DEOXYS
- .short SPECIES_PHIONE
- .short SPECIES_MANAPHY
- .short SPECIES_DARKRAI
- .short SPECIES_SHAYMIN
- .short SPECIES_ARCEUS
-
- .text
-
- thumb_func_start Sav2_Pokedex_sizeof
-Sav2_Pokedex_sizeof: ; 0x02023D64
- mov r0, #0x4f
- lsl r0, r0, #0x2
- bx lr
- .balign 4
-
- thumb_func_start Sav2_Pokedex_new
-Sav2_Pokedex_new: ; 0x02023D6C
- push {r4, lr}
- mov r1, #0x4f
- lsl r1, r1, #0x2
- bl AllocFromHeap
- add r4, r0, #0x0
- bl Sav2_Pokedex_init
- add r0, r4, #0x0
- pop {r4, pc}
-
- thumb_func_start Sav2_Pokedex_Copy
-Sav2_Pokedex_Copy: ; 0x02023D80
- ldr r3, _02023D88 ; =MI_CpuCopy8
- mov r2, #0x4f
- lsl r2, r2, #0x2
- bx r3
- .balign 4
-_02023D88: .word MI_CpuCopy8
-
- thumb_func_start FUN_02023D8C
-FUN_02023D8C: ; 0x02023D8C
- push {r3-r5, lr}
- add r5, r0, #0x0
- ldr r0, _02023DE8 ; =0x000001A6
- add r4, r1, #0x0
- cmp r4, r0
- beq _02023DA2
- add r0, r0, #0x1
- cmp r4, r0
- beq _02023DA2
- bl ErrorHandling
-_02023DA2:
- lsl r1, r4, #0x10
- add r0, r5, #0x0
- lsr r1, r1, #0x10
- bl FUN_020245F0
- cmp r0, #0x0
- bne _02023DB4
- mov r0, #0x0
- pop {r3-r5, pc}
-_02023DB4:
- ldr r0, _02023DE8 ; =0x000001A6
- cmp r4, r0
- bne _02023DBE
- sub r0, #0x9e
- b _02023DC0
-_02023DBE:
- sub r0, #0x9d
-_02023DC0:
- add r0, r5, r0
- ldrb r1, [r0, #0x0]
- mov r2, #0x1
- add r0, r1, #0x0
- tst r0, r2
- bne _02023DCE
- mov r2, #0x0
-_02023DCE:
- mov r0, #0x2
- tst r0, r1
- beq _02023DD8
- mov r0, #0x1
- b _02023DDA
-_02023DD8:
- mov r0, #0x0
-_02023DDA:
- cmp r2, r0
- bne _02023DE2
- mov r0, #0x1
- pop {r3-r5, pc}
-_02023DE2:
- mov r0, #0x2
- pop {r3-r5, pc}
- nop
-_02023DE8: .word 0x000001A6
-
- thumb_func_start FUN_02023DEC
-FUN_02023DEC: ; 0x02023DEC
- push {r3-r7, lr}
- add r7, r0, #0x0
- ldr r0, _02023E6C ; =0x000001A6
- add r6, r1, #0x0
- add r5, r2, #0x0
- cmp r6, r0
- beq _02023E04
- add r0, r0, #0x1
- cmp r6, r0
- beq _02023E04
- bl ErrorHandling
-_02023E04:
- lsl r1, r6, #0x10
- add r0, r7, #0x0
- lsr r1, r1, #0x10
- bl FUN_020245F0
- cmp r0, #0x0
- bne _02023E16
- mov r0, #0x0
- pop {r3-r7, pc}
-_02023E16:
- ldr r0, _02023E6C ; =0x000001A6
- cmp r6, r0
- bne _02023E20
- sub r0, #0x9e
- b _02023E22
-_02023E20:
- sub r0, #0x9d
-_02023E22:
- add r4, r7, r0
- add r0, r7, #0x0
- add r1, r6, #0x0
- bl FUN_02023D8C
- mov r6, #0x0
- cmp r0, #0x0
- bls _02023E66
- mov r1, #0x1
-_02023E34:
- add r2, r6, #0x1
- lsl r2, r2, #0x10
- lsr r2, r2, #0x10
- sub r2, r2, #0x1
- lsl r2, r2, #0x10
- lsr r3, r2, #0x10
- add r7, r3, #0x0
- mov r2, #0x7
- asr r3, r3, #0x3
- and r7, r2
- add r2, r1, #0x0
- ldrb r3, [r4, r3]
- lsl r2, r7
- tst r2, r3
- beq _02023E56
- add r2, r1, #0x0
- b _02023E58
-_02023E56:
- mov r2, #0x0
-_02023E58:
- cmp r2, r5
- bne _02023E60
- mov r0, #0x1
- pop {r3-r7, pc}
-_02023E60:
- add r6, r6, #0x1
- cmp r6, r0
- blo _02023E34
-_02023E66:
- mov r0, #0x0
- pop {r3-r7, pc}
- nop
-_02023E6C: .word 0x000001A6
-
- thumb_func_start FUN_02023E70
-FUN_02023E70: ; 0x02023E70
- push {r3-r7, lr}
- add r6, r0, #0x0
- ldr r0, _02023F28 ; =0x000001A6
- add r5, r1, #0x0
- add r7, r2, #0x0
- cmp r5, r0
- beq _02023E88
- add r0, r0, #0x1
- cmp r5, r0
- beq _02023E88
- bl ErrorHandling
-_02023E88:
- lsl r2, r7, #0x18
- add r0, r6, #0x0
- add r1, r5, #0x0
- lsr r2, r2, #0x18
- bl FUN_02023DEC
- cmp r0, #0x0
- bne _02023F26
- ldr r0, _02023F28 ; =0x000001A6
- cmp r5, r0
- bne _02023EA2
- sub r0, #0x9e
- b _02023EA4
-_02023EA2:
- sub r0, #0x9d
-_02023EA4:
- add r4, r6, r0
- add r0, r6, #0x0
- add r1, r5, #0x0
- bl FUN_02023D8C
- add r5, r0, #0x0
- cmp r5, #0x2
- bge _02023F26
- add r0, r5, #0x1
- lsl r0, r0, #0x10
- lsr r6, r0, #0x10
- lsl r0, r7, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x2
- blo _02023EC6
- bl ErrorHandling
-_02023EC6:
- sub r0, r6, #0x1
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- add r2, r1, #0x0
- mov r0, #0x7
- and r2, r0
- asr r1, r1, #0x3
- mov r3, #0x1
- lsl r3, r2
- ldrb r0, [r4, r1]
- mvn r3, r3
- and r0, r3
- strb r0, [r4, r1]
- lsl r0, r7, #0x18
- lsr r6, r0, #0x18
- add r0, r6, #0x0
- ldrb r3, [r4, r1]
- lsl r0, r2
- orr r0, r3
- strb r0, [r4, r1]
- cmp r5, #0x0
- bne _02023F26
- add r0, r5, #0x2
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- cmp r6, #0x2
- blo _02023F00
- bl ErrorHandling
-_02023F00:
- sub r0, r5, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- mov r0, #0x7
- add r1, r2, #0x0
- and r1, r0
- asr r0, r2, #0x3
- mov r2, #0x1
- lsl r2, r1
- ldrb r3, [r4, r0]
- mvn r2, r2
- and r2, r3
- strb r2, [r4, r0]
- add r2, r6, #0x0
- ldrb r3, [r4, r0]
- lsl r2, r1
- add r1, r3, #0x0
- orr r1, r2
- strb r1, [r4, r0]
-_02023F26:
- pop {r3-r7, pc}
- .balign 4
-_02023F28: .word 0x000001A6
-
- thumb_func_start FUN_02023F2C
-FUN_02023F2C: ; 0x02023F2C
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r0, #0x67
- add r4, r1, #0x0
- lsl r0, r0, #0x2
- cmp r4, r0
- beq _02023F44
- add r0, r0, #0x1
- cmp r4, r0
- beq _02023F44
- bl ErrorHandling
-_02023F44:
- lsl r1, r4, #0x10
- add r0, r5, #0x0
- lsr r1, r1, #0x10
- bl FUN_020245F0
- cmp r0, #0x0
- bne _02023F56
- mov r0, #0x0
- pop {r3-r5, pc}
-_02023F56:
- mov r0, #0x67
- lsl r0, r0, #0x2
- cmp r4, r0
- bne _02023F62
- sub r0, #0x92
- b _02023F64
-_02023F62:
- sub r0, #0x91
-_02023F64:
- add r1, r5, r0
- mov r0, #0x0
- mov r3, #0x3
-_02023F6A:
- lsl r2, r0, #0x10
- lsr r5, r2, #0x10
- asr r2, r5, #0x2
- ldrb r4, [r1, r2]
- lsl r2, r5, #0x1e
- lsr r2, r2, #0x1d
- asr r4, r2
- add r2, r4, #0x0
- and r2, r3
- cmp r2, #0x3
- beq _02023F86
- add r0, r0, #0x1
- cmp r0, #0x3
- blt _02023F6A
-_02023F86:
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02023F88
-FUN_02023F88: ; 0x02023F88
- push {r4-r6, lr}
- add r6, r0, #0x0
- mov r0, #0x67
- add r5, r1, #0x0
- lsl r0, r0, #0x2
- add r4, r2, #0x0
- cmp r5, r0
- beq _02023FA2
- add r0, r0, #0x1
- cmp r5, r0
- beq _02023FA2
- bl ErrorHandling
-_02023FA2:
- lsl r1, r5, #0x10
- add r0, r6, #0x0
- lsr r1, r1, #0x10
- bl FUN_020245F0
- cmp r0, #0x0
- bne _02023FB4
- mov r0, #0x0
- pop {r4-r6, pc}
-_02023FB4:
- mov r0, #0x67
- lsl r0, r0, #0x2
- cmp r5, r0
- bne _02023FC0
- sub r0, #0x92
- b _02023FC2
-_02023FC0:
- sub r0, #0x91
-_02023FC2:
- add r1, r6, r0
- mov r0, #0x0
- mov r3, #0x3
-_02023FC8:
- lsl r2, r0, #0x10
- lsr r6, r2, #0x10
- asr r2, r6, #0x2
- ldrb r5, [r1, r2]
- lsl r2, r6, #0x1e
- lsr r2, r2, #0x1d
- asr r5, r2
- add r2, r5, #0x0
- and r2, r3
- cmp r2, r4
- bne _02023FE2
- mov r0, #0x1
- pop {r4-r6, pc}
-_02023FE2:
- add r0, r0, #0x1
- cmp r0, #0x3
- blt _02023FC8
- mov r0, #0x0
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02023FEC
-FUN_02023FEC: ; 0x02023FEC
- push {r3-r7, lr}
- add r6, r0, #0x0
- mov r0, #0x67
- add r5, r1, #0x0
- lsl r0, r0, #0x2
- add r7, r2, #0x0
- cmp r5, r0
- beq _02024006
- add r0, r0, #0x1
- cmp r5, r0
- beq _02024006
- bl ErrorHandling
-_02024006:
- lsl r2, r7, #0x18
- add r0, r6, #0x0
- add r1, r5, #0x0
- lsr r2, r2, #0x18
- bl FUN_02023F88
- cmp r0, #0x0
- bne _02024064
- mov r0, #0x67
- lsl r0, r0, #0x2
- cmp r5, r0
- bne _02024022
- sub r0, #0x92
- b _02024024
-_02024022:
- sub r0, #0x91
-_02024024:
- add r4, r6, r0
- add r0, r6, #0x0
- add r1, r5, #0x0
- bl FUN_02023F2C
- add r5, r0, #0x0
- cmp r5, #0x3
- bge _02024064
- lsl r0, r7, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x4
- blo _02024040
- bl ErrorHandling
-_02024040:
- lsl r0, r5, #0x10
- lsr r2, r0, #0x10
- lsl r0, r2, #0x1e
- lsr r1, r0, #0x1d
- asr r0, r2, #0x2
- mov r2, #0x3
- lsl r2, r1
- ldrb r3, [r4, r0]
- mvn r2, r2
- and r2, r3
- strb r2, [r4, r0]
- lsl r2, r7, #0x18
- lsr r2, r2, #0x18
- ldrb r3, [r4, r0]
- lsl r2, r1
- add r1, r3, #0x0
- orr r1, r2
- strb r1, [r4, r0]
-_02024064:
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02024068
-FUN_02024068: ; 0x02024068
- push {r4-r6, lr}
- add r6, r2, #0x0
- add r5, r0, #0x0
- add r4, r1, #0x0
- cmp r6, #0x4
- blo _02024078
- bl ErrorHandling
-_02024078:
- cmp r4, #0xf
- bls _02024080
- bl ErrorHandling
-_02024080:
- cmp r6, #0x2
- bhs _0202409E
- lsl r0, r6, #0x2
- add r0, #0x18
- mov r1, #0xf
- lsl r1, r0
- ldr r2, [r5, #0x40]
- mvn r1, r1
- and r2, r1
- add r1, r4, #0x0
- lsl r1, r0
- add r0, r2, #0x0
- orr r0, r1
- str r0, [r5, #0x40]
- pop {r4-r6, pc}
-_0202409E:
- sub r0, r6, #0x2
- lsl r0, r0, #0x18
- add r1, r5, #0x0
- lsr r0, r0, #0x16
- add r1, #0x80
- ldr r2, [r1, #0x0]
- add r0, #0x18
- mov r1, #0xf
- lsl r1, r0
- mvn r1, r1
- and r2, r1
- add r1, r5, #0x0
- add r1, #0x80
- str r2, [r1, #0x0]
- add r1, r5, #0x0
- add r1, #0x80
- ldr r2, [r1, #0x0]
- add r1, r4, #0x0
- lsl r1, r0
- add r0, r2, #0x0
- orr r0, r1
- add r5, #0x80
- str r0, [r5, #0x0]
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_020240D0
-FUN_020240D0: ; 0x020240D0
- push {r3-r6}
- mov r3, #0xf
- mov r1, #0x0
- add r4, r3, #0x0
-_020240D8:
- lsl r2, r1, #0x18
- lsr r6, r2, #0x18
- cmp r6, #0x2
- bhs _020240EE
- lsl r2, r6, #0x2
- ldr r5, [r0, #0x40]
- add r2, #0x18
- lsr r5, r2
- add r2, r5, #0x0
- and r2, r4
- b _02024102
-_020240EE:
- add r2, r0, #0x0
- add r2, #0x80
- ldr r5, [r2, #0x0]
- sub r2, r6, #0x2
- lsl r2, r2, #0x18
- lsr r2, r2, #0x16
- add r2, #0x18
- lsr r5, r2
- add r2, r5, #0x0
- and r2, r3
-_02024102:
- cmp r2, #0xf
- beq _0202410C
- add r1, r1, #0x1
- cmp r1, #0x4
- blt _020240D8
-_0202410C:
- add r0, r1, #0x0
- pop {r3-r6}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02024114
-FUN_02024114: ; 0x02024114
- push {r4-r7}
- mov r2, #0xf
- mov r6, #0x0
- add r3, r2, #0x0
-_0202411C:
- lsl r4, r6, #0x18
- lsr r5, r4, #0x18
- cmp r5, #0x2
- bhs _02024134
- ldr r7, [r0, #0x40]
- lsl r4, r5, #0x2
- add r4, #0x18
- add r5, r7, #0x0
- lsr r5, r4
- add r4, r5, #0x0
- and r4, r3
- b _02024146
-_02024134:
- add r4, r0, #0x0
- sub r5, r5, #0x2
- add r4, #0x80
- lsl r5, r5, #0x18
- lsr r5, r5, #0x16
- ldr r4, [r4, #0x0]
- add r5, #0x18
- lsr r4, r5
- and r4, r2
-_02024146:
- cmp r1, r4
- bne _02024150
- mov r0, #0x1
- pop {r4-r7}
- bx lr
-_02024150:
- add r6, r6, #0x1
- cmp r6, #0x4
- blt _0202411C
- mov r0, #0x0
- pop {r4-r7}
- bx lr
-
- thumb_func_start FUN_0202415C
-FUN_0202415C: ; 0x0202415C
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r0, r2, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- ldr r0, _02024198 ; =0x00000182
- cmp r6, r0
- bne _02024196
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02024114
- cmp r0, #0x0
- bne _02024196
- add r0, r5, #0x0
- bl FUN_020240D0
- add r2, r0, #0x0
- lsl r2, r2, #0x18
- add r0, r5, #0x0
- add r1, r4, #0x0
- lsr r2, r2, #0x18
- bl FUN_02024068
-_02024196:
- pop {r4-r6, pc}
- .balign 4
-_02024198: .word 0x00000182
-
- thumb_func_start FUN_0202419C
-FUN_0202419C: ; 0x0202419C
- push {r4-r6, lr}
- add r5, r0, #0x0
- mov r4, #0x0
- mov r6, #0xf
-_020241A4:
- lsl r2, r4, #0x18
- add r0, r5, #0x0
- add r1, r6, #0x0
- lsr r2, r2, #0x18
- bl FUN_02024068
- add r4, r4, #0x1
- cmp r4, #0x4
- blt _020241A4
- pop {r4-r6, pc}
-
- thumb_func_start FUN_020241B8
-FUN_020241B8: ; 0x020241B8
- push {r4-r6, lr}
- add r4, r1, #0x0
- add r5, r0, #0x0
- cmp r4, #0xc9
- bne _02024210
- add r0, r2, #0x0
- bl GetMonUnownLetter
- lsl r1, r0, #0x18
- lsr r3, r1, #0x18
- mov r1, #0x43
- mov r4, #0x0
- add r6, r5, #0x0
- lsl r1, r1, #0x2
-_020241D4:
- ldrb r2, [r6, r1]
- cmp r3, r2
- bne _020241DE
- mov r1, #0x1
- b _020241E8
-_020241DE:
- add r4, r4, #0x1
- add r6, r6, #0x1
- cmp r4, #0x1c
- blt _020241D4
- mov r1, #0x0
-_020241E8:
- cmp r1, #0x0
- bne _02024290
- mov r1, #0x43
- mov r3, #0x0
- add r4, r5, #0x0
- lsl r1, r1, #0x2
-_020241F4:
- ldrb r2, [r4, r1]
- cmp r2, #0xff
- beq _02024202
- add r3, r3, #0x1
- add r4, r4, #0x1
- cmp r3, #0x1c
- blt _020241F4
-_02024202:
- cmp r3, #0x1c
- bge _02024290
- mov r1, #0x43
- add r2, r5, r3
- lsl r1, r1, #0x2
- strb r0, [r2, r1]
- pop {r4-r6, pc}
-_02024210:
- mov r6, #0x67
- lsl r6, r6, #0x2
- cmp r4, r6
- bne _0202422E
- add r0, r2, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetMonData
- add r2, r0, #0x0
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02023FEC
- pop {r4-r6, pc}
-_0202422E:
- add r3, r6, #0x1
- cmp r4, r3
- bne _0202424A
- add r0, r2, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetMonData
- add r2, r0, #0x0
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02023FEC
- pop {r4-r6, pc}
-_0202424A:
- add r3, r6, #0x0
- add r3, #0xa
- cmp r4, r3
- bne _02024268
- add r0, r2, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetMonData
- add r2, r0, #0x0
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02023E70
- pop {r4-r6, pc}
-_02024268:
- add r3, r6, #0x0
- add r3, #0xb
- cmp r4, r3
- bne _02024286
- add r0, r2, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetMonData
- add r2, r0, #0x0
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02023E70
- pop {r4-r6, pc}
-_02024286:
- sub r6, #0x1a
- cmp r4, r6
- bne _02024290
- bl FUN_0202415C
-_02024290:
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02024294
-FUN_02024294: ; 0x02024294
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r6, r2, #0x0
- add r0, r1, #0x0
- bl FUN_02087A50
- add r4, r0, #0x0
- add r0, r6, #0x0
- bl FUN_02087A1C
- cmp r4, #0xe
- beq _020242C0
- cmp r0, #0x6
- beq _020242C0
- ldr r1, _020242C4 ; =0x00000129
- add r3, r5, r1
- ldrb r2, [r3, r4]
- mov r1, #0x1
- lsl r1, r0
- add r0, r2, #0x0
- orr r0, r1
- strb r0, [r3, r4]
-_020242C0:
- pop {r4-r6, pc}
- nop
-_020242C4: .word 0x00000129
-
- thumb_func_start FUN_020242C8
-FUN_020242C8: ; 0x020242C8
- push {r4-r6, lr}
- add r6, r1, #0x0
- add r5, r0, #0x0
- add r0, r6, #0x0
- mov r1, #0x12 ; BASE_GENDER_RATIO
- add r4, r2, #0x0
- bl GetMonBaseStat
- cmp r0, #0xff
- bne _020242EA
- cmp r4, #0x0
- bne _020242E4
- mov r0, #0x2
- pop {r4-r6, pc}
-_020242E4:
- mov r0, #0x0
- mvn r0, r0
- pop {r4-r6, pc}
-_020242EA:
- sub r0, r6, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- mov r1, #0x1
- mov r0, #0x7
- add r3, r2, #0x0
- and r3, r0
- add r0, r1, #0x0
- lsl r0, r3
- asr r3, r2, #0x3
- add r3, r5, r3
- add r3, #0x84
- ldrb r3, [r3, #0x0]
- tst r0, r3
- bne _0202430A
- mov r1, #0x0
-_0202430A:
- lsl r0, r1, #0x18
- lsr r1, r0, #0x18
- cmp r4, #0x1
- bne _0202433A
- add r4, r2, #0x0
- asr r2, r2, #0x3
- add r2, r5, r2
- mov r0, #0x7
- add r2, #0xc4
- mov r3, #0x1
- and r4, r0
- add r0, r3, #0x0
- ldrb r2, [r2, #0x0]
- lsl r0, r4
- tst r0, r2
- bne _0202432C
- mov r3, #0x0
-_0202432C:
- lsl r0, r3, #0x18
- lsr r0, r0, #0x18
- cmp r0, r1
- bne _0202433C
- mov r0, #0x0
- mvn r0, r0
- pop {r4-r6, pc}
-_0202433A:
- add r0, r1, #0x0
-_0202433C:
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start FUN_02024340
-FUN_02024340: ; 0x02024340
- push {r4-r5}
- mov r3, #0x0
- ldr r5, _02024360 ; =UNK_020EE940 + 2
- mov r4, #0x1
- add r1, r3, #0x0
-_0202434A:
- ldrh r2, [r5, #0x0]
- cmp r0, r2
- bne _02024352
- add r4, r1, #0x0
-_02024352:
- add r3, r3, #0x1
- add r5, r5, #0x2
- cmp r3, #0xb
- blt _0202434A
- add r0, r4, #0x0
- pop {r4-r5}
- bx lr
- .balign 4
-_02024360: .word UNK_020EE940 + 2
-
- thumb_func_start FUN_02024364
-FUN_02024364: ; 0x02024364
- ldr r1, _02024374 ; =0x000001EA
- mov r2, #0x1
- cmp r0, r1
- bne _0202436E
- mov r2, #0x0
-_0202436E:
- add r0, r2, #0x0
- bx lr
- nop
-_02024374: .word 0x000001EA
-
- thumb_func_start Sav2_Pokedex_init
-Sav2_Pokedex_init: ; 0x02024378
- push {r4, lr}
- mov r2, #0x4f
- mov r1, #0x0
- lsl r2, r2, #0x2
- add r4, r0, #0x0
- bl memset
- ldr r0, _020243C0 ; =0xBEEFCAFE
- mov r1, #0x0
- str r0, [r4, #0x0]
- ldr r0, _020243C4 ; =0x00000139
- mov r2, #0x1c
- strb r1, [r4, r0]
- sub r0, #0x2d
- add r0, r4, r0
- mov r1, #0xff
- bl memset
- mov r1, #0xff
- add r0, r1, #0x0
- add r0, #0x9
- strb r1, [r4, r0]
- add r0, r1, #0x0
- add r0, #0xa
- strb r1, [r4, r0]
- add r0, r1, #0x0
- add r0, #0xb
- strb r1, [r4, r0]
- add r0, r1, #0x0
- add r0, #0xc
- strb r1, [r4, r0]
- add r0, r4, #0x0
- bl FUN_0202419C
- pop {r4, pc}
- nop
-_020243C0: .word 0xBEEFCAFE
-_020243C4: .word 0x00000139
-
- thumb_func_start FUN_020243C8
-FUN_020243C8: ; 0x020243C8
- push {r3-r7, lr}
- add r6, r0, #0x0
- ldr r1, [r6, #0x0]
- ldr r0, _020243FC ; =0xBEEFCAFE
- cmp r1, r0
- beq _020243D8
- bl ErrorHandling
-_020243D8:
- ldr r7, _02024400 ; =0x000001ED
- mov r5, #0x0
- mov r4, #0x1
-_020243DE:
- lsl r1, r4, #0x10
- add r0, r6, #0x0
- lsr r1, r1, #0x10
- bl FUN_02024594
- cmp r0, #0x1
- bne _020243EE
- add r5, r5, #0x1
-_020243EE:
- add r4, r4, #0x1
- cmp r4, r7
- ble _020243DE
- lsl r0, r5, #0x10
- lsr r0, r0, #0x10
- pop {r3-r7, pc}
- nop
-_020243FC: .word 0xBEEFCAFE
-_02024400: .word 0x000001ED
-
- thumb_func_start FUN_02024404
-FUN_02024404: ; 0x02024404
- push {r3-r7, lr}
- add r6, r0, #0x0
- ldr r1, [r6, #0x0]
- ldr r0, _02024438 ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024414
- bl ErrorHandling
-_02024414:
- ldr r7, _0202443C ; =0x000001ED
- mov r5, #0x0
- mov r4, #0x1
-_0202441A:
- lsl r1, r4, #0x10
- add r0, r6, #0x0
- lsr r1, r1, #0x10
- bl FUN_020245F0
- cmp r0, #0x1
- bne _0202442A
- add r5, r5, #0x1
-_0202442A:
- add r4, r4, #0x1
- cmp r4, r7
- ble _0202441A
- lsl r0, r5, #0x10
- lsr r0, r0, #0x10
- pop {r3-r7, pc}
- nop
-_02024438: .word 0xBEEFCAFE
-_0202443C: .word 0x000001ED
-
- thumb_func_start FUN_02024440
-FUN_02024440: ; 0x02024440
- push {r4, lr}
- add r4, r0, #0x0
- bl Pokedex_GetNatDexFlag
- cmp r0, #0x0
- beq _02024454
- add r0, r4, #0x0
- bl FUN_02024404
- pop {r4, pc}
-_02024454:
- add r0, r4, #0x0
- bl FUN_020244A4
- pop {r4, pc}
-
- thumb_func_start FUN_0202445C
-FUN_0202445C: ; 0x0202445C
- push {r3-r7, lr}
- add r6, r0, #0x0
- ldr r1, [r6, #0x0]
- ldr r0, _0202449C ; =0xBEEFCAFE
- cmp r1, r0
- beq _0202446C
- bl ErrorHandling
-_0202446C:
- ldr r7, _020244A0 ; =0x000001ED
- mov r5, #0x0
- mov r4, #0x1
-_02024472:
- lsl r1, r4, #0x10
- add r0, r6, #0x0
- lsr r1, r1, #0x10
- bl FUN_02024594
- cmp r0, #0x1
- bne _0202448E
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- bl FUN_02069B40
- cmp r0, #0x0
- beq _0202448E
- add r5, r5, #0x1
-_0202448E:
- add r4, r4, #0x1
- cmp r4, r7
- ble _02024472
- lsl r0, r5, #0x10
- lsr r0, r0, #0x10
- pop {r3-r7, pc}
- nop
-_0202449C: .word 0xBEEFCAFE
-_020244A0: .word 0x000001ED
-
- thumb_func_start FUN_020244A4
-FUN_020244A4: ; 0x020244A4
- push {r3-r7, lr}
- add r6, r0, #0x0
- ldr r1, [r6, #0x0]
- ldr r0, _020244E4 ; =0xBEEFCAFE
- cmp r1, r0
- beq _020244B4
- bl ErrorHandling
-_020244B4:
- ldr r7, _020244E8 ; =0x000001ED
- mov r5, #0x0
- mov r4, #0x1
-_020244BA:
- lsl r1, r4, #0x10
- add r0, r6, #0x0
- lsr r1, r1, #0x10
- bl FUN_020245F0
- cmp r0, #0x1
- bne _020244D6
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- bl FUN_02069B40
- cmp r0, #0x0
- beq _020244D6
- add r5, r5, #0x1
-_020244D6:
- add r4, r4, #0x1
- cmp r4, r7
- ble _020244BA
- lsl r0, r5, #0x10
- lsr r0, r0, #0x10
- pop {r3-r7, pc}
- nop
-_020244E4: .word 0xBEEFCAFE
-_020244E8: .word 0x000001ED
-
- thumb_func_start FUN_020244EC
-FUN_020244EC: ; 0x020244EC
- push {r3, lr}
- bl FUN_02024518
- ldr r1, _02024500 ; =0x000001E2
- cmp r0, r1
- blo _020244FC
- mov r0, #0x1
- pop {r3, pc}
-_020244FC:
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-_02024500: .word 0x000001E2
-
- thumb_func_start FUN_02024504
-FUN_02024504: ; 0x02024504
- push {r3, lr}
- bl FUN_02024550
- cmp r0, #0x96
- blo _02024512
- mov r0, #0x1
- pop {r3, pc}
-_02024512:
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02024518
-FUN_02024518: ; 0x02024518
- push {r3-r7, lr}
- ldr r7, _0202454C ; =0x000001ED
- add r6, r0, #0x0
- mov r5, #0x0
- mov r4, #0x1
-_02024522:
- lsl r1, r4, #0x10
- add r0, r6, #0x0
- lsr r1, r1, #0x10
- bl FUN_02024594
- cmp r0, #0x1
- bne _02024542
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- bl FUN_02024340
- cmp r0, #0x1
- bne _02024542
- add r0, r5, #0x1
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
-_02024542:
- add r4, r4, #0x1
- cmp r4, r7
- ble _02024522
- add r0, r5, #0x0
- pop {r3-r7, pc}
- .balign 4
-_0202454C: .word 0x000001ED
-
- thumb_func_start FUN_02024550
-FUN_02024550: ; 0x02024550
- push {r3-r7, lr}
- ldr r7, _02024590 ; =0x000001ED
- add r6, r0, #0x0
- mov r5, #0x0
- mov r4, #0x1
-_0202455A:
- lsl r1, r4, #0x10
- add r0, r6, #0x0
- lsr r1, r1, #0x10
- bl FUN_020245F0
- cmp r0, #0x1
- bne _02024586
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- bl FUN_02069B40
- cmp r0, #0x0
- beq _02024586
- lsl r0, r4, #0x10
- lsr r0, r0, #0x10
- bl FUN_02024364
- cmp r0, #0x1
- bne _02024586
- add r0, r5, #0x1
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
-_02024586:
- add r4, r4, #0x1
- cmp r4, r7
- ble _0202455A
- add r0, r5, #0x0
- pop {r3-r7, pc}
- .balign 4
-_02024590: .word 0x000001ED
-
- thumb_func_start FUN_02024594
-FUN_02024594: ; 0x02024594
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _020245E8 ; =0xBEEFCAFE
- cmp r1, r0
- beq _020245A6
- bl ErrorHandling
-_020245A6:
- cmp r4, #0x0
- beq _020245B0
- ldr r0, _020245EC ; =0x000001ED
- cmp r4, r0
- bls _020245B8
-_020245B0:
- bl ErrorHandling
- mov r0, #0x1
- b _020245BA
-_020245B8:
- mov r0, #0x0
-_020245BA:
- cmp r0, #0x0
- beq _020245C2
- mov r0, #0x0
- pop {r3-r5, pc}
-_020245C2:
- sub r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- mov r0, #0x1
- mov r1, #0x7
- and r1, r2
- add r3, r0, #0x0
- lsl r3, r1
- asr r1, r2, #0x3
- add r2, r5, r1
- ldrb r1, [r2, #0x4]
- tst r1, r3
- beq _020245E4
- add r2, #0x44
- ldrb r1, [r2, #0x0]
- tst r1, r3
- bne _020245E6
-_020245E4:
- mov r0, #0x0
-_020245E6:
- pop {r3-r5, pc}
- .balign 4
-_020245E8: .word 0xBEEFCAFE
-_020245EC: .word 0x000001ED
-
- thumb_func_start FUN_020245F0
-FUN_020245F0: ; 0x020245F0
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _02024640 ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024602
- bl ErrorHandling
-_02024602:
- cmp r4, #0x0
- beq _0202460C
- ldr r0, _02024644 ; =0x000001ED
- cmp r4, r0
- bls _02024614
-_0202460C:
- bl ErrorHandling
- mov r0, #0x1
- b _02024616
-_02024614:
- mov r0, #0x0
-_02024616:
- cmp r0, #0x0
- beq _0202461E
- mov r0, #0x0
- pop {r3-r5, pc}
-_0202461E:
- sub r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r3, r0, #0x10
- mov r0, #0x1
- mov r1, #0x7
- and r1, r3
- add r2, r0, #0x0
- lsl r2, r1
- asr r1, r3, #0x3
- add r1, r5, r1
- add r1, #0x44
- ldrb r1, [r1, #0x0]
- tst r1, r2
- bne _0202463C
- mov r0, #0x0
-_0202463C:
- pop {r3-r5, pc}
- nop
-_02024640: .word 0xBEEFCAFE
-_02024644: .word 0x000001ED
-
- thumb_func_start FUN_02024648
-FUN_02024648: ; 0x02024648
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _02024670 ; =0xBEEFCAFE
- cmp r1, r0
- beq _0202465A
- bl ErrorHandling
-_0202465A:
- cmp r4, #0x0
- bne _02024666
- mov r0, #0x41
- lsl r0, r0, #0x2
- ldr r6, [r5, r0]
- b _0202466A
-_02024666:
- bl ErrorHandling
-_0202466A:
- add r0, r6, #0x0
- pop {r4-r6, pc}
- nop
-_02024670: .word 0xBEEFCAFE
-
- thumb_func_start FUN_02024674
-FUN_02024674: ; 0x02024674
- push {r4-r6, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _020246D4 ; =0xBEEFCAFE
- add r6, r2, #0x0
- cmp r1, r0
- beq _02024688
- bl ErrorHandling
-_02024688:
- cmp r4, #0x0
- beq _02024692
- ldr r0, _020246D8 ; =0x000001ED
- cmp r4, r0
- bls _0202469A
-_02024692:
- bl ErrorHandling
- mov r0, #0x1
- b _0202469C
-_0202469A:
- mov r0, #0x0
-_0202469C:
- cmp r0, #0x0
- beq _020246A6
- mov r0, #0x0
- mvn r0, r0
- pop {r4-r6, pc}
-_020246A6:
- sub r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- add r3, r2, #0x0
- asr r2, r2, #0x3
- add r2, r5, r2
- mov r0, #0x7
- add r2, #0x44
- mov r1, #0x1
- and r3, r0
- ldrb r2, [r2, #0x0]
- lsl r1, r3
- tst r1, r2
- beq _020246CE
- add r0, r5, #0x0
- add r1, r4, #0x0
- add r2, r6, #0x0
- bl FUN_020242C8
- pop {r4-r6, pc}
-_020246CE:
- sub r0, #0x8
- pop {r4-r6, pc}
- nop
-_020246D4: .word 0xBEEFCAFE
-_020246D8: .word 0x000001ED
-
- thumb_func_start FUN_020246DC
-FUN_020246DC: ; 0x020246DC
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _02024718 ; =0xBEEFCAFE
- cmp r1, r0
- beq _020246EE
- bl ErrorHandling
-_020246EE:
- mov r0, #0x43
- mov r2, #0x0
- lsl r0, r0, #0x2
-_020246F4:
- add r1, r5, r2
- ldrb r1, [r1, r0]
- cmp r1, #0xff
- beq _02024702
- add r2, r2, #0x1
- cmp r2, #0x1c
- blt _020246F4
-_02024702:
- cmp r2, r4
- bgt _0202470C
- mov r0, #0x0
- mvn r0, r0
- pop {r3-r5, pc}
-_0202470C:
- mov r0, #0x43
- add r1, r5, r4
- lsl r0, r0, #0x2
- ldrb r0, [r1, r0]
- pop {r3-r5, pc}
- nop
-_02024718: .word 0xBEEFCAFE
-
- thumb_func_start FUN_0202471C
-FUN_0202471C: ; 0x0202471C
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024744 ; =0xBEEFCAFE
- cmp r1, r0
- beq _0202472C
- bl ErrorHandling
-_0202472C:
- mov r1, #0x43
- mov r0, #0x0
- lsl r1, r1, #0x2
-_02024732:
- add r2, r4, r0
- ldrb r2, [r2, r1]
- cmp r2, #0xff
- beq _02024740
- add r0, r0, #0x1
- cmp r0, #0x1c
- blt _02024732
-_02024740:
- pop {r4, pc}
- nop
-_02024744: .word 0xBEEFCAFE
-
- thumb_func_start FUN_02024748
-FUN_02024748: ; 0x02024748
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _0202479C ; =0xBEEFCAFE
- cmp r1, r0
- beq _0202475A
- bl ErrorHandling
-_0202475A:
- ldr r1, _020247A0 ; =0x000001A6
- add r0, r5, #0x0
- bl FUN_02023D8C
- cmp r0, r4
- bgt _0202476C
- mov r0, #0x0
- mvn r0, r0
- pop {r3-r5, pc}
-_0202476C:
- cmp r4, #0x2
- blt _02024774
- bl ErrorHandling
-_02024774:
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- sub r0, r0, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- mov r0, #0x1
- mov r1, #0x7
- and r1, r2
- add r3, r0, #0x0
- lsl r3, r1
- asr r1, r2, #0x3
- add r2, r5, r1
- mov r1, #0x42
- lsl r1, r1, #0x2
- ldrb r1, [r2, r1]
- tst r1, r3
- bne _0202479A
- mov r0, #0x0
-_0202479A:
- pop {r3-r5, pc}
- .balign 4
-_0202479C: .word 0xBEEFCAFE
-_020247A0: .word 0x000001A6
-
- thumb_func_start FUN_020247A4
-FUN_020247A4: ; 0x020247A4
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _020247C0 ; =0xBEEFCAFE
- cmp r1, r0
- beq _020247B4
- bl ErrorHandling
-_020247B4:
- ldr r1, _020247C4 ; =0x000001A6
- add r0, r4, #0x0
- bl FUN_02023D8C
- pop {r4, pc}
- nop
-_020247C0: .word 0xBEEFCAFE
-_020247C4: .word 0x000001A6
-
- thumb_func_start FUN_020247C8
-FUN_020247C8: ; 0x020247C8
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _0202481C ; =0xBEEFCAFE
- cmp r1, r0
- beq _020247DA
- bl ErrorHandling
-_020247DA:
- ldr r1, _02024820 ; =0x000001A7
- add r0, r5, #0x0
- bl FUN_02023D8C
- cmp r0, r4
- bgt _020247EC
- mov r0, #0x0
- mvn r0, r0
- pop {r3-r5, pc}
-_020247EC:
- cmp r4, #0x2
- blt _020247F4
- bl ErrorHandling
-_020247F4:
- add r0, r4, #0x1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- sub r0, r0, #0x1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- mov r0, #0x1
- mov r1, #0x7
- and r1, r2
- add r3, r0, #0x0
- lsl r3, r1
- asr r1, r2, #0x3
- add r2, r5, r1
- ldr r1, _02024824 ; =0x00000109
- ldrb r1, [r2, r1]
- tst r1, r3
- bne _02024818
- mov r0, #0x0
-_02024818:
- pop {r3-r5, pc}
- nop
-_0202481C: .word 0xBEEFCAFE
-_02024820: .word 0x000001A7
-_02024824: .word 0x00000109
-
- thumb_func_start FUN_02024828
-FUN_02024828: ; 0x02024828
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024844 ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024838
- bl ErrorHandling
-_02024838:
- ldr r1, _02024848 ; =0x000001A7
- add r0, r4, #0x0
- bl FUN_02023D8C
- pop {r4, pc}
- nop
-_02024844: .word 0xBEEFCAFE
-_02024848: .word 0x000001A7
-
- thumb_func_start FUN_0202484C
-FUN_0202484C: ; 0x0202484C
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _02024894 ; =0xBEEFCAFE
- cmp r1, r0
- beq _0202485E
- bl ErrorHandling
-_0202485E:
- mov r1, #0x67
- add r0, r5, #0x0
- lsl r1, r1, #0x2
- bl FUN_02023F2C
- cmp r0, r4
- bgt _02024872
- mov r0, #0x0
- mvn r0, r0
- pop {r3-r5, pc}
-_02024872:
- cmp r4, #0x3
- blt _0202487A
- bl ErrorHandling
-_0202487A:
- lsl r0, r4, #0x10
- lsr r2, r0, #0x10
- asr r0, r2, #0x2
- add r1, r5, r0
- ldr r0, _02024898 ; =0x0000010A
- ldrb r1, [r1, r0]
- lsl r0, r2, #0x1e
- lsr r0, r0, #0x1d
- asr r1, r0
- mov r0, #0x3
- and r0, r1
- pop {r3-r5, pc}
- nop
-_02024894: .word 0xBEEFCAFE
-_02024898: .word 0x0000010A
-
- thumb_func_start FUN_0202489C
-FUN_0202489C: ; 0x0202489C
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _020248B8 ; =0xBEEFCAFE
- cmp r1, r0
- beq _020248AC
- bl ErrorHandling
-_020248AC:
- mov r1, #0x67
- add r0, r4, #0x0
- lsl r1, r1, #0x2
- bl FUN_02023F2C
- pop {r4, pc}
- .balign 4
-_020248B8: .word 0xBEEFCAFE
-
- thumb_func_start FUN_020248BC
-FUN_020248BC: ; 0x020248BC
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _02024900 ; =0xBEEFCAFE
- cmp r1, r0
- beq _020248CE
- bl ErrorHandling
-_020248CE:
- ldr r1, _02024904 ; =0x0000019D
- add r0, r5, #0x0
- bl FUN_02023F2C
- cmp r0, r4
- bgt _020248E0
- mov r0, #0x0
- mvn r0, r0
- pop {r3-r5, pc}
-_020248E0:
- cmp r4, #0x3
- blt _020248E8
- bl ErrorHandling
-_020248E8:
- lsl r0, r4, #0x10
- lsr r2, r0, #0x10
- asr r0, r2, #0x2
- add r1, r5, r0
- ldr r0, _02024908 ; =0x0000010B
- ldrb r1, [r1, r0]
- lsl r0, r2, #0x1e
- lsr r0, r0, #0x1d
- asr r1, r0
- mov r0, #0x3
- and r0, r1
- pop {r3-r5, pc}
- .balign 4
-_02024900: .word 0xBEEFCAFE
-_02024904: .word 0x0000019D
-_02024908: .word 0x0000010B
-
- thumb_func_start FUN_0202490C
-FUN_0202490C: ; 0x0202490C
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024928 ; =0xBEEFCAFE
- cmp r1, r0
- beq _0202491C
- bl ErrorHandling
-_0202491C:
- ldr r1, _0202492C ; =0x0000019D
- add r0, r4, #0x0
- bl FUN_02023F2C
- pop {r4, pc}
- nop
-_02024928: .word 0xBEEFCAFE
-_0202492C: .word 0x0000019D
-
- thumb_func_start FUN_02024930
-FUN_02024930: ; 0x02024930
- push {r3-r5, lr}
- add r5, r0, #0x0
- add r4, r1, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _0202496C ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024942
- bl ErrorHandling
-_02024942:
- lsl r0, r4, #0x18
- lsr r0, r0, #0x18
- cmp r0, #0x2
- bhs _02024958
- lsl r0, r0, #0x2
- ldr r1, [r5, #0x40]
- add r0, #0x18
- lsr r1, r0
- mov r0, #0xf
- and r0, r1
- pop {r3-r5, pc}
-_02024958:
- add r5, #0x80
- sub r0, r0, #0x2
- lsl r0, r0, #0x18
- ldr r1, [r5, #0x0]
- lsr r0, r0, #0x16
- add r0, #0x18
- lsr r1, r0
- mov r0, #0xf
- and r0, r1
- pop {r3-r5, pc}
- .balign 4
-_0202496C: .word 0xBEEFCAFE
-
- thumb_func_start FUN_02024970
-FUN_02024970: ; 0x02024970
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024988 ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024980
- bl ErrorHandling
-_02024980:
- add r0, r4, #0x0
- bl FUN_020240D0
- pop {r4, pc}
- .balign 4
-_02024988: .word 0xBEEFCAFE
-
- thumb_func_start FUN_0202498C
-FUN_0202498C: ; 0x0202498C
- push {r3-r7, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- str r1, [sp, #0x0]
- add r0, r1, #0x0
- mov r1, #0x5
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x4]
- mov r1, #0x0
- ldr r0, [sp, #0x0]
- add r2, r1, #0x0
- bl GetMonData
- add r7, r0, #0x0
- ldr r0, [sp, #0x0]
- bl GetMonGender
- add r6, r0, #0x0
- ldr r1, [r5, #0x0]
- ldr r0, _02024AE4 ; =0xBEEFCAFE
- cmp r1, r0
- beq _020249C4
- bl ErrorHandling
-_020249C4:
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- beq _020249D0
- ldr r1, _02024AE8 ; =0x000001ED
- cmp r0, r1
- bls _020249D8
-_020249D0:
- bl ErrorHandling
- mov r0, #0x1
- b _020249DA
-_020249D8:
- mov r0, #0x0
-_020249DA:
- cmp r0, #0x0
- bne _02024ADE
- ldr r0, [sp, #0x4]
- mov r2, #0x1
- sub r0, r0, #0x1
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- mov r0, #0x7
- and r0, r4
- add r1, r2, #0x0
- lsl r1, r0
- asr r0, r4, #0x3
- add r3, r5, r0
- add r3, #0x44
- ldrb r3, [r3, #0x0]
- tst r3, r1
- bne _02024A70
- ldr r1, _02024AEC ; =0x00000147
- ldr r0, [sp, #0x4]
- cmp r0, r1
- bne _02024A08
- sub r1, #0x43
- str r7, [r5, r1]
-_02024A08:
- lsl r0, r6, #0x18
- lsr r6, r0, #0x18
- cmp r6, #0x2
- bls _02024A14
- bl ErrorHandling
-_02024A14:
- cmp r6, #0x2
- bne _02024A1A
- mov r6, #0x0
-_02024A1A:
- cmp r6, #0x2
- blo _02024A22
- bl ErrorHandling
-_02024A22:
- add r2, r5, #0x0
- mov r0, #0x7
- add r3, r4, #0x0
- and r3, r0
- mov r0, #0x1
- lsl r0, r3
- add r2, #0xc4
- asr r1, r4, #0x3
- ldrb r7, [r2, r1]
- mvn r0, r0
- and r0, r7
- strb r0, [r2, r1]
- add r0, r6, #0x0
- ldrb r7, [r2, r1]
- lsl r0, r3
- orr r0, r7
- strb r0, [r2, r1]
- cmp r6, #0x2
- blo _02024A4C
- bl ErrorHandling
-_02024A4C:
- add r1, r5, #0x0
- mov r0, #0x7
- add r2, r4, #0x0
- and r2, r0
- mov r3, #0x1
- lsl r3, r2
- add r1, #0x84
- asr r0, r4, #0x3
- ldrb r7, [r1, r0]
- mvn r3, r3
- lsl r6, r2
- and r3, r7
- strb r3, [r1, r0]
- ldrb r3, [r1, r0]
- add r2, r3, #0x0
- orr r2, r6
- strb r2, [r1, r0]
- b _02024AC0
-_02024A70:
- add r0, r5, r0
- add r0, #0x84
- ldrb r0, [r0, #0x0]
- tst r0, r1
- bne _02024A7C
- mov r2, #0x0
-_02024A7C:
- lsl r0, r2, #0x18
- lsr r0, r0, #0x18
- cmp r0, r6
- beq _02024AC0
- lsl r0, r6, #0x18
- lsr r6, r0, #0x18
- cmp r6, #0x2
- bls _02024A90
- bl ErrorHandling
-_02024A90:
- cmp r6, #0x2
- bne _02024A96
- mov r6, #0x0
-_02024A96:
- cmp r6, #0x2
- blo _02024A9E
- bl ErrorHandling
-_02024A9E:
- add r1, r5, #0x0
- mov r0, #0x7
- add r2, r4, #0x0
- and r2, r0
- mov r3, #0x1
- lsl r3, r2
- add r1, #0xc4
- asr r0, r4, #0x3
- ldrb r7, [r1, r0]
- mvn r3, r3
- lsl r6, r2
- and r3, r7
- strb r3, [r1, r0]
- ldrb r3, [r1, r0]
- add r2, r3, #0x0
- orr r2, r6
- strb r2, [r1, r0]
-_02024AC0:
- ldr r1, [sp, #0x4]
- ldr r2, [sp, #0x0]
- add r0, r5, #0x0
- bl FUN_020241B8
- mov r1, #0x7
- add r5, #0x44
- asr r0, r4, #0x3
- ldrb r3, [r5, r0]
- mov r2, #0x1
- and r1, r4
- lsl r2, r1
- add r1, r3, #0x0
- orr r1, r2
- strb r1, [r5, r0]
-_02024ADE:
- add sp, #0x8
- pop {r3-r7, pc}
- nop
-_02024AE4: .word 0xBEEFCAFE
-_02024AE8: .word 0x000001ED
-_02024AEC: .word 0x00000147
-
- thumb_func_start FUN_02024AF0
-FUN_02024AF0: ; 0x02024AF0
- push {r4-r7, lr}
- sub sp, #0x14
- add r4, r0, #0x0
- str r1, [sp, #0x0]
- add r0, r1, #0x0
- mov r1, #0x5
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r6, r0, #0x10
- ldr r0, [sp, #0x0]
- mov r1, #0xc
- mov r2, #0x0
- bl GetMonData
- str r0, [sp, #0x8]
- mov r1, #0x0
- ldr r0, [sp, #0x0]
- add r2, r1, #0x0
- bl GetMonData
- str r0, [sp, #0x4]
- ldr r0, [sp, #0x0]
- bl GetMonGender
- add r7, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024C78 ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024B32
- bl ErrorHandling
-_02024B32:
- cmp r6, #0x0
- beq _02024B3C
- ldr r0, _02024C7C ; =0x000001ED
- cmp r6, r0
- bls _02024B44
-_02024B3C:
- bl ErrorHandling
- mov r0, #0x1
- b _02024B46
-_02024B44:
- mov r0, #0x0
-_02024B46:
- cmp r0, #0x0
- beq _02024B4C
- b _02024C72
-_02024B4C:
- sub r0, r6, #0x1
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- mov r0, #0x1
- mov r1, #0x7
- and r1, r5
- add r2, r0, #0x0
- asr r3, r5, #0x3
- lsl r2, r1
- add r1, r4, r3
- add r1, #0x44
- ldrb r1, [r1, #0x0]
- tst r1, r2
- bne _02024BEA
- ldr r1, _02024C80 ; =0x00000147
- cmp r6, r1
- bne _02024B74
- ldr r0, [sp, #0x4]
- sub r1, #0x43
- str r0, [r4, r1]
-_02024B74:
- lsl r0, r7, #0x18
- lsr r7, r0, #0x18
- cmp r7, #0x2
- bls _02024B80
- bl ErrorHandling
-_02024B80:
- cmp r7, #0x2
- bne _02024B86
- mov r7, #0x0
-_02024B86:
- cmp r7, #0x2
- blo _02024B8E
- bl ErrorHandling
-_02024B8E:
- mov r0, #0x7
- and r0, r5
- str r0, [sp, #0x10]
- add r0, r4, #0x0
- add r0, #0xc4
- asr r3, r5, #0x3
- ldrb r1, [r0, r3]
- mov r2, #0x1
- str r1, [sp, #0xc]
- ldr r1, [sp, #0x10]
- lsl r2, r1
- ldr r1, [sp, #0xc]
- mvn r2, r2
- and r1, r2
- strb r1, [r0, r3]
- ldrb r1, [r0, r3]
- add r2, r7, #0x0
- mov r12, r1
- ldr r1, [sp, #0x10]
- lsl r2, r1
- mov r1, r12
- orr r1, r2
- strb r1, [r0, r3]
- cmp r7, #0x2
- blo _02024BC4
- bl ErrorHandling
-_02024BC4:
- add r1, r4, #0x0
- mov r0, #0x7
- add r2, r5, #0x0
- and r2, r0
- mov r3, #0x1
- lsl r3, r2
- add r1, #0x84
- asr r0, r5, #0x3
- ldrb r5, [r1, r0]
- mvn r3, r3
- and r3, r5
- strb r3, [r1, r0]
- add r5, r7, #0x0
- ldrb r3, [r1, r0]
- lsl r5, r2
- add r2, r3, #0x0
- orr r2, r5
- strb r2, [r1, r0]
- b _02024C3C
-_02024BEA:
- add r1, r4, r3
- add r1, #0x84
- ldrb r1, [r1, #0x0]
- tst r1, r2
- bne _02024BF6
- mov r0, #0x0
-_02024BF6:
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- cmp r0, r7
- beq _02024C3C
- lsl r0, r7, #0x18
- lsr r7, r0, #0x18
- cmp r7, #0x2
- bls _02024C0A
- bl ErrorHandling
-_02024C0A:
- cmp r7, #0x2
- bne _02024C10
- mov r7, #0x0
-_02024C10:
- cmp r7, #0x2
- blo _02024C18
- bl ErrorHandling
-_02024C18:
- add r1, r4, #0x0
- mov r0, #0x7
- add r2, r5, #0x0
- and r2, r0
- mov r3, #0x1
- lsl r3, r2
- add r1, #0xc4
- asr r0, r5, #0x3
- ldrb r5, [r1, r0]
- mvn r3, r3
- and r3, r5
- strb r3, [r1, r0]
- add r5, r7, #0x0
- ldrb r3, [r1, r0]
- lsl r5, r2
- add r2, r3, #0x0
- orr r2, r5
- strb r2, [r1, r0]
-_02024C3C:
- ldr r2, [sp, #0x0]
- add r0, r4, #0x0
- add r1, r6, #0x0
- bl FUN_020241B8
- ldr r2, [sp, #0x8]
- add r0, r4, #0x0
- add r1, r6, #0x0
- bl FUN_02024294
- sub r0, r6, #0x1
- lsl r0, r0, #0x10
- lsr r6, r0, #0x10
- add r1, r4, #0x4
- asr r0, r6, #0x3
- mov r2, #0x7
- ldrb r5, [r1, r0]
- mov r3, #0x1
- and r2, r6
- lsl r3, r2
- add r2, r5, #0x0
- orr r2, r3
- add r4, #0x44
- strb r2, [r1, r0]
- ldrb r1, [r4, r0]
- orr r1, r3
- strb r1, [r4, r0]
-_02024C72:
- add sp, #0x14
- pop {r4-r7, pc}
- nop
-_02024C78: .word 0xBEEFCAFE
-_02024C7C: .word 0x000001ED
-_02024C80: .word 0x00000147
-
- thumb_func_start Pokedex_SetNatDexFlag
-Pokedex_SetNatDexFlag: ; 0x02024C84
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024C9C ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024C94
- bl ErrorHandling
-_02024C94:
- ldr r0, _02024CA0 ; =0x00000139
- mov r1, #0x1
- strb r1, [r4, r0]
- pop {r4, pc}
- .balign 4
-_02024C9C: .word 0xBEEFCAFE
-_02024CA0: .word 0x00000139
-
- thumb_func_start Pokedex_GetNatDexFlag
-Pokedex_GetNatDexFlag: ; 0x02024CA4
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024CBC ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024CB4
- bl ErrorHandling
-_02024CB4:
- ldr r0, _02024CC0 ; =0x00000139
- ldrb r0, [r4, r0]
- pop {r4, pc}
- nop
-_02024CBC: .word 0xBEEFCAFE
-_02024CC0: .word 0x00000139
-
- thumb_func_start FUN_02024CC4
-FUN_02024CC4: ; 0x02024CC4
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024CDC ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024CD4
- bl ErrorHandling
-_02024CD4:
- mov r0, #0x4a
- lsl r0, r0, #0x2
- ldrb r0, [r4, r0]
- pop {r4, pc}
- .balign 4
-_02024CDC: .word 0xBEEFCAFE
-
- thumb_func_start FUN_02024CE0
-FUN_02024CE0: ; 0x02024CE0
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024CFC ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024CF0
- bl ErrorHandling
-_02024CF0:
- mov r0, #0x4a
- mov r1, #0x1
- lsl r0, r0, #0x2
- strb r1, [r4, r0]
- pop {r4, pc}
- nop
-_02024CFC: .word 0xBEEFCAFE
-
- thumb_func_start FUN_02024D00
-FUN_02024D00: ; 0x02024D00
- push {r4-r6, lr}
- add r6, r2, #0x0
- add r4, r0, #0x0
- add r5, r1, #0x0
- cmp r6, #0x8
- blo _02024D10
- bl ErrorHandling
-_02024D10:
- ldr r1, [r4, #0x0]
- ldr r0, _02024D44 ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024D1C
- bl ErrorHandling
-_02024D1C:
- add r0, r5, #0x0
- bl FUN_02087A50
- add r5, r0, #0x0
- cmp r5, #0xe
- bne _02024D2C
- mov r0, #0x0
- pop {r4-r6, pc}
-_02024D2C:
- add r0, r6, #0x0
- bl FUN_02087A1C
- mov r1, #0x1
- add r2, r1, #0x0
- lsl r2, r0
- ldr r0, _02024D48 ; =0x00000129
- add r1, r4, r5
- ldrb r0, [r1, r0]
- and r0, r2
- pop {r4-r6, pc}
- nop
-_02024D44: .word 0xBEEFCAFE
-_02024D48: .word 0x00000129
-
- thumb_func_start FUN_02024D4C
-FUN_02024D4C: ; 0x02024D4C
- ldr r1, _02024D54 ; =0x00000137
- mov r2, #0x1
- strb r2, [r0, r1]
- bx lr
- .balign 4
-_02024D54: .word 0x00000137
-
- thumb_func_start FUN_02024D58
-FUN_02024D58: ; 0x02024D58
- ldr r1, _02024D60 ; =0x00000137
- ldrb r0, [r0, r1]
- bx lr
- nop
-_02024D60: .word 0x00000137
-
- thumb_func_start FUN_02024D64
-FUN_02024D64: ; 0x02024D64
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024D7C ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024D74
- bl ErrorHandling
-_02024D74:
- mov r0, #0x4e
- lsl r0, r0, #0x2
- ldrb r0, [r4, r0]
- pop {r4, pc}
- .balign 4
-_02024D7C: .word 0xBEEFCAFE
-
- thumb_func_start FUN_02024D80
-FUN_02024D80: ; 0x02024D80
- push {r4, lr}
- add r4, r0, #0x0
- ldr r1, [r4, #0x0]
- ldr r0, _02024D9C ; =0xBEEFCAFE
- cmp r1, r0
- beq _02024D90
- bl ErrorHandling
-_02024D90:
- mov r0, #0x4e
- mov r1, #0x1
- lsl r0, r0, #0x2
- strb r1, [r4, r0]
- pop {r4, pc}
- nop
-_02024D9C: .word 0xBEEFCAFE
-
- thumb_func_start FUN_02024DA0
-FUN_02024DA0: ; 0x02024DA0
- ldr r3, _02024DA8 ; =SavArray_get
- mov r1, #0x7
- bx r3
- nop
-_02024DA8: .word SavArray_get
-
- thumb_func_start FUN_02024DAC
-FUN_02024DAC: ; 0x02024DAC
- push {r3-r5, lr}
- add r4, r2, #0x0
- ldr r2, _02024E60 ; =0x0000019D
- add r5, r0, #0x0
- cmp r1, r2
- bgt _02024DD6
- sub r3, r2, #0x1
- cmp r1, r3
- blt _02024DC6
- beq _02024E24
- cmp r1, r2
- beq _02024E36
- b _02024E5A
-_02024DC6:
- cmp r1, #0xc9
- bgt _02024DCE
- beq _02024DEE
- b _02024E5A
-_02024DCE:
- sub r2, #0x1b
- cmp r1, r2
- beq _02024E48
- b _02024E5A
-_02024DD6:
- add r3, r2, #0x0
- add r3, #0x9
- cmp r1, r3
- bgt _02024DE6
- add r2, #0x9
- cmp r1, r2
- beq _02024E00
- b _02024E5A
-_02024DE6:
- add r2, #0xa
- cmp r1, r2
- beq _02024E12
- b _02024E5A
-_02024DEE:
- bl FUN_0202471C
- cmp r4, r0
- bhs _02024E5A
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_020246DC
- pop {r3-r5, pc}
-_02024E00:
- bl FUN_020247A4
- cmp r4, r0
- bhs _02024E5A
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02024748
- pop {r3-r5, pc}
-_02024E12:
- bl FUN_02024828
- cmp r4, r0
- bhs _02024E5A
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_020247C8
- pop {r3-r5, pc}
-_02024E24:
- bl FUN_0202489C
- cmp r4, r0
- bhs _02024E5A
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_0202484C
- pop {r3-r5, pc}
-_02024E36:
- bl FUN_0202490C
- cmp r4, r0
- bhs _02024E5A
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_020248BC
- pop {r3-r5, pc}
-_02024E48:
- bl FUN_02024970
- cmp r4, r0
- bhs _02024E5A
- add r0, r5, #0x0
- add r1, r4, #0x0
- bl FUN_02024930
- pop {r3-r5, pc}
-_02024E5A:
- mov r0, #0x0
- pop {r3-r5, pc}
- nop
-_02024E60: .word 0x0000019D
diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s
index 3f324f9f..482f814b 100644
--- a/arm9/asm/scrcmd.s
+++ b/arm9/asm/scrcmd.s
@@ -9794,7 +9794,7 @@ _0203E7B6:
cmp r0, #0x1
bne _0203E7DC
add r0, r4, #0x0
- bl FUN_02069B40
+ bl SpeciesToSinnohDexNo
cmp r0, #0x0
beq _0203E7DC
cmp r5, r6
diff --git a/arm9/asm/unk_0206BB28.s b/arm9/asm/unk_0206BB28.s
index c460f6c3..3ddc7960 100644
--- a/arm9/asm/unk_0206BB28.s
+++ b/arm9/asm/unk_0206BB28.s
@@ -30,7 +30,7 @@ FUN_0206BB48: ; 0x0206BB48
bne _0206BB58
lsl r0, r1, #0x10
lsr r0, r0, #0x10
- bl FUN_02069B40
+ bl SpeciesToSinnohDexNo
add r1, r0, #0x0
_0206BB58:
add r0, r1, #0x0
diff --git a/arm9/global.inc b/arm9/global.inc
index 65ecb0e3..754dfe33 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -4799,7 +4799,7 @@
.extern FUN_020699A4
.extern FUN_02069A64
.extern FUN_02069AEC
-.extern FUN_02069B40
+.extern SpeciesToSinnohDexNo
.extern FUN_02069B60
.extern FUN_02069B88
.extern FUN_02069BA0
diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s
index 14a64b6c..1448cc55 100644
--- a/arm9/modules/16/asm/module_16.s
+++ b/arm9/modules/16/asm/module_16.s
@@ -1261,7 +1261,7 @@ MOD16_021D7E68: ; 0x021D7E68
lsl r0, r6, #0x10
lsr r0, r0, #0x10
add r5, r1, #0
- bl FUN_02069B40
+ bl SpeciesToSinnohDexNo
add r7, r0, #0
cmp r7, #0
bgt _021D7E82
diff --git a/arm9/src/pokedex.c b/arm9/src/pokedex.c
new file mode 100644
index 00000000..307196bc
--- /dev/null
+++ b/arm9/src/pokedex.c
@@ -0,0 +1,784 @@
+#include "global.h"
+#include "save_block_2.h"
+#include "heap.h"
+#include "MI_memory.h"
+#include "pokemon.h"
+#include "pokedex.h"
+#include "unk_02087A1C.h"
+#include "constants/species.h"
+
+#pragma thumb on
+
+static inline BOOL CheckDexFlag(u8 * flagArray, u16 species)
+{
+ species--;
+ return (flagArray[species >> 3] & (1 << (species & 7))) != 0;
+}
+
+static inline void UpdateDexFlag(u8 * flagArray, u16 species, u8 state)
+{
+ GF_ASSERT(state < 2);
+ species--;
+ flagArray[species >> 3] &= ~(1 << (species & 7));
+ flagArray[species >> 3] |= (state << (species & 7));
+}
+
+static inline void SetDexFlag(u8 * flagArray, u16 species)
+{
+ species--;
+ flagArray[species >> 3] |= (1 << (species & 7));
+}
+
+static inline s32 CheckDexFlagPair(u8 * flagArray, u16 offset)
+{
+ return (flagArray[offset >> 2] >> (2 * (offset & 3))) & 3;
+}
+
+static inline void UpdateDexFlagPair(u8 * flagArray, u16 offset, u8 state)
+{
+ GF_ASSERT(state < 4);
+ flagArray[offset >> 2] &= ~(3 << (2 * (offset & 3)));
+ flagArray[offset >> 2] |= (state << (2 * (offset & 3)));
+}
+
+u32 Sav2_Pokedex_sizeof(void)
+{
+ return sizeof(struct Pokedex);
+}
+
+struct Pokedex * Sav2_Pokedex_new(u32 heap_id)
+{
+ struct Pokedex * ret = (struct Pokedex *)AllocFromHeap(heap_id, sizeof(struct Pokedex));
+ Sav2_Pokedex_init(ret);
+ return ret;
+}
+
+void Sav2_Pokedex_Copy(const struct Pokedex * src, struct Pokedex * dest)
+{
+ MI_CpuCopy8(src, dest, sizeof(struct Pokedex));
+}
+
+s32 FUN_02023D8C(struct Pokedex * pokedex, u32 species)
+{
+ GF_ASSERT(species == SPECIES_SHELLOS || species == SPECIES_GASTRODON);
+ if (!FUN_020245F0(pokedex, (u16)species))
+ return 0;
+ u8 *flags = species == SPECIES_SHELLOS ? &pokedex->field_0108[0] : &pokedex->field_0108[1];
+ BOOL r2 = CheckDexFlag(flags, 1);
+ BOOL r0 = CheckDexFlag(flags, 2);
+ return (r2 == r0) ? 1 : 2;
+}
+
+BOOL FUN_02023DEC(struct Pokedex * pokedex, u32 species, u8 state)
+{
+ GF_ASSERT(species == SPECIES_SHELLOS || species == SPECIES_GASTRODON);
+ if (!FUN_020245F0(pokedex, (u16)species))
+ return FALSE;
+ u8 *flags = species == SPECIES_SHELLOS ? &pokedex->field_0108[0] : &pokedex->field_0108[1];
+ u32 r0 = (u32)FUN_02023D8C(pokedex, species);
+ for (int i = 0; i < r0; i++)
+ {
+ BOOL r2 = CheckDexFlag(flags, (u16)(i + 1));
+ if (r2 == state)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void FUN_02023E70(struct Pokedex * pokedex, u32 species, u32 state)
+{
+ GF_ASSERT(species == SPECIES_SHELLOS || species == SPECIES_GASTRODON);
+ if (FUN_02023DEC(pokedex, species, (u8)state))
+ return;
+ u8 *flags = species == SPECIES_SHELLOS ? &pokedex->field_0108[0] : &pokedex->field_0108[1];
+ s32 r5 = FUN_02023D8C(pokedex, species);
+ if (r5 < 2)
+ {
+ UpdateDexFlag(flags, (u16)(r5 + 1), (u8)state);
+ if (r5 == 0)
+ {
+ UpdateDexFlag(flags, (u16)(r5 + 2), (u8)state);
+ }
+ }
+}
+
+s32 FUN_02023F2C(struct Pokedex * pokedex, u32 species)
+{
+ GF_ASSERT(species == SPECIES_BURMY || species == SPECIES_WORMADAM);
+ if (!FUN_020245F0(pokedex, (u16)species))
+ return 0;
+ u8 *flags = species == SPECIES_BURMY ? &pokedex->field_010A[0] : &pokedex->field_010A[1];
+ s32 i;
+ for (i = 0; i < 3; i++)
+ {
+ s32 r2 = CheckDexFlagPair(flags, (u16)i);
+ if (r2 == 3)
+ break;
+ }
+ return i;
+}
+
+BOOL FUN_02023F88(struct Pokedex * pokedex, u32 species, u8 state)
+{
+ GF_ASSERT(species == SPECIES_BURMY || species == SPECIES_WORMADAM);
+ if (!FUN_020245F0(pokedex, (u16)species))
+ return FALSE;
+ u8 *flags = species == SPECIES_BURMY ? &pokedex->field_010A[0] : &pokedex->field_010A[1];
+ s32 i;
+ for (i = 0; i < 3; i++)
+ {
+ s32 r2 = CheckDexFlagPair(flags, (u16)i);
+ if (r2 == state)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void FUN_02023FEC(struct Pokedex * pokedex, u32 species, s32 state)
+{
+ GF_ASSERT(species == SPECIES_BURMY || species == SPECIES_WORMADAM);
+ if (FUN_02023F88(pokedex, species, (u8)state))
+ return;
+ u8 *flags = species == SPECIES_BURMY ? &pokedex->field_010A[0] : &pokedex->field_010A[1];
+ s32 r5 = FUN_02023F2C(pokedex, species);
+ if (r5 >= 3)
+ return;
+ UpdateDexFlagPair(flags, (u16)r5, (u8)state);
+}
+
+static inline void SetDeoxysFormeFlag(struct Pokedex * pokedex, u8 r4, u8 r6)
+{
+ GF_ASSERT(r6 < 4);
+ GF_ASSERT(r4 <= 15);
+ if (r6 < 2)
+ {
+ pokedex->field_0040 &= ~(15 << (24 + 4 * r6));
+ pokedex->field_0040 |= r4 << (24 + 4 * r6);
+ }
+ else
+ {
+ r6 -= 2;
+ pokedex->field_0080 &= ~(15 << (24 + 4 * r6));
+ pokedex->field_0080 |= r4 << (24 + 4 * r6);
+ }
+}
+
+void FUN_02024068(struct Pokedex * pokedex, u8 r4, u8 r6)
+{
+ SetDeoxysFormeFlag(pokedex, r4, r6);
+}
+
+static inline u32 GetDeoxysFormeFlag(struct Pokedex * pokedex, u8 r6)
+{
+ if (r6 < 2)
+ {
+ return (pokedex->field_0040 >> (24 + 4 * r6)) & 15;
+ }
+ else
+ {
+ r6 -= 2;
+ return (pokedex->field_0080 >> (24 + 4 * r6)) & 15;
+ }
+}
+
+s32 FUN_020240D0(struct Pokedex * pokedex)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ {
+ u32 r2 = GetDeoxysFormeFlag(pokedex, (u8)i);
+ if (r2 == 15)
+ break;
+ }
+ return i;
+}
+
+BOOL FUN_02024114(struct Pokedex * pokedex, u32 state)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ {
+ u32 r4 = GetDeoxysFormeFlag(pokedex, (u8)i);
+ if (state == r4)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void FUN_0202415C(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon)
+{
+ u8 forme = (u8)GetMonData(pokemon, MON_DATA_FORME, NULL);
+ if (species == SPECIES_DEOXYS && !FUN_02024114(pokedex, forme))
+ {
+ s32 r2 = FUN_020240D0(pokedex);
+ FUN_02024068(pokedex, forme, (u8)r2);
+ }
+}
+
+void FUN_0202419C(struct Pokedex * pokedex)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ {
+ FUN_02024068(pokedex, 15, (u8)i);
+ }
+}
+
+static inline BOOL HasUnownLetterBeenSeen(struct Pokedex * pokedex, u8 letter)
+{
+ u8 * arr;
+ s32 i;
+ for (i = 0, arr = (u8 *)pokedex; i < 28; i++, arr++)
+ {
+ u8 val = arr[0x010C];
+ if (letter == val)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static inline s32 FindFirstAvailableUnownLetterSlot(struct Pokedex * pokedex)
+{
+ u8 * arr;
+ s32 i;
+ for (i = 0, arr = (u8 *)pokedex; i < 28; i++, arr++)
+ {
+ u8 val = arr[0x010C];
+ if (val == 0xFF)
+ break;
+ }
+ return i;
+}
+
+static inline void SetSeenUnownLetter(struct Pokedex * pokedex, u32 species, s32 letter)
+{
+#pragma unused(species)
+ s32 idx;
+ if (HasUnownLetterBeenSeen(pokedex, (u8)letter))
+ return;
+ idx = FindFirstAvailableUnownLetterSlot(pokedex);
+ if (idx >= 28)
+ return;
+ pokedex->field_010C[idx] = (u8)letter;
+}
+
+void FUN_020241B8(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon)
+{
+ if (species == SPECIES_UNOWN)
+ {
+ SetSeenUnownLetter(pokedex, species, GetMonUnownLetter(pokemon));
+ }
+ else if (species == SPECIES_BURMY)
+ {
+ FUN_02023FEC(pokedex, species, (s32)GetMonData(pokemon, MON_DATA_FORME, NULL));
+ }
+ else if (species == SPECIES_WORMADAM)
+ {
+ FUN_02023FEC(pokedex, species, (s32)GetMonData(pokemon, MON_DATA_FORME, NULL));
+ }
+ else if (species == SPECIES_SHELLOS)
+ {
+ FUN_02023E70(pokedex, species, GetMonData(pokemon, MON_DATA_FORME, NULL));
+ }
+ else if (species == SPECIES_GASTRODON)
+ {
+ FUN_02023E70(pokedex, species, GetMonData(pokemon, MON_DATA_FORME, NULL));
+ }
+ else if (species == SPECIES_DEOXYS)
+ {
+ FUN_0202415C(pokedex, species, pokemon);
+ }
+}
+
+void FUN_02024294(struct Pokedex * pokedex, u32 species, u32 language)
+{
+ s32 r4 = FUN_02087A50(species);
+ s32 r0 = FUN_02087A1C(language);
+ if (r4 != 14 && r0 != 6)
+ {
+ pokedex->field_0129[r4] |= (1 << r0);
+ }
+}
+
+s32 FUN_020242C8(struct Pokedex * pokedex, u16 species, s32 r4)
+{
+ u8 r0;
+ u8 r1;
+ if (GetMonBaseStat(species, BASE_GENDER_RATIO) == MON_RATIO_UNKNOWN)
+ {
+ return r4 == 0 ? 2 : -1;
+ }
+ r1 = (u8)CheckDexFlag(pokedex->field_0084, species);
+ if (r4 == 1)
+ {
+ r0 = (u8)CheckDexFlag(pokedex->field_00C4, species);
+ if (r0 == r1)
+ return -1;
+ else
+ return r0;
+ }
+ return r1;
+}
+
+const u16 UNK_020EE940 = SPECIES_MANAPHY;
+
+const u16 UNK_020EE942[] = {
+ SPECIES_MEW,
+ SPECIES_LUGIA,
+ SPECIES_HO_OH,
+ SPECIES_CELEBI,
+ SPECIES_JIRACHI,
+ SPECIES_DEOXYS,
+ SPECIES_PHIONE,
+ SPECIES_MANAPHY,
+ SPECIES_DARKRAI,
+ SPECIES_SHAYMIN,
+ SPECIES_ARCEUS
+};
+
+BOOL FUN_02024340(u16 species)
+{
+ s32 i;
+ BOOL ret = TRUE;
+ for (i = 0; i < (s32)NELEMS(UNK_020EE942); i++)
+ {
+ if (species == UNK_020EE942[i])
+ ret = FALSE;
+ }
+ return ret;
+}
+
+BOOL FUN_02024364(u16 a0)
+{
+ BOOL ret = TRUE;
+ if (a0 == SPECIES_MANAPHY)
+ ret = FALSE;
+ return ret;
+}
+
+void Sav2_Pokedex_init(struct Pokedex * pokedex)
+{
+ memset(pokedex, 0, sizeof(struct Pokedex));
+ pokedex->magic = 0xBEEFCAFE;
+ pokedex->field_0139 = 0;
+ memset(pokedex->field_010C, 0xFF, 28);
+ pokedex->field_0108[0] = 0xFF;
+ pokedex->field_0108[1] = 0xFF;
+ pokedex->field_010A[0] = 0xFF;
+ pokedex->field_010A[1] = 0xFF;
+ FUN_0202419C(pokedex);
+}
+
+u16 FUN_020243C8(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ s32 i;
+ s32 count = 0;
+ for (i = 1; i <= NATIONAL_DEX_COUNT; i++)
+ {
+ if (FUN_02024594(pokedex, (u16)i) == TRUE)
+ count++;
+ }
+ return (u16)count;
+}
+
+u16 FUN_02024404(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ s32 i;
+ s32 count = 0;
+ for (i = 1; i <= NATIONAL_DEX_COUNT; i++)
+ {
+ if (FUN_020245F0(pokedex, (u16)i) == TRUE)
+ count++;
+ }
+ return (u16)count;
+}
+
+u16 FUN_02024440(struct Pokedex * pokedex)
+{
+ if (Pokedex_GetNatDexFlag(pokedex))
+ return FUN_02024404(pokedex);
+ else
+ return FUN_020244A4(pokedex);
+}
+
+u16 FUN_0202445C(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ s32 i;
+ s32 count = 0;
+ for (i = 1; i <= NATIONAL_DEX_COUNT; i++)
+ {
+ if (FUN_02024594(pokedex, (u16)i) == TRUE && SpeciesToSinnohDexNo((u16)i) != 0)
+ count++;
+ }
+ return (u16)count;
+}
+
+u16 FUN_020244A4(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ s32 i;
+ s32 count = 0;
+ for (i = 1; i <= NATIONAL_DEX_COUNT; i++)
+ {
+ if (FUN_020245F0(pokedex, (u16)i) == TRUE && SpeciesToSinnohDexNo((u16)i) != 0)
+ count++;
+ }
+ return (u16)count;
+}
+
+BOOL FUN_020244EC(struct Pokedex * pokedex)
+{
+ return FUN_02024518(pokedex) >= 482;
+}
+
+BOOL FUN_02024504(struct Pokedex * pokedex)
+{
+ return FUN_02024550(pokedex) >= 150;
+}
+
+u16 FUN_02024518(struct Pokedex * pokedex)
+{
+ s32 i;
+ u16 count = 0;
+ for (i = 1; i <= NATIONAL_DEX_COUNT; i++)
+ {
+ if (FUN_02024594(pokedex, (u16)i) == TRUE && FUN_02024340((u16)i) == TRUE)
+ count++;
+ }
+ return count;
+}
+
+u16 FUN_02024550(struct Pokedex * pokedex)
+{
+ s32 i;
+ u16 count = 0;
+ for (i = 1; i <= NATIONAL_DEX_COUNT; i++)
+ {
+ if (FUN_020245F0(pokedex, (u16)i) == TRUE && SpeciesToSinnohDexNo((u16)i) != 0 && FUN_02024364((u16)i) == TRUE)
+ count++;
+ }
+ return count;
+}
+
+static inline BOOL DexSpeciesIsInvalid(u16 species)
+{
+ if (species == SPECIES_NONE || species > NATIONAL_DEX_COUNT)
+ {
+ GF_ASSERT(0);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+BOOL FUN_02024594(struct Pokedex * pokedex, u16 species)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (DexSpeciesIsInvalid(species))
+ return FALSE;
+ if (!CheckDexFlag(pokedex->field_0004, species) || !CheckDexFlag(pokedex->field_0044, species))
+ return FALSE;
+ return TRUE;
+}
+
+BOOL FUN_020245F0(struct Pokedex * pokedex, u16 species)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (DexSpeciesIsInvalid(species))
+ return FALSE;
+ return CheckDexFlag(pokedex->field_0044, species);
+}
+
+u32 FUN_02024648(struct Pokedex * pokedex, u32 a1)
+{
+ u32 r6;
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (a1 == 0)
+ r6 = (u32)pokedex->field_0104;
+ else
+ GF_ASSERT(0); // r6 is not initialized because execution should halt here
+ return r6;
+}
+
+s32 FUN_02024674(struct Pokedex * pokedex, u16 species, s32 r6)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (DexSpeciesIsInvalid(species))
+ return -1;
+ if (CheckDexFlag(pokedex->field_0044, species))
+ return FUN_020242C8(pokedex, species, r6);
+ else
+ return -1;
+}
+
+static inline s32 FindFirstAvailableUnownLetterSlot_2(struct Pokedex * pokedex)
+{
+ s32 i;
+ for (i = 0; i < 28; i++)
+ {
+ if (pokedex->field_010C[i] == 0xFF)
+ break;
+ }
+ return i;
+}
+
+s32 FUN_020246DC(struct Pokedex * pokedex, s32 a1)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ s32 i;
+ i = FindFirstAvailableUnownLetterSlot_2(pokedex);
+ if (i <= a1)
+ return -1;
+ return pokedex->field_010C[a1];
+}
+
+s32 FUN_0202471C(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return FindFirstAvailableUnownLetterSlot_2(pokedex);
+}
+
+BOOL FUN_02024748(struct Pokedex * pokedex, s32 a1)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (FUN_02023D8C(pokedex, SPECIES_SHELLOS) <= a1)
+ return -1;
+ GF_ASSERT(a1 < 2);
+ return CheckDexFlag(&pokedex->field_0108[0], (u16)(a1 + 1));
+}
+
+s32 FUN_020247A4(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return FUN_02023D8C(pokedex, SPECIES_SHELLOS);
+}
+
+BOOL FUN_020247C8(struct Pokedex * pokedex, s32 a1)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (FUN_02023D8C(pokedex, SPECIES_GASTRODON) <= a1)
+ return -1;
+ GF_ASSERT(a1 < 2);
+ return CheckDexFlag(&pokedex->field_0108[1], (u16)(a1 + 1));
+}
+
+s32 FUN_02024828(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return FUN_02023D8C(pokedex, SPECIES_GASTRODON);
+}
+
+s32 FUN_0202484C(struct Pokedex * pokedex, s32 a1)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (FUN_02023F2C(pokedex, SPECIES_BURMY) <= a1)
+ return -1;
+ GF_ASSERT(a1 < 3);
+ return CheckDexFlagPair(&pokedex->field_010A[0], (u16)a1);
+}
+
+s32 FUN_0202489C(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return FUN_02023F2C(pokedex, SPECIES_BURMY);
+}
+
+s32 FUN_020248BC(struct Pokedex * pokedex, s32 a1)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (FUN_02023F2C(pokedex, SPECIES_WORMADAM) <= a1)
+ return -1;
+ GF_ASSERT(a1 < 3);
+ return CheckDexFlagPair(&pokedex->field_010A[1], (u16)a1);
+}
+
+s32 FUN_0202490C(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return FUN_02023F2C(pokedex, SPECIES_WORMADAM);
+}
+
+s32 FUN_02024930(struct Pokedex * pokedex, s32 a1)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return (s32)GetDeoxysFormeFlag(pokedex, (u8)a1);
+}
+
+s32 FUN_02024970(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return FUN_020240D0(pokedex);
+}
+
+static inline void SetSeenCaughtGender(struct Pokedex * pokedex, u16 species, u8 gender)
+{
+ GF_ASSERT(gender <= 2);
+ if (gender == 2)
+ gender = 0;
+ UpdateDexFlag(pokedex->field_00C4, species, gender);
+ UpdateDexFlag(pokedex->field_0084, species, gender);
+}
+
+static inline void SetSeenGender(struct Pokedex * pokedex, u16 species, u8 gender)
+{
+ GF_ASSERT(gender <= 2);
+ if (gender == 2)
+ gender = 0;
+ UpdateDexFlag(pokedex->field_00C4, species, gender);
+}
+
+void FUN_0202498C(struct Pokedex * pokedex, struct Pokemon * pokemon)
+{
+ u16 species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, NULL);
+ u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY, NULL);
+ u32 gender = GetMonGender(pokemon);
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (DexSpeciesIsInvalid(species))
+ return;
+ if (!CheckDexFlag(pokedex->field_0044, species))
+ {
+ if (species == SPECIES_SPINDA)
+ pokedex->field_0104 = personality;
+ SetSeenCaughtGender(pokedex, species, (u8)gender);
+ }
+ else
+ {
+ u8 seen_gender = (u8)CheckDexFlag(pokedex->field_0084, species);
+ if (seen_gender != gender)
+ {
+ SetSeenGender(pokedex, species, (u8)gender);
+ }
+ }
+ FUN_020241B8(pokedex, species, pokemon);
+ SetDexFlag(pokedex->field_0044, species);
+}
+
+void FUN_02024AF0(struct Pokedex * pokedex, struct Pokemon * pokemon)
+{
+ u32 language; // sp08
+ u32 personality; // sp04
+ u32 gender; // r7
+ u16 species; // r6
+
+ species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, NULL);
+ language = GetMonData(pokemon, MON_DATA_GAME_LANGUAGE, NULL);
+ personality = GetMonData(pokemon, MON_DATA_PERSONALITY, NULL);
+ gender = GetMonGender(pokemon);
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ if (DexSpeciesIsInvalid(species))
+ return;
+ if (!CheckDexFlag(pokedex->field_0044, species))
+ {
+ if (species == SPECIES_SPINDA)
+ pokedex->field_0104 = personality;
+ SetSeenCaughtGender(pokedex, species, (u8)gender);
+ }
+ else
+ {
+ u8 seen_gender = (u8)CheckDexFlag(pokedex->field_0084, species);
+ if (seen_gender != gender)
+ {
+ SetSeenGender(pokedex, species, (u8)gender);
+ }
+ }
+ FUN_020241B8(pokedex, species, pokemon);
+ FUN_02024294(pokedex, species, language);
+ SetDexFlag(pokedex->field_0004, species);
+ SetDexFlag(pokedex->field_0044, species);
+}
+
+void Pokedex_SetNatDexFlag(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ pokedex->field_0139 = 1;
+}
+
+BOOL Pokedex_GetNatDexFlag(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return pokedex->field_0139;
+}
+
+BOOL FUN_02024CC4(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return pokedex->field_0128;
+}
+
+void FUN_02024CE0(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ pokedex->field_0128 = 1;
+}
+
+s32 FUN_02024D00(struct Pokedex * pokedex, u32 species, u32 language)
+{
+ GF_ASSERT(language < 8);
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ s32 r5 = FUN_02087A50(species);
+ if (r5 == 14)
+ return 0;
+ s32 r0 = FUN_02087A1C(language);
+ return pokedex->field_0129[r5] & (1 << r0);
+}
+
+void FUN_02024D4C(struct Pokedex * pokedex)
+{
+ pokedex->field_0137 = 1;
+}
+
+BOOL FUN_02024D58(struct Pokedex * pokedex)
+{
+ return pokedex->field_0137;
+}
+
+BOOL FUN_02024D64(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ return pokedex->field_0138;
+}
+
+void FUN_02024D80(struct Pokedex * pokedex)
+{
+ GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
+ pokedex->field_0138 = 1;
+}
+
+struct Pokedex * FUN_02024DA0(struct SaveBlock2 * sav2)
+{
+ return (struct Pokedex *)SavArray_get(sav2, 7);
+}
+
+s32 FUN_02024DAC(struct Pokedex * pokedex, s32 a1, u32 a2)
+{
+ switch (a1)
+ {
+ case SPECIES_UNOWN:
+ if (a2 < FUN_0202471C(pokedex))
+ return FUN_020246DC(pokedex, (s32)a2);
+ break;
+ case SPECIES_SHELLOS:
+ if (a2 < FUN_020247A4(pokedex))
+ return FUN_02024748(pokedex, (s32)a2);
+ break;
+ case SPECIES_GASTRODON:
+ if (a2 < FUN_02024828(pokedex))
+ return FUN_020247C8(pokedex, (s32)a2);
+ break;
+ case SPECIES_BURMY:
+ if (a2 < FUN_0202489C(pokedex))
+ return FUN_0202484C(pokedex, (s32)a2);
+ break;
+ case SPECIES_WORMADAM:
+ if (a2 < FUN_0202490C(pokedex))
+ return FUN_020248BC(pokedex, (s32)a2);
+ break;
+ case SPECIES_DEOXYS:
+ if (a2 < FUN_02024970(pokedex))
+ return FUN_02024930(pokedex, (s32)a2);
+ break;
+ }
+ return 0;
+}
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index 347cb5ac..0fb6d121 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -3026,7 +3026,7 @@ u8 FUN_02069AEC(struct PlayerParty * party)
return ret;
}
-u16 FUN_02069B40(u16 species)
+u16 SpeciesToSinnohDexNo(u16 species)
{
u16 ret;
ReadFromNarcMemberByIdPair(&ret, NARC_POKETOOL_POKEZUKAN, 0, species * sizeof(u16), sizeof(u16));
diff --git a/include/pokedex.h b/include/pokedex.h
new file mode 100644
index 00000000..61c051da
--- /dev/null
+++ b/include/pokedex.h
@@ -0,0 +1,86 @@
+#ifndef POKEDIAMOND_POKEDEX_H
+#define POKEDIAMOND_POKEDEX_H
+
+#include "global.h"
+
+struct Pokedex
+{
+ /* 0x0000 */ u32 magic; // BEEFCAFE
+ /* 0x0004 */ u8 field_0004[0x3C];
+ /* 0x0040 */ u32 field_0040; // Deoxys forme plus top 13 dex flags
+ /* 0x0044 */ u8 field_0044[0x3C];
+ /* 0x0080 */ u32 field_0080; // Deoxys forme plus top 13 dex flags
+ /* 0x0084 */ u8 field_0084[0x40]; // Genders
+ /* 0x00C4 */ u8 field_00C4[0x40]; // Genders
+ /* 0x0104 */ u32 field_0104; // spinda personality
+ /* 0x0108 */ u8 field_0108[2]; // Shellos/Gastrodon
+ /* 0x0108 */ u8 field_010A[2]; // Burmy/Wormadam
+ /* 0x010C */ u8 field_010C[28]; // Unown
+ /* 0x0128 */ u8 field_0128;
+ /* 0x0129 */ u8 field_0129[14]; // Meister?
+ /* 0x0137 */ u8 field_0137;
+ /* 0x0138 */ u8 field_0138;
+ /* 0x0139 */ u8 field_0139;
+ /* 0x013A */ u8 padding_013A[2];
+};
+
+u32 Sav2_Pokedex_sizeof(void);
+struct Pokedex * Sav2_Pokedex_new(u32 heap_id);
+void Sav2_Pokedex_Copy(const struct Pokedex * src, struct Pokedex * dest);
+s32 FUN_02023D8C(struct Pokedex * pokedex, u32 species);
+BOOL FUN_02023DEC(struct Pokedex * pokedex, u32 species, u8 state);
+void FUN_02023E70(struct Pokedex * pokedex, u32 species, u32 state);
+s32 FUN_02023F2C(struct Pokedex * pokedex, u32 species);
+BOOL FUN_02023F88(struct Pokedex * pokedex, u32 species, u8 state);
+void FUN_02023FEC(struct Pokedex * pokedex, u32 species, s32 state);
+void FUN_02024068(struct Pokedex * pokedex, u8 r4, u8 r6);
+s32 FUN_020240D0(struct Pokedex * pokedex);
+BOOL FUN_02024114(struct Pokedex * pokedex, u32 state);
+void FUN_0202415C(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon);
+void FUN_0202419C(struct Pokedex * pokedex);
+void FUN_020241B8(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon);
+void FUN_02024294(struct Pokedex * pokedex, u32 species, u32 language);
+s32 FUN_020242C8(struct Pokedex * pokedex, u16 species, s32 r4);
+BOOL FUN_02024340(u16 species);
+BOOL FUN_02024364(u16 a0);
+void Sav2_Pokedex_init(struct Pokedex * pokedex);
+u16 FUN_020243C8(struct Pokedex * pokedex);
+u16 FUN_02024404(struct Pokedex * pokedex);
+u16 FUN_02024440(struct Pokedex * pokedex);
+u16 FUN_0202445C(struct Pokedex * pokedex);
+u16 FUN_020244A4(struct Pokedex * pokedex);
+BOOL FUN_020244EC(struct Pokedex * pokedex);
+BOOL FUN_02024504(struct Pokedex * pokedex);
+u16 FUN_02024518(struct Pokedex * pokedex);
+u16 FUN_02024550(struct Pokedex * pokedex);
+BOOL FUN_02024594(struct Pokedex * pokedex, u16 species);
+BOOL FUN_020245F0(struct Pokedex * pokedex, u16 species);
+u32 FUN_02024648(struct Pokedex * pokedex, u32 a1);
+s32 FUN_02024674(struct Pokedex * pokedex, u16 species, s32 r6);
+s32 FUN_020246DC(struct Pokedex * pokedex, s32 a1);
+s32 FUN_0202471C(struct Pokedex * pokedex);
+BOOL FUN_02024748(struct Pokedex * pokedex, s32 a1);
+s32 FUN_020247A4(struct Pokedex * pokedex);
+BOOL FUN_020247C8(struct Pokedex * pokedex, s32 a1);
+s32 FUN_02024828(struct Pokedex * pokedex);
+s32 FUN_0202484C(struct Pokedex * pokedex, s32 a1);
+s32 FUN_0202489C(struct Pokedex * pokedex);
+s32 FUN_020248BC(struct Pokedex * pokedex, s32 a1);
+s32 FUN_0202490C(struct Pokedex * pokedex);
+s32 FUN_02024930(struct Pokedex * pokedex, s32 a1);
+s32 FUN_02024970(struct Pokedex * pokedex);
+void FUN_0202498C(struct Pokedex * pokedex, struct Pokemon * pokemon);
+void FUN_02024AF0(struct Pokedex * pokedex, struct Pokemon * pokemon);
+void Pokedex_SetNatDexFlag(struct Pokedex * pokedex);
+BOOL Pokedex_GetNatDexFlag(struct Pokedex * pokedex);
+BOOL FUN_02024CC4(struct Pokedex * pokedex);
+void FUN_02024CE0(struct Pokedex * pokedex);
+s32 FUN_02024D00(struct Pokedex * pokedex, u32 species, u32 language);
+void FUN_02024D4C(struct Pokedex * pokedex);
+BOOL FUN_02024D58(struct Pokedex * pokedex);
+BOOL FUN_02024D64(struct Pokedex * pokedex);
+void FUN_02024D80(struct Pokedex * pokedex);
+struct Pokedex * FUN_02024DA0(struct SaveBlock2 * sav2);
+s32 FUN_02024DAC(struct Pokedex * pokedex, s32 a1, u32 a2);
+
+#endif //POKEDIAMOND_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 591da2f4..196343de 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -280,7 +280,7 @@ void FUN_020698E8(struct BoxPokemon * boxmon, int slot1, int slot2);
void FUN_020699A4(struct Pokemon * pokemon, u32 slot);
void FUN_02069A64(struct BoxPokemon * src, struct Pokemon * dest);
u8 FUN_02069AEC(struct PlayerParty * party);
-u16 FUN_02069B40(u16 species);
+u16 SpeciesToSinnohDexNo(u16 species);
u16 FUN_02069B60(u16 sinnoh_dex);
void FUN_02069B88(struct Pokemon * src, struct Pokemon * dest);
void FUN_02069BA0(struct Pokemon * src, struct BoxPokemon * dest);
diff --git a/include/unk_02087A1C.h b/include/unk_02087A1C.h
new file mode 100644
index 00000000..28155209
--- /dev/null
+++ b/include/unk_02087A1C.h
@@ -0,0 +1,7 @@
+#ifndef POKEDIAMOND_UNK_02087A1C_H
+#define POKEDIAMOND_UNK_02087A1C_H
+
+s32 FUN_02087A50(u32 species);
+s32 FUN_02087A1C(u32 language);
+
+#endif //POKEDIAMOND_UNK_02087A1C_H