summaryrefslogtreecommitdiff
path: root/src/mail_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mail_data.c')
-rw-r--r--src/mail_data.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/mail_data.c b/src/mail_data.c
new file mode 100644
index 000000000..0794d268d
--- /dev/null
+++ b/src/mail_data.c
@@ -0,0 +1,94 @@
+#include "global.h"
+#include "name_string_util.h"
+#include "pokemon.h"
+#include "species.h"
+#include "text.h"
+
+void sub_80A2B40(struct MailStruct *);
+u16 sub_80A2D44(u16, u32);
+bool8 itemid_is_mail(u16);
+u16 sub_809D474(u32);
+
+void sub_80A2B18(void)
+{
+ u8 i;
+
+ for (i = 0; i < 16; i++)
+ sub_80A2B40(&gSaveBlock1.mail[i]);
+}
+
+void sub_80A2B40(struct MailStruct *mail)
+{
+ int i;
+
+ for (i = 0; i < 9; i++)
+ mail->words[i] = -1;
+
+ for (i = 0; i < 8; i++)
+ mail->playerName[i] = -1;
+
+ for (i = 0; i < 4; i++)
+ mail->trainerId[i] = 0;
+
+ mail->species = 1;
+ mail->itemId = 0;
+}
+
+bool8 sub_80A2B94(struct Pokemon *mon)
+{
+ u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM);
+ if (itemid_is_mail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 sub_80A2BC4(struct Pokemon *mon, u16 itemId)
+{
+ u16 _itemId;
+ u8 heldItem[2];
+ u8 id;
+ u8 i;
+ u16 species;
+ u32 personality;
+
+ _itemId = itemId;
+ heldItem[0] = _itemId;
+ heldItem[1] = _itemId >> 8;
+ id = 0;
+
+ while (id < 6)
+ {
+ if (gSaveBlock1.mail[id].itemId == 0)
+ {
+ for (i = 0; i < 9; i++)
+ gSaveBlock1.mail[id].words[i] = -1;
+
+ for (i = 0; i < 7; i++)
+ gSaveBlock1.mail[id].playerName[i] = gSaveBlock2.playerName[i];
+ gSaveBlock1.mail[id].playerName[i] = EOS;
+ PadNameString(gSaveBlock1.mail[id].playerName, 0);
+
+ for (i = 0; i < 4; i++)
+ gSaveBlock1.mail[id].trainerId[i] = gSaveBlock2.playerTrainerId[i];
+
+ species = GetBoxMonData(mon, MON_DATA_SPECIES);
+ personality = GetBoxMonData(mon, MON_DATA_PERSONALITY);
+ gSaveBlock1.mail[id].species = sub_80A2D44(species, personality);
+ gSaveBlock1.mail[id].itemId = _itemId;
+ SetMonData(mon, MON_DATA_MAIL, &id);
+ SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
+ return id;
+ }
+ id++;
+ }
+
+ return -1;
+}
+
+u16 sub_80A2D44(u16 species, u32 personality)
+{
+ if (species != SPECIES_UNOWN)
+ return species;
+ return ((sub_809D474(personality) << 16) + (30000 << 16)) >> 16;
+}