summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-08-30 23:45:35 +0100
committerGitHub <noreply@github.com>2020-08-30 23:45:35 +0100
commit656e4a2fee9ff86d678d6a7477611bfaca5171d4 (patch)
treeb3060e2576d1572c1a8aeb63f300f43ba0d13131
parent62e3afdea1f62da948dd9d3926f712dbbe7af039 (diff)
parent73aecdbbbff398c27734f8ed793bb495a5391a4b (diff)
Merge pull request #273 from PikalaxALT/pikalax_work
Decompile mail
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/asm/scrcmd.s60
-rw-r--r--arm9/asm/scrcmd_13.s2
-rw-r--r--arm9/asm/scrcmd_21.s8
-rw-r--r--arm9/asm/scrcmd_3.s2
-rw-r--r--arm9/asm/unk_02025658.s454
-rw-r--r--arm9/asm/unk_02029FB0.s2
-rw-r--r--arm9/asm/unk_0202C144.s4
-rw-r--r--arm9/asm/unk_02035068.s18
-rw-r--r--arm9/asm/unk_020377F0.s8
-rw-r--r--arm9/asm/unk_020476CC.s10
-rw-r--r--arm9/asm/unk_020484A8.s2
-rw-r--r--arm9/asm/unk_0205CE48.s8
-rw-r--r--arm9/asm/unk_02060CCC.s48
-rw-r--r--arm9/asm/unk_02064E90.s12
-rw-r--r--arm9/asm/unk_020653EC.s18
-rw-r--r--arm9/asm/unk_0206BB28.s2
-rw-r--r--arm9/asm/unk_0206C700.s6
-rw-r--r--arm9/asm/unk_02080C38.s4
-rw-r--r--arm9/asm/unk_02085338.s2
-rw-r--r--arm9/asm/unk_020854E0.s52
-rw-r--r--arm9/asm/unk_020859C0.s2
-rw-r--r--arm9/asm/unk_02087A1C.s65
-rw-r--r--arm9/asm/unk_02088F0C.s2
-rw-r--r--arm9/global.inc116
-rw-r--r--arm9/modules/05/asm/module_05.s6
-rw-r--r--arm9/modules/06/asm/module_06.s20
-rw-r--r--arm9/modules/11/asm/module_11_thumb2.s10
-rw-r--r--arm9/modules/16/asm/module_16.s58
-rw-r--r--arm9/modules/18/asm/module_18.s4
-rw-r--r--arm9/modules/23/asm/module_23.s4
-rw-r--r--arm9/modules/56/asm/module_56.s2
-rw-r--r--arm9/modules/80/asm/module_80.s8
-rw-r--r--arm9/modules/83/asm/module_83.s10
-rw-r--r--arm9/modules/84/asm/module_84_thumb2.s6
-rw-r--r--arm9/src/daycare.c4
-rw-r--r--arm9/src/mail.c267
-rw-r--r--arm9/src/main.c4
-rw-r--r--arm9/src/pokedex.c312
-rw-r--r--arm9/src/pokemon.c30
-rw-r--r--arm9/src/save_arrays.c4
-rw-r--r--arm9/src/unk_02087A1C.c69
-rw-r--r--include/config.h1
-rw-r--r--include/constants/pokemon.h2
-rw-r--r--include/daycare.h4
-rw-r--r--include/global.h4
-rw-r--r--include/mail.h58
-rw-r--r--include/pokedex.h114
-rw-r--r--include/pokemon.h4
-rw-r--r--include/seals.h15
-rw-r--r--include/unk_02087A1C.h5
51 files changed, 901 insertions, 1033 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index f2ac2c77..4459fd8c 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -94,7 +94,7 @@ Static arm9
Object unk_020250A4.o
Object unk_02025484.o
Object unk_020254B8.o
- Object unk_02025658.o
+ Object mail.o
Object unk_02025954.o
Object unk_02026CD0.o
Object unk_02027E30.o
diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s
index 482f814b..b874b757 100644
--- a/arm9/asm/scrcmd.s
+++ b/arm9/asm/scrcmd.s
@@ -6714,7 +6714,7 @@ FUN_0203CF04: ; 0x0203CF04
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
@@ -6724,7 +6724,7 @@ FUN_0203CF04: ; 0x0203CF04
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_020244A4
+ bl Pokedex_CountSinnohDexSeenMons
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -6737,7 +6737,7 @@ FUN_0203CF34: ; 0x0203CF34
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
@@ -6747,7 +6747,7 @@ FUN_0203CF34: ; 0x0203CF34
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_0202445C
+ bl Pokedex_CountSinnohDexCaughtMons
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -6760,7 +6760,7 @@ FUN_0203CF64: ; 0x0203CF64
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
@@ -6770,7 +6770,7 @@ FUN_0203CF64: ; 0x0203CF64
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_02024404
+ bl Pokedex_CountNationalDexSeenMons
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -6783,7 +6783,7 @@ FUN_0203CF94: ; 0x0203CF94
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
@@ -6793,7 +6793,7 @@ FUN_0203CF94: ; 0x0203CF94
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_020243C8
+ bl Pokedex_CountNationalDexCaughtMons
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -6811,7 +6811,7 @@ FUN_0203CFC8: ; 0x0203CFC8
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r7, r0, #0x0
add r0, r5, #0x0
add r0, #0x80
@@ -6834,7 +6834,7 @@ FUN_0203CFC8: ; 0x0203CFC8
cmp r6, #0x0
bne _0203D02E
add r0, r7, #0x0
- bl FUN_02024550
+ bl Pokedex_CountSinnohDexSeenMons_OmitMythicals
add r5, #0x80
add r6, r0, #0x0
ldr r0, [r5, #0x0]
@@ -6851,7 +6851,7 @@ FUN_0203CFC8: ; 0x0203CFC8
b _0203D048
_0203D02E:
add r0, r7, #0x0
- bl FUN_02024518
+ bl Pokedex_CountNationalDexCaughtMons_OmitMythicals
add r5, r0, #0x0
ldr r0, [sp, #0x0]
bl PlayerProfile_GetTrainerGender
@@ -8765,9 +8765,9 @@ FUN_0203DF38: ; 0x0203DF38
bl GetVarPointer
add r5, r0, #0x0
ldr r0, [r4, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
mov r1, #0x0
- bl FUN_0202589C
+ bl Mailbox_CountMessages
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -9305,7 +9305,7 @@ FUN_0203E3D0: ; 0x0203E3D0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
@@ -9317,7 +9317,7 @@ FUN_0203E3D0: ; 0x0203E3D0
mov r0, #0x0
strh r0, [r4, #0x0]
add r0, r5, #0x0
- bl FUN_02024504
+ bl Pokedex_HasCompletedSinnohDex
cmp r0, #0x1
bne _0203E404
mov r0, #0x1
@@ -9333,7 +9333,7 @@ FUN_0203E408: ; 0x0203E408
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
@@ -9345,7 +9345,7 @@ FUN_0203E408: ; 0x0203E408
mov r0, #0x0
strh r0, [r4, #0x0]
add r0, r5, #0x0
- bl FUN_020244EC
+ bl Pokedex_HasCompletedNationalDex
cmp r0, #0x1
bne _0203E43C
mov r0, #0x1
@@ -9765,7 +9765,7 @@ FUN_0203E774: ; 0x0203E774
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r7, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
@@ -9775,7 +9775,7 @@ FUN_0203E774: ; 0x0203E774
bl GetVarPointer
str r0, [sp, #0x0]
add r0, r7, #0x0
- bl FUN_020244A4
+ bl Pokedex_CountSinnohDexSeenMons
add r4, r0, #0x0
bl LCRandom
add r1, r4, #0x0
@@ -9790,7 +9790,7 @@ FUN_0203E774: ; 0x0203E774
_0203E7B6:
add r0, r7, #0x0
add r1, r4, #0x0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0x1
bne _0203E7DC
add r0, r4, #0x0
@@ -9994,7 +9994,7 @@ FUN_0203E940: ; 0x0203E940
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl FUN_02024D4C
mov r0, #0x0
pop {r3, pc}
@@ -10005,7 +10005,7 @@ FUN_0203E954: ; 0x0203E954
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl FUN_02024CE0
mov r0, #0x0
pop {r3, pc}
@@ -10033,7 +10033,7 @@ FUN_0203E968: ; 0x0203E968
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_SetNatDexFlag
add r5, #0x80
ldr r0, [r5, #0x0]
@@ -10047,7 +10047,7 @@ _0203E9AE:
add r5, #0x80
ldr r0, [r5, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
strh r0, [r6, #0x0]
b _0203E9C8
@@ -10472,7 +10472,7 @@ FUN_0203ED2C: ; 0x0203ED2C
sub sp, #0x10
ldr r0, [r0, #0xc]
add r5, r1, #0x0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r6, r0, #0x0
mov r0, #0x20
bl AllocMonZeroed
@@ -10490,7 +10490,7 @@ FUN_0203ED2C: ; 0x0203ED2C
bl CreateMon
add r0, r6, #0x0
add r1, r4, #0x0
- bl FUN_0202498C
+ bl Pokedex_SetMonSeenFlag
add r0, r4, #0x0
bl FreeToHeap
add sp, #0x10
@@ -10709,7 +10709,7 @@ FUN_0203EED8: ; 0x0203EED8
add r6, r0, #0x0
ldr r0, [r4, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r7, r0, #0x0
mov r5, #0x0
cmp r6, #0x0
@@ -10733,7 +10733,7 @@ _0203EF18:
bl CalcMonLevelAndStats
add r0, r7, #0x0
add r1, r4, #0x0
- bl FUN_02024AF0
+ bl Pokedex_SetMonCaughtFlag
_0203EF48:
add r5, r5, #0x1
cmp r5, r6
@@ -11442,7 +11442,7 @@ FUN_0203F4D8: ; 0x0203F4D8
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
@@ -11452,7 +11452,7 @@ FUN_0203F4D8: ; 0x0203F4D8
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_0202471C
+ bl Pokedex_CountSeenUnown
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
diff --git a/arm9/asm/scrcmd_13.s b/arm9/asm/scrcmd_13.s
index 0a7c9697..1b31ce71 100644
--- a/arm9/asm/scrcmd_13.s
+++ b/arm9/asm/scrcmd_13.s
@@ -107,7 +107,7 @@ FUN_02043918: ; 0x02043918
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
mov r5, #0x0
_0204395C:
add r0, r7, #0x0
diff --git a/arm9/asm/scrcmd_21.s b/arm9/asm/scrcmd_21.s
index 900a2f2b..e1f03c4a 100644
--- a/arm9/asm/scrcmd_21.s
+++ b/arm9/asm/scrcmd_21.s
@@ -16,7 +16,7 @@ FUN_020453F4: ; 0x020453F4
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl ScriptReadHalfword
@@ -26,7 +26,7 @@ FUN_020453F4: ; 0x020453F4
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_02024D64
+ bl Pokedex_GetSinnohDexFlag
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -38,8 +38,8 @@ FUN_02045424: ; 0x02045424
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
- bl FUN_02024D80
+ bl Sav2_Pokedex_get
+ bl Pokedex_SetSinnohDexFlag
mov r0, #0x0
pop {r3, pc}
diff --git a/arm9/asm/scrcmd_3.s b/arm9/asm/scrcmd_3.s
index 4d4d924c..28cbd7ac 100644
--- a/arm9/asm/scrcmd_3.s
+++ b/arm9/asm/scrcmd_3.s
@@ -144,7 +144,7 @@ FUN_0203FF10: ; 0x0203FF10
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
add r1, sp, #0x14
strb r0, [r1, #0x4]
diff --git a/arm9/asm/unk_02025658.s b/arm9/asm/unk_02025658.s
deleted file mode 100644
index 4c6c4960..00000000
--- a/arm9/asm/unk_02025658.s
+++ /dev/null
@@ -1,454 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern gGameLanguage
- .extern gGameVersion
-
- .text
-
- thumb_func_start InitSealsObject
-InitSealsObject: ; 0x02025658
- push {r3-r5, lr}
- add r4, r0, #0x0
- mov r0, #0x0
- str r0, [r4, #0x0]
- strb r0, [r4, #0x4]
- ldr r0, _020256A0 ; =gGameLanguage
- mov r1, #0x8
- ldrb r0, [r0, #0x0]
- strb r0, [r4, #0x5]
- ldr r0, _020256A4 ; =gGameVersion
- ldrb r0, [r0, #0x0]
- strb r0, [r4, #0x6]
- mov r0, #0xff
- strb r0, [r4, #0x7]
- add r0, r4, #0x0
- add r0, #0x8
- bl StringFillEOS
- ldr r0, _020256A8 ; =0x0000FFFF
- mov r1, #0x0
- add r2, r4, #0x0
-_02025682:
- add r1, r1, #0x1
- strh r0, [r2, #0x18]
- add r2, r2, #0x2
- cmp r1, #0x3
- blt _02025682
- mov r5, #0x0
- add r4, #0x20
-_02025690:
- add r0, r4, #0x0
- bl FUN_02013724
- add r5, r5, #0x1
- add r4, #0x8
- cmp r5, #0x3
- blt _02025690
- pop {r3-r5, pc}
- .balign 4
-_020256A0: .word gGameLanguage
-_020256A4: .word gGameVersion
-_020256A8: .word 0x0000FFFF
-
- thumb_func_start FUN_020256AC
-FUN_020256AC: ; 0x020256AC
- ldrb r0, [r0, #0x7]
- cmp r0, #0xb
- bhi _020256B6
- mov r0, #0x1
- bx lr
-_020256B6:
- mov r0, #0x0
- bx lr
- .balign 4
-
- thumb_func_start CreateNewSealsObject
-CreateNewSealsObject: ; 0x020256BC
- push {r4, lr}
- mov r1, #0x38
- bl AllocFromHeapAtEnd
- add r4, r0, #0x0
- bl InitSealsObject
- add r0, r4, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start CopySealsObject
-CopySealsObject: ; 0x020256D0
- ldr r3, _020256D8 ; =MI_CpuCopy8
- mov r2, #0x38
- bx r3
- nop
-_020256D8: .word MI_CpuCopy8
-
- thumb_func_start FUN_020256DC
-FUN_020256DC: ; 0x020256DC
- push {r4-r7, lr}
- sub sp, #0x14
- add r7, r3, #0x0
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r4, r2, #0x0
- bl InitSealsObject
- add r0, r7, #0x0
- strb r6, [r5, #0x7]
- bl SavArray_PlayerParty_get
- str r0, [sp, #0x0]
- add r0, r7, #0x0
- bl Sav2_PlayerData_GetProfileAddr
- add r6, r0, #0x0
- bl PlayerProfile_GetNamePtr
- add r1, r0, #0x0
- add r0, r5, #0x0
- add r0, #0x8
- bl CopyU16StringArray
- add r0, r6, #0x0
- bl PlayerProfile_GetTrainerGender
- strb r0, [r5, #0x4]
- add r0, r6, #0x0
- bl PlayerProfile_GetTrainerID
- str r0, [r5, #0x0]
- ldr r0, [sp, #0x0]
- mov r6, #0x0
- bl GetPartyCount
- cmp r4, r0
- bge _020257AE
- add r5, #0x18
-_0202572A:
- ldr r0, [sp, #0x0]
- add r1, r4, #0x0
- bl GetPartyMonByIndex
- mov r1, #0x5
- mov r2, #0x0
- add r7, r0, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x4]
- add r0, r7, #0x0
- mov r1, #0x4c
- mov r2, #0x0
- bl GetMonData
- str r0, [sp, #0x8]
- add r0, r7, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetMonData
- str r0, [sp, #0xc]
- add r0, r7, #0x0
- bl FUN_0206B6C8
- str r0, [sp, #0x10]
- ldr r0, [sp, #0x4]
- ldr r1, [sp, #0xc]
- ldr r2, [sp, #0x8]
- bl FUN_0206B7BC
- lsl r3, r6, #0x1
- ldrh r1, [r5, r3]
- add r7, r0, #0x0
- ldr r0, _020257B4 ; =0xFFFFF000
- add r2, r1, #0x0
- and r2, r0
- ldr r0, [sp, #0x10]
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- ldr r0, _020257B8 ; =0x00000FFF
- and r0, r1
- orr r0, r2
- strh r0, [r5, r3]
- add r0, r6, #0x1
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- ldrh r1, [r5, r3]
- ldr r0, _020257BC ; =0xFFFF0FFF
- and r0, r1
- lsl r1, r7, #0x1c
- lsr r1, r1, #0x10
- orr r0, r1
- strh r0, [r5, r3]
- cmp r6, #0x3
- bhs _020257AE
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- ldr r0, [sp, #0x0]
- bl GetPartyCount
- cmp r4, r0
- blt _0202572A
-_020257AE:
- add sp, #0x14
- pop {r4-r7, pc}
- nop
-_020257B4: .word 0xFFFFF000
-_020257B8: .word 0x00000FFF
-_020257BC: .word 0xFFFF0FFF
-
- thumb_func_start FUN_020257C0
-FUN_020257C0: ; 0x020257C0
- ldr r0, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_020257C4
-FUN_020257C4: ; 0x020257C4
- add r0, #0x8
- bx lr
-
- thumb_func_start FUN_020257C8
-FUN_020257C8: ; 0x020257C8
- ldrb r0, [r0, #0x4]
- bx lr
-
- thumb_func_start FUN_020257CC
-FUN_020257CC: ; 0x020257CC
- ldrb r0, [r0, #0x7]
- bx lr
-
- thumb_func_start FUN_020257D0
-FUN_020257D0: ; 0x020257D0
- cmp r1, #0xc
- bhs _020257D6
- strb r1, [r0, #0x7]
-_020257D6:
- bx lr
-
- thumb_func_start FUN_020257D8
-FUN_020257D8: ; 0x020257D8
- ldrb r0, [r0, #0x5]
- bx lr
-
- thumb_func_start FUN_020257DC
-FUN_020257DC: ; 0x020257DC
- ldrb r0, [r0, #0x6]
- bx lr
-
- thumb_func_start FUN_020257E0
-FUN_020257E0: ; 0x020257E0
- cmp r1, #0x3
- bhs _02025810
- cmp r2, #0x0
- beq _020257F0
- cmp r2, #0x1
- beq _020257FC
- cmp r2, #0x2
- b _02025808
-_020257F0:
- lsl r1, r1, #0x1
- add r0, r0, r1
- ldrh r0, [r0, #0x18]
- lsl r0, r0, #0x14
- lsr r0, r0, #0x14
- bx lr
-_020257FC:
- lsl r1, r1, #0x1
- add r0, r0, r1
- ldrh r0, [r0, #0x18]
- lsl r0, r0, #0x10
- lsr r0, r0, #0x1c
- bx lr
-_02025808:
- lsl r1, r1, #0x1
- add r0, r0, r1
- ldrh r0, [r0, #0x18]
- bx lr
-_02025810:
- mov r0, #0x0
- bx lr
-
- thumb_func_start FUN_02025814
-FUN_02025814: ; 0x02025814
- cmp r1, #0x3
- bhs _02025820
- add r0, #0x20
- lsl r1, r1, #0x3
- add r0, r0, r1
- bx lr
-_02025820:
- add r0, #0x20
- bx lr
-
- thumb_func_start FUN_02025824
-FUN_02025824: ; 0x02025824
- push {r3, lr}
- cmp r2, #0x3
- bhs _02025834
- add r0, #0x20
- lsl r2, r2, #0x3
- add r0, r0, r2
- bl FUN_02013960
-_02025834:
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02025838
-FUN_02025838: ; 0x02025838
- ldr r3, _02025840 ; =SavArray_get
- mov r1, #0xf
- bx r3
- nop
-_02025840: .word SavArray_get
-
- thumb_func_start FUN_02025844
-FUN_02025844: ; 0x02025844
- mov r0, #0x46
- lsl r0, r0, #0x4
- bx lr
- .balign 4
-
- thumb_func_start FUN_0202584C
-FUN_0202584C: ; 0x0202584C
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r4, #0x0
-_02025852:
- add r0, r5, #0x0
- bl InitSealsObject
- add r4, r4, #0x1
- add r5, #0x38
- cmp r4, #0x14
- blt _02025852
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02025864
-FUN_02025864: ; 0x02025864
- push {r3, lr}
- cmp r1, #0x0
- bne _02025872
- mov r1, #0x14
- bl FUN_020258F0
- pop {r3, pc}
-_02025872:
- mov r0, #0x0
- mvn r0, r0
- pop {r3, pc}
-
- thumb_func_start FUN_02025878
-FUN_02025878: ; 0x02025878
- push {r3, lr}
- bl FUN_02025940
- cmp r0, #0x0
- beq _02025886
- bl InitSealsObject
-_02025886:
- pop {r3, pc}
-
- thumb_func_start FUN_02025888
-FUN_02025888: ; 0x02025888
- push {r4, lr}
- add r4, r3, #0x0
- bl FUN_02025940
- add r1, r0, #0x0
- beq _0202589A
- add r0, r4, #0x0
- bl CopySealsObject
-_0202589A:
- pop {r4, pc}
-
- thumb_func_start FUN_0202589C
-FUN_0202589C: ; 0x0202589C
- push {r3, lr}
- cmp r1, #0x0
- bne _020258AA
- mov r1, #0x14
- bl FUN_02025918
- pop {r3, pc}
-_020258AA:
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_020258B0
-FUN_020258B0: ; 0x020258B0
- push {r3-r5, lr}
- add r5, r3, #0x0
- bl FUN_02025940
- add r4, r0, #0x0
- add r0, r5, #0x0
- bl CreateNewSealsObject
- add r5, r0, #0x0
- cmp r4, #0x0
- beq _020258CE
- add r0, r4, #0x0
- add r1, r5, #0x0
- bl CopySealsObject
-_020258CE:
- add r0, r5, #0x0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_020258D4
-FUN_020258D4: ; 0x020258D4
- push {r4, lr}
- add r4, r3, #0x0
- bl FUN_02025940
- cmp r0, #0x0
- bne _020258E8
- add r0, r4, #0x0
- bl InitSealsObject
- pop {r4, pc}
-_020258E8:
- add r1, r4, #0x0
- bl CopySealsObject
- pop {r4, pc}
-
- thumb_func_start FUN_020258F0
-FUN_020258F0: ; 0x020258F0
- push {r4-r6, lr}
- add r6, r1, #0x0
- add r5, r0, #0x0
- mov r4, #0x0
- cmp r6, #0x0
- ble _02025912
-_020258FC:
- add r0, r5, #0x0
- bl FUN_020256AC
- cmp r0, #0x0
- bne _0202590A
- add r0, r4, #0x0
- pop {r4-r6, pc}
-_0202590A:
- add r4, r4, #0x1
- add r5, #0x38
- cmp r4, r6
- blt _020258FC
-_02025912:
- mov r0, #0x0
- mvn r0, r0
- pop {r4-r6, pc}
-
- thumb_func_start FUN_02025918
-FUN_02025918: ; 0x02025918
- push {r3-r7, lr}
- mov r4, #0x0
- add r7, r1, #0x0
- add r5, r0, #0x0
- add r6, r4, #0x0
- cmp r7, #0x0
- ble _0202593A
-_02025926:
- add r0, r5, #0x0
- bl FUN_020256AC
- cmp r0, #0x0
- beq _02025932
- add r4, r4, #0x1
-_02025932:
- add r6, r6, #0x1
- add r5, #0x38
- cmp r6, r7
- blt _02025926
-_0202593A:
- add r0, r4, #0x0
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_02025940
-FUN_02025940: ; 0x02025940
- mov r3, #0x0
- cmp r1, #0x0
- bne _02025950
- cmp r2, #0x14
- bge _02025950
- mov r1, #0x38
- mul r1, r2
- add r3, r0, r1
-_02025950:
- add r0, r3, #0x0
- bx lr
diff --git a/arm9/asm/unk_02029FB0.s b/arm9/asm/unk_02029FB0.s
index da0a42d2..ac457105 100644
--- a/arm9/asm/unk_02029FB0.s
+++ b/arm9/asm/unk_02029FB0.s
@@ -323,7 +323,7 @@ FUN_0202A1C4: ; 0x0202A1C4
add r4, r0, #0x0
add r0, r1, #0x0
add r1, r2, #0x0
- bl FUN_02024594
+ bl Pokedex_CheckMonCaughtFlag
cmp r0, #0x0
bne _0202A1DC
add r0, r4, #0x0
diff --git a/arm9/asm/unk_0202C144.s b/arm9/asm/unk_0202C144.s
index e6448c07..fb5bc6c4 100644
--- a/arm9/asm/unk_0202C144.s
+++ b/arm9/asm/unk_0202C144.s
@@ -15,7 +15,7 @@ FUN_0202C144: ; 0x0202C144
cmp r0, #0x0
bne _0202C194
add r0, r5, #0x0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r6, r0, #0x0
add r0, r5, #0x0
bl FUN_02029FC8
@@ -32,7 +32,7 @@ FUN_0202C144: ; 0x0202C144
bl FUN_0202A1C4
add r0, r6, #0x0
add r1, r4, #0x0
- bl FUN_02024AF0
+ bl Pokedex_SetMonCaughtFlag
add r0, r5, #0x0
bl Sav2_Poketch_get
add r1, r4, #0x0
diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s
index c03af51e..0294a124 100644
--- a/arm9/asm/unk_02035068.s
+++ b/arm9/asm/unk_02035068.s
@@ -316,8 +316,8 @@ FUN_02035270: ; 0x02035270
add r5, r0, #0x0
ldr r0, [r5, #0xc]
mov r4, #0x0
- bl FUN_02024DA0
- bl FUN_02024D64
+ bl Sav2_Pokedex_get
+ bl Pokedex_GetSinnohDexFlag
cmp r0, #0x0
bne _02035288
mov r0, #0x1
@@ -1664,7 +1664,7 @@ FUN_02035D34: ; 0x02035D34
bl AllocFromHeap
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x0]
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetProfileAddr
@@ -2406,7 +2406,7 @@ _0203638A:
bl Sav2_Bag_get
str r0, [r5, #0x4]
ldr r0, [r6, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r5, #0x8]
ldr r0, [r6, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -2505,7 +2505,7 @@ _02036474:
bl Sav2_Bag_get
str r0, [r5, #0x4]
ldr r0, [r6, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r5, #0x8]
ldr r0, [r6, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -2998,7 +2998,7 @@ FUN_0203684C: ; 0x0203684C
bl Sav2_Bag_get
str r0, [r5, #0x4]
ldr r0, [r6, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r5, #0x8]
ldr r0, [r6, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -3527,7 +3527,7 @@ FUN_02036CEC: ; 0x02036CEC
bl Sav2_Bag_get
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r4, #0x8]
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -3666,7 +3666,7 @@ FUN_02036E08: ; 0x02036E08
bl FUN_02079C70
add r7, r0, #0x0
ldr r0, [r4, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x2c]
ldr r0, [r4, #0xc]
bl Sav2_Bag_get
@@ -3703,7 +3703,7 @@ _02036E9E:
bl FUN_02079C70
add r7, r0, #0x0
ldr r0, [r4, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x3c]
ldr r0, [r4, #0xc]
bl Sav2_Bag_get
diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s
index 9cd03e77..d0d60821 100644
--- a/arm9/asm/unk_020377F0.s
+++ b/arm9/asm/unk_020377F0.s
@@ -435,7 +435,7 @@ FUN_0203797C: ; 0x0203797C
bl Sav2_Bag_get
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r4, #0x8]
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -1423,7 +1423,7 @@ FUN_02038144: ; 0x02038144
bl Sav2_PlayerData_GetOptionsAddr
str r0, [r5, #0x18]
ldr r0, [r4, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [r5, #0x24]
ldr r0, [r4, #0xc]
bl FUN_0206BB28
@@ -1641,7 +1641,7 @@ _020382F6:
bl FUN_02079C70
add r6, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r7, r0, #0x0
ldr r0, [r5, #0xc]
bl Sav2_Bag_get
@@ -2130,7 +2130,7 @@ FUN_020386E0: ; 0x020386E0
bl GetStoragePCPointer
str r0, [r4, #0xc]
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [r4, #0x10]
ldr r0, [r5, #0xc]
bl FUN_020286EC
diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s
index bf857f21..374ab418 100644
--- a/arm9/asm/unk_020476CC.s
+++ b/arm9/asm/unk_020476CC.s
@@ -477,7 +477,7 @@ FUN_02047A78: ; 0x02047A78
bl Sav2_Bag_get
str r0, [sp, #0x0]
ldr r0, [r4, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x4]
ldr r0, [r4, #0xc]
bl FUN_02029EF8
@@ -624,7 +624,7 @@ FUN_02047BC0: ; 0x02047BC0
str r0, [sp, #0x10]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0xc]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
@@ -791,7 +791,7 @@ FUN_02047D48: ; 0x02047D48
str r0, [sp, #0x1c]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x18]
ldr r0, [sp, #0x0]
ldr r0, [r0, #0xc]
@@ -1019,7 +1019,7 @@ FUN_02047F38: ; 0x02047F38
bl Sav2_Bag_get
str r0, [sp, #0x0]
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x4]
ldr r0, [r5, #0xc]
bl FUN_02034E30
@@ -1062,7 +1062,7 @@ FUN_02047FA4: ; 0x02047FA4
ldr r0, [r5, #0xc]
bl Sav2_Bag_get
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r1, r0, #0x0
mov r0, #0x11
lsl r0, r0, #0x4
diff --git a/arm9/asm/unk_020484A8.s b/arm9/asm/unk_020484A8.s
index f38c0676..833d62c0 100644
--- a/arm9/asm/unk_020484A8.s
+++ b/arm9/asm/unk_020484A8.s
@@ -298,7 +298,7 @@ Special_EnterHallOfFame: ; 0x02048694
bl FUN_0205ED0C
str r0, [r5, #0x14]
ldr r0, [r4, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [r5, #0x18]
add r0, r6, #0x0
bl FUN_0205ED0C
diff --git a/arm9/asm/unk_0205CE48.s b/arm9/asm/unk_0205CE48.s
index aa8d85d5..5ad7ca34 100644
--- a/arm9/asm/unk_0205CE48.s
+++ b/arm9/asm/unk_0205CE48.s
@@ -294,7 +294,7 @@ FUN_0205D024: ; 0x0205D024
bl Sav2_Bag_get
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r4, #0x8]
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -777,7 +777,7 @@ FUN_0205D400: ; 0x0205D400
bl Sav2_Bag_get
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r4, #0x8]
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -1508,7 +1508,7 @@ FUN_0205D9A8: ; 0x0205D9A8
bl Sav2_Bag_get
str r0, [r4, #0x4]
ldr r0, [r5, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r4, #0x8]
ldr r0, [r5, #0xc]
bl Sav2_PlayerData_GetOptionsAddr
@@ -1666,7 +1666,7 @@ _0205DB08:
_0205DB1A:
ldr r0, [r4, #0x18]
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
cmp r0, #0x0
bne _0205DB30
diff --git a/arm9/asm/unk_02060CCC.s b/arm9/asm/unk_02060CCC.s
index 0f319d3c..3265d601 100644
--- a/arm9/asm/unk_02060CCC.s
+++ b/arm9/asm/unk_02060CCC.s
@@ -828,14 +828,14 @@ FUN_020611E8: ; 0x020611E8
push {r3-r5, lr}
ldr r0, [r0, #0xc]
add r5, r1, #0x0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl MOD06_02248B60
add r1, r0, #0x0
ldrh r1, [r1, #0x6]
add r0, r4, #0x0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -919,9 +919,9 @@ FUN_02061288: ; 0x02061288
pop {r3-r5, pc}
_0206129E:
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x0]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
thumb_func_start FUN_020612AC
@@ -1135,9 +1135,9 @@ FUN_02061444: ; 0x02061444
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x0]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -1221,14 +1221,14 @@ FUN_020614FC: ; 0x020614FC
push {r3-r5, lr}
ldr r0, [r0, #0xc]
add r5, r1, #0x0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl MOD06_02248B60
add r1, r0, #0x0
ldrh r1, [r1, #0x0]
add r0, r4, #0x0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -1348,14 +1348,14 @@ FUN_020615F8: ; 0x020615F8
push {r3-r5, lr}
ldr r0, [r0, #0xc]
add r5, r1, #0x0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r4, r0, #0x0
add r0, r5, #0x0
bl MOD06_02248B60
add r1, r0, #0x0
ldrh r1, [r1, #0x0]
add r0, r4, #0x0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -1423,9 +1423,9 @@ FUN_02061688: ; 0x02061688
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x0]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -1632,9 +1632,9 @@ FUN_02061834: ; 0x02061834
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x0]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -1814,9 +1814,9 @@ FUN_02061990: ; 0x02061990
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x2]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0x0
bne _020619B0
mov r0, #0x0
@@ -1920,9 +1920,9 @@ FUN_02061A70: ; 0x02061A70
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x0]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -2273,9 +2273,9 @@ FUN_02061D30: ; 0x02061D30
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x0]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -2420,9 +2420,9 @@ FUN_02061E60: ; 0x02061E60
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x2]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
@@ -2480,9 +2480,9 @@ FUN_02061EDC: ; 0x02061EDC
bl MOD06_02248B60
add r4, r0, #0x0
ldr r0, [r5, #0xc]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
ldrh r1, [r4, #0x0]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
pop {r3-r5, pc}
.balign 4
diff --git a/arm9/asm/unk_02064E90.s b/arm9/asm/unk_02064E90.s
index ea21d648..ca5edb45 100644
--- a/arm9/asm/unk_02064E90.s
+++ b/arm9/asm/unk_02064E90.s
@@ -48,12 +48,12 @@ FUN_02064E90: ; 0x02064E90
bl PlayerProfile_GetMoney
str r0, [sp, #0x34]
ldr r0, [r6, #0xc]
- bl FUN_02024DA0
- bl FUN_02024440
+ bl Sav2_Pokedex_get
+ bl Pokedex_CountSeenMons
str r0, [sp, #0x38]
ldr r0, [r6, #0xc]
- bl FUN_02024DA0
- bl FUN_02024D64
+ bl Sav2_Pokedex_get
+ bl Pokedex_GetSinnohDexFlag
str r0, [sp, #0x3c]
add r0, r4, #0x0
bl FUN_0202A1B8
@@ -238,8 +238,8 @@ FUN_02065078: ; 0x02065078
lsr r4, r0, #0x18
_020650A8:
add r0, r7, #0x0
- bl FUN_02024DA0
- bl FUN_020244EC
+ bl Sav2_Pokedex_get
+ bl Pokedex_HasCompletedNationalDex
cmp r0, #0x0
beq _020650BC
add r0, r4, #0x1
diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s
index dd82a0eb..1cf56132 100644
--- a/arm9/asm/unk_020653EC.s
+++ b/arm9/asm/unk_020653EC.s
@@ -1606,7 +1606,7 @@ FUN_02066070: ; 0x02066070
add r6, r0, #0x0
add r0, r4, #0x0
add r5, r2, #0x0
- bl FUN_02025838
+ bl Sav2_Mailbox_get
mov r1, #0x6b
lsl r1, r1, #0x2
str r0, [sp, #0x4]
@@ -1617,7 +1617,7 @@ FUN_02066070: ; 0x02066070
lsl r1, r1, #0x4
str r0, [r6, r1]
add r0, r5, #0x0
- bl CreateNewSealsObject
+ bl Mail_new
add r7, r0, #0x0
add r0, r6, #0x0
str r0, [sp, #0x10]
@@ -1633,7 +1633,7 @@ _020660AE:
mov r1, #0x0
add r2, r4, #0x0
add r3, r7, #0x0
- bl FUN_020258D4
+ bl Mailbox_FetchMailIToBuffer
mov r0, #0xc
mul r0, r4
ldr r1, [sp, #0x8]
@@ -1653,22 +1653,22 @@ _020660AE:
ldr r0, [sp, #0xc]
strb r4, [r1, r0]
add r0, r7, #0x0
- bl FUN_020256AC
+ bl Mail_TypeIsValid
cmp r0, #0x0
beq _02066134
mov r0, #0x1
strb r0, [r5, #0x1]
add r0, r7, #0x0
- bl FUN_020257C8
+ bl Mail_GetAuthorGender
strb r0, [r5, #0x4]
add r0, r7, #0x0
- bl FUN_020257CC
+ bl Mail_GetType
strb r0, [r5, #0x5]
ldrb r0, [r5, #0x5]
bl MailToItemId
strh r0, [r5, #0x6]
add r0, r7, #0x0
- bl FUN_020257C4
+ bl Mail_GetAuthorNamePtr
add r1, r0, #0x0
ldr r0, [r5, #0x8]
bl CopyU16ArrayToString
@@ -1778,7 +1778,7 @@ _020661D4:
ldrb r2, [r5, #0x18]
ldr r0, [r5, r0]
mov r1, #0x0
- bl FUN_02025878
+ bl Mailbox_DeleteSlotI
ldrb r1, [r5, #0x18]
add r0, r5, #0x0
bl FUN_02066160
@@ -2395,7 +2395,7 @@ _02066676:
lsl r0, r0, #0x2
ldr r0, [r5, r0]
ldr r0, [r0, #0xc]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r4, #0x8]
add r0, r4, #0x0
mov r1, #0x0
diff --git a/arm9/asm/unk_0206BB28.s b/arm9/asm/unk_0206BB28.s
index 3ddc7960..15f4469e 100644
--- a/arm9/asm/unk_0206BB28.s
+++ b/arm9/asm/unk_0206BB28.s
@@ -6,7 +6,7 @@
thumb_func_start FUN_0206BB28
FUN_0206BB28: ; 0x0206BB28
push {r3, lr}
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl FUN_0206BB34
pop {r3, pc}
diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s
index 39550e2a..c42b766a 100644
--- a/arm9/asm/unk_0206C700.s
+++ b/arm9/asm/unk_0206C700.s
@@ -1096,7 +1096,7 @@ _0206CFFA:
bne _0206D084
ldr r0, [r4, #0x48]
ldr r1, [r4, #0x28]
- bl FUN_02024AF0
+ bl Pokedex_SetMonCaughtFlag
ldr r0, [r4, #0x50]
mov r1, #0xc
bl FUN_0202A0E8
@@ -2169,7 +2169,7 @@ _0206D8EA:
add r2, sp, #0x0
bl SetMonData
ldr r0, [r4, #0x5c]
- bl CreateNewSealsObject
+ bl Mail_new
add r6, r0, #0x0
add r0, r5, #0x0
mov r1, #0xa9
@@ -2198,7 +2198,7 @@ _0206D8EA:
bl AddMonToParty
ldr r0, [r4, #0x48]
add r1, r5, #0x0
- bl FUN_02024AF0
+ bl Pokedex_SetMonCaughtFlag
ldr r0, [r4, #0x50]
mov r1, #0xc
bl FUN_0202A0E8
diff --git a/arm9/asm/unk_02080C38.s b/arm9/asm/unk_02080C38.s
index 80943988..458d4420 100644
--- a/arm9/asm/unk_02080C38.s
+++ b/arm9/asm/unk_02080C38.s
@@ -3646,7 +3646,7 @@ _02082740:
_0208274C:
ldr r0, _02082848 ; =0x0000198C
ldr r0, [r4, r0]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r7, r0, #0x0
ldr r0, _02082858 ; =0x00000127
ldrb r6, [r4, r0]
@@ -3657,7 +3657,7 @@ _0208274C:
_02082762:
ldr r1, [r5, #0x0]
add r0, r7, #0x0
- bl FUN_0202498C
+ bl Pokedex_SetMonSeenFlag
add r6, r6, #0x1
add r5, r5, #0x4
cmp r6, #0x4
diff --git a/arm9/asm/unk_02085338.s b/arm9/asm/unk_02085338.s
index 22c3f7ab..77d69e0d 100644
--- a/arm9/asm/unk_02085338.s
+++ b/arm9/asm/unk_02085338.s
@@ -16,7 +16,7 @@ FUN_02085338: ; 0x02085338
strb r5, [r4, #0x0]
strb r7, [r4, #0x1]
add r0, r6, #0x0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [r4, #0xc]
add r0, r6, #0x0
bl FUN_02013B5C
diff --git a/arm9/asm/unk_020854E0.s b/arm9/asm/unk_020854E0.s
index 86ea2fee..76b5a118 100644
--- a/arm9/asm/unk_020854E0.s
+++ b/arm9/asm/unk_020854E0.s
@@ -25,7 +25,7 @@ FUN_020854E0: ; 0x020854E0
add r7, r1, #0x0
add r6, r2, #0x0
str r3, [sp, #0x0]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [sp, #0x4]
ldr r0, [sp, #0x20]
mov r1, #0x1c
@@ -46,14 +46,14 @@ FUN_020854E0: ; 0x020854E0
strh r0, [r4, #0xc]
ldr r0, [sp, #0x20]
str r5, [r4, #0x10]
- bl CreateNewSealsObject
+ bl Mail_new
str r0, [r4, #0x14]
- bl InitSealsObject
+ bl Mail_init
ldr r0, [r4, #0x14]
mov r1, #0xff
add r2, r6, #0x0
add r3, r5, #0x0
- bl FUN_020256DC
+ bl Mail_SetNewMessageDetails
add r0, r4, #0x0
add sp, #0x8
pop {r3-r7, pc}
@@ -78,12 +78,12 @@ FUN_02085538: ; 0x02085538
strh r6, [r4, #0xc]
add r0, r7, #0x0
str r7, [r4, #0x10]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
ldr r3, [sp, #0x0]
add r1, r5, #0x0
add r2, r6, #0x0
str r0, [r4, #0x18]
- bl FUN_020258B0
+ bl Mailbox_AllocAndFetchMailI
str r0, [r4, #0x14]
add r0, r4, #0x0
pop {r3-r7, pc}
@@ -106,7 +106,7 @@ FUN_02085578: ; 0x02085578
strh r0, [r4, #0x0]
str r5, [r4, #0x10]
add r0, r7, #0x0
- bl CreateNewSealsObject
+ bl Mail_new
str r0, [r4, #0x14]
ldr r2, [r4, #0x14]
add r0, r6, #0x0
@@ -133,10 +133,10 @@ FUN_020855B0: ; 0x020855B0
strh r0, [r4, #0x0]
add r0, r7, #0x0
str r5, [r4, #0x10]
- bl CreateNewSealsObject
+ bl Mail_new
add r1, r6, #0x0
str r0, [r4, #0x14]
- bl FUN_020257D0
+ bl Mail_SetType
add r0, r4, #0x0
pop {r3-r7, pc}
.balign 4
@@ -162,7 +162,7 @@ _020855FC:
ldr r3, [r5, #0x14]
add r1, r4, #0x0
add r2, r6, #0x0
- bl FUN_02025888
+ bl Mailbox_CopyMailToSlotI
mov r0, #0x1
pop {r4-r6, pc}
@@ -206,14 +206,14 @@ FUN_02085644: ; 0x02085644
add r7, r0, #0x0
add r4, r2, #0x0
str r1, [sp, #0x0]
- bl FUN_02025864
+ bl Mailbox_GetFirstEmptySlotIdx
add r6, r0, #0x0
mov r0, #0x0
mvn r0, r0
cmp r6, r0
beq _0208569E
add r0, r4, #0x0
- bl CreateNewSealsObject
+ bl Mail_new
add r4, r0, #0x0
add r0, r5, #0x0
mov r1, #0xa9
@@ -223,9 +223,9 @@ FUN_02085644: ; 0x02085644
mov r1, #0x0
add r2, r6, #0x0
add r3, r4, #0x0
- bl FUN_02025888
+ bl Mailbox_CopyMailToSlotI
add r0, r4, #0x0
- bl InitSealsObject
+ bl Mail_init
add r0, r5, #0x0
mov r1, #0xa9
add r2, r4, #0x0
@@ -249,14 +249,14 @@ FUN_020856A0: ; 0x020856A0
add r2, r5, #0x0
add r7, r0, #0x0
str r1, [sp, #0x0]
- bl FUN_020258B0
+ bl Mailbox_AllocAndFetchMailI
add r6, r0, #0x0
bne _020856BC
mov r0, #0x0
mvn r0, r0
pop {r3-r7, pc}
_020856BC:
- bl FUN_020257CC
+ bl Mail_GetType
bl MailToItemId
str r0, [sp, #0x0]
add r0, r4, #0x0
@@ -270,7 +270,7 @@ _020856BC:
add r0, r7, #0x0
mov r1, #0x0
add r2, r5, #0x0
- bl FUN_02025878
+ bl Mailbox_DeleteSlotI
add r0, r6, #0x0
bl FreeToHeap
add r0, r5, #0x0
@@ -292,25 +292,25 @@ FUN_020856F0: ; 0x020856F0
mov r0, #0x0
strh r0, [r6, #0x0]
add r0, r4, #0x0
- bl FUN_020257C0
+ bl Mail_GetOTID
str r0, [r6, #0x8]
mov r0, #0x8
add r1, r5, #0x0
bl String_ctor
str r0, [r6, #0x10]
add r0, r4, #0x0
- bl FUN_020257C4
+ bl Mail_GetAuthorNamePtr
add r1, r0, #0x0
ldr r0, [r6, #0x10]
bl CopyU16ArrayToString
add r0, r4, #0x0
- bl FUN_020257CC
+ bl Mail_GetType
strb r0, [r6, #0xf]
add r0, r4, #0x0
- bl FUN_020257D8
+ bl Mail_GetLanguage
strb r0, [r6, #0xd]
add r0, r4, #0x0
- bl FUN_020257DC
+ bl Mail_GetVersion
strb r0, [r6, #0xe]
mov r5, #0x0
mov r7, #0x2
@@ -319,7 +319,7 @@ _02085748:
add r0, r4, #0x0
lsr r1, r1, #0x18
add r2, r7, #0x0
- bl FUN_020257E0
+ bl Mail_GetAttrFromUnk18Array
lsl r1, r5, #0x1
add r1, r6, r1
strh r0, [r1, #0x14]
@@ -335,7 +335,7 @@ _0208576A:
lsl r1, r5, #0x18
add r0, r4, #0x0
lsr r1, r1, #0x18
- bl FUN_02025814
+ bl Mail_GetUnk20Array
add r1, r0, #0x0
lsl r0, r5, #0x3
add r0, r7, r0
@@ -376,7 +376,7 @@ _020857B0:
add r0, r6, #0x0
add r1, r4, r1
lsr r2, r2, #0x18
- bl FUN_02025824
+ bl Mail_CopyToUnk20Array
add r0, r5, #0x1
lsl r0, r0, #0x10
lsr r5, r0, #0x10
@@ -384,7 +384,7 @@ _020857B0:
blo _020857B0
ldrb r1, [r7, #0xf]
add r0, r6, #0x0
- bl FUN_020257D0
+ bl Mail_SetType
pop {r3-r7, pc}
.balign 4
diff --git a/arm9/asm/unk_020859C0.s b/arm9/asm/unk_020859C0.s
index 1a38e392..7b65b9e5 100644
--- a/arm9/asm/unk_020859C0.s
+++ b/arm9/asm/unk_020859C0.s
@@ -638,7 +638,7 @@ _02085E66:
bl Sav2_Bag_get
str r0, [r4, #0x4]
ldr r0, [r6, #0x10]
- bl FUN_02025838
+ bl Sav2_Mailbox_get
str r0, [r4, #0x8]
add r0, r4, #0x0
mov r1, #0x0
diff --git a/arm9/asm/unk_02087A1C.s b/arm9/asm/unk_02087A1C.s
deleted file mode 100644
index 89e18978..00000000
--- a/arm9/asm/unk_02087A1C.s
+++ /dev/null
@@ -1,65 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .rodata
-
- .global UNK_020FD120
-UNK_020FD120: ; 0x020FD120
- .byte 0x17, 0x00, 0x19, 0x00, 0x36, 0x00, 0x4D, 0x00, 0x78, 0x00, 0x81, 0x00, 0xCA, 0x00, 0xD6, 0x00
- .byte 0xD7, 0x00, 0xD8, 0x00, 0xE4, 0x00, 0x16, 0x01, 0x1F, 0x01, 0x3B, 0x01
-
- .global UNK_020FD13C
-UNK_020FD13C: ; 0x020FD13C
- .byte 0x01, 0x02, 0x03, 0x05, 0x04, 0x07
-
- .text
-
- thumb_func_start FUN_02087A1C
-FUN_02087A1C: ; 0x02087A1C
- ldr r3, _02087A34 ; =UNK_020FD13C
- mov r2, #0x0
-_02087A20:
- ldrb r1, [r3, #0x0]
- cmp r0, r1
- beq _02087A2E
- add r2, r2, #0x1
- add r3, r3, #0x1
- cmp r2, #0x6
- blt _02087A20
-_02087A2E:
- add r0, r2, #0x0
- bx lr
- nop
-_02087A34: .word UNK_020FD13C
-
- thumb_func_start FUN_02087A38
-FUN_02087A38: ; 0x02087A38
- push {r4, lr}
- add r4, r0, #0x0
- cmp r4, #0x6
- blt _02087A44
- bl ErrorHandling
-_02087A44:
- ldr r0, _02087A4C ; =UNK_020FD13C
- ldrb r0, [r0, r4]
- pop {r4, pc}
- nop
-_02087A4C: .word UNK_020FD13C
-
- thumb_func_start FUN_02087A50
-FUN_02087A50: ; 0x02087A50
- ldr r3, _02087A68 ; =UNK_020FD120
- mov r2, #0x0
-_02087A54:
- ldrh r1, [r3, #0x0]
- cmp r0, r1
- beq _02087A62
- add r2, r2, #0x1
- add r3, r3, #0x2
- cmp r2, #0xe
- blt _02087A54
-_02087A62:
- add r0, r2, #0x0
- bx lr
- nop
-_02087A68: .word UNK_020FD120
diff --git a/arm9/asm/unk_02088F0C.s b/arm9/asm/unk_02088F0C.s
index 490492fa..1c3bc9f2 100644
--- a/arm9/asm/unk_02088F0C.s
+++ b/arm9/asm/unk_02088F0C.s
@@ -640,7 +640,7 @@ FUN_02088FA0: ; 0x02088FA0
_02088FBE:
ldrh r1, [r5, #0x0]
ldr r0, [sp, #0x8]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0x0
beq _02088FEC
ldrh r3, [r5, #0x0]
diff --git a/arm9/global.inc b/arm9/global.inc
index 754dfe33..821007ef 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -1538,44 +1538,44 @@
.extern Sav2_Pokedex_new
.extern Sav2_Pokedex_Copy
.extern Sav2_Pokedex_init
-.extern FUN_020243C8
-.extern FUN_02024404
-.extern FUN_02024440
-.extern FUN_0202445C
-.extern FUN_020244A4
-.extern FUN_020244EC
-.extern FUN_02024504
-.extern FUN_02024518
-.extern FUN_02024550
-.extern FUN_02024594
-.extern FUN_020245F0
-.extern FUN_02024648
+.extern Pokedex_CountNationalDexCaughtMons
+.extern Pokedex_CountNationalDexSeenMons
+.extern Pokedex_CountSeenMons
+.extern Pokedex_CountSinnohDexCaughtMons
+.extern Pokedex_CountSinnohDexSeenMons
+.extern Pokedex_HasCompletedNationalDex
+.extern Pokedex_HasCompletedSinnohDex
+.extern Pokedex_CountNationalDexCaughtMons_OmitMythicals
+.extern Pokedex_CountSinnohDexSeenMons_OmitMythicals
+.extern Pokedex_CheckMonCaughtFlag
+.extern Pokedex_CheckMonSeenFlag
+.extern Pokedex_GetSeenSpindaPersonality
.extern FUN_02024674
-.extern FUN_020246DC
-.extern FUN_0202471C
-.extern FUN_02024748
-.extern FUN_020247A4
-.extern FUN_020247C8
-.extern FUN_02024828
-.extern FUN_0202484C
-.extern FUN_0202489C
-.extern FUN_020248BC
-.extern FUN_0202490C
-.extern FUN_02024930
-.extern FUN_02024970
-.extern FUN_0202498C
-.extern FUN_02024AF0
+.extern Pokedex_GetSeenUnownI
+.extern Pokedex_CountSeenUnown
+.extern Pokedex_GetSeenShellosForme
+.extern Pokedex_CountSeenShellos
+.extern Pokedex_GetSeenGastrodonForme
+.extern Pokedex_CountSeenGastrodon
+.extern Pokedex_GetSeenBurmyForme
+.extern Pokedex_CountSeenBurmy
+.extern Pokedex_GetSeenWormadamForme
+.extern Pokedex_CountSeenWormadam
+.extern Pokedex_GetSeenDeoxysForme
+.extern Pokedex_CountSeenDeoxys
+.extern Pokedex_SetMonSeenFlag
+.extern Pokedex_SetMonCaughtFlag
.extern Pokedex_SetNatDexFlag
.extern Pokedex_GetNatDexFlag
.extern FUN_02024CC4
.extern FUN_02024CE0
-.extern FUN_02024D00
+.extern Pokedex_GetMeisterFlagBySpeciesAndLanguage
.extern FUN_02024D4C
.extern FUN_02024D58
-.extern FUN_02024D64
-.extern FUN_02024D80
-.extern FUN_02024DA0
-.extern FUN_02024DAC
+.extern Pokedex_GetSinnohDexFlag
+.extern Pokedex_SetSinnohDexFlag
+.extern Sav2_Pokedex_get
+.extern Pokedex_GetSeenMonForme
.extern FUN_02024E64
.extern FUN_02024E6C
.extern FUN_02024EB4
@@ -1630,30 +1630,30 @@
.extern FUN_020254F8
.extern FUN_02025520
.extern FUN_02025614
-.extern InitSealsObject
-.extern FUN_020256AC
-.extern CreateNewSealsObject
-.extern CopySealsObject
-.extern FUN_020256DC
-.extern FUN_020257C0
-.extern FUN_020257C4
-.extern FUN_020257C8
-.extern FUN_020257CC
-.extern FUN_020257D0
-.extern FUN_020257D8
-.extern FUN_020257DC
-.extern FUN_020257E0
-.extern FUN_02025814
-.extern FUN_02025824
-.extern FUN_02025838
-.extern FUN_02025844
-.extern FUN_0202584C
-.extern FUN_02025864
-.extern FUN_02025878
-.extern FUN_02025888
-.extern FUN_0202589C
-.extern FUN_020258B0
-.extern FUN_020258D4
+.extern Mail_init
+.extern Mail_TypeIsValid
+.extern Mail_new
+.extern Mail_copy
+.extern Mail_SetNewMessageDetails
+.extern Mail_GetOTID
+.extern Mail_GetAuthorNamePtr
+.extern Mail_GetAuthorGender
+.extern Mail_GetType
+.extern Mail_SetType
+.extern Mail_GetLanguage
+.extern Mail_GetVersion
+.extern Mail_GetAttrFromUnk18Array
+.extern Mail_GetUnk20Array
+.extern Mail_CopyToUnk20Array
+.extern Sav2_Mailbox_get
+.extern Sav2_Mailbox_sizeof
+.extern Sav2_Mailbox_init
+.extern Mailbox_GetFirstEmptySlotIdx
+.extern Mailbox_DeleteSlotI
+.extern Mailbox_CopyMailToSlotI
+.extern Mailbox_CountMessages
+.extern Mailbox_AllocAndFetchMailI
+.extern Mailbox_FetchMailIToBuffer
.extern FUN_02025954
.extern FUN_0202595C
.extern FUN_02025960
@@ -5393,9 +5393,9 @@
.extern FUN_02086F8C
.extern FUN_02086F98
.extern FUN_02086FA8
-.extern FUN_02087A1C
-.extern FUN_02087A38
-.extern FUN_02087A50
+.extern GetMeisterLanguageIdx
+.extern GetMeisterLanguage
+.extern GetMeisterSpeciesIdx
.extern FUN_02087A6C
.extern FUN_02087A84
.extern FUN_02087A98
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index 2244fdd6..f9672ea0 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -6320,17 +6320,17 @@ MOD05_021E8310: ; 0x021E8310
bl FUN_02034DC0
add r6, r0, #0
add r0, r4, #0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r7, r0, #0
ldr r0, [r6]
bl FUN_02034824
str r0, [r5, #4]
add r0, r7, #0
- bl FUN_02024D64
+ bl Pokedex_GetSinnohDexFlag
cmp r0, #0
beq _021E8344
add r0, r7, #0
- bl FUN_02024440
+ bl Pokedex_CountSeenMons
b _021E8346
_021E8344:
mov r0, #0
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index dd12992e..2af29137 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -5043,7 +5043,7 @@ _0223BBDA:
blt _0223BBDA
add r0, r5, #0
bl ScriptEnvironment_GetSav2Ptr
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
add r6, r0, #0
add r0, r4, #0
@@ -5480,7 +5480,7 @@ _0223BF7E:
blt _0223BF7E
add r0, r5, #0
bl ScriptEnvironment_GetSav2Ptr
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
add r6, r0, #0
add r0, r4, #0
@@ -5790,7 +5790,7 @@ _0223C222:
blt _0223C222
add r0, r5, #0
bl ScriptEnvironment_GetSav2Ptr
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
add r6, r0, #0
ldr r0, [sp, #0x14]
@@ -21793,7 +21793,7 @@ MOD06_02244210: ; 0x02244210
bl String_ctor
str r0, [sp, #0x1c]
add r0, r4, #0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x18]
ldr r2, _022442C0 ; =0x0000016A
mov r0, #1
@@ -21819,7 +21819,7 @@ _02244264:
add r7, r0, #0
ldr r0, [sp, #0x18]
add r1, r7, #0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0
beq _0224429E
ldr r0, [sp, #0x10]
@@ -23653,7 +23653,7 @@ _02245098:
blo _02245098
add r0, r5, #0
bl ScriptEnvironment_GetSav2Ptr
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
add r6, r0, #0
ldr r0, [r5, #0xc]
@@ -32178,8 +32178,8 @@ _02249180:
MOD06_02249184: ; 0x02249184
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
- bl FUN_02024504
+ bl Sav2_Pokedex_get
+ bl Pokedex_HasCompletedSinnohDex
pop {r3, pc}
.align 2, 0
@@ -32187,8 +32187,8 @@ MOD06_02249184: ; 0x02249184
MOD06_02249194: ; 0x02249194
push {r3, lr}
ldr r0, [r0, #0xc]
- bl FUN_02024DA0
- bl FUN_02024D64
+ bl Sav2_Pokedex_get
+ bl Pokedex_GetSinnohDexFlag
pop {r3, pc}
.align 2, 0
diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s
index ba099f93..fb098d96 100644
--- a/arm9/modules/11/asm/module_11_thumb2.s
+++ b/arm9/modules/11/asm/module_11_thumb2.s
@@ -4744,7 +4744,7 @@ MOD11_022315C0: ; 0x022315C0
_022315FE:
ldr r0, [r5, #0x60]
add r1, r6, #0
- bl FUN_0202498C
+ bl Pokedex_SetMonSeenFlag
_02231606:
mov r0, #1
tst r0, r4
@@ -4759,7 +4759,7 @@ _02231606:
bne _02231626
ldr r0, [r5, #0x60]
add r1, r6, #0
- bl FUN_02024AF0
+ bl Pokedex_SetMonCaughtFlag
_02231626:
pop {r4, r5, r6, pc}
@@ -4790,20 +4790,20 @@ MOD11_02231628: ; 0x02231628
bl MOD11_02230014
add r1, r0, #0
ldr r0, [r5, #0x60]
- bl FUN_02024AF0
+ bl Pokedex_SetMonCaughtFlag
_02231664:
pop {r3, r4, r5, pc}
.align 2, 0
thumb_func_start MOD11_02231668
MOD11_02231668: ; 0x02231668
- ldr r3, _02231674 ; =FUN_02024594
+ ldr r3, _02231674 ; =Pokedex_CheckMonCaughtFlag
lsl r1, r1, #0x10
ldr r0, [r0, #0x60]
lsr r1, r1, #0x10
bx r3
nop
-_02231674: .word FUN_02024594
+_02231674: .word Pokedex_CheckMonCaughtFlag
thumb_func_start MOD11_02231678
MOD11_02231678: ; 0x02231678
diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s
index 1448cc55..e30640a5 100644
--- a/arm9/modules/16/asm/module_16.s
+++ b/arm9/modules/16/asm/module_16.s
@@ -4732,7 +4732,7 @@ MOD16_021D98EC: ; 0x021D98EC
_021D98FA:
ldr r0, [r5]
add r1, r4, #0
- bl FUN_020246DC
+ bl Pokedex_GetSeenUnownI
pop {r3, r4, r5, pc}
thumb_func_end MOD16_021D98EC
@@ -4747,7 +4747,7 @@ MOD16_021D9904: ; 0x021D9904
_021D9912:
ldr r0, [r5]
add r1, r4, #0
- bl FUN_02024748
+ bl Pokedex_GetSeenShellosForme
pop {r3, r4, r5, pc}
thumb_func_end MOD16_021D9904
@@ -4762,7 +4762,7 @@ MOD16_021D991C: ; 0x021D991C
_021D992A:
ldr r0, [r5]
add r1, r4, #0
- bl FUN_020247C8
+ bl Pokedex_GetSeenGastrodonForme
pop {r3, r4, r5, pc}
thumb_func_end MOD16_021D991C
@@ -4777,7 +4777,7 @@ MOD16_021D9934: ; 0x021D9934
_021D9942:
ldr r0, [r5]
add r1, r4, #0
- bl FUN_0202484C
+ bl Pokedex_GetSeenBurmyForme
pop {r3, r4, r5, pc}
thumb_func_end MOD16_021D9934
@@ -4792,7 +4792,7 @@ MOD16_021D994C: ; 0x021D994C
_021D995A:
ldr r0, [r5]
add r1, r4, #0
- bl FUN_020248BC
+ bl Pokedex_GetSeenWormadamForme
pop {r3, r4, r5, pc}
thumb_func_end MOD16_021D994C
@@ -4882,75 +4882,75 @@ _021D99F0:
thumb_func_start MOD16_021D99F4
MOD16_021D99F4: ; 0x021D99F4
- ldr r3, _021D99FC ; =FUN_0202471C
+ ldr r3, _021D99FC ; =Pokedex_CountSeenUnown
ldr r0, [r0]
bx r3
nop
-_021D99FC: .word FUN_0202471C
+_021D99FC: .word Pokedex_CountSeenUnown
thumb_func_end MOD16_021D99F4
thumb_func_start MOD16_021D9A00
MOD16_021D9A00: ; 0x021D9A00
- ldr r3, _021D9A08 ; =FUN_020247A4
+ ldr r3, _021D9A08 ; =Pokedex_CountSeenShellos
ldr r0, [r0]
bx r3
nop
-_021D9A08: .word FUN_020247A4
+_021D9A08: .word Pokedex_CountSeenShellos
thumb_func_end MOD16_021D9A00
thumb_func_start MOD16_021D9A0C
MOD16_021D9A0C: ; 0x021D9A0C
- ldr r3, _021D9A14 ; =FUN_02024828
+ ldr r3, _021D9A14 ; =Pokedex_CountSeenGastrodon
ldr r0, [r0]
bx r3
nop
-_021D9A14: .word FUN_02024828
+_021D9A14: .word Pokedex_CountSeenGastrodon
thumb_func_end MOD16_021D9A0C
thumb_func_start MOD16_021D9A18
MOD16_021D9A18: ; 0x021D9A18
- ldr r3, _021D9A20 ; =FUN_0202489C
+ ldr r3, _021D9A20 ; =Pokedex_CountSeenBurmy
ldr r0, [r0]
bx r3
nop
-_021D9A20: .word FUN_0202489C
+_021D9A20: .word Pokedex_CountSeenBurmy
thumb_func_end MOD16_021D9A18
thumb_func_start MOD16_021D9A24
MOD16_021D9A24: ; 0x021D9A24
- ldr r3, _021D9A2C ; =FUN_0202490C
+ ldr r3, _021D9A2C ; =Pokedex_CountSeenWormadam
ldr r0, [r0]
bx r3
nop
-_021D9A2C: .word FUN_0202490C
+_021D9A2C: .word Pokedex_CountSeenWormadam
thumb_func_end MOD16_021D9A24
thumb_func_start MOD16_021D9A30
MOD16_021D9A30: ; 0x021D9A30
- ldr r3, _021D9A38 ; =FUN_02024648
+ ldr r3, _021D9A38 ; =Pokedex_GetSeenSpindaPersonality
ldr r0, [r0]
mov r1, #0
bx r3
.align 2, 0
-_021D9A38: .word FUN_02024648
+_021D9A38: .word Pokedex_GetSeenSpindaPersonality
thumb_func_end MOD16_021D9A30
thumb_func_start MOD16_021D9A3C
MOD16_021D9A3C: ; 0x021D9A3C
- ldr r3, _021D9A44 ; =FUN_02024930
+ ldr r3, _021D9A44 ; =Pokedex_GetSeenDeoxysForme
ldr r0, [r0]
bx r3
nop
-_021D9A44: .word FUN_02024930
+_021D9A44: .word Pokedex_GetSeenDeoxysForme
thumb_func_end MOD16_021D9A3C
thumb_func_start MOD16_021D9A48
MOD16_021D9A48: ; 0x021D9A48
- ldr r3, _021D9A50 ; =FUN_02024970
+ ldr r3, _021D9A50 ; =Pokedex_CountSeenDeoxys
ldr r0, [r0]
bx r3
nop
-_021D9A50: .word FUN_02024970
+_021D9A50: .word Pokedex_CountSeenDeoxys
thumb_func_end MOD16_021D9A48
thumb_func_start MOD16_021D9A54
@@ -5703,7 +5703,7 @@ _021D9F72:
ldr r0, [r5]
lsr r1, r1, #0x10
add r2, r6, #0
- bl FUN_02024D00
+ bl Pokedex_GetMeisterFlagBySpeciesAndLanguage
pop {r4, r5, r6, pc}
thumb_func_end MOD16_021D9F58
@@ -5767,7 +5767,7 @@ MOD16_021D9FC4: ; 0x021D9FC4
_021D9FDA:
ldrh r1, [r4]
ldr r0, [sp, #4]
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0
beq _021D9FF6
ldr r1, [r5]
@@ -5825,7 +5825,7 @@ _021DA034:
cmp r0, #1
beq _021DA054
ldr r0, [sp, #0x34]
- bl FUN_02024594
+ bl Pokedex_CheckMonCaughtFlag
cmp r0, #0
bne _021DA054
_021DA04C:
@@ -5875,7 +5875,7 @@ MOD16_021DA080: ; 0x021DA080
_021DA094:
ldrh r1, [r4]
ldr r0, [sp]
- bl FUN_02024594
+ bl Pokedex_CheckMonCaughtFlag
cmp r0, #0
ldr r0, _021DA0D4 ; =0x00000F6C
beq _021DA0AC
@@ -9673,12 +9673,12 @@ _021DBBB0: .word String_dtor
MOD16_021DBBB4: ; 0x021DBBB4
add r1, r0, #1
ldr r0, _021DBBC0 ; =0x021FF568
- ldr r3, _021DBBC4 ; =FUN_02087A38
+ ldr r3, _021DBBC4 ; =GetMeisterLanguage
ldrb r0, [r0, r1]
bx r3
nop
_021DBBC0: .word MOD16_021FF568
-_021DBBC4: .word FUN_02087A38
+_021DBBC4: .word GetMeisterLanguage
thumb_func_end MOD16_021DBBB4
thumb_func_start MOD16_021DBBC8
@@ -9847,14 +9847,14 @@ MOD16_021DBCE0: ; 0x021DBCE0
add r4, r2, #0
add r5, r3, #0
ldr r6, [sp, #0x18]
- bl FUN_02087A1C
+ bl GetMeisterLanguageIdx
str r0, [r5]
cmp r0, #6
blt _021DBCFA
bl ErrorHandling
_021DBCFA:
add r0, r7, #0
- bl FUN_02087A50
+ bl GetMeisterSpeciesIdx
str r0, [r4]
ldr r5, [r5]
cmp r5, #6
diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s
index bf7fde6d..081a836b 100644
--- a/arm9/modules/18/asm/module_18.s
+++ b/arm9/modules/18/asm/module_18.s
@@ -3027,7 +3027,7 @@ MOD18_0223AE88: ; 0x0223AE88
bl FUN_02025C38
add r4, r0, #0
add r0, r6, #0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
mov r1, #0
cmp r0, #0
@@ -38228,7 +38228,7 @@ MOD18_0224C0AC: ; 0x0224C0AC
bl FUN_02026CC4
add r7, r0, #0
add r0, r5, #0
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
bl Pokedex_GetNatDexFlag
str r0, [sp, #4]
add r0, r7, #0
diff --git a/arm9/modules/23/asm/module_23.s b/arm9/modules/23/asm/module_23.s
index a7bb626a..f3a4f14c 100644
--- a/arm9/modules/23/asm/module_23.s
+++ b/arm9/modules/23/asm/module_23.s
@@ -1021,7 +1021,7 @@ MOD23_02254F94: ; 0x02254F94
blt _02254FF4
ldr r0, [r5, #0x10]
bl MOD20_02252C40
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
add r5, r0, #0
bl Pokedex_GetNatDexFlag
cmp r0, #0
@@ -1042,7 +1042,7 @@ _02254FD8:
bhi _02254FF4
add r0, r5, #0
add r1, r4, #0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0
beq _02254FF4
add r0, r4, #0
diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s
index 775315bc..fbe645b5 100644
--- a/arm9/modules/56/asm/module_56.s
+++ b/arm9/modules/56/asm/module_56.s
@@ -1979,7 +1979,7 @@ MOD56_02212E0C: ; 0x02212E0C
add r0, r5, #0
add r0, #0xc4
ldr r0, [r0]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [sp, #0x10]
add r0, r5, #0
add r0, #0xc4
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index 196c959f..8e74df8f 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -13765,7 +13765,7 @@ _0223441E:
beq _02234434
ldrh r1, [r5]
add r0, r4, #0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0
beq _0223444A
add r6, r6, #1
@@ -13777,7 +13777,7 @@ _02234434:
cmp r0, #0
beq _0223444A
add r0, r4, #0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0
beq _0223444A
add r6, r6, #1
@@ -13808,7 +13808,7 @@ _02234472:
beq _02234494
ldrh r1, [r5]
add r0, r4, #0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0
beq _022344B6
ldrh r2, [r5]
@@ -13825,7 +13825,7 @@ _02234494:
cmp r0, #0
beq _022344B6
add r0, r4, #0
- bl FUN_020245F0
+ bl Pokedex_CheckMonSeenFlag
cmp r0, #0
beq _022344B6
ldrh r2, [r5]
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index fec76301..ca3ff8d3 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -1101,7 +1101,7 @@ _0222DDB8:
beq _0222DE76
ldr r0, [sp, #0x10]
ldr r0, [r0, #8]
- bl FUN_02024440
+ bl Pokedex_CountSeenMons
add r1, r0, #0
ldr r0, [sp, #0x28]
bl MOD83_0222DCF4
@@ -1952,13 +1952,13 @@ MOD83_0222E48C: ; 0x0222E48C
bl Sav2_PlayerData_GetProfileAddr
str r0, [r4, #0xc]
ldr r0, [r4, #4]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [r4, #8]
ldr r0, [r4, #4]
bl Sav2_PlayerData_GetIGTAddr
str r0, [r4, #0x10]
ldr r0, [r4, #8]
- bl FUN_02024D64
+ bl Pokedex_GetSinnohDexFlag
str r0, [r4, #0x4c]
ldr r0, [r4, #0xc]
bl PlayerProfile_CountBadges
@@ -3054,7 +3054,7 @@ MOD83_0222EDF8: ; 0x0222EDF8
bl Sav2_PlayerData_GetProfileAddr
str r0, [r4, #0x10]
ldr r0, [r4, #8]
- bl FUN_02024DA0
+ bl Sav2_Pokedex_get
str r0, [r4, #0xc]
ldr r0, [r4, #8]
bl Sav2_PlayerData_GetOptionsAddr
@@ -3133,7 +3133,7 @@ _0222EEAC: ; jump table
_0222EEC8:
bl MOD83_0222E954
ldr r0, [r4, #0xc]
- bl FUN_02024D64
+ bl Pokedex_GetSinnohDexFlag
cmp r0, #0
bne _0222EEE4
mov r0, #1
diff --git a/arm9/modules/84/asm/module_84_thumb2.s b/arm9/modules/84/asm/module_84_thumb2.s
index f80b3bb3..eef0fa0b 100644
--- a/arm9/modules/84/asm/module_84_thumb2.s
+++ b/arm9/modules/84/asm/module_84_thumb2.s
@@ -241,7 +241,7 @@ _021D82CC:
lsl r1, r5, #0x10
add r0, r6, #0
lsr r1, r1, #0x10
- bl FUN_02024594
+ bl Pokedex_CheckMonCaughtFlag
cmp r0, #0
beq _021D8340
lsl r0, r5, #0x10
@@ -273,7 +273,7 @@ _021D82CC:
add r0, r6, #0
add r1, r5, #0
mov r2, #0
- bl FUN_02024DAC
+ bl Pokedex_GetSeenMonForme
ldr r1, _021D8428 ; =0x00001220
ldr r1, [r4, r1]
lsl r1, r1, #3
@@ -387,7 +387,7 @@ _021D83E8:
ldrh r1, [r4, r1]
add r0, r6, #0
mov r2, #0
- bl FUN_02024DAC
+ bl Pokedex_GetSeenMonForme
ldr r1, _021D8438 ; =0x000002BB
add r5, r5, #1
strb r0, [r4, r1]
diff --git a/arm9/src/daycare.c b/arm9/src/daycare.c
index eff25151..b144f0a9 100644
--- a/arm9/src/daycare.c
+++ b/arm9/src/daycare.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "pokemon.h"
-#include "seals.h"
+#include "mail.h"
#include "save_block_2.h"
#include "daycare.h"
@@ -40,7 +40,7 @@ u32 DayCareMon_GetSteps(struct DayCareMon * dcmon)
return dcmon->steps;
}
-struct SealStruct * DayCareMail_GetCapsule(struct DayCareMail * dcmail)
+struct Mail * DayCareMail_GetCapsule(struct DayCareMail * dcmail)
{
return &dcmail->seal;
}
diff --git a/arm9/src/mail.c b/arm9/src/mail.c
new file mode 100644
index 00000000..96074471
--- /dev/null
+++ b/arm9/src/mail.c
@@ -0,0 +1,267 @@
+#include "global.h"
+#include "mail.h"
+#include "heap.h"
+#include "string_util.h"
+#include "MI_memory.h"
+#include "save_block_2.h"
+#include "party.h"
+#include "player_data.h"
+
+#pragma thumb on
+
+extern void FUN_02013724(u16 * ptr);
+extern u32 FUN_0206B6C8(struct Pokemon * pokemon);
+extern u16 FUN_0206B7BC(u16 species, u32 forme, BOOL is_egg);
+extern void FUN_02013960(u16 * dest, const u16 * src);
+
+void Mail_init(struct Mail * mail)
+{
+ s32 i;
+ mail->author_otId = 0;
+ mail->author_gender = 0;
+ mail->author_language = (u8)gGameLanguage;
+ mail->author_version = (u8)gGameVersion;
+ mail->mail_type = 0xFF;
+ StringFillEOS(mail->author_name, 8);
+ for (i = 0; i < 3; i++)
+ {
+ mail->unk_18[i].raw = 0xFFFF;
+ }
+ for (i = 0; i < 3; i++)
+ {
+ FUN_02013724(mail->unk_20[i]);
+ }
+}
+
+BOOL Mail_TypeIsValid(struct Mail * mail)
+{
+ return mail->mail_type <= 11;
+}
+
+struct Mail * Mail_new(u32 heap_id)
+{
+ struct Mail * ret = (struct Mail *)AllocFromHeapAtEnd(heap_id, sizeof(struct Mail));
+ Mail_init(ret);
+ return ret;
+}
+
+void Mail_copy(const struct Mail * src, struct Mail * dest)
+{
+ MI_CpuCopy8(src, dest, sizeof(struct Mail));
+}
+
+void Mail_SetNewMessageDetails(struct Mail * mail, u8 type, u8 monIdx, struct SaveBlock2 * sav2)
+{
+ u32 sp10;
+ u32 forme;
+ BOOL is_egg;
+ u16 species;
+ struct PlayerParty * party;
+ struct PlayerData * profile;
+ struct Pokemon * pokemon;
+ u16 r7;
+ u8 i;
+
+ Mail_init(mail);
+ mail->mail_type = type;
+ party = SavArray_PlayerParty_get(sav2);
+ profile = Sav2_PlayerData_GetProfileAddr(sav2);
+
+ CopyU16StringArray(mail->author_name, PlayerProfile_GetNamePtr(profile));
+ mail->author_gender = (u8)PlayerProfile_GetTrainerGender(profile);
+ mail->author_otId = PlayerProfile_GetTrainerID(profile);
+ for (i = 0; monIdx < GetPartyCount(party); monIdx++)
+ {
+ union MailMessage * ptr;
+ pokemon = GetPartyMonByIndex(party, monIdx);
+ species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, NULL);
+ is_egg = (BOOL)GetMonData(pokemon, MON_DATA_IS_EGG, NULL);
+ forme = GetMonData(pokemon, MON_DATA_FORME, NULL);
+ sp10 = FUN_0206B6C8(pokemon);
+ r7 = FUN_0206B7BC(species, forme, is_egg);
+ ptr = &mail->unk_18[i];
+ ptr->bits.unk_0 = sp10;
+ i++;
+ ptr->bits.unk_C = r7;
+ if (i >= 3)
+ break;
+ }
+}
+
+u32 Mail_GetOTID(struct Mail * mail)
+{
+ return mail->author_otId;
+}
+
+u16 * Mail_GetAuthorNamePtr(struct Mail * mail)
+{
+ return mail->author_name;
+}
+
+u8 Mail_GetAuthorGender(struct Mail * mail)
+{
+ return mail->author_gender;
+}
+
+u8 Mail_GetType(struct Mail * mail)
+{
+ return mail->mail_type;
+}
+
+void Mail_SetType(struct Mail * mail, u8 type)
+{
+ if (type < 12)
+ mail->mail_type = type;
+}
+
+u8 Mail_GetLanguage(struct Mail * mail)
+{
+ return mail->author_language;
+}
+
+u8 Mail_GetVersion(struct Mail * mail)
+{
+ return mail->author_version;
+}
+
+u16 Mail_GetAttrFromUnk18Array(struct Mail * mail, u32 idx, u32 attr)
+{
+ if (idx < 3)
+ {
+ switch (attr)
+ {
+ case 0:
+ return mail->unk_18[idx].bits.unk_0;
+ case 1:
+ return mail->unk_18[idx].bits.unk_C;
+ case 2:
+ default:
+ return mail->unk_18[idx].raw;
+ }
+ }
+ return 0;
+}
+
+u16 * Mail_GetUnk20Array(struct Mail * mail, u32 idx)
+{
+ if (idx < 3)
+ return mail->unk_20[idx];
+ else
+ return mail->unk_20[0];
+}
+
+void Mail_CopyToUnk20Array(struct Mail * mail, const u16 * src, u32 idx)
+{
+ if (idx < 3)
+ FUN_02013960(mail->unk_20[idx], src);
+}
+
+struct Mail * Sav2_Mailbox_get(struct SaveBlock2 * sav2)
+{
+ return (struct Mail *)SavArray_get(sav2, 15);
+}
+
+u32 Sav2_Mailbox_sizeof(void)
+{
+ return 20 * sizeof(struct Mail);
+}
+
+void Sav2_Mailbox_init(struct Mail * mail)
+{
+ s32 i;
+ for (i = 0; i < 20; i++)
+ {
+ Mail_init(&mail[i]);
+ }
+}
+
+s32 Mailbox_GetFirstEmptySlotIdx(struct Mail * mail, BOOL r1)
+{
+ switch (r1)
+ {
+ case 0:
+ return MailArray_GetFirstEmptySlotIdx(mail, 20);
+ default:
+ return -1;
+ }
+}
+
+void Mailbox_DeleteSlotI(struct Mail * mail, BOOL r1, s32 idx)
+{
+ mail = Mailbox_GetPtrToSlotI(mail, r1, idx);
+ if (mail != NULL)
+ Mail_init(mail);
+}
+
+void Mailbox_CopyMailToSlotI(struct Mail * mail, BOOL r1, s32 idx, const struct Mail * src)
+{
+ mail = Mailbox_GetPtrToSlotI(mail, r1, idx);
+ if (mail != NULL)
+ Mail_copy(src, mail);
+}
+
+s32 Mailbox_CountMessages(struct Mail * mail, BOOL r1)
+{
+ switch (r1)
+ {
+ case 0:
+ return MailArray_CountMessages(mail, 20);
+ default:
+ return 0;
+ }
+}
+
+struct Mail * Mailbox_AllocAndFetchMailI(struct Mail * mail, BOOL r1, s32 idx, u32 heap_id)
+{
+ struct Mail * ret;
+ mail = Mailbox_GetPtrToSlotI(mail, r1, idx);
+ ret = Mail_new(heap_id);
+ if (mail != NULL)
+ Mail_copy(mail, ret);
+ return ret;
+}
+
+void Mailbox_FetchMailIToBuffer(struct Mail * mail, BOOL r1, s32 idx, struct Mail * dest)
+{
+ mail = Mailbox_GetPtrToSlotI(mail, r1, idx);
+ if (mail == NULL)
+ Mail_init(dest);
+ else
+ Mail_copy(mail, dest);
+}
+
+s32 MailArray_GetFirstEmptySlotIdx(struct Mail * mail, s32 count)
+{
+ s32 i;
+ for (i = 0; i < count; i++)
+ {
+ if (!Mail_TypeIsValid(&mail[i]))
+ return i;
+ }
+ return -1;
+}
+
+s32 MailArray_CountMessages(struct Mail * mail, s32 count)
+{
+ s32 ret = 0;
+ s32 i;
+ for (i = 0; i < count; i++)
+ {
+ if (Mail_TypeIsValid(&mail[i]))
+ ret++;
+ }
+ return ret;
+}
+
+struct Mail * Mailbox_GetPtrToSlotI(struct Mail * mail, BOOL r1, s32 idx)
+{
+ struct Mail * ret = NULL;
+ switch (r1)
+ {
+ case 0:
+ if (idx < 20)
+ ret = &mail[idx];
+ break;
+ }
+ return ret;
+}
diff --git a/arm9/src/main.c b/arm9/src/main.c
index 4f3b583c..86f0f6af 100644
--- a/arm9/src/main.c
+++ b/arm9/src/main.c
@@ -1,3 +1,5 @@
+#define IN_MAIN_C
+
#include "global.h"
#include "SPI_pm.h"
#include "CARD_backup.h"
@@ -51,7 +53,7 @@ extern struct Unk21DBE18 MOD52_021D76C8;
extern u8 SDK_STATIC_BSS_START[];
-const u8 gGameVersion = GAME_VERSION;
+const int gGameVersion = GAME_VERSION;
const int gGameLanguage = GAME_LANGUAGE;
THUMB_FUNC void NitroMain(void)
diff --git a/arm9/src/pokedex.c b/arm9/src/pokedex.c
index 307196bc..bd1ea254 100644
--- a/arm9/src/pokedex.c
+++ b/arm9/src/pokedex.c
@@ -58,24 +58,24 @@ 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)
+s32 Pokedex_CountSeenShellosOrGastrodon_Internal(struct Pokedex * pokedex, u32 species)
{
GF_ASSERT(species == SPECIES_SHELLOS || species == SPECIES_GASTRODON);
- if (!FUN_020245F0(pokedex, (u16)species))
+ if (!Pokedex_CheckMonSeenFlag(pokedex, (u16)species))
return 0;
- u8 *flags = species == SPECIES_SHELLOS ? &pokedex->field_0108[0] : &pokedex->field_0108[1];
+ u8 *flags = species == SPECIES_SHELLOS ? &pokedex->shellosGastrodon[0] : &pokedex->shellosGastrodon[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)
+BOOL Pokedex_HasSeenShellosOrGastrodonForme(struct Pokedex * pokedex, u32 species, u8 state)
{
GF_ASSERT(species == SPECIES_SHELLOS || species == SPECIES_GASTRODON);
- if (!FUN_020245F0(pokedex, (u16)species))
+ if (!Pokedex_CheckMonSeenFlag(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);
+ u8 *flags = species == SPECIES_SHELLOS ? &pokedex->shellosGastrodon[0] : &pokedex->shellosGastrodon[1];
+ u32 r0 = (u32)Pokedex_CountSeenShellosOrGastrodon_Internal(pokedex, species);
for (int i = 0; i < r0; i++)
{
BOOL r2 = CheckDexFlag(flags, (u16)(i + 1));
@@ -85,13 +85,13 @@ BOOL FUN_02023DEC(struct Pokedex * pokedex, u32 species, u8 state)
return FALSE;
}
-void FUN_02023E70(struct Pokedex * pokedex, u32 species, u32 state)
+void Pokedex_SetSeenShellosOrGastrodonForme(struct Pokedex * pokedex, u32 species, u32 state)
{
GF_ASSERT(species == SPECIES_SHELLOS || species == SPECIES_GASTRODON);
- if (FUN_02023DEC(pokedex, species, (u8)state))
+ if (Pokedex_HasSeenShellosOrGastrodonForme(pokedex, species, (u8)state))
return;
- u8 *flags = species == SPECIES_SHELLOS ? &pokedex->field_0108[0] : &pokedex->field_0108[1];
- s32 r5 = FUN_02023D8C(pokedex, species);
+ u8 *flags = species == SPECIES_SHELLOS ? &pokedex->shellosGastrodon[0] : &pokedex->shellosGastrodon[1];
+ s32 r5 = Pokedex_CountSeenShellosOrGastrodon_Internal(pokedex, species);
if (r5 < 2)
{
UpdateDexFlag(flags, (u16)(r5 + 1), (u8)state);
@@ -102,12 +102,12 @@ void FUN_02023E70(struct Pokedex * pokedex, u32 species, u32 state)
}
}
-s32 FUN_02023F2C(struct Pokedex * pokedex, u32 species)
+s32 Pokedex_CountSeenBurmyOrWormadam_Internal(struct Pokedex * pokedex, u32 species)
{
GF_ASSERT(species == SPECIES_BURMY || species == SPECIES_WORMADAM);
- if (!FUN_020245F0(pokedex, (u16)species))
+ if (!Pokedex_CheckMonSeenFlag(pokedex, (u16)species))
return 0;
- u8 *flags = species == SPECIES_BURMY ? &pokedex->field_010A[0] : &pokedex->field_010A[1];
+ u8 *flags = species == SPECIES_BURMY ? &pokedex->burmyWormadam[0] : &pokedex->burmyWormadam[1];
s32 i;
for (i = 0; i < 3; i++)
{
@@ -118,12 +118,12 @@ s32 FUN_02023F2C(struct Pokedex * pokedex, u32 species)
return i;
}
-BOOL FUN_02023F88(struct Pokedex * pokedex, u32 species, u8 state)
+BOOL Pokedex_HasSeenBurmyOrWormadamForme(struct Pokedex * pokedex, u32 species, u8 state)
{
GF_ASSERT(species == SPECIES_BURMY || species == SPECIES_WORMADAM);
- if (!FUN_020245F0(pokedex, (u16)species))
+ if (!Pokedex_CheckMonSeenFlag(pokedex, (u16)species))
return FALSE;
- u8 *flags = species == SPECIES_BURMY ? &pokedex->field_010A[0] : &pokedex->field_010A[1];
+ u8 *flags = species == SPECIES_BURMY ? &pokedex->burmyWormadam[0] : &pokedex->burmyWormadam[1];
s32 i;
for (i = 0; i < 3; i++)
{
@@ -134,13 +134,13 @@ BOOL FUN_02023F88(struct Pokedex * pokedex, u32 species, u8 state)
return FALSE;
}
-void FUN_02023FEC(struct Pokedex * pokedex, u32 species, s32 state)
+void Pokedex_SetSeenBurmyOrWormadamForme(struct Pokedex * pokedex, u32 species, s32 state)
{
GF_ASSERT(species == SPECIES_BURMY || species == SPECIES_WORMADAM);
- if (FUN_02023F88(pokedex, species, (u8)state))
+ if (Pokedex_HasSeenBurmyOrWormadamForme(pokedex, species, (u8)state))
return;
- u8 *flags = species == SPECIES_BURMY ? &pokedex->field_010A[0] : &pokedex->field_010A[1];
- s32 r5 = FUN_02023F2C(pokedex, species);
+ u8 *flags = species == SPECIES_BURMY ? &pokedex->burmyWormadam[0] : &pokedex->burmyWormadam[1];
+ s32 r5 = Pokedex_CountSeenBurmyOrWormadam_Internal(pokedex, species);
if (r5 >= 3)
return;
UpdateDexFlagPair(flags, (u16)r5, (u8)state);
@@ -152,75 +152,75 @@ static inline void SetDeoxysFormeFlag(struct Pokedex * pokedex, u8 r4, u8 r6)
GF_ASSERT(r4 <= 15);
if (r6 < 2)
{
- pokedex->field_0040 &= ~(15 << (24 + 4 * r6));
- pokedex->field_0040 |= r4 << (24 + 4 * r6);
+ pokedex->caughtFlagsHi_Deoxys1 &= ~(15 << (24 + 4 * r6));
+ pokedex->caughtFlagsHi_Deoxys1 |= r4 << (24 + 4 * r6);
}
else
{
r6 -= 2;
- pokedex->field_0080 &= ~(15 << (24 + 4 * r6));
- pokedex->field_0080 |= r4 << (24 + 4 * r6);
+ pokedex->seenFlagsHi_Deoxys2 &= ~(15 << (24 + 4 * r6));
+ pokedex->seenFlagsHi_Deoxys2 |= r4 << (24 + 4 * r6);
}
}
-void FUN_02024068(struct Pokedex * pokedex, u8 r4, u8 r6)
+void Pokedex_SetSeenDeoxysFormeAt(struct Pokedex * pokedex, u8 r4, u8 r6)
{
SetDeoxysFormeFlag(pokedex, r4, r6);
}
-static inline u32 GetDeoxysFormeFlag(struct Pokedex * pokedex, u8 r6)
+static inline u32 GetDeoxysFormeFlag_Internal(struct Pokedex * pokedex, u8 r6)
{
if (r6 < 2)
{
- return (pokedex->field_0040 >> (24 + 4 * r6)) & 15;
+ return (pokedex->caughtFlagsHi_Deoxys1 >> (24 + 4 * r6)) & 15;
}
else
{
r6 -= 2;
- return (pokedex->field_0080 >> (24 + 4 * r6)) & 15;
+ return (pokedex->seenFlagsHi_Deoxys2 >> (24 + 4 * r6)) & 15;
}
}
-s32 FUN_020240D0(struct Pokedex * pokedex)
+s32 Pokedex_CountSeenDeoxysFormes_Internal(struct Pokedex * pokedex)
{
s32 i;
for (i = 0; i < 4; i++)
{
- u32 r2 = GetDeoxysFormeFlag(pokedex, (u8)i);
+ u32 r2 = GetDeoxysFormeFlag_Internal(pokedex, (u8)i);
if (r2 == 15)
break;
}
return i;
}
-BOOL FUN_02024114(struct Pokedex * pokedex, u32 state)
+BOOL Pokedex_HasSeenDeoxysForme(struct Pokedex * pokedex, u32 state)
{
s32 i;
for (i = 0; i < 4; i++)
{
- u32 r4 = GetDeoxysFormeFlag(pokedex, (u8)i);
+ u32 r4 = GetDeoxysFormeFlag_Internal(pokedex, (u8)i);
if (state == r4)
return TRUE;
}
return FALSE;
}
-void FUN_0202415C(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon)
+void Pokedex_TrySetSeenDeoxysForme(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))
+ if (species == SPECIES_DEOXYS && !Pokedex_HasSeenDeoxysForme(pokedex, forme))
{
- s32 r2 = FUN_020240D0(pokedex);
- FUN_02024068(pokedex, forme, (u8)r2);
+ s32 r2 = Pokedex_CountSeenDeoxysFormes_Internal(pokedex);
+ Pokedex_SetSeenDeoxysFormeAt(pokedex, forme, (u8)r2);
}
}
-void FUN_0202419C(struct Pokedex * pokedex)
+void Pokedex_InitSeenDeoxysFormesArray(struct Pokedex * pokedex)
{
s32 i;
for (i = 0; i < 4; i++)
{
- FUN_02024068(pokedex, 15, (u8)i);
+ Pokedex_SetSeenDeoxysFormeAt(pokedex, 15, (u8)i);
}
}
@@ -259,10 +259,10 @@ static inline void SetSeenUnownLetter(struct Pokedex * pokedex, u32 species, s32
idx = FindFirstAvailableUnownLetterSlot(pokedex);
if (idx >= 28)
return;
- pokedex->field_010C[idx] = (u8)letter;
+ pokedex->seenUnown[idx] = (u8)letter;
}
-void FUN_020241B8(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon)
+void Pokedex_SetMonSeenForme(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon)
{
if (species == SPECIES_UNOWN)
{
@@ -270,33 +270,33 @@ void FUN_020241B8(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemo
}
else if (species == SPECIES_BURMY)
{
- FUN_02023FEC(pokedex, species, (s32)GetMonData(pokemon, MON_DATA_FORME, NULL));
+ Pokedex_SetSeenBurmyOrWormadamForme(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));
+ Pokedex_SetSeenBurmyOrWormadamForme(pokedex, species, (s32)GetMonData(pokemon, MON_DATA_FORME, NULL));
}
else if (species == SPECIES_SHELLOS)
{
- FUN_02023E70(pokedex, species, GetMonData(pokemon, MON_DATA_FORME, NULL));
+ Pokedex_SetSeenShellosOrGastrodonForme(pokedex, species, GetMonData(pokemon, MON_DATA_FORME, NULL));
}
else if (species == SPECIES_GASTRODON)
{
- FUN_02023E70(pokedex, species, GetMonData(pokemon, MON_DATA_FORME, NULL));
+ Pokedex_SetSeenShellosOrGastrodonForme(pokedex, species, GetMonData(pokemon, MON_DATA_FORME, NULL));
}
else if (species == SPECIES_DEOXYS)
{
- FUN_0202415C(pokedex, species, pokemon);
+ Pokedex_TrySetSeenDeoxysForme(pokedex, species, pokemon);
}
}
-void FUN_02024294(struct Pokedex * pokedex, u32 species, u32 language)
+void Pokedex_SetMeisterFlagBySpeciesAndLanguage(struct Pokedex * pokedex, u32 species, u32 language)
{
- s32 r4 = FUN_02087A50(species);
- s32 r0 = FUN_02087A1C(language);
+ s32 r4 = GetMeisterSpeciesIdx(species);
+ s32 r0 = GetMeisterLanguageIdx(language);
if (r4 != 14 && r0 != 6)
{
- pokedex->field_0129[r4] |= (1 << r0);
+ pokedex->meister[r4] |= (1 << r0);
}
}
@@ -320,9 +320,11 @@ s32 FUN_020242C8(struct Pokedex * pokedex, u16 species, s32 r4)
return r1;
}
-const u16 UNK_020EE940 = SPECIES_MANAPHY;
+const u16 sSinnohDexMythicalMons[] = {
+ SPECIES_MANAPHY
+};
-const u16 UNK_020EE942[] = {
+const u16 sNationalDexMythicalMons[] = {
SPECIES_MEW,
SPECIES_LUGIA,
SPECIES_HO_OH,
@@ -336,22 +338,22 @@ const u16 UNK_020EE942[] = {
SPECIES_ARCEUS
};
-BOOL FUN_02024340(u16 species)
+BOOL Pokedex_SpeciesIsNotMythical(u16 species)
{
s32 i;
BOOL ret = TRUE;
- for (i = 0; i < (s32)NELEMS(UNK_020EE942); i++)
+ for (i = 0; i < (s32)NELEMS(sNationalDexMythicalMons); i++)
{
- if (species == UNK_020EE942[i])
+ if (species == sNationalDexMythicalMons[i])
ret = FALSE;
}
return ret;
}
-BOOL FUN_02024364(u16 a0)
+BOOL Pokedex_SpeciesIsNotSinnohMythical(u16 species)
{
BOOL ret = TRUE;
- if (a0 == SPECIES_MANAPHY)
+ if (species == SPECIES_MANAPHY)
ret = FALSE;
return ret;
}
@@ -360,104 +362,104 @@ 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);
+ pokedex->unlockedNationalDex = 0;
+ memset(pokedex->seenUnown, 0xFF, 28);
+ pokedex->shellosGastrodon[0] = 0xFF;
+ pokedex->shellosGastrodon[1] = 0xFF;
+ pokedex->burmyWormadam[0] = 0xFF;
+ pokedex->burmyWormadam[1] = 0xFF;
+ Pokedex_InitSeenDeoxysFormesArray(pokedex);
}
-u16 FUN_020243C8(struct Pokedex * pokedex)
+u16 Pokedex_CountNationalDexCaughtMons(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)
+ if (Pokedex_CheckMonCaughtFlag(pokedex, (u16)i) == TRUE)
count++;
}
return (u16)count;
}
-u16 FUN_02024404(struct Pokedex * pokedex)
+u16 Pokedex_CountNationalDexSeenMons(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)
+ if (Pokedex_CheckMonSeenFlag(pokedex, (u16)i) == TRUE)
count++;
}
return (u16)count;
}
-u16 FUN_02024440(struct Pokedex * pokedex)
+u16 Pokedex_CountSeenMons(struct Pokedex * pokedex)
{
if (Pokedex_GetNatDexFlag(pokedex))
- return FUN_02024404(pokedex);
+ return Pokedex_CountNationalDexSeenMons(pokedex);
else
- return FUN_020244A4(pokedex);
+ return Pokedex_CountSinnohDexSeenMons(pokedex);
}
-u16 FUN_0202445C(struct Pokedex * pokedex)
+u16 Pokedex_CountSinnohDexCaughtMons(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)
+ if (Pokedex_CheckMonCaughtFlag(pokedex, (u16)i) == TRUE && SpeciesToSinnohDexNo((u16)i) != 0)
count++;
}
return (u16)count;
}
-u16 FUN_020244A4(struct Pokedex * pokedex)
+u16 Pokedex_CountSinnohDexSeenMons(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)
+ if (Pokedex_CheckMonSeenFlag(pokedex, (u16)i) == TRUE && SpeciesToSinnohDexNo((u16)i) != 0)
count++;
}
return (u16)count;
}
-BOOL FUN_020244EC(struct Pokedex * pokedex)
+BOOL Pokedex_HasCompletedNationalDex(struct Pokedex * pokedex)
{
- return FUN_02024518(pokedex) >= 482;
+ return Pokedex_CountNationalDexCaughtMons_OmitMythicals(pokedex) >= 482;
}
-BOOL FUN_02024504(struct Pokedex * pokedex)
+BOOL Pokedex_HasCompletedSinnohDex(struct Pokedex * pokedex)
{
- return FUN_02024550(pokedex) >= 150;
+ return Pokedex_CountSinnohDexSeenMons_OmitMythicals(pokedex) >= 150;
}
-u16 FUN_02024518(struct Pokedex * pokedex)
+u16 Pokedex_CountNationalDexCaughtMons_OmitMythicals(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)
+ if (Pokedex_CheckMonCaughtFlag(pokedex, (u16)i) == TRUE && Pokedex_SpeciesIsNotMythical((u16)i) == TRUE)
count++;
}
return count;
}
-u16 FUN_02024550(struct Pokedex * pokedex)
+u16 Pokedex_CountSinnohDexSeenMons_OmitMythicals(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)
+ if (Pokedex_CheckMonSeenFlag(pokedex, (u16)i) == TRUE && SpeciesToSinnohDexNo((u16)i) != 0 && Pokedex_SpeciesIsNotSinnohMythical((u16)i) == TRUE)
count++;
}
return count;
@@ -473,30 +475,30 @@ static inline BOOL DexSpeciesIsInvalid(u16 species)
return FALSE;
}
-BOOL FUN_02024594(struct Pokedex * pokedex, u16 species)
+BOOL Pokedex_CheckMonCaughtFlag(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))
+ if (!CheckDexFlag(pokedex->caughtFlags, species) || !CheckDexFlag(pokedex->seenFlags, species))
return FALSE;
return TRUE;
}
-BOOL FUN_020245F0(struct Pokedex * pokedex, u16 species)
+BOOL Pokedex_CheckMonSeenFlag(struct Pokedex * pokedex, u16 species)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
if (DexSpeciesIsInvalid(species))
return FALSE;
- return CheckDexFlag(pokedex->field_0044, species);
+ return CheckDexFlag(pokedex->seenFlags, species);
}
-u32 FUN_02024648(struct Pokedex * pokedex, u32 a1)
+u32 Pokedex_GetSeenSpindaPersonality(struct Pokedex * pokedex, u32 a1)
{
u32 r6;
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
if (a1 == 0)
- r6 = (u32)pokedex->field_0104;
+ r6 = (u32)pokedex->spindaPersonality;
else
GF_ASSERT(0); // r6 is not initialized because execution should halt here
return r6;
@@ -507,7 +509,7 @@ 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))
+ if (CheckDexFlag(pokedex->seenFlags, species))
return FUN_020242C8(pokedex, species, r6);
else
return -1;
@@ -518,98 +520,98 @@ static inline s32 FindFirstAvailableUnownLetterSlot_2(struct Pokedex * pokedex)
s32 i;
for (i = 0; i < 28; i++)
{
- if (pokedex->field_010C[i] == 0xFF)
+ if (pokedex->seenUnown[i] == 0xFF)
break;
}
return i;
}
-s32 FUN_020246DC(struct Pokedex * pokedex, s32 a1)
+s32 Pokedex_GetSeenUnownI(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];
+ return pokedex->seenUnown[a1];
}
-s32 FUN_0202471C(struct Pokedex * pokedex)
+s32 Pokedex_CountSeenUnown(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
return FindFirstAvailableUnownLetterSlot_2(pokedex);
}
-BOOL FUN_02024748(struct Pokedex * pokedex, s32 a1)
+BOOL Pokedex_GetSeenShellosForme(struct Pokedex * pokedex, s32 a1)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- if (FUN_02023D8C(pokedex, SPECIES_SHELLOS) <= a1)
+ if (Pokedex_CountSeenShellosOrGastrodon_Internal(pokedex, SPECIES_SHELLOS) <= a1)
return -1;
GF_ASSERT(a1 < 2);
- return CheckDexFlag(&pokedex->field_0108[0], (u16)(a1 + 1));
+ return CheckDexFlag(&pokedex->shellosGastrodon[0], (u16)(a1 + 1));
}
-s32 FUN_020247A4(struct Pokedex * pokedex)
+s32 Pokedex_CountSeenShellos(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return FUN_02023D8C(pokedex, SPECIES_SHELLOS);
+ return Pokedex_CountSeenShellosOrGastrodon_Internal(pokedex, SPECIES_SHELLOS);
}
-BOOL FUN_020247C8(struct Pokedex * pokedex, s32 a1)
+BOOL Pokedex_GetSeenGastrodonForme(struct Pokedex * pokedex, s32 a1)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- if (FUN_02023D8C(pokedex, SPECIES_GASTRODON) <= a1)
+ if (Pokedex_CountSeenShellosOrGastrodon_Internal(pokedex, SPECIES_GASTRODON) <= a1)
return -1;
GF_ASSERT(a1 < 2);
- return CheckDexFlag(&pokedex->field_0108[1], (u16)(a1 + 1));
+ return CheckDexFlag(&pokedex->shellosGastrodon[1], (u16)(a1 + 1));
}
-s32 FUN_02024828(struct Pokedex * pokedex)
+s32 Pokedex_CountSeenGastrodon(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return FUN_02023D8C(pokedex, SPECIES_GASTRODON);
+ return Pokedex_CountSeenShellosOrGastrodon_Internal(pokedex, SPECIES_GASTRODON);
}
-s32 FUN_0202484C(struct Pokedex * pokedex, s32 a1)
+s32 Pokedex_GetSeenBurmyForme(struct Pokedex * pokedex, s32 a1)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- if (FUN_02023F2C(pokedex, SPECIES_BURMY) <= a1)
+ if (Pokedex_CountSeenBurmyOrWormadam_Internal(pokedex, SPECIES_BURMY) <= a1)
return -1;
GF_ASSERT(a1 < 3);
- return CheckDexFlagPair(&pokedex->field_010A[0], (u16)a1);
+ return CheckDexFlagPair(&pokedex->burmyWormadam[0], (u16)a1);
}
-s32 FUN_0202489C(struct Pokedex * pokedex)
+s32 Pokedex_CountSeenBurmy(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return FUN_02023F2C(pokedex, SPECIES_BURMY);
+ return Pokedex_CountSeenBurmyOrWormadam_Internal(pokedex, SPECIES_BURMY);
}
-s32 FUN_020248BC(struct Pokedex * pokedex, s32 a1)
+s32 Pokedex_GetSeenWormadamForme(struct Pokedex * pokedex, s32 a1)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- if (FUN_02023F2C(pokedex, SPECIES_WORMADAM) <= a1)
+ if (Pokedex_CountSeenBurmyOrWormadam_Internal(pokedex, SPECIES_WORMADAM) <= a1)
return -1;
GF_ASSERT(a1 < 3);
- return CheckDexFlagPair(&pokedex->field_010A[1], (u16)a1);
+ return CheckDexFlagPair(&pokedex->burmyWormadam[1], (u16)a1);
}
-s32 FUN_0202490C(struct Pokedex * pokedex)
+s32 Pokedex_CountSeenWormadam(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return FUN_02023F2C(pokedex, SPECIES_WORMADAM);
+ return Pokedex_CountSeenBurmyOrWormadam_Internal(pokedex, SPECIES_WORMADAM);
}
-s32 FUN_02024930(struct Pokedex * pokedex, s32 a1)
+s32 Pokedex_GetSeenDeoxysForme(struct Pokedex * pokedex, s32 a1)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return (s32)GetDeoxysFormeFlag(pokedex, (u8)a1);
+ return (s32)GetDeoxysFormeFlag_Internal(pokedex, (u8)a1);
}
-s32 FUN_02024970(struct Pokedex * pokedex)
+s32 Pokedex_CountSeenDeoxys(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return FUN_020240D0(pokedex);
+ return Pokedex_CountSeenDeoxysFormes_Internal(pokedex);
}
static inline void SetSeenCaughtGender(struct Pokedex * pokedex, u16 species, u8 gender)
@@ -629,7 +631,7 @@ static inline void SetSeenGender(struct Pokedex * pokedex, u16 species, u8 gende
UpdateDexFlag(pokedex->field_00C4, species, gender);
}
-void FUN_0202498C(struct Pokedex * pokedex, struct Pokemon * pokemon)
+void Pokedex_SetMonSeenFlag(struct Pokedex * pokedex, struct Pokemon * pokemon)
{
u16 species = (u16)GetMonData(pokemon, MON_DATA_SPECIES, NULL);
u32 personality = GetMonData(pokemon, MON_DATA_PERSONALITY, NULL);
@@ -637,10 +639,10 @@ void FUN_0202498C(struct Pokedex * pokedex, struct Pokemon * pokemon)
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
if (DexSpeciesIsInvalid(species))
return;
- if (!CheckDexFlag(pokedex->field_0044, species))
+ if (!CheckDexFlag(pokedex->seenFlags, species))
{
if (species == SPECIES_SPINDA)
- pokedex->field_0104 = personality;
+ pokedex->spindaPersonality = personality;
SetSeenCaughtGender(pokedex, species, (u8)gender);
}
else
@@ -651,11 +653,11 @@ void FUN_0202498C(struct Pokedex * pokedex, struct Pokemon * pokemon)
SetSeenGender(pokedex, species, (u8)gender);
}
}
- FUN_020241B8(pokedex, species, pokemon);
- SetDexFlag(pokedex->field_0044, species);
+ Pokedex_SetMonSeenForme(pokedex, species, pokemon);
+ SetDexFlag(pokedex->seenFlags, species);
}
-void FUN_02024AF0(struct Pokedex * pokedex, struct Pokemon * pokemon)
+void Pokedex_SetMonCaughtFlag(struct Pokedex * pokedex, struct Pokemon * pokemon)
{
u32 language; // sp08
u32 personality; // sp04
@@ -669,10 +671,10 @@ void FUN_02024AF0(struct Pokedex * pokedex, struct Pokemon * pokemon)
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
if (DexSpeciesIsInvalid(species))
return;
- if (!CheckDexFlag(pokedex->field_0044, species))
+ if (!CheckDexFlag(pokedex->seenFlags, species))
{
if (species == SPECIES_SPINDA)
- pokedex->field_0104 = personality;
+ pokedex->spindaPersonality = personality;
SetSeenCaughtGender(pokedex, species, (u8)gender);
}
else
@@ -683,22 +685,22 @@ void FUN_02024AF0(struct Pokedex * pokedex, struct Pokemon * pokemon)
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);
+ Pokedex_SetMonSeenForme(pokedex, species, pokemon);
+ Pokedex_SetMeisterFlagBySpeciesAndLanguage(pokedex, species, language);
+ SetDexFlag(pokedex->caughtFlags, species);
+ SetDexFlag(pokedex->seenFlags, species);
}
void Pokedex_SetNatDexFlag(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- pokedex->field_0139 = 1;
+ pokedex->unlockedNationalDex = 1;
}
BOOL Pokedex_GetNatDexFlag(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return pokedex->field_0139;
+ return pokedex->unlockedNationalDex;
}
BOOL FUN_02024CC4(struct Pokedex * pokedex)
@@ -713,15 +715,15 @@ void FUN_02024CE0(struct Pokedex * pokedex)
pokedex->field_0128 = 1;
}
-s32 FUN_02024D00(struct Pokedex * pokedex, u32 species, u32 language)
+s32 Pokedex_GetMeisterFlagBySpeciesAndLanguage(struct Pokedex * pokedex, u32 species, u32 language)
{
GF_ASSERT(language < 8);
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- s32 r5 = FUN_02087A50(species);
+ s32 r5 = GetMeisterSpeciesIdx(species);
if (r5 == 14)
return 0;
- s32 r0 = FUN_02087A1C(language);
- return pokedex->field_0129[r5] & (1 << r0);
+ s32 r0 = GetMeisterLanguageIdx(language);
+ return pokedex->meister[r5] & (1 << r0);
}
void FUN_02024D4C(struct Pokedex * pokedex)
@@ -734,50 +736,50 @@ BOOL FUN_02024D58(struct Pokedex * pokedex)
return pokedex->field_0137;
}
-BOOL FUN_02024D64(struct Pokedex * pokedex)
+BOOL Pokedex_GetSinnohDexFlag(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- return pokedex->field_0138;
+ return pokedex->unlockedSinnohDex;
}
-void FUN_02024D80(struct Pokedex * pokedex)
+void Pokedex_SetSinnohDexFlag(struct Pokedex * pokedex)
{
GF_ASSERT(pokedex->magic == 0xBEEFCAFE);
- pokedex->field_0138 = 1;
+ pokedex->unlockedSinnohDex = 1;
}
-struct Pokedex * FUN_02024DA0(struct SaveBlock2 * sav2)
+struct Pokedex * Sav2_Pokedex_get(struct SaveBlock2 * sav2)
{
return (struct Pokedex *)SavArray_get(sav2, 7);
}
-s32 FUN_02024DAC(struct Pokedex * pokedex, s32 a1, u32 a2)
+s32 Pokedex_GetSeenMonForme(struct Pokedex * pokedex, s32 species, u32 forme)
{
- switch (a1)
+ switch (species)
{
case SPECIES_UNOWN:
- if (a2 < FUN_0202471C(pokedex))
- return FUN_020246DC(pokedex, (s32)a2);
+ if (forme < Pokedex_CountSeenUnown(pokedex))
+ return Pokedex_GetSeenUnownI(pokedex, (s32)forme);
break;
case SPECIES_SHELLOS:
- if (a2 < FUN_020247A4(pokedex))
- return FUN_02024748(pokedex, (s32)a2);
+ if (forme < Pokedex_CountSeenShellos(pokedex))
+ return Pokedex_GetSeenShellosForme(pokedex, (s32)forme);
break;
case SPECIES_GASTRODON:
- if (a2 < FUN_02024828(pokedex))
- return FUN_020247C8(pokedex, (s32)a2);
+ if (forme < Pokedex_CountSeenGastrodon(pokedex))
+ return Pokedex_GetSeenGastrodonForme(pokedex, (s32)forme);
break;
case SPECIES_BURMY:
- if (a2 < FUN_0202489C(pokedex))
- return FUN_0202484C(pokedex, (s32)a2);
+ if (forme < Pokedex_CountSeenBurmy(pokedex))
+ return Pokedex_GetSeenBurmyForme(pokedex, (s32)forme);
break;
case SPECIES_WORMADAM:
- if (a2 < FUN_0202490C(pokedex))
- return FUN_020248BC(pokedex, (s32)a2);
+ if (forme < Pokedex_CountSeenWormadam(pokedex))
+ return Pokedex_GetSeenWormadamForme(pokedex, (s32)forme);
break;
case SPECIES_DEOXYS:
- if (a2 < FUN_02024970(pokedex))
- return FUN_02024930(pokedex, (s32)a2);
+ if (forme < Pokedex_CountSeenDeoxys(pokedex))
+ return Pokedex_GetSeenDeoxysForme(pokedex, (s32)forme);
break;
}
return 0;
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index 0fb6d121..1f48d0fc 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -19,6 +19,8 @@
#pragma thumb on
+extern void FUN_02029C74(const u8 *, u8 *);
+
u32 GetMonDataInternal(struct Pokemon * pokemon, int attr, void * ptr);
u32 GetBoxMonDataInternal(struct BoxPokemon * pokemon, int attr, void * ptr);
void SetMonDataInternal(struct Pokemon * pokemon, int attr, void * ptr);
@@ -255,7 +257,7 @@ BOOL ReleaseBoxMonLock(struct BoxPokemon * mon, BOOL decrypt_result)
void CreateMon(struct Pokemon * pokemon, int species, int level, int fixedIV, int hasFixedPersonality, int fixedPersonality, int otIdType, int fixedOtId)
{
- struct SealStruct * seal;
+ struct Mail * mail;
u32 capsule;
u8 seal_coords[0x18];
ZeroMonData(pokemon);
@@ -264,9 +266,9 @@ void CreateMon(struct Pokemon * pokemon, int species, int level, int fixedIV, in
MonEncryptSegment((u16 *)&pokemon->party, sizeof(pokemon->party), 0);
ENCRYPT_PTY(pokemon);
SetMonData(pokemon, MON_DATA_LEVEL, &level);
- seal = CreateNewSealsObject(0);
- SetMonData(pokemon, MON_DATA_SEAL_STRUCT, seal);
- FreeToHeap(seal);
+ mail = Mail_new(0);
+ SetMonData(pokemon, MON_DATA_MAIL_STRUCT, mail);
+ FreeToHeap(mail);
capsule = 0;
SetMonData(pokemon, MON_DATA_CAPSULE, &capsule);
MIi_CpuClearFast(0, seal_coords, sizeof(seal_coords));
@@ -558,8 +560,8 @@ u32 GetMonDataInternal(struct Pokemon * pokemon, int attr, void * dest)
return pokemon->party.spatk;
case MON_DATA_SPDEF:
return pokemon->party.spdef;
- case MON_DATA_SEAL_STRUCT:
- CopySealsObject(&pokemon->party.seal_something, dest);
+ case MON_DATA_MAIL_STRUCT:
+ Mail_copy(&pokemon->party.seal_something, dest);
return 1;
case MON_DATA_SEAL_COORDS:
FUN_02029C74(pokemon->party.sealCoords, dest);
@@ -1046,8 +1048,8 @@ void SetMonDataInternal(struct Pokemon * pokemon, int attr, void * value)
case MON_DATA_SPDEF:
pokemon->party.spdef = VALUE(u16);
break;
- case MON_DATA_SEAL_STRUCT:
- CopySealsObject((const struct SealStruct *)value, &pokemon->party.seal_something);
+ case MON_DATA_MAIL_STRUCT:
+ Mail_copy((const struct Mail *)value, &pokemon->party.seal_something);
break;
case MON_DATA_SEAL_COORDS:
FUN_02029C74((const u8 *)value, pokemon->party.sealCoords);
@@ -1475,7 +1477,7 @@ void AddMonDataInternal(struct Pokemon * pokemon, int attr, int value)
case MON_DATA_SPEED:
case MON_DATA_SPATK:
case MON_DATA_SPDEF:
- case MON_DATA_SEAL_STRUCT:
+ case MON_DATA_MAIL_STRUCT:
// case MON_DATA_SEAL_COORDS:
GF_ASSERT(0);
break;
@@ -1756,7 +1758,7 @@ void AddBoxMonData(struct BoxPokemon * boxmon, int attr, int value)
case MON_DATA_SPEED:
case MON_DATA_SPATK:
case MON_DATA_SPDEF:
- case MON_DATA_SEAL_STRUCT:
+ case MON_DATA_MAIL_STRUCT:
case MON_DATA_SEAL_COORDS:
case MON_DATA_SPECIES_EXISTS:
case MON_DATA_SANITY_IS_EGG:
@@ -2990,16 +2992,16 @@ void FUN_02069A64(struct BoxPokemon * src, struct Pokemon * dest)
{
u32 sp0 = 0;
u8 sp4[12][2];
- struct SealStruct * seals;
+ struct Mail * mail;
dest->box = *src;
if (dest->box.box_lock)
dest->box.party_lock = TRUE;
SetMonData(dest, MON_DATA_STATUS, &sp0);
SetMonData(dest, MON_DATA_HP, &sp0);
SetMonData(dest, MON_DATA_MAXHP, &sp0);
- seals = CreateNewSealsObject(0);
- SetMonData(dest, MON_DATA_SEAL_STRUCT, seals);
- FreeToHeap(seals);
+ mail = Mail_new(0);
+ SetMonData(dest, MON_DATA_MAIL_STRUCT, mail);
+ FreeToHeap(mail);
SetMonData(dest, MON_DATA_CAPSULE, &sp0);
MIi_CpuClearFast(0, sp4, sizeof(sp4));
SetMonData(dest, MON_DATA_SEAL_COORDS, sp4);
diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c
index 4ba492b8..43e83403 100644
--- a/arm9/src/save_arrays.c
+++ b/arm9/src/save_arrays.c
@@ -20,7 +20,6 @@ extern u32 FUN_02034D80(void);
extern u32 FUN_02025954(void);
extern u32 FUN_02023AC8(void);
extern u32 FUN_02026FD8(void);
-extern u32 FUN_02025844(void);
extern u32 FUN_02028054(void);
extern u32 FUN_02028980(void);
extern u32 FUN_02029A84(void);
@@ -45,7 +44,6 @@ extern void FUN_02034D88(void *);
extern void FUN_0202597C(void *);
extern void FUN_02023AD8(void *);
extern void FUN_02026F60(void *);
-extern void FUN_0202584C(void *);
extern void FUN_0202805C(void *);
extern void FUN_02028994(void *);
extern void FUN_02029A8C(void *);
@@ -85,7 +83,7 @@ const struct SaveChunkHeader UNK_020EE700[] = {
{ 12, 0, (SAVSIZEFN)FUN_02025954, (SAVINITFN)FUN_0202597C },
{ 13, 0, (SAVSIZEFN)FUN_02023AC8, (SAVINITFN)FUN_02023AD8 },
{ 14, 0, (SAVSIZEFN)FUN_02026FD8, (SAVINITFN)FUN_02026F60 },
- { 15, 0, (SAVSIZEFN)FUN_02025844, (SAVINITFN)FUN_0202584C },
+ { 15, 0, (SAVSIZEFN)Sav2_Mailbox_sizeof, (SAVINITFN)Sav2_Mailbox_init },
{ 16, 0, (SAVSIZEFN)FUN_02028054, (SAVINITFN)FUN_0202805C },
{ 17, 0, (SAVSIZEFN)FUN_020286F8, (SAVINITFN)FUN_02028724 },
{ 18, 0, (SAVSIZEFN)FUN_02028980, (SAVINITFN)FUN_02028994 },
diff --git a/arm9/src/unk_02087A1C.c b/arm9/src/unk_02087A1C.c
new file mode 100644
index 00000000..f20707ad
--- /dev/null
+++ b/arm9/src/unk_02087A1C.c
@@ -0,0 +1,69 @@
+#include "global.h"
+#include "constants/species.h"
+#include "unk_02087A1C.h"
+
+#pragma thumb on
+
+struct MeisterRodata
+{
+ u16 species[14];
+ u8 languages[6];
+};
+
+static const struct MeisterRodata sMeister = {
+ {
+ SPECIES_EKANS,
+ SPECIES_PIKACHU,
+ SPECIES_PSYDUCK,
+ SPECIES_PONYTA,
+ SPECIES_STARYU,
+ SPECIES_MAGIKARP,
+ SPECIES_WOBBUFFET,
+ SPECIES_HERACROSS,
+ SPECIES_SNEASEL,
+ SPECIES_TEDDIURSA,
+ SPECIES_HOUNDOUR,
+ SPECIES_WINGULL,
+ SPECIES_SLAKOTH,
+ SPECIES_ROSELIA
+ },
+ {
+ LANGUAGE_JAPANESE,
+ LANGUAGE_ENGLISH,
+ LANGUAGE_FRENCH,
+ LANGUAGE_GERMAN,
+ LANGUAGE_ITALIAN,
+ LANGUAGE_SPANISH
+ }
+};
+
+s32 GetMeisterLanguageIdx(u32 language)
+{
+ s32 i;
+ const u8 * ptr = sMeister.languages;
+ for (i = 0; i < 6; i++, ptr++)
+ {
+ if (language == *ptr)
+ break;
+ }
+ return i;
+}
+
+u8 GetMeisterLanguage(s32 idx)
+{
+ GF_ASSERT(idx < 6);
+ const u8 * ptr = sMeister.languages;
+ return ptr[idx];
+}
+
+s32 GetMeisterSpeciesIdx(u32 species)
+{
+ s32 i;
+ const u16 * ptr = sMeister.species;
+ for (i = 0; i < 14; i++, ptr++)
+ {
+ if (species == *ptr)
+ break;
+ }
+ return i;
+}
diff --git a/include/config.h b/include/config.h
index 7b75cd06..c32220d0 100644
--- a/include/config.h
+++ b/include/config.h
@@ -16,6 +16,7 @@
#define LANGUAGE_GERMAN 5
#define LANGUAGE_SPANISH 7
#define LANGUAGE_KOREAN 8
+#define LANGUAGE_COUNT LANGUAGE_KOREAN
#ifdef DIAMOND
#define GAME_VERSION VERSION_DIAMOND
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 123b144b..2c9288f5 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -282,7 +282,7 @@
#define MON_DATA_SPEED 166
#define MON_DATA_SPATK 167
#define MON_DATA_SPDEF 168
-#define MON_DATA_SEAL_STRUCT 169
+#define MON_DATA_MAIL_STRUCT 169
#define MON_DATA_SEAL_COORDS 170
#define MON_DATA_SPECIES_EXISTS 171
#define MON_DATA_SANITY_IS_EGG 172
diff --git a/include/daycare.h b/include/daycare.h
index d1026f76..98cf0880 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -3,7 +3,7 @@
struct DayCareMail
{
- struct SealStruct seal;
+ struct Mail seal;
u16 ot_name[OT_NAME_LENGTH + 1];
u16 nickname[POKEMON_NAME_LENGTH + 1];
u8 padding_5E[2];
@@ -30,7 +30,7 @@ struct DayCareMon * Sav2_DayCare_GetMonX(struct DayCare * daycare, s32 i);
struct BoxPokemon * DayCareMon_GetBoxMon(struct DayCareMon * dcmon);
struct DayCareMail * DayCareMon_GetExtras(struct DayCareMon * dcmon);
u32 DayCareMon_GetSteps(struct DayCareMon * dcmon);
-struct SealStruct * DayCareMail_GetCapsule(struct DayCareMail * dcmail);
+struct Mail * DayCareMail_GetCapsule(struct DayCareMail * dcmail);
u32 Sav2_DayCare_GetEggPID(struct DayCare * daycare);
u8 Sav2_DayCare_GetEggCycleCounter(struct DayCare * daycare);
void DayCareMon_SetSteps(struct DayCareMon * dcmon, u32 steps);
diff --git a/include/global.h b/include/global.h
index 24e4388b..3b377e5e 100644
--- a/include/global.h
+++ b/include/global.h
@@ -15,7 +15,9 @@ extern void ErrorHandling(void);
#define GF_ASSERT(expr) do {if (!(expr)) ErrorHandling();} while (0)
-extern const int gGameLanguage;
+#ifndef IN_MAIN_C
+extern const u8 gGameLanguage;
extern const u8 gGameVersion;
+#endif //IN_MAIN_C
#endif //GUARD_GLOBAL_H
diff --git a/include/mail.h b/include/mail.h
new file mode 100644
index 00000000..47d8a777
--- /dev/null
+++ b/include/mail.h
@@ -0,0 +1,58 @@
+#ifndef POKEDIAMOND_SEALS_H
+#define POKEDIAMOND_SEALS_H
+
+#include "save_block_2.h"
+
+union MailMessage
+{
+ u16 raw;
+ struct {
+ u16 unk_0:12;
+ u16 unk_C:4;
+ } bits;
+};
+
+struct Mail
+{
+ u32 author_otId; // author otid
+ u8 author_gender; // author gender
+ u8 author_language; // language
+ u8 author_version; // version
+ u8 mail_type; // mail type
+ u16 author_name[OT_NAME_LENGTH + 1]; // author name
+ union MailMessage unk_18[3];
+ u8 padding_1E[2];
+ u16 unk_20[3][4];
+};
+
+struct Mail * Mail_new(u32 heap_id);
+
+void Mail_init(struct Mail * mail);
+BOOL Mail_TypeIsValid(struct Mail * mail);
+struct Mail * Mail_new(u32 heap_id);
+void Mail_copy(const struct Mail * src, struct Mail * dest);
+void Mail_SetNewMessageDetails(struct Mail * mail, u8 type, u8 monIdx, struct SaveBlock2 * sav2);
+u32 Mail_GetOTID(struct Mail * mail);
+u16 * Mail_GetAuthorNamePtr(struct Mail * mail);
+u8 Mail_GetAuthorGender(struct Mail * mail);
+u8 Mail_GetType(struct Mail * mail);
+void Mail_SetType(struct Mail * mail, u8 type);
+u8 Mail_GetLanguage(struct Mail * mail);
+u8 Mail_GetVersion(struct Mail * mail);
+u16 Mail_GetAttrFromUnk18Array(struct Mail * mail, u32 idx, u32 attr);
+u16 * Mail_GetUnk20Array(struct Mail * mail, u32 idx);
+void Mail_CopyToUnk20Array(struct Mail * mail, const u16 * src, u32 idx);
+struct Mail * Sav2_Mailbox_get(struct SaveBlock2 * sav2);
+u32 Sav2_Mailbox_sizeof(void);
+void Sav2_Mailbox_init(struct Mail * mail);
+s32 Mailbox_GetFirstEmptySlotIdx(struct Mail * mail, BOOL r1);
+void Mailbox_DeleteSlotI(struct Mail * mail, BOOL r1, s32 idx);
+void Mailbox_CopyMailToSlotI(struct Mail * mail, BOOL r1, s32 idx, const struct Mail * src);
+s32 Mailbox_CountMessages(struct Mail * mail, BOOL r1);
+struct Mail * Mailbox_AllocAndFetchMailI(struct Mail * mail, BOOL r1, s32 idx, u32 heap_id);
+void Mailbox_FetchMailIToBuffer(struct Mail * mail, BOOL r1, s32 idx, struct Mail * dest);
+s32 MailArray_GetFirstEmptySlotIdx(struct Mail * mail, s32 count);
+s32 MailArray_CountMessages(struct Mail * mail, s32 count);
+struct Mail * Mailbox_GetPtrToSlotI(struct Mail * mail, BOOL r1, s32 idx);
+
+#endif //POKEDIAMOND_SEALS_H
diff --git a/include/pokedex.h b/include/pokedex.h
index 61c051da..11058569 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -6,81 +6,81 @@
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
+ /* 0x0004 */ u8 caughtFlags[0x3C];
+ /* 0x0040 */ u32 caughtFlagsHi_Deoxys1; // Deoxys forme plus top 13 dex flags
+ /* 0x0044 */ u8 seenFlags[0x3C];
+ /* 0x0080 */ u32 seenFlagsHi_Deoxys2; // 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
+ /* 0x0104 */ u32 spindaPersonality; // spinda personality
+ /* 0x0108 */ u8 shellosGastrodon[2]; // Shellos/Gastrodon
+ /* 0x0108 */ u8 burmyWormadam[2]; // Burmy/Wormadam
+ /* 0x010C */ u8 seenUnown[28]; // Unown
/* 0x0128 */ u8 field_0128;
- /* 0x0129 */ u8 field_0129[14]; // Meister?
+ /* 0x0129 */ u8 meister[14]; // Meister?
/* 0x0137 */ u8 field_0137;
- /* 0x0138 */ u8 field_0138;
- /* 0x0139 */ u8 field_0139;
+ /* 0x0138 */ u8 unlockedSinnohDex;
+ /* 0x0139 */ u8 unlockedNationalDex;
/* 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 Pokedex_CountSeenShellosOrGastrodon_Internal(struct Pokedex * pokedex, u32 species);
+BOOL Pokedex_HasSeenShellosOrGastrodonForme(struct Pokedex * pokedex, u32 species, u8 state);
+void Pokedex_SetSeenShellosOrGastrodonForme(struct Pokedex * pokedex, u32 species, u32 state);
+s32 Pokedex_CountSeenBurmyOrWormadam_Internal(struct Pokedex * pokedex, u32 species);
+BOOL Pokedex_HasSeenBurmyOrWormadamForme(struct Pokedex * pokedex, u32 species, u8 state);
+void Pokedex_SetSeenBurmyOrWormadamForme(struct Pokedex * pokedex, u32 species, s32 state);
+void Pokedex_SetSeenDeoxysFormeAt(struct Pokedex * pokedex, u8 r4, u8 r6);
+s32 Pokedex_CountSeenDeoxysFormes_Internal(struct Pokedex * pokedex);
+BOOL Pokedex_HasSeenDeoxysForme(struct Pokedex * pokedex, u32 state);
+void Pokedex_TrySetSeenDeoxysForme(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon);
+void Pokedex_InitSeenDeoxysFormesArray(struct Pokedex * pokedex);
+void Pokedex_SetMonSeenForme(struct Pokedex * pokedex, u16 species, struct Pokemon * pokemon);
+void Pokedex_SetMeisterFlagBySpeciesAndLanguage(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);
+BOOL Pokedex_SpeciesIsNotMythical(u16 species);
+BOOL Pokedex_SpeciesIsNotSinnohMythical(u16 species);
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);
+u16 Pokedex_CountNationalDexCaughtMons(struct Pokedex * pokedex);
+u16 Pokedex_CountNationalDexSeenMons(struct Pokedex * pokedex);
+u16 Pokedex_CountSeenMons(struct Pokedex * pokedex);
+u16 Pokedex_CountSinnohDexCaughtMons(struct Pokedex * pokedex);
+u16 Pokedex_CountSinnohDexSeenMons(struct Pokedex * pokedex);
+BOOL Pokedex_HasCompletedNationalDex(struct Pokedex * pokedex);
+BOOL Pokedex_HasCompletedSinnohDex(struct Pokedex * pokedex);
+u16 Pokedex_CountNationalDexCaughtMons_OmitMythicals(struct Pokedex * pokedex);
+u16 Pokedex_CountSinnohDexSeenMons_OmitMythicals(struct Pokedex * pokedex);
+BOOL Pokedex_CheckMonCaughtFlag(struct Pokedex * pokedex, u16 species);
+BOOL Pokedex_CheckMonSeenFlag(struct Pokedex * pokedex, u16 species);
+u32 Pokedex_GetSeenSpindaPersonality(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);
+s32 Pokedex_GetSeenUnownI(struct Pokedex * pokedex, s32 a1);
+s32 Pokedex_CountSeenUnown(struct Pokedex * pokedex);
+BOOL Pokedex_GetSeenShellosForme(struct Pokedex * pokedex, s32 a1);
+s32 Pokedex_CountSeenShellos(struct Pokedex * pokedex);
+BOOL Pokedex_GetSeenGastrodonForme(struct Pokedex * pokedex, s32 a1);
+s32 Pokedex_CountSeenGastrodon(struct Pokedex * pokedex);
+s32 Pokedex_GetSeenBurmyForme(struct Pokedex * pokedex, s32 a1);
+s32 Pokedex_CountSeenBurmy(struct Pokedex * pokedex);
+s32 Pokedex_GetSeenWormadamForme(struct Pokedex * pokedex, s32 a1);
+s32 Pokedex_CountSeenWormadam(struct Pokedex * pokedex);
+s32 Pokedex_GetSeenDeoxysForme(struct Pokedex * pokedex, s32 a1);
+s32 Pokedex_CountSeenDeoxys(struct Pokedex * pokedex);
+void Pokedex_SetMonSeenFlag(struct Pokedex * pokedex, struct Pokemon * pokemon);
+void Pokedex_SetMonCaughtFlag(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);
+s32 Pokedex_GetMeisterFlagBySpeciesAndLanguage(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);
+BOOL Pokedex_GetSinnohDexFlag(struct Pokedex * pokedex);
+void Pokedex_SetSinnohDexFlag(struct Pokedex * pokedex);
+struct Pokedex * Sav2_Pokedex_get(struct SaveBlock2 * sav2);
+s32 Pokedex_GetSeenMonForme(struct Pokedex * pokedex, s32 a1, u32 a2);
#endif //POKEDIAMOND_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 196343de..097df9e0 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -6,7 +6,7 @@
// Enums
#include "constants/species.h"
-#include "seals.h"
+#include "mail.h"
#include "constants/pokemon.h"
#include "string16.h"
#include "player_data.h"
@@ -142,7 +142,7 @@ struct PartyPokemon
/* 0x096 */ u16 speed;
/* 0x098 */ u16 spatk;
/* 0x09A */ u16 spdef;
- /* 0x09C */ struct SealStruct seal_something; // a struct?
+ /* 0x09C */ struct Mail seal_something; // a struct?
/* 0x0D4 */ u8 sealCoords[0x18]; // u8 pairs?
};
diff --git a/include/seals.h b/include/seals.h
deleted file mode 100644
index 8fda23b9..00000000
--- a/include/seals.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef POKEDIAMOND_SEALS_H
-#define POKEDIAMOND_SEALS_H
-
-struct SealStruct
-{
- // TODO: define
- u8 filler_00[0x38];
-};
-
-struct SealStruct * CreateNewSealsObject(u32 heap_id);
-
-void CopySealsObject(const struct SealStruct *, struct SealStruct *);
-void FUN_02029C74(const u8 *, u8 *);
-
-#endif //POKEDIAMOND_SEALS_H
diff --git a/include/unk_02087A1C.h b/include/unk_02087A1C.h
index 28155209..f19b3c93 100644
--- a/include/unk_02087A1C.h
+++ b/include/unk_02087A1C.h
@@ -1,7 +1,8 @@
#ifndef POKEDIAMOND_UNK_02087A1C_H
#define POKEDIAMOND_UNK_02087A1C_H
-s32 FUN_02087A50(u32 species);
-s32 FUN_02087A1C(u32 language);
+s32 GetMeisterLanguageIdx(u32 language);
+u8 GetMeisterLanguage(s32 idx);
+s32 GetMeisterSpeciesIdx(u32 species);
#endif //POKEDIAMOND_UNK_02087A1C_H