summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-09-01 18:05:30 -0700
committerGitHub <noreply@github.com>2021-09-01 18:05:30 -0700
commitdb05ce306fa55c9d64b7123e47cf2b66416afe40 (patch)
treefa0258192daa7a0319a425a688e1c56a8ed67ab2 /src
parent459171cf48157699e044b66b8274e500ecd5fe0d (diff)
More PMD grind (#50)
* more sese grind * match sub_802ABF8 * some more work
Diffstat (limited to 'src')
-rw-r--r--src/code_801AFA4.c9
-rw-r--r--src/code_801DCC4.c39
-rw-r--r--src/code_8041AD0.c5
-rw-r--r--src/code_80958E8.c1
-rw-r--r--src/code_80A26CC.c49
-rw-r--r--src/debug_menu_2.c3
-rw-r--r--src/debug_menu_mid.c24
-rw-r--r--src/friend_area_action_menu.c10
-rw-r--r--src/friend_area_action_menu_1.c22
-rw-r--r--src/friend_rescue_1.c9
-rw-r--r--src/gulpin_shop.c45
-rw-r--r--src/gulpin_shop_1.c79
-rw-r--r--src/kangaskhan_storage_2.c15
-rw-r--r--src/personality_test.c38
-rw-r--r--src/rescue_password_menu.c93
-rw-r--r--src/rescue_password_menu_1.c33
-rw-r--r--src/trade_items_menu.c26
-rw-r--r--src/wonder_mail.c20
-rw-r--r--src/wonder_mail_2.c456
-rw-r--r--src/wonder_mail_3.c13
-rw-r--r--src/wonder_mail_3_1.c15
-rw-r--r--src/wonder_mail_main_menu.c1
-rw-r--r--src/wonder_mail_pre.c310
23 files changed, 1064 insertions, 251 deletions
diff --git a/src/code_801AFA4.c b/src/code_801AFA4.c
index c9d71dd..b7b9234 100644
--- a/src/code_801AFA4.c
+++ b/src/code_801AFA4.c
@@ -3,6 +3,7 @@
#include "text.h"
#include "item.h"
#include "team_inventory.h"
+#include "menu.h"
extern struct TeamInventory *gTeamInventory_203B460;
@@ -30,7 +31,7 @@ extern void sub_801B178(void);
extern void sub_8094060(u32 *, u32 *);
extern void PlaySound(u32);
extern void sub_80141B4(u32 *, u32, u32 ,u32);
-extern void sub_8014248(u32 *, u32, u32, u32 *, u32, u32, u32, u32, u32);
+extern void sub_8014248(u32 *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32);
struct subStruct_203B22C
{
@@ -51,13 +52,13 @@ struct unkStruct_203B22C
u16 unk5A;
struct subStruct_203B22C *unk5C;
u32 unk60;
- u32 unk64;
+ /* 0x64 */ struct MenuItem menuItems[8];
};
extern struct unkStruct_203B22C *gUnknown_203B22C;
u32 sub_801AFA4(u32 r0)
{
- gUnknown_203B22C = MemoryAlloc(0xA4, 8);
+ gUnknown_203B22C = MemoryAlloc(sizeof(struct unkStruct_203B22C), 8);
gUnknown_203B22C->unk4 = r0;
gUnknown_203B22C->unk8 = gTeamInventory_203B460->teamItems[r0].itemIndex;
gUnknown_203B22C->unkA = GetItemMove(gUnknown_203B22C->unk8);
@@ -122,7 +123,7 @@ void sub_801B080(void)
sub_801B178();
// #+Who will learn the move
// #+#C5$m7#R?
- sub_8014248(&gUnknown_80DB9BC, 0, gUnknown_203B22C->unk60, &gUnknown_203B22C->unk64, 0, 4, 0, 0, 0x20);
+ sub_8014248(&gUnknown_80DB9BC, 0, gUnknown_203B22C->unk60, gUnknown_203B22C->menuItems, 0, 4, 0, 0, 0x20);
break;
case 1:
DisplayGulpinDialogueSprite(2, gUnknown_203B22C->unk58, &gUnknown_203B22C->unkC);
diff --git a/src/code_801DCC4.c b/src/code_801DCC4.c
index 0fde1a2..a17b3b9 100644
--- a/src/code_801DCC4.c
+++ b/src/code_801DCC4.c
@@ -13,8 +13,7 @@ struct unkStruct_203B25C
u32 unk18;
const char *unk1C;
u8 fill20[0x6C - 0x20];
- struct MenuItem unk6C[3];
- u8 fill84[0xAC - 0x84];
+ struct MenuItem menuItems[8];
u16 unkAC[8];
struct UnkTextStruct2 unkBC[4];
};
@@ -137,7 +136,7 @@ void sub_801DD84(void)
// TODO probably could be cleaned up to actually match
iVar3 = 0;
if (gUnknown_203B25C->unkAC[iVar3] == 0) {
- gUnknown_203B25C->unk18 = gUnknown_203B25C->unk6C[iVar3].menuAction;
+ gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction;
}
else {
do {
@@ -145,7 +144,7 @@ void sub_801DD84(void)
if(iVar3 > 7)
break;
if(gUnknown_203B25C->unkAC[iVar3] == 0){
- gUnknown_203B25C->unk18 = gUnknown_203B25C->unk6C[iVar3].menuAction;
+ gUnknown_203B25C->unk18 = gUnknown_203B25C->menuItems[iVar3].menuAction;
break;
}
} while (iVar3 < 8);
@@ -155,7 +154,7 @@ void sub_801DD84(void)
gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFCC;
}
gUnknown_203B25C->unkBC[0] = gUnknown_80DBFB0;
- sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->unk6C);
+ sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems);
gUnknown_203B25C->unkBC[0].unk0c = 0xA;
break;
case 1:
@@ -165,7 +164,7 @@ void sub_801DD84(void)
gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0;
}
gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC;
- sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->unk6C);
+ sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->menuItems);
gUnknown_203B25C->unkBC[0].unk0c = 0xA;
break;
default:
@@ -353,7 +352,7 @@ void sub_801DED0(void)
case 0:
case 1:
gUnknown_203B25C->unk1C = gOthers_MenuOption;
- sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->unk6C,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->unk18,0);
+ sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->menuItems,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->unk18,0);
break;
case 3:
sub_801E3F0(0);
@@ -372,7 +371,7 @@ void sub_801DED0(void)
case 7:
CreateChangeSettingsConfirmMenu();
// Change settings?
- sub_8014248(gUnknown_80DBFEC,0,4,gUnknown_203B25C->unk6C,0,4,0,0,0x20);
+ sub_8014248(gUnknown_80DBFEC,0,4,gUnknown_203B25C->menuItems,0,4,0,0,0x20);
break;
}
}
@@ -388,13 +387,13 @@ void CreateOthersMenu(void)
// This is dumb that I have to squeeze this in like this
preload = gUnknown_203B25C;
blankText = NULL;
- preload->unk6C[0].text = gOthers_GameOptions;
- preload->unk6C[0].menuAction = MENU_OPTION_GAMEOPTIONS;
+ preload->menuItems[0].text = gOthers_GameOptions;
+ preload->menuItems[0].menuAction = MENU_OPTION_GAMEOPTIONS;
defaultAction = MENU_OPTION_DEFAULT;
- preload->unk6C[1].text = gOthers_Hints;
- preload->unk6C[1].menuAction = MENU_OPTION_HINTS;
- preload->unk6C[2].text = blankText;
- preload->unk6C[2].menuAction = defaultAction;
+ preload->menuItems[1].text = gOthers_Hints;
+ preload->menuItems[1].menuAction = MENU_OPTION_HINTS;
+ preload->menuItems[2].text = blankText;
+ preload->menuItems[2].menuAction = defaultAction;
}
void CreateChangeSettingsConfirmMenu(void)
@@ -408,13 +407,13 @@ void CreateChangeSettingsConfirmMenu(void)
// This is dumb that I have to squeeze this in like this
preload = gUnknown_203B25C;
blankText = NULL;
- preload->unk6C[0].text = *gUnknown_80D4920; // Yes
- preload->unk6C[0].menuAction = MENU_OPTION_YES;
+ preload->menuItems[0].text = *gUnknown_80D4920; // Yes
+ preload->menuItems[0].menuAction = MENU_OPTION_YES;
defaultAction = MENU_OPTION_DEFAULT;
- preload->unk6C[1].text = *gUnknown_80D4928; // No
- preload->unk6C[1].menuAction = MENU_OPTION_NO;
- preload->unk6C[2].text = blankText;
- preload->unk6C[2].menuAction = defaultAction;
+ preload->menuItems[1].text = *gUnknown_80D4928; // No
+ preload->menuItems[1].menuAction = MENU_OPTION_NO;
+ preload->menuItems[2].text = blankText;
+ preload->menuItems[2].menuAction = defaultAction;
}
void HandleOthersMenu(void)
diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c
index 738b881..b411a26 100644
--- a/src/code_8041AD0.c
+++ b/src/code_8041AD0.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "code_8041D5C.h"
+#include "gUnknown_203B418.h"
struct unkStruct_80420E8
{
@@ -8,7 +9,7 @@ struct unkStruct_80420E8
u32 unk8;
};
-extern u8 *gUnknown_203B418;
+extern struct unkStruct_203B418 *gUnknown_203B418;
extern void sub_803ED30(u8, struct unkDungeon_8041D5C *r0, u8, u8);
@@ -593,7 +594,7 @@ void sub_80420E8(struct unkDungeon_8041D5C *r0, struct unkStruct_80420E8 *r1)
u32 temp;
u32 arg;
temp = r1->unk8;
- if(gUnknown_203B418[0x16d] != 0)
+ if(gUnknown_203B418->unk16D != 0)
temp = sub_806F62C(r1->unk8);
switch(temp)
{
diff --git a/src/code_80958E8.c b/src/code_80958E8.c
index 72cc735..f32a41b 100644
--- a/src/code_80958E8.c
+++ b/src/code_80958E8.c
@@ -3,6 +3,7 @@
#include "item.h"
#include "friend_area.h"
#include "constants/friend_area.h"
+#include "sub_8095228.h"
#include "wonder_mail.h"
#include "constants/wonder_mail.h"
diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c
index 110c278..bc5f60e 100644
--- a/src/code_80A26CC.c
+++ b/src/code_80A26CC.c
@@ -69,24 +69,13 @@ u32 sub_80A2688(u8 r0, u32 r1)
// u8 cast is needed for only this compare
if ((u8)uVar1 < 0x17)
- {
return uVar1;
- }
+ else if(r0 == 0x2F)
+ return 0x17;
+ else if (r0 == 0x30)
+ return 0x18;
else
- {
- if(r0 == 0x2F)
- {
- return 0x17;
- }
- else if (r0 == 0x30)
- {
- return 0x18;
- }
- else
- {
- return -1;
- }
- }
+ return -1;
}
s16 sub_80A26B8(s16 r0)
@@ -151,7 +140,7 @@ u8 sub_80A2740(s16 r0)
return temp->unkC;
}
-u32 sub_80A2750(s16 r0)
+s16 sub_80A2750(s16 r0)
{
struct unkStruct_80A2608 *temp;
s32 temp_32;
@@ -184,7 +173,7 @@ u32 sub_80A2750(s16 r0)
return 2;
}
-u32 sub_80A27CC(s16 r0)
+u8 sub_80A27CC(s16 r0)
{
s32 temp;
s32 temp2;
@@ -208,15 +197,13 @@ u32 sub_80A27CC(s16 r0)
return 1;
}
-u32 sub_80A2824(u8 r0)
+u8 sub_80A2824(u8 r0)
{
s32 counter;
struct unkStruct_80A2608 *temp;
if(sub_80023E4(5) != 0)
- {
return 0;
- }
if(sub_80023E4(1) != 0)
{
for(counter = 0; counter <= 0x2D; counter++)
@@ -227,13 +214,9 @@ u32 sub_80A2824(u8 r0)
if(temp->unkC == r0)
{
if(sub_8097384(counter) != 0)
- {
return 1;
- }
if(sub_80973F4(counter) != 0)
- {
return 1;
- }
}
}
}
@@ -244,15 +227,9 @@ u32 sub_80A2824(u8 r0)
{
temp = sub_80A2620(counter);
if(temp->unk11 != 0)
- {
if(temp->unkC == r0)
- {
if(sub_8097384(counter) != 0)
- {
return 1;
- }
- }
- }
}
}
return 0;
@@ -267,13 +244,9 @@ u32 sub_80A28B4(s16 r0)
if(temp->unk0 != -1)
{
if(sub_8097384(r0) == 0 && sub_80973F4(r0) == 0)
- {
return 0;
- }
else
- {
return 1;
- }
}
return 0;
}
@@ -283,7 +256,7 @@ u32 sub_80A28F0(u8 r0)
s32 counter;
struct unkStruct_80A2608 *temp;
- for(counter = 0; counter <= 0x2D; counter++)
+ for(counter = 0; counter < 0x2E; counter++)
{
temp = sub_80A2620(counter);
if(temp->unk11 != 0)
@@ -291,13 +264,9 @@ u32 sub_80A28F0(u8 r0)
if(temp->unkC == r0)
{
if(sub_8097384(counter) != 0)
- {
return 1;
- }
if(sub_80973F4(counter) != 0)
- {
return 1;
- }
}
}
}
diff --git a/src/debug_menu_2.c b/src/debug_menu_2.c
index dbcb60e..0704581 100644
--- a/src/debug_menu_2.c
+++ b/src/debug_menu_2.c
@@ -24,8 +24,7 @@ struct unkStruct_203B3F8
u32 unk7C;
u32 unk80;
u8 fill84[0x90 - 0x84];
- struct MenuItem unk90[3];
- u8 fillA8[0xD0 - 0xA8];
+ struct MenuItem unk90[8];
u16 unkD0[8];
struct UnkTextStruct2 unkE0[4];
};
diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c
index 5244c4b..a07b6c5 100644
--- a/src/debug_menu_mid.c
+++ b/src/debug_menu_mid.c
@@ -13,8 +13,7 @@ struct unkStruct_203B3F0
u8 itemIndex;
u8 fill5[0x8 - 5];
u32 unk8;
- struct MenuItem menus[3];
- u8 fill24[0x4C - 0x24];
+ struct MenuItem menuItems[8];
u32 unk4C;
u8 fill50[0x9C - 0x50];
u32 unk9C;
@@ -39,8 +38,7 @@ struct unkStruct_203B3F4
u8 unk4;
u8 fill5[0x8 - 5];
u32 unk8;
- struct MenuItem menus[3];
- u8 fill24[0x4C - 0x24];
+ struct MenuItem menuItems[8];
u32 unk4C;
u8 fill50[0x9C - 0x50];
struct UnkTextStruct2 unk9C[4];
@@ -193,7 +191,7 @@ void sub_803A5A0(void)
case 2:
sub_801CCD8();
sub_803A6F0();
- sub_8012D60(&gUnknown_203B3F0->unk4C, gUnknown_203B3F0->menus, 0, 0, gUnknown_203B3F0->unk8, 2);
+ sub_8012D60(&gUnknown_203B3F0->unk4C, gUnknown_203B3F0->menuItems, 0, 0, gUnknown_203B3F0->unk8, 2);
break;
case 3:
gUnknown_203B3F0->unkAC = 3;
@@ -232,20 +230,20 @@ void sub_803A6F0(void)
s32 temp1;
struct unkStruct_203B3F0 *preload;
- gUnknown_203B3F0->menus[0].text = &gDebug_NumberText;
- gUnknown_203B3F0->menus[0].menuAction = 2;
+ gUnknown_203B3F0->menuItems[0].text = &gDebug_NumberText;
+ gUnknown_203B3F0->menuItems[0].menuAction = 2;
gUnknown_203B3F0->unk8 = 2;
if (!IsNotMoneyOrUsedTMItem(gUnknown_203B3F0->itemIndex)) {
- gUnknown_203B3F0->menus[0].menuAction = -1;
+ gUnknown_203B3F0->menuItems[0].menuAction = -1;
gUnknown_203B3F0->unk8 = 3;
}
preload = gUnknown_203B3F0;
// this var gets loaded in between the sets... very dumb
temp1 = 1;
- preload->menus[1].text = *gUnknown_80D4970;
- preload->menus[1].menuAction = 3;
- preload->menus[2].text = NULL;
- preload->menus[2].menuAction = temp1;
+ preload->menuItems[1].text = *gUnknown_80D4970;
+ preload->menuItems[1].menuAction = 3;
+ preload->menuItems[2].text = NULL;
+ preload->menuItems[2].menuAction = temp1;
}
void sub_803A740(void)
@@ -403,7 +401,7 @@ void sub_803A9AC(void)
case 2:
sub_8021494();
sub_803AA34();
- sub_8012D60(&gUnknown_203B3F4->unk4C,gUnknown_203B3F4->menus,0,0,gUnknown_203B3F4->unk8,2);
+ sub_8012D60(&gUnknown_203B3F4->unk4C,gUnknown_203B3F4->menuItems,0,0,gUnknown_203B3F4->unk8,2);
break;
case 3:
sub_8021774(gUnknown_203B3F4->unk4,1,0);
diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c
index 20beb31..3ffed40 100644
--- a/src/friend_area_action_menu.c
+++ b/src/friend_area_action_menu.c
@@ -20,7 +20,7 @@ extern const char gUnknown_80DD8D0[];
extern void sub_80141B4(const char *r0, u32, u32 *r1, u32);
extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32);
extern void sub_8012D60(u32 *, struct MenuItem *, u32, u32 *, u32, u32);
-extern void sub_8027D40(u32, u8 *);
+extern void sub_8027D40(u32, struct ItemSlot *);
extern void sub_8023868(u32, u32, u32, u32);
extern void sub_8023B7C(u32);
extern void sub_8023DA4();
@@ -38,7 +38,7 @@ extern void sub_809401C(u32 *, u32 *);
extern void sub_801EE10(u32, s16, u32 *, u32, u32, u32);
extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
-extern void sub_8027184(u32);
+extern void SetFriendAreaActionMenuState(u32);
extern void ResetSprites(u8 );
extern void sub_802719C();
extern void sub_8027274();
@@ -65,7 +65,7 @@ u32 sub_8027074(void)
gUnknown_203B2BC->unk70 = 0;
gUnknown_203B2BC->unk74 = 0;
gUnknown_203B2BC->unk78 = 0;
- sub_8027184(0);
+ SetFriendAreaActionMenuState(0);
return 1;
}
@@ -73,7 +73,7 @@ u32 sub_80270A4(void)
{
switch(gUnknown_203B2BC->state) {
case 0:
- sub_8027184(1);
+ SetFriendAreaActionMenuState(1);
break;
case 1:
case 2:
@@ -129,7 +129,7 @@ void sub_8027168(void)
}
}
-void sub_8027184(u32 newState)
+void SetFriendAreaActionMenuState(u32 newState)
{
gUnknown_203B2BC->state = newState;
sub_802719C();
diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c
index f35bcfa..a848fff 100644
--- a/src/friend_area_action_menu_1.c
+++ b/src/friend_area_action_menu_1.c
@@ -14,14 +14,14 @@ void sub_801B450();
u32 sub_801EF38(u8 r0);
void sub_801F214();
-extern void sub_8027184(u32);
+extern void SetFriendAreaActionMenuState(u32);
extern u8 sub_8012FD8(u32 *r0);
extern void sub_8013114(u32 *, s32 *);
extern void PlaySound(u32);
extern void ShiftItemsDownFrom(u32);
extern void FillInventoryGaps();
extern void nullsub_104();
-extern void sub_8091274(u8 *);
+extern void sub_8091274(struct ItemSlot *);
extern void sub_801A928();
extern void sub_8099690(u32);
extern void GivePokemonItem(s16, struct HeldItem *);
@@ -41,7 +41,7 @@ void sub_8027AE4(void)
{
case 1:
case 3:
- sub_8027184(2);
+ SetFriendAreaActionMenuState(2);
break;
case 2:
sub_8027EB8();
@@ -59,18 +59,18 @@ void sub_8027B28(void)
gUnknown_203B2BC->unkC = sub_801A8AC();
gUnknown_203B2BC->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2BC->unkC].itemIndex;
gUnknown_203B2BC->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2BC->unkC].numItems;
- sub_8027184(0xc);
+ SetFriendAreaActionMenuState(0xc);
break;
case 4:
gUnknown_203B2BC->unkC = sub_801A8AC();
gUnknown_203B2BC->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2BC->unkC].itemIndex;
gUnknown_203B2BC->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2BC->unkC].numItems;
sub_8099690(0);
- sub_8027184(0xd);
+ SetFriendAreaActionMenuState(0xd);
break;
case 2:
sub_801A928();
- sub_8027184(2);
+ SetFriendAreaActionMenuState(2);
break;
case 0:
case 1:
@@ -93,20 +93,20 @@ void sub_8027BD8(void)
PlaySound(0x14d);
ShiftItemsDownFrom(gUnknown_203B2BC->unkC);
FillInventoryGaps();
- if (gUnknown_203B2BC->unk14 != 0) {
+ if (gUnknown_203B2BC->unk14.unk0 != 0) {
sub_8091274(&gUnknown_203B2BC->unk14);
}
GivePokemonItem(gUnknown_203B2BC->unk8,&gUnknown_203B2BC->unk10);
sub_801A928();
nullsub_104();
- sub_8027184(2);
+ SetFriendAreaActionMenuState(2);
break;
case 4:
sub_8099690(0);
- sub_8027184(0xd);
+ SetFriendAreaActionMenuState(0xd);
break;
case 1:
- sub_8027184(0xb);
+ SetFriendAreaActionMenuState(0xb);
break;
}
}
@@ -119,5 +119,5 @@ void sub_8027C84()
if(temp > 3)
return;
sub_801B450();
- sub_8027184(0xB);
+ SetFriendAreaActionMenuState(0xB);
}
diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c
index 8c9612c..499ba92 100644
--- a/src/friend_rescue_1.c
+++ b/src/friend_rescue_1.c
@@ -28,7 +28,7 @@ extern u8 sub_80953D4(u32);
extern u8 sub_801CF14(u32);
extern u8 gUnknown_80E48A8[];
-extern u32 gUnknown_80E2440;
+extern struct MenuItem gUnknown_80E2440[];
extern u8 gUnknown_80E49C4[];
extern u8 gUnknown_80E4704[];
extern u8 gUnknown_80E48E8[];
@@ -36,7 +36,7 @@ extern u8 gUnknown_80E4928[];
extern u8 gUnknown_80E4964[];
extern u8 gUnknown_80E499C[];
extern u8 gUnknown_80E460C[];
-extern u32 gUnknown_80E2290[];
+extern struct MenuItem gUnknown_80E2290[];
extern u8 gUnknown_80E31FC[];
@@ -44,7 +44,7 @@ extern u32 sub_80154F0();
extern void sub_80155F0();
struct unkStruct_8095228 *sub_8095228(u8);
extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32);
-extern void sub_8014248(const char *r0, u32, u32, u32 *r4, u32, u32, u32, u32 *r5, u32);
+extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32);
extern u8 sub_8012FD8(u32 *);
extern void sub_8013114(u32 *, s32 *);
@@ -69,7 +69,6 @@ extern u8 sub_80307EC(void);
extern u32 sub_8031DCC(void);
extern void sub_8031E10(void);
extern void sub_8031E00(void);
-extern void PrintFriendRescueError(u32);
extern u8 sub_8024108(u32);
extern void sub_802452C(void);
extern u32 sub_80244E4(void);
@@ -1343,7 +1342,7 @@ void sub_8034D74(void)
switch(sub_8039068(0x20, gUnknown_203B33C->passwordBuffer, &temp.unk0))
{
case 17:
- sub_8014248(gUnknown_80E48A8, 0, 6, &gUnknown_80E2440, 0, 4, 0, 0, 0x101);
+ sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2440, 0, 4, 0, 0, 0x101);
SetFriendRescueMenuState(0x74);
break;
case 20:
diff --git a/src/gulpin_shop.c b/src/gulpin_shop.c
index 0600bef..69c6a52 100644
--- a/src/gulpin_shop.c
+++ b/src/gulpin_shop.c
@@ -4,38 +4,9 @@
#include "memory.h"
#include "text.h"
#include "input.h"
+#include "menu.h"
+#include "gulpin_shop.h"
-struct unkStruct_Gulpin
-{
- u8 fill0[0x22];
- u16 unk22;
-};
-
-struct unkStruct_203B26C
-{
-// size: 0x18C
- u32 unk0;
- u32 unk4;
- u32 unk8;
- s16 unkC;
- u8 unkE;
- struct unkStruct_Gulpin * unk10;
- u8 fill14[0x1C - 0x14];
- u16 unk1C;
- u8 fill20[0x28 - 0x20];
- u32 unk28;
- u8 fill2C[0x118 - 0x2C];
- /* 0x118 */ struct OpenedFile *faceFile;
- /* 0x11C */ u8 *faceData;
- /* 0x120 */ u16 unk120;
- u16 unk122;
- u8 unk124;
- u8 unk125;
- u8 unk126;
- u8 unk127;
- struct OpenedFile **unk128;
- struct UnkTextStruct2 unk12C[4];
-};
extern struct unkStruct_203B26C *gUnknown_203B26C;
extern const struct UnkTextStruct2 gUnknown_80DC11C;
extern const struct UnkTextStruct2 gUnknown_80DC134;
@@ -47,7 +18,7 @@ extern void sub_801EDA4();
extern void sub_801EDC0();
extern void sub_801E980();
extern void sub_801EA28();
-extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *);
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
extern void sub_801EBC4();
u32 DisplayGulpinDialogueSprite(s32 param_1,s16 param_2,struct unkStruct_Gulpin *param_3)
@@ -85,7 +56,7 @@ u32 DisplayGulpinDialogueSprite(s32 param_1,s16 param_2,struct unkStruct_Gulpin
u32 sub_801E8C0(void)
{
- switch(gUnknown_203B26C->unk4)
+ switch(gUnknown_203B26C->state)
{
case 0:
case 1:
@@ -99,7 +70,7 @@ u32 sub_801E8C0(void)
break;
case 4:
sub_801EDC0();
- if(gUnknown_203B26C->unk4 == 5)
+ if(gUnknown_203B26C->state == 5)
return 3;
break;
case 5:
@@ -127,7 +98,7 @@ void sub_801E93C(void)
void UpdateGulpinShopState(u32 newState)
{
- gUnknown_203B26C->unk4 = newState;
+ gUnknown_203B26C->state = newState;
sub_801E980();
sub_801EA28();
}
@@ -137,13 +108,13 @@ void sub_801E980(void)
s32 iVar2;
sub_8006518(gUnknown_203B26C->unk12C);
- switch(gUnknown_203B26C->unk4)
+ switch(gUnknown_203B26C->state)
{
case 2:
sub_801EBC4();
gUnknown_203B26C->unk12C[1] = gUnknown_80DC11C;
gUnknown_203B26C->unk12C[2] = gUnknown_80DC134;
- sub_8012CAC(&gUnknown_203B26C->unk12C[2], &gUnknown_203B26C->unk28);
+ sub_8012CAC(&gUnknown_203B26C->unk12C[2], gUnknown_203B26C->unk28);
break;
default:
for(iVar2 = 0; iVar2 < 4; iVar2++)
diff --git a/src/gulpin_shop_1.c b/src/gulpin_shop_1.c
new file mode 100644
index 0000000..2eadcfe
--- /dev/null
+++ b/src/gulpin_shop_1.c
@@ -0,0 +1,79 @@
+#include "global.h"
+#include "file_system.h"
+#include "pokemon.h"
+#include "memory.h"
+#include "text.h"
+#include "input.h"
+#include "menu.h"
+#include "gulpin_shop.h"
+
+extern struct unkStruct_203B26C *gUnknown_203B26C;
+extern void UpdateGulpinShopState(u32);
+extern void sub_8093CF8(struct unkStruct_Gulpin *, u32);
+extern void sub_801F214(void);
+extern s32 sub_80144A4(s32 *);
+extern u32 sub_801F890(void);
+extern void sub_801F8D0(void);
+extern u8 sub_8012FD8(u32 *);
+extern void sub_8013114(u32 *, u32 *);
+extern u8 sub_80934B0(u32, struct unkStruct_Gulpin *);
+extern void PlaySound(u32);
+extern void sub_801EF38(u32);
+
+void sub_801ED28(void)
+{
+ s32 menuAction;
+
+ menuAction = 0;
+ sub_801EF38(0);
+ if(sub_8012FD8(&gUnknown_203B26C->unk78) == 0)
+ sub_8013114(&gUnknown_203B26C->unk78,&menuAction);
+ switch(menuAction)
+ {
+ case 1:
+ case 5:
+ UpdateGulpinShopState(1);
+ break;
+ case 2:
+ PlaySound(0x133);
+ gUnknown_203B26C->unkE = sub_80934B0(gUnknown_203B26C->unk20, gUnknown_203B26C->unk10);
+ UpdateGulpinShopState(4);
+ break;
+ case 3:
+ UpdateGulpinShopState(3);
+ }
+}
+
+void sub_801EDA4(void)
+{
+ switch(sub_801F890())
+ {
+ case 2:
+ case 3:
+ sub_801F8D0();
+ UpdateGulpinShopState(1);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_801EDC0(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0){
+ switch(temp)
+ {
+ case 4:
+ sub_801F214();
+ sub_8093CF8(gUnknown_203B26C->unk10, gUnknown_203B26C->unk20);
+ gUnknown_203B26C->state = 5;
+ break;
+ case 1:
+ case 5:
+ UpdateGulpinShopState(1);
+ break;
+ }
+ }
+}
diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c
index ea1b804..a1f0c7e 100644
--- a/src/kangaskhan_storage_2.c
+++ b/src/kangaskhan_storage_2.c
@@ -19,8 +19,7 @@ struct unkStruct_203B20C
u32 unk14;
u32 unk18;
u32 unk1C;
- u32 unk20;
- u8 fill24[0x60 - 0x24];
+ struct MenuItem unk20[8];
u16 unk60[8];
u32 unk70;
u8 fill74[0xC0 - 0x74];
@@ -74,7 +73,7 @@ extern u32 sub_801A6E8(u32);
extern u32 sub_801AEA8(void);
extern u32 sub_801A8AC(void);
extern void sub_801A928(void);
-extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *);
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
extern void sub_80182E4(void);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
@@ -93,7 +92,7 @@ extern void sub_8013AA0(u32 *);
extern void sub_801B3C0(struct ItemSlot *);
extern void sub_801A5D8(u32, u32, u32, u32);
extern void sub_801C8C4(u32, u32, u32, u32);
-extern void sub_8012D60(u32 *, u32 *, u32, u16 *, u32, u32);
+extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32);
extern void sub_801CB5C(u32);
extern void sub_801A8D0(u32);
@@ -376,7 +375,7 @@ void sub_8017F28(void)
gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
sub_80182E4();
gUnknown_203B20C->unkF0[2] = gUnknown_80DB7D0;
- sub_8012CAC(&gUnknown_203B20C->unkF0[2], &gUnknown_203B20C->unk20);
+ sub_8012CAC(&gUnknown_203B20C->unkF0[2], gUnknown_203B20C->unk20);
break;
case 4:
case 5:
@@ -417,7 +416,7 @@ void sub_8018100(void)
switch(gUnknown_203B20C->state)
{
case 1:
- sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk14, 2);
+ sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk14, 2);
break;
case 4:
sub_801A5D8(3, 3, 0, 0xA);
@@ -428,7 +427,7 @@ void sub_8018100(void)
case 6:
sub_801A9E0();
sub_801841C();
- sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk18, 2);
+ sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk18, 2);
break;
case 7:
sub_801B3C0(&gUnknown_203B20C->unk8);
@@ -460,7 +459,7 @@ void sub_8018100(void)
sub_801CCD8();
sub_801AD34(0);
sub_80184D4();
- sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk1C, 2);
+ sub_8012D60(&gUnknown_203B20C->unk70, gUnknown_203B20C->unk20, 0, gUnknown_203B20C->unk60, gUnknown_203B20C->unk1C, 2);
break;
case 14:
sub_801B3C0(&gUnknown_203B20C->unk8);
diff --git a/src/personality_test.c b/src/personality_test.c
index 76fc099..2034b7b 100644
--- a/src/personality_test.c
+++ b/src/personality_test.c
@@ -9,6 +9,7 @@
#include "memory.h"
#include "gUnknown_203B46C.h"
#include "text.h"
+#include "menu.h"
extern void sub_801317C(u32 *);
extern void sub_8001024(u32 *);
@@ -17,7 +18,7 @@ extern void sub_8094D28(s32);
extern void sub_8001044(u32 *);
extern void sub_80141B4(const char *text, u32 r1, u32 r2, u16 r3);
-extern void sub_8014248(const char *text, u32, u32, u32 *r0, u32, u32, u32, u32, u32);
+extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32);
extern u32 sub_80144A4(s32 *);
@@ -54,7 +55,7 @@ extern struct UnkSaveStruct1 *gUnknown_203B46C;
extern const char gStarterReveal[];
extern const char gGenderText[];
-extern u32 gGenderMenu;
+extern struct MenuItem gGenderMenu[];
extern const char gPartnerSelectionHeaderText;
extern u8 gNatureQuestionTable[NUM_QUIZ_QUESTIONS];
@@ -96,19 +97,19 @@ const char * const gEndIntroTextPtr = gEndIntroText;
const char * const gPersonalityTypeDescriptionTable[NUM_PERSONALITIES] =
{
- gHardyDescription,
- gDocileDescription,
- gBraveDescription,
- gJollyDescription,
- gImpishDescription,
- gNaiveDescription,
- gTimidDescription,
- gHastyDescription,
- gSassyDescription,
- gCalmDescription,
- gRelaxedDescription,
- gLonelyDescription,
- gQuirkyDescription
+ [HARDY] = gHardyDescription,
+ [DOCILE] = gDocileDescription,
+ [BRAVE] = gBraveDescription,
+ [JOLLY] = gJollyDescription,
+ [IMPISH] = gImpishDescription,
+ [NAIVE] = gNaiveDescription,
+ [TIMID] = gTimidDescription,
+ [HASTY] = gHastyDescription,
+ [SASSY] = gSassyDescription,
+ [CALM] = gCalmDescription,
+ [RELAXED] = gRelaxedDescription,
+ [LONELY] = gLonelyDescription,
+ [QUIRKY] = gQuirkyDescription
};
#include "data/nature_description.h"
@@ -289,7 +290,7 @@ void GenerateNewQuestionOrGender(void)
gUnknown_203B400->QuestionCounter++;
if (gUnknown_203B400->QuestionCounter > MAX_ASKED_QUESTIONS) {
// We've asked enough questions
- sub_8014248(gGenderText, 0, 0, &gGenderMenu, 0, 3, 0, 0, 257);
+ sub_8014248(gGenderText, 0, 0, gGenderMenu, 0, 3, 0, 0, 257);
gUnknown_203B400->TestState = 3;
}
else
@@ -335,7 +336,8 @@ void UpdateNatureTotals()
{
pointArray = gPersonalityQuestionPointerTable[gUnknown_203B400->currQuestionIndex]->effects;
// Skip until we get to the one for our answer
- pointArray += 16 * answerIndex;
+ // Each Answer has 16 bytes. 13 are currently used with 3 remaining
+ pointArray += (NUM_PERSONALITIES + 3) * answerIndex;
for (natureIndex = 0; natureIndex < NUM_PERSONALITIES; natureIndex++)
{
gUnknown_203B400->NatureTotals[natureIndex] += pointArray[natureIndex];
@@ -555,7 +557,7 @@ void PromptNewQuestion(void)
{
sub_8014248(gPersonalityQuestionPointerTable[gUnknown_203B400->currQuestionIndex]->question,
0, 0,
- (void *)gPersonalityQuestionPointerTable[gUnknown_203B400->currQuestionIndex]->answers,
+ (struct MenuItem *)gPersonalityQuestionPointerTable[gUnknown_203B400->currQuestionIndex]->answers,
0, 3, 0, 0, 0x101);
}
diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c
new file mode 100644
index 0000000..ac2f296
--- /dev/null
+++ b/src/rescue_password_menu.c
@@ -0,0 +1,93 @@
+#include "global.h"
+#include "memory.h"
+#include "input.h"
+#include "item.h"
+#include "sub_8095228.h"
+#include "text.h"
+#include "main_menu.h"
+#include "rescue_password_menu.h"
+
+extern u8 gUnknown_202EC50[];
+extern u32 gUnknown_202EC4C;
+
+EWRAM_DATA u8 gUnknown_203B368;
+EWRAM_DATA u32 gUnknown_203B36C;
+EWRAM_DATA struct RescuePasswordMenu *gRescuePasswordMenu;
+
+extern struct UnkTextStruct2 gUnknown_80E71E4;
+extern s32 sub_8035D74(void);
+extern void sub_80151C0(u32, u8 *);
+extern void sub_8031D70(u32, u32);
+extern u32 ConvertMenutoRescuePasswordState(u32);
+extern void sub_8039174(void);
+extern void sub_80155F0(void);
+extern void sub_8031E10(void);
+
+void CreateRescuePasswordMenu(u32 currMenu)
+{
+ struct unkStruct_8095228 *temp;
+ s32 counter;
+
+ if(gRescuePasswordMenu == NULL)
+ {
+ gRescuePasswordMenu = MemoryAlloc(sizeof(struct RescuePasswordMenu), 8);
+ MemoryFill8((u8 *)gRescuePasswordMenu, 0, sizeof(struct RescuePasswordMenu));
+ }
+
+ for(counter = 0; counter < 4; counter++)
+ gRescuePasswordMenu->unk148[counter] = gUnknown_80E71E4;
+
+ ResetUnusedInputStruct();
+ sub_800641C(gRescuePasswordMenu->unk148, 1, 1);
+
+ if ((gUnknown_203B368 != 0) || (gUnknown_203B36C != currMenu)) {
+ for(counter = 0; counter < 0x36; counter++)
+ {
+ gUnknown_202EC50[counter] = 0;
+ }
+ gUnknown_203B368 = 0;
+ }
+
+ gRescuePasswordMenu->currMenu = currMenu;
+ gUnknown_203B36C = currMenu;
+
+ switch(currMenu)
+ {
+ case 0x1B:
+ case 0x1D:
+ case 0x1F:
+ sub_8031D70(sub_8035D74(), 0);
+ break;
+ case 0x1C:
+ case 0x1E:
+ case 0x20:
+ sub_80151C0(4, gUnknown_202EC50);
+ break;
+ case MENU_DISPLAY_RESCUE_PASSWORD:
+ temp = sub_8095228(0x1F);
+ MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_8095228));
+ temp->unk0 = 2;
+ temp->unk20.itemIndex = ITEM_ID_NOTHING;
+ sub_8031D70(0x1F, 0);
+ break;
+ case MENU_RESCUE_PASSWORD_ENTRY:
+ sub_80151C0(4, gUnknown_202EC50);
+ break;
+ }
+
+ gRescuePasswordMenu->state = ConvertMenutoRescuePasswordState(currMenu);
+ sub_8039174();
+}
+
+void CleanRescuePasswordMenu(void)
+{
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ if (gRescuePasswordMenu != NULL) {
+ sub_80155F0();
+ sub_8031E10();
+ MemoryFree(gRescuePasswordMenu);
+ gRescuePasswordMenu = NULL;
+ }
+}
diff --git a/src/rescue_password_menu_1.c b/src/rescue_password_menu_1.c
new file mode 100644
index 0000000..1058589
--- /dev/null
+++ b/src/rescue_password_menu_1.c
@@ -0,0 +1,33 @@
+#include "global.h"
+#include "memory.h"
+#include "input.h"
+#include "item.h"
+#include "sub_8095228.h"
+#include "text.h"
+#include "rescue_password_menu.h"
+
+extern struct RescuePasswordMenu *gRescuePasswordMenu;
+extern void AddSprite(struct unkSprite *, u32, u32, u32);
+extern void xxx_draw_string_80144C4(void);
+
+void sub_80391F8(void)
+{
+ struct unkSprite *iVar2;
+ u32 temp;
+ u32 temp2;
+
+ iVar2 = &gRescuePasswordMenu->unk208;
+
+ temp = (iVar2->unk20A & 0xfe00);
+ iVar2->unk20A = temp | 0x70;
+
+ temp2 = 0x700;
+ temp = (iVar2->unk20E & 0xf);
+ iVar2->unk20E = temp | temp2;
+
+ if ((gRescuePasswordMenu->unk210 & 8) != 0) {
+ AddSprite(iVar2,0x100,0,0);
+ }
+ xxx_draw_string_80144C4();
+ gRescuePasswordMenu->unk210 += 1;
+}
diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c
index 44e2b77..e1c2241 100644
--- a/src/trade_items_menu.c
+++ b/src/trade_items_menu.c
@@ -329,7 +329,7 @@ void sub_8036788(void)
case 3:
// Confirm # of item
gTradeItemsMenu->itemToSend.numItems = gTradeItemsMenu->numItemsToSend;
- gTradeItemsMenu->sentItem.itemIndex = gTradeItemsMenu->itemToSend.itemIndex;
+ gTradeItemsMenu->sentItem.itemIdx.itemIndex = gTradeItemsMenu->itemToSend.itemIndex;
gTradeItemsMenu->sentItem.numItems = gTradeItemsMenu->numItemsToSend;
sub_801CBB8();
SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_CONFIRM);
@@ -392,7 +392,7 @@ void sub_80368D4(void)
break;
case 7:
case 0:
- if ((gTradeItemsMenu->sentItem.itemIndex != 0) && (gTradeItemsMenu->sentItem.numItems != 0))
+ if ((gTradeItemsMenu->sentItem.itemIdx.itemIndex != 0) && (gTradeItemsMenu->sentItem.numItems != 0))
{
TradeItem_AddItem();
SetTradeItemMenu(0x11);
@@ -430,7 +430,7 @@ void sub_8036950(void)
}
}
else {
- if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->sentItem.itemIndex != 0))
+ if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->sentItem.itemIdx.itemIndex != 0))
&& (gTradeItemsMenu->sentItem.numItems != 0)) {
// Link Failure
TradeItem_AddItem(); // Add back the item
@@ -449,9 +449,9 @@ void TradeItem_AddItem(void)
{
// Use temp var to get correct statements
u16 load;
- load = gTeamInventory_203B460->teamStorage[gTradeItemsMenu->sentItem.itemIndex];
+ load = gTeamInventory_203B460->teamStorage[gTradeItemsMenu->sentItem.itemIdx.itemIndex];
load += gTradeItemsMenu->sentItem.numItems;
- gTeamInventory_203B460->teamStorage[gTradeItemsMenu->sentItem.itemIndex] = load;
+ gTeamInventory_203B460->teamStorage[gTradeItemsMenu->sentItem.itemIdx.itemIndex] = load;
}
void sub_80369FC(void)
@@ -554,9 +554,7 @@ void nullsub_52(void)
void sub_8036B28(void)
{
int iVar3;
- u32 uVar4;
s32 local_10;
- u32 load_1;
u32 load_2;
struct TradeSubStruct *temp;
struct TradeSubStruct *temp2;
@@ -612,13 +610,13 @@ void sub_8036B28(void)
// Regs mess up here
// Needs a mov r2, 0
// and mov r3, 0
+
temp = &gTradeItemsMenu->unk244;
- temp->itemIndex = 0;
+ temp->itemIdx.itemIndex_u32 = 0;
temp->numItems = 0;
- temp += 1; // move to unk24C
-
- temp->itemIndex = 0;
+ temp = &gTradeItemsMenu->unk24C;
+ temp->itemIdx.itemIndex_u32 = 0;
temp->numItems = 0;
// Regs are fixed back up after
@@ -632,7 +630,7 @@ void sub_8036B28(void)
temp = &gTradeItemsMenu->unk244;
temp2 = &gTradeItemsMenu->sentItem;
load_2 = temp2->numItems;
- temp->itemIndex = temp2->itemIndex;
+ temp->itemIdx.itemIndex_u32 = temp2->itemIdx.itemIndex_u32;
temp->numItems = load_2;
case TRADE_ITEMS_RECEIVE_ITEM_MODE:
gTradeItemsMenu->linkStatus = sub_8037D64(gTradeItemsMenu->itemMode,&gTradeItemsMenu->unk244,&gTradeItemsMenu->unk24C);
@@ -650,12 +648,12 @@ void sub_8036B28(void)
if (gTradeItemsMenu->unk24C.numItems == 0) {
gUnknown_202DE30 = gTradeItemsMenu->unk244.numItems;
// Cast is needed
- sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk244.itemIndex,0);
+ sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk244.itemIdx.itemIndex,0);
}
else {
gUnknown_202DE30 = gTradeItemsMenu->unk24C.numItems;
// Cast is needed
- sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk24C.itemIndex,0);
+ sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk24C.itemIdx.itemIndex,0);
}
sub_80141B4(&gUnknown_80E6314,0,0,0x101);
break;
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index 45dfb1f..04e9f73 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -3,10 +3,10 @@
#include "pokemon.h"
#include "file_system.h"
#include "item.h"
+#include "sub_8095228.h"
#include "wonder_mail.h"
#include "memory.h"
#include "text.h"
-#include "sub_8095228.h"
#include "team_inventory.h"
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
@@ -25,7 +25,7 @@ extern u32 sub_8095350();
extern u8 sub_801CF14(u32);
extern u32 sub_802F298();
-extern u8 sub_80A2824(u32);
+extern u8 sub_80A2824(u8);
#include "data/wonder_mail_1.h"
@@ -35,7 +35,7 @@ const struct ItemSlot gUnknown_80DED44 =
};
-extern u32 gUnknown_80DDA48;
+extern struct MenuItem gUnknown_80DDA48[];
extern const char gUnknown_80DEF04[];
extern const char gUnknown_80DEF28[];
extern const char gUnknown_80DEF80[];
@@ -45,7 +45,7 @@ extern const char gUnknown_80DF0A0[];
extern const char gUnknown_80DF0E0[];
extern const char gUnknown_80DF138[];
extern const char gUnknown_80DF194[];
-extern u32 gUnknown_80DEE44;
+extern struct MenuItem gUnknown_80DEE44[];
extern const char gUnknown_80DF1C0[];
extern const char gUnknown_80DF208[];
extern const char gUnknown_80DF0A0[];
@@ -74,7 +74,7 @@ extern void sub_803092C(void);
extern u32 sub_80154F0();
extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
-extern void sub_8014248(const char *r0, u32, u32, u32 *r4, u32, u32, u32, u32 *r5, u32);
+extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32);
extern void sub_8095274(u32);
extern void sub_80155F0();
extern void sub_80951BC(u8 *r0);
@@ -868,7 +868,7 @@ void sub_80293F4(void)
switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp.unk0))
{
case 17:
- sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48, 0, 4, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0xC);
+ sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0xC);
sub_8028B04(40);
break;
case 18:
@@ -1533,7 +1533,7 @@ void PrintWonderMailLinkError(u32 param_1)
sub_80141B4(gUnknown_80DEF04, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
break;
case 15:
- sub_80141B4(gUnknown_80DF138,0,(u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ sub_80141B4(gUnknown_80DF138, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
break;
case 0:
default:
@@ -1873,17 +1873,17 @@ void sub_802A50C(void)
{
case 0x11:
// Wrong password
- sub_8014248(gUnknown_80DF1C0,0,7,&gUnknown_80DEE44,0,4,0,(u32 *)&gUnknown_203B2C4->faceFile,0xc);
+ 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_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_80141B4(gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
sub_802B2BC(0x1f);
break;
case 0x18:
diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c
index 25e5df0..f5bcd12 100644
--- a/src/wonder_mail_2.c
+++ b/src/wonder_mail_2.c
@@ -4,9 +4,10 @@
#include "pokemon.h"
#include "memory.h"
#include "text.h"
+#include "menu.h"
#include "save.h"
-#include "wonder_mail.h"
#include "sub_8095228.h"
+#include "wonder_mail.h"
extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
@@ -42,8 +43,119 @@ struct unkStruct_203B2C8
u32 fill13C;
};
+struct unkStruct_203B2CC
+{
+ // size: 0xD4;
+ u8 unk0[0x38];
+
+ u32 unk38;
+ u8 fill3C[0x50 - 0x3C];
+
+ s16 unk50;
+ s16 unk52;
+ s16 unk54;
+ s16 unk56;
+
+ u16 unk58;
+ u16 unk5A;
+
+ u8 fill5C[0x6C - 0x5C];
+
+ u32 unk6C;
+
+ struct UnkTextStruct2 *unk70;
+ struct UnkTextStruct2 unk74[4];
+};
+
+extern struct unkStruct_203B2CC *gUnknown_203B2CC;
+extern u32 sub_802B9A8(void);
+extern void sub_802B880(void);
+extern void sub_802B8D4(void);
+extern void sub_8013818(void *, u32, u32, u32);
+extern void sub_8012D08(struct UnkTextStruct2 *, s32);
+extern void sub_8013984(u32 *);
+extern u8 sub_802B9D8(void);
+extern u16 gUnknown_203B2D0;
+extern u16 gUnknown_203B2D2;
+
+extern u8 sub_80138B8(void *, u32);
+extern void PlayMenuSoundEffect(u32);
+extern s32 GetKeyPress(u32 *);
+extern void sub_8013660(u32 *);
+extern void AddMenuCursorSprite(u32 *);
+
+extern struct UnkTextStruct2 gUnknown_80DFBEC;
+
+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 char gUnknown_202E5D8[0x50];
@@ -64,7 +176,7 @@ 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, u32 *r1, 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[];
@@ -74,6 +186,223 @@ 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;
+
+
+
+ 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;
@@ -166,7 +495,7 @@ void sub_802B3E0(void)
// Print and expand placeholders?
ExpandPlaceholdersBuffer(gUnknown_203B2C8->teamName,gUnknown_80DF9F8,teamNameBuffer);
// Display to screen with Pelliper face
- sub_80141B4(gUnknown_203B2C8->teamName, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
+ sub_80141B4(gUnknown_203B2C8->teamName, 0, &gUnknown_203B2C8->faceFile, 0x10d);
break;
case 1:
monName = GetMonSpecies(SPECIES_PELIPPER);
@@ -187,12 +516,12 @@ void sub_802B3E0(void)
case 2:
// I hope you will keep on rescuing your friends
// I must save your adventure
- sub_80141B4(gUnknown_80DFAA8, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
+ sub_80141B4(gUnknown_80DFAA8, 0, &gUnknown_203B2C8->faceFile, 0x10d);
break;
case 4:
// Oh yes, that's right. Please don't forget to send an A-OK Mail
// to the friend you just rescued
- sub_80141B4(gUnknown_80DFB14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d);
+ sub_80141B4(gUnknown_80DFB14, 0, &gUnknown_203B2C8->faceFile, 0x10d);
case 3:
case 5:
break;
@@ -266,3 +595,120 @@ void sub_802B624(void)
sub_802B548(5);
}
}
+
+u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2)
+{
+
+ if(sub_802B9D8())
+ {
+ return 0;
+ }
+ else
+ {
+ if(gUnknown_203B2CC == NULL)
+ {
+ gUnknown_203B2CC = MemoryAlloc(0xD4, 8);
+ }
+ gUnknown_203B2CC->unk6C = r0;
+ gUnknown_203B2CC->unk70 = &gUnknown_203B2CC->unk74[r0];
+
+ sub_8006518(gUnknown_203B2CC->unk74);
+
+ gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBEC;
+
+ if(r1 != NULL)
+ {
+ gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C].unk08 = *r1;
+ }
+
+ sub_8012D08(gUnknown_203B2CC->unk70, r2);
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B2CC->unk74, 1, 1);
+
+ sub_8013818(&gUnknown_203B2CC->unk38, sub_802B9A8(), r2, r0);
+
+ gUnknown_203B2CC->unk50 = gUnknown_203B2D0;
+ gUnknown_203B2CC->unk56 = gUnknown_203B2D2;
+
+ sub_8013984(&gUnknown_203B2CC->unk38);
+ sub_802B880();
+ sub_802B8D4();
+
+ return 1;
+ }
+}
+
+u32 sub_802B720(u8 r0)
+{
+ if(r0 == 0)
+ {
+ sub_8013660(&gUnknown_203B2CC->unk38);
+ return 0;
+ }
+ else
+ {
+ switch(GetKeyPress(&gUnknown_203B2CC->unk38))
+ {
+ case 2:
+ PlayMenuSoundEffect(1);
+ return 2;
+ case 1:
+ PlayMenuSoundEffect(0);
+ return 3;
+ case 4:
+ PlayMenuSoundEffect(4);
+ return 4;
+ }
+ if(sub_80138B8(&gUnknown_203B2CC->unk38, 1) != 0)
+ {
+ sub_802B880();
+ sub_802B8D4();
+ return 1;
+ }
+ else
+ return 0;
+ }
+}
+
+u8 sub_802B7A8(void)
+{
+ return gUnknown_203B2CC->unk0[(gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + gUnknown_203B2CC->unk50];
+}
+
+void sub_802B7D0(u32 r0)
+{
+ u8 temp;
+
+ temp = r0;
+
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B2CC->unk74, 0, 0);
+
+ gUnknown_203B2CC->unk5A = sub_802B9A8();
+ sub_8013984(&gUnknown_203B2CC->unk38);
+ sub_802B880();
+ sub_802B8D4();
+
+ if(temp != 0)
+ {
+ AddMenuCursorSprite(&gUnknown_203B2CC->unk38);
+ }
+}
+
+void sub_802B81C(void)
+{
+ if(gUnknown_203B2CC != NULL)
+ {
+ gUnknown_203B2D0 = gUnknown_203B2CC->unk50;
+
+ gUnknown_203B2D2 = gUnknown_203B2CC->unk56;
+
+ gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBD0;
+
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B2CC->unk74, 1, 1);
+
+ MemoryFree(gUnknown_203B2CC);
+ gUnknown_203B2CC = NULL;
+ }
+}
diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c
index 88fa520..e318d26 100644
--- a/src/wonder_mail_3.c
+++ b/src/wonder_mail_3.c
@@ -2,6 +2,7 @@
#include "memory.h"
#include "text.h"
#include "input.h"
+#include "menu.h"
struct unkStruct_203B2F8
{
@@ -18,10 +19,8 @@ struct unkStruct_203B2F8
u32 unk70;
u32 unk74;
u8 fill78[0x118 - 0x78];
- u32 unk118;
- u8 fill11C[0x158 - 0x11C];
- u32 unk158;
- u8 fill15C[0x198 - 0x15C];
+ struct MenuItem unk118[8];
+ struct MenuItem unk158[8];
u16 unk198[8];
struct UnkTextStruct2 unk1A8[4];
u32 unk1E4;
@@ -30,7 +29,7 @@ extern struct unkStruct_203B2F8 *gUnknown_203B2F8;
extern struct UnkTextStruct2 gUnknown_80DFE04;
extern struct UnkTextStruct2 gUnknown_80DFE1C;
extern struct UnkTextStruct2 gUnknown_80DFDD4;
-extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *);
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
extern void sub_802D63C(void);
extern void sub_802D5A4(void);
@@ -129,13 +128,13 @@ void sub_802D1B8(void)
case 0xD:
sub_802D5A4();
gUnknown_203B2F8->unk1A8[2] = gUnknown_80DFE04;
- sub_8012CAC(&gUnknown_203B2F8->unk1A8[2], &gUnknown_203B2F8->unk118);
+ sub_8012CAC(&gUnknown_203B2F8->unk1A8[2], gUnknown_203B2F8->unk118);
gUnknown_203B2F8->unk1A8[2].unk0c = 6;
break;
case 0xE:
sub_802D63C();
gUnknown_203B2F8->unk1A8[3] = gUnknown_80DFE1C;
- sub_8012CAC(&gUnknown_203B2F8->unk1A8[3], &gUnknown_203B2F8->unk158);
+ sub_8012CAC(&gUnknown_203B2F8->unk1A8[3], gUnknown_203B2F8->unk158);
gUnknown_203B2F8->unk1A8[3].unk0c = 6;
break;
default:
diff --git a/src/wonder_mail_3_1.c b/src/wonder_mail_3_1.c
new file mode 100644
index 0000000..c11df89
--- /dev/null
+++ b/src/wonder_mail_3_1.c
@@ -0,0 +1,15 @@
+#include "global.h"
+
+u8 sub_80A27CC(s16);
+
+u8 sub_802FCF0(void)
+{
+ s32 iVar3;
+
+ for(iVar3 = 0; iVar3 < 0x2E; iVar3++){
+ if (sub_80A27CC(iVar3) != '\0') {
+ return 0;
+ }
+ }
+ return 1;
+}
diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c
index d2e1fca..2c8e6bb 100644
--- a/src/wonder_mail_main_menu.c
+++ b/src/wonder_mail_main_menu.c
@@ -3,6 +3,7 @@
#include "memory.h"
#include "text.h"
#include "input.h"
+#include "sub_8095228.h"
#include "wonder_mail.h"
#define WONDER_MAIL_MAIN_SCREEN 4
diff --git a/src/wonder_mail_pre.c b/src/wonder_mail_pre.c
index 9e2e5cc..34cbaea 100644
--- a/src/wonder_mail_pre.c
+++ b/src/wonder_mail_pre.c
@@ -2,6 +2,7 @@
#include "file_system.h"
#include "input.h"
#include "pokemon.h"
+#include "sub_8095228.h"
#include "wonder_mail.h"
#include "memory.h"
@@ -10,57 +11,64 @@ extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
extern char gUnknown_202E5D8[0x50];
extern char gAvailablePokemonNames[0x50];
-extern void sub_8029B34();
-extern void sub_8029AD8();
-extern void sub_8029AF4();
-extern void sub_8029A88();
-extern void sub_8029AB0();
-extern void sub_80297B8();
-extern void sub_80297D4();
-extern void sub_8029884();
-extern void sub_8029944();
-extern void sub_80299AC();
-extern void sub_80299D8();
-extern void sub_8029A6C();
-extern void sub_8028CE0();
-extern void sub_8028BF0();
-extern void sub_8029A18();
-extern void sub_80295A8();
-extern void sub_8029668();
-extern void sub_8029684();
-extern void sub_8029740();
-extern void sub_80295D8();
-extern void sub_802979C();
-extern void sub_8029358();
-extern void sub_8029374();
-extern void sub_802939C();
-extern void sub_8028F58();
-extern void sub_8028F30();
-extern void sub_8028F04();
-extern void sub_8028ED4();
-extern void sub_80293D8();
-extern void sub_80293F4();
+extern void sub_8029B34(void);
+extern void sub_8029AD8(void);
+extern void sub_8029AF4(void);
+extern void sub_8029A88(void);
+extern void sub_8029AB0(void);
+extern void sub_80297B8(void);
+extern void sub_80297D4(void);
+extern void sub_8029884(void);
+extern void sub_8029944(void);
+extern void sub_80299AC(void);
+extern void sub_80299D8(void);
+extern void sub_8029A6C(void);
+extern void sub_8028CE0(void);
+extern void sub_8028BF0(void);
+extern void sub_8029A18(void);
+extern void sub_80295A8(void);
+extern void sub_8029668(void);
+extern void sub_8029684(void);
+extern void sub_8029740(void);
+extern void sub_80295D8(void);
+extern void sub_802979C(void);
+extern void sub_8029358(void);
+extern void sub_8029374(void);
+extern void sub_802939C(void);
+extern void sub_8028F58(void);
+extern void sub_8028F30(void);
+extern void sub_8028F04(void);
+extern void sub_8028ED4(void);
+extern void sub_80293D8(void);
+extern void sub_80293F4(void);
extern void sub_8028DE8(u32);
-extern void sub_8028EAC();
-extern void sub_802955C();
-extern void sub_80292A4();
-extern void sub_80292EC();
-extern void sub_802933C();
-extern void sub_802958C();
-extern void sub_8029208();
-extern void sub_8028E84();
-extern void sub_8028F80();
-extern void sub_8028FC0();
-extern void sub_8028FDC();
-extern void sub_8028E54();
-extern void sub_8028E24();
-extern void sub_8028E08();
-extern void sub_80290D4();
-extern void sub_80290F0();
-extern void sub_80291AC();
-extern void sub_8029044();
-extern void sub_8028CFC();
-extern void sub_8028D4C();
+extern void sub_8028EAC(void);
+extern void sub_802955C(void);
+extern void sub_80292A4(void);
+extern void sub_80292EC(void);
+extern void sub_802933C(void);
+extern void sub_802958C(void);
+extern void sub_8029208(void);
+extern void sub_8028E84(void);
+extern void sub_8028F80(void);
+extern void sub_8028FC0(void);
+extern void sub_8028FDC(void);
+extern void sub_8028E54(void);
+extern void sub_8028E24(void);
+extern void sub_8028E08(void);
+extern void sub_80290D4(void);
+extern void sub_80290F0(void);
+extern void sub_80291AC(void);
+extern void sub_8029044(void);
+extern void sub_8028CFC(void);
+extern void sub_8028D4C(void);
+extern void sub_8031E10(void);
+extern void sub_8023C60(void);
+extern void sub_803084C(void);
+extern void sub_80155F0(void);
+extern void sub_80310B4(void);
+extern void sub_8030DE4(void);
+extern void sub_802453C(void);
u32 sub_8027F88(void)
{
@@ -93,3 +101,205 @@ u32 sub_8027F88(void)
sub_8028B04(0); // Set initial state to 0?
return 1;
}
+
+u32 sub_8028078(void)
+{
+
+ switch(gUnknown_203B2C0->state) {
+ case 0x3c:
+ sub_8029B34();
+ break;
+ case 0x3a:
+ sub_8029AD8();
+ break;
+ case 0x3b:
+ sub_8029AF4();
+ break;
+ case 0x38:
+ sub_8029A88();
+ break;
+ case 0x37:
+ sub_8029AB0();
+ break;
+ case 0x32:
+ sub_80297B8();
+ break;
+ case 0x33:
+ sub_80297D4();
+ break;
+ case 0x34:
+ sub_8029884();
+ break;
+ case 0x35:
+ sub_8029944();
+ break;
+ case 0x31:
+ sub_80299AC();
+ break;
+ case 0x36:
+ sub_80299D8();
+ break;
+ case 0x30:
+ sub_8029A6C();
+ break;
+ case 0x2e:
+ sub_8029A18();
+ break;
+ case 0x2d:
+ sub_80295A8();
+ break;
+ case 0x29:
+ sub_8029668();
+ break;
+ case 0x2b:
+ sub_8029684();
+ break;
+ case 0x2c:
+ sub_8029740();
+ break;
+ case 0x2a:
+ sub_80295D8();
+ break;
+ case 0x2f:
+ sub_802979C();
+ break;
+ case 9:
+ sub_8029358();
+ break;
+ case 0x23:
+ sub_8029374();
+ break;
+ case 0x24:
+ sub_802939C();
+ break;
+ case 0x26:
+ sub_80293D8();
+ break;
+ case 0x27:
+ sub_80293F4();
+ break;
+ case 0x28:
+ sub_802955C();
+ break;
+ case 4:
+ sub_80292A4();
+ break;
+ case 6:
+ sub_80292EC();
+ break;
+ case 7:
+ sub_802933C();
+ break;
+ case 5:
+ sub_802958C();
+ break;
+ case 8:
+ sub_8029208();
+ break;
+ case 0x1a:
+ sub_8028DE8(1);
+ break;
+ case 0x1b:
+ sub_8028F80();
+ break;
+ case 0x1c:
+ case 0x1d:
+ sub_8028FC0();
+ break;
+ case 0x22:
+ sub_8028FDC();
+ break;
+ case 0x1e:
+ sub_80290D4();
+ break;
+ case 0x20:
+ sub_80290F0();
+ break;
+ case 0x21:
+ sub_80291AC();
+ break;
+ case 0x1f:
+ sub_8029044();
+ break;
+ case 10:
+ sub_8028CFC();
+ break;
+ case 0xb:
+ sub_8028D4C();
+ break;
+ case 0xd:
+ case 0xf:
+ sub_8028DE8(10);
+ break;
+ case 0x11:
+ sub_8028E08();
+ break;
+ case 0xc:
+ case 0xe:
+ case 0x10:
+ sub_8028DE8(0x19);
+ break;
+ case 0x12:
+ sub_8028E24();
+ break;
+ case 0x13:
+ sub_8028E54();
+ break;
+ case 0x17:
+ sub_8028E84();
+ break;
+ case 0x18:
+ sub_8028EAC();
+ break;
+ case 0x19:
+ sub_8028ED4();
+ break;
+ case 0x14:
+ sub_8028F04();
+ break;
+ case 0x15:
+ sub_8028F30();
+ break;
+ case 0x16:
+ sub_8028F58();
+ break;
+ case 0:
+ case 1:
+ sub_8028BF0();
+ break;
+ case 2:
+ case 0x25:
+ case 0x39:
+ sub_8028CE0();
+ break;
+ case 3:
+ return 3;
+ }
+ return 0;
+}
+
+s32 sub_80282DC(u8 *r0)
+{
+ *r0 = gUnknown_203B2C0->unk218;
+ return gUnknown_203B2C0->unk53C;
+}
+
+void sub_80282FC(void)
+{
+ if (gUnknown_203B2C0 != NULL) {
+ CloseFile(gUnknown_203B2C0->faceFile);
+ MemoryFree(gUnknown_203B2C0);
+ gUnknown_203B2C0 = NULL;
+ sub_8031E10();
+ sub_8023C60();
+ sub_803084C();
+ sub_80155F0();
+ sub_80310B4();
+ sub_8030DE4();
+ sub_802453C();
+ }
+}
+
+void nullsub_130(void)
+{
+}