diff options
-rw-r--r-- | asm/daycare.s | 3216 | ||||
-rw-r--r-- | asm/field_control_avatar.s | 2 | ||||
-rw-r--r-- | asm/party_menu.s | 4 | ||||
-rw-r--r-- | asm/pokemon_summary_screen.s | 4 | ||||
-rw-r--r-- | data/data.s | 26 | ||||
-rw-r--r-- | data/data_83FECCC.s | 16 | ||||
-rw-r--r-- | data/specials.inc | 12 | ||||
-rw-r--r-- | include/constants/flags.h | 4 | ||||
-rw-r--r-- | include/global.h | 20 | ||||
-rw-r--r-- | include/new_menu_helpers.h | 1 | ||||
-rw-r--r-- | include/party_menu.h | 1 | ||||
-rw-r--r-- | include/pokemon.h | 6 | ||||
-rw-r--r-- | include/text.h | 28 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/data/pokemon/egg_moves.h | 1310 | ||||
-rw-r--r-- | src/daycare.c | 1353 | ||||
-rw-r--r-- | src/menu2.c | 26 | ||||
-rw-r--r-- | src/oak_speech.c | 6 | ||||
-rw-r--r-- | src/pokemon.c | 14 | ||||
-rw-r--r-- | src/quest_log.c | 10 | ||||
-rw-r--r-- | src/text.c | 12 | ||||
-rw-r--r-- | src/text_printer.c | 14 | ||||
-rw-r--r-- | src/tm_case.c | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 18 |
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 |