summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-09-08 21:32:59 -0700
committerGitHub <noreply@github.com>2021-09-08 21:32:59 -0700
commit4eff1882443b0004d9c9fa4895cdfefdc356565f (patch)
treea2c2a1f4ef482b64c0f3a19aacd074d6390d6e88 /src
parent0313c6bbc5e210ad1781dbb8d42641f5f604efd7 (diff)
Thank You Mail and minor DungeonEnitity Work (#52)
* Thank You Mail: split out code into own file w/ data * use constant for facingDir
Diffstat (limited to 'src')
-rw-r--r--src/code_8041AD0.c4
-rw-r--r--src/code_80521D0_1.c10
-rw-r--r--src/code_8057824_1.c72
-rw-r--r--src/code_80869E4.c2
-rw-r--r--src/code_8086A3C.c124
-rw-r--r--src/ds_menus.c11
-rw-r--r--src/felicity_bank.c2
-rw-r--r--src/thank_you_wonder_mail.c1723
-rw-r--r--src/wonder_mail.c1113
-rw-r--r--src/wonder_mail_2.c336
-rw-r--r--src/wonder_mail_main_menu.c300
11 files changed, 2173 insertions, 1524 deletions
diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c
index 28ac016..9874f48 100644
--- a/src/code_8041AD0.c
+++ b/src/code_8041AD0.c
@@ -289,7 +289,7 @@ void sub_8041D5C(struct DungeonEntity *r0)
{
return;
}
- sub_803ED30(r0->unk70->unk112 , r0, 1, 0xB);
+ sub_803ED30(r0->unk70->stockpileCount , r0, 1, 0xB);
}
void sub_8041D84(struct DungeonEntity * r0)
@@ -675,7 +675,7 @@ void sub_8042208(struct DungeonEntity *r0, u8 r1)
void sub_8042238(u32 r0, struct DungeonEntity *r1)
{
- if(r1->unk70->unk6 != 0)
+ if(r1->unk70->isEnemy)
PlaySoundEffect(0x157);
else
PlaySoundEffect(0x156);
diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c
index f275279..d71de9a 100644
--- a/src/code_80521D0_1.c
+++ b/src/code_80521D0_1.c
@@ -106,7 +106,7 @@ extern void sub_8083ED8(u32);
extern u32 sub_803F994();
extern s32 sub_803F9B0();
extern void sub_803F878(u32, s32);
-extern void sub_8086A70(struct DungeonEntity *, u32, u32);
+extern void SetupBossFightHP(struct DungeonEntity *, u32, u32);
extern void sub_8085C54(u32, u32, u32, u32, u32);
extern void sub_803E9D0(void);
extern void DeoxysScreenFlash(void);
@@ -341,7 +341,7 @@ void LugiaPreFightDialogue(void)
sub_80861D4(uVar3,7,0);
sub_8052910(&gUnknown_8106024);
sub_808BFA0();
- sub_8086A70(uVar3,800,0x20);
+ SetupBossFightHP(uVar3,800,0x20);
sub_8083E88(0x23);
sub_80858AC(&iVar2->posPixelX,0x10);
}
@@ -491,7 +491,7 @@ void KyogrePreFightDialogue(void)
// power!
sub_8052910(&gUnknown_810627C);
sub_803E708(10,0x46);
- sub_8086A70(uVar3,600,0xb);
+ SetupBossFightHP(uVar3,600,0xb);
sub_8083E88(0x23);
sub_80858AC(&iVar2->posPixelX,0x10);
}
@@ -633,7 +633,7 @@ void sub_808C5A0(struct DungeonEntity *r0)
void sub_808C5AC(struct DungeonEntity *r0)
{
- sub_8086A70(r0, 0x3b6, 0x20);
+ SetupBossFightHP(r0, 0x3b6, 0x20);
}
void sub_808C5C0(void)
@@ -1122,7 +1122,7 @@ void sub_808C998(void)
void sub_808C9B0(struct DungeonEntity *param_1)
{
- param_1->unk70->unk46 = 4;
+ param_1->unk70->facingDir = NORTH;
sub_806CE68(param_1, 4);
}
diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c
index 5f38346..29ab09e 100644
--- a/src/code_8057824_1.c
+++ b/src/code_8057824_1.c
@@ -234,7 +234,7 @@ extern void sub_80862BC(struct DungeonEntity *);
extern void sub_8086448();
extern void SpriteLookAroundEffect();
extern u32 sub_80861F8(u32, struct DungeonEntity *, u32);
-extern void sub_8086A70(struct DungeonEntity *, u32, u32);
+extern void SetupBossFightHP(struct DungeonEntity *, u32, u32);
extern void sub_80858AC(u32 *, u32);
extern void sub_8097FA8(u32);
@@ -386,7 +386,7 @@ void ZapdosReFightDialogue(void)
sub_8052910(&gUnknown_81018EC);
sub_808775C(2);
sub_8052910(&gUnknown_8101918);
- sub_8086A70(uVar2,300,0xb);
+ SetupBossFightHP(uVar2,300,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -414,7 +414,7 @@ void ZapdosPostStoryPreFightDialogue(void)
sub_808775C(2);
sub_8052910(&gUnknown_8101A04);
sub_803E708(10,0x46);
- sub_8086A70(uVar3,300,0xb);
+ SetupBossFightHP(uVar3,300,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -592,7 +592,7 @@ void MoltresPreFightDialogue(void)
sub_8087DE8(0xb,6);
sub_8052910(&gUnknown_8102108);
sub_803E708(10,0x46);
- sub_8086A70(uVar3,400,0xb);
+ SetupBossFightHP(uVar3,400,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -635,7 +635,7 @@ void MoltresReFightDialogue(void)
sub_803E708(10,0x46);
sub_8052910(&gUnknown_81022F8);
sub_803E708(10,0x46);
- sub_8086A70(uVar3,400,0xb);
+ SetupBossFightHP(uVar3,400,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -673,7 +673,7 @@ void MoltresPostStoryPreFightDialogue(void)
sub_8087DE8(0xb,6);
sub_8052910(&gUnknown_8102454);
sub_803E708(10,0x46);
- sub_8086A70(uVar3,400,0xb);
+ SetupBossFightHP(uVar3,400,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1021,7 +1021,7 @@ void ArticunoPreFightDialogue(void)
sub_8052910(&gUnknown_81028B8);
sub_806CDD4(uVar3,0xf,0);
sub_803E708(0x10,0x46);
- sub_8086A70(uVar3,0x1c2,0xb);
+ SetupBossFightHP(uVar3,0x1c2,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1043,7 +1043,7 @@ void ArticunoReFightDialogue(void)
sub_8052910(&gUnknown_8102948);
sub_806CDD4(uVar2,0xf,0);
sub_803E708(0x28,0x46);
- sub_8086A70(uVar2,0x1c2,0xb);
+ SetupBossFightHP(uVar2,0x1c2,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1079,7 +1079,7 @@ void ArticunoPostStoryPreFightDialogue(void)
sub_8052910(&gUnknown_8102A74);
sub_806CDD4(uVar3,0xf,0);
sub_803E708(0x28,0x46);
- sub_8086A70(uVar3,0x1c2,0xb);
+ SetupBossFightHP(uVar3,0x1c2,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1342,7 +1342,7 @@ void GroudonPreFightDialogue(void)
sub_8086A54(uVar4);
sub_8085930(4);
sub_8086764();
- sub_8086A70(uVar4,500,0xb);
+ SetupBossFightHP(uVar4,500,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1374,7 +1374,7 @@ void GroudonReFightDialogue(void)
sub_8086A54(uVar2);
sub_8085930(4);
sub_8086764();
- sub_8086A70(uVar2,500,0xb);
+ SetupBossFightHP(uVar2,500,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1402,7 +1402,7 @@ void GroudonPostStoryPreFightDialogue(void)
sub_8088CA0();
sub_8052910(&gUnknown_810347C);
sub_803E708(10,0x46);
- sub_8086A70(uVar3,500,0xb);
+ SetupBossFightHP(uVar3,500,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1843,7 +1843,7 @@ void RayquazaPreFightDialogue(void)
sub_8052910(&gUnknown_81037D4);
RayquazaScreenFlash();
sub_8052910(&gUnknown_8103820);
- sub_8086A70(uVar3,600,0x20);
+ SetupBossFightHP(uVar3,600,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1867,7 +1867,7 @@ void RayquazaReFightDialogue(void)
sub_8052910(&gUnknown_81038A8);
RayquazaScreenFlash();
sub_8052910(&gUnknown_81038F8);
- sub_8086A70(uVar2,600,0x20);
+ SetupBossFightHP(uVar2,600,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -1893,7 +1893,7 @@ void RayquazaPostStoryPreFightDialogue(void)
sub_8052910(&gUnknown_8103AE4);
RayquazaScreenFlash();
sub_8052910(&gUnknown_8103B30);
- sub_8086A70(uVar3,600,0xb);
+ SetupBossFightHP(uVar3,600,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -1984,7 +1984,7 @@ void sub_8089788(struct DungeonEntity *param_1, u8 param_2, s32 param_3)
for(iVar3 = 0; iVar3 < 0x10; iVar3++)
{
iVar2 = gUnknown_203B418->unk1358C[iVar3];
- if ((sub_80450E0(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->unk70->unkA4 == param_2)) {
+ if ((sub_80450E0(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->unk70->clientFlags == param_2)) {
return;
}
}
@@ -2140,7 +2140,7 @@ void MewtwoPreFightDialogue(void)
MewtwoScreenFlash();
sub_8052910(&gUnknown_8104008);
sub_803E708(10,0x46);
- sub_8086A70(uVar2,900,0x20);
+ SetupBossFightHP(uVar2,900,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2166,7 +2166,7 @@ void MewtwoPreFightDialogue1(void)
sub_8052910(&gUnknown_81040CC);
MewtwoScreenFlash();
sub_8052910(&gUnknown_8104114);
- sub_8086A70(uVar3,900,0x20);
+ SetupBossFightHP(uVar3,900,0x20);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2279,7 +2279,7 @@ void EnteiPreFightDialogue(void)
EnteiScreenFlash();
sub_8052910(&gUnknown_81041F8);
sub_803E708(10,70);
- sub_8086A70(uVar2,600,0xb);
+ SetupBossFightHP(uVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2297,7 +2297,7 @@ void EnteiPreFightDialogue1(void)
EnteiScreenFlash();
sub_8052910(&gUnknown_81042B8);
sub_803E708(10,70);
- sub_8086A70(uVar2,600,0xb);
+ SetupBossFightHP(uVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2319,7 +2319,7 @@ void EnteiPreFightDialogue2(void)
EnteiScreenFlash();
sub_8052910(&gUnknown_81043C0);
sub_803E708(10,70);
- sub_8086A70(uVar3,600,0xb);
+ SetupBossFightHP(uVar3,600,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2432,7 +2432,7 @@ void RaikouPreFightDialogue(void)
RaikouScreenFlash();
sub_8052910(&gUnknown_81045B0);
sub_803E708(10,70);
- sub_8086A70(uVar2,0x28a,0xb);
+ SetupBossFightHP(uVar2,0x28a,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2452,7 +2452,7 @@ void RaikouPreFightDialogue1(void)
RaikouScreenFlash();
sub_8052910(&gUnknown_81046A0);
sub_803E708(10,70);
- sub_8086A70(uVar3,0x28a,0xb);
+ SetupBossFightHP(uVar3,0x28a,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
@@ -2475,7 +2475,7 @@ void RaikouPreFightDialogue2(void)
RaikouScreenFlash();
sub_8052910(&gUnknown_810476C);
sub_803E708(10,70);
- sub_8086A70(uVar3,0x28a,0xb);
+ SetupBossFightHP(uVar3,0x28a,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2590,7 +2590,7 @@ void SuicunePreFightDialogue(void)
SuicuneScreenFlash();
sub_8052910(&gUnknown_8104914);
sub_803E708(10,70);
- sub_8086A70(uVar2,0x28a,0xb);
+ SetupBossFightHP(uVar2,0x28a,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2607,7 +2607,7 @@ void SuicunePreFightDialogue1(void)
SuicuneScreenFlash();
sub_8052910(&gUnknown_8104998);
sub_803E708(10,70);
- sub_8086A70(uVar2,0x28a,0xb);
+ SetupBossFightHP(uVar2,0x28a,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2628,7 +2628,7 @@ void SuicunePreFightDialogue2(void)
SuicuneScreenFlash();
sub_8052910(&gUnknown_8104A9C);
sub_803E708(10,70);
- sub_8086A70(uVar3,0x28a,0xb);
+ SetupBossFightHP(uVar3,0x28a,0xb);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2771,7 +2771,7 @@ void HoOhPreFightDialogue(void)
HoOhScreenFlash();
sub_8052910(&gUnknown_8104CE0);
sub_803E708(10,70);
- sub_8086A70(uVar2,800,0x20);
+ SetupBossFightHP(uVar2,800,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2807,7 +2807,7 @@ void HoOhPreFightDialogue1(void)
HoOhScreenFlash();
sub_8052910(&gUnknown_8104E0C);
sub_803E708(10,70);
- sub_8086A70(uVar3,800,0x20);
+ SetupBossFightHP(uVar3,800,0x20);
sub_80858AC(&iVar2->posPixelX,0x10);
}
}
@@ -2943,7 +2943,7 @@ void LatiosPreFightDialogue(void)
LatiosScreenFlash();
sub_8052910(&gUnknown_8104F30);
sub_803E708(10,70);
- sub_8086A70(iVar2,600,0xb);
+ SetupBossFightHP(iVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -2962,7 +2962,7 @@ void LatiosReFightDialogue(void)
LatiosScreenFlash();
sub_8052910(&gUnknown_8104F30);
sub_803E708(10,70);
- sub_8086A70(uVar2,600,0xb);
+ SetupBossFightHP(uVar2,600,0xb);
sub_80858AC(&iVar1->posPixelX,0x10);
}
@@ -3362,26 +3362,26 @@ void sub_808B1CC(u8 r0)
void sub_808B2B0(struct DungeonEntity *r0)
{
- r0->unk70->unk46 = 4;
+ r0->unk70->facingDir = NORTH;
sub_806CE68(r0, 4);
}
void sub_808B2C4(struct DungeonEntity *r0)
{
- sub_8086A70(r0, 0xE1 << 1, 0xB);
+ SetupBossFightHP(r0, 0xE1 << 1, 0xB);
}
void sub_808B2D4(struct DungeonEntity *r0)
{
- sub_8086A70(r0, 0xE1 << 1, 0xB);
+ SetupBossFightHP(r0, 0xE1 << 1, 0xB);
}
void sub_808B2E4(struct DungeonEntity *r0)
{
- sub_8086A70(r0, 0xE1 << 1, 0xB);
+ SetupBossFightHP(r0, 0xE1 << 1, 0xB);
}
void sub_808B2F4(void)
@@ -3540,7 +3540,7 @@ void JirachiPreFightDialogue(void)
sub_803E708(10,70);
sub_8052910(&gUnknown_810550C);
sub_803E708(10,70);
- sub_8086A70(uVar2,0x15e,0x20);
+ SetupBossFightHP(uVar2,0x15e,0x20);
sub_80858AC(&iVar1->posPixelX,0x10);
}
diff --git a/src/code_80869E4.c b/src/code_80869E4.c
index 18261a0..9718195 100644
--- a/src/code_80869E4.c
+++ b/src/code_80869E4.c
@@ -478,7 +478,7 @@ void SpriteLookAroundEffect(struct DungeonEntity *r0)
s8 r4;
s8 r3;
- r4 = sub_8002984(r0->unk70->unk46, 4);
+ r4 = sub_8002984(r0->unk70->facingDir, 4);
sub_80869E4(r0, 4, 2, r4);
diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c
new file mode 100644
index 0000000..d740ccd
--- /dev/null
+++ b/src/code_8086A3C.c
@@ -0,0 +1,124 @@
+#include "global.h"
+#include "dungeon_entity.h"
+#include "gUnknown_203B418.h"
+#include "pokemon.h"
+
+extern struct unkStruct_203B418 *gUnknown_203B418;
+extern void sub_807191C(struct DungeonEntity *);
+extern struct DungeonEntity *sub_8085480(void);
+extern struct DungeonEntity *sub_8085680(u32);
+extern void sub_808EC94(u8 *param_1, u8 param_2);
+extern void sub_8097FF8(void);
+extern u8 sub_8044B28(void);
+extern u8 HasRecruitedMon(u32);
+extern u8 gUnknown_202E038[];
+extern void sub_8083E88(u32);
+extern void sub_8085374();
+extern void sub_80854D4();
+extern void sub_8085930(u32);
+extern void sub_80855E4(void *);
+extern void sub_8085860(s32 r0, u32 r1);
+extern void sub_8068FE0(struct DungeonEntity *, u32, u32);
+extern void sub_8097FA8(u32);
+
+void sub_8086A3C(struct DungeonEntity *param_1)
+{
+ param_1->unk70->unk15C = 1;
+ param_1->unk70->unk15E = 1;
+}
+
+void sub_8086A54(struct DungeonEntity *param_1)
+{
+ param_1->unk70->unk15C = 1;
+ param_1->unk70->unk15E = 0;
+}
+
+void SetupBossFightHP(struct DungeonEntity *param_1, s32 newHP, u16 param_3)
+{
+
+ // NOTE: needed two of these to match.. very dumb
+ struct subStruct_8048524 *iVar1;
+ struct subStruct_8048524 *iVar2;
+
+ iVar1 = param_1->unk70;
+ iVar2 = param_1->unk70;
+
+ iVar1->isBoss = TRUE;
+
+ // BUG: Source of the Reviver Seed Boss Glitch
+ //
+ // Video to demonstration:
+ // https://www.youtube.com/watch?v=rHu7EehrZ68
+ iVar1->bossHPBackup = iVar1->maxHP;
+ if (newHP != 0) {
+ iVar1->maxHP = newHP;
+ iVar1->HP = newHP;
+ }
+
+ gUnknown_203B418->unk66A = param_3;
+ sub_808EC94(iVar2->unk8C,iVar2->isBoss);
+ sub_807191C(param_1);
+}
+
+void sub_8086AC0(void)
+{
+ if(!sub_8044B28())
+ if(gUnknown_203B418->unk2 == 0)
+ sub_8097FF8();
+}
+
+u8 sub_8086AE4(s16 _index)
+{
+ s32 pokeIndex = _index;
+
+ if(gUnknown_203B418->unk65C == 0)
+ return 1;
+ else
+ return HasRecruitedMon(pokeIndex);
+}
+
+void sub_8086B14(void)
+{
+ struct DungeonEntity * iVar1;
+ struct DungeonEntity * iVar2;
+ struct DungeonEntity * uVar3;
+
+ iVar1 = sub_8085480();
+ iVar2 = sub_8085680(4);
+ uVar3 = sub_8085680(3);
+ sub_8083E88(0x72);
+ sub_8085374();
+ sub_80854D4();
+ sub_8085930(4);
+ sub_80855E4(sub_8086A3C);
+ sub_8086A3C(uVar3);
+ iVar2->unk70->unk15C = 1;
+ sub_8085860(iVar1->posWorldX,iVar1->posWorldY + -2);
+ CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_DIGLETT);
+ CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_SKARMORY);
+}
+
+void sub_8086B94(void)
+{
+ struct DungeonEntity * iVar1;
+ struct DungeonEntity * iVar2;
+ struct DungeonEntity * uVar3;
+
+ iVar1 = sub_8085480();
+ iVar2 = sub_8085680(4);
+ uVar3 = sub_8085680(3);
+
+ sub_8068FE0(uVar3,0x21c,0);
+ sub_8068FE0(iVar2,0x21c,0);
+ sub_80854D4();
+ sub_8085930(4);
+ sub_8085860(iVar1->posWorldX,iVar1->posWorldY);
+}
+
+void sub_8086BDC(char param_1, s32 param_2)
+{
+ if ((((param_2 * 0x1000000) - 0x1000000U) >> 0x18 < 2) && (param_1 == 3)) {
+ sub_8097FA8(1);
+ gUnknown_203B418->unk2 = 1;
+ }
+}
diff --git a/src/ds_menus.c b/src/ds_menus.c
index 7d7bc27..4e53311 100644
--- a/src/ds_menus.c
+++ b/src/ds_menus.c
@@ -2,17 +2,6 @@
#include "input.h"
#include "text.h"
-extern u8 *gUnknown_203B3E8;
-extern void nullsub_54();
-extern void sub_8039E18();
-
-void SetWonderMailMainMenuState(u8 r0)
-{
- *gUnknown_203B3E8 = r0;
- nullsub_54();
- sub_8039E18();
-}
-
u32 CreateDualSlotMenu(void)
{
return 1;
diff --git a/src/felicity_bank.c b/src/felicity_bank.c
index 727c957..6d1bd84 100644
--- a/src/felicity_bank.c
+++ b/src/felicity_bank.c
@@ -55,7 +55,7 @@ u32 CreateFelicityBank(s32 param_1)
return 1;
}
-u32 sub_80163A0(void)
+u32 FelicityBankCallback(void)
{
switch(gUnknown_203B204->currState) {
case 1:
diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c
new file mode 100644
index 0000000..4e26b46
--- /dev/null
+++ b/src/thank_you_wonder_mail.c
@@ -0,0 +1,1723 @@
+#include "global.h"
+#include "save.h"
+#include "pokemon.h"
+#include "file_system.h"
+#include "item.h"
+#include "sub_8095228.h"
+#include "wonder_mail.h"
+#include "memory.h"
+#include "menu.h"
+#include "input.h"
+#include "text.h"
+#include "team_inventory.h"
+
+extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
+extern struct TeamInventory *gTeamInventory_203B460;
+
+#define THANK_YOU_MAIL_MAIN_MENU 0
+#define ANYTHING_ELSE_THANK_YOU_MAIN_MENU 1
+#define EXIT_THANK_YOU_MAIL 3
+#define NO_THANK_YOU_MAIL 4
+#define SELECT_THANK_YOU_MAIL_COMMS 6
+#define ITEM_EXISTS_ON_THANK_YOU_MAIL 7
+#define PROMPT_RESEND_WITH_ATTACHED_ITEM 8
+#define PROMPT_REWARD_ITEM_TO_SEND 9
+#define THANK_YOU_MAIL_STORAGE_EMPTY 0xA
+#define PROMPT_ITEM_TO_SEND 0xB
+#define CONFIRM_ITEM_TO_SEND 0xC
+#define THANK_YOU_MAIL_COMMS_CLEANUP 0xD
+#define PROMPT_THANK_YOU_TO_SEND 0xF
+#define SHOW_ITEM_TO_SEND_INFO 0x15
+#define COMMUNICATING_THANK_YOU_MAIL 0x16
+
+// TODO: verify it is 0x19 and not 0x1A
+#define DISPLAY_THANK_YOU_PASSWORD 0x19
+
+#define PROMPT_CONNECT_GAME_LINK 0x1D
+#define THANK_YOU_MAIL_COMMS_FINISHED 0x1E
+#define PRINT_THANK_YOU_ERROR 0x1F
+#define THANK_YOU_PASSWORD_SUCCESS 0x21
+#define PROMPT_THANK_YOU_PASSWORD 0x26
+#define PROCESS_THANK_YOU_PASSWORD 0x27
+#define THANK_YOU_PASSWORD_WRONG 0x28
+
+const struct ItemSlot gUnknown_80DED44 =
+{
+ 1, 0, 0
+};
+
+extern char gUnknown_202E5D8[0x50];
+extern char gAvailablePokemonNames[0x50];
+
+
+const struct UnkTextStruct2 gUnknown_80DED48 =
+{
+ 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00,
+ 0x15, 0x00, 0x04, 0x00,
+ 0x06, 0x05,
+ 0x05, 0x00,
+ NULL
+};
+
+const struct UnkTextStruct2 gUnknown_80DED60 =
+{
+ 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00,
+ 0x16, 0x00, 0x07, 0x00,
+ 0x06, 0x05,
+ 0x05, 0x00,
+ NULL
+};
+
+extern const u8 Confirm_80DED98[];
+extern const u8 Info_80DED90[];
+extern const u8 SendThankYou_Text[];
+extern const u8 GetThankYou_Text[];
+extern const u8 Cancel_80DEDD8[];
+extern const u8 GameLinkCable_Text[];
+extern const u8 Password_Text[];
+extern const u8 Yes_80DEE5C[];
+extern const u8 No_80DEE78[];
+extern const u8 SendItem_Text[];
+extern const u8 DontSendItem_Text[];
+extern const u8 SendWOItem_Text[];
+
+const struct MenuItem gUnknown_80DED78[3] =
+{
+ {Confirm_80DED98, 0xB},
+ {Info_80DED90, 0xC},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const u8 Info_80DED90[] = "Info";
+ALIGNED(4) const u8 Confirm_80DED98[] = "Confirm";
+
+// Unused
+const struct UnkTextStruct2 gUnknown_80DEDA0 =
+{
+ 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x00,
+ NULL
+};
+
+
+const struct MenuItem gThankYouMailMainMenuItems[4] =
+{
+ {SendThankYou_Text, 0x1},
+ {GetThankYou_Text, 0x2},
+ {Cancel_80DEDD8, 0x0},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const u8 Cancel_80DEDD8[] = "Cancel";
+ALIGNED(4) const u8 GetThankYou_Text[] = "Get Thank-You Mail";
+ALIGNED(4) const u8 SendThankYou_Text[] = "Send Thank-You Mail";
+
+const struct MenuItem gUnknown_80DEE08[4] =
+{
+ {GameLinkCable_Text, WONDER_MAIL_GAME_LINK},
+ {Password_Text, WONDER_MAIL_PASSWORD},
+ {Cancel_80DEDD8, 0x0},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const u8 Password_Text[] = "Password";
+ALIGNED(4) const u8 GameLinkCable_Text[] = "Game Link cable";
+
+const struct MenuItem gUnknown_80DEE44[3] =
+{
+ {Yes_80DEE5C, 0x7},
+ {Cancel_80DEDD8, 0x0},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const u8 Yes_80DEE5C[] = "Yes";
+
+
+const struct MenuItem gUnknown_80DEE60[3] =
+{
+ {Yes_80DEE5C, 0x7},
+ {No_80DEE78, 0x8},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const u8 No_80DEE78[] = "No";
+
+const struct MenuItem gUnknown_80DEE7C[4] =
+{
+ {SendItem_Text, 0x9},
+ {DontSendItem_Text, 0xA},
+ {Cancel_80DEDD8, 0x0},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const u8 DontSendItem_Text[] = "Don~27t Send Item";
+ALIGNED(4) const u8 SendItem_Text[] = "Send Item";
+
+const struct MenuItem gUnknown_80DEEBC[3] =
+{
+ {SendWOItem_Text, 0xA},
+ {Cancel_80DEDD8, 0x0},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const u8 SendWOItem_Text[] = "Send w/o Item";
+
+const struct MenuItem gUnknown_80DEEE4[4] =
+{
+ {Yes_80DEE5C, 0x7},
+ {No_80DEE78, 0x8},
+ {Cancel_80DEDD8, 0x0},
+ {NULL, 0x0},
+};
+
+ALIGNED(4) const char gUnknown_80DEF04[] = " ...Oh?\n"
+ "Something~27s gone wrong.";
+
+ALIGNED(4) const char gUnknown_80DEF28[] = " ...Oh? The number of linked\n"
+ "GBA systems is incorrect.\n"
+ "Please try again from the start.";
+
+ALIGNED(4) const u8 gUnknown_80DEF80[]=
+ " ...Oh? It looks like your\n"
+ "friend chose a different mode.\n"
+ "Please try again from the start.";
+
+ALIGNED(4) const u8 gUnknown_80DEFDC[]=
+ " ...Oh? It looks like your\n"
+ "storage space is full. Please clear some\n"
+ "space and try again from the start.";
+
+ALIGNED(4) const u8 gUnknown_80DF044[]=
+ " ...Oh?\n"
+ "I think you~27ve received this mail before.\n"
+ "You can~27t get the same mail twice.";
+
+ALIGNED(4) const u8 gUnknown_80DF0A0[]=
+ " ...Oh?\n"
+ "I don~27t think you~27re eligible to receive\n"
+ "this mail.";
+
+ALIGNED(4) const u8 gUnknown_80DF0E0[]=
+ " ...Oh?\n"
+ "There is no room to receive new mail.\n"
+ "Please delete some mail and try again.";
+
+ALIGNED(4) const u8 gUnknown_80DF138[]=
+ " ...Oh? Your friend didn~27t\n"
+ "follow through on their side.\n"
+ "Please try again from the start.";
+
+ALIGNED(4) const u8 gUnknown_80DF194[]=
+ " Your #CGThank-You Mail#R\n"
+ "has been sent.";
+
+ALIGNED(4) const u8 gUnknown_80DF1C0[]=
+ " ...Oh?\n"
+ "This password appears to be wrong.\n"
+ "Would you like to try again?";
+
+ALIGNED(4) const u8 gUnknown_80DF208[]=
+ " ...Oh? This password doesn~27t\n"
+ "appear to be for a #CGThank-You Mail#R.";
+
+ALIGNED(4) const u8 gUnknown_80DF250[]=
+ ": This is the counter for\n"
+ "#CGThank-You Mail#R.#P"
+ ": Oh~2c hi~2c #CN%s#R.\n"
+ "I~27ve been waiting for you. You wanted me\n"
+ "to process a #CGThank-You Mail#R?#P"
+ ": Let me get on it right away.";
+
+ALIGNED(4) const u8 gUnknown_80DF304[]=
+ " Is it OK to send this\n"
+ "#CGThank-You Mail#R?";
+
+ALIGNED(4) const u8 gUnknown_80DF330[]=
+ " Please choose the\n"
+ "#CGThank-You Mail#R that you want to\n"
+ "send to your friend.";
+
+ALIGNED(4) const u8 gUnknown_80DF380[]=
+ " OK. Please enter the\n"
+ "#CGThank-You Mail password#R.";
+
+ALIGNED(4) const u8 gUnknown_80DF3B4[]=
+ " Please give this password\n"
+ "to the friend that rescued your team.#P"
+ " I also must save your\n"
+ "adventure.";
+
+ALIGNED(4) const u8 gUnknown_80DF418[]=
+ " OK~2c here is your\n"
+ "#CGThank-You Mail password#R.";
+
+ALIGNED(4) const u8 gUnknown_80DF44C[]=
+ " I need to save your\n"
+ "adventure.";
+
+ALIGNED(4) const u8 gUnknown_80DF46C[]=
+ " There we go.\n"
+ "I~27m all done.#P"
+ " Doesn~27t it feel great to\n"
+ "be appreciated for doing something good?\n"
+ "Please keep up your rescue work!";
+
+ALIGNED(4) const u8 gUnknown_80DF4F4[]=
+ " A #CGThank-You Mail#R has\n"
+ "arrived from your friend for your rescue\n"
+ "mission.";
+
+ALIGNED(4) const u8 gUnknown_80DF544[]= _(
+ "#+Communicating...\n"
+ "#+Please wait with the power on.\n"
+ "#+To cancel~2c press {B_BUTTON}.");
+
+ALIGNED(4) const u8 gUnknown_80DF594[]=
+ " There. I~27ve sent your\n"
+ "#CGThank-You Mail#R.\n"
+ "I need to save your adventure.";
+
+ALIGNED(4) const u8 gUnknown_80DF5E4[]=
+ " Please connect the GBA\n"
+ "systems with a #CGGame Link cable#R.\n"
+ "Is your friend also ready?";
+
+ALIGNED(4) const u8 gUnknown_80DF63C[]=
+ " There~2c all done.\n"
+ "#CN%s#R~2c I hope your friend\n"
+ "appreciates your sense of gratitude.";
+
+ALIGNED(4) const u8 gUnknown_80DF694[]=
+ " The item you~27ve chosen\n"
+ "here can~27t be exchanged later.\n"
+ "Are you certain this item is OK?";
+
+ALIGNED(4) const u8 gUnknown_80DF6F0[]=
+ " I~27ve saved your adventure. ";
+
+ALIGNED(4) const u8 gUnknown_80DF710[]=
+ " OK~2c please choose\n"
+ "the item to be sent.";
+
+ALIGNED(4) const u8 gUnknown_80DF73C[]=
+ " ...Oh?\n"
+ "Your storage space is empty.\n"
+ "What would you like to do?";
+
+ALIGNED(4) const u8 gUnknown_80DF77C[]=
+ " Would you like to choose\n"
+ "a #CGreward item#R from storage and\n"
+ "send it with your mail?";
+
+ALIGNED(4) const u8 gUnknown_80DF7D4[]=
+ " ...Oh?\n"
+ "You~27ve already attached a #CGreward item#R\n"
+ "to this mail.#P"
+ " I~27m sorry~2c but once an item\n"
+ "has been attached to mail~2c it can~27t be\n"
+ "exchanged.";
+
+ALIGNED(4) const u8 gUnknown_80DF870[]=
+ " Would you like to send it\n"
+ "again with the item you chose before?";
+
+ALIGNED(4) const u8 gUnknown_80DF8B4[]=
+ " ...Oh?\n"
+ "You don~27t seem to have a #CGThank-You Mail#R.";
+
+ALIGNED(4) const u8 gUnknown_80DF8EC[]=
+ " Hello.\n"
+ "I handle #CGThank-You Mail#R.\n"
+ "How may I serve you?";
+
+ALIGNED(4) const u8 gUnknown_80DF928[]=
+ " May I help you with\n"
+ "anything else?";
+
+ALIGNED(4) const u8 gUnknown_80DF94C[] =
+ " Please come see me\n"
+ "anytime.";
+
+ALIGNED(4) const u8 gUnknown_80DF96C[] =
+ " How would you like to send\n"
+ "your #CGThank-You Mail#R?";
+
+ALIGNED(4) const u8 gUnknown_80DF9A4[]=
+ " How would you like to\n"
+ "receive your friend~27s #CGThank-You Mail#R?";
+
+ALIGNED(4) const u8 thank_you_fill[] = "pksdir0";
+
+
+extern s32 sub_80953D4(u32);
+extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
+extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32);
+extern u8 sub_8012FD8(u32 *r0);
+extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32);
+extern void sub_8030810(u32);
+extern u32 sub_8095324(u32);
+extern u32 sub_8031DCC(void);
+extern void sub_8031E00(void);
+extern void sub_8095240(u8);
+extern u32 sub_802F298();
+extern u8 sub_801CF14(u32);
+extern u32 sub_8030768(u32);
+extern s8 sub_80307EC(void);
+extern void sub_8030D40(u8, u32);
+extern u32 sub_8030DA0();
+extern void sub_8013114(u32 *r0, s32 *r1);
+extern void HandleThankYouMailPelipperMainMenu();
+extern void sub_802AAC8();
+extern void ReturnToThankYouMailMainMenu();
+extern void sub_802AB7C();
+extern void HandleMailCommunicationMenu();
+extern void sub_802A98C();
+extern void sub_802A9A8();
+extern void sub_802A910();
+extern void sub_802A8BC();
+extern void sub_802A8A0();
+extern void HandleConfirmItemtoSendMenu();
+extern void ExitThankYouMailMenu1();
+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 DisplayThankYouMailCommsOutcome();
+extern void ReturnToThankYouMainFromError();
+extern void ExitThankYouMailMenu2();
+extern void sub_802AB60();
+extern void sub_802AB98();
+extern void sub_802A718();
+extern void sub_802A6B4();
+extern void AdvanceToThankYouPasswordProcessing();
+extern void HandleThankYouMailPasswordMenu();
+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();
+extern u32 sub_80144A4(s32 *r0);
+extern void SetThankYouMailMenuState(u32);
+extern struct PokemonStruct *sub_808D33C(void);
+extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...);
+extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32);
+extern void sub_80922B4(u8 *, u8 *, u32);
+extern void sub_802F204(u8 *, u32);
+extern void sub_80151C0(u32, u8 *);
+extern void xxx_call_start_bg_music(void);
+extern void sub_803092C(void);
+extern void sub_801CCD8(void);
+extern void sub_8011830(void);
+extern void nullsub_23(u32);
+extern s32 sub_8037B28(u32);
+extern u32 sub_8030894(void);
+extern u32 sub_801D008(void);
+extern void sub_80306A8(u32, u32, u32, u32);
+extern s32 sub_8037D64(u32, void *, void *);
+extern s32 sub_80381F4(u32, void *, void *);
+extern void sub_801C8C4(u32, u32, s32 * , u32);
+extern u8 sub_809539C(u32, u32);
+extern u8 sub_800D588(void);
+extern u32 sub_803C200(u8 *, u32);
+extern void sub_8031D70(u8, u32);
+
+extern void sub_803092C(void);
+extern void sub_8035CF4(u32 *, u32, u32);
+extern u32 sub_801CA08(u32);
+extern void sub_801CBB8(void);
+extern void sub_801B3C0(struct ItemSlot *);
+extern u8 sub_801CB24(void);
+extern void sub_801B450(void);
+extern u32 sub_801B410(void);
+extern void sub_801CB5C(u32);
+extern void sub_801CCD8(void);
+extern void sub_8011C28(u32);
+extern u32 sub_80154F0(void);
+extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
+extern u8 sub_809539C(u32, u32);
+
+
+u32 CreateThankYouMailPelipper(void)
+{
+ char *monName;
+ struct OpenedFile *faceFile;
+ s32 uVar2;
+ int counter;
+ struct unkStruct_8095228 *temp;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ gUnknown_203B2C4 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C4), 8);
+ MemoryFill8((u8 *)gUnknown_203B2C4, 0, sizeof(struct WonderMailStruct_203B2C4));
+
+ CopyYellowSpeciesNametoBuffer(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 < PASSWORD_BUFFER_SIZE; counter++){
+ gUnknown_203B2C4->passwordBuffer[counter] = 0;
+ }
+
+ gUnknown_203B2C4->wonderMailMethod = WONDER_MAIL_GAME_LINK;
+ gUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_SEND;
+
+ 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;
+ SetThankYouMailMenuState(5);
+ }
+ else {
+ gUnknown_203B2C4->unk41C = gUnknown_80DED44;
+ gUnknown_203B2C4->unk218 = -1;
+ SetThankYouMailMenuState(THANK_YOU_MAIL_MAIN_MENU);
+ }
+ gUnknown_203B2C4->unk4 = 0x2b;
+ return 1;
+}
+
+u32 ThankYouMailPelipperCallback(void)
+{
+
+ switch(gUnknown_203B2C4->state) {
+ case 5:
+ sub_802AB7C();
+ break;
+ case THANK_YOU_MAIL_COMMS_FINISHED:
+ DisplayThankYouMailCommsOutcome();
+ break;
+ case PRINT_THANK_YOU_ERROR:
+ ReturnToThankYouMainFromError();
+ break;
+ case 0xe:
+ sub_802A090();
+ break;
+ case PROMPT_THANK_YOU_TO_SEND:
+ 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 SHOW_ITEM_TO_SEND_INFO:
+ sub_802A33C();
+ break;
+ case 0x1c:
+ sub_802A458();
+ break;
+ case 0x1b:
+ sub_802A4AC();
+ break;
+ case DISPLAY_THANK_YOU_PASSWORD:
+ sub_802A4D4();
+ break;
+ case 0x1a:
+ sub_802A050();
+ break;
+ case THANK_YOU_PASSWORD_WRONG:
+ sub_802A9FC();
+ break;
+ case PROMPT_THANK_YOU_PASSWORD:
+ AdvanceToThankYouPasswordProcessing();
+ break;
+ case PROCESS_THANK_YOU_PASSWORD:
+ HandleThankYouMailPasswordMenu();
+ break;
+ case 0x25:
+ sub_802A6B4();
+ break;
+ case 0x24:
+ sub_802A718();
+ break;
+ case THANK_YOU_PASSWORD_SUCCESS:
+ sub_802AB60();
+ break;
+ case 0x22:
+ sub_802AB98();
+ break;
+ case COMMUNICATING_THANK_YOU_MAIL:
+ sub_802A740();
+ break;
+ case 0x18:
+ sub_802A68C();
+ break;
+ case 0x17:
+ sub_802A6F0();
+ break;
+ case PROMPT_CONNECT_GAME_LINK:
+ sub_802A75C();
+ break;
+ case 0x20:
+ ExitThankYouMailMenu2();
+ break;
+ case THANK_YOU_MAIL_COMMS_CLEANUP:
+ ExitThankYouMailMenu1();
+ break;
+ case CONFIRM_ITEM_TO_SEND:
+ HandleConfirmItemtoSendMenu();
+ break;
+ case 0x29:
+ sub_802A828();
+ break;
+ case 0x2a:
+ sub_802A850();
+ break;
+ case PROMPT_ITEM_TO_SEND:
+ sub_802A8A0();
+ break;
+ case THANK_YOU_MAIL_STORAGE_EMPTY:
+ sub_802A8BC();
+ break;
+ case PROMPT_REWARD_ITEM_TO_SEND:
+ sub_802A910();
+ break;
+ case ITEM_EXISTS_ON_THANK_YOU_MAIL:
+ sub_802A98C();
+ break;
+ case PROMPT_RESEND_WITH_ATTACHED_ITEM:
+ sub_802A9A8();
+ break;
+ case SELECT_THANK_YOU_MAIL_COMMS:
+ HandleMailCommunicationMenu();
+ break;
+ case NO_THANK_YOU_MAIL:
+ ReturnToThankYouMailMainMenu();
+ break;
+ case THANK_YOU_MAIL_MAIN_MENU:
+ case ANYTHING_ELSE_THANK_YOU_MAIN_MENU:
+ HandleThankYouMailPelipperMainMenu();
+ break;
+ case 2:
+ sub_802AAC8();
+ break;
+ case EXIT_THANK_YOU_MAIL:
+ return 3;
+ }
+ return 0;
+}
+
+void CleanThankYouMailPelipper(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 ReturnToThankYouMainFromError(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ }
+}
+
+void PrintThankYouMailLinkError(u32 param_1)
+{
+ switch(param_1) {
+ case 3:
+ sub_80141B4(gUnknown_80DEF28, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 4:
+ sub_80141B4(gUnknown_80DEF80, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 6:
+ sub_80141B4(gUnknown_80DEFDC, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 7:
+ sub_80141B4(gUnknown_80DF044, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 9:
+ sub_80141B4(gUnknown_80DF0A0, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 11:
+ sub_80141B4(gUnknown_80DF0A0, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 13:
+ sub_80141B4(gUnknown_80DF0E0, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 1:
+ case 2:
+ case 5:
+ case 14:
+ sub_80141B4(gUnknown_80DEF04, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 15:
+ sub_80141B4(gUnknown_80DF138, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 0:
+ default:
+ break;
+ }
+}
+
+void DisplayThankYouMailCommsOutcome(void)
+{
+ s32 auStack20;
+
+ if (sub_80144A4(&auStack20) != 0) {
+ return;
+ }
+ MemoryFill8((u8 *)&gUnknown_203B2C4->unk41C, 0, sizeof(struct ItemSlot));
+ gUnknown_203B2C4->unk41C.itemIndex = 0;
+ gUnknown_203B2C4->unk41C.numItems = 1;
+ gUnknown_203B2C4->unk41C.unk0 = 0;
+ if (gUnknown_203B2C4->linkError == 0) {
+ switch(gUnknown_203B2C4->unk40)
+ {
+ case 6:
+ switch(gUnknown_203B2C4->wonderMailMethod)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case WONDER_MAIL_PASSWORD:
+ case 6:
+ // "Thank-You Mail has been sent"
+ sub_80141B4(gUnknown_80DF194, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 4:
+ default:
+ break;
+ }
+ SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_CLEANUP);
+ break;
+ case 7:
+ SetThankYouMailMenuState(THANK_YOU_PASSWORD_SUCCESS);
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ PrintThankYouMailLinkError(gUnknown_203B2C4->linkError);
+ SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR);
+ }
+}
+
+void sub_802A050(void)
+{
+ switch(sub_8031DCC())
+ {
+
+ case 3:
+ case 2:
+ sub_8031E10();
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1);
+ SetThankYouMailMenuState(0x1B);
+ break;
+ case 1:
+ sub_8031E00();
+ break;
+ default:
+ return;
+ }
+}
+
+void sub_802A090(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 7:
+ SetThankYouMailMenuState(SELECT_THANK_YOU_MAIL_COMMS);
+ break;
+ case 8:
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void sub_802A0C8(void)
+{
+ switch(sub_8030768(1))
+ {
+ case 2:
+ sub_803084C();
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ case 3:
+ gUnknown_203B2C4->unk218 = sub_80307EC();
+ SetThankYouMailMenuState(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);
+ SetThankYouMailMenuState(0x12);
+ break;
+ }
+}
+
+void sub_802A158(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(0x10);
+ }
+}
+
+void sub_802A174(void)
+{
+ s32 menuAction;
+
+ menuAction = -1;
+ sub_8030768(0);
+ if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
+ sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction);
+ }
+
+ switch(menuAction)
+ {
+ case 0xB:
+ sub_803084C();
+ SetThankYouMailMenuState(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);
+ SetThankYouMailMenuState(0x12);
+ break;
+ case 0:
+ case 0xD:
+ sub_8035CC0(gUnknown_203B2C4->unk35C,2);
+ sub_8030810(1);
+ SetThankYouMailMenuState(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);
+ SetThankYouMailMenuState(0x11);
+ }
+ else {
+ SetThankYouMailMenuState(gUnknown_203B2C4->unk4);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void sub_802A28C(void)
+{
+
+ gUnknown_203B2C4->unk41C.itemIndex = 0;
+ gUnknown_203B2C4->unk41C.numItems = 1;
+ gUnknown_203B2C4->unk41C.unk0 = 0;
+
+ switch(sub_801CA08(1))
+ {
+ case 2:
+ sub_801CBB8();
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ case 3:
+ gUnknown_203B2C4->unk41C.itemIndex = sub_801CB24();
+ SetThankYouMailMenuState(0x14);
+ break;
+ case 4:
+ gUnknown_203B2C4->unk4 = 0x13;
+ gUnknown_203B2C4->unk41C.itemIndex = sub_801CB24();
+ sub_8006518(gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(&gUnknown_203B2C4->unk41C);
+ SetThankYouMailMenuState(SHOW_ITEM_TO_SEND_INFO);
+ 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);
+ SetThankYouMailMenuState(0x14);
+ }
+ else {
+ SetThankYouMailMenuState(gUnknown_203B2C4->unk4);
+ }
+ break;
+ case 1:
+ default:
+ break;
+ }
+}
+
+void sub_802A39C(void)
+{
+ s32 menuAction;
+
+ menuAction = -1;
+ sub_801CA08(0);
+ if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
+ sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction);
+ }
+
+ switch(menuAction)
+ {
+ case 0xB:
+ sub_801CBB8();
+ SetThankYouMailMenuState(CONFIRM_ITEM_TO_SEND);
+ break;
+ case 0xC:
+ gUnknown_203B2C4->unk4 = 0x2b;
+ sub_8006518(gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(&gUnknown_203B2C4->unk41C);
+ SetThankYouMailMenuState(SHOW_ITEM_TO_SEND_INFO);
+ break;
+ case 0:
+ case 0xD:
+ sub_8035CC0(gUnknown_203B2C4->unk35C, 3);
+ sub_801CCD8();
+ SetThankYouMailMenuState(0x13);
+ default:
+ break;
+ }
+}
+
+void sub_802A458(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_CLEANUP);
+ }
+}
+
+void ExitThankYouMailMenu1(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL);
+ }
+}
+
+void ExitThankYouMailMenu2(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL);
+ }
+}
+
+void sub_802A4AC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(0x18);
+ sub_8011C28(1);
+ PrepareSavePakWrite(SPECIES_NONE);
+ }
+}
+
+void sub_802A4D4(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(0x1A);
+ }
+}
+
+void AdvanceToThankYouPasswordProcessing(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(PROCESS_THANK_YOU_PASSWORD);
+ }
+}
+
+void HandleThankYouMailPasswordMenu(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->passwordBuffer,&temp.unk0))
+ {
+ case 0x11:
+ // Wrong password
+ sub_8014248(gUnknown_80DF1C0, 0, 7, gUnknown_80DEE44, 0, 4, 0, &gUnknown_203B2C4->faceFile, 0xc);
+ SetThankYouMailMenuState(THANK_YOU_PASSWORD_WRONG);
+ break;
+ case 0x14:
+ // Incorrect password
+ sub_80141B4(gUnknown_80DF208, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR);
+ break;
+ case 0xB:
+ // Not eligible to receive
+ sub_80141B4(gUnknown_80DF0A0, 0, &gUnknown_203B2C4->faceFile, 0x10d);
+ SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR);
+ break;
+ case 0x18:
+ // I think this is when password works successfully
+ uVar1 = sub_809539C(4,temp.unk10);
+ puVar5 = sub_8095228(uVar1);
+ *puVar5 = temp;
+ puVar5->unk0 = 6;
+ gUnknown_203B2C4->unk430 = temp.unk10;
+ SetThankYouMailMenuState(THANK_YOU_PASSWORD_SUCCESS);
+ break;
+ default:
+ case 7:
+ break;
+ }
+ sub_80155F0();
+ break;
+ case 2:
+ sub_80155F0();
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1);
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+}
+
+void sub_802A68C(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ if (!WriteSavePak()) {
+ FinishWriteSavePak();
+ SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_CLEANUP);
+ }
+ }
+}
+
+void sub_802A6B4(void)
+{
+ int saveStatus;
+ u32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ if (!WriteSavePak()) {
+ saveStatus = GetSavePakStatus();
+ FinishWriteSavePak();
+ if (saveStatus == SAVE_COMPLETED) {
+ SetThankYouMailMenuState(0x20);
+ }
+ else {
+ SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL);
+ }
+ }
+ }
+}
+
+void sub_802A6F0(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ SetThankYouMailMenuState(0x18);
+ sub_8011C28(1);
+ PrepareSavePakWrite(SPECIES_NONE);
+ }
+}
+
+void sub_802A718(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ SetThankYouMailMenuState(0x25);
+ sub_8011C28(1);
+ PrepareSavePakWrite(SPECIES_NONE);
+ }
+}
+
+void sub_802A740(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_FINISHED);
+ }
+}
+
+void sub_802A75C(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 7:
+ // NOTE: if statement is needed to match
+ if(gUnknown_203B2C4->wonderMailMode)
+ SetThankYouMailMenuState(COMMUNICATING_THANK_YOU_MAIL);
+ else
+ SetThankYouMailMenuState(COMMUNICATING_THANK_YOU_MAIL);
+ break;
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void HandleConfirmItemtoSendMenu(void)
+{
+ s32 temp;
+ struct unkStruct_8095228 *return_var;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 7:
+ return_var = sub_8095228(gUnknown_203B2C4->unk218);
+ if(gUnknown_203B2C4->unk41C.itemIndex != 0)
+ {
+ return_var->unk20 = gUnknown_203B2C4->unk41C;
+ }
+ gTeamInventory_203B460->teamStorage[gUnknown_203B2C4->unk41C.itemIndex]--;
+ SetThankYouMailMenuState(0x29);
+ break;
+ case 8:
+ SetThankYouMailMenuState(PROMPT_ITEM_TO_SEND);
+ break;
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void sub_802A828(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(0x2A);
+ sub_8011C28(1);
+ PrepareSavePakWrite(SPECIES_NONE);
+ }
+}
+
+void sub_802A850(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ if(!WriteSavePak())
+ {
+ FinishWriteSavePak();
+ switch(gUnknown_203B2C4->wonderMailMethod)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case 4:
+ SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK);
+ break;
+ case WONDER_MAIL_PASSWORD:
+ SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD);
+ break;
+ }
+ }
+ }
+}
+
+void sub_802A8A0(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ SetThankYouMailMenuState(0x13);
+ }
+}
+
+void sub_802A8BC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 0xA:
+ switch(gUnknown_203B2C4->wonderMailMethod)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case 4:
+ SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK);
+ break;
+ case WONDER_MAIL_PASSWORD:
+ SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD);
+ break;
+ }
+ break;
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void sub_802A910(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 9:
+ if(sub_801CF14(0) != 0)
+ {
+ SetThankYouMailMenuState(THANK_YOU_MAIL_STORAGE_EMPTY);
+ }
+ else
+ {
+ SetThankYouMailMenuState(PROMPT_ITEM_TO_SEND);
+ }
+ break;
+ case 0xA:
+ switch(gUnknown_203B2C4->wonderMailMethod)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case 4:
+ SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK);
+ break;
+ case WONDER_MAIL_PASSWORD:
+ SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD);
+ break;
+ }
+ break;
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void sub_802A98C(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ SetThankYouMailMenuState(PROMPT_RESEND_WITH_ATTACHED_ITEM);
+ }
+}
+
+void sub_802A9A8(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 0x7:
+ switch(gUnknown_203B2C4->wonderMailMethod)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case 4:
+ SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK);
+ break;
+ case WONDER_MAIL_PASSWORD:
+ SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD);
+ break;
+ }
+ break;
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void sub_802A9FC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 0x7:
+ SetThankYouMailMenuState(PROMPT_THANK_YOU_PASSWORD);
+ break;
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void HandleMailCommunicationMenu(void)
+{
+ s32 temp;
+ struct unkStruct_8095228 *return_var;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case 4:
+ case WONDER_MAIL_PASSWORD:
+ gUnknown_203B2C4->wonderMailMethod = temp;
+ switch(gUnknown_203B2C4->wonderMailMode)
+ {
+ case WONDER_MAIL_MODE_SEND:
+ return_var = sub_8095228(sub_80953D4(5));
+ if(return_var->unk20.itemIndex != 0)
+ {
+ SetThankYouMailMenuState(ITEM_EXISTS_ON_THANK_YOU_MAIL);
+ }
+ else
+ {
+ SetThankYouMailMenuState(PROMPT_REWARD_ITEM_TO_SEND);
+ }
+ break;
+ default:
+ if(gUnknown_203B2C4->wonderMailMethod == WONDER_MAIL_PASSWORD)
+ {
+ SetThankYouMailMenuState(PROMPT_THANK_YOU_PASSWORD);
+ }
+ else
+ {
+ SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK);
+ }
+ break;
+ }
+ break;
+ case 0:
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ break;
+ }
+ }
+}
+
+void ReturnToThankYouMailMainMenu(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
+ }
+}
+
+void sub_802AAC8(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL);
+ }
+}
+
+void HandleThankYouMailPelipperMainMenu(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 1:
+ gUnknown_203B2C4->unk40 = 6;
+ gUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_SEND;
+ if(sub_8095324(5) == 0)
+ {
+ SetThankYouMailMenuState(NO_THANK_YOU_MAIL);
+ }
+ else
+ {
+ SetThankYouMailMenuState(PROMPT_THANK_YOU_TO_SEND);
+ }
+ break;
+ case 2:
+ gUnknown_203B2C4->unk40 = 7;
+ gUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_RECEIVE;
+ SetThankYouMailMenuState(SELECT_THANK_YOU_MAIL_COMMS);
+ break;
+ case 0:
+ SetThankYouMailMenuState(2);
+ break;
+ }
+ }
+}
+
+void sub_802AB60(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(0x22);
+ }
+}
+
+void sub_802AB7C(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetThankYouMailMenuState(0x22);
+ }
+}
+
+
+void sub_802AB98(void)
+{
+ const char *monName;
+ switch(sub_802F298())
+ {
+ case 3:
+ sub_802F2C0();
+ CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER);
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gAvailablePokemonNames, monName);
+ sub_8095240(sub_809539C(6, gUnknown_203B2C4->unk430));
+ SetThankYouMailMenuState(0x24);
+ break;
+ default:
+ break;
+ }
+}
+
+void nullsub_131(void)
+{
+}
+
+void UpdateThankYouMailText(void)
+{
+ char cVar1;
+ char *monName;
+ u8 auStack180 [80];
+ u8 auStack100 [80];
+ u8 uVar2;
+ struct PokemonStruct *pokeStruct;
+ struct PokemonStruct *pokeStruct2;
+ s32 linkStatus;
+ struct unkStruct_8095228 *puVar4;
+
+ switch(gUnknown_203B2C4->state) {
+ case 5:
+ pokeStruct = sub_808D33C();
+ sub_80922B4(auStack180,pokeStruct->name, POKEMON_NAME_LENGTH);
+ ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF250,auStack180);
+ sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case 0xe:
+ // Is it OK to send this Thank-You Mail?
+ sub_8014248(gUnknown_80DF304,0,7,gUnknown_80DEE60,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case PROMPT_THANK_YOU_TO_SEND:
+ // Please choose the Thank-You Mail that you want to send to your friend
+ sub_80141B4(gUnknown_80DF330,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case 0x10:
+ if (sub_8030894() != 0)
+ break;
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_80306A8(5,0,0,6);
+ break;
+ case 0x11:
+ sub_8006518(gUnknown_203B2C4->unk35C);
+ SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED60,gUnknown_80DED78,1,0,0);
+ sub_803092C();
+ sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
+ break;
+ case 0x13:
+ if (sub_801D008() != 0)
+ break;
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ // TODO: Probably a macro - Pika
+ {
+ struct {u16 a; u16 b;} local_x = {3, 2};
+ sub_801C8C4(0, 1, (s32 *)&local_x, 9);
+ }
+ break;
+ case 0x14:
+ sub_8006518(gUnknown_203B2C4->unk35C);
+ SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED48,gUnknown_80DED78,1,0,0);
+ sub_801CCD8();
+ sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
+ break;
+ case THANK_YOU_MAIL_COMMS_FINISHED:
+ gUnknown_203B2C4->linkError = 0;
+ sub_8011830();
+ linkStatus = sub_8037B28(gUnknown_203B2C4->unk40);
+ gUnknown_203B2C4->linkError = linkStatus;
+ if (linkStatus == 0)
+ {
+ switch(gUnknown_203B2C4->unk40)
+ {
+ case 6:
+ MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228));
+ gUnknown_203B2C4->unk1B8 = *sub_8095228(gUnknown_203B2C4->unk218);
+ gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
+ break;
+ case 7:
+ MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228));
+ MemoryFill8((u8 *)&gUnknown_203B2C4->unk1E8,0, sizeof(struct unkStruct_8095228));
+ gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
+ break;
+ }
+ if (gUnknown_203B2C4->linkError == 0){
+ switch(gUnknown_203B2C4->unk40){
+ case 6:
+ case 7:
+ gUnknown_203B2C4->linkError = sub_80381F4(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
+ if ( sub_800D588() != '\0') {
+ gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1E8.unk10;
+ }
+ else {
+ gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1B8.unk10;
+ }
+ break;
+ }
+ }
+ }
+ xxx_call_start_bg_music();
+ break;
+ case PROMPT_THANK_YOU_PASSWORD:
+ // OK. Please enter the Thank-You Mail Password
+ sub_80141B4(gUnknown_80DF380,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case PROCESS_THANK_YOU_PASSWORD:
+ sub_8006518(gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_80151C0(4,gUnknown_203B2C4->passwordBuffer);
+ break;
+ case 0x1a:
+ sub_8006518(gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_8031D70(gUnknown_203B2C4->unk218,0);
+ break;
+ case 0x1b:
+ // Please give this password to the friend that rescued your team. I also must save your adventure
+ sub_80141B4(gUnknown_80DF3B4,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case DISPLAY_THANK_YOU_PASSWORD:
+ // Ok. Here is your Thank You Mail Password
+ sub_80141B4(gUnknown_80DF418,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case 0x24:
+ // I need to save your adventure
+ sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case 0x20:
+ // There we go. I'm all done.
+ sub_80141B4(gUnknown_80DF46C,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case THANK_YOU_PASSWORD_SUCCESS:
+ switch(gUnknown_203B2C4->wonderMailMethod)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case WONDER_MAIL_PASSWORD:
+ case 6:
+ // A Thank You Mail has arrived from your friend
+ sub_80141B4(gUnknown_80DF4F4,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case 4:
+ break;
+ }
+ break;
+ case 0x22:
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gUnknown_203B2C4->unk53C,monName);
+ gUnknown_203B2C4->unk550 = 0x130;
+ gUnknown_203B2C4->unk552 = 2;
+ gUnknown_203B2C4->unk554 = 0;
+ uVar2 = sub_809539C(6,gUnknown_203B2C4->unk430);
+ puVar4 = sub_8095228(uVar2);
+ cVar1 = puVar4->unk20.itemIndex;
+ if (cVar1 != '\0')
+ gUnknown_203B2C4->unk558 = cVar1;
+ else
+ gUnknown_203B2C4->unk558 = 0;
+ gUnknown_203B2C4->unk55B = 1;
+ gUnknown_203B2C4->unk560 = sub_803C200(&puVar4->unk4, 0);
+ gUnknown_203B2C4->unk559 = 0;
+ gUnknown_203B2C4->unk55A = 0;
+ gUnknown_203B2C4->unk55C = 0;
+ sub_802F204(gUnknown_203B2C4->unk53C,0);
+ break;
+ case COMMUNICATING_THANK_YOU_MAIL:
+ // Communicating..
+ nullsub_23(0);
+ sub_80141B4(gUnknown_80DF544,0,0,0);
+ break;
+ case 0x17:
+ // There. I've sent your thank-you mail. I need to save your adventure.
+ sub_80141B4(gUnknown_80DF594,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case PROMPT_CONNECT_GAME_LINK:
+ // Please connect the GBA systems with a Game Link Cable
+ sub_8014248(gUnknown_80DF5E4,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case THANK_YOU_MAIL_COMMS_CLEANUP:
+ pokeStruct2 = sub_808D33C();
+ sub_80922B4(auStack100, pokeStruct2->name, POKEMON_NAME_LENGTH);
+ ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF63C,auStack100);
+ sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case CONFIRM_ITEM_TO_SEND:
+ // The item you've chosen can't be exchanged later. Is that OK?
+ sub_8014248(gUnknown_80DF694,0,7,gUnknown_80DEEE4,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case 0x29:
+ // I need to save your adventure
+ sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case 0x2a:
+ // I've saved your adventure
+ sub_80141B4(gUnknown_80DF6F0,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case PROMPT_ITEM_TO_SEND:
+ // Ok, please choose the item to be sent
+ sub_80141B4(gUnknown_80DF710,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case THANK_YOU_MAIL_STORAGE_EMPTY:
+ // Oh? Your storage space is empty
+ sub_8014248(gUnknown_80DF73C,0,0,gUnknown_80DEEBC,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case PROMPT_REWARD_ITEM_TO_SEND:
+ // Would you like to choose a reward item from storage and send it with your mail?
+ sub_8014248(gUnknown_80DF77C,0,0,gUnknown_80DEE7C,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case ITEM_EXISTS_ON_THANK_YOU_MAIL:
+ // Oh? You've already attached a reward item on this mail.
+ sub_80141B4(gUnknown_80DF7D4,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case PROMPT_RESEND_WITH_ATTACHED_ITEM:
+ // Would you like to send it again with the item you chose before?
+ sub_8014248(gUnknown_80DF870,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case NO_THANK_YOU_MAIL:
+ // You don't seem to have a Thank-You Mail
+ sub_80141B4(gUnknown_80DF8B4,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case THANK_YOU_MAIL_MAIN_MENU:
+ // Hello. I handle Thank You Mail. How may I help You?
+ sub_8014248(gUnknown_80DF8EC,0,1,gThankYouMailMainMenuItems,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case ANYTHING_ELSE_THANK_YOU_MAIN_MENU:
+ // May I help you with anything else?
+ sub_8014248(gUnknown_80DF928,0,1,gThankYouMailMainMenuItems,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case 2:
+ // Please come see me anytime
+ sub_80141B4(gUnknown_80DF94C,0,&gUnknown_203B2C4->faceFile,0x10d);
+ break;
+ case SELECT_THANK_YOU_MAIL_COMMS:
+ switch(gUnknown_203B2C4->wonderMailMode){
+ case WONDER_MAIL_MODE_SEND:
+ // How would you like to send your thank you mail?
+ sub_8014248(gUnknown_80DF96C,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ case WONDER_MAIL_MODE_RECEIVE:
+ // How would you like to recieve your friend's thank you mail?
+ sub_8014248(gUnknown_80DF9A4,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
+ break;
+ }
+ break;
+ }
+}
+
+void SetThankYouMailMenuState(u32 newState)
+{
+ gUnknown_203B2C4->state = newState;
+ nullsub_131();
+ UpdateThankYouMailText();
+}
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index 04e9f73..ed52bb2 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -6,11 +6,11 @@
#include "sub_8095228.h"
#include "wonder_mail.h"
#include "memory.h"
+#include "menu.h"
#include "text.h"
#include "team_inventory.h"
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
-extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
extern struct TeamInventory *gTeamInventory_203B460;
extern u32 sub_80144A4(s32 *r0);
@@ -22,37 +22,15 @@ extern u8 sub_8030C20(u32);
extern u32 sub_8031050();
extern void sub_80310B4();
extern u32 sub_8095350();
-extern u8 sub_801CF14(u32);
-extern u32 sub_802F298();
-
extern u8 sub_80A2824(u8);
#include "data/wonder_mail_1.h"
-const struct ItemSlot gUnknown_80DED44 =
-{
- 1, 0, 0
-};
-
-
-extern struct MenuItem gUnknown_80DDA48[];
-extern const char gUnknown_80DEF04[];
-extern const char gUnknown_80DEF28[];
-extern const char gUnknown_80DEF80[];
-extern const char gUnknown_80DEFDC[];
-extern const char gUnknown_80DF044[];
-extern const char gUnknown_80DF0A0[];
-extern const char gUnknown_80DF0E0[];
-extern const char gUnknown_80DF138[];
-extern const char gUnknown_80DF194[];
-extern struct MenuItem 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];
+extern struct MenuItem gUnknown_80DDA48[];
extern s32 sub_8095190(void);
extern u32 sub_8095324(u32);
@@ -91,56 +69,6 @@ extern u8 sub_8024108(u32);
extern u32 sub_8031DCC();
extern void sub_8031E10();
extern void sub_8031E00();
-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();
extern u16 gUnknown_80E5990[];
extern s32 sub_8001658(u32, u32);
extern u32 gUnknown_80E4A40[];
@@ -150,33 +78,11 @@ extern void sub_8099A5C(u32, u32, u32*);
extern void sub_8099AFC(u32, 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 u8 sub_8012FD8(u32 *r0);
-extern void sub_8013114(u32 *, s32 *);
-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 ItemSlot *);
-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)
@@ -1294,1018 +1200,3 @@ 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(sizeof(struct WonderMailStruct_203B2C4), 8);
- MemoryFill8((u8 *)gUnknown_203B2C4, 0, sizeof(struct WonderMailStruct_203B2C4));
-
- CopyYellowSpeciesNametoBuffer(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 < PASSWORD_BUFFER_SIZE; counter++){
- gUnknown_203B2C4->passwordBuffer[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->state) {
- 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);
- }
-}
-
-// Is this used for only Thank-You Mail??
-void PrintWonderMailLinkError(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:
- default:
- break;
- }
-}
-
-void sub_8029F98(void)
-{
- s32 auStack20;
-
- if (sub_80144A4(&auStack20) != 0) {
- return;
- }
- MemoryFill8((u8 *)&gUnknown_203B2C4->unk41C, 0, sizeof(struct ItemSlot));
- gUnknown_203B2C4->unk41C.itemIndex = 0;
- gUnknown_203B2C4->unk41C.numItems = 1;
- gUnknown_203B2C4->unk41C.unk0 = 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 menuAction;
-
- menuAction = -1;
- sub_8030768(0);
- if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
- sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction);
- }
-
- switch(menuAction)
- {
- 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.itemIndex = 0;
- gUnknown_203B2C4->unk41C.numItems = 1;
- gUnknown_203B2C4->unk41C.unk0 = 0;
-
- switch(sub_801CA08(1))
- {
- case 2:
- sub_801CBB8();
- sub_802B2BC(1);
- break;
- case 3:
- gUnknown_203B2C4->unk41C.itemIndex = sub_801CB24();
- sub_802B2BC(0x14);
- break;
- case 4:
- gUnknown_203B2C4->unk4 = 0x13;
- gUnknown_203B2C4->unk41C.itemIndex = 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 menuAction;
-
- menuAction = -1;
- sub_801CA08(0);
- if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
- sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction);
- }
-
- switch(menuAction)
- {
- 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);
- PrepareSavePakWrite(SPECIES_NONE);
- }
-}
-
-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->passwordBuffer,&temp.unk0))
- {
- 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->unk0 = 6;
- gUnknown_203B2C4->unk430 = temp.unk10;
- sub_802B2BC(0x21);
- break;
- default:
- case 7:
- 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 (!WriteSavePak()) {
- FinishWriteSavePak();
- sub_802B2BC(0xd);
- }
- }
-}
-
-void sub_802A6B4(void)
-{
- int saveStatus;
- u32 temp;
-
- if (sub_80144A4(&temp) == 0) {
- if (!WriteSavePak()) {
- saveStatus = GetSavePakStatus();
- FinishWriteSavePak();
- if (saveStatus == SAVE_COMPLETED) {
- sub_802B2BC(0x20);
- }
- else {
- sub_802B2BC(3);
- }
- }
- }
-}
-
-void sub_802A6F0(void)
-{
- s32 temp;
-
- if (sub_80144A4(&temp) == 0) {
- sub_802B2BC(0x18);
- sub_8011C28(1);
- PrepareSavePakWrite(SPECIES_NONE);
- }
-}
-
-void sub_802A718(void)
-{
- s32 temp;
-
- if (sub_80144A4(&temp) == 0) {
- sub_802B2BC(0x25);
- sub_8011C28(1);
- PrepareSavePakWrite(SPECIES_NONE);
- }
-}
-
-void sub_802A740(void)
-{
- s32 temp;
-
- if (sub_80144A4(&temp) == 0) {
- sub_802B2BC(0x1e);
- }
-}
-
-void sub_802A75C(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 7:
- // NOTE: if statement is needed to match
- if(gUnknown_203B2C4->unk538)
- sub_802B2BC(0x16);
- else
- sub_802B2BC(0x16);
- break;
- case 0:
- sub_802B2BC(1);
- break;
- }
- }
-}
-
-void sub_802A798(void)
-{
- s32 temp;
- struct unkStruct_8095228 *return_var;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 7:
- return_var = sub_8095228(gUnknown_203B2C4->unk218);
- if(gUnknown_203B2C4->unk41C.itemIndex != 0)
- {
- return_var->unk20 = gUnknown_203B2C4->unk41C;
- }
- gTeamInventory_203B460->teamStorage[gUnknown_203B2C4->unk41C.itemIndex]--;
- sub_802B2BC(0x29);
- break;
- case 8:
- sub_802B2BC(0xB);
- break;
- case 0:
- sub_802B2BC(1);
- break;
- }
- }
-}
-
-void sub_802A828(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- sub_802B2BC(0x2A);
- sub_8011C28(1);
- PrepareSavePakWrite(SPECIES_NONE);
- }
-}
-
-void sub_802A850(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- if(!WriteSavePak())
- {
- FinishWriteSavePak();
- switch(gUnknown_203B2C4->unk534)
- {
- case 3:
- case 4:
- sub_802B2BC(0x1D);
- break;
- case 5:
- sub_802B2BC(0x19);
- break;
- }
- }
- }
-}
-
-void sub_802A8A0(void)
-{
- s32 temp;
-
- if (sub_80144A4(&temp) == 0) {
- sub_802B2BC(0x13);
- }
-}
-
-void sub_802A8BC(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 0xA:
- switch(gUnknown_203B2C4->unk534)
- {
- case 3:
- case 4:
- sub_802B2BC(0x1D);
- break;
- case 5:
- sub_802B2BC(0x19);
- break;
- }
- break;
- case 0:
- sub_802B2BC(1);
- break;
- }
- }
-}
-
-void sub_802A910(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 9:
- if(sub_801CF14(0) != 0)
- {
- sub_802B2BC(0xA);
- }
- else
- {
- sub_802B2BC(0xB);
- }
- break;
- case 0xA:
- switch(gUnknown_203B2C4->unk534)
- {
- case 3:
- case 4:
- sub_802B2BC(0x1D);
- break;
- case 5:
- sub_802B2BC(0x19);
- break;
- }
- break;
- case 0:
- sub_802B2BC(1);
- break;
- }
- }
-}
-
-void sub_802A98C(void)
-{
- s32 temp;
-
- if (sub_80144A4(&temp) == 0) {
- sub_802B2BC(0x8);
- }
-}
-
-void sub_802A9A8(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 0x7:
- switch(gUnknown_203B2C4->unk534)
- {
- case 3:
- case 4:
- sub_802B2BC(0x1D);
- break;
- case 5:
- sub_802B2BC(0x19);
- break;
- }
- break;
- case 0:
- sub_802B2BC(1);
- break;
- }
- }
-}
-
-void sub_802A9FC(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 0x7:
- sub_802B2BC(0x26);
- break;
- case 0:
- sub_802B2BC(1);
- break;
- }
- }
-}
-
-void sub_802AA28(void)
-{
- s32 temp;
- struct unkStruct_8095228 *return_var;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 3:
- case 4:
- case 5:
- gUnknown_203B2C4->unk534 = temp;
- switch(gUnknown_203B2C4->unk538)
- {
- case 1:
- return_var = sub_8095228(sub_80953D4(5));
- if(return_var->unk20.itemIndex != 0)
- {
- sub_802B2BC(7);
- }
- else
- {
- sub_802B2BC(9);
- }
- break;
- default:
- if(gUnknown_203B2C4->unk534 == 5)
- {
- sub_802B2BC(0x26);
- }
- else
- {
- sub_802B2BC(0x1D);
- }
- break;
- }
- break;
- case 0:
- sub_802B2BC(1);
- break;
- }
- }
-}
-
-void sub_802AAAC(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- sub_802B2BC(1);
- }
-}
-
-void sub_802AAC8(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- sub_802B2BC(3);
- }
-}
-
-void sub_802AAE4(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- switch(temp)
- {
- case 1:
- gUnknown_203B2C4->unk40 = 6;
- gUnknown_203B2C4->unk538 = 1;
- if(sub_8095324(5) == 0)
- {
- sub_802B2BC(4);
- }
- else
- {
- sub_802B2BC(0xF);
- }
- break;
- case 2:
- gUnknown_203B2C4->unk40 = 7;
- gUnknown_203B2C4->unk538 = 2;
- sub_802B2BC(6);
- break;
- case 0:
- sub_802B2BC(2);
- break;
- }
- }
-}
-
-void sub_802AB60(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- sub_802B2BC(0x22);
- }
-}
-
-void sub_802AB7C(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) == 0)
- {
- sub_802B2BC(0x22);
- }
-}
-
-
-void sub_802AB98(void)
-{
- const char *monName;
- switch(sub_802F298())
- {
- case 3:
- sub_802F2C0();
- CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER);
- monName = GetMonSpecies(SPECIES_PELIPPER);
- strcpy(gAvailablePokemonNames, monName);
- sub_8095240(sub_809539C(6, gUnknown_203B2C4->unk430));
- sub_802B2BC(0x24);
- break;
- default:
- break;
- }
-}
-
-void nullsub_131(void)
-{
-}
diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c
index f5bcd12..cca9794 100644
--- a/src/wonder_mail_2.c
+++ b/src/wonder_mail_2.c
@@ -9,8 +9,6 @@
#include "sub_8095228.h"
#include "wonder_mail.h"
-extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
-
struct unkStruct_203B2C8
{
// size: 0x140
@@ -90,325 +88,61 @@ extern struct UnkTextStruct2 gUnknown_80DFBD0;
extern struct unkStruct_203B2C8 *gUnknown_203B2C8;
-extern struct MenuItem gUnknown_80DED78[];
-extern struct MenuItem gUnknown_80DEDB8[];
-extern u8 gUnknown_80DF6F0[];
-extern u8 gUnknown_80DF44C[];
-extern u8 gUnknown_80DF380[];
-extern u8 gUnknown_80DF544[];
-extern u8 gUnknown_80DF96C[];
-extern u8 gUnknown_80DF9A4[];
-extern u8 gUnknown_80DF4F4[];
-extern u8 gUnknown_80DF46C[];
-extern u8 gUnknown_80DF94C[];
-extern u8 gUnknown_80DF928[];
-extern u8 gUnknown_80DF8EC[];
-extern u8 gUnknown_80DF7D4[];
-extern u8 gUnknown_80DF8B4[];
-extern u8 gUnknown_80DF3B4[];
-extern u8 gUnknown_80DF63C[];
-extern u8 gUnknown_80DF250[];
-extern u8 gUnknown_80DF594[];
-extern u8 gUnknown_80DF870[];
-extern u8 gUnknown_80DF77C[];
-extern u8 gUnknown_80DF5E4[];
-extern u8 gUnknown_80DF710[];
-extern u8 gUnknown_80DF694[];
-extern u8 gUnknown_80DF73C[];
-extern u8 gUnknown_80DF330[];
-extern u8 gUnknown_80DF418[];
-extern u8 gUnknown_80DF304[];
-extern struct UnkTextStruct2 gUnknown_80DED60;
-extern struct UnkTextStruct2 gUnknown_80DED48;
-extern struct MenuItem gUnknown_80DEE44[];
-extern struct MenuItem gUnknown_80DEE08[];
-extern struct MenuItem gUnknown_80DEE7C[];
-extern struct MenuItem gUnknown_80DEEBC[];
-extern struct MenuItem gUnknown_80DEEE4[];
-extern struct MenuItem gUnknown_80DEE60[];
-
-extern void sub_8031D70(u8, u32);
-extern u8 sub_809539C(u32, u32);
-extern u8 sub_800D588(void);
-extern u32 sub_803C200(u8 *, u32);
-
-extern struct PokemonStruct *sub_808D33C(void);
-
-extern void sub_802F204(u8 *, u32);
-extern void sub_80151C0(u32, u8 *);
-extern void xxx_call_start_bg_music(void);
-extern void sub_803092C(void);
-extern void sub_801CCD8(void);
-extern void sub_8011830(void);
-extern void nullsub_23(u32);
-extern void sub_80922B4(u8 *, u8 *, u32);
-extern s32 sub_8037B28(u32);
-extern u32 sub_8030894(void);
-extern u32 sub_801D008(void);
-extern void sub_80306A8(u32, u32, u32, u32);
-extern void sub_8035CF4(u32 *, u32, u32);
-extern s32 sub_8037D64(u32, void *, void *);
-extern s32 sub_80381F4(u32, void *, void *);
-extern void sub_801C8C4(u32, u32, s32 * , u32);
-
-
-void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...);
-extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32);
extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32);
extern void sub_80920D8(u8 *buffer);
-extern void sub_8097790();
+extern void sub_8097790(void);
extern char gUnknown_202E5D8[0x50];
extern char gAvailablePokemonNames[0x50];
-extern u32 sub_802F298();
-extern void sub_802F2C0();
+extern u32 sub_802F298(void);
+extern void sub_802F2C0(void);
extern u8 sub_8099394(u8 *);
extern void sub_802B548(u32);
extern u32 sub_80144A4(s32 *);
-extern void sub_802B560();
-extern void sub_802B57C();
-extern void sub_802B5B8();
-extern void sub_802B5FC();
-extern void sub_802B624();
+extern void sub_802B560(void);
+extern void sub_802B57C(void);
+extern void sub_802B5B8(void);
+extern void sub_802B5FC(void);
+extern void sub_802B624(void);
void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...);
extern void sub_802F204(u8 *, u32);
extern void sub_803C37C(u8 *, u32, u8 *);
extern u32 sub_803C200(u8 *, u32);
extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
-extern const char gUnknown_80DFAA8[];
-extern const char gUnknown_80DFB14[];
-extern const char gUnknown_80DF9F0[];
-extern const char gUnknown_80DF9F8[];
extern u8 sub_80023E4(u32);
-
extern void nullsub_131(void);
extern void sub_802ABF8(void);
-void sub_802ABF8(void)
-{
- char cVar1;
- char *monName;
- u8 auStack180 [80];
- u8 auStack100 [80];
- u8 uVar2;
- struct PokemonStruct *pokeStruct;
- struct PokemonStruct *pokeStruct2;
- s32 iVar6;
- struct unkStruct_8095228 *puVar4;
+ALIGNED(4) const char gUnknown_80DF9F0[] = "????";
+// NOTE: had to be pre-proc'd to match
+ALIGNED(4) const char gUnknown_80DF9F8[] = _(
+ " Oh~2c hello!\n"
+ "Your rescue mission went well~2c didn~27t it?\n"
+ "I wouldn~27t expect any less~2c #CG%s#R!#P"
+ " Well~2c well!\n"
+ "Here is your reward from the Pokémon\n"
+ "Rescue Organization!");
+
+ALIGNED(4) const char gUnknown_80DFAA8[] =
+ " I hope you will keep on\n"
+ "rescuing your friends in\n"
+ "dire straits.#P"
+ " And now~2c I must save\n"
+ "your adventure.";
+
+ALIGNED(4) const char gUnknown_80DFB14[] =
+ " Oh~2c yes~2c that~27s right.\n"
+ "Please don~27t forget to send an #CGA-OK Mail#R\n"
+ "to the friend you just rescued.#P"
+ " Please give me a shout if\n"
+ "you would like to send #CGA-OK Mail#R.";
+
+ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0";
-
- switch(gUnknown_203B2C4->state) {
- case 5:
- pokeStruct = sub_808D33C();
- sub_80922B4(auStack180,pokeStruct->name, POKEMON_NAME_LENGTH);
- ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF250,auStack180);
- sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0xe:
- sub_8014248(gUnknown_80DF304,0,7,gUnknown_80DEE60,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 0xf:
- sub_80141B4(gUnknown_80DF330,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x10:
- if (sub_8030894() != 0)
- break;
- ResetUnusedInputStruct();
- sub_800641C(0,1,1);
- sub_80306A8(5,0,0,6);
- break;
- case 0x11:
- sub_8006518(gUnknown_203B2C4->unk35C);
- SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED60,gUnknown_80DED78,1,0,0);
- sub_803092C();
- sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
- break;
- case 0x13:
- if (sub_801D008() != 0)
- break;
- ResetUnusedInputStruct();
- sub_800641C(0,1,1);
- // TODO: Probably a macro - Pika
- {
- struct {u16 a; u16 b;} local_x = {3, 2};
- sub_801C8C4(0, 1, (s32 *)&local_x, 9);
- }
- break;
- case 0x14:
- sub_8006518(gUnknown_203B2C4->unk35C);
- SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED48,gUnknown_80DED78,1,0,0);
- sub_801CCD8();
- sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
- break;
- case 0x1e:
- gUnknown_203B2C4->linkError = 0;
- sub_8011830();
- iVar6 = sub_8037B28(gUnknown_203B2C4->unk40);
- gUnknown_203B2C4->linkError = iVar6;
- if (iVar6 != 0) goto _0802AEE6;
- switch(gUnknown_203B2C4->unk40)
- {
- case 6:
- MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228));
- gUnknown_203B2C4->unk1B8 = *sub_8095228(gUnknown_203B2C4->unk218);
- gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
- break;
- case 7:
- MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228));
- MemoryFill8((u8 *)&gUnknown_203B2C4->unk1E8,0, sizeof(struct unkStruct_8095228));
- gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
- break;
- }
- if (gUnknown_203B2C4->linkError == 0){
- switch(gUnknown_203B2C4->unk40){
- case 6:
- case 7:
- gUnknown_203B2C4->linkError = sub_80381F4(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8);
- if ( sub_800D588() != '\0') {
- gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1E8.unk10;
- }
- else {
- gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1B8.unk10;
- }
- break;
- }
- }
- _0802AEE6:
- xxx_call_start_bg_music();
- break;
- case 0x26:
- sub_80141B4(gUnknown_80DF380,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x27:
- sub_8006518(gUnknown_203B2C4->unk3BC);
- ResetUnusedInputStruct();
- sub_800641C(0,1,1);
- sub_80151C0(4,gUnknown_203B2C4->passwordBuffer);
- break;
- case 0x1a:
- sub_8006518(gUnknown_203B2C4->unk3BC);
- ResetUnusedInputStruct();
- sub_800641C(0,1,1);
- sub_8031D70(gUnknown_203B2C4->unk218,0);
- break;
- case 0x1b:
- sub_80141B4(gUnknown_80DF3B4,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x19:
- sub_80141B4(gUnknown_80DF418,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x24:
- sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x20:
- sub_80141B4(gUnknown_80DF46C,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x21:
- switch(gUnknown_203B2C4->unk534)
- {
- case 3:
- case 5:
- case 6:
- sub_80141B4(gUnknown_80DF4F4,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 4:
- break;
- }
- break;
- case 0x22:
- monName = GetMonSpecies(SPECIES_PELIPPER);
- strcpy(gUnknown_203B2C4->unk53C,monName);
- gUnknown_203B2C4->unk550 = 0x130;
- gUnknown_203B2C4->unk552 = 2;
- gUnknown_203B2C4->unk554 = 0;
- uVar2 = sub_809539C(6,gUnknown_203B2C4->unk430);
- puVar4 = sub_8095228(uVar2);
- cVar1 = puVar4->unk20.itemIndex;
- if (cVar1 != '\0')
- gUnknown_203B2C4->unk558 = cVar1;
- else
- gUnknown_203B2C4->unk558 = 0;
- gUnknown_203B2C4->unk55B = 1;
- gUnknown_203B2C4->unk560 = sub_803C200(&puVar4->unk4, 0);
- gUnknown_203B2C4->unk559 = 0;
- gUnknown_203B2C4->unk55A = 0;
- gUnknown_203B2C4->unk55C = 0;
- sub_802F204(gUnknown_203B2C4->unk53C,0);
- break;
- case 0x16:
- nullsub_23(0);
- sub_80141B4(gUnknown_80DF544,0,0,0);
- break;
- case 0x17:
- sub_80141B4(gUnknown_80DF594,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x1d:
- sub_8014248(gUnknown_80DF5E4,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 0xd:
- pokeStruct2 = sub_808D33C();
- sub_80922B4(auStack100, pokeStruct2->name, POKEMON_NAME_LENGTH);
- ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF63C,auStack100);
- sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0xc:
- sub_8014248(gUnknown_80DF694,0,7,gUnknown_80DEEE4,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 0x29:
- sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0x2a:
- sub_80141B4(gUnknown_80DF6F0,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0xb:
- sub_80141B4(gUnknown_80DF710,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 10:
- sub_8014248(gUnknown_80DF73C,0,0,gUnknown_80DEEBC,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 9:
- sub_8014248(gUnknown_80DF77C,0,0,gUnknown_80DEE7C,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 7:
- sub_80141B4(gUnknown_80DF7D4,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 8:
- sub_8014248(gUnknown_80DF870,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 4:
- sub_80141B4(gUnknown_80DF8B4,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 0:
- sub_8014248(gUnknown_80DF8EC,0,1,gUnknown_80DEDB8,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 1:
- sub_8014248(gUnknown_80DF928,0,1,gUnknown_80DEDB8,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 2:
- sub_80141B4(gUnknown_80DF94C,0,&gUnknown_203B2C4->faceFile,0x10d);
- break;
- case 6:
- switch(gUnknown_203B2C4->unk538){
- case 1:
- sub_8014248(gUnknown_80DF96C,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- case 2:
- sub_8014248(gUnknown_80DF9A4,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
- break;
- }
- break;
- }
-}
-void sub_802B2BC(u32 newState)
-{
- gUnknown_203B2C4->state = newState;
- nullsub_131();
- sub_802ABF8();
-}
u32 sub_802B2D4(void)
{
@@ -494,7 +228,7 @@ void sub_802B3E0(void)
}
// Print and expand placeholders?
ExpandPlaceholdersBuffer(gUnknown_203B2C8->teamName,gUnknown_80DF9F8,teamNameBuffer);
- // Display to screen with Pelliper face
+ // Display to screen with Peliper face
sub_80141B4(gUnknown_203B2C8->teamName, 0, &gUnknown_203B2C8->faceFile, 0x10d);
break;
case 1:
@@ -607,7 +341,7 @@ u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2)
{
if(gUnknown_203B2CC == NULL)
{
- gUnknown_203B2CC = MemoryAlloc(0xD4, 8);
+ gUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 8);
}
gUnknown_203B2CC->unk6C = r0;
gUnknown_203B2CC->unk70 = &gUnknown_203B2CC->unk74[r0];
diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c
index 2c8e6bb..87166b9 100644
--- a/src/wonder_mail_main_menu.c
+++ b/src/wonder_mail_main_menu.c
@@ -6,9 +6,14 @@
#include "sub_8095228.h"
#include "wonder_mail.h"
-#define WONDER_MAIL_MAIN_SCREEN 4
+#define SEND_WONDER_MAIL_MAIN_SCREEN 1
+#define SEND_GAME_LINK_CABLE 2
+#define RECEIVE_WONDER_MAIL_MAIN_SCREEN 4
#define EXIT_TO_MAIN_MENU 5
+#define WONDER_MAIL_SENT 7
+#define GAME_LINK_CABLE_MENU 8
#define COMMUNICATION_ERROR 10
+#define RECEIVE_GAME_LINK_CABLE 12
#define PASSWORD_SUCCESS 13
#define PREPARE_SAVE 14
#define SAVE_ADVENTURE 15
@@ -17,6 +22,17 @@
#define PASSWORD_INVALID 19
#define PASSWORD_ENTRY_SCREEN 18
+
+struct unkStruct_803B344
+{
+ // size: 0xB4
+ struct WonderMail unk0;
+ u8* unk14;
+ u8* unk18;
+ u8 fill1C[0x3C - 0x1C];
+ u8 unk3C[0x78];
+};
+
struct unkStruct_203B3E8
{
// size: 0x49C
@@ -31,15 +47,21 @@ struct unkStruct_203B3E8
struct UnkTextStruct2 unk1EC[4];
u32 unk24C;
u32 wonderMailStatus;
- u8 fill254[0x3C0 - 0x254];
- struct WonderMail unk3C0;
- u8 fill3D0[0x490 - 0x3D4];
- u32 unk490;
- u32 unk494;
+
+ struct unkStruct_803B344 unk254;
+
+ struct unkStruct_803B344 unk308;
+ u8 unk3BC;
+ u8 fill3BD[0x3C0 - 0x3BD];
+
+ struct unkStruct_803B344 unk3C0;
+
+ struct WonderMail unk474;
+ u8 **unk488;
+ u8 *unk48C;
+ s32 wonderMailMethod;
+ u32 wonderMailMode;
u8 unk498;
- u8 unk499;
- u8 unk49A;
- u8 unk49B;
};
extern u32 sub_8095324(u32);
@@ -54,6 +76,39 @@ extern void sub_801CBB8(void);
extern void sub_80155F0(void);
extern void sub_8031E10(void);
+extern u8 sub_800D588(void);
+extern s32 sub_8037D64(u32, void *, void *);
+extern s32 sub_80381F4(u32, void *, void *);
+extern void sub_8011830(void);
+extern void sub_80151C0(u32, u8 *);
+extern void xxx_call_start_bg_music(void);
+extern void sub_8014248(u8 *, u32, u32, u8 *, u32, u32, u32, u32, u32);
+extern void nullsub_23(u32);
+extern void sub_802EF48(void);
+extern void sub_802D098(struct WonderMail *);
+
+
+extern struct unkStruct_803B344 *sub_803B344(u8);
+
+
+
+extern u8 gUnknown_80E7CC4[];
+extern u8 gUnknown_80E78F8;
+extern u8 gUnknown_80E7AC4[];
+extern u8 gUnknown_80E786C;
+extern u8 gUnknown_80E7AE0[];
+extern u8 gUnknown_80E7894;
+extern u8 gUnknown_80E7C48[];
+extern u8 gUnknown_80E7B14[];
+extern u8 gUnknown_80E78D8;
+extern u8 gUnknown_80E7B68[];
+extern u8 gUnknown_80E7BEC[];
+extern u8 gUnknown_80E7BC8[];
+extern u8 gUnknown_80E7B88[];
+extern u8 gUnknown_80E7C98[];
+extern u8 gUnknown_80E7B48[];
+extern s32 sub_8037B28(u32);
+
extern u32 sub_802D0E0();
extern u8 sub_802D178();
extern void sub_802D184();
@@ -61,30 +116,30 @@ extern void sub_802D184();
extern s32 sub_80154F0();
extern bool8 DecodeWonderMailPassword(u8 *, struct WonderMail *);
extern bool8 IsValidWonderMail(struct WonderMail *WonderMailData);
-extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
+extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32);
void PrintWonderMailMainMenuError(u32);
void HandleWonderMailMainScreen(void);
-void sub_8039AA8(void);
+void HandleGameLinkCableMenu(void);
void sub_8039B14(void);
void sub_8039B20(void);
void sub_8039B58(void);
-void sub_8039D88(void);
+void ReturnToGameLinkCableMenu(void);
void HandlePasswordSuccess(void);
void HandlePrepareSaveScreen(void);
void HandleSaveAdventureScreen(void);
void HandleWonderMailAddedScreen(void);
-void ReturnToWonderMailMainScreen(void);
+void ReturnToReceiveWonderMailMainScreen(void);
void AdvanceToPasswordEntryScreen(void);
void HandlePasswordEntryScreen(void);
void HandleInvalidPasswordMenu(void);
-extern u32 gUnknown_80E7914;
-extern u32 gUnknown_80E7938;
-extern u32 gUnknown_80E7994;
-extern u32 gUnknown_80E79E4;
-extern u32 gUnknown_80E7A48;
+extern u8 gUnknown_80E7914[];
+extern u8 gUnknown_80E7938[];
+extern u8 gUnknown_80E7994[];
+extern u8 gUnknown_80E79E4[];
+extern u8 gUnknown_80E7A48[];
bool8 sub_8039880(void)
{
@@ -105,10 +160,10 @@ bool8 CreateWonderMailMenu(void)
gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0;
}
- gUnknown_203B3E8->unk490 = 3;
- gUnknown_203B3E8->unk494 = 2;
+ gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_GAME_LINK;
+ gUnknown_203B3E8->wonderMailMode = WONDER_MAIL_MODE_RECEIVE;
gUnknown_203B3E8->unk498 = 1;
- gUnknown_203B3E8->unk490 = 5; // ??? Why?
+ gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_PASSWORD; // ??? Why?
SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY); // -> Display "Enter Wonder Mail Password"
return 1;
}
@@ -116,17 +171,15 @@ bool8 CreateWonderMailMenu(void)
u8 UpdateWonderMailMenu(void)
{
switch(gUnknown_203B3E8->state) {
- case WONDER_MAIL_MAIN_SCREEN:
+ case RECEIVE_WONDER_MAIL_MAIN_SCREEN:
HandleWonderMailMainScreen();
break;
case EXIT_TO_MAIN_MENU: // When you exit out of the menu
return 3;
- case 8:
- sub_8039AA8();
+ case GAME_LINK_CABLE_MENU:
+ HandleGameLinkCableMenu();
break;
- case 11:
- break;
- case 12:
+ case RECEIVE_GAME_LINK_CABLE:
sub_8039B14();
break;
case 6:
@@ -135,8 +188,8 @@ u8 UpdateWonderMailMenu(void)
case 9:
sub_8039B58();
break;
- case 7:
- sub_8039D88();
+ case WONDER_MAIL_SENT:
+ ReturnToGameLinkCableMenu();
break;
case PASSWORD_SUCCESS:
HandlePasswordSuccess();
@@ -151,7 +204,7 @@ u8 UpdateWonderMailMenu(void)
HandleWonderMailAddedScreen();
break;
case COMMUNICATION_ERROR:
- ReturnToWonderMailMainScreen();
+ ReturnToReceiveWonderMailMainScreen();
break;
case PROMPT_PASSWORD_ENTRY: // "Please enter the Wonder Mail Password" Screen
AdvanceToPasswordEntryScreen();
@@ -188,11 +241,11 @@ void HandleWonderMailMainScreen(void)
switch(menuAction) {
case 3:
case 4:
- gUnknown_203B3E8->unk490 = 3;
- SetWonderMailMainMenuState(8);
+ gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_GAME_LINK;
+ SetWonderMailMainMenuState(GAME_LINK_CABLE_MENU);
break;
case 5:
- gUnknown_203B3E8->unk490 = 5;
+ gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_PASSWORD;
SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY);
break;
case 0:
@@ -203,26 +256,26 @@ void HandleWonderMailMainScreen(void)
}
}
-void sub_8039AA8(void)
+void HandleGameLinkCableMenu(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0) {
switch(menuAction){
case 6:
- if (gUnknown_203B3E8->unk494 == 1) {
- SetWonderMailMainMenuState(2);
+ if (gUnknown_203B3E8->wonderMailMode == WONDER_MAIL_MODE_SEND) {
+ SetWonderMailMainMenuState(SEND_GAME_LINK_CABLE);
}
else {
- SetWonderMailMainMenuState(12);
+ SetWonderMailMainMenuState(RECEIVE_GAME_LINK_CABLE);
}
break;
case 0:
- if (gUnknown_203B3E8->unk494 == 1) {
- SetWonderMailMainMenuState(1);
+ if (gUnknown_203B3E8->wonderMailMode == WONDER_MAIL_MODE_SEND) {
+ SetWonderMailMainMenuState(SEND_WONDER_MAIL_MAIN_SCREEN);
}
else {
- SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN);
+ SetWonderMailMainMenuState(RECEIVE_WONDER_MAIL_MAIN_SCREEN);
}
break;
}
@@ -243,12 +296,12 @@ void sub_8039B20(void)
}
}
-void ReturnToWonderMailMainScreen(void)
+void ReturnToReceiveWonderMailMainScreen(void)
{
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
- SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN);
+ SetWonderMailMainMenuState(RECEIVE_WONDER_MAIL_MAIN_SCREEN);
}
}
@@ -260,7 +313,7 @@ void sub_8039B58(void)
if (gUnknown_203B3E8->wonderMailStatus == 0) {
switch(gUnknown_203B3E8->unk24C){
case 9:
- SetWonderMailMainMenuState(7);
+ SetWonderMailMainMenuState(WONDER_MAIL_SENT);
break;
case 10:
SetWonderMailMainMenuState(PASSWORD_SUCCESS);
@@ -274,6 +327,7 @@ void sub_8039B58(void)
}
}
+/* NOTE: I think the error codes for wonder mail are the same across SOS/WONDER */
void PrintWonderMailMainMenuError(u32 status)
{
switch(status)
@@ -282,42 +336,42 @@ void PrintWonderMailMainMenuError(u32 status)
break;
case 1:
// "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E7914, 0, 0, 0x101);
break;
case 3:
// Incorrect number of GBA Systems
- sub_80141B4(&gUnknown_80E7938, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E7938, 0, 0, 0x101);
break;
case 2:
// No response from friend. Redo from start
- sub_80141B4(&gUnknown_80E7994, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E7994, 0, 0, 0x101);
break;
case 4:
// Sender and receiver in different modes
- sub_80141B4(&gUnknown_80E79E4, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E79E4, 0, 0, 0x101);
break;
case 5:
// "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E7914, 0, 0, 0x101);
break;
case 14:
// "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E7914, 0, 0, 0x101);
break;
case 15: // "No response from your friend. Make sure sender and receiver are ready"
- sub_80141B4(&gUnknown_80E7A48, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E7A48, 0, 0, 0x101);
break;
case 6:
case 7:
case 8:
case 9:
- case COMMUNICATION_ERROR:
+ case 10:
case 11:
case 12:
- case PASSWORD_SUCCESS:
+ case 13:
default:
// "Communication Error"
- sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101);
+ sub_80141B4(gUnknown_80E7914, 0, 0, 0x101);
break;
}
@@ -342,7 +396,7 @@ void HandlePasswordEntryScreen(void)
else {
// Successful password
// Copy the decoded data to another buffer?
- gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->UNK38.decodedMail;
+ gUnknown_203B3E8->unk3C0.unk0 = gUnknown_203B3E8->UNK38.decodedMail;
gUnknown_203B3E8->unk498 = 1;
SetWonderMailMainMenuState(PASSWORD_SUCCESS);
@@ -390,12 +444,12 @@ void HandlePrepareSaveScreen(void)
}
}
-void sub_8039D88(void)
+void ReturnToGameLinkCableMenu(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
- SetWonderMailMainMenuState(8);
+ SetWonderMailMainMenuState(GAME_LINK_CABLE_MENU);
}
}
@@ -443,3 +497,137 @@ void HandleInvalidPasswordMenu(void)
void nullsub_54(void)
{
}
+
+void WonderMailMainMenuCallback(void)
+{
+ int iVar2;
+ struct unkStruct_803B344 *temp;
+
+ switch(gUnknown_203B3E8->state) {
+ case 0:
+ sub_8014248(gUnknown_80E7AC4,0,1,&gUnknown_80E786C,0,4,0,0,0x101);
+ break;
+ case SEND_WONDER_MAIL_MAIN_SCREEN:
+ sub_8014248(gUnknown_80E7AE0,0,3,&gUnknown_80E7894,0,4,0,0,0x101);
+ break;
+ case 3:
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_802EF48();
+ break;
+ case RECEIVE_WONDER_MAIL_MAIN_SCREEN:
+ sub_8014248(gUnknown_80E7B14,0,3,&gUnknown_80E78D8,0,4,0,0,0x101);
+ break;
+ case PASSWORD_SUCCESS:
+ gUnknown_203B3E8->unk474 = gUnknown_203B3E8->unk3C0.unk0;
+ if(gUnknown_203B3E8->unk474.unk2 == 4)
+ {
+ gUnknown_203B3E8->unk488 = &gUnknown_203B3E8->unk3C0.unk14;
+ gUnknown_203B3E8->unk48C = gUnknown_203B3E8->unk3C0.unk3C;
+ }
+ else
+ {
+ gUnknown_203B3E8->unk488 = NULL;
+ gUnknown_203B3E8->unk48C = NULL;
+ }
+ sub_802D098(&gUnknown_203B3E8->unk474);
+ break;
+ case PREPARE_SAVE:
+ if(gUnknown_203B3E8->unk498 != 0)
+ {
+ switch(gUnknown_203B3E8->wonderMailMethod)
+ {
+ case WONDER_MAIL_GAME_LINK:
+ case WONDER_MAIL_PASSWORD:
+ sub_80141B4(gUnknown_80E7B48,0,0,0x101);
+ break;
+ case 4:
+ break;
+ }
+ }
+ else
+ sub_80141B4(gUnknown_80E7B48,0,0,0x101);
+ break;
+ case WONDER_MAIL_SENT:
+ sub_80141B4(gUnknown_80E7B68,0,0,0x101);
+ break;
+ case WONDER_MAIL_ADDED:
+ if (gUnknown_203B3E8->unk498 != '\0') {
+ sub_80141B4(gUnknown_80E7B88,0,0,0x101);
+ }
+ else {
+ // Wonder Mail was refused
+ sub_80141B4(gUnknown_80E7BC8,0,0,0x101);
+ }
+ break;
+ case GAME_LINK_CABLE_MENU:
+ sub_8014248(gUnknown_80E7BEC,0,6,&gUnknown_80E78F8,0,4,0,0,0x101);
+ break;
+ case 6:
+ nullsub_23(0);
+ sub_80141B4(gUnknown_80E7C48,0,0,0);
+ break;
+ case 9:
+ gUnknown_203B3E8->wonderMailStatus = 0;
+ sub_8011830();
+ iVar2 = sub_8037B28(gUnknown_203B3E8->unk24C);
+ gUnknown_203B3E8->wonderMailStatus = iVar2;
+ if (iVar2 == 0) {
+ switch(gUnknown_203B3E8->unk24C)
+ {
+ case 9:
+ MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4);
+ temp = sub_803B344(gUnknown_203B3E8->unk3BC);
+ if(temp->unk14 != NULL){
+ MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk14,temp->unk14,0x28);
+ MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk3C,temp->unk18,0x78);
+ }
+ gUnknown_203B3E8->unk254.unk0 = temp->unk0;
+ gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
+ break;
+ case 10:
+ MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4);
+ MemoryFill8((u8 *)&gUnknown_203B3E8->unk308,0,0xb4);
+ gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
+ break;
+ }
+ if (gUnknown_203B3E8->wonderMailStatus == 0)
+ {
+ switch(gUnknown_203B3E8->unk24C)
+ {
+ case 9:
+ case 10:
+ gUnknown_203B3E8->wonderMailStatus = sub_80381F4(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308);
+ if (sub_800D588() != '\0') {
+ gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk308;
+ }
+ else {
+ gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk254;
+ }
+ break;
+ }
+ }
+ }
+ xxx_call_start_bg_music();
+ break;
+ case PROMPT_PASSWORD_ENTRY:
+ sub_80141B4(gUnknown_80E7C98,0,0,0x101);
+ break;
+ case PASSWORD_ENTRY_SCREEN:
+ sub_8006518(gUnknown_203B3E8->unk1EC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_80151C0(5,gUnknown_203B3E8->PasswordEntryBuffer);
+ break;
+ case PASSWORD_INVALID:
+ sub_8014248(gUnknown_80E7CC4,0,6,&gUnknown_80E78F8,0,4,0,0,0x101);
+ break;
+ }
+}
+
+void SetWonderMailMainMenuState(u8 newState)
+{
+ gUnknown_203B3E8->state = newState;
+ nullsub_54();
+ WonderMailMainMenuCallback();
+}