summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/daycare.s201
-rw-r--r--arm9/asm/scrcmd_16.s8
-rw-r--r--arm9/global.inc36
-rw-r--r--arm9/modules/05/asm/mod05_021D80E8.s2
-rw-r--r--arm9/modules/05/asm/module_05.s112
-rw-r--r--arm9/modules/35/asm/module_35.s8
-rw-r--r--arm9/src/daycare.c114
-rw-r--r--arm9/src/save_arrays.c5
-rw-r--r--include/daycare.h46
9 files changed, 245 insertions, 287 deletions
diff --git a/arm9/asm/daycare.s b/arm9/asm/daycare.s
deleted file mode 100644
index 3de96399..00000000
--- a/arm9/asm/daycare.s
+++ /dev/null
@@ -1,201 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
- .include "constants/species.h"
-
- .text
-
- thumb_func_start Sav2_Daycare_sizeof
-Sav2_Daycare_sizeof: ; 0x02023C40
- mov r0, #0x1e
- lsl r0, r0, #0x4
- bx lr
- .balign 4
-
- thumb_func_start Sav2_Daycare_init
-Sav2_Daycare_init: ; 0x02023C48
- push {r4, lr}
- mov r2, #0x1e
- add r4, r0, #0x0
- mov r1, #0x0
- lsl r2, r2, #0x4
- bl memset
- add r0, r4, #0x0
- bl ZeroBoxMonData
- add r0, r4, #0x0
- add r0, #0xec
- bl ZeroBoxMonData
- mov r0, #0x76
- mov r1, #0x0
- lsl r0, r0, #0x2
- str r1, [r4, r0]
- add r0, r0, #0x4
- strb r1, [r4, r0]
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02023C74
-FUN_02023C74: ; 0x02023C74
- mov r2, #0xec
- mul r2, r1
- add r0, r0, r2
- bx lr
-
- thumb_func_start FUN_02023C7C
-FUN_02023C7C: ; 0x02023C7C
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023C80
-FUN_02023C80: ; 0x02023C80
- add r0, #0x88
- bx lr
-
- thumb_func_start FUN_02023C84
-FUN_02023C84: ; 0x02023C84
- add r0, #0xe8
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023C8C
-FUN_02023C8C: ; 0x02023C8C
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023C90
-FUN_02023C90: ; 0x02023C90
- mov r1, #0x76
- lsl r1, r1, #0x2
- ldr r0, [r0, r1]
- bx lr
-
- thumb_func_start FUN_02023C98
-FUN_02023C98: ; 0x02023C98
- mov r1, #0x77
- lsl r1, r1, #0x2
- ldrb r0, [r0, r1]
- bx lr
-
- thumb_func_start FUN_02023CA0
-FUN_02023CA0: ; 0x02023CA0
- add r0, #0xe8
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023CA8
-FUN_02023CA8: ; 0x02023CA8
- add r2, r0, #0x0
- add r2, #0xe8
- ldr r2, [r2, #0x0]
- add r0, #0xe8
- add r1, r2, r1
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02023CB8
-FUN_02023CB8: ; 0x02023CB8
- mov r2, #0x76
- lsl r2, r2, #0x2
- str r1, [r0, r2]
- bx lr
-
- thumb_func_start FUN_02023CC0
-FUN_02023CC0: ; 0x02023CC0
- mov r2, #0x77
- lsl r2, r2, #0x2
- strb r1, [r0, r2]
- bx lr
-
- thumb_func_start FUN_02023CC8
-FUN_02023CC8: ; 0x02023CC8
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r1, #0xc
- mov r2, #0x0
- bl GetBoxMonData
- add r5, #0xec
- add r4, r0, #0x0
- add r0, r5, #0x0
- mov r1, #0xc
- mov r2, #0x0
- bl GetBoxMonData
- cmp r4, r0
- beq _02023CEA
- mov r0, #0x1
- pop {r3-r5, pc}
-_02023CEA:
- mov r0, #0x0
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02023CF0
-FUN_02023CF0: ; 0x02023CF0
- push {r3-r4}
- add r4, r0, #0x0
- add r3, r1, #0x0
- mov r2, #0x1d
-_02023CF8:
- ldmia r3!, {r0-r1}
- stmia r4!, {r0-r1}
- sub r2, r2, #0x1
- bne _02023CF8
- ldr r0, [r3, #0x0]
- str r0, [r4, #0x0]
- pop {r3-r4}
- bx lr
-
- thumb_func_start FUN_02023D08
-FUN_02023D08: ; 0x02023D08
- push {r3-r4}
- mov r1, #0x0
- add r2, r0, #0x0
- add r4, r1, #0x0
-_02023D10:
- add r1, r1, #0x1
- strh r4, [r2, #0x38]
- add r2, r2, #0x2
- cmp r1, #0x8
- blt _02023D10
- add r3, r0, #0x0
- mov r2, #0x0
-_02023D1E:
- add r1, r3, #0x0
- add r1, #0x48
- add r4, r4, #0x1
- add r3, r3, #0x2
- strh r2, [r1, #0x0]
- cmp r4, #0xb
- blt _02023D1E
- ldr r1, _02023D38 ; =0x0000FFFF
- strh r1, [r0, #0x38]
- add r0, #0x48
- strh r1, [r0, #0x0]
- pop {r3-r4}
- bx lr
- .balign 4
-_02023D38: .word 0x0000FFFF
-
- thumb_func_start FUN_02023D3C
-FUN_02023D3C: ; 0x02023D3C
- push {r4, lr}
- add r4, r0, #0x0
- bl ZeroBoxMonData
- add r0, r4, #0x0
- mov r1, #0x0
- add r0, #0xe8
- add r4, #0x88
- str r1, [r0, #0x0]
- add r0, r4, #0x0
- bl FUN_02023D08
- pop {r4, pc}
- .balign 4
-
- thumb_func_start Sav2_Daycare_get
-Sav2_Daycare_get: ; 0x02023D58
- ldr r3, _02023D60 ; =SavArray_get
- mov r1, #0x8
- bx r3
- nop
-_02023D60: .word SavArray_get
diff --git a/arm9/asm/scrcmd_16.s b/arm9/asm/scrcmd_16.s
index 374d9ace..8afbf518 100644
--- a/arm9/asm/scrcmd_16.s
+++ b/arm9/asm/scrcmd_16.s
@@ -13,7 +13,7 @@ FUN_02043E00: ; 0x02043E00
bl FUN_02039438
add r4, r0, #0x0
add r0, r5, #0x0
- bl Sav2_Daycare_get
+ bl Sav2_DayCare_get
ldr r1, [r4, #0x0]
bl MOD05_021ED4E0
mov r0, #0x0
@@ -75,7 +75,7 @@ FUN_02043E68: ; 0x02043E68
add r2, r0, #0x0
add r0, r6, #0x0
add r1, r5, #0x0
- bl MOD05_021ED0CC
+ bl MOD05_DayCare_GiveEggToPlayer
mov r0, #0x0
pop {r4-r6, pc}
@@ -306,7 +306,7 @@ FUN_02044034: ; 0x02044034
bl VarGet
add r4, r0, #0x0
add r0, r5, #0x0
- bl Sav2_Daycare_get
+ bl Sav2_DayCare_get
lsl r1, r4, #0x18
lsr r1, r1, #0x18
str r1, [sp, #0x0]
@@ -365,7 +365,7 @@ FUN_020440F0: ; 0x020440F0
add r0, r4, #0x0
mov r1, #0x8
bl SavArray_get
- bl FUN_02023C90
+ bl Sav2_DayCare_GetEggPID
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
diff --git a/arm9/global.inc b/arm9/global.inc
index 4537bdc8..6a0bb058 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -1517,23 +1517,23 @@
.extern FUN_02023BD4
.extern FUN_02023BE8
.extern FUN_02023C04
-.extern Sav2_Daycare_sizeof
-.extern Sav2_Daycare_init
-.extern FUN_02023C74
-.extern FUN_02023C7C
-.extern FUN_02023C80
-.extern FUN_02023C84
-.extern FUN_02023C8C
-.extern FUN_02023C90
-.extern FUN_02023C98
-.extern FUN_02023CA0
-.extern FUN_02023CA8
-.extern FUN_02023CB8
-.extern FUN_02023CC0
-.extern FUN_02023CC8
-.extern FUN_02023CF0
-.extern FUN_02023D3C
-.extern Sav2_Daycare_get
+.extern Sav2_DayCare_sizeof
+.extern Sav2_DayCare_init
+.extern Sav2_DayCare_GetMonX
+.extern DayCareMon_GetBoxMon
+.extern DayCareMon_GetExtras
+.extern DayCareMon_GetSteps
+.extern DayCareMail_GetCapsule
+.extern Sav2_DayCare_GetEggPID
+.extern Sav2_DayCare_GetEggCycleCounter
+.extern DayCareMon_SetSteps
+.extern DayCareMon_AddSteps
+.extern Sav2_DayCare_SetEggPID
+.extern Sav2_DayCare_SetEggCycleCounter
+.extern Sav2_DayCare_MasudaCheck
+.extern DayCareMon_Copy
+.extern DayCareMon_Init
+.extern Sav2_DayCare_get
.extern Sav2_Pokedex_sizeof
.extern Sav2_Pokedex_new
.extern Sav2_Pokedex_Copy
@@ -6565,7 +6565,7 @@
.extern MOD05_021EC864
.extern MOD05_021ECD64
.extern MOD05_SetEggStats
-.extern MOD05_021ED0CC
+.extern MOD05_DayCare_GiveEggToPlayer
.extern MOD05_021ED378
.extern MOD05_021ED49C
.extern MOD05_021ED4E0
diff --git a/arm9/modules/05/asm/mod05_021D80E8.s b/arm9/modules/05/asm/mod05_021D80E8.s
index c5546619..946b25da 100644
--- a/arm9/modules/05/asm/mod05_021D80E8.s
+++ b/arm9/modules/05/asm/mod05_021D80E8.s
@@ -1765,7 +1765,7 @@ MOD05_021D8F38: ; 0x021D8F38
bl SavArray_PlayerParty_get
add r5, r0, #0
ldr r0, [r4, #0xc]
- bl Sav2_Daycare_get
+ bl Sav2_DayCare_get
add r1, r5, #0
add r2, r4, #0
bl MOD05_021ED378
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index 8ed0618c..2244fdd6 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -14321,8 +14321,8 @@ _021EC454: .word UNK05_021F7930
thumb_func_start MOD05_021EC458
MOD05_021EC458: ; 0x021EC458
push {r3, lr}
- bl FUN_02023C74
- bl FUN_02023C7C
+ bl Sav2_DayCare_GetMonX
+ bl DayCareMon_GetBoxMon
pop {r3, pc}
thumb_func_start MOD05_021EC464
@@ -14335,8 +14335,8 @@ MOD05_021EC464: ; 0x021EC464
_021EC46E:
add r0, r6, #0
add r1, r5, #0
- bl FUN_02023C74
- bl FUN_02023C7C
+ bl Sav2_DayCare_GetMonX
+ bl DayCareMon_GetBoxMon
add r1, r7, #0
mov r2, #0
bl GetBoxMonData
@@ -14367,8 +14367,8 @@ MOD05_021EC49C: ; 0x021EC49C
_021EC4AA:
add r0, r5, #0
add r1, r4, #0
- bl FUN_02023C74
- bl FUN_02023C7C
+ bl Sav2_DayCare_GetMonX
+ bl DayCareMon_GetBoxMon
add r1, r6, #0
add r2, r7, #0
bl GetBoxMonData
@@ -14410,10 +14410,10 @@ MOD05_021EC4F0: ; 0x021EC4F0
bl GetPartyMonByIndex
add r4, r0, #0
add r0, r5, #0
- bl FUN_02023C80
+ bl DayCareMon_GetExtras
str r0, [sp, #8]
add r0, r5, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
str r0, [sp, #4]
add r0, r7, #0
bl Sav2_PlayerData_GetProfileAddr
@@ -14428,7 +14428,7 @@ MOD05_021EC4F0: ; 0x021EC4F0
cmp r0, #0
beq _021EC544
ldr r0, [sp, #8]
- bl FUN_02023C8C
+ bl DayCareMail_GetCapsule
add r2, r0, #0
add r0, r4, #0
mov r1, #0xa9
@@ -14439,7 +14439,7 @@ _021EC544:
bl FUN_02069BB4
add r0, r5, #0
mov r1, #0
- bl FUN_02023CA0
+ bl DayCareMon_SetSteps
ldr r1, [sp]
add r0, r6, #0
bl RemoveMonFromParty
@@ -14472,7 +14472,7 @@ MOD05_021EC57C: ; 0x021EC57C
bl MOD05_021EC49C
add r1, r0, #0
add r0, r4, #0
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
add r2, r0, #0
add r0, r5, #0
add r1, r6, #0
@@ -14486,17 +14486,17 @@ MOD05_021EC5B0: ; 0x021EC5B0
push {r3, r4, r5, r6, r7, lr}
add r4, r0, #0
mov r1, #0
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
add r5, r0, #0
add r0, r4, #0
mov r1, #1
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
add r4, r0, #0
add r0, r5, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r6, r0, #0
add r0, r4, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r7, r0, #0
add r0, r6, #0
mov r1, #5
@@ -14512,9 +14512,9 @@ MOD05_021EC5B0: ; 0x021EC5B0
beq _021EC600
add r0, r5, #0
add r1, r4, #0
- bl FUN_02023CF0
+ bl DayCareMon_Copy
add r0, r4, #0
- bl FUN_02023D3C
+ bl DayCareMon_Init
_021EC600:
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
@@ -14582,10 +14582,10 @@ MOD05_021EC668: ; 0x021EC668
bl AllocMonZeroed
add r4, r0, #0
add r0, r6, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r5, r0, #0
add r0, r6, #0
- bl FUN_02023C80
+ bl DayCareMon_GetExtras
str r0, [sp, #4]
add r0, r7, #0
mov r1, #0
@@ -14612,7 +14612,7 @@ MOD05_021EC668: ; 0x021EC668
bl GetMonData
str r0, [sp, #8]
add r0, r6, #0
- bl FUN_02023C84
+ bl DayCareMon_GetSteps
ldr r1, [sp, #8]
add r2, sp, #8
add r0, r1, r0
@@ -14628,7 +14628,7 @@ _021EC6E0:
cmp r0, #0
beq _021EC6FA
ldr r0, [sp, #4]
- bl FUN_02023C8C
+ bl DayCareMail_GetCapsule
add r2, r0, #0
add r0, r4, #0
mov r1, #0xa9
@@ -14641,7 +14641,7 @@ _021EC6FA:
bl ZeroBoxMonData
add r0, r6, #0
mov r1, #0
- bl FUN_02023CA0
+ bl DayCareMon_SetSteps
add r0, r4, #0
bl FreeToHeap
add r0, r7, #0
@@ -14656,7 +14656,7 @@ MOD05_021EC71C: ; 0x021EC71C
add r4, r1, #0
add r0, r6, #0
add r1, r3, #0
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
add r1, r0, #0
add r0, r5, #0
add r2, r4, #0
@@ -14704,13 +14704,13 @@ MOD05_021EC744: ; 0x021EC744
MOD05_021EC78C: ; 0x021EC78C
push {r4, r5, r6, lr}
add r5, r0, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r6, r0, #0
bl CalcBoxMonLevel
lsl r0, r0, #0x18
lsr r4, r0, #0x18
add r0, r5, #0
- bl FUN_02023C84
+ bl DayCareMon_GetSteps
add r1, r0, #0
add r0, r6, #0
bl MOD05_021EC744
@@ -14723,10 +14723,10 @@ MOD05_021EC78C: ; 0x021EC78C
MOD05_021EC7B4: ; 0x021EC7B4
push {r3, r4, r5, lr}
add r5, r0, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r4, r0, #0
add r0, r5, #0
- bl FUN_02023C84
+ bl DayCareMon_GetSteps
add r1, r0, #0
add r0, r4, #0
bl MOD05_021EC744
@@ -14741,7 +14741,7 @@ MOD05_021EC7D4: ; 0x021EC7D4
sub sp, #8
add r4, r0, #0
add r5, r1, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r6, r0, #0
add r0, r4, #0
bl MOD05_021EC78C
@@ -14770,7 +14770,7 @@ MOD05_021EC810: ; 0x021EC810
sub sp, #8
add r4, r0, #0
add r5, r1, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r6, r0, #0
add r0, r4, #0
bl MOD05_021EC78C
@@ -14801,7 +14801,7 @@ MOD05_021EC810: ; 0x021EC810
MOD05_021EC854: ; 0x021EC854
push {r4, lr}
add r4, r2, #0
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
add r1, r4, #0
bl MOD05_021EC810
pop {r4, pc}
@@ -14810,9 +14810,9 @@ MOD05_021EC854: ; 0x021EC854
MOD05_021EC864: ; 0x021EC864
push {r3, r4, r5, lr}
add r5, r2, #0
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
add r4, r0, #0
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
mov r1, #5
mov r2, #0
bl GetBoxMonData
@@ -14935,7 +14935,7 @@ MOD05_021EC944: ; 0x021EC944
bl MTRandom
add r1, r0, #0
ldr r0, [sp]
- bl FUN_02023CB8
+ bl Sav2_DayCare_SetEggPID
pop {r3, r4, r5, r6, r7, pc}
_021EC960:
ldr r0, [sp]
@@ -14962,7 +14962,7 @@ _021EC98A:
_021EC990:
ldr r0, [sp]
add r1, r4, #0
- bl FUN_02023CB8
+ bl Sav2_DayCare_SetEggPID
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
@@ -15467,10 +15467,10 @@ MOD05_021ECD64: ; 0x021ECD64
push {r4, lr}
add r4, r0, #0
mov r1, #0
- bl FUN_02023CB8
+ bl Sav2_DayCare_SetEggPID
add r0, r4, #0
mov r1, #0
- bl FUN_02023CC0
+ bl Sav2_DayCare_SetEggCycleCounter
pop {r4, pc}
thumb_func_start MOD05_021ECD78
@@ -15628,7 +15628,7 @@ _021ECE8C:
cmp r4, #0x1d
bne _021ECEBC
ldr r0, [sp]
- bl FUN_02023C90
+ bl Sav2_DayCare_GetEggPID
mov r1, #2
lsl r1, r1, #0xe
tst r0, r1
@@ -15642,7 +15642,7 @@ _021ECEBC:
cmp r4, r0
bne _021ECED6
ldr r0, [sp]
- bl FUN_02023C90
+ bl Sav2_DayCare_GetEggPID
mov r1, #2
lsl r1, r1, #0xe
tst r0, r1
@@ -15794,8 +15794,8 @@ _021ECFEE:
.balign 4, 0
_021ED008: .word 0x000001EE
- thumb_func_start MOD05_021ED00C
-MOD05_021ED00C: ; 0x021ED00C
+ thumb_func_start MOD05_DayCare_CreateEgg
+MOD05_DayCare_CreateEgg: ; 0x021ED00C
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x18
str r1, [sp, #0x10]
@@ -15808,10 +15808,10 @@ MOD05_021ED00C: ; 0x021ED00C
add r1, sp, #0x14
strb r0, [r1]
add r0, r5, #0
- bl FUN_02023C90
+ bl Sav2_DayCare_GetEggPID
add r4, r0, #0
add r0, r5, #0
- bl FUN_02023CC8
+ bl Sav2_DayCare_MasudaCheck
cmp r0, #0
beq _021ED05E
add r0, r6, #0
@@ -15881,8 +15881,8 @@ _021ED05E:
.balign 4, 0
_021ED0C8: .word 0x000001EE
- thumb_func_start MOD05_021ED0CC
-MOD05_021ED0CC: ; 0x021ED0CC
+ thumb_func_start MOD05_DayCare_GiveEggToPlayer
+MOD05_DayCare_GiveEggToPlayer: ; 0x021ED0CC
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r5, r0, #0
@@ -15915,7 +15915,7 @@ MOD05_021ED0CC: ; 0x021ED0CC
add r0, r4, #0
add r1, r6, #0
add r2, r5, #0
- bl MOD05_021ED00C
+ bl MOD05_DayCare_CreateEgg
add r0, r4, #0
add r1, r5, #0
bl MOD05_021EC9D4
@@ -16251,9 +16251,9 @@ _021ED38E:
beq _021ED3AC
ldr r0, [sp]
add r1, r4, #0
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
mov r1, #1
- bl FUN_02023CA8
+ bl DayCareMon_AddSteps
add r6, r6, #1
_021ED3AC:
add r4, r4, #1
@@ -16261,15 +16261,15 @@ _021ED3AC:
cmp r4, #2
blo _021ED38E
ldr r0, [sp]
- bl FUN_02023C90
+ bl Sav2_DayCare_GetEggPID
cmp r0, #0
bne _021ED3F8
cmp r6, #2
bne _021ED3F8
ldr r0, [sp]
mov r1, #1
- bl FUN_02023C74
- bl FUN_02023C84
+ bl Sav2_DayCare_GetMonX
+ bl DayCareMon_GetSteps
lsl r0, r0, #0x18
lsr r0, r0, #0x18
cmp r0, #0xff
@@ -16289,11 +16289,11 @@ _021ED3AC:
bl MOD05_021EC944
_021ED3F8:
ldr r0, [sp]
- bl FUN_02023C98
+ bl Sav2_DayCare_GetEggCycleCounter
add r4, r0, #0
ldr r0, [sp]
add r1, r4, #1
- bl FUN_02023CC0
+ bl Sav2_DayCare_SetEggCycleCounter
ldr r0, [sp, #4]
bl MOD05_021ED334
add r1, r4, #1
@@ -16301,7 +16301,7 @@ _021ED3F8:
bne _021ED490
ldr r0, [sp]
mov r1, #0
- bl FUN_02023CC0
+ bl Sav2_DayCare_SetEggCycleCounter
add r0, r7, #0
bl MOD05_021ED190
add r6, r0, #0
@@ -16448,7 +16448,7 @@ MOD05_021ED52C: ; 0x021ED52C
add r7, r2, #0
add r1, r6, #0
str r3, [sp, #8]
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
str r0, [sp, #0xc]
add r0, r5, #0
add r1, r6, #0
@@ -16459,7 +16459,7 @@ MOD05_021ED52C: ; 0x021ED52C
add r2, r5, #0
bl BufferBoxMonNickname
ldr r0, [sp, #0xc]
- bl FUN_02023C84
+ bl DayCareMon_GetSteps
add r1, r0, #0
add r0, r5, #0
bl MOD05_021EC744
@@ -16531,7 +16531,7 @@ MOD05_021ED5C4: ; 0x021ED5C4
MOD05_021ED5EC: ; 0x021ED5EC
push {r4, lr}
add r4, r0, #0
- bl FUN_02023C90
+ bl Sav2_DayCare_GetEggPID
cmp r0, #0
beq _021ED5FC
mov r0, #1
diff --git a/arm9/modules/35/asm/module_35.s b/arm9/modules/35/asm/module_35.s
index 8892667e..45cab8d3 100644
--- a/arm9/modules/35/asm/module_35.s
+++ b/arm9/modules/35/asm/module_35.s
@@ -48,7 +48,7 @@ MOD35_0225489C: ; 0x0225489C
add r0, r4, #0
add r6, r2, #0
bl MOD20_02252C40
- bl Sav2_Daycare_get
+ bl Sav2_DayCare_get
str r0, [r5, #0x30]
ldr r1, [r5, #0x30]
add r0, r5, #4
@@ -301,7 +301,7 @@ MOD35_02254A50: ; 0x02254A50
ldr r1, [sp]
strb r0, [r1]
ldr r0, [sp, #4]
- bl FUN_02023C90
+ bl Sav2_DayCare_GetEggPID
ldr r1, [sp]
mov r7, #0
strb r0, [r1, #1]
@@ -314,9 +314,9 @@ MOD35_02254A50: ; 0x02254A50
_02254A7A:
ldr r0, [sp, #4]
add r1, r7, #0
- bl FUN_02023C74
+ bl Sav2_DayCare_GetMonX
str r0, [sp, #8]
- bl FUN_02023C7C
+ bl DayCareMon_GetBoxMon
add r4, r0, #0
bl AcquireBoxMonLock
str r0, [sp, #0xc]
diff --git a/arm9/src/daycare.c b/arm9/src/daycare.c
new file mode 100644
index 00000000..eff25151
--- /dev/null
+++ b/arm9/src/daycare.c
@@ -0,0 +1,114 @@
+#include "global.h"
+#include "pokemon.h"
+#include "seals.h"
+#include "save_block_2.h"
+#include "daycare.h"
+
+#pragma thumb on
+
+u32 Sav2_DayCare_sizeof(void)
+{
+ return sizeof(struct DayCare);
+}
+
+void Sav2_DayCare_init(struct DayCare * daycare)
+{
+ memset(daycare, 0, sizeof(struct DayCare));
+ ZeroBoxMonData(&daycare->mons[0].mon);
+ ZeroBoxMonData(&daycare->mons[1].mon);
+ daycare->egg_pid = 0;
+ daycare->egg_cycles = 0;
+}
+
+struct DayCareMon * Sav2_DayCare_GetMonX(struct DayCare * daycare, s32 i)
+{
+ return &daycare->mons[i];
+}
+
+struct BoxPokemon * DayCareMon_GetBoxMon(struct DayCareMon * dcmon)
+{
+ return &dcmon->mon;
+}
+
+struct DayCareMail * DayCareMon_GetExtras(struct DayCareMon * dcmon)
+{
+ return &dcmon->mail;
+}
+
+u32 DayCareMon_GetSteps(struct DayCareMon * dcmon)
+{
+ return dcmon->steps;
+}
+
+struct SealStruct * DayCareMail_GetCapsule(struct DayCareMail * dcmail)
+{
+ return &dcmail->seal;
+}
+
+u32 Sav2_DayCare_GetEggPID(struct DayCare * daycare)
+{
+ return daycare->egg_pid;
+}
+
+u8 Sav2_DayCare_GetEggCycleCounter(struct DayCare * daycare)
+{
+ return daycare->egg_cycles;
+}
+
+void DayCareMon_SetSteps(struct DayCareMon * dcmon, u32 steps)
+{
+ dcmon->steps = steps;
+}
+
+void DayCareMon_AddSteps(struct DayCareMon * dcmon, u32 steps)
+{
+ dcmon->steps += steps;
+}
+
+void Sav2_DayCare_SetEggPID(struct DayCare * daycare, u32 pid)
+{
+ daycare->egg_pid = pid;
+}
+
+void Sav2_DayCare_SetEggCycleCounter(struct DayCare * daycare, u8 count)
+{
+ daycare->egg_cycles = count;
+}
+
+BOOL Sav2_DayCare_MasudaCheck(struct DayCare * daycare)
+{
+ // Checks if the pokemon come from different countries.
+ // Uses language as a proxy for country, even though it
+ // only accounts for European languages and Japanese.
+ // If true, shiny odds are increased (see overlay 05).
+ return GetBoxMonData(&daycare->mons[0].mon, MON_DATA_GAME_LANGUAGE, NULL) != GetBoxMonData(&daycare->mons[1].mon, MON_DATA_GAME_LANGUAGE, NULL);
+}
+
+void DayCareMon_Copy(struct DayCareMon * dest, const struct DayCareMon * src)
+{
+ *dest = *src;
+}
+
+void DayCareMon_Extras_init(struct DayCareMail * mail)
+{
+ int i;
+
+ for (i = 0; i < OT_NAME_LENGTH + 1; i++)
+ mail->ot_name[i] = 0;
+ for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
+ mail->nickname[i] = 0;
+ mail->ot_name[0] = EOS;
+ mail->nickname[0] = EOS;
+}
+
+void DayCareMon_Init(struct DayCareMon * mon)
+{
+ ZeroBoxMonData(&mon->mon);
+ mon->steps = 0;
+ DayCareMon_Extras_init(&mon->mail);
+}
+
+struct DayCare * Sav2_DayCare_get(struct SaveBlock2 * sav2)
+{
+ return (struct DayCare *)SavArray_get(sav2, 8);
+}
diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c
index 201a313a..96808ba6 100644
--- a/arm9/src/save_arrays.c
+++ b/arm9/src/save_arrays.c
@@ -9,11 +9,11 @@
#include "poketch.h"
#include "hall_of_fame.h"
#include "unk_020286F8.h"
+#include "daycare.h"
extern u32 FUN_0202AC20(void);
extern u32 FUN_02034D7C(void);
extern u32 Sav2_Pokedex_sizeof(void);
-extern u32 Sav2_Daycare_sizeof(void);
extern u32 FUN_020254B8(void);
extern u32 FUN_02024E64(void);
extern u32 FUN_02034D80(void);
@@ -41,7 +41,6 @@ extern u32 FUN_02013B28(void);
extern void FUN_0202AC28(void *);
extern void FUN_02034D98(void *);
extern void Sav2_Pokedex_init(void *);
-extern void Sav2_Daycare_init(void *);
extern void FUN_020254CC(void *);
extern void FUN_02024E6C(void *);
extern void FUN_02034D88(void *);
@@ -81,7 +80,7 @@ const struct SaveChunkHeader UNK_020EE700[] = {
{ 5, 0, (SAVSIZEFN)Sav2_Poketch_sizeof, (SAVINITFN)Sav2_Poketch_init },
{ 6, 0, (SAVSIZEFN)FUN_02034D7C, (SAVINITFN)FUN_02034D98 },
{ 7, 0, (SAVSIZEFN)Sav2_Pokedex_sizeof, (SAVINITFN)Sav2_Pokedex_init },
- { 8, 0, (SAVSIZEFN)Sav2_Daycare_sizeof, (SAVINITFN)Sav2_Daycare_init },
+ { 8, 0, (SAVSIZEFN)Sav2_DayCare_sizeof, (SAVINITFN)Sav2_DayCare_init },
{ 9, 0, (SAVSIZEFN)FUN_020254B8, (SAVINITFN)FUN_020254CC },
{ 10, 0, (SAVSIZEFN)FUN_02024E64, (SAVINITFN)FUN_02024E6C },
{ 11, 0, (SAVSIZEFN)FUN_02034D80, (SAVINITFN)FUN_02034D88 },
diff --git a/include/daycare.h b/include/daycare.h
new file mode 100644
index 00000000..d1026f76
--- /dev/null
+++ b/include/daycare.h
@@ -0,0 +1,46 @@
+#ifndef POKEDIAMOND_DAYCARE_H
+#define POKEDIAMOND_DAYCARE_H
+
+struct DayCareMail
+{
+ struct SealStruct seal;
+ u16 ot_name[OT_NAME_LENGTH + 1];
+ u16 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 padding_5E[2];
+};
+
+struct DayCareMon
+{
+ struct BoxPokemon mon;
+ struct DayCareMail mail;
+ u32 steps;
+};
+
+struct DayCare
+{
+ struct DayCareMon mons[2];
+ u32 egg_pid;
+ u8 egg_cycles;
+ u8 padding_1DD[3];
+};
+
+u32 Sav2_DayCare_sizeof(void);
+void Sav2_DayCare_init(struct DayCare * daycare);
+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);
+u32 Sav2_DayCare_GetEggPID(struct DayCare * daycare);
+u8 Sav2_DayCare_GetEggCycleCounter(struct DayCare * daycare);
+void DayCareMon_SetSteps(struct DayCareMon * dcmon, u32 steps);
+void DayCareMon_AddSteps(struct DayCareMon * dcmon, u32 steps);
+void Sav2_DayCare_SetEggPID(struct DayCare * daycare, u32 pid);
+void Sav2_DayCare_SetEggCycleCounter(struct DayCare * daycare, u8 count);
+BOOL Sav2_DayCare_MasudaCheck(struct DayCare * daycare);
+void DayCareMon_Copy(struct DayCareMon * dest, const struct DayCareMon * src);
+void DayCareMon_Extras_init(struct DayCareMail * mail);
+void DayCareMon_Init(struct DayCareMon * mon);
+struct DayCare * Sav2_DayCare_get(struct SaveBlock2 * sav2);
+
+#endif //POKEDIAMOND_DAYCARE_H