diff options
Diffstat (limited to 'src/wonder_mail_main_menu.c')
-rw-r--r-- | src/wonder_mail_main_menu.c | 171 |
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; } } |