finished mail_data
This commit is contained in:
+1
-1
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
+182
@@ -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;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -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:
|
||||
|
||||
+2
-6
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ static bool32 IsCurMapInLocationList(const u16 *list)
|
||||
if (list[i] == locSum)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user