diff options
Diffstat (limited to 'src/wonder_mail.c')
-rw-r--r-- | src/wonder_mail.c | 579 |
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; + } +} |