document some rescue password

This commit is contained in:
Seth Barberee 2022-06-03 17:52:24 -07:00
parent 693159e196
commit 86196330be
6 changed files with 111 additions and 94 deletions

View File

@ -24,6 +24,26 @@ struct RescuePasswordMenu
u32 unk210;
};
#define PASSWORD_ENTRY_DUPLICATE_SOS_MAIL 0x7
#define PASSWORD_ENTRY_DUPLICATE_AOK_MAIL 0x9
#define PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL 0xB
#define PASSWORD_ENTRY_INCORRECT_PASSWORD 0x11
#define PASSWORD_ENTRY_NOT_SOS_MAIL 0x12
#define PASSWORD_ENTRY_NOT_AOK_MAIL 0x13
#define PASSWORD_ENTRY_NOT_THANK_YOU_MAIL 0x14
#define PASSWORD_ENTRY_SOS_MAIL_SUCCESS 0x16
#define PASSWORD_ENTRY_AOK_MAIL_SUCCESS 0x17
#define PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS 0x18
#define PASSWORD_ENTRY_SOS_MAIL_MODE 0x1C
#define PASSWORD_ENTRY_AOK_MAIL_MODE 0x1E
#define PASSWORD_ENTRY_THANK_YOU_MAIL_MODE 0x20
void CreateRescuePasswordMenu(u32 currMenu);
s32 UpdateRescuePasswordMenu(void);
void CleanRescuePasswordMenu(void);

View File

