summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/daycare.s3216
-rw-r--r--asm/field_control_avatar.s2
-rw-r--r--asm/party_menu.s4
-rw-r--r--asm/pokemon_summary_screen.s4
-rw-r--r--data/data.s26
-rw-r--r--data/data_83FECCC.s16
-rw-r--r--data/specials.inc12
-rw-r--r--include/constants/flags.h4
-rw-r--r--include/global.h20
-rw-r--r--include/new_menu_helpers.h1
-rw-r--r--include/party_menu.h1
-rw-r--r--include/pokemon.h6
-rw-r--r--include/text.h28
-rw-r--r--ld_script.txt3
-rw-r--r--src/data/pokemon/egg_moves.h1310
-rw-r--r--src/daycare.c1353
-rw-r--r--src/menu2.c26
-rw-r--r--src/oak_speech.c6
-rw-r--r--src/pokemon.c14
-rw-r--r--src/quest_log.c10
-rw-r--r--src/text.c12
-rw-r--r--src/text_printer.c14
-rw-r--r--src/tm_case.c2
-rw-r--r--sym_ewram.txt18
24 files changed, 2770 insertions, 3338 deletions
diff --git a/asm/daycare.s b/asm/daycare.s
deleted file mode 100644
index 5f1b787af..000000000
--- a/asm/daycare.s
+++ /dev/null
@@ -1,3216 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start GetMonNick
-GetMonNick: @ 80453C0
- push {r4,lr}
- sub sp, 0x14
- adds r4, r1, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy10
- add sp, 0x14
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetMonNick
-
- thumb_func_start GetBoxMonNick
-GetBoxMonNick: @ 80453E0
- push {r4,lr}
- sub sp, 0x14
- adds r4, r1, 0
- movs r1, 0x2
- mov r2, sp
- bl GetBoxMonData
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy10
- add sp, 0x14
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetBoxMonNick
-
- thumb_func_start CountPokemonInDaycare
-CountPokemonInDaycare: @ 8045400
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r5, 0
- movs r4, 0
-_08045408:
- movs r0, 0x8C
- muls r0, r4
- adds r0, r6, r0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _0804541E
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_0804541E:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bls _08045408
- adds r0, r5, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end CountPokemonInDaycare
-
- thumb_func_start InitDaycareMailRecordMixing
-InitDaycareMailRecordMixing: @ 8045430
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- mov r10, r1
- movs r7, 0
- movs r5, 0
- mov r6, r10
- adds r6, 0x74
- movs r0, 0x1
- mov r8, r0
-_0804544A:
- movs r0, 0x8C
- muls r0, r5
- mov r1, r9
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _08045478
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- adds r0, r4, 0
- movs r1, 0xC
- bl GetBoxMonData
- adds r1, r0, 0
- cmp r1, 0
- bne _08045478
- lsls r0, r5, 1
- adds r0, r6, r0
- b _0804547E
-_08045478:
- lsls r0, r5, 1
- adds r0, r6, r0
- mov r1, r8
-_0804547E:
- strh r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _0804544A
- mov r0, r10
- str r7, [r0, 0x70]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end InitDaycareMailRecordMixing
-
- thumb_func_start Daycare_FindEmptySpot
-Daycare_FindEmptySpot: @ 804549C
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r4, 0
-_080454A2:
- movs r0, 0x8C
- muls r0, r4
- adds r0, r5, r0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- bne _080454B8
- lsls r0, r4, 24
- asrs r0, 24
- b _080454C6
-_080454B8:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bls _080454A2
- movs r0, 0x1
- negs r0, r0
-_080454C6:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end Daycare_FindEmptySpot
-
- thumb_func_start StorePokemonInDaycare
-StorePokemonInDaycare: @ 80454CC
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl MonHasMail
- lsls r0, 24
- cmp r0, 0
- beq _08045524
- adds r0, r4, 0
- adds r0, 0x74
- ldr r1, _08045550 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- adds r1, r4, 0
- adds r1, 0x7C
- adds r0, r5, 0
- bl GetMonNick
- adds r0, r5, 0
- movs r1, 0x40
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08045554 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- adds r1, r2
- adds r0, r4, 0
- adds r0, 0x50
- ldr r2, _08045558 @ =0x00002cd0
- adds r1, r2
- ldm r1!, {r2,r3,r6}
- stm r0!, {r2,r3,r6}
- ldm r1!, {r2,r3,r6}
- stm r0!, {r2,r3,r6}
- ldm r1!, {r2,r3,r6}
- stm r0!, {r2,r3,r6}
- adds r0, r5, 0
- bl TakeMailFromMon
-_08045524:
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- bl BoxMonRestorePP
- adds r1, r4, 0
- adds r1, 0x88
- movs r0, 0
- str r0, [r1]
- adds r0, r5, 0
- bl ZeroMonData
- bl CompactPartySlots
- bl CalculatePlayerPartyCount
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08045550: .4byte gSaveBlock2Ptr
-_08045554: .4byte gSaveBlock1Ptr
-_08045558: .4byte 0x00002cd0
- thumb_func_end StorePokemonInDaycare
-
- thumb_func_start StorePokemonInEmptyDaycareSlot
-StorePokemonInEmptyDaycareSlot: @ 804555C
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r0, r4, 0
- bl Daycare_FindEmptySpot
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x8C
- muls r0, r1
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- bl StorePokemonInDaycare
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end StorePokemonInEmptyDaycareSlot
-
- thumb_func_start StoreSelectedPokemonInDaycare
-StoreSelectedPokemonInDaycare: @ 8045580
- push {lr}
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _080455A4 @ =gPlayerParty
- adds r0, r1
- ldr r1, _080455A8 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- movs r2, 0xBE
- lsls r2, 6
- adds r1, r2
- bl StorePokemonInEmptyDaycareSlot
- pop {r0}
- bx r0
- .align 2, 0
-_080455A4: .4byte gPlayerParty
-_080455A8: .4byte gSaveBlock1Ptr
- thumb_func_end StoreSelectedPokemonInDaycare
-
- thumb_func_start ShiftDaycareSlots
-ShiftDaycareSlots: @ 80455AC
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r5, 0
- adds r4, 0x8C
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _08045602
- adds r0, r5, 0
- movs r1, 0xB
- bl GetBoxMonData
- adds r6, r0, 0
- cmp r6, 0
- bne _08045602
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- bl ZeroBoxMonData
- adds r4, 0x50
- adds r0, r5, 0
- adds r0, 0x50
- adds r1, r4, 0
- movs r2, 0x38
- bl memcpy
- adds r2, r5, 0
- adds r2, 0x88
- movs r0, 0x8A
- lsls r0, 1
- adds r1, r5, r0
- ldr r0, [r1]
- str r0, [r2]
- str r6, [r1]
- adds r0, r4, 0
- bl ClearDaycareMonMisc
-_08045602:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end ShiftDaycareSlots
-
- thumb_func_start ApplyDaycareExperience
-ApplyDaycareExperience: @ 8045608
- push {r4-r7,lr}
- adds r4, r0, 0
- movs r5, 0
- ldr r7, _08045624 @ =0x0000ffff
-_08045610:
- adds r0, r4, 0
- bl sub_8043B90
- lsls r0, 24
- cmp r0, 0
- beq _0804564C
- movs r6, 0x1
- adds r5, 0x1
- b _08045638
- .align 2, 0
-_08045624: .4byte 0x0000ffff
-_08045628:
- movs r6, 0
- cmp r0, r7
- bne _08045638
- ldr r0, _08045658 @ =gMoveToLearn
- ldrh r1, [r0]
- adds r0, r4, 0
- bl DeleteFirstMoveAndGiveMoveToMon
-_08045638:
- adds r0, r4, 0
- adds r1, r6, 0
- bl MonTryLearningNewMove
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _08045628
- cmp r5, 0x63
- ble _08045610
-_0804564C:
- adds r0, r4, 0
- bl CalculateMonStats
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045658: .4byte gMoveToLearn
- thumb_func_end ApplyDaycareExperience
-
- thumb_func_start TakeSelectedPokemonFromDaycare
-TakeSelectedPokemonFromDaycare: @ 804565C
- push {r4-r7,lr}
- sub sp, 0x68
- adds r5, r0, 0
- ldr r1, _080456F8 @ =gStringVar1
- bl GetBoxMonNick
- adds r0, r5, 0
- movs r1, 0xB
- bl GetBoxMonData
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r5, 0
- mov r1, sp
- bl BoxMonToMon
- mov r0, sp
- movs r1, 0x38
- bl GetMonData
- cmp r0, 0x64
- beq _080456AA
- mov r0, sp
- movs r1, 0x19
- bl GetMonData
- adds r1, r5, 0
- adds r1, 0x88
- ldr r1, [r1]
- adds r0, r1
- str r0, [sp, 0x64]
- add r2, sp, 0x64
- mov r0, sp
- movs r1, 0x19
- bl SetMonData
- mov r0, sp
- bl ApplyDaycareExperience
-_080456AA:
- ldr r0, _080456FC @ =gPlayerParty
- movs r1, 0xFA
- lsls r1, 1
- adds r6, r0, r1
- adds r0, r6, 0
- mov r1, sp
- movs r2, 0x64
- bl memcpy
- adds r0, r5, 0
- adds r0, 0x70
- ldrh r0, [r0]
- cmp r0, 0
- beq _080456D8
- adds r4, r5, 0
- adds r4, 0x50
- adds r0, r6, 0
- adds r1, r4, 0
- bl GiveMailToMon2
- adds r0, r4, 0
- bl ClearDaycareMonMisc
-_080456D8:
- adds r0, r5, 0
- bl ZeroBoxMonData
- adds r1, r5, 0
- adds r1, 0x88
- movs r0, 0
- str r0, [r1]
- bl CompactPartySlots
- bl CalculatePlayerPartyCount
- adds r0, r7, 0
- add sp, 0x68
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080456F8: .4byte gStringVar1
-_080456FC: .4byte gPlayerParty
- thumb_func_end TakeSelectedPokemonFromDaycare
-
- thumb_func_start TakeSelectedPokemonMonFromDaycareShiftSlots
-TakeSelectedPokemonMonFromDaycareShiftSlots: @ 8045700
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x8C
- muls r0, r1
- adds r0, r5, r0
- bl TakeSelectedPokemonFromDaycare
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- bl ShiftDaycareSlots
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end TakeSelectedPokemonMonFromDaycareShiftSlots
-
- thumb_func_start TakePokemonFromDaycare
-TakePokemonFromDaycare: @ 8045728
- push {lr}
- ldr r0, _08045744 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- ldr r1, _08045748 @ =gSpecialVar_0x8004
- ldrb r1, [r1]
- bl TakeSelectedPokemonMonFromDaycareShiftSlots
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08045744: .4byte gSaveBlock1Ptr
-_08045748: .4byte gSpecialVar_0x8004
- thumb_func_end TakePokemonFromDaycare
-
- thumb_func_start GetLevelAfterDaycareSteps
-GetLevelAfterDaycareSteps: @ 804574C
- push {r4,r5,lr}
- sub sp, 0x54
- adds r4, r0, 0
- adds r5, r1, 0
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x50
- bl memcpy
- adds r0, r4, 0
- movs r1, 0x19
- bl GetBoxMonData
- adds r0, r5
- str r0, [sp, 0x50]
- add r2, sp, 0x50
- mov r0, sp
- movs r1, 0x19
- bl SetBoxMonData
- mov r0, sp
- bl GetLevelFromBoxMonExp
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x54
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetLevelAfterDaycareSteps
-
- thumb_func_start GetNumLevelsGainedFromSteps
-GetNumLevelsGainedFromSteps: @ 8045788
- push {r4,r5,lr}
- adds r5, r0, 0
- bl GetLevelFromBoxMonExp
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- adds r0, 0x88
- ldr r1, [r0]
- adds r0, r5, 0
- bl GetLevelAfterDaycareSteps
- lsls r0, 24
- lsrs r0, 24
- subs r0, r4
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetNumLevelsGainedFromSteps
-
- thumb_func_start GetNumLevelsGainedForDaycareMon
-GetNumLevelsGainedForDaycareMon: @ 80457B4
- push {r4,r5,lr}
- adds r5, r0, 0
- bl GetNumLevelsGainedFromSteps
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080457E0 @ =gStringVar2
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r1, _080457E4 @ =gStringVar1
- adds r0, r5, 0
- bl GetBoxMonNick
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080457E0: .4byte gStringVar2
-_080457E4: .4byte gStringVar1
- thumb_func_end GetNumLevelsGainedForDaycareMon
-
- thumb_func_start GetDaycareCostForSelectedMon
-GetDaycareCostForSelectedMon: @ 80457E8
- push {r4,r5,lr}
- adds r5, r0, 0
- bl GetNumLevelsGainedFromSteps
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _08045818 @ =gStringVar1
- adds r0, r5, 0
- bl GetBoxMonNick
- movs r0, 0x64
- muls r4, r0
- adds r4, 0x64
- ldr r0, _0804581C @ =gStringVar2
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08045818: .4byte gStringVar1
-_0804581C: .4byte gStringVar2
- thumb_func_end GetDaycareCostForSelectedMon
-
- thumb_func_start GetDaycareCostForMon
-GetDaycareCostForMon: @ 8045820
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0x8C
- muls r1, r2
- adds r0, r1
- bl GetDaycareCostForSelectedMon
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end GetDaycareCostForMon
-
- thumb_func_start GetDaycareCost
-GetDaycareCost: @ 8045838
- push {lr}
- ldr r0, _08045854 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- ldr r1, _08045858 @ =gSpecialVar_0x8004
- ldrb r1, [r1]
- bl GetDaycareCostForMon
- ldr r1, _0804585C @ =gSpecialVar_0x8005
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08045854: .4byte gSaveBlock1Ptr
-_08045858: .4byte gSpecialVar_0x8004
-_0804585C: .4byte gSpecialVar_0x8005
- thumb_func_end GetDaycareCost
-
- thumb_func_start sub_8045860
-sub_8045860: @ 8045860
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08045888 @ =gSaveBlock1Ptr
- ldr r2, [r1]
- ldr r1, _0804588C @ =0x00003008
- adds r3, r2, r1
- ldr r1, [r3]
- adds r1, r0
- str r1, [r3]
- ldr r1, _08045890 @ =0x00003094
- adds r3, r2, r1
- ldr r1, [r3]
- adds r1, r0
- str r1, [r3]
- ldr r1, _08045894 @ =0x00003d20
- adds r2, r1
- ldr r1, [r2]
- adds r1, r0
- str r1, [r2]
- bx lr
- .align 2, 0
-_08045888: .4byte gSaveBlock1Ptr
-_0804588C: .4byte 0x00003008
-_08045890: .4byte 0x00003094
-_08045894: .4byte 0x00003d20
- thumb_func_end sub_8045860
-
- thumb_func_start GetNumLevelsGainedFromDaycare
-GetNumLevelsGainedFromDaycare: @ 8045898
- push {r4-r6,lr}
- ldr r6, _080458C0 @ =gSaveBlock1Ptr
- ldr r5, _080458C4 @ =gSpecialVar_0x8004
- ldrh r0, [r5]
- movs r4, 0x8C
- adds r1, r0, 0
- muls r1, r4
- movs r0, 0xBE
- lsls r0, 6
- adds r1, r0
- ldr r0, [r6]
- adds r0, r1
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- bne _080458C8
- movs r0, 0
- b _080458E0
- .align 2, 0
-_080458C0: .4byte gSaveBlock1Ptr
-_080458C4: .4byte gSpecialVar_0x8004
-_080458C8:
- ldrh r0, [r5]
- adds r1, r0, 0
- muls r1, r4
- movs r0, 0xBE
- lsls r0, 6
- adds r1, r0
- ldr r0, [r6]
- adds r0, r1
- bl GetNumLevelsGainedForDaycareMon
- lsls r0, 24
- lsrs r0, 24
-_080458E0:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetNumLevelsGainedFromDaycare
-
- thumb_func_start ClearDaycareMonMisc
-ClearDaycareMonMisc: @ 80458E8
- push {lr}
- movs r3, 0
- movs r2, 0x7
- adds r1, r0, 0
- adds r1, 0x2B
-_080458F2:
- strb r3, [r1]
- subs r1, 0x1
- subs r2, 0x1
- cmp r2, 0
- bge _080458F2
- adds r2, r0, 0
- adds r2, 0x2C
- movs r3, 0
- adds r1, r0, 0
- adds r1, 0x36
-_08045906:
- strb r3, [r1]
- subs r1, 0x1
- cmp r1, r2
- bge _08045906
- bl ClearMailStruct
- pop {r0}
- bx r0
- thumb_func_end ClearDaycareMonMisc
-
- thumb_func_start ClearDaycareMon
-ClearDaycareMon: @ 8045918
- push {r4,lr}
- adds r4, r0, 0
- bl ZeroBoxMonData
- adds r1, r4, 0
- adds r1, 0x88
- movs r0, 0
- str r0, [r1]
- adds r4, 0x50
- adds r0, r4, 0
- bl ClearDaycareMonMisc
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ClearDaycareMon
-
- thumb_func_start ClearAllDaycareData
-ClearAllDaycareData: @ 8045938
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- movs r6, 0x8C
-_08045940:
- adds r0, r4, 0
- muls r0, r6
- adds r0, r5, r0
- bl ClearDaycareMon
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bls _08045940
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r5, r1
- movs r2, 0
- movs r1, 0
- strh r1, [r0]
- movs r1, 0x8D
- lsls r1, 1
- adds r0, r5, r1
- strb r2, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end ClearAllDaycareData
-
- thumb_func_start sub_8045970
-sub_8045970: @ 8045970
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0
- mov r8, r0
- ldr r0, _0804599C @ =gEvolutionTable
- mov r12, r0
-_08045982:
- movs r7, 0
- movs r6, 0x1
- movs r4, 0x80
- lsls r4, 9
- movs r5, 0x28
- mov r3, r12
- adds r3, 0x28
-_08045990:
- movs r1, 0
- ldrh r0, [r3, 0x4]
- cmp r0, r2
- bne _080459A0
- lsrs r2, r4, 16
- b _080459CC
- .align 2, 0
-_0804599C: .4byte gEvolutionTable
-_080459A0:
- adds r1, 0x1
- cmp r1, 0x4
- bgt _080459B6
- lsls r0, r1, 3
- adds r0, r5
- add r0, r12
- ldrh r0, [r0, 0x4]
- cmp r0, r2
- bne _080459A0
- lsrs r2, r4, 16
- movs r7, 0x1
-_080459B6:
- cmp r7, 0
- bne _080459CC
- movs r0, 0x80
- lsls r0, 9
- adds r4, r0
- adds r5, 0x28
- adds r3, 0x28
- adds r6, 0x1
- ldr r0, _080459EC @ =0x0000019b
- cmp r6, r0
- ble _08045990
-_080459CC:
- movs r0, 0xCE
- lsls r0, 1
- cmp r6, r0
- beq _080459DE
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x4
- ble _08045982
-_080459DE:
- adds r0, r2, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080459EC: .4byte 0x0000019b
- thumb_func_end sub_8045970
-
- thumb_func_start sub_80459F0
-sub_80459F0: @ 80459F0
- push {r4,lr}
- adds r4, r0, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08045A18 @ =0x0000fffe
- bl __umodsi3
- adds r0, 0x1
- movs r1, 0x8C
- lsls r1, 1
- adds r4, r1
- strh r0, [r4]
- ldr r0, _08045A1C @ =0x00000266
- bl FlagSet
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08045A18: .4byte 0x0000fffe
-_08045A1C: .4byte 0x00000266
- thumb_func_end sub_80459F0
-
- thumb_func_start sub_8045A20
-sub_8045A20: @ 8045A20
- push {r4,lr}
- adds r4, r0, 0
- bl Random
- movs r2, 0x80
- lsls r2, 8
- adds r1, r2, 0
- movs r2, 0x8C
- lsls r2, 1
- adds r4, r2
- orrs r1, r0
- strh r1, [r4]
- ldr r0, _08045A44 @ =0x00000266
- bl FlagSet
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08045A44: .4byte 0x00000266
- thumb_func_end sub_8045A20
-
- thumb_func_start sub_8045A48
-sub_8045A48: @ 8045A48
- push {lr}
- ldr r0, _08045A5C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl sub_80459F0
- pop {r0}
- bx r0
- .align 2, 0
-_08045A5C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8045A48
-
- thumb_func_start sub_8045A60
-sub_8045A60: @ 8045A60
- push {lr}
- ldr r0, _08045A74 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl sub_8045A20
- pop {r0}
- bx r0
- .align 2, 0
-_08045A74: .4byte gSaveBlock1Ptr
- thumb_func_end sub_8045A60
-
- thumb_func_start RemoveIVIndexFromList
-RemoveIVIndexFromList: @ 8045A78
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r1, r4, r1
- movs r0, 0xFF
- strb r0, [r1]
- movs r2, 0
-_08045A8A:
- mov r1, sp
- adds r0, r1, r2
- adds r1, r4, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x5
- ble _08045A8A
- movs r3, 0
- movs r2, 0
-_08045A9E:
- mov r1, sp
- adds r0, r1, r2
- ldrb r1, [r0]
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _08045AB0
- adds r0, r4, r3
- strb r1, [r0]
- adds r3, 0x1
-_08045AB0:
- adds r2, 0x1
- cmp r2, 0x5
- ble _08045A9E
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end RemoveIVIndexFromList
-
- thumb_func_start InheritIVs
-InheritIVs: @ 8045AC0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- mov r9, r0
- mov r8, r1
- movs r5, 0
- add r1, sp, 0x4
- add r7, sp, 0xC
- adds r2, r1, 0
-_08045AD6:
- adds r0, r2, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08045AD6
- movs r5, 0
- adds r6, r1, 0
-_08045AE8:
- bl Random
- mov r1, sp
- adds r4, r1, r5
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- subs r1, r5
- bl __modsi3
- adds r0, r6, r0
- ldrb r0, [r0]
- strb r0, [r4]
- ldrb r1, [r4]
- adds r0, r6, 0
- bl RemoveIVIndexFromList
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _08045AE8
- movs r5, 0
- movs r4, 0x1
-_08045B18:
- bl Random
- adds r1, r7, r5
- lsls r0, 16
- lsrs r0, 16
- ands r0, r4
- strb r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _08045B18
- movs r5, 0
-_08045B32:
- mov r1, sp
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08045C0E
- lsls r0, 2
- ldr r1, _08045B48 @ =_08045B4C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08045B48: .4byte _08045B4C
- .align 2, 0
-_08045B4C:
- .4byte _08045B64
- .4byte _08045B82
- .4byte _08045B9C
- .4byte _08045BB6
- .4byte _08045BD0
- .4byte _08045BF0
-_08045B64:
- adds r0, r7, r5
- ldrb r1, [r0]
- movs r0, 0x8C
- muls r0, r1
- add r0, r8
- movs r1, 0x27
- bl GetBoxMonData
- add r2, sp, 0x10
- strb r0, [r2]
- mov r0, r9
- movs r1, 0x27
- bl SetMonData
- b _08045C0E
-_08045B82:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- movs r0, 0x8C
- muls r0, r1
- add r0, r8
- movs r1, 0x28
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x28
- b _08045BE8
-_08045B9C:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- movs r0, 0x8C
- muls r0, r1
- add r0, r8
- movs r1, 0x29
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x29
- b _08045BE8
-_08045BB6:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- movs r0, 0x8C
- muls r0, r1
- add r0, r8
- movs r1, 0x2A
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x2A
- b _08045BE8
-_08045BD0:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- movs r0, 0x8C
- muls r0, r1
- add r0, r8
- movs r1, 0x2B
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x2B
-_08045BE8:
- adds r2, r4, 0
- bl SetMonData
- b _08045C0E
-_08045BF0:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- movs r0, 0x8C
- muls r0, r1
- add r0, r8
- movs r1, 0x2C
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x2C
- adds r2, r4, 0
- bl SetMonData
-_08045C0E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _08045B32
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end InheritIVs
-
- thumb_func_start GetEggMoves
-GetEggMoves: @ 8045C28
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r1
- movs r6, 0
- movs r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r5, _08045C50 @ =gUnknown_825EF0C
- ldrh r1, [r5]
- ldr r7, _08045C54 @ =0x00004e20
- adds r0, r3, r7
- cmp r1, r0
- bne _08045C58
- movs r4, 0x1
- b _08045C7A
- .align 2, 0
-_08045C50: .4byte gUnknown_825EF0C
-_08045C54: .4byte 0x00004e20
-_08045C58:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _08045CC4 @ =0x00000471
- ldr r5, _08045CC8 @ =gUnknown_825EF0C
- cmp r2, r0
- bhi _08045C7A
- lsls r0, r2, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r7, _08045CCC @ =0x00004e20
- adds r0, r3, r7
- cmp r1, r0
- bne _08045C58
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
-_08045C7A:
- movs r2, 0
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- ldr r1, _08045CCC @ =0x00004e20
- cmp r0, r1
- bhi _08045CB6
- adds r7, r5, 0
- adds r3, r1, 0
-_08045C8C:
- lsls r1, r2, 1
- add r1, r8
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9
- bhi _08045CB6
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, r3
- bls _08045C8C
-_08045CB6:
- lsls r0, r6, 24
- lsrs r0, 24
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08045CC4: .4byte 0x00000471
-_08045CC8: .4byte gUnknown_825EF0C
-_08045CCC: .4byte 0x00004e20
- thumb_func_end GetEggMoves
-
- thumb_func_start BuildEggMoveset
-BuildEggMoveset: @ 8045CD0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- adds r7, r0, 0
- mov r10, r1
- mov r9, r2
- movs r0, 0
- str r0, [sp]
- movs r6, 0
- ldr r5, _08045DD4 @ =gUnknown_2024580
- movs r2, 0
- ldr r4, _08045DD8 @ =gUnknown_202455C
- ldr r3, _08045DDC @ =gUnknown_2024564
-_08045CF0:
- lsls r1, r6, 1
- adds r0, r1, r5
- strh r2, [r0]
- adds r0, r1, r4
- strh r2, [r0]
- adds r1, r3
- strh r2, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _08045CF0
- movs r6, 0
- ldr r2, _08045DE0 @ =gUnknown_202456C
- movs r1, 0
-_08045D0E:
- lsls r0, r6, 1
- adds r0, r2
- strh r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x9
- bls _08045D0E
- movs r6, 0
- ldr r2, _08045DE4 @ =gUnknown_20244F8
- movs r1, 0
-_08045D24:
- lsls r0, r6, 1
- adds r0, r2
- strh r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x31
- bls _08045D24
- adds r0, r7, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08045DE4 @ =gUnknown_20244F8
- bl GetLevelUpMovesBySpecies
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r6, 0
- ldr r1, _08045DD8 @ =gUnknown_202455C
- mov r8, r1
-_08045D52:
- adds r5, r6, 0
- adds r5, 0xD
- mov r0, r10
- adds r1, r5, 0
- bl GetBoxMonData
- lsls r4, r6, 1
- mov r2, r8
- adds r1, r4, r2
- strh r0, [r1]
- mov r0, r9
- adds r1, r5, 0
- bl GetBoxMonData
- ldr r1, _08045DD4 @ =gUnknown_2024580
- adds r4, r1
- strh r0, [r4]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _08045D52
- ldr r1, _08045DE0 @ =gUnknown_202456C
- adds r0, r7, 0
- bl GetEggMoves
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r6, 0
-_08045D8E:
- ldr r0, _08045DD8 @ =gUnknown_202455C
- lsls r1, r6, 1
- adds r2, r1, r0
- ldrh r1, [r2]
- mov r9, r0
- cmp r1, 0
- beq _08045E04
- movs r5, 0
- cmp r5, r8
- bcs _08045DF6
- adds r4, r2, 0
- ldr r2, _08045DE8 @ =0x0000ffff
-_08045DA6:
- ldr r0, _08045DE0 @ =gUnknown_202456C
- lsls r1, r5, 1
- adds r1, r0
- ldrh r0, [r4]
- ldrh r1, [r1]
- cmp r0, r1
- bne _08045DEC
- adds r1, r0, 0
- adds r0, r7, 0
- str r2, [sp, 0x8]
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- ldr r2, [sp, 0x8]
- cmp r0, r2
- bne _08045DF6
- ldrh r1, [r4]
- adds r0, r7, 0
- bl DeleteFirstMoveAndGiveMoveToMon
- b _08045DF6
- .align 2, 0
-_08045DD4: .4byte gUnknown_2024580
-_08045DD8: .4byte gUnknown_202455C
-_08045DDC: .4byte gUnknown_2024564
-_08045DE0: .4byte gUnknown_202456C
-_08045DE4: .4byte gUnknown_20244F8
-_08045DE8: .4byte 0x0000ffff
-_08045DEC:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r8
- bcc _08045DA6
-_08045DF6:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r3, _08045F20 @ =gUnknown_202455C
- mov r9, r3
- cmp r6, 0x3
- bls _08045D8E
-_08045E04:
- movs r6, 0
-_08045E06:
- lsls r0, r6, 1
- mov r2, r9
- adds r1, r0, r2
- ldrh r1, [r1]
- adds r2, r0, 0
- adds r6, 0x1
- mov r8, r6
- cmp r1, 0
- beq _08045E68
- movs r5, 0
- ldr r0, _08045F20 @ =gUnknown_202455C
- adds r4, r2, r0
- ldr r6, _08045F24 @ =0x0000ffff
- mov r9, r0
-_08045E22:
- ldr r3, _08045F28 @ =0x00000121
- adds r0, r5, r3
- lsls r0, 16
- lsrs r0, 16
- bl ItemIdToBattleMoveId
- ldrh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bne _08045E5E
- lsls r1, r5, 24
- lsrs r1, 24
- adds r0, r7, 0
- bl CanMonLearnTMHM
- cmp r0, 0
- beq _08045E5E
- ldrh r1, [r4]
- adds r0, r7, 0
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bne _08045E5E
- ldrh r1, [r4]
- adds r0, r7, 0
- bl DeleteFirstMoveAndGiveMoveToMon
-_08045E5E:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x39
- bls _08045E22
-_08045E68:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _08045E06
- movs r6, 0
- mov r2, r9
- ldrh r0, [r2]
- ldr r3, _08045F2C @ =gUnknown_2024564
- mov r10, r3
- cmp r0, 0
- beq _08045ED2
- mov r4, r9
- ldr r0, _08045F30 @ =gUnknown_2024580
- mov r9, r0
- mov r12, r10
-_08045E88:
- movs r5, 0
- lsls r2, r6, 1
- adds r6, 0x1
- mov r8, r6
- adds r3, r2, r4
-_08045E92:
- lsls r0, r5, 1
- add r0, r9
- ldrh r2, [r3]
- adds r1, r2, 0
- ldrh r0, [r0]
- cmp r1, r0
- bne _08045EB4
- cmp r1, 0
- beq _08045EB4
- ldr r1, [sp]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- lsls r1, 1
- add r1, r12
- strh r2, [r1]
-_08045EB4:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _08045E92
- mov r1, r8
- lsls r0, r1, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bhi _08045ED2
- lsls r0, r6, 1
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0
- bne _08045E88
-_08045ED2:
- movs r6, 0
- mov r2, r10
- ldrh r0, [r2]
- cmp r0, 0
- beq _08045F5C
-_08045EDC:
- movs r5, 0
- adds r3, r6, 0x1
- mov r8, r3
- ldr r0, [sp, 0x4]
- cmp r5, r0
- bcs _08045F44
- ldr r2, _08045F24 @ =0x0000ffff
-_08045EEA:
- ldr r1, _08045F34 @ =gUnknown_20244F8
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- cmp r1, 0
- beq _08045F38
- lsls r0, r6, 1
- mov r3, r10
- adds r4, r0, r3
- ldrh r0, [r4]
- cmp r0, r1
- bne _08045F38
- adds r1, r0, 0
- adds r0, r7, 0
- str r2, [sp, 0x8]
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- ldr r2, [sp, 0x8]
- cmp r0, r2
- bne _08045F44
- ldrh r1, [r4]
- adds r0, r7, 0
- bl DeleteFirstMoveAndGiveMoveToMon
- b _08045F44
- .align 2, 0
-_08045F20: .4byte gUnknown_202455C
-_08045F24: .4byte 0x0000ffff
-_08045F28: .4byte 0x00000121
-_08045F2C: .4byte gUnknown_2024564
-_08045F30: .4byte gUnknown_2024580
-_08045F34: .4byte gUnknown_20244F8
-_08045F38:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, [sp, 0x4]
- cmp r5, r0
- bcc _08045EEA
-_08045F44:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bhi _08045F5C
- ldr r0, _08045F6C @ =gUnknown_2024564
- lsls r1, r6, 1
- adds r1, r0
- ldrh r1, [r1]
- mov r10, r0
- cmp r1, 0
- bne _08045EDC
-_08045F5C:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045F6C: .4byte gUnknown_2024564
- thumb_func_end BuildEggMoveset
-
- thumb_func_start RemoveEggFromDayCare
-RemoveEggFromDayCare: @ 8045F70
- adds r3, r0, 0
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r3, r1
- movs r2, 0
- movs r1, 0
- strh r1, [r0]
- movs r1, 0x8D
- lsls r1, 1
- adds r0, r3, r1
- strb r2, [r0]
- bx lr
- thumb_func_end RemoveEggFromDayCare
-
- thumb_func_start RejectEggFromDayCare
-RejectEggFromDayCare: @ 8045F88
- push {lr}
- ldr r0, _08045F9C @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl RemoveEggFromDayCare
- pop {r0}
- bx r0
- .align 2, 0
-_08045F9C: .4byte gSaveBlock1Ptr
- thumb_func_end RejectEggFromDayCare
-
- thumb_func_start sub_8045FA0
-sub_8045FA0: @ 8045FA0
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrh r1, [r4]
- movs r7, 0xB4
- lsls r7, 1
- cmp r1, r7
- beq _08045FB8
- movs r0, 0xAF
- lsls r0, 1
- cmp r1, r0
- bne _08045FFA
-_08045FB8:
- adds r0, r5, 0
- movs r1, 0xC
- bl GetBoxMonData
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r5, 0
- adds r0, 0x8C
- movs r1, 0xC
- bl GetBoxMonData
- lsls r0, 16
- lsrs r2, r0, 16
- ldrh r0, [r4]
- cmp r0, r7
- bne _08045FE4
- cmp r6, 0xDD
- beq _08045FE4
- cmp r2, 0xDD
- beq _08045FE4
- movs r0, 0xCA
- strh r0, [r4]
-_08045FE4:
- ldrh r1, [r4]
- movs r0, 0xAF
- lsls r0, 1
- cmp r1, r0
- bne _08045FFA
- cmp r6, 0xDC
- beq _08045FFA
- cmp r2, 0xDC
- beq _08045FFA
- movs r0, 0xB7
- strh r0, [r4]
-_08045FFA:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8045FA0
-
- thumb_func_start sub_8046000
-sub_8046000: @ 8046000
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r8, r0
- adds r6, r1, 0
- movs r4, 0
- movs r7, 0x1
-_08046010:
- movs r0, 0x8C
- muls r0, r4
- mov r1, r8
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0xB
- bl GetBoxMonData
- lsls r1, r4, 1
- add r1, sp
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x84
- bne _08046038
- adds r0, r4, 0
- eors r0, r7
- strb r0, [r6]
- strb r4, [r6, 0x1]
- b _0804604E
-_08046038:
- adds r0, r5, 0
- bl GetBoxMonGender
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFE
- bne _0804604E
- strb r4, [r6]
- adds r0, r4, 0
- eors r0, r7
- strb r0, [r6, 0x1]
-_0804604E:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _08046010
- ldrb r0, [r6]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- bl sub_8045970
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1D
- bne _08046080
- movs r0, 0x8C
- lsls r0, 1
- add r0, r8
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _08046080
- movs r4, 0x20
-_08046080:
- ldr r0, _080460D0 @ =0x00000183
- cmp r4, r0
- bne _0804609A
- subs r0, 0x6B
- add r0, r8
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _0804609A
- movs r4, 0xC1
- lsls r4, 1
-_0804609A:
- ldrb r0, [r6, 0x1]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- cmp r0, 0x84
- bne _080460C2
- ldrb r1, [r6]
- movs r0, 0x8C
- muls r0, r1
- add r0, r8
- bl GetBoxMonGender
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFE
- beq _080460C2
- ldrb r1, [r6, 0x1]
- ldrb r0, [r6]
- strb r0, [r6, 0x1]
- strb r1, [r6]
-_080460C2:
- adds r0, r4, 0
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080460D0: .4byte 0x00000183
- thumb_func_end sub_8046000
-
- thumb_func_start sub_80460D4
-sub_80460D4: @ 80460D4
- push {r4-r6,lr}
- sub sp, 0x6C
- adds r5, r0, 0
- add r6, sp, 0x64
- adds r1, r6, 0
- bl sub_8046000
- add r4, sp, 0x68
- strh r0, [r4]
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8045FA0
- ldrh r1, [r4]
- mov r0, sp
- adds r2, r5, 0
- bl SetInitialEggData
- mov r0, sp
- adds r1, r5, 0
- bl InheritIVs
- ldrb r0, [r6, 0x1]
- movs r2, 0x8C
- adds r1, r0, 0
- muls r1, r2
- adds r1, r5, r1
- ldrb r0, [r6]
- muls r2, r0
- adds r2, r5, r2
- mov r0, sp
- bl BuildEggMoveset
- mov r2, sp
- adds r2, 0x6A
- movs r0, 0x1
- strb r0, [r2]
- mov r0, sp
- movs r1, 0x2D
- bl SetMonData
- ldr r0, _0804614C @ =gPlayerParty
- movs r1, 0xFA
- lsls r1, 1
- adds r0, r1
- mov r1, sp
- movs r2, 0x64
- bl memcpy
- bl CompactPartySlots
- bl CalculatePlayerPartyCount
- adds r0, r5, 0
- bl RemoveEggFromDayCare
- add sp, 0x6C
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0804614C: .4byte gPlayerParty
- thumb_func_end sub_80460D4
-
- thumb_func_start CreateEgg
-CreateEgg: @ 8046150
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- adds r7, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- movs r4, 0
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- str r4, [sp, 0xC]
- adds r1, r5, 0
- movs r2, 0x5
- movs r3, 0x20
- bl CreateMon
- movs r0, 0x12
- add r0, sp
- mov r8, r0
- strb r4, [r0]
- movs r1, 0x4
- add r0, sp, 0x10
- strh r1, [r0]
- mov r4, sp
- adds r4, 0x13
- movs r0, 0x1
- mov r9, r0
- mov r0, r9
- strb r0, [r4]
- adds r0, r7, 0
- movs r1, 0x26
- add r2, sp, 0x10
- bl SetMonData
- ldr r2, _08046200 @ =gUnknown_825F83E
- adds r0, r7, 0
- movs r1, 0x2
- bl SetMonData
- lsls r2, r5, 3
- subs r2, r5
- lsls r2, 2
- ldr r0, _08046204 @ =gUnknown_8254795
- adds r2, r0
- adds r0, r7, 0
- movs r1, 0x20
- bl SetMonData
- adds r0, r7, 0
- movs r1, 0x24
- mov r2, r8
- bl SetMonData
- adds r0, r7, 0
- movs r1, 0x3
- adds r2, r4, 0
- bl SetMonData
- cmp r6, 0
- beq _080461E2
- add r2, sp, 0x14
- movs r0, 0xFD
- strb r0, [r2]
- adds r0, r7, 0
- movs r1, 0x23
- bl SetMonData
-_080461E2:
- mov r2, sp
- adds r2, 0x15
- mov r0, r9
- strb r0, [r2]
- adds r0, r7, 0
- movs r1, 0x2D
- bl SetMonData
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08046200: .4byte gUnknown_825F83E
-_08046204: .4byte gUnknown_8254795
- thumb_func_end CreateEgg
-
- thumb_func_start SetInitialEggData
-SetInitialEggData: @ 8046208
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x14
- adds r6, r0, 0
- adds r5, r1, 0
- adds r4, r2, 0
- lsls r5, 16
- lsrs r5, 16
- bl Random
- movs r1, 0x8C
- lsls r1, 1
- adds r4, r1
- ldrh r1, [r4]
- lsls r0, 16
- orrs r1, r0
- movs r0, 0x1
- mov r8, r0
- str r0, [sp]
- str r1, [sp, 0x4]
- movs r4, 0
- str r4, [sp, 0x8]
- str r4, [sp, 0xC]
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x5
- movs r3, 0x20
- bl CreateMon
- movs r1, 0x12
- add r1, sp
- mov r9, r1
- strb r4, [r1]
- movs r1, 0x4
- add r0, sp, 0x10
- strh r1, [r0]
- mov r4, sp
- adds r4, 0x13
- mov r0, r8
- strb r0, [r4]
- adds r0, r6, 0
- movs r1, 0x26
- add r2, sp, 0x10
- bl SetMonData
- ldr r2, _080462A4 @ =gUnknown_825F83E
- adds r0, r6, 0
- movs r1, 0x2
- bl SetMonData
- lsls r2, r5, 3
- subs r2, r5
- lsls r2, 2
- ldr r0, _080462A8 @ =gUnknown_8254795
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x20
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x24
- mov r2, r9
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3
- adds r2, r4, 0
- bl SetMonData
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080462A4: .4byte gUnknown_825F83E
-_080462A8: .4byte gUnknown_8254795
- thumb_func_end SetInitialEggData
-
- thumb_func_start GiveEggFromDaycare
-GiveEggFromDaycare: @ 80462AC
- push {lr}
- ldr r0, _080462C0 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl sub_80460D4
- pop {r0}
- bx r0
- .align 2, 0
-_080462C0: .4byte gSaveBlock1Ptr
- thumb_func_end GiveEggFromDaycare
-
- thumb_func_start sub_80462C4
-sub_80462C4: @ 80462C4
- push {r4-r7,lr}
- sub sp, 0x4
- adds r6, r0, 0
- movs r7, 0
- movs r5, 0
-_080462CE:
- movs r0, 0x8C
- adds r4, r5, 0
- muls r4, r0
- adds r0, r6, r4
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _080462EE
- adds r1, r6, 0
- adds r1, 0x88
- adds r1, r4
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- adds r7, 0x1
-_080462EE:
- adds r5, 0x1
- cmp r5, 0x1
- bls _080462CE
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r6, r1
- ldrh r0, [r0]
- cmp r0, 0
- bne _08046334
- cmp r7, 0x2
- bne _08046334
- subs r1, 0x4
- adds r0, r6, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08046334
- adds r0, r6, 0
- bl GetDaycareCompatibilityScore
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0804634C @ =0x0000ffff
- bl __udivsi3
- cmp r4, r0
- bls _08046334
- bl sub_8045A48
-_08046334:
- movs r0, 0x8D
- lsls r0, 1
- adds r1, r6, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080463A8
- movs r5, 0
- b _080463A0
- .align 2, 0
-_0804634C: .4byte 0x0000ffff
-_08046350:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _08046388 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _0804639E
- adds r0, r4, 0
- movs r1, 0x4
- bl GetMonData
- cmp r0, 0
- bne _0804639E
- adds r0, r4, 0
- movs r1, 0x20
- bl GetMonData
- str r0, [sp]
- cmp r0, 0
- bne _08046390
- ldr r0, _0804638C @ =gSpecialVar_0x8004
- strh r5, [r0]
- movs r0, 0x1
- b _080463AA
- .align 2, 0
-_08046388: .4byte gPlayerParty
-_0804638C: .4byte gSpecialVar_0x8004
-_08046390:
- subs r0, 0x1
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x20
- mov r2, sp
- bl SetMonData
-_0804639E:
- adds r5, 0x1
-_080463A0:
- ldr r0, _080463B4 @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r5, r0
- bcc _08046350
-_080463A8:
- movs r0, 0
-_080463AA:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080463B4: .4byte gPlayerPartyCount
- thumb_func_end sub_80462C4
-
- thumb_func_start sub_80463B8
-sub_80463B8: @ 80463B8
- push {r4,lr}
- ldr r4, _080463F0 @ =gSaveBlock1Ptr
- ldr r0, [r4]
- ldr r1, _080463F4 @ =0x00003c98
- adds r0, r1
- movs r1, 0x5
- bl GetBoxMonData
- cmp r0, 0
- beq _080463D8
- ldr r1, [r4]
- ldr r0, _080463F8 @ =0x00003d20
- adds r1, r0
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_080463D8:
- ldr r0, [r4]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl sub_80462C4
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080463F0: .4byte gSaveBlock1Ptr
-_080463F4: .4byte 0x00003c98
-_080463F8: .4byte 0x00003d20
- thumb_func_end sub_80463B8
-
- thumb_func_start sub_80463FC
-sub_80463FC: @ 80463FC
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r1
- ldrh r1, [r0]
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- bx lr
- thumb_func_end sub_80463FC
-
- thumb_func_start _GetDaycareMonNicknames
-_GetDaycareMonNicknames: @ 804640C
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _08046436
- ldr r1, _08046454 @ =gStringVar1
- adds r0, r4, 0
- bl GetBoxMonNick
- adds r0, r4, 0
- movs r1, 0x7
- mov r2, sp
- bl GetBoxMonData
- ldr r0, _08046458 @ =gStringVar3
- mov r1, sp
- bl StringCopy
-_08046436:
- adds r4, 0x8C
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _0804644C
- ldr r1, _0804645C @ =gStringVar2
- adds r0, r4, 0
- bl GetBoxMonNick
-_0804644C:
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08046454: .4byte gStringVar1
-_08046458: .4byte gStringVar3
-_0804645C: .4byte gStringVar2
- thumb_func_end _GetDaycareMonNicknames
-
- thumb_func_start GetSelectedMonNickAndSpecies
-GetSelectedMonNickAndSpecies: @ 8046460
- push {r4,r5,lr}
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r5, 0x64
- muls r0, r5
- ldr r4, _08046494 @ =gPlayerParty
- adds r0, r4
- ldr r1, _08046498 @ =gStringVar1
- bl GetBoxMonNick
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- muls r0, r5
- adds r0, r4
- movs r1, 0xB
- bl GetBoxMonData
- lsls r0, 16
- lsrs r0, 16
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08046494: .4byte gPlayerParty
-_08046498: .4byte gStringVar1
- thumb_func_end GetSelectedMonNickAndSpecies
-
- thumb_func_start GetDaycareMonNicknames
-GetDaycareMonNicknames: @ 804649C
- push {lr}
- ldr r0, _080464B0 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl _GetDaycareMonNicknames
- pop {r0}
- bx r0
- .align 2, 0
-_080464B0: .4byte gSaveBlock1Ptr
- thumb_func_end GetDaycareMonNicknames
-
- thumb_func_start sub_80464B4
-sub_80464B4: @ 80464B4
- push {r4,lr}
- ldr r4, _080464D0 @ =gSaveBlock1Ptr
- ldr r0, [r4]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl sub_80463FC
- lsls r0, 24
- cmp r0, 0
- beq _080464D4
- movs r0, 0x1
- b _080464F2
- .align 2, 0
-_080464D0: .4byte gSaveBlock1Ptr
-_080464D4:
- ldr r0, [r4]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl CountPokemonInDaycare
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080464EC
- movs r0, 0
- b _080464F2
-_080464EC:
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
-_080464F2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80464B4
-
- thumb_func_start GetDaycarePokemonCount
-GetDaycarePokemonCount: @ 80464F8
- push {lr}
- ldr r0, _08046518 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl CountPokemonInDaycare
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08046512
- movs r0, 0
-_08046512:
- pop {r1}
- bx r1
- .align 2, 0
-_08046518: .4byte gSaveBlock1Ptr
- thumb_func_end GetDaycarePokemonCount
-
- thumb_func_start EggGroupsOverlap
-EggGroupsOverlap: @ 804651C
- push {r4-r6,lr}
- adds r5, r1, 0
- movs r4, 0
- adds r1, r0, 0
-_08046524:
- movs r3, 0
- ldrh r0, [r1]
- adds r2, r5, 0
-_0804652A:
- ldrh r6, [r2]
- cmp r0, r6
- bne _08046534
- movs r0, 0x1
- b _08046546
-_08046534:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x1
- ble _0804652A
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x1
- ble _08046524
- movs r0, 0
-_08046546:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end EggGroupsOverlap
-
- thumb_func_start GetDaycareCompatibilityScore
-GetDaycareCompatibilityScore: @ 804654C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x30
- str r0, [sp, 0x1C]
- movs r7, 0
- mov r0, sp
- adds r0, 0x8
- str r0, [sp, 0x20]
- add r1, sp, 0xC
- mov r9, r1
- mov r2, sp
- adds r2, 0x14
- str r2, [sp, 0x24]
- subs r0, 0x6
- ldr r1, _08046600 @ =gBaseStats
- mov r10, r1
- ldr r5, [sp, 0x20]
- mov r8, r0
- mov r6, sp
- str r2, [sp, 0x28]
- mov r2, r9
- str r2, [sp, 0x2C]
-_0804657E:
- movs r0, 0x8C
- adds r4, r7, 0
- muls r4, r0
- ldr r0, [sp, 0x1C]
- adds r4, r0, r4
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- strh r0, [r5]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetBoxMonData
- ldr r1, [sp, 0x2C]
- stm r1!, {r0}
- str r1, [sp, 0x2C]
- adds r0, r4, 0
- movs r1, 0
- bl GetBoxMonData
- adds r1, r0, 0
- ldrh r0, [r5]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [sp, 0x28]
- stm r2!, {r0}
- str r2, [sp, 0x28]
- ldrh r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r10
- ldrb r0, [r0, 0x14]
- strh r0, [r6]
- ldrh r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r10
- ldrb r0, [r0, 0x15]
- mov r1, r8
- strh r0, [r1]
- adds r5, 0x2
- movs r2, 0x4
- add r8, r2
- adds r6, 0x4
- adds r7, 0x1
- cmp r7, 0x1
- bls _0804657E
- mov r0, sp
- ldrh r1, [r0]
- cmp r1, 0xF
- beq _080465FC
- ldrh r0, [r0, 0x4]
- cmp r0, 0xF
- beq _080465FC
- cmp r1, 0xD
- bne _08046604
- cmp r0, 0xD
- bne _08046608
-_080465FC:
- movs r0, 0
- b _0804665C
- .align 2, 0
-_08046600: .4byte gBaseStats
-_08046604:
- cmp r0, 0xD
- bne _08046614
-_08046608:
- ldr r1, [sp, 0xC]
- mov r2, r9
- ldr r0, [r2, 0x4]
- cmp r1, r0
- beq _08046656
- b _0804665A
-_08046614:
- ldr r0, [sp, 0x14]
- ldr r2, [sp, 0x24]
- ldr r1, [r2, 0x4]
- cmp r0, r1
- beq _080465FC
- cmp r0, 0xFF
- beq _080465FC
- cmp r1, 0xFF
- beq _080465FC
- add r1, sp, 0x4
- mov r0, sp
- bl EggGroupsOverlap
- lsls r0, 24
- cmp r0, 0
- beq _080465FC
- ldr r0, [sp, 0x20]
- ldrh r1, [r0, 0x2]
- ldrh r0, [r0]
- cmp r0, r1
- bne _0804664C
- ldr r1, [sp, 0xC]
- mov r2, r9
- ldr r0, [r2, 0x4]
- cmp r1, r0
- beq _0804665A
- movs r0, 0x46
- b _0804665C
-_0804664C:
- ldr r1, [sp, 0xC]
- mov r2, r9
- ldr r0, [r2, 0x4]
- cmp r1, r0
- bne _0804665A
-_08046656:
- movs r0, 0x14
- b _0804665C
-_0804665A:
- movs r0, 0x32
-_0804665C:
- add sp, 0x30
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetDaycareCompatibilityScore
-
- thumb_func_start GetDaycareCompatibilityScoreFromSave
-GetDaycareCompatibilityScoreFromSave: @ 804666C
- push {lr}
- ldr r0, _08046684 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xBE
- lsls r1, 6
- adds r0, r1
- bl GetDaycareCompatibilityScore
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08046684: .4byte gSaveBlock1Ptr
- thumb_func_end GetDaycareCompatibilityScoreFromSave
-
- thumb_func_start SetDaycareCompatibilityString
-SetDaycareCompatibilityString: @ 8046688
- push {lr}
- bl GetDaycareCompatibilityScoreFromSave
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- movs r1, 0
- cmp r0, 0
- bne _0804669C
- movs r1, 0x3
-_0804669C:
- cmp r0, 0x14
- bne _080466A2
- movs r1, 0x2
-_080466A2:
- cmp r0, 0x32
- bne _080466A8
- movs r1, 0x1
-_080466A8:
- cmp r2, 0x46
- bne _080466AE
- movs r1, 0
-_080466AE:
- ldr r0, _080466C0 @ =gStringVar4
- ldr r2, _080466C4 @ =gUnknown_825F82C
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- pop {r0}
- bx r0
- .align 2, 0
-_080466C0: .4byte gStringVar4
-_080466C4: .4byte gUnknown_825F82C
- thumb_func_end SetDaycareCompatibilityString
-
- thumb_func_start NameHasGenderSymbol
-NameHasGenderSymbol: @ 80466C8
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- mov r2, sp
- mov r1, sp
- movs r0, 0
- strb r0, [r1, 0x1]
- strb r0, [r2]
- movs r3, 0
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _0804670C
-_080466E4:
- adds r1, r4, r3
- ldrb r0, [r1]
- cmp r0, 0xB5
- bne _080466F2
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
-_080466F2:
- ldrb r0, [r1]
- cmp r0, 0xB6
- bne _080466FE
- ldrb r0, [r2, 0x1]
- adds r0, 0x1
- strb r0, [r2, 0x1]
-_080466FE:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- adds r0, r4, r3
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080466E4
-_0804670C:
- cmp r5, 0
- bne _08046720
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- beq _08046720
- mov r0, sp
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08046734
-_08046720:
- cmp r5, 0xFE
- bne _08046738
- mov r0, sp
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08046738
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- bne _08046738
-_08046734:
- movs r0, 0x1
- b _0804673A
-_08046738:
- movs r0, 0
-_0804673A:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end NameHasGenderSymbol
-
- thumb_func_start AppendGenderSymbol
-AppendGenderSymbol: @ 8046744
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0
- bne _08046764
- movs r1, 0
- bl NameHasGenderSymbol
- lsls r0, 24
- cmp r0, 0
- bne _08046780
- ldr r1, _08046760 @ =gUnknown_8261EC1
- b _08046782
- .align 2, 0
-_08046760: .4byte gUnknown_8261EC1
-_08046764:
- cmp r1, 0xFE
- bne _08046780
- adds r0, r4, 0
- movs r1, 0xFE
- bl NameHasGenderSymbol
- lsls r0, 24
- cmp r0, 0
- bne _08046780
- ldr r1, _0804677C @ =gUnknown_8261EC3
- b _08046782
- .align 2, 0
-_0804677C: .4byte gUnknown_8261EC3
-_08046780:
- ldr r1, _08046790 @ =gUnknown_8261EC5
-_08046782:
- adds r0, r4, 0
- bl StringAppend
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08046790: .4byte gUnknown_8261EC5
- thumb_func_end AppendGenderSymbol
-
- thumb_func_start AppendMonGenderSymbol
-AppendMonGenderSymbol: @ 8046794
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- bl GetBoxMonGender
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl AppendGenderSymbol
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end AppendMonGenderSymbol
-
- thumb_func_start GetDaycareLevelMenuText
-GetDaycareLevelMenuText: @ 80467B0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x28
- mov r8, r0
- adds r7, r1, 0
- movs r0, 0xFF
- strb r0, [r7]
- movs r6, 0
- add r0, sp, 0x14
- mov r9, r0
-_080467C8:
- movs r0, 0x8C
- adds r4, r6, 0
- muls r4, r0
- add r4, r8
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 2
- mov r1, sp
- adds r5, r1, r0
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetBoxMonNick
- adds r0, r5, 0
- adds r1, r4, 0
- bl AppendMonGenderSymbol
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x1
- bls _080467C8
- adds r0, r7, 0
- mov r1, sp
- bl StringCopy
- ldr r4, _0804682C @ =gUnknown_825F83C
- adds r0, r7, 0
- adds r1, r4, 0
- bl StringAppend
- adds r0, r7, 0
- mov r1, r9
- bl StringAppend
- adds r0, r7, 0
- adds r1, r4, 0
- bl StringAppend
- ldr r1, _08046830 @ =gOtherText_Exit
- adds r0, r7, 0
- bl StringAppend
- add sp, 0x28
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804682C: .4byte gUnknown_825F83C
-_08046830: .4byte gOtherText_Exit
- thumb_func_end GetDaycareLevelMenuText
-
- thumb_func_start GetDaycareLevelMenuLevelText
-GetDaycareLevelMenuLevelText: @ 8046834
- push {r4-r6,lr}
- sub sp, 0x14
- adds r6, r0, 0
- adds r4, r1, 0
- movs r0, 0xFF
- strb r0, [r4]
- movs r5, 0
-_08046842:
- adds r0, r4, 0
- ldr r1, _08046890 @ =gUnknown_8416223
- bl StringAppend
- movs r0, 0x8C
- adds r2, r5, 0
- muls r2, r0
- adds r0, r6, r2
- adds r1, r6, 0
- adds r1, 0x88
- adds r1, r2
- ldr r1, [r1]
- bl GetLevelAfterDaycareSteps
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, sp
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r0, r4, 0
- mov r1, sp
- bl StringAppend
- adds r0, r4, 0
- ldr r1, _08046894 @ =gUnknown_825F83C
- bl StringAppend
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _08046842
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08046890: .4byte gUnknown_8416223
-_08046894: .4byte gUnknown_825F83C
- thumb_func_end GetDaycareLevelMenuLevelText
-
- thumb_func_start DaycareAddTextPrinter
-DaycareAddTextPrinter: @ 8046898
- push {r4,r5,lr}
- sub sp, 0x10
- str r1, [sp]
- mov r1, sp
- strb r0, [r1, 0x4]
- movs r0, 0x3
- strb r0, [r1, 0x5]
- mov r0, sp
- strb r2, [r0, 0x6]
- strb r3, [r0, 0x7]
- strb r2, [r0, 0x8]
- strb r3, [r0, 0x9]
- mov r3, sp
- ldrb r1, [r3, 0xC]
- movs r2, 0x10
- negs r2, r2
- adds r0, r2, 0
- ands r0, r1
- strb r0, [r3, 0xC]
- ldr r3, _08046908 @ =gTextFlags
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- mov r0, sp
- movs r5, 0x1
- movs r1, 0x1
- strb r1, [r0, 0xA]
- strb r1, [r0, 0xB]
- mov r3, sp
- ldrb r1, [r3, 0xC]
- movs r4, 0xF
- adds r0, r4, 0
- ands r0, r1
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r3, 0xC]
- mov r1, sp
- ldrb r0, [r1, 0xD]
- ands r2, r0
- orrs r2, r5
- strb r2, [r1, 0xD]
- ands r2, r4
- movs r0, 0x30
- orrs r2, r0
- strb r2, [r1, 0xD]
- mov r0, sp
- movs r1, 0xFF
- movs r2, 0
- bl AddTextPrinter
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08046908: .4byte gTextFlags
- thumb_func_end DaycareAddTextPrinter
-
- thumb_func_start DaycarePrintMonNick
-DaycarePrintMonNick: @ 804690C
- push {r4-r6,lr}
- sub sp, 0x14
- adds r5, r0, 0
- adds r4, r1, 0
- adds r6, r3, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x8C
- muls r0, r2
- adds r5, r0
- adds r0, r5, 0
- mov r1, sp
- bl GetBoxMonNick
- mov r0, sp
- adds r1, r5, 0
- bl AppendMonGenderSymbol
- adds r0, r4, 0
- mov r1, sp
- movs r2, 0x8
- adds r3, r6, 0
- bl DaycareAddTextPrinter
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end DaycarePrintMonNick
-
- thumb_func_start DaycarePrintMonLvl
-DaycarePrintMonLvl: @ 8046944
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x14
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r8, r3
- lsls r5, 24
- lsrs r5, 24
- ldr r1, _080469B0 @ =gUnknown_8416223
- mov r0, sp
- bl strcpy
- movs r0, 0x8C
- adds r1, r6, 0
- muls r1, r0
- adds r0, r4, r1
- adds r4, 0x88
- adds r4, r1
- ldr r1, [r4]
- bl GetLevelAfterDaycareSteps
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- add r4, sp, 0xC
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- mov r0, sp
- adds r1, r4, 0
- bl StringAppend
- movs r0, 0x3
- mov r1, sp
- movs r2, 0
- bl GetStringWidth
- movs r2, 0x84
- subs r2, r0
- adds r0, r5, 0
- mov r1, sp
- mov r3, r8
- bl DaycareAddTextPrinter
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080469B0: .4byte gUnknown_8416223
- thumb_func_end DaycarePrintMonLvl
-
- thumb_func_start DaycarePrintMonInfo
-DaycarePrintMonInfo: @ 80469B4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r2, 24
- lsrs r5, r2, 24
- cmp r6, 0x1
- bhi _080469EE
- ldr r0, _080469F8 @ =gSaveBlock1Ptr
- mov r8, r0
- ldr r0, [r0]
- movs r4, 0xBE
- lsls r4, 6
- adds r0, r4
- adds r1, r7, 0
- adds r2, r6, 0
- adds r3, r5, 0
- bl DaycarePrintMonNick
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- adds r1, r7, 0
- adds r2, r6, 0
- adds r3, r5, 0
- bl DaycarePrintMonLvl
-_080469EE:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080469F8: .4byte gSaveBlock1Ptr
- thumb_func_end DaycarePrintMonInfo
-
- thumb_func_start Task_HandleDaycareLevelMenuInput
-Task_HandleDaycareLevelMenuInput: @ 80469FC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r1, _08046A2C @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrb r0, [r4, 0x8]
- bl ListMenuHandleInput
- adds r1, r0, 0
- ldr r0, _08046A30 @ =gMain
- ldrh r2, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _08046A7C
- cmp r1, 0x1
- bls _08046A34
- cmp r1, 0x5
- beq _08046A40
- b _08046A46
- .align 2, 0
-_08046A2C: .4byte gTasks
-_08046A30: .4byte gMain
-_08046A34:
- ldr r0, _08046A3C @ =gSpecialVar_Result
- strh r1, [r0]
- b _08046A46
- .align 2, 0
-_08046A3C: .4byte gSpecialVar_Result
-_08046A40:
- ldr r1, _08046A74 @ =gSpecialVar_Result
- movs r0, 0x2
- strh r0, [r1]
-_08046A46:
- ldr r0, _08046A78 @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r0, [r4, 0x8]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenu
- ldrb r0, [r4, 0xA]
- movs r1, 0x1
- bl ClearStdWindowAndFrame
- ldrb r0, [r4, 0xA]
- bl RemoveWindow
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
- b _08046AAC
- .align 2, 0
-_08046A74: .4byte gSpecialVar_Result
-_08046A78: .4byte gTasks
-_08046A7C:
- movs r1, 0x2
- adds r0, r1, 0
- ands r0, r2
- cmp r0, 0
- beq _08046AAC
- ldr r0, _08046AB4 @ =gSpecialVar_Result
- strh r1, [r0]
- ldrb r0, [r4, 0x8]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenu
- ldrb r0, [r4, 0xA]
- movs r1, 0x1
- bl ClearStdWindowAndFrame
- ldrb r0, [r4, 0xA]
- bl RemoveWindow
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_08046AAC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08046AB4: .4byte gSpecialVar_Result
- thumb_func_end Task_HandleDaycareLevelMenuInput
-
- thumb_func_start ShowDaycareLevelMenu
-ShowDaycareLevelMenu: @ 8046AB8
- push {r4,r5,lr}
- sub sp, 0x18
- ldr r0, _08046B18 @ =gUnknown_825F7F4
- bl AddWindow
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl DrawStdWindowFrame
- mov r1, sp
- ldr r0, _08046B1C @ =gUnknown_825F814
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- mov r0, sp
- strb r4, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r4, 0
- movs r1, 0x3
- bl CopyWindowToVram
- ldr r0, _08046B20 @ =Task_HandleDaycareLevelMenuInput
- movs r1, 0x3
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08046B24 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r5, [r1, 0x8]
- strh r4, [r1, 0xA]
- add sp, 0x18
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08046B18: .4byte gUnknown_825F7F4
-_08046B1C: .4byte gUnknown_825F814
-_08046B20: .4byte Task_HandleDaycareLevelMenuInput
-_08046B24: .4byte gTasks
- thumb_func_end ShowDaycareLevelMenu
-
- thumb_func_start ChooseSendDaycareMon
-ChooseSendDaycareMon: @ 8046B28
- push {lr}
- bl sub_8128370
- ldr r1, _08046B38 @ =gMain
- ldr r0, _08046B3C @ =c2_exit_to_overworld_2_switch
- str r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_08046B38: .4byte gMain
-_08046B3C: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end ChooseSendDaycareMon
-
- thumb_func_start sub_8046B40
-sub_8046B40: @ 8046B40
- push {lr}
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _08046B64 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08046B68 @ =gSaveBlock1Ptr
- ldr r1, [r1]
- ldr r2, _08046B6C @ =0x00003c98
- adds r1, r2
- bl StorePokemonInDaycare
- pop {r0}
- bx r0
- .align 2, 0
-_08046B64: .4byte gPlayerParty
-_08046B68: .4byte gSaveBlock1Ptr
-_08046B6C: .4byte 0x00003c98
- thumb_func_end sub_8046B40
-
- thumb_func_start sub_8046B70
-sub_8046B70: @ 8046B70
- push {lr}
- ldr r0, _08046B88 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08046B8C @ =0x00003c98
- adds r0, r1
- bl GetDaycareCostForSelectedMon
- ldr r1, _08046B90 @ =gSpecialVar_0x8005
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08046B88: .4byte gSaveBlock1Ptr
-_08046B8C: .4byte 0x00003c98
-_08046B90: .4byte gSpecialVar_0x8005
- thumb_func_end sub_8046B70
-
- thumb_func_start sub_8046B94
-sub_8046B94: @ 8046B94
- push {lr}
- ldr r0, _08046BAC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08046BB0 @ =0x00003c98
- adds r0, r1
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- bne _08046BB4
- movs r0, 0
- b _08046BB6
- .align 2, 0
-_08046BAC: .4byte gSaveBlock1Ptr
-_08046BB0: .4byte 0x00003c98
-_08046BB4:
- movs r0, 0x1
-_08046BB6:
- pop {r1}
- bx r1
- thumb_func_end sub_8046B94
-
- thumb_func_start sub_8046BBC
-sub_8046BBC: @ 8046BBC
- push {lr}
- ldr r0, _08046BD4 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08046BD8 @ =0x00003c98
- adds r0, r1
- bl GetNumLevelsGainedForDaycareMon
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08046BD4: .4byte gSaveBlock1Ptr
-_08046BD8: .4byte 0x00003c98
- thumb_func_end sub_8046BBC
-
- thumb_func_start sub_8046BDC
-sub_8046BDC: @ 8046BDC
- push {lr}
- ldr r0, _08046BF4 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08046BF8 @ =0x00003c98
- adds r0, r1
- bl TakeSelectedPokemonFromDaycare
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08046BF4: .4byte gSaveBlock1Ptr
-_08046BF8: .4byte 0x00003c98
- thumb_func_end sub_8046BDC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index d1d1a6812..67e7e7d5a 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -1828,7 +1828,7 @@ _0806D6EC:
.align 2, 0
_0806D700: .4byte gUnknown_81A8DFD
_0806D704:
- bl sub_80463B8
+ bl ShouldEggHatch
lsls r0, 24
cmp r0, 0
beq _0806D720
diff --git a/asm/party_menu.s b/asm/party_menu.s
index b512bd751..385279a57 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -5909,7 +5909,7 @@ sub_8121808: @ 8121808
movs r3, 0x3
bl ConvertIntToDecimalStringN
ldr r4, _0812184C @ =gStringVar1
- ldr r1, _08121850 @ =gUnknown_8416223
+ ldr r1, _08121850 @ =gText_Lv
adds r0, r4, 0
bl StringCopy
adds r0, r4, 0
@@ -5927,7 +5927,7 @@ sub_8121808: @ 8121808
.align 2, 0
_08121848: .4byte gStringVar2
_0812184C: .4byte gStringVar1
-_08121850: .4byte gUnknown_8416223
+_08121850: .4byte gText_Lv
thumb_func_end sub_8121808
thumb_func_start sub_8121854
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index 62cedeb88..8cc6afe0f 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -3549,7 +3549,7 @@ _08136264:
ldr r0, [r6]
ldr r4, _08136328 @ =0x00003088
adds r0, r4
- ldr r1, _0813632C @ =gUnknown_8416223
+ ldr r1, _0813632C @ =gText_Lv
bl StringCopy
ldr r0, [r6]
adds r0, r4
@@ -3580,7 +3580,7 @@ _0813631C: .4byte 0x00003290
_08136320: .4byte 0x0000ffff
_08136324: .4byte 0x0000306c
_08136328: .4byte 0x00003088
-_0813632C: .4byte gUnknown_8416223
+_0813632C: .4byte gText_Lv
_08136330: .4byte 0x00003074
_08136334: .4byte gUnknown_84161EF
_08136338:
diff --git a/data/data.s b/data/data.s
index 85c5d8aa4..be1a76d2e 100644
--- a/data/data.s
+++ b/data/data.s
@@ -555,23 +555,9 @@ gUnknown_825E2F4:: @ 825E2F4
.section .rodata.825EF0C
-gUnknown_825EF0C:: @ 825EF0C
- .incbin "baserom.gba", 0x25EF0C, 0x8E8
-
-gUnknown_825F7F4:: @ 825F7F4
- .incbin "baserom.gba", 0x25F7F4, 0x20
-
-gUnknown_825F814:: @ 825F814
- .incbin "baserom.gba", 0x25F814, 0x18
-
-gUnknown_825F82C:: @ 825F82C
- .incbin "baserom.gba", 0x25F82C, 0x10
-
-gUnknown_825F83C:: @ 825F83C
- .incbin "baserom.gba", 0x25F83C, 0x2
-
-gUnknown_825F83E:: @ 825F83E
- .incbin "baserom.gba", 0x25F83E, 0x8DE
+ .align 2
+gUnknown_825F844:: @ 825F842
+ .incbin "baserom.gba", 0x25f844, 0x8d8
gUnknown_826011C:: @ 826011C
.incbin "baserom.gba", 0x26011C, 0x8
@@ -741,13 +727,13 @@ gUnknown_8261E8A:: @ 8261E8A
gUnknown_8261EB6:: @ 8261EB6
.incbin "baserom.gba", 0x261EB6, 0xB
-gUnknown_8261EC1:: @ 8261EC1
+gText_MaleSymbol4:: @ 8261EC1
.incbin "baserom.gba", 0x261EC1, 0x2
-gUnknown_8261EC3:: @ 8261EC3
+gText_FemaleSymbol4:: @ 8261EC3
.incbin "baserom.gba", 0x261EC3, 0x2
-gUnknown_8261EC5:: @ 8261EC5
+gText_GenderlessSymbol:: @ 8261EC5
.incbin "baserom.gba", 0x261EC5, 0x2
gUnknown_8261EC7:: @ 8261EC7
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index 47d64e727..f911f30ec 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -817,7 +817,7 @@ gUnknown_841621F:: @ 841621F
gUnknown_8416221:: @ 8416221
.string "♀$"
-gUnknown_8416223:: @ 8416223
+gText_Lv:: @ 8416223
.string "{UNKNOWN_F9 0x05}$"
gOtherText_UnkF9_08_Clear_01:: @ 8416226
@@ -2375,7 +2375,19 @@ gUnknown_841E234:: @ 841E234
.incbin "baserom.gba", 0x41E234, 0xF1
gUnknown_841E325:: @ 841E325
- .incbin "baserom.gba", 0x41E325, 0xBE
+ .string "Communication standby…$"
+
+gDaycareText_GetAlongVeryWell:: @ 841E33C
+ .string "The two seem to get along\nvery well.$"
+
+gDaycareText_GetAlong:: @ 841E361
+ .string "The two seem to get along.$"
+
+gDaycareText_DontLikeOther:: @ 841E37C
+ .string "The two don’t seem to like\neach other much.$"
+
+gDaycareText_PlayOther:: @ 841E3A8
+ .string "The two prefer to play with other\nPOKéMON than each other.$"
gUnknown_841E3E3:: @ 841E3E3
.incbin "baserom.gba", 0x41E3E3, 0x18
diff --git a/data/specials.inc b/data/specials.inc
index a610fcd6f..dba67f852 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -191,7 +191,7 @@ gSpecials:: @ 815FD60
def_special nullsub_75
def_special sub_80CA74C
def_special GetDaycareMonNicknames
- def_special sub_80464B4
+ def_special GetDaycareState
def_special RejectEggFromDayCare
def_special GiveEggFromDaycare
def_special SetDaycareCompatibilityString
@@ -383,11 +383,11 @@ gSpecials:: @ 815FD60
def_special SetFlavorTextFlagFromSpecialVars
def_special UpdatePickStateFromSpecialVar8005
def_special sub_8054C48
- def_special sub_8046B40
- def_special sub_8046B70
- def_special sub_8046B94
- def_special sub_8046BBC
- def_special sub_8046BDC
+ def_special PutMonInRoute5Daycare
+ def_special GetCostToWithdrawRoute5DaycareMon
+ def_special IsThereMonInRoute5Daycare
+ def_special GetNumLevelsGainedForRoute5DaycareMon
+ def_special TakePokemonFromRoute5Daycare
def_special ScrSpecial_SeaGallopFerry
def_special sub_80CC48C
def_special sub_812B220
diff --git a/include/constants/flags.h b/include/constants/flags.h
index daa8b3132..ebf619541 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -136,7 +136,7 @@
#define FLAG_0x083 0x83
#define FLAG_0x084 0x84
#define FLAG_0x085 0x85
-#define FLAG_PENDING_DAYCARE_EGG 0x86
+#define FLAG_0x086 0x86
#define FLAG_0x087 0x87
#define FLAG_0x088 0x88
#define FLAG_0x089 0x89
@@ -616,7 +616,7 @@
#define FLAG_0x263 0x263
#define FLAG_0x264 0x264
#define FLAG_0x265 0x265
-#define FLAG_0x266 0x266
+#define FLAG_PENDING_DAYCARE_EGG 0x266
#define FLAG_0x267 0x267
#define FLAG_0x268 0x268
#define FLAG_0x269 0x269
diff --git a/include/global.h b/include/global.h
index de2221f8c..60185af00 100644
--- a/include/global.h
+++ b/include/global.h
@@ -498,9 +498,9 @@ struct ContestWinner
u8 contestRank;
};
-struct DaycareMiscMon
+struct DayCareMail
{
- struct MailStruct mail;
+ struct MailStruct message;
u8 OT_name[OT_NAME_LENGTH + 1];
u8 monName[POKEMON_NAME_LENGTH + 1];
u8 gameLanguage:4;
@@ -510,7 +510,7 @@ struct DaycareMiscMon
struct DaycareMon
{
struct BoxPokemon mon;
- struct DaycareMiscMon misc;
+ struct DayCareMail mail;
u32 steps;
};
@@ -519,14 +519,8 @@ struct DaycareMon
struct DayCare
{
struct DaycareMon mons[DAYCARE_MON_COUNT];
- u16 unk_118;
- u8 unk_11A;
-};
-
-struct DayCareMail
-{
- /*0x00*/ struct MailStruct message;
- /*0x24*/ u8 names[19];
+ u16 offspringPersonality;
+ u8 stepCounter;
};
struct RecordMixingDayCareMail
@@ -753,7 +747,9 @@ struct SaveBlock1
/*0x3A48*/ u8 filler_3a48[4];
/*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH];
/*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS];
- /*0x3A94*/ u8 filler3A94[0x2A0];
+ /*0x3A94*/ u8 filler3A94[0x204];
+ /*0x3C98*/ struct DaycareMon route5DayCareMon;
+ /*0x3D24*/ u8 filler3D24[0x10];
/*0x3D34*/ u32 unkArrayIdx;
/*0x3D38*/ struct TrainerTowerLog unkArray[4];
};
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index fc9c1b9dc..d24b7e3e5 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -31,5 +31,6 @@ void * malloc_and_decompress(const void * src, u32 * size);
u16 sub_80F796C(void);
void sub_80F6B08(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
void sub_80F696C(u8 bgId, const void * gfx, u32 size, u16 a3, u8 a4);
+void ClearStdWindowAndFrame(u8 taskId, bool8 copyNow);
#endif // GUARD_NEW_MENU_HELPERS_H
diff --git a/include/party_menu.h b/include/party_menu.h
index 09b160954..34b375e42 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -26,5 +26,6 @@ void sub_8124C8C(void);
void sub_8126EDC(void);
void c2_8123744(void);
u8 GetCursorSelectionMonId(void);
+void sub_8128370(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokemon.h b/include/pokemon.h
index c84eb4c42..bf2326ff8 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -7,9 +7,9 @@
#define MON_DATA_OT_ID 1
#define MON_DATA_NICKNAME 2
#define MON_DATA_LANGUAGE 3
-#define MON_DATA_SANITY_BIT1 4
-#define MON_DATA_SANITY_BIT2 5
-#define MON_DATA_SANITY_BIT3 6
+#define MON_DATA_SANITY_IS_BAD_EGG 4
+#define MON_DATA_SANITY_HAS_SPECIES 5
+#define MON_DATA_SANITY_IS_EGG 6
#define MON_DATA_OT_NAME 7
#define MON_DATA_MARKINGS 8
#define MON_DATA_CHECKSUM 9
diff --git a/include/text.h b/include/text.h
index d2c2ecf42..e0533cc98 100644
--- a/include/text.h
+++ b/include/text.h
@@ -106,9 +106,9 @@ struct TextPrinterSubStruct
u8 active;
};
-struct TextSubPrinter // TODO: Better name
+struct TextPrinterTemplate // TODO: Better name
{
- const u8* current_text_offset;
+ const u8* currentChar;
u8 windowId;
u8 fontId;
u8 x;
@@ -117,17 +117,17 @@ struct TextSubPrinter // TODO: Better name
u8 currentY;
u8 letterSpacing;
u8 lineSpacing;
- u8 fontColor_l:4; // 0xC
- u8 fontColor_h:4;
+ u8 unk:4; // 0xC
+ u8 fgColor:4;
u8 bgColor:4;
u8 shadowColor:4;
};
struct TextPrinter
{
- struct TextSubPrinter subPrinter;
+ struct TextPrinterTemplate subPrinter;
- void (*callback)(struct TextSubPrinter *, u16); // 0x10
+ void (*callback)(struct TextPrinterTemplate *, u16); // 0x10
union {
struct TextPrinterSubStruct sub;
@@ -150,8 +150,8 @@ struct FontInfo
u8 maxLetterHeight;
u8 letterSpacing;
u8 lineSpacing;
- u8 fontColor_l:4;
- u8 fontColor_h:4;
+ u8 unk:4;
+ u8 fgColor:4;
u8 bgColor:4;
u8 shadowColor:4;
};
@@ -172,10 +172,10 @@ struct KeypadIcon
};
typedef struct {
- u8 flag_0:1;
- u8 flag_1:1;
- u8 flag_2:1;
- u8 flag_3:1;
+ u8 canABSpeedUpPrint:1;
+ u8 useAlternateDownArrow:1;
+ u8 autoScroll:1;
+ u8 forceMidTextSpeed:1;
} TextFlags;
extern TextFlags gTextFlags;
@@ -194,8 +194,8 @@ extern u8 gStringVar4[];
void SetFontsPointer(const struct FontInfo *fonts);
void DeactivateAllTextPrinters(void);
-u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16));
-bool16 AddTextPrinter(struct TextSubPrinter *textSubPrinter, u8 speed, void (*callback)(struct TextSubPrinter *, u16));
+u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16));
+bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16));
void RunTextPrinters(void);
bool16 IsTextPrinterActive(u8 id);
u32 RenderFont(struct TextPrinter *textPrinter);
diff --git a/ld_script.txt b/ld_script.txt
index 1dcfe9b7b..b7c2719cb 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -81,7 +81,7 @@ SECTIONS {
src/random.o(.text);
src/util.o(.text);
src/blend_palette.o(.text);
- asm/daycare.o(.text);
+ src/daycare.o(.text);
asm/egg_hatch.o(.text);
asm/battle_interface.o(.text);
asm/smokescreen.o(.text);
@@ -364,6 +364,7 @@ SECTIONS {
src/string_util.o(.rodata);
data/data.o(.rodata);
src/util.o(.rodata);
+ src/daycare.o(.rodata);
data/data.o(.rodata.825EF0C);
data/connections.o(.rodata);
src/fieldmap.o(.rodata);
diff --git a/src/data/pokemon/egg_moves.h b/src/data/pokemon/egg_moves.h
new file mode 100644
index 000000000..f8c250c6d
--- /dev/null
+++ b/src/data/pokemon/egg_moves.h
@@ -0,0 +1,1310 @@
+#define EGG_MOVES_SPECIES_OFFSET 20000
+#define EGG_MOVES_TERMINATOR 0xFFFF
+#define egg_moves(species, moves...) (SPECIES_##species + EGG_MOVES_SPECIES_OFFSET), moves
+
+const u16 gEggMoves[] = {
+ egg_moves(BULBASAUR,
+ MOVE_LIGHT_SCREEN,
+ MOVE_SKULL_BASH,
+ MOVE_SAFEGUARD,
+ MOVE_CHARM,
+ MOVE_PETAL_DANCE,
+ MOVE_MAGICAL_LEAF,
+ MOVE_GRASS_WHISTLE,
+ MOVE_CURSE),
+
+ egg_moves(CHARMANDER,
+ MOVE_BELLY_DRUM,
+ MOVE_ANCIENT_POWER,
+ MOVE_ROCK_SLIDE,
+ MOVE_BITE,
+ MOVE_OUTRAGE,
+ MOVE_BEAT_UP,
+ MOVE_SWORDS_DANCE,
+ MOVE_DRAGON_DANCE),
+
+ egg_moves(SQUIRTLE,
+ MOVE_MIRROR_COAT,
+ MOVE_HAZE,
+ MOVE_MIST,
+ MOVE_FORESIGHT,
+ MOVE_FLAIL,
+ MOVE_REFRESH,
+ MOVE_MUD_SPORT,
+ MOVE_YAWN),
+
+ egg_moves(PIDGEY,
+ MOVE_PURSUIT,
+ MOVE_FAINT_ATTACK,
+ MOVE_FORESIGHT,
+ MOVE_STEEL_WING,
+ MOVE_AIR_CUTTER),
+
+ egg_moves(RATTATA,
+ MOVE_SCREECH,
+ MOVE_FLAME_WHEEL,
+ MOVE_FURY_SWIPES,
+ MOVE_BITE,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_UPROAR,
+ MOVE_SWAGGER),
+
+ egg_moves(SPEAROW,
+ MOVE_FAINT_ATTACK,
+ MOVE_FALSE_SWIPE,
+ MOVE_SCARY_FACE,
+ MOVE_QUICK_ATTACK,
+ MOVE_TRI_ATTACK,
+ MOVE_ASTONISH,
+ MOVE_SKY_ATTACK),
+
+ egg_moves(EKANS,
+ MOVE_PURSUIT,
+ MOVE_SLAM,
+ MOVE_SPITE,
+ MOVE_BEAT_UP,
+ MOVE_POISON_FANG),
+
+ egg_moves(SANDSHREW,
+ MOVE_FLAIL,
+ MOVE_SAFEGUARD,
+ MOVE_COUNTER,
+ MOVE_RAPID_SPIN,
+ MOVE_ROCK_SLIDE,
+ MOVE_METAL_CLAW,
+ MOVE_SWORDS_DANCE,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(NIDORAN_F,
+ MOVE_SUPERSONIC,
+ MOVE_DISABLE,
+ MOVE_TAKE_DOWN,
+ MOVE_FOCUS_ENERGY,
+ MOVE_CHARM,
+ MOVE_COUNTER,
+ MOVE_BEAT_UP),
+
+ egg_moves(NIDORAN_M,
+ MOVE_COUNTER,
+ MOVE_DISABLE,
+ MOVE_SUPERSONIC,
+ MOVE_TAKE_DOWN,
+ MOVE_AMNESIA,
+ MOVE_CONFUSION,
+ MOVE_BEAT_UP),
+
+ egg_moves(VULPIX,
+ MOVE_FAINT_ATTACK,
+ MOVE_HYPNOSIS,
+ MOVE_FLAIL,
+ MOVE_SPITE,
+ MOVE_DISABLE,
+ MOVE_HOWL,
+ MOVE_PSYCH_UP,
+ MOVE_HEAT_WAVE),
+
+ egg_moves(ZUBAT,
+ MOVE_QUICK_ATTACK,
+ MOVE_PURSUIT,
+ MOVE_FAINT_ATTACK,
+ MOVE_GUST,
+ MOVE_WHIRLWIND,
+ MOVE_CURSE),
+
+ egg_moves(ODDISH,
+ MOVE_SWORDS_DANCE,
+ MOVE_RAZOR_LEAF,
+ MOVE_FLAIL,
+ MOVE_SYNTHESIS,
+ MOVE_CHARM,
+ MOVE_INGRAIN),
+
+ egg_moves(PARAS,
+ MOVE_FALSE_SWIPE,
+ MOVE_SCREECH,
+ MOVE_COUNTER,
+ MOVE_PSYBEAM,
+ MOVE_FLAIL,
+ MOVE_SWEET_SCENT,
+ MOVE_LIGHT_SCREEN,
+ MOVE_PURSUIT),
+
+ egg_moves(VENONAT,
+ MOVE_BATON_PASS,
+ MOVE_SCREECH,
+ MOVE_GIGA_DRAIN,
+ MOVE_SIGNAL_BEAM),
+
+ egg_moves(DIGLETT,
+ MOVE_FAINT_ATTACK,
+ MOVE_SCREECH,
+ MOVE_ANCIENT_POWER,
+ MOVE_PURSUIT,
+ MOVE_BEAT_UP,
+ MOVE_UPROAR,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(MEOWTH,
+ MOVE_SPITE,
+ MOVE_CHARM,
+ MOVE_HYPNOSIS,
+ MOVE_AMNESIA,
+ MOVE_PSYCH_UP,
+ MOVE_ASSIST),
+
+ egg_moves(PSYDUCK,
+ MOVE_HYPNOSIS,
+ MOVE_PSYBEAM,
+ MOVE_FORESIGHT,
+ MOVE_LIGHT_SCREEN,
+ MOVE_FUTURE_SIGHT,
+ MOVE_PSYCHIC,
+ MOVE_CROSS_CHOP,
+ MOVE_REFRESH),
+
+ egg_moves(MANKEY,
+ MOVE_ROCK_SLIDE,
+ MOVE_FORESIGHT,
+ MOVE_MEDITATE,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_BEAT_UP,
+ MOVE_REVENGE,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(GROWLITHE,
+ MOVE_BODY_SLAM,
+ MOVE_SAFEGUARD,
+ MOVE_CRUNCH,
+ MOVE_THRASH,
+ MOVE_FIRE_SPIN,
+ MOVE_HOWL,
+ MOVE_HEAT_WAVE),
+
+ egg_moves(POLIWAG,
+ MOVE_MIST,
+ MOVE_SPLASH,
+ MOVE_BUBBLE_BEAM,
+ MOVE_HAZE,
+ MOVE_MIND_READER,
+ MOVE_WATER_SPORT,
+ MOVE_ICE_BALL),
+
+ egg_moves(ABRA,
+ MOVE_ENCORE,
+ MOVE_BARRIER,
+ MOVE_KNOCK_OFF,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(MACHOP,
+ MOVE_LIGHT_SCREEN,
+ MOVE_MEDITATE,
+ MOVE_ROLLING_KICK,
+ MOVE_ENCORE,
+ MOVE_SMELLING_SALT,
+ MOVE_COUNTER,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(BELLSPROUT,
+ MOVE_SWORDS_DANCE,
+ MOVE_ENCORE,
+ MOVE_REFLECT,
+ MOVE_SYNTHESIS,
+ MOVE_LEECH_LIFE,
+ MOVE_INGRAIN,
+ MOVE_MAGICAL_LEAF),
+
+ egg_moves(TENTACOOL,
+ MOVE_AURORA_BEAM,
+ MOVE_MIRROR_COAT,
+ MOVE_RAPID_SPIN,
+ MOVE_HAZE,
+ MOVE_SAFEGUARD,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(GEODUDE,
+ MOVE_MEGA_PUNCH,
+ MOVE_ROCK_SLIDE,
+ MOVE_BLOCK),
+
+ egg_moves(PONYTA,
+ MOVE_FLAME_WHEEL,
+ MOVE_THRASH,
+ MOVE_DOUBLE_KICK,
+ MOVE_HYPNOSIS,
+ MOVE_CHARM,
+ MOVE_DOUBLE_EDGE),
+
+ egg_moves(SLOWPOKE,
+ MOVE_SAFEGUARD,
+ MOVE_BELLY_DRUM,
+ MOVE_FUTURE_SIGHT,
+ MOVE_STOMP,
+ MOVE_MUD_SPORT,
+ MOVE_SLEEP_TALK,
+ MOVE_SNORE),
+
+ egg_moves(FARFETCHD,
+ MOVE_STEEL_WING,
+ MOVE_FORESIGHT,
+ MOVE_MIRROR_MOVE,
+ MOVE_GUST,
+ MOVE_QUICK_ATTACK,
+ MOVE_FLAIL,
+ MOVE_FEATHER_DANCE,
+ MOVE_CURSE),
+
+ egg_moves(DODUO,
+ MOVE_QUICK_ATTACK,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_FAINT_ATTACK,
+ MOVE_FLAIL,
+ MOVE_ENDEAVOR),
+
+ egg_moves(SEEL,
+ MOVE_LICK,
+ MOVE_PERISH_SONG,
+ MOVE_DISABLE,
+ MOVE_HORN_DRILL,
+ MOVE_SLAM,
+ MOVE_ENCORE,
+ MOVE_FAKE_OUT,
+ MOVE_ICICLE_SPEAR),
+
+ egg_moves(GRIMER,
+ MOVE_HAZE,
+ MOVE_MEAN_LOOK,
+ MOVE_LICK,
+ MOVE_IMPRISON,
+ MOVE_CURSE,
+ MOVE_SHADOW_PUNCH,
+ MOVE_EXPLOSION),
+
+ egg_moves(SHELLDER,
+ MOVE_BUBBLE_BEAM,
+ MOVE_TAKE_DOWN,
+ MOVE_BARRIER,
+ MOVE_RAPID_SPIN,
+ MOVE_SCREECH,
+ MOVE_ICICLE_SPEAR),
+
+ egg_moves(GASTLY,
+ MOVE_PSYWAVE,
+ MOVE_PERISH_SONG,
+ MOVE_HAZE,
+ MOVE_ASTONISH,
+ MOVE_WILL_O_WISP,
+ MOVE_GRUDGE,
+ MOVE_EXPLOSION),
+
+ egg_moves(ONIX,
+ MOVE_ROCK_SLIDE,
+ MOVE_FLAIL,
+ MOVE_EXPLOSION,
+ MOVE_BLOCK),
+
+ egg_moves(DROWZEE,
+ MOVE_BARRIER,
+ MOVE_ASSIST,
+ MOVE_ROLE_PLAY,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(KRABBY,
+ MOVE_DIG,
+ MOVE_HAZE,
+ MOVE_AMNESIA,
+ MOVE_FLAIL,
+ MOVE_SLAM,
+ MOVE_KNOCK_OFF,
+ MOVE_SWORDS_DANCE),
+
+ egg_moves(EXEGGCUTE,
+ MOVE_SYNTHESIS,
+ MOVE_MOONLIGHT,
+ MOVE_REFLECT,
+ MOVE_ANCIENT_POWER,
+ MOVE_PSYCH_UP,
+ MOVE_INGRAIN,
+ MOVE_CURSE),
+
+ egg_moves(CUBONE,
+ MOVE_ROCK_SLIDE,
+ MOVE_ANCIENT_POWER,
+ MOVE_BELLY_DRUM,
+ MOVE_SCREECH,
+ MOVE_SKULL_BASH,
+ MOVE_PERISH_SONG,
+ MOVE_SWORDS_DANCE),
+
+ egg_moves(LICKITUNG,
+ MOVE_BELLY_DRUM,
+ MOVE_MAGNITUDE,
+ MOVE_BODY_SLAM,
+ MOVE_CURSE,
+ MOVE_SMELLING_SALT,
+ MOVE_SLEEP_TALK,
+ MOVE_SNORE,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(KOFFING,
+ MOVE_SCREECH,
+ MOVE_PSYWAVE,
+ MOVE_PSYBEAM,
+ MOVE_DESTINY_BOND,
+ MOVE_PAIN_SPLIT,
+ MOVE_WILL_O_WISP),
+
+ egg_moves(RHYHORN,
+ MOVE_CRUNCH,
+ MOVE_REVERSAL,
+ MOVE_ROCK_SLIDE,
+ MOVE_COUNTER,
+ MOVE_MAGNITUDE,
+ MOVE_SWORDS_DANCE,
+ MOVE_CURSE,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(CHANSEY,
+ MOVE_PRESENT,
+ MOVE_METRONOME,
+ MOVE_HEAL_BELL,
+ MOVE_AROMATHERAPY,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(TANGELA,
+ MOVE_FLAIL,
+ MOVE_CONFUSION,
+ MOVE_MEGA_DRAIN,
+ MOVE_REFLECT,
+ MOVE_AMNESIA,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER),
+
+ egg_moves(KANGASKHAN,
+ MOVE_STOMP,
+ MOVE_FORESIGHT,
+ MOVE_FOCUS_ENERGY,
+ MOVE_SAFEGUARD,
+ MOVE_DISABLE,
+ MOVE_COUNTER,
+ MOVE_CRUSH_CLAW,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(HORSEA,
+ MOVE_FLAIL,
+ MOVE_AURORA_BEAM,
+ MOVE_OCTAZOOKA,
+ MOVE_DISABLE,
+ MOVE_SPLASH,
+ MOVE_DRAGON_RAGE,
+ MOVE_DRAGON_BREATH),
+
+ egg_moves(GOLDEEN,
+ MOVE_PSYBEAM,
+ MOVE_HAZE,
+ MOVE_HYDRO_PUMP,
+ MOVE_SLEEP_TALK,
+ MOVE_MUD_SPORT),
+
+ egg_moves(MR_MIME,
+ MOVE_FUTURE_SIGHT,
+ MOVE_HYPNOSIS,
+ MOVE_MIMIC,
+ MOVE_PSYCH_UP,
+ MOVE_FAKE_OUT,
+ MOVE_TRICK),
+
+ egg_moves(SCYTHER,
+ MOVE_COUNTER,
+ MOVE_SAFEGUARD,
+ MOVE_BATON_PASS,
+ MOVE_RAZOR_WIND,
+ MOVE_REVERSAL,
+ MOVE_LIGHT_SCREEN,
+ MOVE_ENDURE,
+ MOVE_SILVER_WIND),
+
+ egg_moves(PINSIR,
+ MOVE_FURY_ATTACK,
+ MOVE_FLAIL,
+ MOVE_FALSE_SWIPE,
+ MOVE_FAINT_ATTACK),
+
+ egg_moves(LAPRAS,
+ MOVE_FORESIGHT,
+ MOVE_SUBSTITUTE,
+ MOVE_TICKLE,
+ MOVE_REFRESH,
+ MOVE_DRAGON_DANCE,
+ MOVE_CURSE,
+ MOVE_SLEEP_TALK,
+ MOVE_HORN_DRILL),
+
+ egg_moves(EEVEE,
+ MOVE_CHARM,
+ MOVE_FLAIL,
+ MOVE_ENDURE,
+ MOVE_CURSE,
+ MOVE_TICKLE,
+ MOVE_WISH),
+
+ egg_moves(OMANYTE,
+ MOVE_BUBBLE_BEAM,
+ MOVE_AURORA_BEAM,
+ MOVE_SLAM,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_ROCK_SLIDE,
+ MOVE_SPIKES),
+
+ egg_moves(KABUTO,
+ MOVE_BUBBLE_BEAM,
+ MOVE_AURORA_BEAM,
+ MOVE_RAPID_SPIN,
+ MOVE_DIG,
+ MOVE_FLAIL,
+ MOVE_KNOCK_OFF,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(AERODACTYL,
+ MOVE_WHIRLWIND,
+ MOVE_PURSUIT,
+ MOVE_FORESIGHT,
+ MOVE_STEEL_WING,
+ MOVE_DRAGON_BREATH,
+ MOVE_CURSE),
+
+ egg_moves(SNORLAX,
+ MOVE_LICK,
+ MOVE_CHARM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(DRATINI,
+ MOVE_LIGHT_SCREEN,
+ MOVE_MIST,
+ MOVE_HAZE,
+ MOVE_SUPERSONIC,
+ MOVE_DRAGON_BREATH,
+ MOVE_DRAGON_DANCE),
+
+ egg_moves(CHIKORITA,
+ MOVE_VINE_WHIP,
+ MOVE_LEECH_SEED,
+ MOVE_COUNTER,
+ MOVE_ANCIENT_POWER,
+ MOVE_FLAIL,
+ MOVE_NATURE_POWER,
+ MOVE_INGRAIN,
+ MOVE_GRASS_WHISTLE),
+
+ egg_moves(CYNDAQUIL,
+ MOVE_FURY_SWIPES,
+ MOVE_QUICK_ATTACK,
+ MOVE_REVERSAL,
+ MOVE_THRASH,
+ MOVE_FORESIGHT,
+ MOVE_COVET,
+ MOVE_HOWL,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(TOTODILE,
+ MOVE_CRUNCH,
+ MOVE_THRASH,
+ MOVE_HYDRO_PUMP,
+ MOVE_ANCIENT_POWER,
+ MOVE_ROCK_SLIDE,
+ MOVE_MUD_SPORT,
+ MOVE_WATER_SPORT,
+ MOVE_DRAGON_CLAW),
+
+ egg_moves(SENTRET,
+ MOVE_DOUBLE_EDGE,
+ MOVE_PURSUIT,
+ MOVE_SLASH,
+ MOVE_FOCUS_ENERGY,
+ MOVE_REVERSAL,
+ MOVE_SUBSTITUTE,
+ MOVE_TRICK,
+ MOVE_ASSIST),
+
+ egg_moves(HOOTHOOT,
+ MOVE_MIRROR_MOVE,
+ MOVE_SUPERSONIC,
+ MOVE_FAINT_ATTACK,
+ MOVE_WING_ATTACK,
+ MOVE_WHIRLWIND,
+ MOVE_SKY_ATTACK,
+ MOVE_FEATHER_DANCE),
+
+ egg_moves(LEDYBA,
+ MOVE_PSYBEAM,
+ MOVE_BIDE,
+ MOVE_SILVER_WIND),
+
+ egg_moves(SPINARAK,
+ MOVE_PSYBEAM,
+ MOVE_DISABLE,
+ MOVE_SONIC_BOOM,
+ MOVE_BATON_PASS,
+ MOVE_PURSUIT,
+ MOVE_SIGNAL_BEAM),
+
+ egg_moves(CHINCHOU,
+ MOVE_FLAIL,
+ MOVE_SCREECH,
+ MOVE_AMNESIA),
+
+ egg_moves(PICHU,
+ MOVE_REVERSAL,
+ MOVE_BIDE,
+ MOVE_PRESENT,
+ MOVE_ENCORE,
+ MOVE_DOUBLE_SLAP,
+ MOVE_WISH,
+ MOVE_CHARGE),
+
+ egg_moves(CLEFFA,
+ MOVE_PRESENT,
+ MOVE_METRONOME,
+ MOVE_AMNESIA,
+ MOVE_BELLY_DRUM,
+ MOVE_SPLASH,
+ MOVE_MIMIC,
+ MOVE_WISH,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(IGGLYBUFF,
+ MOVE_PERISH_SONG,
+ MOVE_PRESENT,
+ MOVE_FAINT_ATTACK,
+ MOVE_WISH,
+ MOVE_FAKE_TEARS),
+
+ egg_moves(TOGEPI,
+ MOVE_PRESENT,
+ MOVE_MIRROR_MOVE,
+ MOVE_PECK,
+ MOVE_FORESIGHT,
+ MOVE_FUTURE_SIGHT,
+ MOVE_SUBSTITUTE,
+ MOVE_PSYCH_UP),
+
+ egg_moves(NATU,
+ MOVE_HAZE,
+ MOVE_DRILL_PECK,
+ MOVE_QUICK_ATTACK,
+ MOVE_FAINT_ATTACK,
+ MOVE_STEEL_WING,
+ MOVE_PSYCH_UP,
+ MOVE_FEATHER_DANCE,
+ MOVE_REFRESH),
+
+ egg_moves(MAREEP,
+ MOVE_TAKE_DOWN,
+ MOVE_BODY_SLAM,
+ MOVE_SAFEGUARD,
+ MOVE_SCREECH,
+ MOVE_REFLECT,
+ MOVE_ODOR_SLEUTH,
+ MOVE_CHARGE),
+
+ egg_moves(MARILL,
+ MOVE_LIGHT_SCREEN,
+ MOVE_PRESENT,
+ MOVE_AMNESIA,
+ MOVE_FUTURE_SIGHT,
+ MOVE_BELLY_DRUM,
+ MOVE_PERISH_SONG,
+ MOVE_SUPERSONIC,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(SUDOWOODO,
+ MOVE_SELF_DESTRUCT),
+
+ egg_moves(HOPPIP,
+ MOVE_CONFUSION,
+ MOVE_ENCORE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_REFLECT,
+ MOVE_AMNESIA,
+ MOVE_HELPING_HAND,
+ MOVE_PSYCH_UP),
+
+ egg_moves(AIPOM,
+ MOVE_COUNTER,
+ MOVE_SCREECH,
+ MOVE_PURSUIT,
+ MOVE_AGILITY,
+ MOVE_SPITE,
+ MOVE_SLAM,
+ MOVE_DOUBLE_SLAP,
+ MOVE_BEAT_UP),
+
+ egg_moves(SUNKERN,
+ MOVE_GRASS_WHISTLE,
+ MOVE_ENCORE,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER,
+ MOVE_CURSE,
+ MOVE_HELPING_HAND),
+
+ egg_moves(YANMA,
+ MOVE_WHIRLWIND,
+ MOVE_REVERSAL,
+ MOVE_LEECH_LIFE,
+ MOVE_SIGNAL_BEAM,
+ MOVE_SILVER_WIND),
+
+ egg_moves(WOOPER,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_SAFEGUARD,
+ MOVE_CURSE,
+ MOVE_MUD_SPORT,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP),
+
+ egg_moves(MURKROW,
+ MOVE_WHIRLWIND,
+ MOVE_DRILL_PECK,
+ MOVE_MIRROR_MOVE,
+ MOVE_WING_ATTACK,
+ MOVE_SKY_ATTACK,
+ MOVE_CONFUSE_RAY,
+ MOVE_FEATHER_DANCE,
+ MOVE_PERISH_SONG),
+
+ egg_moves(MISDREAVUS,
+ MOVE_SCREECH,
+ MOVE_DESTINY_BOND,
+ MOVE_PSYCH_UP,
+ MOVE_IMPRISON),
+
+ egg_moves(GIRAFARIG,
+ MOVE_TAKE_DOWN,
+ MOVE_AMNESIA,
+ MOVE_FORESIGHT,
+ MOVE_FUTURE_SIGHT,
+ MOVE_BEAT_UP,
+ MOVE_PSYCH_UP,
+ MOVE_WISH,
+ MOVE_MAGIC_COAT),
+
+ egg_moves(PINECO,
+ MOVE_REFLECT,
+ MOVE_PIN_MISSILE,
+ MOVE_FLAIL,
+ MOVE_SWIFT,
+ MOVE_COUNTER,
+ MOVE_SAND_TOMB),
+
+ egg_moves(DUNSPARCE,
+ MOVE_BIDE,
+ MOVE_ANCIENT_POWER,
+ MOVE_ROCK_SLIDE,
+ MOVE_BITE,
+ MOVE_HEADBUTT,
+ MOVE_ASTONISH,
+ MOVE_CURSE),
+
+ egg_moves(GLIGAR,
+ MOVE_METAL_CLAW,
+ MOVE_WING_ATTACK,
+ MOVE_RAZOR_WIND,
+ MOVE_COUNTER,
+ MOVE_SAND_TOMB),
+
+ egg_moves(SNUBBULL,
+ MOVE_METRONOME,
+ MOVE_FAINT_ATTACK,
+ MOVE_REFLECT,
+ MOVE_PRESENT,
+ MOVE_CRUNCH,
+ MOVE_HEAL_BELL,
+ MOVE_SNORE,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(QWILFISH,
+ MOVE_FLAIL,
+ MOVE_HAZE,
+ MOVE_BUBBLE_BEAM,
+ MOVE_SUPERSONIC,
+ MOVE_ASTONISH),
+
+ egg_moves(SHUCKLE,
+ MOVE_SWEET_SCENT),
+
+ egg_moves(HERACROSS,
+ MOVE_HARDEN,
+ MOVE_BIDE,
+ MOVE_FLAIL,
+ MOVE_FALSE_SWIPE),
+
+ egg_moves(SNEASEL,
+ MOVE_COUNTER,
+ MOVE_SPITE,
+ MOVE_FORESIGHT,
+ MOVE_REFLECT,
+ MOVE_BITE,
+ MOVE_CRUSH_CLAW,
+ MOVE_FAKE_OUT),
+
+ egg_moves(TEDDIURSA,
+ MOVE_CRUNCH,
+ MOVE_TAKE_DOWN,
+ MOVE_SEISMIC_TOSS,
+ MOVE_COUNTER,
+ MOVE_METAL_CLAW,
+ MOVE_FAKE_TEARS,
+ MOVE_YAWN,
+ MOVE_SLEEP_TALK),
+
+ egg_moves(SLUGMA,
+ MOVE_ACID_ARMOR,
+ MOVE_HEAT_WAVE),
+
+ egg_moves(SWINUB,
+ MOVE_TAKE_DOWN,
+ MOVE_BITE,
+ MOVE_BODY_SLAM,
+ MOVE_ROCK_SLIDE,
+ MOVE_ANCIENT_POWER,
+ MOVE_MUD_SHOT,
+ MOVE_ICICLE_SPEAR,
+ MOVE_DOUBLE_EDGE),
+
+ egg_moves(CORSOLA,
+ MOVE_ROCK_SLIDE,
+ MOVE_SCREECH,
+ MOVE_MIST,
+ MOVE_AMNESIA,
+ MOVE_BARRIER,
+ MOVE_INGRAIN,
+ MOVE_CONFUSE_RAY,
+ MOVE_ICICLE_SPEAR),
+
+ egg_moves(REMORAID,
+ MOVE_AURORA_BEAM,
+ MOVE_OCTAZOOKA,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_SCREECH,
+ MOVE_THUNDER_WAVE,
+ MOVE_ROCK_BLAST),
+
+ egg_moves(DELIBIRD,
+ MOVE_AURORA_BEAM,
+ MOVE_QUICK_ATTACK,
+ MOVE_FUTURE_SIGHT,
+ MOVE_SPLASH,
+ MOVE_RAPID_SPIN,
+ MOVE_ICE_BALL),
+
+ egg_moves(MANTINE,
+ MOVE_TWISTER,
+ MOVE_HYDRO_PUMP,
+ MOVE_HAZE,
+ MOVE_SLAM,
+ MOVE_MUD_SPORT,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(SKARMORY,
+ MOVE_DRILL_PECK,
+ MOVE_PURSUIT,
+ MOVE_WHIRLWIND,
+ MOVE_SKY_ATTACK,
+ MOVE_CURSE),
+
+ egg_moves(HOUNDOUR,
+ MOVE_FIRE_SPIN,
+ MOVE_RAGE,
+ MOVE_PURSUIT,
+ MOVE_COUNTER,
+ MOVE_SPITE,
+ MOVE_REVERSAL,
+ MOVE_BEAT_UP,
+ MOVE_WILL_O_WISP),
+
+ egg_moves(PHANPY,
+ MOVE_FOCUS_ENERGY,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_SNORE,
+ MOVE_COUNTER,
+ MOVE_FISSURE),
+
+ egg_moves(STANTLER,
+ MOVE_SPITE,
+ MOVE_DISABLE,
+ MOVE_BITE,
+ MOVE_SWAGGER,
+ MOVE_PSYCH_UP,
+ MOVE_EXTRASENSORY),
+
+ egg_moves(TYROGUE,
+ MOVE_RAPID_SPIN,
+ MOVE_HI_JUMP_KICK,
+ MOVE_MACH_PUNCH,
+ MOVE_MIND_READER,
+ MOVE_HELPING_HAND),
+
+ egg_moves(SMOOCHUM,
+ MOVE_MEDITATE,
+ MOVE_PSYCH_UP,
+ MOVE_FAKE_OUT,
+ MOVE_WISH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(ELEKID,
+ MOVE_KARATE_CHOP,
+ MOVE_BARRIER,
+ MOVE_ROLLING_KICK,
+ MOVE_MEDITATE,
+ MOVE_CROSS_CHOP,
+ MOVE_FIRE_PUNCH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(MAGBY,
+ MOVE_KARATE_CHOP,
+ MOVE_MEGA_PUNCH,
+ MOVE_BARRIER,
+ MOVE_SCREECH,
+ MOVE_CROSS_CHOP,
+ MOVE_THUNDER_PUNCH),
+
+ egg_moves(MILTANK,
+ MOVE_PRESENT,
+ MOVE_REVERSAL,
+ MOVE_SEISMIC_TOSS,
+ MOVE_ENDURE,
+ MOVE_PSYCH_UP,
+ MOVE_CURSE,
+ MOVE_HELPING_HAND,
+ MOVE_SLEEP_TALK),
+
+ egg_moves(LARVITAR,
+ MOVE_PURSUIT,
+ MOVE_STOMP,
+ MOVE_OUTRAGE,
+ MOVE_FOCUS_ENERGY,
+ MOVE_ANCIENT_POWER,
+ MOVE_DRAGON_DANCE,
+ MOVE_CURSE),
+
+ egg_moves(TREECKO,
+ MOVE_CRUNCH,
+ MOVE_MUD_SPORT,
+ MOVE_ENDEAVOR,
+ MOVE_LEECH_SEED,
+ MOVE_DRAGON_BREATH,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(TORCHIC,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_ENDURE,
+ MOVE_SWAGGER,
+ MOVE_ROCK_SLIDE,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(MUDKIP,
+ MOVE_REFRESH,
+ MOVE_UPROAR,
+ MOVE_CURSE,
+ MOVE_STOMP,
+ MOVE_ICE_BALL,
+ MOVE_MIRROR_COAT),
+
+ egg_moves(POOCHYENA,
+ MOVE_ASTONISH,
+ MOVE_POISON_FANG,
+ MOVE_COVET,
+ MOVE_LEER,
+ MOVE_YAWN),
+
+ egg_moves(ZIGZAGOON,
+ MOVE_CHARM,
+ MOVE_PURSUIT,
+ MOVE_SUBSTITUTE,
+ MOVE_TICKLE,
+ MOVE_TRICK),
+
+ egg_moves(LOTAD,
+ MOVE_SYNTHESIS,
+ MOVE_RAZOR_LEAF,
+ MOVE_SWEET_SCENT,
+ MOVE_LEECH_SEED,
+ MOVE_FLAIL,
+ MOVE_WATER_GUN),
+
+ egg_moves(SEEDOT,
+ MOVE_LEECH_SEED,
+ MOVE_AMNESIA,
+ MOVE_QUICK_ATTACK,
+ MOVE_RAZOR_WIND,
+ MOVE_TAKE_DOWN,
+ MOVE_FALSE_SWIPE),
+
+ egg_moves(NINCADA,
+ MOVE_ENDURE,
+ MOVE_FAINT_ATTACK,
+ MOVE_GUST,
+ MOVE_SILVER_WIND),
+
+ egg_moves(TAILLOW,
+ MOVE_PURSUIT,
+ MOVE_SUPERSONIC,
+ MOVE_REFRESH,
+ MOVE_MIRROR_MOVE,
+ MOVE_RAGE,
+ MOVE_SKY_ATTACK),
+
+ egg_moves(SHROOMISH,
+ MOVE_FAKE_TEARS,
+ MOVE_SWAGGER,
+ MOVE_CHARM,
+ MOVE_FALSE_SWIPE,
+ MOVE_HELPING_HAND),
+
+ egg_moves(SPINDA,
+ MOVE_ENCORE,
+ MOVE_ROCK_SLIDE,
+ MOVE_ASSIST,
+ MOVE_DISABLE,
+ MOVE_BATON_PASS,
+ MOVE_WISH,
+ MOVE_TRICK,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(WINGULL,
+ MOVE_MIST,
+ MOVE_TWISTER,
+ MOVE_AGILITY,
+ MOVE_GUST,
+ MOVE_WATER_SPORT),
+
+ egg_moves(SURSKIT,
+ MOVE_FORESIGHT,
+ MOVE_MUD_SHOT,
+ MOVE_PSYBEAM,
+ MOVE_HYDRO_PUMP,
+ MOVE_MIND_READER),
+
+ egg_moves(WAILMER,
+ MOVE_DOUBLE_EDGE,
+ MOVE_THRASH,
+ MOVE_SWAGGER,
+ MOVE_SNORE,
+ MOVE_SLEEP_TALK,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_TICKLE),
+
+ egg_moves(SKITTY,
+ MOVE_HELPING_HAND,
+ MOVE_PSYCH_UP,
+ MOVE_UPROAR,
+ MOVE_FAKE_TEARS,
+ MOVE_WISH,
+ MOVE_BATON_PASS,
+ MOVE_SUBSTITUTE,
+ MOVE_TICKLE),
+
+ egg_moves(KECLEON,
+ MOVE_DISABLE,
+ MOVE_MAGIC_COAT,
+ MOVE_TRICK),
+
+ egg_moves(NOSEPASS,
+ MOVE_MAGNITUDE,
+ MOVE_ROLLOUT,
+ MOVE_EXPLOSION),
+
+ egg_moves(TORKOAL,
+ MOVE_ERUPTION,
+ MOVE_ENDURE,
+ MOVE_SLEEP_TALK,
+ MOVE_YAWN),
+
+ egg_moves(SABLEYE,
+ MOVE_PSYCH_UP,
+ MOVE_RECOVER,
+ MOVE_MOONLIGHT),
+
+ egg_moves(BARBOACH,
+ MOVE_THRASH,
+ MOVE_WHIRLPOOL,
+ MOVE_SPARK),
+
+ egg_moves(LUVDISC,
+ MOVE_SPLASH,
+ MOVE_SUPERSONIC,
+ MOVE_WATER_SPORT,
+ MOVE_MUD_SPORT),
+
+ egg_moves(CORPHISH,
+ MOVE_MUD_SPORT,
+ MOVE_ENDEAVOR,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER),
+
+ egg_moves(FEEBAS,
+ MOVE_MIRROR_COAT,
+ MOVE_DRAGON_BREATH,
+ MOVE_MUD_SPORT,
+ MOVE_HYPNOSIS,
+ MOVE_LIGHT_SCREEN,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(CARVANHA,
+ MOVE_HYDRO_PUMP,
+ MOVE_DOUBLE_EDGE,
+ MOVE_THRASH),
+
+ egg_moves(TRAPINCH,
+ MOVE_FOCUS_ENERGY,
+ MOVE_QUICK_ATTACK,
+ MOVE_GUST),
+
+ egg_moves(MAKUHITA,
+ MOVE_FAINT_ATTACK,
+ MOVE_DETECT,
+ MOVE_FORESIGHT,
+ MOVE_HELPING_HAND,
+ MOVE_CROSS_CHOP,
+ MOVE_REVENGE,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_COUNTER),
+
+ egg_moves(ELECTRIKE,
+ MOVE_CRUNCH,
+ MOVE_HEADBUTT,
+ MOVE_UPROAR,
+ MOVE_CURSE,
+ MOVE_SWIFT),
+
+ egg_moves(NUMEL,
+ MOVE_HOWL,
+ MOVE_SCARY_FACE,
+ MOVE_BODY_SLAM,
+ MOVE_ROLLOUT,
+ MOVE_DEFENSE_CURL,
+ MOVE_STOMP),
+
+ egg_moves(SPHEAL,
+ MOVE_WATER_SPORT,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_YAWN,
+ MOVE_ROCK_SLIDE,
+ MOVE_CURSE,
+ MOVE_FISSURE),
+
+ egg_moves(CACNEA,
+ MOVE_GRASS_WHISTLE,
+ MOVE_ACID,
+ MOVE_TEETER_DANCE,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_COUNTER),
+
+ egg_moves(SNORUNT,
+ MOVE_BLOCK,
+ MOVE_SPIKES),
+
+ egg_moves(AZURILL,
+ MOVE_ENCORE,
+ MOVE_SING,
+ MOVE_REFRESH,
+ MOVE_SLAM,
+ MOVE_TICKLE),
+
+ egg_moves(SPOINK,
+ MOVE_FUTURE_SIGHT,
+ MOVE_EXTRASENSORY,
+ MOVE_SUBSTITUTE,
+ MOVE_TRICK),
+
+ egg_moves(PLUSLE,
+ MOVE_SUBSTITUTE,
+ MOVE_WISH),
+
+ egg_moves(MINUN,
+ MOVE_SUBSTITUTE,
+ MOVE_WISH),
+
+ egg_moves(MAWILE,
+ MOVE_SWORDS_DANCE,
+ MOVE_FALSE_SWIPE,
+ MOVE_POISON_FANG,
+ MOVE_PSYCH_UP,
+ MOVE_ANCIENT_POWER,
+ MOVE_TICKLE),
+
+ egg_moves(MEDITITE,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_FORESIGHT,
+ MOVE_FAKE_OUT,
+ MOVE_BATON_PASS,
+ MOVE_DYNAMIC_PUNCH),
+
+ egg_moves(SWABLU,
+ MOVE_AGILITY,
+ MOVE_HAZE,
+ MOVE_PURSUIT,
+ MOVE_RAGE),
+
+ egg_moves(DUSKULL,
+ MOVE_IMPRISON,
+ MOVE_DESTINY_BOND,
+ MOVE_PAIN_SPLIT,
+ MOVE_GRUDGE,
+ MOVE_MEMENTO,
+ MOVE_FAINT_ATTACK),
+
+ egg_moves(ROSELIA,
+ MOVE_SPIKES,
+ MOVE_SYNTHESIS,
+ MOVE_PIN_MISSILE,
+ MOVE_COTTON_SPORE),
+
+ egg_moves(SLAKOTH,
+ MOVE_PURSUIT,
+ MOVE_SLASH,
+ MOVE_BODY_SLAM,
+ MOVE_SNORE,
+ MOVE_CRUSH_CLAW,
+ MOVE_CURSE,
+ MOVE_SLEEP_TALK),
+
+ egg_moves(GULPIN,
+ MOVE_DREAM_EATER,
+ MOVE_ACID_ARMOR,
+ MOVE_SMOG,
+ MOVE_PAIN_SPLIT),
+
+ egg_moves(TROPIUS,
+ MOVE_HEADBUTT,
+ MOVE_SLAM,
+ MOVE_RAZOR_WIND,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER),
+
+ egg_moves(WHISMUR,
+ MOVE_TAKE_DOWN,
+ MOVE_SNORE,
+ MOVE_SWAGGER,
+ MOVE_EXTRASENSORY,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(CLAMPERL,
+ MOVE_REFRESH,
+ MOVE_MUD_SPORT,
+ MOVE_BODY_SLAM,
+ MOVE_SUPERSONIC,
+ MOVE_BARRIER,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(ABSOL,
+ MOVE_BATON_PASS,
+ MOVE_FAINT_ATTACK,
+ MOVE_DOUBLE_EDGE,
+ MOVE_MAGIC_COAT,
+ MOVE_CURSE,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(SHUPPET,
+ MOVE_DISABLE,
+ MOVE_DESTINY_BOND,
+ MOVE_FORESIGHT,
+ MOVE_ASTONISH,
+ MOVE_IMPRISON),
+
+ egg_moves(SEVIPER,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_BODY_SLAM),
+
+ egg_moves(ZANGOOSE,
+ MOVE_FLAIL,
+ MOVE_DOUBLE_KICK,
+ MOVE_RAZOR_WIND,
+ MOVE_COUNTER,
+ MOVE_ROAR,
+ MOVE_CURSE),
+
+ egg_moves(RELICANTH,
+ MOVE_MAGNITUDE,
+ MOVE_SKULL_BASH,
+ MOVE_WATER_SPORT,
+ MOVE_AMNESIA,
+ MOVE_SLEEP_TALK,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(ARON,
+ MOVE_ENDEAVOR,
+ MOVE_BODY_SLAM,
+ MOVE_STOMP,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(CASTFORM,
+ MOVE_FUTURE_SIGHT,
+ MOVE_PSYCH_UP),
+
+ egg_moves(VOLBEAT,
+ MOVE_BATON_PASS,
+ MOVE_SILVER_WIND,
+ MOVE_TRICK),
+
+ egg_moves(ILLUMISE,
+ MOVE_BATON_PASS,
+ MOVE_SILVER_WIND,
+ MOVE_GROWTH),
+
+ egg_moves(LILEEP,
+ MOVE_BARRIER,
+ MOVE_RECOVER,
+ MOVE_MIRROR_COAT,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(ANORITH,
+ MOVE_RAPID_SPIN,
+ MOVE_KNOCK_OFF,
+ MOVE_SWORDS_DANCE,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(RALTS,
+ MOVE_DISABLE,
+ MOVE_WILL_O_WISP,
+ MOVE_MEAN_LOOK,
+ MOVE_MEMENTO,
+ MOVE_DESTINY_BOND),
+
+ egg_moves(BAGON,
+ MOVE_HYDRO_PUMP,
+ MOVE_THRASH,
+ MOVE_DRAGON_RAGE,
+ MOVE_TWISTER,
+ MOVE_DRAGON_DANCE),
+
+ egg_moves(CHIMECHO,
+ MOVE_DISABLE,
+ MOVE_CURSE,
+ MOVE_HYPNOSIS,
+ MOVE_DREAM_EATER),
+
+ EGG_MOVES_TERMINATOR
+};
diff --git a/src/daycare.c b/src/daycare.c
new file mode 100644
index 000000000..208db4a27
--- /dev/null
+++ b/src/daycare.c
@@ -0,0 +1,1353 @@
+#include "global.h"
+#include "pokemon.h"
+#include "battle.h"
+#include "daycare.h"
+#include "string_util.h"
+#include "constants/species.h"
+#include "constants/items.h"
+#include "mail.h"
+#include "pokemon_storage_system.h"
+#include "event_data.h"
+#include "random.h"
+#include "main.h"
+#include "constants/moves.h"
+#include "egg_hatch.h"
+#include "text.h"
+#include "menu.h"
+#include "new_menu_helpers.h"
+#include "international_string_util.h"
+#include "script.h"
+#include "strings.h"
+#include "task.h"
+#include "window.h"
+#include "party_menu.h"
+#include "list_menu.h"
+#include "overworld.h"
+
+#define EGG_MOVES_ARRAY_COUNT 10
+#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
+
+extern const u8 gText_MaleSymbol4[];
+extern const u8 gText_FemaleSymbol4[];
+extern const u8 gText_GenderlessSymbol[];
+extern const u8 gText_Lv[];
+extern const u8 gDaycareText_GetAlongVeryWell[];
+extern const u8 gDaycareText_GetAlong[];
+extern const u8 gDaycareText_DontLikeOther[];
+extern const u8 gDaycareText_PlayOther[];
+extern const u8 gExpandedPlaceholder_Empty[];
+
+// this file's functions
+static void ClearDaycareMonMail(struct DayCareMail *mail);
+static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
+static u8 GetDaycareCompatibilityScore(struct DayCare *daycare);
+static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y);
+
+// RAM buffers used to assist with BuildEggMoveset()
+EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
+EWRAM_DATA static u16 sHatchedEggFatherMoves[4] = {0};
+EWRAM_DATA static u16 sHatchedEggFinalMoves[4] = {0};
+EWRAM_DATA static u16 sHatchedEggEggMoves[EGG_MOVES_ARRAY_COUNT] = {0};
+EWRAM_DATA static u16 sHatchedEggMotherMoves[4] = {0};
+
+#include "data/pokemon/egg_moves.h"
+
+static const struct WindowTemplate sDaycareLevelMenuWindowTemplate =
+{
+ .priority = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 1,
+ .width = 17,
+ .height = 5,
+ .paletteNum = 15,
+ .baseBlock = 8
+};
+
+static const struct ListMenuItem sLevelMenuItems[] =
+{
+ {gExpandedPlaceholder_Empty, 0},
+ {gExpandedPlaceholder_Empty, 1},
+ {gOtherText_Exit, 5}
+};
+
+static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
+{
+ .items = sLevelMenuItems,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = DaycarePrintMonInfo,
+ .totalItems = 3,
+ .maxShowed = 3,
+ .windowId = 0,
+ .header_X = 2,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 0,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 1,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 3,
+ .cursorKind = 0
+};
+
+static const u8 *const sCompatibilityMessages[] =
+{
+ gDaycareText_GetAlongVeryWell,
+ gDaycareText_GetAlong,
+ gDaycareText_DontLikeOther,
+ gDaycareText_PlayOther
+};
+
+static const u8 sNewLineText[] = _("\n");
+static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in Japanese)
+
+// ???
+const u8 sGarbageData[] = {0xF4, 0x4B};
+
+u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
+{
+ u8 nickname[POKEMON_NAME_LENGTH * 2];
+
+ GetMonData(mon, MON_DATA_NICKNAME, nickname);
+ return StringCopy10(dest, nickname);
+}
+
+u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
+{
+ u8 nickname[POKEMON_NAME_LENGTH * 2];
+
+ GetBoxMonData(mon, MON_DATA_NICKNAME, nickname);
+ return StringCopy10(dest, nickname);
+}
+
+u8 CountPokemonInDaycare(struct DayCare *daycare)
+{
+ u8 i, count;
+ count = 0;
+
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
+ {
+ if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES) != 0)
+ count++;
+ }
+
+ return count;
+}
+
+void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDayCareMail *daycareMail)
+{
+ u8 i;
+ u8 numDaycareMons = 0;
+
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
+ {
+ if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ numDaycareMons++;
+ if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_HELD_ITEM) == ITEM_NONE)
+ {
+ daycareMail->holdsItem[i] = FALSE;
+ }
+ else
+ {
+ daycareMail->holdsItem[i] = TRUE;
+ }
+ }
+ else
+ {
+ daycareMail->holdsItem[i] = TRUE;
+ }
+ }
+
+ daycareMail->numDaycareMons = numDaycareMons;
+}
+
+static s8 Daycare_FindEmptySpot(struct DayCare *daycare)
+{
+ u8 i;
+
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
+ {
+ if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES) == 0)
+ return i;
+ }
+
+ return -1;
+}
+
+static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycareMon)
+{
+ if (MonHasMail(mon))
+ {
+ u8 mailId;
+
+ StringCopy(daycareMon->mail.OT_name, gSaveBlock2Ptr->playerName);
+ GetMonNick(mon, daycareMon->mail.monName);
+// StripExtCtrlCodes(daycareMon->mail.monName);
+// daycareMon->mail.gameLanguage = LANGUAGE_ENGLISH;
+// daycareMon->mail.monLanguage = GetMonData(mon, MON_DATA_LANGUAGE);
+ mailId = GetMonData(mon, MON_DATA_MAIL);
+ daycareMon->mail.message = gSaveBlock1Ptr->mail[mailId];
+ TakeMailFromMon(mon);
+ }
+
+ daycareMon->mon = mon->box;
+ BoxMonRestorePP(&daycareMon->mon);
+ daycareMon->steps = 0;
+ ZeroMonData(mon);
+ CompactPartySlots();
+ CalculatePlayerPartyCount();
+}
+
+static void StorePokemonInEmptyDaycareSlot(struct Pokemon *mon, struct DayCare *daycare)
+{
+ s8 slotId = Daycare_FindEmptySpot(daycare);
+ StorePokemonInDaycare(mon, &daycare->mons[slotId]);
+}
+
+void StoreSelectedPokemonInDaycare(void)
+{
+ u8 monId = GetCursorSelectionMonId();
+ StorePokemonInEmptyDaycareSlot(&gPlayerParty[monId], &gSaveBlock1Ptr->daycare);
+}
+
+// Shifts the second daycare pokemon slot into the first slot.
+static void ShiftDaycareSlots(struct DayCare *daycare)
+{
+ // This condition is only satisfied when the player takes out the first pokemon from the daycare.
+ if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0
+ && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == 0)
+ {
+ daycare->mons[0].mon = daycare->mons[1].mon;
+ ZeroBoxMonData(&daycare->mons[1].mon);
+
+ daycare->mons[0].mail = daycare->mons[1].mail;
+ daycare->mons[0].steps = daycare->mons[1].steps;
+ daycare->mons[1].steps = 0;
+ ClearDaycareMonMail(&daycare->mons[1].mail);
+ }
+}
+
+static void ApplyDaycareExperience(struct Pokemon *mon)
+{
+ s32 i;
+ bool8 firstMove;
+ u16 learnedMove;
+
+ for (i = 0; i < MAX_MON_LEVEL; i++)
+ {
+ // Add the mon's gained daycare experience level by level until it can't level up anymore.
+ if (TryIncrementMonLevel(mon))
+ {
+ // Teach the mon new moves it learned while in the daycare.
+ firstMove = TRUE;
+ while ((learnedMove = MonTryLearningNewMove(mon, firstMove)) != 0)
+ {
+ firstMove = FALSE;
+ if (learnedMove == 0xFFFF)
+ {
+ // Mon already knows 4 moves.
+ DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn);
+ }
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ // Re-calculate the mons stats at its new level.
+ CalculateMonStats(mon);
+}
+
+static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon)
+{
+ u16 species;
+ u32 experience;
+ struct Pokemon pokemon;
+
+ GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES);
+ BoxMonToMon(&daycareMon->mon, &pokemon);
+
+ if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_MON_LEVEL)
+ {
+ experience = GetMonData(&pokemon, MON_DATA_EXP) + daycareMon->steps;
+ SetMonData(&pokemon, MON_DATA_EXP, &experience);
+ ApplyDaycareExperience(&pokemon);
+ }
+
+ gPlayerParty[PARTY_SIZE - 1] = pokemon;
+ if (daycareMon->mail.message.itemId)
+ {
+ GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycareMon->mail.message);
+ ClearDaycareMonMail(&daycareMon->mail);
+ }
+
+ ZeroBoxMonData(&daycareMon->mon);
+ daycareMon->steps = 0;
+ CompactPartySlots();
+ CalculatePlayerPartyCount();
+ return species;
+}
+
+static u16 TakeSelectedPokemonMonFromDaycareShiftSlots(struct DayCare *daycare, u8 slotId)
+{
+ u16 species = TakeSelectedPokemonFromDaycare(&daycare->mons[slotId]);
+ ShiftDaycareSlots(daycare);
+ return species;
+}
+
+u16 TakePokemonFromDaycare(void)
+{
+ return TakeSelectedPokemonMonFromDaycareShiftSlots(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+}
+
+static u8 GetLevelAfterDaycareSteps(struct BoxPokemon *mon, u32 steps)
+{
+ struct BoxPokemon tempMon = *mon;
+
+ u32 experience = GetBoxMonData(mon, MON_DATA_EXP) + steps;
+ SetBoxMonData(&tempMon, MON_DATA_EXP, &experience);
+ return GetLevelFromBoxMonExp(&tempMon);
+}
+
+static u8 GetNumLevelsGainedFromSteps(struct DaycareMon *daycareMon)
+{
+ u8 levelBefore;
+ u8 levelAfter;
+
+ levelBefore = GetLevelFromBoxMonExp(&daycareMon->mon);
+ levelAfter = GetLevelAfterDaycareSteps(&daycareMon->mon, daycareMon->steps);
+ return levelAfter - levelBefore;
+}
+
+static u8 GetNumLevelsGainedForDaycareMon(struct DaycareMon *daycareMon)
+{
+ u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon);
+ ConvertIntToDecimalStringN(gStringVar2, numLevelsGained, STR_CONV_MODE_LEFT_ALIGN, 2);
+ GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ return numLevelsGained;
+}
+
+static u32 GetDaycareCostForSelectedMon(struct DaycareMon *daycareMon)
+{
+ u32 cost;
+
+ u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon);
+ GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ cost = 100 + 100 * numLevelsGained;
+ ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5);
+ return cost;
+}
+
+static u16 GetDaycareCostForMon(struct DayCare *daycare, u8 slotId)
+{
+ return GetDaycareCostForSelectedMon(&daycare->mons[slotId]);
+}
+
+void GetDaycareCost(void)
+{
+ gSpecialVar_0x8005 = GetDaycareCostForMon(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+}
+
+static void Debug_AddDaycareSteps(u16 numSteps)
+{
+ gSaveBlock1Ptr->daycare.mons[0].steps += numSteps;
+ gSaveBlock1Ptr->daycare.mons[1].steps += numSteps;
+ gSaveBlock1Ptr->route5DayCareMon.steps += numSteps;
+}
+
+u8 GetNumLevelsGainedFromDaycare(void)
+{
+ if (GetBoxMonData(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0)
+ return GetNumLevelsGainedForDaycareMon(&gSaveBlock1Ptr->daycare.mons[gSpecialVar_0x8004]);
+
+ return 0;
+}
+
+static void ClearDaycareMonMail(struct DayCareMail *mail)
+{
+ s32 i;
+
+ for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ mail->OT_name[i] = 0;
+ for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
+ mail->monName[i] = 0;
+
+ ClearMailStruct(&mail->message);
+}
+
+static void ClearDaycareMon(struct DaycareMon *daycareMon)
+{
+ ZeroBoxMonData(&daycareMon->mon);
+ daycareMon->steps = 0;
+ ClearDaycareMonMail(&daycareMon->mail);
+}
+
+static void ClearAllDaycareData(struct DayCare *daycare)
+{
+ u8 i;
+
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
+ ClearDaycareMon(&daycare->mons[i]);
+
+ daycare->offspringPersonality = 0;
+ daycare->stepCounter = 0;
+}
+
+// Determines what the species of an Egg would be based on the given species.
+// It determines this by working backwards through the evolution chain of the
+// given species.
+static u16 GetEggSpecies(u16 species)
+{
+ int i, j, k;
+ bool8 found;
+
+ // Working backwards up to 5 times seems arbitrary, since the maximum number
+ // of times would only be 3 for 3-stage evolutions.
+ for (i = 0; i < EVOS_PER_MON; i++)
+ {
+ found = FALSE;
+ for (j = 1; j < NUM_SPECIES; j++)
+ {
+ for (k = 0; k < EVOS_PER_MON; k++)
+ {
+ if (gEvolutionTable[j][k].targetSpecies == species)
+ {
+ species = j;
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (found)
+ break;
+ }
+
+ if (j == NUM_SPECIES)
+ break;
+ }
+
+ return species;
+}
+//
+//static s32 GetSlotToInheritNature(struct DayCare *daycare)
+//{
+// u32 species[DAYCARE_MON_COUNT];
+// s32 i;
+// s32 dittoCount;
+// s32 slot = -1;
+//
+// // search for female gender
+// for (i = 0; i < DAYCARE_MON_COUNT; i++)
+// {
+// if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE)
+// slot = i;
+// }
+//
+// // search for ditto
+// for (dittoCount = 0, i = 0; i < DAYCARE_MON_COUNT; i++)
+// {
+// species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
+// if (species[i] == SPECIES_DITTO)
+// dittoCount++, slot = i;
+// }
+//
+// // coin flip on ...two Dittos
+// if (dittoCount == 2)
+// {
+// if (Random() >= USHRT_MAX / 2)
+// slot = 0;
+// else
+// slot = 1;
+// }
+//
+// // nature inheritance only if holds everstone
+// if (GetBoxMonData(&daycare->mons[slot].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE
+// || Random() >= USHRT_MAX / 2)
+// {
+// return -1;
+// }
+//
+// return slot;
+//}
+
+static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
+{
+// s32 natureSlot;
+// s32 natureTries = 0;
+//
+// SeedRng2(gMain.vblankCounter2);
+// natureSlot = GetSlotToInheritNature(daycare);
+//
+// if (natureSlot < 0)
+// {
+// daycare->offspringPersonality = (Random2() << 0x10) | ((Random() % 0xfffe) + 1);
+// }
+// else
+// {
+// u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[natureSlot].mon, MON_DATA_PERSONALITY, NULL));
+// u32 personality;
+//
+// do
+// {
+// personality = (Random2() << 0x10) | (Random());
+// if (wantedNature == GetNatureFromPersonality(personality) && personality != 0)
+// break; // we found a personality with the same nature
+//
+// natureTries++;
+// } while (natureTries <= 2400);
+//
+// daycare->offspringPersonality = personality;
+// }
+
+ daycare->offspringPersonality = ((Random()) % 0xFFFE) + 1;
+ FlagSet(FLAG_PENDING_DAYCARE_EGG);
+}
+
+static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare)
+{
+ daycare->offspringPersonality = (Random()) | (0x8000);
+ FlagSet(FLAG_PENDING_DAYCARE_EGG);
+}
+
+void TriggerPendingDaycareEgg(void)
+{
+ _TriggerPendingDaycareEgg(&gSaveBlock1Ptr->daycare);
+}
+
+static void TriggerPendingDaycareMaleEgg(void)
+{
+ _TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare);
+}
+
+// Removes the selected index from the given IV list and shifts the remaining
+// elements to the left.
+static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv)
+{
+ s32 i, j;
+ u8 temp[NUM_STATS];
+
+ ivs[selectedIv] = 0xFF;
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ temp[i] = ivs[i];
+ }
+
+ j = 0;
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ if (temp[i] != 0xFF)
+ ivs[j++] = temp[i];
+ }
+}
+
+static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
+{
+ u8 i;
+ u8 selectedIvs[3];
+ u8 availableIVs[NUM_STATS];
+ u8 whichParent[ARRAY_COUNT(selectedIvs)];
+ u8 iv;
+
+ // Initialize a list of IV indices.
+ for (i = 0; i < NUM_STATS; i++)
+ {
+ availableIVs[i] = i;
+ }
+
+ // Select the 3 IVs that will be inherited.
+ for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ {
+ // Randomly pick an IV from the available list.
+ selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)];
+
+ // Remove the selected IV index from the available IV indices.
+ RemoveIVIndexFromList(availableIVs, selectedIvs[i]);
+ }
+
+ // Determine which parent each of the selected IVs should inherit from.
+ for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ {
+ whichParent[i] = Random() % 2;
+ }
+
+ // Set each of inherited IVs on the egg mon.
+ for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ {
+ switch (selectedIvs[i])
+ {
+ case 0:
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_HP_IV);
+ SetMonData(egg, MON_DATA_HP_IV, &iv);
+ break;
+ case 1:
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_ATK_IV);
+ SetMonData(egg, MON_DATA_ATK_IV, &iv);
+ break;
+ case 2:
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_DEF_IV);
+ SetMonData(egg, MON_DATA_DEF_IV, &iv);
+ break;
+ case 3:
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPEED_IV);
+ SetMonData(egg, MON_DATA_SPEED_IV, &iv);
+ break;
+ case 4:
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPATK_IV);
+ SetMonData(egg, MON_DATA_SPATK_IV, &iv);
+ break;
+ case 5:
+ iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPDEF_IV);
+ SetMonData(egg, MON_DATA_SPDEF_IV, &iv);
+ break;
+ }
+ }
+}
+
+// Counts the number of egg moves a pokemon learns and stores the moves in
+// the given array.
+static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves)
+{
+ u16 eggMoveIdx;
+ u16 numEggMoves;
+ u16 species;
+ u16 i;
+
+ numEggMoves = 0;
+ eggMoveIdx = 0;
+ species = GetMonData(pokemon, MON_DATA_SPECIES);
+ for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++)
+ {
+ if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
+ {
+ eggMoveIdx = i + 1;
+ break;
+ }
+ }
+
+ for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
+ {
+ if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET)
+ {
+ // TODO: the curly braces around this if statement are required for a matching build.
+ break;
+ }
+
+ eggMoves[i] = gEggMoves[eggMoveIdx + i];
+ numEggMoves++;
+ }
+
+ return numEggMoves;
+}
+
+static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother)
+{
+ u16 numSharedParentMoves;
+ u32 numLevelUpMoves;
+ u16 numEggMoves;
+ u16 i, j;
+
+ numSharedParentMoves = 0;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ sHatchedEggMotherMoves[i] = 0;
+ sHatchedEggFatherMoves[i] = 0;
+ sHatchedEggFinalMoves[i] = 0;
+ }
+ for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
+ sHatchedEggEggMoves[i] = 0;
+ for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++)
+ sHatchedEggLevelUpMoves[i] = 0;
+
+ numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), sHatchedEggLevelUpMoves);
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ sHatchedEggFatherMoves[i] = GetBoxMonData(father, MON_DATA_MOVE1 + i);
+ sHatchedEggMotherMoves[i] = GetBoxMonData(mother, MON_DATA_MOVE1 + i);
+ }
+
+ numEggMoves = GetEggMoves(egg, sHatchedEggEggMoves);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (sHatchedEggFatherMoves[i] != MOVE_NONE)
+ {
+ for (j = 0; j < numEggMoves; j++)
+ {
+ if (sHatchedEggFatherMoves[i] == sHatchedEggEggMoves[j])
+ {
+ if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF)
+ DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]);
+ break;
+ }
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (sHatchedEggFatherMoves[i] != MOVE_NONE)
+ {
+ for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++)
+ {
+ if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01/*_FOCUS_PUNCH*/ + j) && CanMonLearnTMHM(egg, j))
+ {
+ if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF)
+ DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]);
+ }
+ }
+ }
+ }
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (sHatchedEggFatherMoves[i] == MOVE_NONE)
+ break;
+ for (j = 0; j < MAX_MON_MOVES; j++)
+ {
+ if (sHatchedEggFatherMoves[i] == sHatchedEggMotherMoves[j] && sHatchedEggFatherMoves[i] != MOVE_NONE)
+ sHatchedEggFinalMoves[numSharedParentMoves++] = sHatchedEggFatherMoves[i];
+ }
+ }
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (sHatchedEggFinalMoves[i] == MOVE_NONE)
+ break;
+ for (j = 0; j < numLevelUpMoves; j++)
+ {
+ if (sHatchedEggLevelUpMoves[j] != MOVE_NONE && sHatchedEggFinalMoves[i] == sHatchedEggLevelUpMoves[j])
+ {
+ if (GiveMoveToMon(egg, sHatchedEggFinalMoves[i]) == 0xFFFF)
+ DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFinalMoves[i]);
+ break;
+ }
+ }
+ }
+}
+
+static void RemoveEggFromDayCare(struct DayCare *daycare)
+{
+ daycare->offspringPersonality = 0;
+ daycare->stepCounter = 0;
+}
+
+void RejectEggFromDayCare(void)
+{
+ RemoveEggFromDayCare(&gSaveBlock1Ptr->daycare);
+}
+
+static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare)
+{
+ u16 motherItem, fatherItem;
+ if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL)
+ {
+ motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM);
+ fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM);
+ if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE)
+ {
+ *species = SPECIES_WOBBUFFET;
+ }
+
+ if (*species == SPECIES_AZURILL && motherItem != ITEM_SEA_INCENSE && fatherItem != ITEM_SEA_INCENSE)
+ {
+ *species = SPECIES_MARILL;
+ }
+ }
+}
+
+/*static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *daycare)
+{
+ u32 motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM);
+ u32 fatherItem = GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM);
+
+ if (motherItem == ITEM_LIGHT_BALL || fatherItem == ITEM_LIGHT_BALL)
+ {
+ if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == 0xFFFF)
+ DeleteFirstMoveAndGiveMoveToMon(mon, MOVE_VOLT_TACKLE);
+ }
+}*/
+
+static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots)
+{
+ u16 i;
+ u16 species[2];
+ u16 eggSpecies;
+
+ // Determine which of the daycare mons is the mother and father of the egg.
+ // The 0th index of the parentSlots array is considered the mother slot, and the
+ // 1st index is the father slot.
+ for (i = 0; i < 2; i++)
+ {
+ species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
+ if (species[i] == SPECIES_DITTO)
+ {
+ parentSlots[0] = i ^ 1;
+ parentSlots[1] = i;
+ }
+ else if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE)
+ {
+ parentSlots[0] = i;
+ parentSlots[1] = i ^ 1;
+ }
+ }
+
+ eggSpecies = GetEggSpecies(species[parentSlots[0]]);
+ if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & 0x8000)
+ {
+ eggSpecies = SPECIES_NIDORAN_M;
+ }
+ if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & 0x8000)
+ {
+ eggSpecies = SPECIES_VOLBEAT;
+ }
+
+ // Make Ditto the "mother" slot if the other daycare mon is male.
+ if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]].mon) != MON_FEMALE)
+ {
+ u8 temp = parentSlots[1];
+ parentSlots[1] = parentSlots[0];
+ parentSlots[0] = temp;
+ }
+
+ return eggSpecies;
+}
+
+static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg
+{
+ struct Pokemon egg;
+ u16 species;
+ u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father"
+ bool8 isEgg;
+
+ species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots);
+ AlterEggSpeciesWithIncenseItem(&species, daycare);
+ SetInitialEggData(&egg, species, daycare);
+ InheritIVs(&egg, daycare);
+ BuildEggMoveset(&egg, &daycare->mons[parentSlots[1]].mon, &daycare->mons[parentSlots[0]].mon);
+
+ /*if (species == SPECIES_PICHU)
+ GiveVoltTackleIfLightBall(&egg, daycare);*/
+
+ isEgg = TRUE;
+ SetMonData(&egg, MON_DATA_IS_EGG, &isEgg);
+ gPlayerParty[PARTY_SIZE - 1] = egg;
+ CompactPartySlots();
+ CalculatePlayerPartyCount();
+ RemoveEggFromDayCare(daycare);
+}
+
+void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
+{
+ u8 metLevel;
+ u16 ball;
+ u8 language;
+ u8 metLocation;
+ u8 isEgg;
+
+ CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, FALSE, 0, FALSE, 0);
+ metLevel = 0;
+ ball = ITEM_POKE_BALL;
+ language = LANGUAGE_JAPANESE;
+ SetMonData(mon, MON_DATA_POKEBALL, &ball);
+ SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
+ SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+ if (setHotSpringsLocation)
+ {
+ metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo
+ SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
+ }
+
+ isEgg = TRUE;
+ SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
+}
+
+static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare)
+{
+ u32 personality;
+ u16 ball;
+ u8 metLevel;
+ u8 language;
+
+ personality = daycare->offspringPersonality | (Random() << 16);
+ CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, TRUE, personality, FALSE, 0);
+ metLevel = 0;
+ ball = ITEM_POKE_BALL;
+ language = LANGUAGE_JAPANESE;
+ SetMonData(mon, MON_DATA_POKEBALL, &ball);
+ SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
+ SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+}
+
+void GiveEggFromDaycare(void)
+{
+ _GiveEggFromDaycare(&gSaveBlock1Ptr->daycare);
+}
+
+static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
+{
+ u32 i, validEggs = 0;
+
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
+ {
+ if (GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SANITY_HAS_SPECIES))
+ daycare->mons[i].steps++, validEggs++;
+ }
+
+ // try to trigger poke sex
+ if (daycare->offspringPersonality == 0 && validEggs == 2 && (daycare->mons[1].steps & 0xFF) == 0xFF)
+ {
+ u8 loveScore = GetDaycareCompatibilityScore(daycare);
+ if (loveScore > (Random() * 100u) / USHRT_MAX)
+ TriggerPendingDaycareEgg();
+ }
+
+ if (++daycare->stepCounter == 255) // hatch an egg
+ {
+ u32 steps;
+
+ for (i = 0; i < gPlayerPartyCount; i++)
+ {
+ if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ continue;
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG))
+ continue;
+
+ steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
+ if (steps != 0) // subtract needed steps
+ {
+ steps -= 1;
+
+ SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps);
+ }
+ else // hatch the egg
+ {
+ gSpecialVar_0x8004 = i;
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE; // no hatching
+}
+
+bool8 ShouldEggHatch(void)
+{
+ if (GetBoxMonData(&gSaveBlock1Ptr->route5DayCareMon.mon, MON_DATA_SANITY_HAS_SPECIES))
+ gSaveBlock1Ptr->route5DayCareMon.steps++;
+ return _DoEggActions_CheckHatch(&gSaveBlock1Ptr->daycare);
+}
+
+static bool8 IsEggPending(struct DayCare *daycare)
+{
+ return (daycare->offspringPersonality != 0);
+}
+
+// gStringVar1 = first mon's nickname
+// gStringVar2 = second mon's nickname
+// gStringVar3 = first mon trainer's name
+static void _GetDaycareMonNicknames(struct DayCare *daycare)
+{
+ u8 text[12];
+ if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0)
+ {
+ GetBoxMonNick(&daycare->mons[0].mon, gStringVar1);
+ GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text);
+ StringCopy(gStringVar3, text);
+ }
+
+ if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0)
+ {
+ GetBoxMonNick(&daycare->mons[1].mon, gStringVar2);
+ }
+}
+
+u16 GetSelectedMonNickAndSpecies(void)
+{
+ GetBoxMonNick(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1);
+ return GetBoxMonData(&gPlayerParty[GetCursorSelectionMonId()].box, MON_DATA_SPECIES);
+}
+
+void GetDaycareMonNicknames(void)
+{
+ _GetDaycareMonNicknames(&gSaveBlock1Ptr->daycare);
+}
+
+u8 GetDaycareState(void)
+{
+ // The daycare can be in 4 possible states:
+ // 0: default state--no deposited mons, no egg
+ // 1: there is an egg waiting for the player to pick it up
+ // 2: there is a single pokemon in the daycare
+ // 3: there are two pokemon in the daycare, no egg
+
+ u8 numMons;
+ if (IsEggPending(&gSaveBlock1Ptr->daycare))
+ {
+ // There is an Egg waiting for the player.
+ return 1;
+ }
+
+ numMons = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare);
+ if (numMons != 0)
+ {
+ return numMons + 1;
+ }
+
+ return 0;
+}
+
+u8 GetDaycarePokemonCount(void)
+{
+ u8 ret = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
+{
+ // Determine if the two given egg group lists contain any of the
+ // same egg groups.
+ s32 i, j;
+
+ for (i = 0; i < 2; i++)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ if (eggGroups1[i] == eggGroups2[j])
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
+{
+ u32 i;
+ u16 eggGroups[2][2];
+ u16 species[2];
+ u32 trainerIds[2];
+ u32 genders[2];
+
+ for (i = 0; i < 2; i++)
+ {
+ u32 personality;
+
+ species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
+ trainerIds[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_OT_ID);
+ personality = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_PERSONALITY);
+ genders[i] = GetGenderFromSpeciesAndPersonality(species[i], personality);
+ eggGroups[i][0] = gBaseStats[species[i]].eggGroup1;
+ eggGroups[i][1] = gBaseStats[species[i]].eggGroup2;
+ }
+
+ // check unbreedable egg group
+ if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED)
+ return 0;
+ // two Ditto can't breed
+ if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO)
+ return 0;
+
+ // now that we checked, one ditto can breed with any other mon
+ if (eggGroups[0][0] == EGG_GROUP_DITTO || eggGroups[1][0] == EGG_GROUP_DITTO)
+ {
+ if (trainerIds[0] == trainerIds[1]) // same trainer
+ return 20;
+
+ return 50; // different trainers, more chance of poke sex
+ }
+ else
+ {
+ if (genders[0] == genders[1]) // no homo
+ return 0;
+ if (genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS)
+ return 0;
+ if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) // not compatible with each other
+ return 0;
+
+ if (species[0] == species[1]) // same species
+ {
+ if (trainerIds[0] == trainerIds[1]) // same species and trainer
+ return 50;
+
+ return 70; // different trainers, same species
+ }
+ else
+ {
+ if (trainerIds[0] != trainerIds[1]) // different trainers, different species
+ return 50;
+
+ return 20; // different species, same trainer
+ }
+ }
+}
+
+static u8 GetDaycareCompatibilityScoreFromSave(void)
+{
+ return GetDaycareCompatibilityScore(&gSaveBlock1Ptr->daycare);
+}
+
+void SetDaycareCompatibilityString(void)
+{
+ u8 whichString;
+ u8 relationshipScore;
+
+ relationshipScore = GetDaycareCompatibilityScoreFromSave();
+ whichString = 0;
+ if (relationshipScore == 0)
+ whichString = 3;
+ if (relationshipScore == 20)
+ whichString = 2;
+ if (relationshipScore == 50)
+ whichString = 1;
+ if (relationshipScore == 70)
+ whichString = 0;
+
+ StringCopy(gStringVar4, sCompatibilityMessages[whichString]);
+}
+
+bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
+{
+ u8 i;
+ u8 symbolsCount[2]; // male, female
+ symbolsCount[0] = symbolsCount[1] = 0;
+
+ for (i = 0; name[i] != EOS; i++)
+ {
+ if (name[i] == CHAR_MALE)
+ symbolsCount[0]++;
+ if (name[i] == CHAR_FEMALE)
+ symbolsCount[1]++;
+ }
+
+ if (genderRatio == MON_MALE && symbolsCount[0] != 0 && symbolsCount[1] == 0)
+ return TRUE;
+ if (genderRatio == MON_FEMALE && symbolsCount[1] != 0 && symbolsCount[0] == 0)
+ return TRUE;
+
+ return FALSE;
+}
+
+static u8 *AppendGenderSymbol(u8 *name, u8 gender)
+{
+ if (gender == MON_MALE)
+ {
+ if (!NameHasGenderSymbol(name, MON_MALE))
+ return StringAppend(name, gText_MaleSymbol4);
+ }
+ else if (gender == MON_FEMALE)
+ {
+ if (!NameHasGenderSymbol(name, MON_FEMALE))
+ return StringAppend(name, gText_FemaleSymbol4);
+ }
+
+ return StringAppend(name, gText_GenderlessSymbol);
+}
+
+static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
+{
+ return AppendGenderSymbol(name, GetBoxMonGender(boxMon));
+}
+
+static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest)
+{
+ u8 monNames[2][20];
+ u8 i;
+
+ *dest = EOS;
+ for (i = 0; i < 2; i++)
+ {
+ GetBoxMonNick(&daycare->mons[i].mon, monNames[i]);
+ AppendMonGenderSymbol(monNames[i], &daycare->mons[i].mon);
+ }
+
+ StringCopy(dest, monNames[0]);
+ StringAppend(dest, sNewLineText);
+ StringAppend(dest, monNames[1]);
+ StringAppend(dest, sNewLineText);
+ StringAppend(dest, gOtherText_Exit);
+}
+
+static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest)
+{
+ u8 i;
+ u8 level;
+ u8 text[20];
+
+ *dest = EOS;
+ for (i = 0; i < 2; i++)
+ {
+ StringAppend(dest, gText_Lv);
+ level = GetLevelAfterDaycareSteps(&daycare->mons[i].mon, daycare->mons[i].steps);
+ ConvertIntToDecimalStringN(text, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringAppend(dest, text);
+ StringAppend(dest, sNewLineText);
+ }
+}
+
+static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y)
+{
+ struct TextPrinterTemplate printer;
+
+ printer.currentChar = text;
+ printer.windowId = windowId;
+ printer.fontId = 3;
+ printer.x = x;
+ printer.y = y;
+ printer.currentX = x;
+ printer.currentY = y;
+ printer.unk = 0;
+ gTextFlags.useAlternateDownArrow = 0;
+ printer.letterSpacing = 1;
+ printer.lineSpacing = 1;
+ printer.fgColor = 2;
+ printer.bgColor = 1;
+ printer.shadowColor = 3;
+
+ AddTextPrinter(&printer, 0xFF, NULL);
+}
+
+static void DaycarePrintMonNick(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
+{
+ u8 nick[POKEMON_NAME_LENGTH * 2];
+
+ GetBoxMonNick(&daycare->mons[daycareSlotId].mon, nick);
+ AppendMonGenderSymbol(nick, &daycare->mons[daycareSlotId].mon);
+ DaycareAddTextPrinter(windowId, nick, 8, y);
+}
+
+static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
+{
+ u8 level;
+ u32 x;
+ u8 lvlText[12];
+ u8 intText[8];
+
+ strcpy((char *)lvlText, (const char *)gText_Lv);
+ level = GetLevelAfterDaycareSteps(&daycare->mons[daycareSlotId].mon, daycare->mons[daycareSlotId].steps);
+ ConvertIntToDecimalStringN(intText, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringAppend(lvlText, intText);
+ x = 132 - GetStringWidth(3, lvlText, 0);
+ DaycareAddTextPrinter(windowId, lvlText, x, y);
+}
+
+static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y)
+{
+ if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT)
+ {
+ DaycarePrintMonNick(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
+ DaycarePrintMonLvl(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
+ }
+}
+
+#define tMenuListTaskId data[0]
+#define tWindowId data[1]
+
+static void Task_HandleDaycareLevelMenuInput(u8 taskId)
+{
+ u32 input = ListMenuHandleInput(gTasks[taskId].tMenuListTaskId);
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ switch (input)
+ {
+ case 0:
+ case 1:
+ gSpecialVar_Result = input;
+ break;
+ case 5:
+ gSpecialVar_Result = 2;
+ break;
+ }
+ DestroyListMenu(gTasks[taskId].tMenuListTaskId, NULL, NULL);
+ ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
+ RemoveWindow(gTasks[taskId].tWindowId);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ gSpecialVar_Result = 2;
+ DestroyListMenu(gTasks[taskId].tMenuListTaskId, NULL, NULL);
+ ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
+ RemoveWindow(gTasks[taskId].tWindowId);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+}
+
+void ShowDaycareLevelMenu(void)
+{
+ struct ListMenuTemplate menuTemplate;
+ u8 windowId;
+ u8 listMenuTaskId;
+ u8 daycareMenuTaskId;
+
+ windowId = AddWindow(&sDaycareLevelMenuWindowTemplate);
+ DrawStdWindowFrame(windowId, FALSE);
+
+ menuTemplate = sDaycareListMenuLevelTemplate;
+ menuTemplate.windowId = windowId;
+ listMenuTaskId = ListMenuInit(&menuTemplate, 0, 0);
+
+ CopyWindowToVram(windowId, 3);
+
+ daycareMenuTaskId = CreateTask(Task_HandleDaycareLevelMenuInput, 3);
+ gTasks[daycareMenuTaskId].tMenuListTaskId = listMenuTaskId;
+ gTasks[daycareMenuTaskId].tWindowId = windowId;
+}
+
+#undef tMenuListTaskId
+#undef tWindowId
+
+void ChooseSendDaycareMon(void)
+{
+ sub_8128370();
+ gMain.savedCallback = c2_exit_to_overworld_2_switch;
+}
+
+// Route 5 Daycare
+
+void PutMonInRoute5Daycare(void)
+{
+ u8 monIdx = GetCursorSelectionMonId();
+ StorePokemonInDaycare(&gPlayerParty[monIdx], &gSaveBlock1Ptr->route5DayCareMon);
+}
+
+void GetCostToWithdrawRoute5DaycareMon(void)
+{
+ u16 cost = GetDaycareCostForSelectedMon(&gSaveBlock1Ptr->route5DayCareMon);
+ gSpecialVar_0x8005 = cost;
+}
+
+bool8 IsThereMonInRoute5Daycare(void)
+{
+ if (GetBoxMonData(&gSaveBlock1Ptr->route5DayCareMon.mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ return TRUE;
+
+ return FALSE;
+}
+
+u8 GetNumLevelsGainedForRoute5DaycareMon(void)
+{
+ return GetNumLevelsGainedForDaycareMon(&gSaveBlock1Ptr->route5DayCareMon);
+}
+
+u16 TakePokemonFromRoute5Daycare(void)
+{
+ return TakeSelectedPokemonFromDaycare(&gSaveBlock1Ptr->route5DayCareMon);
+}
diff --git a/src/menu2.c b/src/menu2.c
index ec244b8f7..0676fc75e 100644
--- a/src/menu2.c
+++ b/src/menu2.c
@@ -426,9 +426,9 @@ static const u8 gUnknown_845FD54[][5] = {
void box_print(u8 windowId, u8 fontId, u8 x, u8 y, const struct TextColor * color, s8 speed, const u8 * str)
{
- struct TextSubPrinter printer;
+ struct TextPrinterTemplate printer;
- printer.current_text_offset = str;
+ printer.currentChar = str;
printer.windowId = windowId;
printer.fontId = fontId;
printer.x = x;
@@ -437,8 +437,8 @@ void box_print(u8 windowId, u8 fontId, u8 x, u8 y, const struct TextColor * colo
printer.currentY = printer.y;
printer.letterSpacing = GetFontAttribute(fontId, 2);
printer.lineSpacing = GetFontAttribute(fontId, 3);
- printer.fontColor_l = 0;
- printer.fontColor_h = color->bgColor;
+ printer.unk = 0;
+ printer.fgColor = color->bgColor;
printer.bgColor = color->fgColor;
printer.shadowColor = color->shadowColor;
AddTextPrinter(&printer, speed, NULL);
@@ -446,9 +446,9 @@ void box_print(u8 windowId, u8 fontId, u8 x, u8 y, const struct TextColor * colo
void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const struct TextColor *color, s8 speed, const u8 *str)
{
- struct TextSubPrinter printer;
+ struct TextPrinterTemplate printer;
- printer.current_text_offset = str;
+ printer.currentChar = str;
printer.windowId = windowId;
printer.fontId = fontId;
printer.x = x;
@@ -457,18 +457,18 @@ void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSp
printer.currentY = printer.y;
printer.letterSpacing = letterSpacing;
printer.lineSpacing = lineSpacing;
- printer.fontColor_l = 0;
- printer.fontColor_h = color->bgColor;
+ printer.unk = 0;
+ printer.fgColor = color->bgColor;
printer.bgColor = color->fgColor;
printer.shadowColor = color->shadowColor;
AddTextPrinter(&printer, speed, NULL);
}
-void sub_812E62C(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 letterSpacing, u8 lineSpacing)
+void sub_812E62C(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing)
{
- struct TextSubPrinter printer;
+ struct TextPrinterTemplate printer;
- printer.current_text_offset = str;
+ printer.currentChar = str;
printer.windowId = windowId;
printer.fontId = fontId;
printer.x = x;
@@ -477,8 +477,8 @@ void sub_812E62C(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, vo
printer.currentY = y;
printer.letterSpacing = letterSpacing;
printer.lineSpacing = lineSpacing;
- printer.fontColor_l = 0;
- printer.fontColor_h = GetFontAttribute(fontId, 5);
+ printer.unk = 0;
+ printer.fgColor = GetFontAttribute(fontId, 5);
printer.bgColor = GetFontAttribute(fontId, 6);
printer.shadowColor = GetFontAttribute(fontId, 7);
AddTextPrinter(&printer, speed, callback);
diff --git a/src/oak_speech.c b/src/oak_speech.c
index f00d683cf..eb87723a6 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -535,7 +535,7 @@ static void Task_OaksSpeech1(u8 taskId)
break;
case 5:
sOakSpeechResources->textSpeed = GetTextSpeedSetting();
- gTextFlags.flag_0 = TRUE;
+ gTextFlags.canABSpeedUpPrint = TRUE;
decompress_and_copy_tile_data_to_vram(1, sOakSpeechGfx_GameStartHelpUI, 0, 0, 0);
break;
case 6:
@@ -1516,7 +1516,7 @@ static void Task_OakSpeech42(u8 taskId)
sub_8044D80();
Free(sOakSpeechResources);
sOakSpeechResources = NULL;
- gTextFlags.flag_0 = FALSE;
+ gTextFlags.canABSpeedUpPrint = FALSE;
SetMainCallback2(CB2_NewGame);
DestroyTask(taskId);
}
@@ -1600,7 +1600,7 @@ static void CB2_ReturnFromNamingScreen(void)
ShowBg(2);
EnableInterrupts(INTR_FLAG_VBLANK);
SetVBlankCallback(VBlankCB_NewGameOaksSpeech);
- gTextFlags.flag_0 = TRUE;
+ gTextFlags.canABSpeedUpPrint = TRUE;
SetMainCallback2(CB2_NewGameOaksSpeech);
return;
}
diff --git a/src/pokemon.c b/src/pokemon.c
index 9d902f901..0d4042137 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -1415,13 +1415,13 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
case MON_DATA_LANGUAGE:
retVal = boxMon->language;
break;
- case MON_DATA_SANITY_BIT1:
+ case MON_DATA_SANITY_IS_BAD_EGG:
retVal = boxMon->isBadEgg;
break;
- case MON_DATA_SANITY_BIT2:
+ case MON_DATA_SANITY_HAS_SPECIES:
retVal = boxMon->hasSpecies;
break;
- case MON_DATA_SANITY_BIT3:
+ case MON_DATA_SANITY_IS_EGG:
retVal = boxMon->isEgg;
break;
case MON_DATA_OT_NAME:
@@ -1809,13 +1809,13 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
case MON_DATA_LANGUAGE:
SET8(boxMon->language);
break;
- case MON_DATA_SANITY_BIT1:
+ case MON_DATA_SANITY_IS_BAD_EGG:
SET8(boxMon->isBadEgg);
break;
- case MON_DATA_SANITY_BIT2:
+ case MON_DATA_SANITY_HAS_SPECIES:
SET8(boxMon->hasSpecies);
break;
- case MON_DATA_SANITY_BIT3:
+ case MON_DATA_SANITY_IS_EGG:
SET8(boxMon->isEgg);
break;
case MON_DATA_OT_NAME:
@@ -5223,7 +5223,7 @@ void sub_8043B48(struct Pokemon *mon, int species, u8 unused, u32 data)
}
}
-bool32 sub_8043B90(struct Pokemon *mon)
+bool8 TryIncrementMonLevel(struct Pokemon *mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
u8 level = GetMonData(mon, MON_DATA_LEVEL, NULL);
diff --git a/src/quest_log.c b/src/quest_log.c
index 340bef957..366af45f3 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -1055,7 +1055,7 @@ void sub_8111438(void)
{
for (r6 = 0; r6 < 30; r6++)
{
- if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_BIT2))
+ if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_HAS_SPECIES))
{
sub_808BCB4(r3, r6);
r5--;
@@ -1074,7 +1074,7 @@ void sub_8111438(void)
for (r6 = 0; r6 < IN_BOX_COUNT; r6++)
{
struct BoxPokemon * boxMon = GetBoxedMonPtr(r3, r6);
- if (!GetBoxMonData(boxMon, MON_DATA_SANITY_BIT2))
+ if (!GetBoxMonData(boxMon, MON_DATA_SANITY_HAS_SPECIES))
{
CopyMon(boxMon, &r9->mon.box, sizeof(struct BoxPokemon));
r5++;
@@ -1104,7 +1104,7 @@ u16 sub_8111618(void)
for (i = 0; i < PARTY_SIZE; i++)
{
- if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT2))
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES))
count++;
}
@@ -1120,7 +1120,7 @@ u16 sub_811164C(void)
{
for (j = 0; j < IN_BOX_COUNT; j++)
{
- if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SANITY_BIT2))
+ if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SANITY_HAS_SPECIES))
count++;
}
}
@@ -1599,7 +1599,7 @@ void sub_81120AC(u8 taskId)
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
sub_80696C0();
ScriptContext2_Disable();
- gTextFlags.flag_2 = FALSE;
+ gTextFlags.autoScroll = FALSE;
gUnknown_2036E28 = 0;
sub_8082740(0);
gUnknown_3005ECC = 1;
diff --git a/src/text.c b/src/text.c
index 34ceb92d4..f84420352 100644
--- a/src/text.c
+++ b/src/text.c
@@ -453,7 +453,7 @@ void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter)
{
struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
- if (gTextFlags.flag_2 == 1)
+ if (gTextFlags.autoScroll == 1)
subStruct->frames_visible_counter = 0;
else
{
@@ -467,7 +467,7 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
struct TextPrinterSubStruct *subStruct = &textPrinter->sub_union.sub;
const u8 *arrowTiles;
- if (gTextFlags.flag_2 == 0)
+ if (gTextFlags.autoScroll == 0)
{
if (subStruct->field_1 != 0)
{
@@ -483,7 +483,7 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
10,
12);
- switch (gTextFlags.flag_1)
+ switch (gTextFlags.useAlternateDownArrow)
{
case 0:
default:
@@ -544,7 +544,7 @@ bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter)
bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
{
bool8 result = FALSE;
- if (gTextFlags.flag_2 != 0)
+ if (gTextFlags.autoScroll != 0)
{
result = TextPrinterWaitAutoMode(textPrinter);
}
@@ -563,7 +563,7 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
bool16 TextPrinterWait(struct TextPrinter *textPrinter)
{
bool16 result = FALSE;
- if (gTextFlags.flag_2 != 0)
+ if (gTextFlags.autoScroll != 0)
{
result = TextPrinterWaitAutoMode(textPrinter);
}
@@ -591,7 +591,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c
FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 10, 12);
if (drawArrow == 0)
{
- switch (gTextFlags.flag_1)
+ switch (gTextFlags.useAlternateDownArrow)
{
case 0:
default:
diff --git a/src/text_printer.c b/src/text_printer.c
index 04de1af4c..6c124b448 100644
--- a/src/text_printer.c
+++ b/src/text_printer.c
@@ -48,11 +48,11 @@ void DeactivateAllTextPrinters (void)
sTextPrinters[printer].sub_union.sub.active = 0;
}
-u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16))
+u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
{
- struct TextSubPrinter subPrinter;
+ struct TextPrinterTemplate subPrinter;
- subPrinter.current_text_offset = str;
+ subPrinter.currentChar = str;
subPrinter.windowId = windowId;
subPrinter.fontId = fontId;
subPrinter.x = x;
@@ -61,14 +61,14 @@ u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8
subPrinter.currentY = y;
subPrinter.letterSpacing = gFonts[fontId].letterSpacing;
subPrinter.lineSpacing = gFonts[fontId].lineSpacing;
- subPrinter.fontColor_l = gFonts[fontId].fontColor_l;
- subPrinter.fontColor_h = gFonts[fontId].fontColor_h;
+ subPrinter.unk = gFonts[fontId].unk;
+ subPrinter.fgColor = gFonts[fontId].fgColor;
subPrinter.bgColor = gFonts[fontId].bgColor;
subPrinter.shadowColor = gFonts[fontId].shadowColor;
return AddTextPrinter(&subPrinter, speed, callback);
}
-bool16 AddTextPrinter(struct TextSubPrinter *textSubPrinter, u8 speed, void (*callback)(struct TextSubPrinter *, u16))
+bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
{
int i;
u16 j;
@@ -92,7 +92,7 @@ bool16 AddTextPrinter(struct TextSubPrinter *textSubPrinter, u8 speed, void (*ca
sTempTextPrinter.minLetterSpacing = 0;
sTempTextPrinter.japanese = 0;
- GenerateFontHalfRowLookupTable(textSubPrinter->fontColor_h, textSubPrinter->bgColor, textSubPrinter->shadowColor);
+ GenerateFontHalfRowLookupTable(textSubPrinter->fgColor, textSubPrinter->bgColor, textSubPrinter->shadowColor);
if (speed != TEXT_SPEED_FF && speed != 0x0)
{
--sTempTextPrinter.text_speed;
diff --git a/src/tm_case.c b/src/tm_case.c
index 2fc30da2d..177d3320f 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -281,7 +281,7 @@ void InitTMCase(u8 type, void (* callback)(void), u8 a2)
sTMCaseStaticResources.savedCallback = callback;
if (a2 != 0xFF)
sTMCaseStaticResources.unk_05 = a2;
- gTextFlags.flag_2 = FALSE;
+ gTextFlags.autoScroll = FALSE;
SetMainCallback2(CB2_SetUpTMCaseUI_Blocking);
}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index bdf800600..4a8ceab1b 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -515,21 +515,9 @@ gMultiuseSpriteTemplate: @ 20244DC
gUnknown_20244F4: @ 20244F4
.space 0x4
-gUnknown_20244F8: @ 20244F8
- .space 0x64
-
-gUnknown_202455C: @ 202455C
- .space 0x8
-
-gUnknown_2024564: @ 2024564
- .space 0x8
-
-gUnknown_202456C: @ 202456C
- .space 0x14
-
-gUnknown_2024580: @ 2024580
- .space 0x8
-
+ .align 2
+ .include "src/daycare.o"
+ .align 2
.include "src/load_save.o"
.align 2