summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-08-29 22:41:26 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-08-29 22:41:26 -0400
commit36bafa9f9fad1efd7baead651c7f357f6a832023 (patch)
tree0e846f5f02dcad2fe6025f76f648f7813665f3b7 /src
parentf25a1e6106fef11318301666359ee5ec2d45677f (diff)
sub_8041570
Diffstat (limited to 'src')
-rw-r--r--src/daycare.c149
-rw-r--r--src/pokemon_1.c4
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 *)&currentHP);
}
-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);