summaryrefslogtreecommitdiff
path: root/src/wonder_mail_3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wonder_mail_3.c')
-rw-r--r--src/wonder_mail_3.c192
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);
+ }
+}