diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-08-29 22:41:26 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-08-29 22:41:26 -0400 |
commit | 36bafa9f9fad1efd7baead651c7f357f6a832023 (patch) | |
tree | 0e846f5f02dcad2fe6025f76f648f7813665f3b7 /src | |
parent | f25a1e6106fef11318301666359ee5ec2d45677f (diff) |
sub_8041570
Diffstat (limited to 'src')
-rw-r--r-- | src/daycare.c | 149 | ||||
-rw-r--r-- | src/pokemon_1.c | 4 |
2 files changed, 41 insertions, 112 deletions
diff --git a/src/daycare.c b/src/daycare.c index 64eac981e..2f30c1479 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -3,6 +3,7 @@ #include "pokemon.h" #include "species.h" #include "items.h" +#include "text.h" #include "string_util.h" #include "mail_data.h" #include "name_string_util.h" @@ -91,7 +92,7 @@ void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data } daycare_data->mons[empty_slot] = mon->box; BoxMonRestorePP(&daycare_data->mons[empty_slot]); - daycare_data->mail.extra.unk70[empty_slot] = 0; + daycare_data->mail.extra.steps[empty_slot] = 0; ZeroMonData(mon); party_compaction(); CalculatePlayerPartyCount(); @@ -102,18 +103,18 @@ void Daycare_SendPokemon_Special() Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData); } -void sub_80417F4(u8 *); +void sub_80417F4(struct MailStruct *); -void sub_80414C0(struct BoxPokemon * daycare_data) +void sub_80414C0(struct DayCareData * daycare_data) { - u32 second_species; - if((GetBoxMonData(&daycare_data[1], MON_DATA_SPECIES) != 0) && ((second_species = GetBoxMonData(&daycare_data[0], MON_DATA_SPECIES)) == 0)){ - daycare_data[0] = daycare_data[1]; - ZeroBoxMonData(&daycare_data[1]); - memcpy(daycare_data + 2, (u8 *) (daycare_data + 1) + 0x88, 0x38); - *((u32 *)(daycare_data) + 68) = *((u32 *)(daycare_data) + 69); - *((u32 *)(daycare_data) + 69) = second_species; - sub_80417F4((u8 *) (daycare_data + 1) + 0x88); + if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0) + { + daycare_data->mons[0] = daycare_data->mons[1]; + ZeroBoxMonData(&daycare_data->mons[1]); + daycare_data->mail.data[0] = daycare_data->mail.data[1]; + daycare_data->mail.extra.steps[0] = daycare_data->mail.extra.steps[1]; + daycare_data->mail.extra.steps[1] = 0; + sub_80417F4(&daycare_data->mail.data[1].mail); } } @@ -143,105 +144,33 @@ void sub_804151C(struct Pokemon * mon) CalculateMonStats(mon); } -__attribute__((naked)) -u16 sub_8041570(struct DayCareData * daycare_data, u8 a2){ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x68\n\ - adds r5, r0, 0\n\ - lsls r1, 24\n\ - lsrs r4, r1, 24\n\ - lsls r7, r4, 2\n\ - adds r0, r7, r4\n\ - lsls r0, 4\n\ - adds r6, r5, r0\n\ - ldr r1, _08041640 @ =gStringVar1\n\ - adds r0, r6, 0\n\ - bl GetBoxMonNick\n\ - adds r0, r6, 0\n\ - movs r1, 0xB\n\ - bl GetBoxMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r9, r0\n\ - adds r0, r6, 0\n\ - mov r1, sp\n\ - bl sub_803B4B4\n\ - mov r0, sp\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - beq _080415D8\n\ - mov r0, sp\n\ - movs r1, 0x19\n\ - bl GetMonData\n\ - movs r2, 0x88\n\ - lsls r2, 1\n\ - adds r1, r5, r2\n\ - adds r1, r7\n\ - ldr r1, [r1]\n\ - adds r0, r1\n\ - str r0, [sp, 0x64]\n\ - add r2, sp, 0x64\n\ - mov r0, sp\n\ - movs r1, 0x19\n\ - bl SetMonData\n\ - mov r0, sp\n\ - bl sub_804151C\n\ -_080415D8:\n\ - ldr r0, _08041644 @ =gPlayerParty\n\ - movs r1, 0xFA\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - mov r8, r1\n\ - mov r0, r8\n\ - mov r1, sp\n\ - movs r2, 0x64\n\ - bl memcpy\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r1, r0, 3\n\ - adds r0, r5, r1\n\ - adds r0, 0xC0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _08041610\n\ - adds r4, r1, 0\n\ - adds r4, 0xA0\n\ - adds r4, r5, r4\n\ - mov r0, r8\n\ - adds r1, r4, 0\n\ - bl GiveMailToMon2\n\ - adds r0, r4, 0\n\ - bl sub_80417F4\n\ -_08041610:\n\ - bl party_compaction\n\ - adds r0, r6, 0\n\ - bl ZeroBoxMonData\n\ - movs r2, 0x88\n\ - lsls r2, 1\n\ - adds r0, r5, r2\n\ - adds r0, r7\n\ - movs r1, 0\n\ - str r1, [r0]\n\ - adds r0, r5, 0\n\ - bl sub_80414C0\n\ - bl CalculatePlayerPartyCount\n\ - mov r0, r9\n\ - add sp, 0x68\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08041640: .4byte gStringVar1\n\ -_08041644: .4byte gPlayerParty\n\ - .syntax divided"); +u16 sub_8041570(struct DayCareData * daycare_data, u8 a2) +{ + u16 species; + u32 experience; + struct Pokemon pokemon; + + GetBoxMonNick(&daycare_data->mons[a2], gStringVar1); + species = GetBoxMonData(&daycare_data->mons[a2], MON_DATA_SPECIES); + sub_803B4B4(&daycare_data->mons[a2], &pokemon); + if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) + { + experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->mail.extra.steps[a2]; + SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); + sub_804151C(&pokemon); + } + gPlayerParty[PARTY_SIZE - 1] = pokemon; + if (daycare_data->mail.data[a2].mail.itemId) + { + GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->mail.data[a2].mail); + sub_80417F4(&daycare_data->mail.data[a2].mail); + } + party_compaction(); + ZeroBoxMonData(&daycare_data->mons[a2]); + daycare_data->mail.extra.steps[a2] = 0; + sub_80414C0(daycare_data); + CalculatePlayerPartyCount(); + return species; } extern u8 gSpecialVar_0x8004; diff --git a/src/pokemon_1.c b/src/pokemon_1.c index c65bfa185..5cfd2c794 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -467,10 +467,10 @@ void CalculateMonStats(struct Pokemon *mon) SetMonData(mon, MON_DATA_HP, (u8 *)¤tHP); } -void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest) +void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest) { u32 value = 0; - memcpy(&dest->box, &src->box, sizeof(struct BoxPokemon)); + dest->box = *src; SetMonData(dest, MON_DATA_STATUS, (u8 *)&value); SetMonData(dest, MON_DATA_HP, (u8 *)&value); SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value); |