diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_8041AD0.c | 4 | ||||
-rw-r--r-- | src/code_80521D0_1.c | 10 | ||||
-rw-r--r-- | src/code_8057824_1.c | 72 | ||||
-rw-r--r-- | src/code_80869E4.c | 2 | ||||
-rw-r--r-- | src/code_8086A3C.c | 124 | ||||
-rw-r--r-- | src/ds_menus.c | 11 | ||||
-rw-r--r-- | src/felicity_bank.c | 2 | ||||
-rw-r--r-- | src/thank_you_wonder_mail.c | 1723 | ||||
-rw-r--r-- | src/wonder_mail.c | 1113 | ||||
-rw-r--r-- | src/wonder_mail_2.c | 336 | ||||
-rw-r--r-- | src/wonder_mail_main_menu.c | 300 |
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(); +} |