summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2017-05-08 18:12:23 -0700
committerYamaArashi <shadow962@live.com>2017-05-08 18:12:38 -0700
commitfdab157386bdd1ce02f660f0ece0c55d2218f6fc (patch)
tree34411e599afe22231a2ba8bf0431e564658d033b /src
parent6608d61fdb0213df2801bbe8ec38fe913bb36b3b (diff)
decompile some of mail_data.s
Diffstat (limited to 'src')
-rw-r--r--src/mail_data.c94
-rw-r--r--src/pokemon_1.c6
-rw-r--r--src/pokemon_2.c8
3 files changed, 101 insertions, 7 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;
+}
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index 1c11449c3..204fa7b9a 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -51,7 +51,7 @@ void ZeroMonData(struct Pokemon *mon)
SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg);
SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg);
arg = 255;
- SetMonData(mon, MON_DATA_64, (u8 *)&arg);
+ SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg);
}
void ZeroPlayerPartyMons(void)
@@ -75,7 +75,7 @@ void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFix
CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId);
SetMonData(mon, MON_DATA_LEVEL, &level);
arg = 255;
- SetMonData(mon, MON_DATA_64, (u8 *)&arg);
+ SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg);
CalculateMonStats(mon);
}
@@ -478,7 +478,7 @@ void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest)
SetMonData(dest, MON_DATA_HP, (u8 *)&value);
SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value);
value = 255;
- SetMonData(dest, MON_DATA_64, (u8 *)&value);
+ SetMonData(dest, MON_DATA_MAIL, (u8 *)&value);
CalculateMonStats(dest);
}
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 4711eda46..3be11f453 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -383,8 +383,8 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data)
return mon->spAttack;
case MON_DATA_SPDEF:
return mon->spDefense;
- case MON_DATA_64:
- return mon->pokerus;
+ case MON_DATA_MAIL:
+ return mon->mail;
default:
return GetBoxMonData(&mon->box, field, data);
}
@@ -761,8 +761,8 @@ void SetMonData(struct Pokemon *mon, s32 field, const u8 *data)
case MON_DATA_SPDEF:
SET16(mon->spDefense);
break;
- case MON_DATA_64:
- SET8(mon->pokerus);
+ case MON_DATA_MAIL:
+ SET8(mon->mail);
break;
case MON_DATA_SPECIES2:
break;