summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/daycare.s429
-rw-r--r--include/global.h2
-rw-r--r--include/pokemon.h1
-rw-r--r--src/daycare.c219
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);
+}
+