@ -9,6 +9,7 @@
#include "sub_8095228.h"
#include "item.h"
#include "code_8094F88.h"
#include "rescue_password_menu.h"
extern struct TeamInventory *gTeamInventory_203B460;
extern u8 *gUnknown_203B484;
@ -447,44 +448,44 @@ void sub_8033DBC(void)
switch(gUnknown_203B33C->unk528)
{
case 3:
input_var = 0x1C;
input_var = PASSWORD_ENTRY_SOS_MAIL_MODE;
break;
case 0x12:
input_var = 0x1E;
input_var = PASSWORD_ENTRY_AOK_MAIL_MODE;
break;
default:
break;
}
switch(sub_8039068(input_var, gUnknown_203B33C->passwordBuffer, &temp))
{
case 17:
case PASSWORD_ENTRY_INCORRECT_PASSWORD:
sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2290, 0, 4, 0, 0, 0x101);
SetFriendRescueMenuState(0x1B);
break;
case 18:
case PASSWORD_ENTRY_NOT_SOS_MAIL:
sub_80141B4(gUnknown_80E48E8, 0, 0, 0x101);
SetFriendRescueMenuState(8);
break;
case 7:
case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL:
sub_80141B4(gUnknown_80E460C, 0, 0, 0x101);
SetFriendRescueMenuState(8);
break;
case 22:
case PASSWORD_ENTRY_SOS_MAIL_SUCCESS:
sub_8095274(temp.unk10);
temp.mailType = 2;
sub_80951BC(&temp);
sub_80141B4(gUnknown_80E4928, 0, 0, 0x101);
SetFriendRescueMenuState(0x16);
break;
case 19:
case PASSWORD_ENTRY_NOT_AOK_MAIL:
sub_80141B4(gUnknown_80E4964, 0, 0, 0x101);
SetFriendRescueMenuState(8);
break;
case 9:
case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL:
sub_80141B4(gUnknown_80E499C, 0, 0, 0x101);
SetFriendRescueMenuState(8);
break;
case 23:
case PASSWORD_ENTRY_AOK_MAIL_SUCCESS:
temp.mailType = 5;
sub_80951FC(&temp);
temp2 = sub_8095228(sub_809539C(1, temp.unk10));
@ -1340,21 +1341,21 @@ void sub_8034D74(void)
switch(return_var)
{
case 3:
switch(sub_8039068(0x20, gUnknown_203B33C->passwordBuffer, &temp))
switch(sub_8039068(PASSWORD_ENTRY_THANK_YOU_MAIL_MODE, gUnknown_203B33C->passwordBuffer, &temp))
{
case 17:
case PASSWORD_ENTRY_INCORRECT_PASSWORD:
sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2440, 0, 4, 0, 0, 0x101);
SetFriendRescueMenuState(0x74);
break;
case 20:
case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL:
sub_80141B4(gUnknown_80E49C4, 0, 0, 0x101);
SetFriendRescueMenuState(0x6B);
break;
case 11:
case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL:
sub_80141B4(gUnknown_80E4704, 0, 0, 0x101);
SetFriendRescueMenuState(0x6B);
break;
case 24:
case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS:
temp2 = sub_8095228(sub_809539C(4, temp.unk10));
*temp2 = temp;
temp2->mailType = 6;

View File

@ -12,7 +12,7 @@
#include "code_8094F88.h"
#include "wonder_mail.h"
extern u8 gUnknown_202EC50[];
extern u8 gRescuePasswordBuffer[];
extern u32 gUnknown_202EC4C;
extern struct unkStruct_203B484 *gUnknown_203B484;
extern struct UnkTextStruct2 gUnknown_80E71E4;
@ -28,10 +28,10 @@ extern u32 ConvertMenutoRescuePasswordState(u32);
extern void sub_8039174(void);
extern void sub_80155F0(void);
extern void sub_8031E10(void);
extern void sub_8038F98(void);
extern void DisplayPasswordAcceptScreen(void);
extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0);
extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_8095228 *r0);
extern void sub_80951BC(struct unkStruct_8095228 *r0);
extern void sub_80951FC(struct unkStruct_8095228 *r0);
@ -43,7 +43,7 @@ extern void sub_8095274(u32);
extern u32 sub_8031DCC(void);
extern void sub_80391F8(void);
extern void sub_8031E00();
extern void sub_8038DC0(u32);
extern void DisplayRescuePasswordError(u32);
extern struct MainMenu *GetMainMenu(void);
@ -99,7 +99,7 @@ void CreateRescuePasswordMenu(u32 currMenu)
if ((gUnknown_203B368 != 0) || (gUnknown_203B36C != currMenu)) {
for(counter = 0; counter < 0x36; counter++)
{
gUnknown_202EC50[counter] = 0;
gRescuePasswordBuffer[counter] = 0;
}
gUnknown_203B368 = 0;
}
@ -117,7 +117,7 @@ void CreateRescuePasswordMenu(u32 currMenu)
case 0x1C:
case 0x1E:
case 0x20:
sub_80151C0(4, gUnknown_202EC50);
sub_80151C0(4, gRescuePasswordBuffer);
break;
case MENU_DISPLAY_RESCUE_PASSWORD:
temp = sub_8095228(0x1F);
@ -127,7 +127,7 @@ void CreateRescuePasswordMenu(u32 currMenu)
sub_8031D70(0x1F, 0);
break;
case MENU_RESCUE_PASSWORD_ENTRY:
sub_80151C0(4, gUnknown_202EC50);
sub_80151C0(4, gRescuePasswordBuffer);
break;
}
@ -198,53 +198,53 @@ s32 UpdateRescuePasswordMenu(void)
nextMenu = MENU_FRIEND_RESCUE;
break;
case 3:
switch(sub_8039068(gRescuePasswordMenu->currMenu, gUnknown_202EC50, &local_44)) {
case 0x11:
nextMenu = 0x11;
sub_8038DC0(nextMenu);
switch(sub_8039068(gRescuePasswordMenu->currMenu, gRescuePasswordBuffer, &local_44)) {
case PASSWORD_ENTRY_INCORRECT_PASSWORD:
nextMenu = PASSWORD_ENTRY_INCORRECT_PASSWORD;
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0xd:
nextMenu = 0xD;
sub_8038DC0(nextMenu);
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x12:
nextMenu = 0x12;
sub_8038DC0(nextMenu);
case PASSWORD_ENTRY_NOT_SOS_MAIL:
nextMenu = PASSWORD_ENTRY_NOT_SOS_MAIL;
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 7:
nextMenu = 7;
sub_8038DC0(nextMenu);
case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL:
nextMenu = PASSWORD_ENTRY_DUPLICATE_SOS_MAIL;
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x16:
case PASSWORD_ENTRY_SOS_MAIL_SUCCESS:
sub_8095274(local_44.unk10);
sub_8038F98();
DisplayPasswordAcceptScreen();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
local_44.mailType = 2;
sub_80951BC(&local_44);
break;
case 0x13:
nextMenu = 0x13;
sub_8038DC0(nextMenu);
case PASSWORD_ENTRY_NOT_AOK_MAIL:
nextMenu = PASSWORD_ENTRY_NOT_AOK_MAIL;
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 9:
nextMenu = 0x9;
sub_8038DC0(nextMenu);
case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL:
nextMenu = PASSWORD_ENTRY_DUPLICATE_AOK_MAIL;
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x17:
sub_8038F98();
case PASSWORD_ENTRY_AOK_MAIL_SUCCESS:
DisplayPasswordAcceptScreen();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
local_44.mailType = 5;
@ -253,22 +253,20 @@ s32 UpdateRescuePasswordMenu(void)
puVar5->mailType = 7;
MemoryFill8((u8 *)&gUnknown_203B484, 0, sizeof(struct unkStruct_203B484));
break;
default:
break;
case 0x14:
nextMenu = 0x14;
sub_8038DC0(nextMenu);
case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL:
nextMenu = PASSWORD_ENTRY_NOT_THANK_YOU_MAIL;
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0xb:
nextMenu = 0xb;
sub_8038DC0(nextMenu);
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
case 0x18:
sub_8038F98();
case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS:
DisplayPasswordAcceptScreen();
gRescuePasswordMenu->state = 9;
nextMenu = MENU_NO_SCREEN_CHANGE;
puVar6 = sub_8095228(sub_809539C(4, local_44.unk10));
@ -291,7 +289,7 @@ s32 UpdateRescuePasswordMenu(void)
{
case 3:
nextMenu = 0x15;
sub_8038DC0(nextMenu);
DisplayRescuePasswordError(nextMenu);
gRescuePasswordMenu->state = 8;
nextMenu = MENU_NO_SCREEN_CHANGE;
break;
@ -323,7 +321,7 @@ s32 UpdateRescuePasswordMenu(void)
sub_8039174();
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80151C0(4,gUnknown_202EC50);
sub_80151C0(4,gRescuePasswordBuffer);
gRescuePasswordMenu->state = 8;
subtract = gRescuePasswordMenu->currMenu - 0x21;
nextMenu = MENU_FRIEND_RESCUE;
@ -351,7 +349,7 @@ s32 UpdateRescuePasswordMenu(void)
sub_8039174();
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80151C0(4,gUnknown_202EC50);
sub_80151C0(4,gRescuePasswordBuffer);
gRescuePasswordMenu->state = ConvertMenutoRescuePasswordState(gRescuePasswordMenu->currMenu);
subtract = gRescuePasswordMenu->currMenu - 0x21;
nextMenu = 0x2a;
@ -369,35 +367,35 @@ s32 UpdateRescuePasswordMenu(void)
return nextMenu;
}
void sub_8038DC0(u32 param_1)
void DisplayRescuePasswordError(u32 passwordError)
{
sub_8006518(gRescuePasswordMenu->unk1A8);
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80155F0();
switch(param_1) {
case 0x11:
switch(passwordError) {
case PASSWORD_ENTRY_INCORRECT_PASSWORD:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E71FC,gUnknown_80E7214,0,0xd,0);
break;
case 0x12:
case PASSWORD_ENTRY_NOT_SOS_MAIL:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E72EC,gUnknown_80E7304,0,0xd,0);
break;
case 7:
case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7344,gUnknown_80E735C,0,0xd,0);
break;
case 0xd:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7588,gUnknown_80E75A0,0,0xd,0);
break;
case 0x13:
case PASSWORD_ENTRY_NOT_AOK_MAIL:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E73AC,gUnknown_80E73C4,0,0xd,0);
break;
case 9:
case PASSWORD_ENTRY_DUPLICATE_AOK_MAIL:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7408,gUnknown_80E7420,0,0xd,0);
break;
case 0x14:
case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7468,gUnknown_80E7480,0,0xd,0);
break;
case 0xb:
case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL:
SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E74C8,gUnknown_80E74E0,0,0xd,0);
break;
case 0x15:
@ -409,7 +407,7 @@ void sub_8038DC0(u32 param_1)
sub_8035CF4(&gRescuePasswordMenu->unk8,0,1);
}
void sub_8038F98(void)
void DisplayPasswordAcceptScreen(void)
{
sub_8006518(gRescuePasswordMenu->unk1A8);
ResetUnusedInputStruct();
@ -453,51 +451,51 @@ u32 ConvertMenutoRescuePasswordState(u32 unused)
return uVar1;
}
u32 sub_8039068(u32 param_1, u8 *param_2,struct unkStruct_8095228 *param_3)
u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_8095228 *param_3)
{
if ( (!sub_803D204(param_2,param_3)) || (7 < param_3->mailType) ||
if ( (!sub_803D204(passwordBuffer, param_3)) || (7 < param_3->mailType) ||
(param_3->floor >= GetDungeonFloorCount(param_3->dungeon)) ||
(param_3->clientSpecies == SPECIES_NONE) || (SPECIES_RAYQUAZA_CUTSCENE < param_3->clientSpecies) ||
(IsInvalidItemReward(param_3->unk20.itemIndex))) {
return 0x11;
return PASSWORD_ENTRY_INCORRECT_PASSWORD;
}
else
switch(param_1)
switch(mailMode)
{
case 0x1C:
case PASSWORD_ENTRY_SOS_MAIL_MODE:
if (param_3->mailType != WONDER_MAIL_TYPE_SOS) {
return 0x12;
return PASSWORD_ENTRY_NOT_SOS_MAIL;
}
else if ( (sub_80952F0(2, param_3->unk10)) || (sub_80952F0(4, param_3->unk10)) || (sub_80952F0(6, param_3->unk10)) || (sub_8095298(param_3->unk10))) {
return 0x7;
return PASSWORD_ENTRY_DUPLICATE_SOS_MAIL;
}
else if (sub_8095190() == -1) {
return 0xd;
}
else {
return 0x16;
return PASSWORD_ENTRY_SOS_MAIL_SUCCESS;
}
break;
case 0x1E:
case PASSWORD_ENTRY_AOK_MAIL_MODE:
if (param_3->mailType != WONDER_MAIL_TYPE_AOK) {
return 0x13;
return PASSWORD_ENTRY_NOT_AOK_MAIL;
}
else if (!sub_80952F0(1, param_3->unk10)) {
return 0x9;
return PASSWORD_ENTRY_DUPLICATE_AOK_MAIL;
}
else {
return 0x17;
return PASSWORD_ENTRY_AOK_MAIL_SUCCESS;
}
break;
case 0x20:
case PASSWORD_ENTRY_THANK_YOU_MAIL_MODE:
if (param_3->mailType != WONDER_MAIL_TYPE_THANK_YOU) {
return 0x14;
return PASSWORD_ENTRY_NOT_THANK_YOU_MAIL;
}
else if ((!sub_80952F0(4, param_3->unk10)) || (param_3->unk28 != sub_8011C34())) {
return 0xb;
return PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL;
}
else {
return 0x18;
return PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS;
}
break;
default:

View File

@ -8,6 +8,7 @@
#include "memory.h"
#include "menu.h"
#include "input.h"
#include "rescue_password_menu.h"
#include "text.h"
#include "team_inventory.h"
#include "code_800D090.h"
@ -829,25 +830,21 @@ void HandleThankYouMailPasswordMenu(void)
switch(return_var)
{
case 3:
switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp))
switch(sub_8039068(PASSWORD_ENTRY_THANK_YOU_MAIL_MODE,gUnknown_203B2C4->passwordBuffer,&temp))
{
case 0x11:
// Wrong password
case PASSWORD_ENTRY_INCORRECT_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
case PASSWORD_ENTRY_NOT_THANK_YOU_MAIL:
sub_80141B4(gUnknown_80DF208, 0, &gUnknown_203B2C4->faceFile, 0x10d);
SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR);
break;
case 0xB:
// Not eligible to receive
case PASSWORD_ENTRY_DUPLICATE_THANK_YOU_MAIL:
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
case PASSWORD_ENTRY_THANK_YOU_MAIL_SUCCESS:
uVar1 = sub_809539C(4,temp.unk10);
puVar5 = sub_8095228(uVar1);
*puVar5 = temp;

View File

@ -9,6 +9,7 @@
#include "menu.h"
#include "text.h"
#include "team_inventory.h"
#include "rescue_password_menu.h"
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
@ -1459,21 +1460,21 @@ void sub_80293F4(void)
switch(return_var)
{
case 3:
switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp))
switch(sub_8039068(PASSWORD_ENTRY_SOS_MAIL_MODE, (gUnknown_203B2C0->passwordBuffer), &temp))
{
case 17:
case PASSWORD_ENTRY_INCORRECT_PASSWORD:
sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile, 0xC);
sub_8028B04(40);
break;
case 18:
case PASSWORD_ENTRY_NOT_SOS_MAIL:
sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, &gUnknown_203B2C0->faceFile, 0x10d);
sub_8028B04(7);
break;
case 7:
case PASSWORD_ENTRY_DUPLICATE_SOS_MAIL:
sub_80141B4(gWonderMailDuplicateText, 0, &gUnknown_203B2C0->faceFile, 0x10d);
sub_8028B04(7);
break;
case 22:
case PASSWORD_ENTRY_SOS_MAIL_SUCCESS:
sub_8095274(temp.unk10);
temp.mailType = 2;
sub_80951BC(&temp);

View File

@ -537,7 +537,7 @@ gUnknown_202EC48 = .; /* 202EC48 */
gUnknown_202EC4C = .; /* 202EC4C */
. += 0x4;
gUnknown_202EC50 = .; /* 202EC50 */
gRescuePasswordBuffer = .; /* 202EC50 */
. += 0x38;
gDungeonNameBannerPalette = .; /* 202EC88 */