diff options
Diffstat (limited to 'src/wonder_mail_3.c')
-rw-r--r-- | src/wonder_mail_3.c | 192 |
1 files changed, 188 insertions, 4 deletions
diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index e318d26..6cc1e96 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -3,6 +3,15 @@ #include "text.h" #include "input.h" #include "menu.h" +#include "constants/dungeon.h" +#include "wonder_mail.h" + +struct unkSubStruct_203B2F8 +{ + struct WonderMail wonderMail; + u8 *unk14; + u8 *unk18; +}; struct unkStruct_203B2F8 { @@ -13,12 +22,21 @@ struct unkStruct_203B2F8 u8 unk9; u8 unkA; u8 unkB; - u32 unkC; - u8 fill10[0x6C - 0x10]; + struct unkSubStruct_203B2F8 *unkC; + u8 unk10; + u8 fill11[0x14 - 0x11]; + u32 unk14; + u8 fill18[0x58 - 0x18]; + u8 unk58; + u8 fill59[0x64 - 0x59]; + u8 *unk64; + u32 unk68; u32 unk6C; u32 unk70; u32 unk74; - u8 fill78[0x118 - 0x78]; + u8 unk78[0xC8 - 0x78]; + u8 unkC8[4]; + u8 fillCC[0x118 - 0xCC]; struct MenuItem unk118[8]; struct MenuItem unk158[8]; u16 unk198[8]; @@ -47,8 +65,44 @@ extern void sub_802DA84(); extern void sub_802D1B8(); extern void sub_802D2A8(); +extern u8 gUnknown_80E0010[]; +extern u8 gUnknown_80DFFA4[]; +extern u8 gUnknown_80DFF2C[]; +extern u8 gUnknown_80DFED0[]; +extern u8 gUnknown_80DFE9C[]; +extern u8 gUnknown_80DFE4C[]; +extern u8 gUnknown_80E0108[]; +extern u8 gUnknown_80E0094[]; +extern u8 gUnknown_80E0074[]; + +extern u8 sub_80968B0(void *); +extern u8 sub_8096F50(void *); +extern u8 sub_802DAA8(void); +extern u8 sub_802DADC(void); +extern u8 *sub_8096DD8(void); +extern u8 sub_8096C08(u8 *); +extern void sub_802C750(void); +extern s32 sub_80969AC(void); +extern void sub_802D1A0(u32); +extern void sub_8012EA4(u8 *, u32); +extern void* sub_8096AB4(u8); +extern void sub_803B35C(void *, u32*); +extern void sub_802DE84(u32 *); +extern void sub_802D73C(void); +extern void sub_802C640(u32); +extern void sub_802C4C8(u32, u32, u32); +extern void sub_8097418(u32, u32); +extern void sub_802D690(void); +extern void sub_8096C80(void); +extern void sub_8096D24(void); +extern void sub_80141B4(u8 *, u32, u32, u32); +extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32); +extern u8 *sub_8096DE8(void); +extern void sub_8096A78(struct unkSubStruct_203B2F8 *); +extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32); -u32 sub_802D098(u32 param_1) + +u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1) { gUnknown_203B2F8 = MemoryAlloc(0x208,8); gUnknown_203B2F8->unk6C = 0; @@ -149,3 +203,133 @@ void sub_802D1B8(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2F8->unk1A8, 1, 1); } + +void sub_802D2A8(void) +{ + + switch(gUnknown_203B2F8->state) { + case 0: + if (sub_80968B0(gUnknown_203B2F8->unkC) != 0) { + sub_802D1A0(3); + } + else + { + if (sub_8096F50(gUnknown_203B2F8->unkC) != 0) { + sub_802D1A0(4); + } + else + { + if ((gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) && (sub_8096C08(&gUnknown_203B2F8->unk10) != 0)) { + if (sub_802DAA8() != 0) { + sub_802D1A0(9); + } + else { + sub_802D1A0(5); + } + } + else { + if (sub_80969AC() >= 8) { + if (sub_802DADC() != 0) { + sub_802D1A0(10); + } + else { + sub_802D1A0(6); + } + } + else + { + sub_802D1A0(8); + } + } + } + } + break; + case 1: + sub_802D73C(); + sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0); + break; + case 3: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFE9C,0,0,0x101); + break; + case 4: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFED0,0,0,0x101); + break; + case 5: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFF2C,0,0,0x101); + break; + case 6: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFFA4,0,0,0x101); + break; + case 7: + gUnknown_203B2F8->unk4 = 0xc; + sub_80141B4(gUnknown_80E0010,0,0,0x101); + break; + case 8: + gUnknown_203B2F8->unk8 = 1; + sub_8096A78(gUnknown_203B2F8->unkC); + sub_8096C80(); + sub_8096D24(); + if (gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) { + MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28); + MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78); + } + switch(gUnknown_203B2F8->unkC->wonderMail.dungeon) + { + // NOTE: subtract 1 from each of the case as the input?? + case DUNGEON_ODDITY_CAVE: // 0x2B + sub_8097418(0x2A, 1); + break; + case DUNGEON_REMAINS_ISLAND: + sub_8097418(0x2B, 1); + break; + case DUNGEON_MARVELOUS_SEA: + sub_8097418(0x2C, 1); + break; + case DUNGEON_FANTASY_STRAIT: // 0x2E + sub_8097418(0x2D, 1); + break; + } + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80E0074,0,0,0x101); + break; + case 9: + sub_802D690(); + sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0); + break; + case 10: + gUnknown_203B2F8->unk4 = 0xb; + sub_80141B4(gUnknown_80E0108,0,0,0x101); + break; + case 0xb: + sub_802C4C8(0,0,4); + break; + case 0xc: + sub_802C640(1); + break; + case 0xd: + sub_802C750(); + sub_8012D60(gUnknown_203B2F8->unk78,gUnknown_203B2F8->unk118,0,gUnknown_203B2F8->unk198, + gUnknown_203B2F8->unk6C,2); + break; + case 0xe: + sub_802C750(); + sub_8012EA4(gUnknown_203B2F8->unk78,0); + sub_8012D60(gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3); + break; + case 0xf: + sub_803B35C(sub_8096AB4(gUnknown_203B2F8->unk10),&gUnknown_203B2F8->unk14); + gUnknown_203B2F8->unk14 = 3; + sub_802DE84(&gUnknown_203B2F8->unk14); + break; + case 0x10: + sub_803B35C(gUnknown_203B2F8->unkC,&gUnknown_203B2F8->unk14); + gUnknown_203B2F8->unk14 = 3; + gUnknown_203B2F8->unk58 = 0; + gUnknown_203B2F8->unk64 = gUnknown_203B2F8->unkC->unk18; + sub_802DE84(&gUnknown_203B2F8->unk14); + } +} |