summaryrefslogtreecommitdiff
path: root/src/wonder_mail_main_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wonder_mail_main_menu.c')
-rw-r--r--src/wonder_mail_main_menu.c171
1 files changed, 88 insertions, 83 deletions
diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c
index 2b475a8..d6d6c2d 100644
--- a/src/wonder_mail_main_menu.c
+++ b/src/wonder_mail_main_menu.c
@@ -3,30 +3,35 @@
#include "memory.h"
#include "text.h"
#include "input.h"
+#include "wonder_mail.h"
+#define WONDER_MAIL_MAIN_SCREEN 4
#define EXIT_TO_MAIN_MENU 5
+#define COMMUNICATION_ERROR 10
#define PASSWORD_SUCCESS 13
+#define PREPARE_SAVE 14
+#define SAVE_ADVENTURE 15
+#define WONDER_MAIL_ADDED 16
+#define PROMPT_PASSWORD_ENTRY 17
#define PASSWORD_INVALID 19
#define PASSWORD_ENTRY_SCREEN 18
-struct unkWonderMailData
-{
- u8 unk0[20];
-};
-
struct unkStruct_203B3E8
{
// size: 0x49C
- u8 unk0; // state variable?
- u8 PasswordEntryBuffer[0x36]; // Wonder Mail Buffer...
- struct unkWonderMailData unk38; // 0x30 - 0x14
- u8 unk38_1[0x30 - 20]; // TODO: split for the ldm/stm stuff (fix dumb hack)
+ u8 state; // state variable?
+ u8 PasswordEntryBuffer[PASSWORD_BUFFER_SIZE]; // Wonder Mail Buffer...
+ union UNK38
+ {
+ struct WonderMail decodedMail; // 0x14
+ u8 unk38_u8[0x30]; // idk why it fills to 0x30 instead...
+ } UNK38;
u8 fill68[0x1EC - 0x68];
struct UnkTextStruct2 unk1EC[4];
u32 unk24C;
u32 wonderMailStatus;
u8 fill254[0x3C0 - 0x254];
- struct unkWonderMailData unk3C0; // 0x3C0 + 0x14
+ struct WonderMail unk3C0;
u8 fill3D0[0x490 - 0x3D4];
u32 unk490;
u32 unk494;
@@ -40,7 +45,7 @@ extern u32 sub_8095324(u32);
extern u32 sub_80144A4(s32 *);
extern u32 sub_8011C1C(void);
extern struct unkStruct_203B3E8 *gUnknown_203B3E8;
-extern void sub_803A1C0(u8);
+extern void SetWonderMailMainMenuState(u8);
extern void sub_8030DE4(void);
extern void sub_801B450(void);
extern void sub_803084C(void);
@@ -53,25 +58,25 @@ extern u8 sub_802D178();
extern void sub_802D184();
extern s32 sub_80154F0();
-extern bool8 sub_803D358(u8 *, void *);
-extern bool8 sub_80959C0(void *);
+extern bool8 DecodeWonderMailPassword(u8 *, struct WonderMail *);
+extern bool8 IsValidWonderMail(struct WonderMail *WonderMailData);
extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
void sub_8039BAC(u32);
-void sub_8039A18(void);
+void HandleWonderMailMainScreen(void);
void sub_8039AA8(void);
void sub_8039B14(void);
void sub_8039B20(void);
void sub_8039B58(void);
void sub_8039D88(void);
-void sub_8039D28(void);
-void sub_8039D68(void);
-void sub_8039DA4(void);
-void sub_8039DCC(void);
+void HandlePasswordSuccess(void);
+void HandlePrepareSaveScreen(void);
+void HandleSaveAdventureScreen(void);
+void HandleWonderMailAddedScreen(void);
void sub_8039B3C(void);
void sub_8039D0C(void);
-void sub_8039C60(void);
-void sub_8039DE8(void);
+void HandlePasswordEntryScreen(void);
+void HandleInvalidPasswordMenu(void);
extern u32 gUnknown_80E7914;
@@ -95,7 +100,7 @@ bool8 CreateWonderMailMenu(void)
gUnknown_203B3E8 = MemoryAlloc(sizeof(struct unkStruct_203B3E8), 8);
MemoryFill8((u8 *)gUnknown_203B3E8, 0, sizeof(struct unkStruct_203B3E8));
- for(iVar2 = 0; iVar2 < 0x36; iVar2++){
+ for(iVar2 = 0; iVar2 < PASSWORD_BUFFER_SIZE; iVar2++){
gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0;
}
@@ -103,15 +108,15 @@ bool8 CreateWonderMailMenu(void)
gUnknown_203B3E8->unk494 = 2;
gUnknown_203B3E8->unk498 = 1;
gUnknown_203B3E8->unk490 = 5; // ??? Why?
- sub_803A1C0(0x11); // 0x11 -> Display "Enter Wonder Mail Password"
+ SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY); // -> Display "Enter Wonder Mail Password"
return 1;
}
u8 UpdateWonderMailMenu(void)
{
- switch(gUnknown_203B3E8->unk0) {
- case 4:
- sub_8039A18();
+ switch(gUnknown_203B3E8->state) {
+ case WONDER_MAIL_MAIN_SCREEN:
+ HandleWonderMailMainScreen();
break;
case EXIT_TO_MAIN_MENU: // When you exit out of the menu
return 3;
@@ -133,28 +138,28 @@ u8 UpdateWonderMailMenu(void)
sub_8039D88();
break;
case PASSWORD_SUCCESS:
- sub_8039D28();
+ HandlePasswordSuccess();
break;
- case 14:
- sub_8039D68();
+ case PREPARE_SAVE:
+ HandlePrepareSaveScreen();
break;
- case 15: // Saving adventure
- sub_8039DA4();
+ case SAVE_ADVENTURE: // Saving adventure
+ HandleSaveAdventureScreen();
break;
- case 16: // Display "Recieved Wonder Mail was added" and go back to main menu
- sub_8039DCC();
+ case WONDER_MAIL_ADDED: // Display "Recieved Wonder Mail was added" and go back to main menu
+ HandleWonderMailAddedScreen();
break;
- case 10:
+ case COMMUNICATION_ERROR:
sub_8039B3C();
break;
- case 17: // "Please enter the Wonder Mail Password" Screen
+ case PROMPT_PASSWORD_ENTRY: // "Please enter the Wonder Mail Password" Screen
sub_8039D0C();
break;
case PASSWORD_ENTRY_SCREEN: // Password Entry
- sub_8039C60();
+ HandlePasswordEntryScreen();
break;
case PASSWORD_INVALID:
- sub_8039DE8();
+ HandleInvalidPasswordMenu();
}
return 0;
}
@@ -173,25 +178,25 @@ void CleanWonderMailMenu(void)
}
}
-void sub_8039A18(void)
+void HandleWonderMailMainScreen(void)
{
- s32 local_8;
+ s32 menuAction;
- if (sub_80144A4(&local_8) == 0) {
+ if (sub_80144A4(&menuAction) == 0) {
gUnknown_203B3E8->unk24C = 10;
- switch(local_8) {
+ switch(menuAction) {
case 3:
case 4:
gUnknown_203B3E8->unk490 = 3;
- sub_803A1C0(8);
+ SetWonderMailMainMenuState(8);
break;
case 5:
gUnknown_203B3E8->unk490 = 5;
- sub_803A1C0(17);
+ SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY);
break;
case 0:
case 8:
- sub_803A1C0(EXIT_TO_MAIN_MENU);
+ SetWonderMailMainMenuState(EXIT_TO_MAIN_MENU);
break;
}
}
@@ -199,24 +204,24 @@ void sub_8039A18(void)
void sub_8039AA8(void)
{
- s32 local_8;
+ s32 menuAction;
- if (sub_80144A4(&local_8) == 0) {
- switch(local_8){
+ if (sub_80144A4(&menuAction) == 0) {
+ switch(menuAction){
case 6:
if (gUnknown_203B3E8->unk494 == 1) {
- sub_803A1C0(2);
+ SetWonderMailMainMenuState(2);
}
else {
- sub_803A1C0(12);
+ SetWonderMailMainMenuState(12);
}
break;
case 0:
if (gUnknown_203B3E8->unk494 == 1) {
- sub_803A1C0(1);
+ SetWonderMailMainMenuState(1);
}
else {
- sub_803A1C0(4);
+ SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN);
}
break;
}
@@ -225,7 +230,7 @@ void sub_8039AA8(void)
void sub_8039B14(void)
{
- sub_803A1C0(6);
+ SetWonderMailMainMenuState(6);
}
void sub_8039B20(void)
@@ -233,7 +238,7 @@ void sub_8039B20(void)
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
- sub_803A1C0(9);
+ SetWonderMailMainMenuState(9);
}
}
@@ -242,7 +247,7 @@ void sub_8039B3C(void)
s32 local_8;
if (sub_80144A4(&local_8) == 0) {
- sub_803A1C0(4);
+ SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN);
}
}
@@ -254,16 +259,16 @@ void sub_8039B58(void)
if (gUnknown_203B3E8->wonderMailStatus == 0) {
switch(gUnknown_203B3E8->unk24C){
case 9:
- sub_803A1C0(7);
+ SetWonderMailMainMenuState(7);
break;
case 10:
- sub_803A1C0(PASSWORD_SUCCESS);
+ SetWonderMailMainMenuState(PASSWORD_SUCCESS);
break;
}
}
else {
sub_8039BAC(gUnknown_203B3E8->wonderMailStatus);
- sub_803A1C0(10);
+ SetWonderMailMainMenuState(COMMUNICATION_ERROR);
}
}
}
@@ -305,7 +310,7 @@ void sub_8039BAC(u32 arg)
case 7:
case 8:
case 9:
- case 10:
+ case COMMUNICATION_ERROR:
case 11:
case 12:
case PASSWORD_SUCCESS:
@@ -317,36 +322,36 @@ void sub_8039BAC(u32 arg)
}
}
-void sub_8039C60(void)
+void HandlePasswordEntryScreen(void)
{
int iVar2;
iVar2 = sub_80154F0();
- MemoryFill8((u8 *)&gUnknown_203B3E8->unk38, 0, 0x30);
+ MemoryFill8(gUnknown_203B3E8->UNK38.unk38_u8, 0, sizeof(gUnknown_203B3E8->UNK38));
switch(iVar2){
case 3:
sub_80155F0();
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B3E8->unk1EC,1,1);
- if ( !sub_803D358(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->unk38) || !sub_80959C0(&gUnknown_203B3E8->unk38) )
+ if ( !DecodeWonderMailPassword(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->UNK38.decodedMail) || !IsValidWonderMail(&gUnknown_203B3E8->UNK38.decodedMail) )
{
// Invalid password
- sub_803A1C0(PASSWORD_INVALID);
+ SetWonderMailMainMenuState(PASSWORD_INVALID);
}
else {
// Successful password
// Copy the decoded data to another buffer?
- gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk38;
+ gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->UNK38.decodedMail;
gUnknown_203B3E8->unk498 = 1;
- sub_803A1C0(PASSWORD_SUCCESS);
+ SetWonderMailMainMenuState(PASSWORD_SUCCESS);
}
- break;
+ break;
case 2:
sub_80155F0();
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B3E8->unk1EC,1,1);
- sub_803A1C0(EXIT_TO_MAIN_MENU);
+ SetWonderMailMainMenuState(EXIT_TO_MAIN_MENU);
break;
}
}
@@ -356,31 +361,31 @@ void sub_8039D0C(void)
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
- sub_803A1C0(PASSWORD_ENTRY_SCREEN);
+ SetWonderMailMainMenuState(PASSWORD_ENTRY_SCREEN);
}
}
-void sub_8039D28(void)
+void HandlePasswordSuccess(void)
{
if (sub_802D0E0() == 3) {
gUnknown_203B3E8->unk498 = sub_802D178();
sub_802D184();
if (gUnknown_203B3E8->unk498 != 0) {
- sub_803A1C0(0xe);
+ SetWonderMailMainMenuState(PREPARE_SAVE);
}
else {
- sub_803A1C0(0x10);
+ SetWonderMailMainMenuState(WONDER_MAIL_ADDED);
}
}
}
-void sub_8039D68(void)
+void HandlePrepareSaveScreen(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
- sub_803A1C0(0xF);
- PrepareSavePakWrite(0); // "Saving Adventure.."
+ SetWonderMailMainMenuState(SAVE_ADVENTURE);
+ PrepareSavePakWrite(SPECIES_NONE); // "Saving Adventure.."
}
}
@@ -389,11 +394,11 @@ void sub_8039D88(void)
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
- sub_803A1C0(8);
+ SetWonderMailMainMenuState(8);
}
}
-void sub_8039DA4(void)
+void HandleSaveAdventureScreen(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
@@ -401,34 +406,34 @@ void sub_8039DA4(void)
if(!WriteSavePak())
{
FinishWriteSavePak();
- sub_803A1C0(0x10);
+ SetWonderMailMainMenuState(WONDER_MAIL_ADDED);
}
}
}
-void sub_8039DCC(void)
+void HandleWonderMailAddedScreen(void)
{
int iVar2;
if(sub_80144A4(&iVar2) == 0)
{
- sub_803A1C0(EXIT_TO_MAIN_MENU);
+ SetWonderMailMainMenuState(EXIT_TO_MAIN_MENU);
}
}
-void sub_8039DE8(void)
+void HandleInvalidPasswordMenu(void)
{
- int iVar2;
+ s32 menuAction;
// Prompt to re-enter password
- if(sub_80144A4(&iVar2) == 0)
+ if(sub_80144A4(&menuAction) == 0)
{
- switch(iVar2)
+ switch(menuAction)
{
case 6: // Yes
- sub_803A1C0(0x11);
+ SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY);
break;
case 0: // No
- sub_803A1C0(EXIT_TO_MAIN_MENU);
+ SetWonderMailMainMenuState(EXIT_TO_MAIN_MENU);
break;
}
}