diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-12 15:59:43 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-12 15:59:43 -0400 |
commit | 8d31a46c6fbc2dedd39ec9e9687f372ac102303d (patch) | |
tree | 361e868f823114ceccfb49f83fc1aacef8d636a7 /src | |
parent | 8914645231c9301579ed39bdd9200ad50e5296d0 (diff) |
sub_8121478
Diffstat (limited to 'src')
-rw-r--r-- | src/mail.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/mail.c b/src/mail.c new file mode 100644 index 000000000..a21a297b6 --- /dev/null +++ b/src/mail.c @@ -0,0 +1,127 @@ + +// Includes +#include "global.h" +#include "main.h" +#include "species.h" +#include "malloc.h" +#include "easy_chat.h" +#include "mail_data.h" +#include "mail.h" + +// Static type declarations + +struct UnkMailStruct +{ + u8 unk_0_0:2; + u8 unk_0_2:2; + u8 unk_0_4:4; +}; + +struct MailLayout +{ + u8 var0; + u8 var1; + u8 var2; + u8 var3_0:4; + u8 var3_4:4; + struct UnkMailStruct *var4; + u32 var8; +}; + +struct Unk203A134 +{ + /*0x0000*/ u8 filler_0000[0x20c]; + /*0x020C*/ MainCallback callback; + /*0x0210*/ u8 filler_0210[4]; + /*0x0214*/ struct MailStruct *mail; + /*0x0218*/ bool8 flag; + /*0x0219*/ u8 filler_0219[1]; + /*0x021a*/ u8 mailType; + /*0x021b*/ u8 unk_021b; + /*0x021c*/ u8 unk_021c; + /*0x021d*/ u8 language; + /*0x021e*/ bool8 playerIsSender; + /*0x0220*/ void (*parserSingle)(u8 *dest, u16 word); + /*0x0224*/ void (*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2); + /*0x0228*/ const struct MailLayout *layout; + /*0x022c*/ u8 filler_022C[0x2000]; +}; + +struct MailGraphics +{ + u16 (*palette)[]; + u8 (*tiles)[]; + u8 (*tileMap)[]; + u16 var0C; + u16 var0E; + u16 color10; + u16 color12; +}; + +// Static RAM declarations + +EWRAM_DATA struct Unk203A134 *gUnknown_0203A134; + +// Static ROM declarations + +void sub_81219F0(void); + +// .rodata + +extern const struct MailLayout gUnknown_0859F3B4[]; +extern const struct MailLayout gUnknown_0859F458[]; + +// .text + +void sub_8121478(struct MailStruct *mail, MainCallback callback, bool8 flag) { + u16 buffer[2]; + u16 species; + + gUnknown_0203A134 = calloc(1, sizeof(struct Unk203A134)); + gUnknown_0203A134->language = LANGUAGE_ENGLISH; + gUnknown_0203A134->playerIsSender = TRUE; + gUnknown_0203A134->parserSingle = CopyEasyChatWord; + gUnknown_0203A134->parserMultiple = ConvertEasyChatWordsToString; + if (mail->itemId >= ITEM_ORANGE_MAIL && mail->itemId <= ITEM_RETRO_MAIL) { + gUnknown_0203A134->mailType = mail->itemId - ITEM_ORANGE_MAIL; + } + else + { + gUnknown_0203A134->mailType = 0; + flag = FALSE; + } + switch (gUnknown_0203A134->playerIsSender) + { + case FALSE: + default: + gUnknown_0203A134->layout = &gUnknown_0859F3B4[gUnknown_0203A134->mailType]; + break; + case TRUE: + gUnknown_0203A134->layout = &gUnknown_0859F458[gUnknown_0203A134->mailType]; + break; + } + species = sub_80D45E8(mail->species, buffer); + if (species >= SPECIES_BULBASAUR && species < NUM_SPECIES) + { + switch (gUnknown_0203A134->mailType) + { + default: + gUnknown_0203A134->unk_021b = 0; + break; + case ITEM_BEAD_MAIL - ITEM_ORANGE_MAIL: + gUnknown_0203A134->unk_021b = 1; + break; + case ITEM_DREAM_MAIL - ITEM_ORANGE_MAIL: + gUnknown_0203A134->unk_021b = 2; + break; + } + } + else + { + gUnknown_0203A134->unk_021b = 0; + } + gUnknown_0203A134->mail = mail; + gUnknown_0203A134->callback = callback; + gUnknown_0203A134->flag = flag; + SetMainCallback2(sub_81219F0); +} |