summaryrefslogtreecommitdiff
path: root/src/wonder_mail.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wonder_mail.c')
-rw-r--r--src/wonder_mail.c598
1 files changed, 516 insertions, 82 deletions
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index da8f44c..656d156 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -5,67 +5,20 @@
#include "constants/species.h"
#include "wonder_mail.h"
-struct unkStruct_203B2C4
-{
- // size: 0x564
- u8 unk0;
- u8 padding[3];
- u32 unk4; // wonder mail link status??
- u8 unk8[0x36]; // Probably a buffer for entry
- u8 unk3E;
- u32 unk40;
- u32 linkError; // another link status
- u8 filler48[0x218 - 0x48];
- s8 unk218;
- u32 unk21C;
- u8 filler220[0x30C - 0x220];
- u32 unk30C;
- u8 filler310[0x35C - 0x310];
- u32 unk35C;
- u8 filler360[0x3BC - 0x360];
- u32 unk3BC;
- u8 filler3C0[0x41C - 0x3C0];
- u32 unk41C;
- /* 0x420 */ struct OpenedFile *faceFile;
- /* 0x424 */ u8 *faceData;
- u16 unk428;
- u16 unk42A;
- u8 unk42C;
- u8 unk42D;
- u8 unk42E;
- u32 unk430;
- u8 padding3[0x534 - 0x434];
- s32 unk534;
- u32 unk538;
-};
-extern struct unkStruct_203B2C4 *gUnknown_203B2C4;
+extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
+extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
struct unkStruct_8095228
{
- u32 unk0;
- u8 unk4;
- u8 padding[0x10 - 0x5];
+ u8 unkArray[0x10];
u32 unk10;
u8 padding2[0x20 - 0x14];
- u32 unk20;
+ struct unkStruct_41C unk20;
u8 padding3[0x2C - 0x24];
s8 unk2C;
u8 padding4[0x30 - 0x2D];
- s8 unk30;
};
-// Used as a temp storage when receiveing A-OK Mail
-struct unkStruct_80293F4
-{
- u8 unkArray[0x10];
- u32 unk10;
- u8 padding[0x30 - 0x14];
-};
-
-
-
-extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
-
extern u32 sub_80144A4(s32 *r0);
extern void sub_8011C28(u32);
extern void sub_8095240(u8);
@@ -81,7 +34,10 @@ extern u8 sub_80A2824(u32);
#include "data/wonder_mail_1.h"
-extern u32 gUnknown_80DED44;
+const struct unkStruct_41C gUnknown_80DED44 =
+{
+ 1, 0, 0, 0
+};
extern u32 gUnknown_80DDA48;
@@ -94,6 +50,11 @@ extern const char gUnknown_80DF0A0[];
extern const char gUnknown_80DF0E0[];
extern const char gUnknown_80DF138[];
extern const char gUnknown_80DF194[];
+extern u32 gUnknown_80DEE44;
+extern const char gUnknown_80DF1C0[];
+extern const char gUnknown_80DF208[];
+extern const char gUnknown_80DF0A0[];
+extern u8 sub_809539C(u32, u32);
extern char gUnknown_202E5D8[0x50];
extern char gAvailablePokemonNames[0x50];
@@ -103,7 +64,6 @@ extern u32 sub_8095324(u32);
extern void sub_80141B4(const char *r0, u32, u32 *r1, u32);
extern void nullsub_130(void);
extern void sub_8028348(void);
-extern void sub_800641C(void *r0, u8, u8);
extern void ResetUnusedInputStruct();
extern void sub_803084C();
extern u32 sub_8030768(u32);
@@ -196,8 +156,45 @@ extern void sub_801CBB8();
extern void sub_80155F0();
extern void sub_8031E10();
extern void sub_802F2C0();
+extern u16 gUnknown_80E5990[];
+extern s32 sub_8001658(u32, u32);
+extern u32 gUnknown_80E4A40[];
+extern u8 sub_8099B94();
+
+extern void sub_8099A5C(u32, u32, u32*);
+extern void sub_8099AFC(u32, u32, u32*);
+extern void sub_800641C(void *, u32, u32);
+extern void ResetUnusedInputStruct();
+extern void sub_8099690(u32);
+extern void sub_80141B4(const char *r0, u32, u32 *r1, u32);
+extern u32 sub_80144A4(s32 *r0);
+extern u32 sub_8031DCC(void);
+extern void sub_8031E00(void);
+extern void sub_8031E10(void);
+extern void sub_8030D40(u8, u32);
+extern u32 sub_8030768(u32);
+extern void sub_803084C(void);
+extern s8 sub_80307EC(void);
+extern void sub_8006518(u32 *);
+extern u8 sub_8012FD8(u32 *r0);
+extern void sub_8013114(u32 *, s32 *);
+extern void sub_8035CC0(u32 *, u32);
+extern void sub_8030810(u32);
+extern u32 sub_8030DA0();
+extern void sub_8030DE4();
+extern void sub_803092C();
+extern void sub_8035CF4(u32 *, u32, u32);
+extern u32 sub_801CA08(u32);
+extern void sub_801CBB8();
+extern void sub_801B3C0(struct unkStruct_41C *);
+extern u8 sub_801CB24();
+extern void sub_801B450();
+extern u32 sub_801B410();
+extern void sub_801CB5C(u32);
+extern void sub_801CCD8();
+extern void sub_8011C28(u32);
void sub_8028B04(u32 r0)
@@ -267,7 +264,7 @@ void sub_8028BF0(void)
return;
}
gUnknown_203B2C0->unk40 = 8;
- gUnknown_203B2C0->unk544 = 0xffff;
+ gUnknown_203B2C0->unk544 = -1;
switch(temp)
{
case 0:
@@ -606,7 +603,7 @@ void sub_8028FDC(void)
{
case 8:
return_var = sub_8095228(gUnknown_203B2C0->unk218);
- if(sub_80A2824(return_var->unk4) == 0)
+ if(sub_80A2824(return_var->unkArray[4]) == 0)
{
sub_8028B04(0x1C);
}
@@ -883,56 +880,54 @@ void sub_80293D8(void)
sub_8028B04(0x27);
}
-// TODO: pls someone fix this madness of a match - Sese
-// This is definitely a fake match with the casting and switch could probably be cleaned up too..
-//
+// TODO: pls look into this later - Sese
void sub_80293F4(void)
{
u32 return_var;
- struct unkStruct_80293F4 temp;
+ struct unkStruct_8095228 temp;
return_var = sub_80154F0();
- MemoryFill8((u8 *)temp.unkArray, 0, 0x30);
+ MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228));
switch(return_var)
{
case 3:
- switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), temp.unkArray) - 7)
+ switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), temp.unkArray))
{
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
case 8:
case 9:
- break;
case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ break;
+ case 17:
sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48, 0, 4, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0xC);
- sub_8028B04(0x28);
+ sub_8028B04(40);
break;
- case 11:
+ case 18:
sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
sub_8028B04(7);
break;
- case 0:
+ case 7:
sub_80141B4(gWonderMailDuplicateText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d);
sub_8028B04(7);
break;
- case 12:
- case 13:
- case 14:
+ case 19:
+ case 20:
+ case 21:
break;
- case 15:
+ case 22:
sub_8095274(temp.unk10);
temp.unkArray[0] = 2; // Some sort of Ack?
sub_80951BC(temp.unkArray);
sub_80141B4(gWonderMailAOKMailReceivedText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x101);
- sub_8028B04(0x23);
+ sub_8028B04(35);
break;
- case 16:
- case 17:
+ case 23:
+ case 24:
default:
break;
}
@@ -1113,7 +1108,7 @@ void sub_80297D4(void)
case 2:
sub_8023C60();
sub_8028B04(1);
- gUnknown_203B2C0->unk544 = 0xffff;
+ gUnknown_203B2C0->unk544 = -1;
break;
case 3:
gUnknown_203B2C0->unk544 = sub_8023B44();
@@ -1349,8 +1344,8 @@ u32 sub_8029B50(void)
ResetUnusedInputStruct();
sub_800641C(0,1,1);
- gUnknown_203B2C4 = MemoryAlloc(0x564, 8);
- MemoryFill8((u8 *)gUnknown_203B2C4, 0, 0x564);
+ gUnknown_203B2C4 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C4), 8);
+ MemoryFill8((u8 *)gUnknown_203B2C4, 0, sizeof(struct WonderMailStruct_203B2C4));
sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
monName = GetMonSpecies(SPECIES_PELIPPER);
@@ -1588,3 +1583,442 @@ void PrintWonderMailLinkError(u32 param_1)
return;
}
}
+
+void sub_8029F98(void)
+{
+ s32 auStack20;
+
+ if (sub_80144A4(&auStack20) != 0) {
+ return;
+ }
+ MemoryFill8((u8 *)&gUnknown_203B2C4->unk41C, 0, 4);
+ gUnknown_203B2C4->unk41C.unk41E = 0;
+ gUnknown_203B2C4->unk41C.unk41D = 1;
+ gUnknown_203B2C4->unk41C.unk41C = 0;
+ if (gUnknown_203B2C4->linkError == 0) {
+ switch(gUnknown_203B2C4->unk40)
+ {
+ case 6:
+ switch(gUnknown_203B2C4->unk534)
+ {
+ case 3:
+ case 5:
+ case 6:
+ // "Thank-You Mail has been sent"
+ sub_80141B4(gUnknown_80DF194, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 4:
+ default:
+ break;
+ }
+ sub_802B2BC(0xD);
+ break;
+ case 7:
+ sub_802B2BC(0x21);
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ PrintWonderMailLinkError(gUnknown_203B2C4->linkError);
+ sub_802B2BC(0x1F);
+ }
+}
+
+void sub_802A050(void)
+{
+ switch(sub_8031DCC())
+ {
+
+ case 3:
+ case 2:
+ sub_8031E10();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1);
+ sub_802B2BC(0x1B);
+ break;
+ case 1:
+ sub_8031E00();
+ break;
+ default:
+ return;
+ }
+}
+
+void sub_802A090(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 7:
+ sub_802B2BC(6);
+ break;
+ case 8:
+ case 0:
+ sub_802B2BC(1);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void sub_802A0C8(void)
+{
+ switch(sub_8030768(1))
+ {
+ case 2:
+ sub_803084C();
+ sub_802B2BC(1);
+ break;
+ case 3:
+ gUnknown_203B2C4->unk218 = sub_80307EC();
+ sub_802B2BC(0x11);
+ break;
+ case 4:
+ gUnknown_203B2C4->unk4 = 0x10;
+ gUnknown_203B2C4->unk218 = sub_80307EC();
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_8030D40(gUnknown_203B2C4->unk218,0);
+ sub_802B2BC(0x12);
+ break;
+ }
+}
+
+void sub_802A158(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x10);
+ }
+}
+
+void sub_802A174(void)
+{
+ s32 temp;
+
+ temp = -1;
+ sub_8030768(0);
+ if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
+ sub_8013114(&gUnknown_203B2C4->unk30C, &temp);
+ }
+
+ switch(temp)
+ {
+ case 0xB:
+ sub_803084C();
+ sub_802B2BC(0xe);
+ break;
+ case 0xC:
+ gUnknown_203B2C4->unk4 = 0x2b;
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_8030D40(gUnknown_203B2C4->unk218,0);
+ sub_802B2BC(0x12);
+ break;
+ case 0:
+ case 0xD:
+ sub_8035CC0(&gUnknown_203B2C4->unk35C,2);
+ sub_8030810(1);
+ sub_802B2BC(0x10);
+ default:
+ break;
+ }
+}
+
+void sub_802A230(void)
+{
+ switch(sub_8030DA0())
+ {
+ case 2:
+ case 3:
+ sub_8030DE4();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1);
+ sub_803092C();
+ if (gUnknown_203B2C4->unk4 == 0x2b) {
+ sub_8035CF4(&gUnknown_203B2C4->unk21C, 3, 1);
+ sub_802B2BC(0x11);
+ }
+ else {
+ sub_802B2BC(gUnknown_203B2C4->unk4);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void sub_802A28C(void)
+{
+
+ gUnknown_203B2C4->unk41C.unk41E = 0;
+ gUnknown_203B2C4->unk41C.unk41D = 1;
+ gUnknown_203B2C4->unk41C.unk41C = 0;
+
+ switch(sub_801CA08(1))
+ {
+ case 2:
+ sub_801CBB8();
+ sub_802B2BC(1);
+ break;
+ case 3:
+ gUnknown_203B2C4->unk41C.unk41E = sub_801CB24();
+ sub_802B2BC(0x14);
+ break;
+ case 4:
+ gUnknown_203B2C4->unk4 = 0x13;
+ gUnknown_203B2C4->unk41C.unk41E = sub_801CB24();
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(&gUnknown_203B2C4->unk41C);
+ sub_802B2BC(0x15);
+ break;
+ }
+}
+
+void sub_802A33C(void)
+{
+ switch(sub_801B410())
+ {
+ case 2:
+ case 3:
+ sub_801B450();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B2C4->unk3BC,1,1);
+ sub_801CB5C(1);
+ if (gUnknown_203B2C4->unk4 == 0x2b) {
+ sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
+ sub_802B2BC(0x14);
+ }
+ else {
+ sub_802B2BC(gUnknown_203B2C4->unk4);
+ }
+ break;
+ case 1:
+ default:
+ break;
+ }
+}
+
+void sub_802A39C(void)
+{
+ s32 temp;
+
+ temp = -1;
+ sub_801CA08(0);
+ if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
+ sub_8013114(&gUnknown_203B2C4->unk30C, &temp);
+ }
+
+ switch(temp)
+ {
+ case 0xB:
+ sub_801CBB8();
+ sub_802B2BC(0xC);
+ break;
+ case 0xC:
+ gUnknown_203B2C4->unk4 = 0x2b;
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(&gUnknown_203B2C4->unk41C);
+ sub_802B2BC(0x15);
+ break;
+ case 0:
+ case 0xD:
+ sub_8035CC0(&gUnknown_203B2C4->unk35C, 3);
+ sub_801CCD8();
+ sub_802B2BC(0x13);
+ default:
+ break;
+ }
+}
+
+void sub_802A458(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0xD);
+ }
+}
+
+void sub_802A474(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x3);
+ }
+}
+
+void sub_802A490(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x3);
+ }
+}
+
+void sub_802A4AC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x18);
+ sub_8011C28(1);
+ sub_8012574(0);
+ }
+}
+
+void sub_802A4D4(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x1A);
+ }
+}
+
+void sub_802A4F0(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x27);
+ }
+}
+
+void sub_802A50C(void)
+{
+ u8 uVar1;
+ struct unkStruct_8095228 *puVar5;
+ u32 return_var;
+ struct unkStruct_8095228 temp;
+
+ return_var = sub_80154F0();
+ MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228));
+ switch(return_var)
+ {
+ case 3:
+ switch(sub_8039068(0x20,gUnknown_203B2C4->unk8,temp.unkArray))
+ {
+ case 7:
+ case 8:
+ case 9:
+ case 0xA:
+ case 0xD:
+ case 0xE:
+ case 0xF:
+ case 0x10:
+ break;
+ case 0x11:
+ // Wrong password
+ sub_8014248(gUnknown_80DF1C0,0,7,&gUnknown_80DEE44,0,4,0,(u32 *)&gUnknown_203B2C4->faceFile,0xc);
+ sub_802B2BC(0x28);
+ break;
+ case 0x14:
+ // Incorrect password
+ sub_80141B4(gUnknown_80DF208,0,(u32 *)&gUnknown_203B2C4->faceFile,0x10d);
+ sub_802B2BC(0x1f);
+ break;
+ case 0xB:
+ // Not eligible to receive
+ sub_80141B4(gUnknown_80DF0A0,0,(u32 *)&gUnknown_203B2C4->faceFile,0x10d);
+ sub_802B2BC(0x1f);
+ break;
+ case 0x18:
+ // I think this is when password works successfully
+ uVar1 = sub_809539C(4,temp.unk10);
+ puVar5 = sub_8095228(uVar1);
+ *puVar5 = temp;
+ puVar5->unkArray[0] = 6;
+ gUnknown_203B2C4->unk430 = temp.unk10;
+ sub_802B2BC(0x21);
+ break;
+ default:
+ break;
+ }
+ sub_80155F0();
+ break;
+ case 2:
+ sub_80155F0();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1);
+ sub_802B2BC(1);
+ break;
+ }
+}
+
+void sub_802A68C(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ if (sub_8012600() == 0) {
+ sub_8012750();
+ sub_802B2BC(0xd);
+ }
+ }
+}
+
+void sub_802A6B4(void)
+{
+ int iVar2;
+ u32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ if (sub_8012600() == 0) {
+ iVar2 = sub_8012744();
+ sub_8012750();
+ if (iVar2 == 0) {
+ sub_802B2BC(0x20);
+ }
+ else {
+ sub_802B2BC(3);
+ }
+ }
+ }
+}
+
+void sub_802A6F0(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ sub_802B2BC(0x18);
+ sub_8011C28(1);
+ sub_8012574(0);
+ }
+}
+
+void sub_802A718(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ sub_802B2BC(0x25);
+ sub_8011C28(1);
+ sub_8012574(0);
+ }
+}
+
+void sub_802A740(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ sub_802B2BC(0x1e);
+ }
+}