diff options
-rw-r--r-- | asm/daycare.s | 429 | ||||
-rw-r--r-- | include/global.h | 2 | ||||
-rw-r--r-- | include/pokemon.h | 1 | ||||
-rw-r--r-- | src/daycare.c | 219 |
4 files changed, 182 insertions, 469 deletions
diff --git a/asm/daycare.s b/asm/daycare.s index a9612e8f7..08000a294 100644 --- a/asm/daycare.s +++ b/asm/daycare.s @@ -6,435 +6,6 @@ .text - thumb_func_start sub_8041E64 -sub_8041E64: @ 8041E64 - 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 sub_8041E64 - - thumb_func_start sub_8041E7C -sub_8041E7C: @ 8041E7C - push {lr} - ldr r0, _08041E88 @ =gSaveBlock1 + 0x2F9C - bl sub_8041E64 - pop {r0} - bx r0 - .align 2, 0 -_08041E88: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sub_8041E7C - - thumb_func_start incense_effects -incense_effects: @ 8041E8C - 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 _08041EA4 - movs r0, 0xAF - lsls r0, 1 - cmp r1, r0 - bne _08041EE6 -_08041EA4: - adds r0, r5, 0 - movs r1, 0xC - bl GetBoxMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r5, 0 - adds r0, 0x50 - movs r1, 0xC - bl GetBoxMonData - lsls r0, 16 - lsrs r2, r0, 16 - ldrh r0, [r4] - cmp r0, r7 - bne _08041ED0 - cmp r6, 0xDD - beq _08041ED0 - cmp r2, 0xDD - beq _08041ED0 - movs r0, 0xCA - strh r0, [r4] -_08041ED0: - ldrh r1, [r4] - movs r0, 0xAF - lsls r0, 1 - cmp r1, r0 - bne _08041EE6 - cmp r6, 0xDC - beq _08041EE6 - cmp r2, 0xDC - beq _08041EE6 - movs r0, 0xB7 - strh r0, [r4] -_08041EE6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end incense_effects - - thumb_func_start sub_8041EEC -sub_8041EEC: @ 8041EEC - 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 -_08041EFC: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - 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 _08041F26 - adds r0, r4, 0 - eors r0, r7 - strb r0, [r6] - strb r4, [r6, 0x1] - b _08041F3C -_08041F26: - adds r0, r5, 0 - bl GetBoxMonGender - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFE - bne _08041F3C - strb r4, [r6] - adds r0, r4, 0 - eors r0, r7 - strb r0, [r6, 0x1] -_08041F3C: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1 - bls _08041EFC - ldrb r0, [r6] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - bl sub_8041870 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1D - bne _08041F6E - 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 _08041F6E - movs r4, 0x20 -_08041F6E: - ldr r0, _08041FC0 @ =0x00000183 - cmp r4, r0 - bne _08041F88 - subs r0, 0x6B - add r0, r8 - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08041F88 - movs r4, 0xC1 - lsls r4, 1 -_08041F88: - ldrb r0, [r6, 0x1] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - cmp r0, 0x84 - bne _08041FB2 - ldrb r1, [r6] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 4 - add r0, r8 - bl GetBoxMonGender - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFE - beq _08041FB2 - ldrb r1, [r6, 0x1] - ldrb r0, [r6] - strb r0, [r6, 0x1] - strb r1, [r6] -_08041FB2: - adds r0, r4, 0 - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08041FC0: .4byte 0x00000183 - thumb_func_end sub_8041EEC - - thumb_func_start sub_8041FC4 -sub_8041FC4: @ 8041FC4 - push {r4-r6,lr} - sub sp, 0x6C - adds r5, r0, 0 - add r6, sp, 0x64 - adds r1, r6, 0 - bl sub_8041EEC - add r4, sp, 0x68 - strh r0, [r4] - adds r0, r4, 0 - adds r1, r5, 0 - bl incense_effects - ldrh r1, [r4] - mov r0, sp - adds r2, r5, 0 - bl sub_80420FC - mov r0, sp - adds r1, r5, 0 - bl InheritIVs - ldrb r0, [r6, 0x1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 4 - adds r1, r5, r1 - ldrb r0, [r6] - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 4 - adds r2, r5, r2 - mov r0, sp - bl daycare_build_child_moveset - mov r2, sp - adds r2, 0x6A - movs r0, 0x1 - strb r0, [r2] - mov r0, sp - movs r1, 0x2D - bl SetMonData - ldr r0, _08042040 @ =gPlayerParty - movs r1, 0xFA - lsls r1, 1 - adds r0, r1 - mov r1, sp - movs r2, 0x64 - bl memcpy - bl party_compaction - bl CalculatePlayerPartyCount - adds r0, r5, 0 - bl sub_8041E64 - add sp, 0x6C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08042040: .4byte gPlayerParty - thumb_func_end sub_8041FC4 - - thumb_func_start sub_8042044 -sub_8042044: @ 8042044 - 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, _080420F4 @ =gUnknown_08209AD4 - adds r0, r7, 0 - movs r1, 0x2 - bl SetMonData - lsls r2, r5, 3 - subs r2, r5 - lsls r2, 2 - ldr r0, _080420F8 @ =gBaseStats + 0x11 @ egg cycles offset - 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 _080420D6 - add r2, sp, 0x14 - movs r0, 0xFD - strb r0, [r2] - adds r0, r7, 0 - movs r1, 0x23 - bl SetMonData -_080420D6: - 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 -_080420F4: .4byte gUnknown_08209AD4 -_080420F8: .4byte gBaseStats + 0x11 @ egg cycles offset - thumb_func_end sub_8042044 - - thumb_func_start sub_80420FC -sub_80420FC: @ 80420FC - 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, _08042198 @ =gUnknown_08209AD4 - adds r0, r6, 0 - movs r1, 0x2 - bl SetMonData - lsls r2, r5, 3 - subs r2, r5 - lsls r2, 2 - ldr r0, _0804219C @ =gBaseStats + 0x11 @ egg cycles offset - 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 -_08042198: .4byte gUnknown_08209AD4 -_0804219C: .4byte gBaseStats + 0x11 @ egg cycles offset - thumb_func_end sub_80420FC - - thumb_func_start sp0B8_daycare -sp0B8_daycare: @ 80421A0 - push {lr} - ldr r0, _080421AC @ =gSaveBlock1 + 0x2F9C - bl sub_8041FC4 - pop {r0} - bx r0 - .align 2, 0 -_080421AC: .4byte gSaveBlock1 + 0x2F9C - thumb_func_end sp0B8_daycare - thumb_func_start sub_80421B0 sub_80421B0: @ 80421B0 push {r4-r7,lr} diff --git a/include/global.h b/include/global.h index ee54007b2..82dcd1a53 100644 --- a/include/global.h +++ b/include/global.h @@ -557,7 +557,7 @@ struct DayCareMailEtc struct DayCareData { struct BoxPokemon mons[2]; struct DayCareMailEtc mail; - u16 unk_118; + u16 eggPersonalityLo; u8 unk_11a; u8 unk_11b; }; diff --git a/include/pokemon.h b/include/pokemon.h index da9a5f041..184bc6cdb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -602,5 +602,6 @@ bool32 sub_8040D3C(u16 species, u8 *name, u8 language); s8 sub_8040A54(struct Pokemon *, u8); u16 GetMonEVCount(struct Pokemon *); u8 GetLevelUpMovesBySpecies(u16, u16 *); +u8 TryIncrementMonLevel(struct Pokemon *); #endif // GUARD_POKEMON_H diff --git a/src/daycare.c b/src/daycare.c index 38bfba85e..1faaea4c6 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -14,6 +14,12 @@ #include "strings2.h" #include "data/pokemon/egg_moves.h" #include "party_menu.h" +#include "field_effect.h" + +extern u16 word_2024E82; + +static void sub_80417F4(struct DayCareMail *); +static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *); const u8 *const gUnknown_08209AC4[] = { DaycareText_GetAlongVeryWell, @@ -24,8 +30,6 @@ const u8 *const gUnknown_08209AC4[] = { const u8 gUnknown_08209AD4[] = _("タマゴ"); -extern u8 gLastFieldPokeMenuOpened; - u8 *GetMonNick(struct Pokemon *mon, u8 *dest) { s8 nickname[POKEMON_NAME_LENGTH * 2]; @@ -54,7 +58,7 @@ u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data) return count; } -void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * void_pointer) +void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * daycareMailEtc) { u8 i; u8 specCount; @@ -66,20 +70,20 @@ void sub_8041324(struct BoxPokemon * box_pokemon, struct DayCareMailEtc * void_p specCount ++; if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE) { - void_pointer->extra.rc.unk74[i] = 0; + daycareMailEtc->extra.rc.unk74[i] = 0; } else { - void_pointer->extra.rc.unk74[i] = 1; + daycareMailEtc->extra.rc.unk74[i] = 1; } } else { - void_pointer->extra.rc.unk74[i] = 1; + daycareMailEtc->extra.rc.unk74[i] = 1; } } - void_pointer->extra.rc.unk70 = specCount; + daycareMailEtc->extra.rc.unk70 = specCount; } -s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) +static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) { u8 i; @@ -90,7 +94,8 @@ s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) return -1; } -void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data){ // unfinished +static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data) +{ s8 empty_slot; u8 mail; u8 *names; @@ -118,9 +123,7 @@ void Daycare_SendPokemon_Special() Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData); } -void sub_80417F4(struct DayCareMail *); - -void sub_80414C0(struct DayCareData * daycare_data) +static void sub_80414C0(struct DayCareData * daycare_data) { if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0) { @@ -133,33 +136,32 @@ void sub_80414C0(struct DayCareData * daycare_data) } } -u8 TryIncrementMonLevel(struct Pokemon *); -extern u16 word_2024E82; - -void sub_804151C(struct Pokemon * mon) +static void DayCare_LevelUpMoves(struct Pokemon * mon) { s32 i; u8 r6; u16 temp; - for(i = 0; i < 100; i++){ - if(TryIncrementMonLevel(mon) == FALSE) goto end; - - r6 = 1; - while((temp = sub_803B7C8(mon, r6)) != 0){ - r6 = 0; - if(temp == 0xffff){ - DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82); + for (i = 0; i < 100; i++) + { + if (TryIncrementMonLevel(mon)) + { + r6 = 1; + while ((temp = sub_803B7C8(mon, r6)) != 0) + { + r6 = 0; + if (temp == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82); } } + else + break; } - end: - CalculateMonStats(mon); } -u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) +static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) { u16 species; u32 experience; @@ -172,7 +174,7 @@ u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) { experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.steps[slot]; SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); - sub_804151C(&pokemon); + DayCare_LevelUpMoves(&pokemon); } gPlayerParty[PARTY_SIZE - 1] = pokemon; if (daycare_data->mail.data[slot].mail.itemId) @@ -200,7 +202,7 @@ u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ return GetLevelFromBoxMonExp(&temp); } -u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) +static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) { u8 levelBefore; u8 levelAfter; @@ -210,7 +212,7 @@ u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) return levelAfter - levelBefore; } -u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) +static u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) { u8 levelDelta = sub_80416A0(dayCareData, slot); GetBoxMonNick(&dayCareData->mons[slot], gStringVar1); @@ -218,7 +220,7 @@ u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) return levelDelta; } -u16 sub_8041728(struct DayCareData *dayCareData, u8 slot) +static u16 sub_8041728(struct DayCareData *dayCareData, u8 slot) { u16 cost; @@ -247,7 +249,7 @@ u8 sub_80417B8(void) return 0; } -void sub_80417F4(struct DayCareMail *mail) +static void sub_80417F4(struct DayCareMail *mail) { u8 zero; u8 *names; @@ -272,7 +274,7 @@ void unref_sub_8041824(struct DayCareData *dayCareData) dayCareData->mail.extra.steps[slot] = 0; sub_80417F4(&dayCareData->mail.data[slot]); } - dayCareData->unk_118 = 0; + dayCareData->eggPersonalityLo = 0; dayCareData->unk_11a = 0; } @@ -303,15 +305,15 @@ u16 sub_8041870(u16 species) return species; } -void sub_80418F0(struct DayCareData *dayCareData) +static void sub_80418F0(struct DayCareData *dayCareData) { - dayCareData->unk_118 = (Random() % 0xfffe) + 1; + dayCareData->eggPersonalityLo = (Random() % 0xfffe) + 1; FlagSet(0x86); } -void sub_804191C(struct DayCareData *dayCareData) +static void sub_804191C(struct DayCareData *dayCareData) { - dayCareData->unk_118 = Random() | 0x8000; + dayCareData->eggPersonalityLo = Random() | 0x8000; FlagSet(0x86); } @@ -338,7 +340,7 @@ static void sub_8041960(u8 *data, u8 idx) data[j++] = temp[i]; } -void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) +static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) { u8 i; u8 selectedIvs[3]; @@ -386,6 +388,9 @@ void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) } } +#ifdef NONMATCHING +static +#endif u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves) { u16 eggMoveIdx; @@ -416,13 +421,13 @@ u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves) return numMovesFound; } +#ifdef NONMATCHING extern u16 gUnknown_03000470[50]; extern u16 gUnknown_030004D8[4]; extern u16 gUnknown_030004E0[4]; extern u16 gUnknown_030004E8[10]; extern u16 gUnknown_03000500[4]; -#ifdef NONMATCHING void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom) { u16 numSharedParentMoves; @@ -846,3 +851,139 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "_08041E60: .4byte gUnknown_030004E0"); } #endif + +static void RemoveEggFromDayCare(struct DayCareData *dayCareData) +{ + dayCareData->eggPersonalityLo = 0; + dayCareData->unk_11a = 0; +} + +void sub_8041E7C(void) +{ + RemoveEggFromDayCare(&gSaveBlock1.daycareData); +} + +static void incense_effects(u16 *species, struct DayCareData *dayCareData) +{ + u16 momItem, dadItem; + if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL) + { + momItem = GetBoxMonData(&dayCareData->mons[0], MON_DATA_HELD_ITEM); + dadItem = GetBoxMonData(&dayCareData->mons[1], MON_DATA_HELD_ITEM); + if (*species == SPECIES_WYNAUT && momItem != ITEM_LAX_INCENSE && dadItem != ITEM_LAX_INCENSE) + { + *species = SPECIES_WOBBUFFET; + } + if (*species == SPECIES_AZURILL && momItem != ITEM_SEA_INCENSE && dadItem != ITEM_SEA_INCENSE) + { + *species = SPECIES_MARILL; + } + } +} + +static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_species_from_mom +{ + u16 i; + u16 species[2]; + u16 eggSpecies; + u8 buffer; + for (i=0; i<2; i++) + { + species[i] = GetBoxMonData(&dayCareData->mons[i], MON_DATA_SPECIES); + if (species[i] == SPECIES_DITTO) + { + a1[0] = i ^ 1; + a1[1] = i; + } + else if (GetBoxMonGender(&dayCareData->mons[i]) == MON_FEMALE) + { + a1[0] = i; + a1[1] = i ^ 1; + } + } + eggSpecies = sub_8041870(species[a1[0]]); + if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->eggPersonalityLo & 0x8000) + { + eggSpecies = SPECIES_NIDORAN_M; + } + if (eggSpecies == SPECIES_ILLUMISE && dayCareData->eggPersonalityLo & 0x8000) + { + eggSpecies = SPECIES_VOLBEAT; + } + if (species[a1[1]] == SPECIES_DITTO && GetBoxMonGender(&dayCareData->mons[a1[0]]) != MON_FEMALE) + { + buffer = a1[1]; + a1[1] = a1[0]; + a1[0] = buffer; + } + return eggSpecies; +} + +static void sub_8041FC4(struct DayCareData *dayCareData) // give_egg +{ + struct Pokemon egg; + u16 species; + u8 parents[2]; + u8 isEgg; + species = sub_8041EEC(dayCareData, parents); + incense_effects(&species, dayCareData); + sub_80420FC(&egg, species, dayCareData); + InheritIVs(&egg, dayCareData); + daycare_build_child_moveset(&egg, &dayCareData->mons[parents[1]], &dayCareData->mons[parents[0]]); + isEgg = TRUE; + SetMonData(&egg, MON_DATA_IS_EGG, &isEgg); + gPlayerParty[5] = egg; + party_compaction(); + CalculatePlayerPartyCount(); + RemoveEggFromDayCare(dayCareData); +} + + +void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // scr_create_egg +{ + u8 metLevel; + u16 ball; + u8 language; + u8 metLocation; + u8 isEgg; + CreateMon(mon, species, 5, 0x20, FALSE, 0, FALSE, 0); + metLevel = 0; + ball = ITEM_POKE_BALL; + language = LANGUAGE_JAPANESE; + SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); + SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); + SetMonData(mon, MON_DATA_LANGUAGE, &language); + if (overwriteMetLocation) + { + metLocation = 0xfd; + SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation); + } + isEgg = TRUE; + SetMonData(mon, MON_DATA_IS_EGG, &isEgg); +} + +static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *dayCareData) +{ + u32 personality; + u16 ball; + u8 metLevel; + u8 language; + personality = dayCareData->eggPersonalityLo | (Random() << 16); + CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0); + metLevel = 0; + ball = ITEM_POKE_BALL; + language = LANGUAGE_JAPANESE; + SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); + SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); + SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); + SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); + SetMonData(mon, MON_DATA_LANGUAGE, &language); +} + +void sp0B8_daycare(void) +{ + sub_8041FC4(&gSaveBlock1.daycareData); +} + |