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.c579
1 files changed, 387 insertions, 192 deletions
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index 274625c..e2daaa6 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -1,12 +1,16 @@
#include "global.h"
#include "save.h"
+#include "pokemon.h"
+#include "file_system.h"
+#include "constants/species.h"
// Wonder Mail Related
struct WonderMailStruct_203B2C0
{
+ // size: 0x548
u32 unk0;
u32 unk4;
- u8 padding2[0x38];
+ u8 unk8[0x38];
u32 unk40;
u32 unk44;
u16 unk48[232];
@@ -22,7 +26,7 @@ struct WonderMailStruct_203B2C0
u8 padding5[0x5C];
u32 unk3BC;
u8 padding4[0x60];
- u32 unk420;
+ u32 unk420; // Is this supposed to be a File like 203B2C4?
u8 padding3[0x110];
u32 unk534;
s32 unk538; // A7 << 3
@@ -31,29 +35,65 @@ struct WonderMailStruct_203B2C0
s16 unk544;
};
+struct unkStruct_203B2C4
+{
+ // size: 0x564
+ u8 unk0;
+ u8 padding[3];
+ u32 unk4; // wonder mail link status??
+ u8 unk8[0x36];
+ u8 unk3E;
+ u32 unk40;
+ u32 unk44; // 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];
+ u8 *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;
+
struct unkStruct_8095228
{
u32 unk0;
u8 unk4;
- u8 padding[0x27];
+ u8 padding[0x10 - 0x5];
+ u32 unk10;
+ u8 padding2[0x20 - 0x14];
+ u8 *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
{
- // size of 0x44
- u32 unk0;
- u32 unk4;
- u32 unk8;
- u32 *unkC;
+ u8 unkArray[0x10];
u32 unk10;
- u8 unk14[0xA]; // very unsure about this one
- u32 unk20;
- u32 unk24;
- u32 padding[7];
+ u8 padding[0x30 - 0x14];
};
+
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
extern u32 sub_80144A4(s32 *r0);
@@ -81,6 +121,19 @@ extern u32 gWonderMailPasswordIncorrectText;
extern u32 gWonderMailSOSPasswordIncorrectText;
extern u32 gWonderMailDuplicateText;
extern u32 gWonderMailAOKMailReceivedText;
+extern u32 gUnknown_80DDA48;
+extern u32 gUnknown_80DEF04;
+extern u32 gUnknown_80DEF28;
+extern u32 gUnknown_80DEF80;
+extern u32 gUnknown_80DEFDC;
+extern u32 gUnknown_80DF044;
+extern u32 gUnknown_80DF0A0;
+extern u32 gUnknown_80DF0E0;
+extern u32 gUnknown_80DF138;
+extern u32 gUnknown_80DF194;
+extern char gUnknown_202E5D8[0x50];
+extern char gAvailablePokemonNames[0x50];
+extern u8 *gUnknown_80DED44;
extern s32 sub_8095190(void);
extern u32 sub_8095324(u32);
@@ -91,7 +144,7 @@ extern void sub_800641C(void *r0, u8, u8);
extern void ResetUnusedInputStruct();
extern void sub_803084C();
extern u32 sub_8030768(u32);
-extern u8 sub_80307EC();
+extern s8 sub_80307EC();
extern void sub_8030D40(u8, u32);
extern void sub_8006518(u32 *r0);
extern u8 sub_8012FD8(u32 *r0);
@@ -104,11 +157,13 @@ extern void sub_803092C(void);
extern void sub_8011C28(u32);
+extern void MemoryFill8(u8 *dest, u8 value, s32 size);
+extern void* MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+
extern u32 sub_80154F0();
-void MemoryFill8(u8 *dest, u8 value, s32 size);
-extern u32 sub_8039068(u32, u32 *r1, u8 *r0);
-extern u32 gUnknown_80DDA48;
-extern void sub_8014248(u32 *r0, u32, u32, u32 *r1);
+extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
+extern void sub_8014248(u32 *r0, u32, u32, u32 *r4, u32, u32, u32, u32 *r5, u32);
extern void sub_8095274(u32);
extern void sub_80155F0();
extern void sub_80951BC(u8 *r0);
@@ -126,6 +181,61 @@ extern u8 sub_8024108(u32);
extern u32 sub_8031DCC();
extern void sub_8031E10();
extern void sub_8031E00();
+void sub_808D8E0(u8 *, u32);
+extern char* GetMonSpecies(u32);
+extern s32 sub_80953D4(u32);
+extern void sub_802B2BC(u32);
+
+extern void sub_802AAE4();
+extern void sub_802AAC8();
+extern void sub_802AAAC();
+extern void sub_802AB7C();
+extern void sub_802AA28();
+extern void sub_802A98C();
+extern void sub_802A9A8();
+extern void sub_802A910();
+extern void sub_802A8BC();
+extern void sub_802A8A0();
+extern void sub_802A798();
+extern void sub_802A474();
+extern void sub_802A090();
+extern void sub_802A158();
+extern void sub_802A0C8();
+extern void sub_802A174();
+extern void sub_802A230();
+extern void sub_802A28C();
+extern void sub_802A39C();
+extern void sub_802A33C();
+extern void sub_802A740();
+extern void sub_802A6F0();
+extern void sub_802A68C();
+extern void sub_802A4D4();
+extern void sub_802A050();
+extern void sub_802A4AC();
+extern void sub_802A458();
+extern void sub_802A75C();
+extern void sub_8029F98();
+extern void sub_8029EA8();
+extern void sub_802A490();
+extern void sub_802AB60();
+extern void sub_802AB98();
+extern void sub_802A718();
+extern void sub_802A6B4();
+extern void sub_802A4F0();
+extern void sub_802A50C();
+extern void sub_802A9FC();
+extern void sub_802A828();
+extern void sub_802A850();
+extern void sub_8030DE4();
+extern void sub_801B450();
+extern void sub_803084C();
+extern void sub_801CBB8();
+extern void sub_80155F0();
+extern void sub_8031E10();
+extern void sub_802F2C0();
+
+
+
void sub_8028B04(u32 r0)
{
@@ -546,7 +656,7 @@ void sub_8028FDC(void)
}
else
{
- if(return_var->unk30 <= 0)
+ if(return_var->unk2C <= 0)
{
sub_8028B04(0x1D);
}
@@ -817,24 +927,20 @@ void sub_80293D8(void)
sub_8028B04(0x27);
}
-#ifndef NONMATCHING
-NAKED
-#endif
+// 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..
+//
void sub_80293F4(void)
{
-#ifdef NONMATCHING
u32 return_var;
- u32 temp_var;
struct unkStruct_80293F4 temp;
+
return_var = sub_80154F0();
- MemoryFill8(temp.unk14, 0, 0x30);
+ MemoryFill8((u8 *)temp.unkArray, 0, 0x30);
switch(return_var)
{
case 3:
- return_var = sub_8039068(0x1C, &(gUnknown_203B2C0->unk8), temp.unk14) - 7;
- if(return_var <= 0x11)
- {
- switch(return_var)
+ switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), temp.unkArray) - 7)
{
case 1:
case 2:
@@ -847,13 +953,7 @@ void sub_80293F4(void)
case 9:
break;
case 10:
- // TODO one register off from matching
- temp.unk0 = 0;
- temp.unk4 = 4;
- temp.unk8 = 0;
- temp.unkC = &(gUnknown_203B2C0->unk420);
- temp.unk10 = 0xC;
- sub_8014248(&gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48);
+ sub_8014248(&gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->unk420, 0xC);
sub_8028B04(0x28);
break;
case 11:
@@ -869,10 +969,9 @@ void sub_80293F4(void)
case 14:
break;
case 15:
- sub_8095274(temp.unk24);
- // This one is iffy.. not sure
- temp.unk14[0] = 2;
- sub_80951BC(temp.unk14);
+ sub_8095274(temp.unk10);
+ temp.unkArray[0] = 2; // Some sort of Ack?
+ sub_80951BC(temp.unkArray);
sub_80141B4(&gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->unk420, 0x101);
sub_8028B04(0x23);
break;
@@ -881,7 +980,6 @@ void sub_80293F4(void)
default:
break;
}
- }
sub_80155F0();
break;
case 2:
@@ -893,158 +991,6 @@ void sub_80293F4(void)
default:
break;
}
-#else
- asm_unified("\tpush {r4,lr}\n"
- "\tsub sp, 0x44\n"
- "\tbl sub_80154F0\n"
- "\tadds r4, r0, 0\n"
- "\tadd r0, sp, 0x14\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 0x30\n"
- "\tbl MemoryFill8\n"
- "\tcmp r4, 0x2\n"
- "\tbne _0802940E\n"
- "\tb _08029530\n"
-"_0802940E:\n"
- "\tcmp r4, 0x3\n"
- "\tbeq _08029414\n"
- "\tb _08029550\n"
-"_08029414:\n"
- "\tldr r0, _08029434\n"
- "\tldr r1, [r0]\n"
- "\tadds r1, 0x8\n"
- "\tmovs r0, 0x1C\n"
- "\tadd r2, sp, 0x14\n"
- "\tbl sub_8039068\n"
- "\tsubs r0, 0x7\n"
- "\tcmp r0, 0x11\n"
- "\tbls _0802942A\n"
- "\tb _0802951C\n"
-"_0802942A:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _08029438\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
-"_08029434: .4byte gUnknown_203B2C0\n"
-"_08029438: .4byte _0802943C\n"
- "\t.align 2, 0\n"
-"_0802943C:\n"
- "\t.4byte _080294C8\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _08029484\n"
- "\t.4byte _080294C0\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _080294F0\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
-"_08029484:\n"
- "\tldr r0, _080294B4\n"
- "\tldr r3, _080294B8\n"
- "\tmovs r2, 0\n"
- "\tstr r2, [sp]\n"
- "\tmovs r1, 0x4\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tstr r2, [sp, 0x8]\n"
- "\tldr r1, _080294BC\n"
- "\tldr r1, [r1]\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 3\n"
- "\tadds r1, r2\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tmovs r1, 0xC\n"
- "\tstr r1, [sp, 0x10]\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 0x8\n"
- "\tbl sub_8014248\n"
- "\tmovs r0, 0x28\n"
- "\tbl sub_8028B04\n"
- "\tb _0802951C\n"
- "\t.align 2, 0\n"
-"_080294B4: .4byte gWonderMailPasswordIncorrectText\n"
-"_080294B8: .4byte gUnknown_80DDA48\n"
-"_080294BC: .4byte gUnknown_203B2C0\n"
-"_080294C0:\n"
- "\tldr r0, _080294C4\n"
- "\tb _080294CA\n"
- "\t.align 2, 0\n"
-"_080294C4: .4byte gWonderMailSOSPasswordIncorrectText\n"
-"_080294C8:\n"
- "\tldr r0, _080294E4\n"
-"_080294CA:\n"
- "\tldr r1, _080294E8\n"
- "\tldr r2, [r1]\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 3\n"
- "\tadds r2, r1\n"
- "\tldr r3, _080294EC\n"
- "\tmovs r1, 0\n"
- "\tbl sub_80141B4\n"
- "\tmovs r0, 0x7\n"
- "\tbl sub_8028B04\n"
- "\tb _0802951C\n"
- "\t.align 2, 0\n"
-"_080294E4: .4byte gWonderMailDuplicateText\n"
-"_080294E8: .4byte gUnknown_203B2C0\n"
-"_080294EC: .4byte 0x0000010d\n"
-"_080294F0:\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tbl sub_8095274\n"
- "\tadd r1, sp, 0x14\n"
- "\tmovs r0, 0x2\n"
- "\tstrb r0, [r1]\n"
- "\tadds r0, r1, 0\n"
- "\tbl sub_80951BC\n"
- "\tldr r0, _08029524\n"
- "\tldr r1, _08029528\n"
- "\tldr r2, [r1]\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 3\n"
- "\tadds r2, r1\n"
- "\tldr r3, _0802952C\n"
- "\tmovs r1, 0\n"
- "\tbl sub_80141B4\n"
- "\tmovs r0, 0x23\n"
- "\tbl sub_8028B04\n"
-"_0802951C:\n"
- "\tbl sub_80155F0\n"
- "\tb _08029550\n"
- "\t.align 2, 0\n"
-"_08029524: .4byte gWonderMailAOKMailReceivedText\n"
-"_08029528: .4byte gUnknown_203B2C0\n"
-"_0802952C: .4byte 0x00000101\n"
-"_08029530:\n"
- "\tbl sub_80155F0\n"
- "\tbl ResetUnusedInputStruct\n"
- "\tldr r0, _08029558\n"
- "\tldr r0, [r0]\n"
- "\tmovs r2, 0xEF\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2\n"
- "\tmovs r1, 0x1\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_800641C\n"
- "\tmovs r0, 0x1\n"
- "\tbl sub_8028B04\n"
-"_08029550:\n"
- "\tadd sp, 0x44\n"
- "\tpop {r4}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"_08029558: .4byte gUnknown_203B2C0\n");
-#endif
}
void sub_802955C(void)
@@ -1436,3 +1382,252 @@ void sub_8029B34(void)
}
sub_8028B04(3);
}
+
+u32 sub_8029B50(void)
+{
+ char *monName;
+ struct OpenedFile *faceFile;
+ s32 uVar2;
+ int counter;
+ struct unkStruct_8095228 *temp;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ gUnknown_203B2C4 = MemoryAlloc(0x564, 8);
+ MemoryFill8((u8 *)gUnknown_203B2C4, 0, 0x564);
+
+ sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gAvailablePokemonNames, monName);
+ faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER);
+
+ gUnknown_203B2C4->faceFile = faceFile;
+ gUnknown_203B2C4->faceData = faceFile->data;
+ gUnknown_203B2C4->unk42C = 0;
+ gUnknown_203B2C4->unk42D = 0;
+ gUnknown_203B2C4->unk42E = 0;
+ gUnknown_203B2C4->unk428 = 2;
+ gUnknown_203B2C4->unk42A = 8;
+
+ for(counter = 0; counter < 0x36; counter++){
+ gUnknown_203B2C4->unk8[counter] = 0;
+ }
+
+ gUnknown_203B2C4->unk534 = 3;
+ gUnknown_203B2C4->unk538 = 1;
+
+ uVar2 = sub_80953D4(6);
+ if (uVar2 != -1) {
+ temp = sub_8095228(uVar2);
+ gUnknown_203B2C4->unk41C = temp->unk20;
+ gUnknown_203B2C4->unk218 = uVar2;
+ gUnknown_203B2C4->unk430 = temp->unk10;
+ sub_802B2BC(5);
+ }
+ else {
+ gUnknown_203B2C4->unk41C = gUnknown_80DED44;
+ gUnknown_203B2C4->unk218 = -1;
+ sub_802B2BC(0);
+ }
+ gUnknown_203B2C4->unk4 = 0x2b;
+ return 1;
+}
+
+u32 sub_8029C98(void)
+{
+
+ switch(gUnknown_203B2C4->unk0) {
+ case 5:
+ sub_802AB7C();
+ break;
+ case 0x1e:
+ sub_8029F98();
+ break;
+ case 0x1f:
+ sub_8029EA8();
+ break;
+ case 0xe:
+ sub_802A090();
+ break;
+ case 0xf:
+ sub_802A158();
+ break;
+ case 0x11:
+ sub_802A174();
+ break;
+ case 0x12:
+ sub_802A230();
+ break;
+ case 0x10:
+ sub_802A0C8();
+ break;
+ case 0x13:
+ sub_802A28C();
+ break;
+ case 0x14:
+ sub_802A39C();
+ break;
+ case 0x15:
+ sub_802A33C();
+ break;
+ case 0x1c:
+ sub_802A458();
+ break;
+ case 0x1b:
+ sub_802A4AC();
+ break;
+ case 0x19:
+ sub_802A4D4();
+ break;
+ case 0x1a:
+ sub_802A050();
+ break;
+ case 0x28:
+ sub_802A9FC();
+ break;
+ case 0x26:
+ sub_802A4F0();
+ break;
+ case 0x27:
+ sub_802A50C();
+ break;
+ case 0x25:
+ sub_802A6B4();
+ break;
+ case 0x24:
+ sub_802A718();
+ break;
+ case 0x21:
+ sub_802AB60();
+ break;
+ case 0x22:
+ sub_802AB98();
+ break;
+ case 0x16:
+ sub_802A740();
+ break;
+ case 0x18:
+ sub_802A68C();
+ break;
+ case 0x17:
+ sub_802A6F0();
+ break;
+ case 0x1d:
+ sub_802A75C();
+ break;
+ case 0x20:
+ sub_802A490();
+ break;
+ case 0xd:
+ sub_802A474();
+ break;
+ case 0xc:
+ sub_802A798();
+ break;
+ case 0x29:
+ sub_802A828();
+ break;
+ case 0x2a:
+ sub_802A850();
+ break;
+ case 0xb:
+ sub_802A8A0();
+ break;
+ case 10:
+ sub_802A8BC();
+ break;
+ case 9:
+ sub_802A910();
+ break;
+ case 7:
+ sub_802A98C();
+ break;
+ case 8:
+ sub_802A9A8();
+ break;
+ case 6:
+ sub_802AA28();
+ break;
+ case 4:
+ sub_802AAAC();
+ break;
+ case 0:
+ case 1:
+ sub_802AAE4();
+ break;
+ case 2:
+ sub_802AAC8();
+ break;
+ case 3:
+ return 3;
+ }
+ return 0;
+}
+
+void sub_8029E60(void)
+{
+ if(gUnknown_203B2C4 != NULL)
+ {
+ CloseFile(gUnknown_203B2C4->faceFile);
+ MemoryFree(gUnknown_203B2C4);
+ gUnknown_203B2C4 = NULL;
+ sub_8030DE4();
+ sub_801B450();
+ sub_803084C();
+ sub_801CBB8();
+ sub_80155F0();
+ sub_8031E10();
+ sub_802F2C0();
+ }
+}
+
+void sub_8029EA8(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(1);
+ }
+}
+
+void sub_8029EC4(u32 param_1)
+{
+ switch(param_1) {
+ case 3:
+ sub_80141B4(&gUnknown_80DEF28, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 4:
+ sub_80141B4(&gUnknown_80DEF80, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 6:
+ sub_80141B4(&gUnknown_80DEFDC, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 7:
+ sub_80141B4(&gUnknown_80DF044, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 9:
+ sub_80141B4(&gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 11:
+ sub_80141B4(&gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 13:
+ sub_80141B4(&gUnknown_80DF0E0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 1:
+ case 2:
+ case 5:
+ case 14:
+ sub_80141B4(&gUnknown_80DEF04, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 15:
+ sub_80141B4(&gUnknown_80DF138,0,(u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 0:
+ case 8:
+ case 10:
+ case 12:
+ default:
+ return;
+ }
+}