summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-28 11:04:15 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-28 11:04:15 +0800
commitd06166633fe7cc97ec692131246bdc9121a71aaa (patch)
tree4b9d0536db29cc414a3e38bb14639960b70415e5 /src
parent8e8fe3bf443cec46c0b7cc2072748c90bedc964d (diff)
finished mail_data
Diffstat (limited to 'src')
-rw-r--r--src/daycare.c2
-rw-r--r--src/decompress.c2
-rw-r--r--src/mail_data.c182
-rw-r--r--src/menu2.c2
-rw-r--r--src/multiboot.c8
-rw-r--r--src/play_time.c2
-rw-r--r--src/save_location.c1
7 files changed, 186 insertions, 13 deletions
diff --git a/src/daycare.c b/src/daycare.c
index 35670465a..7a2cb0698 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -5,7 +5,7 @@
#include "string_util.h"
#include "constants/species.h"
#include "constants/items.h"
-#include "mail.h"
+#include "mail_data.h"
#include "pokemon_storage_system.h"
#include "event_data.h"
#include "random.h"
diff --git a/src/decompress.c b/src/decompress.c
index ddc86b5b7..826c2ee94 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -79,7 +79,6 @@ void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *des
isFrontPic = TRUE; // frontPic
else
isFrontPic = FALSE; // backPic
-
LoadSpecialPokePic(src, dest, species, personality, isFrontPic);
}
@@ -94,7 +93,6 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32
i = SPECIES_UNOWN;
else
i += SPECIES_UNOWN_B - 1;
-
if (!isFrontPic)
LZ77UnCompWram(gMonBackPicTable[i].data, dest);
else
diff --git a/src/mail_data.c b/src/mail_data.c
new file mode 100644
index 000000000..5d6c93419
--- /dev/null
+++ b/src/mail_data.c
@@ -0,0 +1,182 @@
+#include "global.h"
+#include "text.h"
+#include "mail.h"
+#include "mail_data.h"
+#include "constants/species.h"
+#include "constants/items.h"
+#include "pokemon_icon.h"
+
+void ClearMailData(void)
+{
+ u8 i;
+
+ for (i = 0; i < MAIL_COUNT; i++)
+ ClearMailStruct(&gSaveBlock1Ptr->mail[i]);
+}
+
+void ClearMailStruct(struct MailStruct *mail)
+{
+ s32 i;
+
+ for (i = 0; i < MAIL_WORDS_COUNT; i++)
+ mail->words[i] = 0xFFFF;
+ for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ mail->playerName[i] = EOS;
+ for (i = 0; i < 4; i++)
+ mail->trainerId[i] = 0;
+ mail->species = SPECIES_BULBASAUR;
+ mail->itemId = ITEM_NONE;
+}
+
+bool8 MonHasMail(struct Pokemon *mon)
+{
+ u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM);
+ if (ItemIsMail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
+{
+ u8 heldItem[2];
+ u8 id, i;
+ u16 species;
+ u32 personality;
+
+ heldItem[0] = itemId;
+ heldItem[1] = itemId >> 8;
+ for (id = 0; id < PARTY_SIZE; id++)
+ {
+ if (gSaveBlock1Ptr->mail[id].itemId == 0)
+ {
+ for (i = 0; i < MAIL_WORDS_COUNT; i++)
+ gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF;
+ for (i = 0; i < PLAYER_NAME_LENGTH - 1 && gSaveBlock2Ptr->playerName[i] != EOS; i++)
+ gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i];
+ for (; i <= 5; i++)
+ gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE;
+ gSaveBlock1Ptr->mail[id].playerName[i] = EOS;
+ for (i = 0; i < 4; i++)
+ gSaveBlock1Ptr->mail[id].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
+ species = GetBoxMonData(&mon->box, MON_DATA_SPECIES);
+ personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY);
+ gSaveBlock1Ptr->mail[id].species = SpeciesToMailSpecies(species, personality);
+ gSaveBlock1Ptr->mail[id].itemId = itemId;
+ SetMonData(mon, MON_DATA_MAIL, &id);
+ SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
+ return id;
+ }
+ }
+ return 0xFF;
+}
+
+u16 SpeciesToMailSpecies(u16 species, u32 personality)
+{
+ return species == 0xC9 ? ((GetUnownLetterByPersonality(personality) << 16) + 0x75300000) >> 16 : species;
+}
+
+u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer)
+{
+ u16 result;
+
+ if (mailSpecies >= 30000 && mailSpecies < (30000 + UNOWN_FORM_COUNT))
+ {
+ result = SPECIES_UNOWN;
+ *buffer = mailSpecies - 30000;
+ }
+ else
+ {
+ result = mailSpecies;
+ }
+ return result;
+}
+
+u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail)
+{
+ u8 heldItem[2];
+ u16 itemId = mail->itemId;
+ u8 mailId = GiveMailToMon(mon, itemId);
+
+ if (mailId == 0xFF)
+ return 0xFF;
+ gSaveBlock1Ptr->mail[mailId] = *mail;
+ SetMonData(mon, MON_DATA_MAIL, &mailId);
+ heldItem[0] = itemId;
+ heldItem[1] = itemId >> 8;
+
+ SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
+
+ return mailId;
+}
+
+static bool32 DummyMailFunc(void)
+{
+ return FALSE;
+}
+
+void TakeMailFromMon(struct Pokemon *mon)
+{
+ u8 heldItem[2];
+ u8 mailId;
+
+ if (MonHasMail(mon))
+ {
+ mailId = GetMonData(mon, MON_DATA_MAIL);
+ gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE;
+ mailId = 0xFF;
+ heldItem[0] = ITEM_NONE;
+ heldItem[1] = ITEM_NONE << 8;
+ SetMonData(mon, MON_DATA_MAIL, &mailId);
+ SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
+ }
+}
+
+void ClearMailItemId(u8 mailId)
+{
+ gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE;
+}
+
+u8 TakeMailFromMon2(struct Pokemon *mon)
+{
+ u8 i, newMailId;
+ u8 newHeldItem[2];
+
+ newHeldItem[0] = ITEM_NONE;
+ newHeldItem[1] = ITEM_NONE << 8;
+ newMailId = 0xFF;
+ for (i = PARTY_SIZE; i < MAIL_COUNT; i++)
+ {
+ if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE)
+ {
+ memcpy(&gSaveBlock1Ptr->mail[i], &gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct));
+ gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)].itemId = ITEM_NONE;
+ SetMonData(mon, MON_DATA_MAIL, &newMailId);
+ SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem);
+ return i;
+ }
+ }
+ return 0xFF;
+}
+
+bool8 ItemIsMail(u16 itemId)
+{
+ switch (itemId)
+ {
+ case ITEM_ORANGE_MAIL:
+ case ITEM_HARBOR_MAIL:
+ case ITEM_GLITTER_MAIL:
+ case ITEM_MECH_MAIL:
+ case ITEM_WOOD_MAIL:
+ case ITEM_WAVE_MAIL:
+ case ITEM_BEAD_MAIL:
+ case ITEM_SHADOW_MAIL:
+ case ITEM_TROPIC_MAIL:
+ case ITEM_DREAM_MAIL:
+ case ITEM_FAB_MAIL:
+ case ITEM_RETRO_MAIL:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
diff --git a/src/menu2.c b/src/menu2.c
index 9a1846c7e..ffe5865e4 100644
--- a/src/menu2.c
+++ b/src/menu2.c
@@ -820,7 +820,7 @@ u8 sub_812EA78(u16 species, u32 personality, u8 a2)
{
if (species == SPECIES_UNOWN)
{
- u8 unownLetter = GetUnownLetterByPersonality(personality);
+ u8 unownLetter = GetUnownLetterByPersonalityLoByte(personality);
switch (unownLetter)
{
case 0:
diff --git a/src/multiboot.c b/src/multiboot.c
index 25b729dfd..cfc9821d2 100644
--- a/src/multiboot.c
+++ b/src/multiboot.c
@@ -23,9 +23,7 @@ void MultiBootInit(struct MultiBootParam *mp)
int MultiBootMain(struct MultiBootParam *mp)
{
- int i;
- int j;
- int k;
+ int i, j, k;
if (MultiBootCheckComplete(mp))
{
@@ -260,9 +258,7 @@ output_burst:
static int MultiBootSend(struct MultiBootParam *mp, u16 data)
{
- int i;
-
- i = REG_SIOCNT & (SIO_MULTI_BUSY | SIO_MULTI_SD | SIO_MULTI_SI);
+ int i = REG_SIOCNT & (SIO_MULTI_BUSY | SIO_MULTI_SD | SIO_MULTI_SI);
if (i != SIO_MULTI_SD)
{
MultiBootInit(mp);
diff --git a/src/play_time.c b/src/play_time.c
index cb70a57c4..04f4b2040 100644
--- a/src/play_time.c
+++ b/src/play_time.c
@@ -12,7 +12,6 @@ enum
void PlayTimeCounter_Reset(void)
{
sPlayTimeCounterState = STOPPED;
-
gSaveBlock2Ptr->playTimeHours = 0;
gSaveBlock2Ptr->playTimeMinutes = 0;
gSaveBlock2Ptr->playTimeSeconds = 0;
@@ -22,7 +21,6 @@ void PlayTimeCounter_Reset(void)
void PlayTimeCounter_Start(void)
{
sPlayTimeCounterState = RUNNING;
-
if (gSaveBlock2Ptr->playTimeHours > 999)
PlayTimeCounter_SetToMax();
}
diff --git a/src/save_location.c b/src/save_location.c
index 71561c899..9b679c7ee 100644
--- a/src/save_location.c
+++ b/src/save_location.c
@@ -12,7 +12,6 @@ static bool32 IsCurMapInLocationList(const u16 *list)
if (list[i] == locSum)
return TRUE;
}
-
return FALSE;
}