summaryrefslogtreecommitdiff
path: root/src/wonder_mail_3_mid.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wonder_mail_3_mid.c')
-rw-r--r--src/wonder_mail_3_mid.c772
1 files changed, 772 insertions, 0 deletions
diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c
new file mode 100644
index 0000000..5661d44
--- /dev/null
+++ b/src/wonder_mail_3_mid.c
@@ -0,0 +1,772 @@
+#include "global.h"
+#include "memory.h"
+#include "text.h"
+#include "input.h"
+#include "wonder_mail.h"
+#include "menu.h"
+#include "pokemon.h"
+#include "rescue_team_info.h"
+#include "friend_area.h"
+#include "item.h"
+
+struct unkStruct_803B344
+{
+ // size: 0xB4
+ struct WonderMail unk0;
+ u8* unk14;
+ u8* unk18;
+ u8 fill1C[0x3C - 0x1C];
+ u8 unk3C[0x78];
+};
+
+extern struct unkStruct_803B344 *sub_803B344(u8);
+
+struct unkStruct_203B30C
+{
+ // size: 0x150
+ s32 state;
+ u8 unk4;
+ u8 unk5[3];
+ u32 unk8;
+ u8 fillC[0x4C - 0xC];
+ u8 unk4C;
+ u8 fill4D[0x58 - 0x4D];
+ u8 *unk58;
+ u32 unk5C;
+ u32 unk60;
+ u8 fill64[0xB0 - 0x64];
+ struct MenuItem unkB0[8];
+ struct UnkTextStruct2 unkF0[4];
+};
+extern struct unkStruct_203B30C *gUnknown_203B30C;
+
+struct unkStruct_203B310
+{
+ // size: 0x84
+ /* 0x0 */ u32 state;
+ u32 unk4;
+ u8 unk8;
+ /* 0x9 */ u8 currTeamRank; // team rank
+ u8 unkA;
+ u8 unkB;
+ /* 0xC */ s32 itemRewardIndex;
+ struct unkStruct_802F204 *unk10;
+ /* 0x14 */ struct OpenedFile *faceFile;
+ /* 0x18 */ u8 *faceData;
+ s16 unk1C;
+ s16 unk1E;
+ u8 unk20;
+ u8 unk21;
+ u8 unk22;
+ struct UnkTextStruct2 unk24[4];
+};
+extern struct unkStruct_203B310 *gUnknown_203B310;
+
+// TODO: port to ItemSlot
+struct ItemSlot_Alt
+{
+ // OG struct
+ // u8 itemFlags
+ // u8 numItems
+ // u8 itemIndex
+ union temp {
+ u8 itemFlags;
+ u8 numItems;
+ u8 itemIndex;
+ u32 full_bits;
+ } temp;
+};
+
+struct unkStruct_203B314
+{
+ // size: 0x15C
+ s16 unk0[2];
+ u8 fill4[0xB8 - 0x4];
+ u8 unkB8;
+ u8 unkB9;
+ u8 unkBA;
+ u8 unkBB;
+ u32 unkBC;
+ u8 fillC0[0xD4 - 0xC0];
+ s16 unkD4;
+ s16 unkD6;
+ s16 unkD8;
+ s16 unkDA;
+ s16 unkDC;
+ s16 unkDE;
+ u8 fillDF[0xF0 - 0xE0];
+ u32 unkF0;
+ struct UnkTextStruct2 *unkF4;
+ struct UnkTextStruct2 unkF8[4];
+ u8 unk158[4];
+};
+
+extern struct unkStruct_203B314 *gUnknown_203B314;
+extern struct UnkTextStruct2 gUnknown_80E072C;
+extern struct UnkTextStruct2 gUnknown_80E0714;
+extern struct UnkTextStruct2 gUnknown_80E06FC;
+
+extern u8 sub_802FCF0(u32);
+extern void sub_802F9C0(void);
+extern void sub_802FA50(void);
+extern void sub_8012D08(struct UnkTextStruct2 *, u32);
+extern void sub_8013818(u32 *, u32, u32, u32);
+extern u32 sub_802FBF4(void);
+extern void sub_8013878(u32 *, s32);
+
+extern void AddMenuCursorSprite(u32 *);
+extern void sub_8013984(u32 *);
+extern void sub_802F2E8(u32);
+extern void sub_802EFEC(u32);
+extern void sub_802F148(void);
+extern void sub_802F184(void);
+extern void sub_802F1E8(void);
+extern void sub_802F004();
+extern void sub_802F088();
+extern void sub_801B72C(void);
+extern u32 sub_801B6AC(void);
+extern void sub_802F108(void);
+extern s32 sub_80144A4(s32 *);
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
+extern void sub_803B35C(void *, u32 *);
+extern void sub_802DE84(u32 *);
+extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32);
+extern void sub_802CDD4(u32);
+extern void sub_802CED8(u32);
+extern void sub_802CFD0(void);
+extern u8 sub_802CEBC(void);
+extern u32 sub_802CE5C(u32);
+extern void sub_802CF14(void);
+extern u8 sub_8012FD8(u32 *r0);
+extern void sub_8013114(u32 *, s32 *);
+extern u32 sub_802DEE0(void);
+extern void sub_802DF24(void);
+extern void sub_808DA34(u8 *buffer, struct PokemonStruct *pokemon);
+extern struct PokemonStruct *sub_808D33C(void);
+extern void sub_802F6FC(void);
+extern void sub_802F718(void);
+extern u8 sub_80138B8(u32 *, u32);
+extern void sub_8013660(u32 *);
+extern u32 GetKeyPress(u32 *);
+extern void PlayMenuSoundEffect(u32);
+extern void sub_802F300(void);
+extern void PlaySound(u32);
+extern s32 sub_808D544(u32);
+extern void sub_80141B4(u8 *, u32, struct OpenedFile **, u32);
+extern u32 sub_801B60C(u32, u8, u8);
+extern void sub_8092578(u8 *buffer, u8 index, u8 r2);
+void HandleMissionReward(void);
+
+extern struct UnkTextStruct2 gUnknown_80E03C4;
+extern struct UnkTextStruct2 gUnknown_80E03F4;
+extern struct UnkTextStruct2 gUnknown_80E041C;
+extern u8 gUnknown_80E0434[];
+extern u8 gUnknown_80E045C[];
+extern u8 gUnknown_80E0484[];
+extern u8 gUnknown_80E04F4[];
+extern u8 gUnknown_80E06A8[];
+extern u8 gUnknown_80E0670[];
+extern u8 gUnknown_80E05FC[];
+extern u8 gUnknown_80E04B4[];
+extern u8 gUnknown_80E05C0[];
+extern u8 gUnknown_80E0640[];
+
+extern u8 gUnknown_202E038[];
+extern u8 gUnknown_202E088[];
+extern u8 gUnknown_202E628[];
+extern u8 gUnknown_202DEA8[];
+extern u8 gUnknown_202E5D8[];
+extern u8 gAvailablePokemonNames[];
+extern u32 gUnknown_202DE30;
+extern const char gUnknown_80E040C[];
+extern const char *gUnknown_80D4970[];
+
+
+
+u32 sub_802EF48(void)
+{
+ gUnknown_203B30C = MemoryAlloc(sizeof(struct unkStruct_203B30C), 8);
+ sub_802EFEC(0);
+ return 1;
+}
+
+u32 sub_802EF6C(void)
+{
+ switch(gUnknown_203B30C->state)
+ {
+ case 0:
+ case 1:
+ sub_802F148();
+ break;
+ case 2:
+ sub_802F184();
+ break;
+ case 3:
+ sub_802F1E8();
+ break;
+ case 4:
+ return 3;
+ case 5:
+ default:
+ return 2;
+ }
+ return 0;
+}
+
+u8 sub_802EFC4(void)
+{
+ return gUnknown_203B30C->unk4;
+}
+
+void sub_802EFD0(void)
+{
+ if(gUnknown_203B30C != NULL)
+ {
+ MemoryFree(gUnknown_203B30C);
+ gUnknown_203B30C = NULL;
+ }
+}
+
+void sub_802EFEC(u32 newState)
+{
+ gUnknown_203B30C->state = newState;
+ sub_802F004();
+ sub_802F088();
+}
+
+void sub_802F004(void)
+{
+ s32 iVar3;
+
+ sub_8006518(gUnknown_203B30C->unkF0);
+ switch(gUnknown_203B30C->state)
+ {
+ case 2:
+ sub_802F108();
+ gUnknown_203B30C->unkF0[2] = gUnknown_80E03F4;
+ sub_8012CAC(&gUnknown_203B30C->unkF0[2], gUnknown_203B30C->unkB0);
+ break;
+ default:
+ for(iVar3 = 0; iVar3 < 4; iVar3++)
+ {
+ gUnknown_203B30C->unkF0[iVar3] = gUnknown_80E03C4;
+ }
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B30C->unkF0, 1, 1);
+}
+
+void sub_802F088(void)
+{
+ struct unkStruct_803B344 *temp;
+
+ switch(gUnknown_203B30C->state)
+ {
+ case 0:
+ sub_802CDD4(0);
+ break;
+ case 1:
+ sub_802CED8(1);
+ break;
+ case 2:
+ sub_802CFD0();
+ sub_8012D60(&gUnknown_203B30C->unk60, gUnknown_203B30C->unkB0, 0, 0, 3, 2);
+ break;
+ case 3:
+ temp = sub_803B344(gUnknown_203B30C->unk4);
+ sub_803B35C(temp, &gUnknown_203B30C->unk8);
+ gUnknown_203B30C->unk8 = 3;
+ gUnknown_203B30C->unk4C = 0;
+ gUnknown_203B30C->unk58 = temp->unk18;
+ sub_802DE84(&gUnknown_203B30C->unk8);
+ }
+}
+
+void sub_802F108(void)
+{
+ struct unkStruct_203B30C *preload;
+ const char *blankText;
+ s32 action_1;
+
+ preload = gUnknown_203B30C;
+ blankText = NULL;
+ preload->unkB0[0].text = gUnknown_80E040C;
+ preload->unkB0[0].menuAction = 2;
+ action_1 = 1;
+ preload->unkB0[1].text = *gUnknown_80D4970;
+ preload->unkB0[1].menuAction = 3;
+ preload->unkB0[2].text = blankText;
+ preload->unkB0[2].menuAction = action_1;
+}
+
+void sub_802F148(void)
+{
+ switch(sub_802CE5C(1))
+ {
+ case 0:
+ case 1:
+ break;
+ case 3:
+ gUnknown_203B30C->unk4 = sub_802CEBC();
+ sub_802EFEC(2);
+ break;
+ case 2:
+ sub_802CF14();
+ sub_802EFEC(5);
+ break;
+ }
+}
+
+void sub_802F184(void)
+{
+ s32 menuAction;
+
+ menuAction = 0;
+ sub_802CE5C(0);
+
+ if (sub_8012FD8(&gUnknown_203B30C->unk60) == 0) {
+ sub_8013114(&gUnknown_203B30C->unk60, &menuAction);
+ }
+
+ switch(menuAction)
+ {
+ case 2:
+ sub_802CF14();
+ sub_802EFEC(4);
+ break;
+ case 3:
+ sub_802EFEC(3);
+ break;
+ case 1:
+ sub_802EFEC(1);
+ break;
+ }
+}
+
+void sub_802F1E8(void)
+{
+ switch(sub_802DEE0())
+ {
+ case 2:
+ case 3:
+ sub_802DF24();
+ sub_802EFEC(1);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+
+
+u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1)
+{
+ struct unkStruct_203B310 *preload;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0, 1, 1);
+ gUnknown_203B310 = MemoryAlloc(sizeof(struct unkStruct_203B310), 8);
+ gUnknown_203B310->unk10 = r0;
+ gUnknown_203B310->itemRewardIndex = 0;
+ gUnknown_203B310->unk8 = r1;
+
+ // NOTE: dumb var to get correct ordering
+ preload = gUnknown_203B310;
+ strcpy(gUnknown_202E5D8, preload->unk10->clientName);
+ sub_808DA34(gAvailablePokemonNames, sub_808D33C());
+
+ gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->unk14);
+ gUnknown_203B310->faceData = NULL;
+
+ gUnknown_203B310->unk20 = 0;
+ gUnknown_203B310->unk21 = 0;
+ gUnknown_203B310->unk22 = 0;
+ gUnknown_203B310->unk1C = 2;
+ gUnknown_203B310->unk1E = 8;
+
+ if(gUnknown_203B310->faceFile != NULL)
+ {
+ gUnknown_203B310->faceData = gUnknown_203B310->faceFile->data;
+ }
+
+ sub_802F2E8(0);
+ return 1;
+}
+
+u32 sub_802F298(void)
+{
+ switch(gUnknown_203B310->state)
+ {
+ case 9:
+ return 3;
+ case 5:
+ sub_802F6FC();
+ return 0;
+ default:
+ sub_802F718();
+ return 0;
+ }
+}
+
+void sub_802F2C0(void)
+{
+ if(gUnknown_203B310 != NULL)
+ {
+ if(gUnknown_203B310->faceFile != 0)
+ CloseFile(gUnknown_203B310->faceFile);
+ MemoryFree(gUnknown_203B310);
+ gUnknown_203B310 = NULL;
+ }
+}
+
+void sub_802F2E8(u32 newState)
+{
+ gUnknown_203B310->state = newState;
+ sub_802F300();
+ HandleMissionReward();
+}
+
+void sub_802F300(void)
+{
+ s32 iVar3;
+ switch(gUnknown_203B310->state)
+ {
+ case 0:
+ sub_8006518(gUnknown_203B310->unk24);
+ for(iVar3 = 0; iVar3 < 4; iVar3++)
+ {
+ gUnknown_203B310->unk24[iVar3] = gUnknown_80E041C;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B310->unk24, 1, 1);
+ default:
+ break;
+ }
+}
+
+void HandleMissionReward(void)
+{
+ int moneyReward;
+ const char *rankString;
+ u8 uVar7;
+ struct unkStruct_8090F58 local_20;
+ struct ItemSlot_Alt local_14;
+ u32 numItems;
+ u32 index_cast;
+ u32 index_cast2;
+
+ switch(gUnknown_203B310->state) {
+ case 0:
+ // Reward intro..
+ moneyReward = gUnknown_203B310->unk10->moneyReward;
+ if (moneyReward == 0) {
+ sub_802F2E8(2);
+ }
+ else {
+ gUnknown_202DE30 = moneyReward;
+ if (gUnknown_203B310->unk8 != '\0') {
+ sub_80141B4(gUnknown_80E0434,0,&gUnknown_203B310->faceFile,0x10d);
+ gUnknown_203B310->unk4 = 1;
+ }
+ else {
+ sub_802F2E8(1);
+ }
+ }
+ break;
+ case 1:
+ PlaySound(0xcb);
+ AddToTeamMoney(gUnknown_203B310->unk10->moneyReward);
+ if (sub_808D544(0) < 2) {
+ sub_80141B4(gUnknown_80E045C,0,0,0x101);
+ }
+ else {
+ sub_80141B4(gUnknown_80E0484,0,0,0x101);
+ }
+ gUnknown_203B310->unk4 = 2;
+ break;
+ case 2:
+ if (gUnknown_203B310->unk10->friendAreaReward == '\0') {
+ // No friend area reward.. go to item reward
+ sub_802F2E8(4);
+ }
+ else {
+ sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0);
+ if (gUnknown_203B310->unk8 != '\0') {
+ sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d);
+ gUnknown_203B310->unk4 = 3;
+ }
+ else {
+ sub_802F2E8(3);
+ }
+ }
+ break;
+ case 3:
+ // Friend area reward
+ if (GetFriendAreaStatus(gUnknown_203B310->unk10->friendAreaReward)) {
+ // We already have the friend area
+ AddToTeamMoney(1000);
+ sub_80141B4(gUnknown_80E04F4,0,0,0x101);
+ }
+ else
+ {
+ if (sub_808D544(0) < 2) {
+ UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward);
+ PlaySound(0xce);
+ sub_80141B4(gUnknown_80E05C0,0,0,0x101);
+ }
+ else
+ {
+ UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward);
+ PlaySound(0xce);
+ sub_80141B4(gUnknown_80E05FC,0,0,0x101);
+ }
+ }
+ gUnknown_203B310->unk4 = 4;
+ break;
+ case 4:
+ uVar7 = gUnknown_203B310->unk10->itemRewards[0];
+ if (uVar7 != 0)
+ {
+ if (gUnknown_203B310->unk10->moneyReward == 0) {
+
+ // Cast ItemIndex
+ index_cast = uVar7 << 16;
+ local_14.temp.full_bits = (local_14.temp.full_bits & 0xff00ffff) | index_cast;
+
+ index_cast2 = local_14.temp.full_bits >> 16;
+ if (IsThrowableItem(index_cast2)) {
+ // Cast number items
+ numItems = (gUnknown_203B310->unk10->numItems << 8);
+ local_14.temp.full_bits = (local_14.temp.full_bits & 0xffff00ff) | numItems;
+ }
+ else {
+ local_14.temp.full_bits = (local_14.temp.full_bits & 0xffff00ff) | 0;
+ }
+ local_14.temp.full_bits = (local_14.temp.full_bits & 0xffffff00) | ITEM_FLAG_EXISTS;
+ local_20.unk0 = 0;
+ local_20.unk4 = 0;
+ local_20.unk8 = 1;
+ sub_8090E14(gUnknown_202DEA8,(struct ItemSlot *)&local_14,&local_20);
+ if (gUnknown_203B310->unk8 != '\0') {
+ sub_80141B4(gUnknown_80E0640,0,&gUnknown_203B310->faceFile,0x10d);
+ gUnknown_203B310->unk4 = 5;
+ }
+ else
+ {
+ sub_802F2E8(5);
+ }
+ }
+ else
+ {
+ sub_802F2E8(5);
+ }
+ }
+ else
+ sub_802F2E8(7);
+ break;
+ case 5:
+ // Item reward
+ if ((gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex]) == 0) {
+ // No item in this reward slot
+ sub_802F2E8(6);
+ }
+ else {
+ if ((gUnknown_203B310->itemRewardIndex == 0) && (gUnknown_203B310->unk10->moneyReward == 0)) {
+ sub_801B60C(0,gUnknown_203B310->unk10->itemRewards[0],gUnknown_203B310->unk10->numItems);
+ }
+ else {
+ sub_801B60C(1,gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex],gUnknown_203B310->unk10->numItems);
+ }
+ }
+ break;
+ case 6:
+ // Increase item reward slot index
+ gUnknown_203B310->itemRewardIndex++;
+ if(gUnknown_203B310->itemRewardIndex < MAX_ITEM_REWARDS)
+ sub_802F2E8(5);
+ else
+ // No more items to check... move to give points
+ sub_802F2E8(7);
+ break;
+ case 7:
+ if (gUnknown_203B310->unk10->teamRankPtsReward == 0) {
+ // No pnts to reward
+ sub_802F2E8(9);
+ }
+ else {
+ gUnknown_203B310->currTeamRank = GetRescueTeamRank();
+ AddToTeamRankPts(gUnknown_203B310->unk10->teamRankPtsReward);
+ PlaySound(0xcb);
+ if (gUnknown_203B310->currTeamRank != GetRescueTeamRank()) {
+ // Rank up time
+ gUnknown_203B310->unk4 = 8;
+ }
+ else {
+ // No rank up.. close out
+ gUnknown_203B310->unk4 = 9;
+ }
+ gUnknown_202DE30 = gUnknown_203B310->unk10->teamRankPtsReward;
+ sub_80141B4(gUnknown_80E0670,0,0,0x101);
+ }
+ break;
+ case 8:
+ // Rank up
+ PlaySound(0xc9);
+ gUnknown_203B310->unk4 = 9;
+ rankString = GetTeamRankString(gUnknown_203B310->currTeamRank);
+ strcpy(gUnknown_202E038,rankString);
+ rankString = GetTeamRankString(GetRescueTeamRank());
+ strcpy(gUnknown_202E038 + 0x50,rankString);
+ sub_80141B4(gUnknown_80E06A8,0,0,0x101);
+ break;
+ case 9:
+ break;
+ }
+}
+
+void sub_802F6FC(void)
+{
+ switch(sub_801B6AC())
+ {
+ case 2:
+ case 3:
+ sub_801B72C();
+ sub_802F2E8(6);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_802F718(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ sub_802F2E8(gUnknown_203B310->unk4);
+ }
+}
+
+u32 sub_802F73C(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2, u8 r3)
+{
+ if(sub_802FCF0(r0))
+ {
+ return 0;
+ }
+ else
+ {
+ if(gUnknown_203B314 == NULL)
+ gUnknown_203B314 = MemoryAlloc(sizeof(struct unkStruct_203B314), 0x8);
+ gUnknown_203B314->unkB8 = r3;
+ gUnknown_203B314->unkF0 = r0;
+ gUnknown_203B314->unkF4 = &gUnknown_203B314->unkF8[gUnknown_203B314->unkF0];
+ sub_8006518(gUnknown_203B314->unkF8);
+ if(r3 != 0)
+ {
+ gUnknown_203B314->unkF8[gUnknown_203B314->unkF0] = gUnknown_80E072C;
+ }
+ else
+ {
+ gUnknown_203B314->unkF8[gUnknown_203B314->unkF0] = gUnknown_80E0714;
+ }
+
+ gUnknown_203B314->unkF4->unk14 = gUnknown_203B314->unk158;
+ if(r1 != 0)
+ {
+ gUnknown_203B314->unkF8[gUnknown_203B314->unkF0].unk08 = *r1;
+ }
+
+ sub_8012D08(gUnknown_203B314->unkF4, r2);
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B314->unkF8, 1, 1);
+ sub_8013818(&gUnknown_203B314->unkBC, sub_802FBF4(), r2, r0);
+ sub_802F9C0();
+ sub_802FA50();
+ return 1;
+ }
+}
+
+u32 sub_802F848(s16 param_1)
+{
+ int iVar2;
+ s32 param_1_32;
+
+ param_1_32 = param_1; // cast needed
+
+ for( iVar2 = 0; iVar2 < gUnknown_203B314->unkDE; iVar2++ ) {
+ if (gUnknown_203B314->unk0[iVar2] == param_1_32) {
+ sub_8013878(&gUnknown_203B314->unkBC,iVar2);
+ sub_802F9C0();
+ sub_802FA50();
+ return 1;
+ }
+ }
+ sub_8013878(&gUnknown_203B314->unkBC,0);
+ return 0;
+}
+
+u32 sub_802F8A0(u8 r0)
+{
+ if(r0 == 0)
+ {
+ sub_8013660(&gUnknown_203B314->unkBC);
+ return 0;
+ }
+ else
+ {
+ switch(GetKeyPress(&gUnknown_203B314->unkBC))
+ {
+ case 2:
+ PlayMenuSoundEffect(1);
+ return 2;
+ case 1:
+ PlayMenuSoundEffect(0);
+ return 3;
+ default:
+ if(sub_80138B8(&gUnknown_203B314->unkBC, 1) != 0)
+ {
+ sub_802F9C0();
+ sub_802FA50();
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+}
+
+s16 sub_802F90C(void)
+{
+ return gUnknown_203B314->unk0[(gUnknown_203B314->unkDA * gUnknown_203B314->unkD8) + gUnknown_203B314->unkD4];
+}
+
+void sub_802F938(u32 r0)
+{
+ u8 r0_u8;
+
+ r0_u8 = r0;
+
+ gUnknown_203B314->unkDE = sub_802FBF4();
+ sub_8013984(&gUnknown_203B314->unkBC);
+ sub_802F9C0();
+ sub_802FA50();
+
+ if(r0_u8 != 0)
+ AddMenuCursorSprite(&gUnknown_203B314->unkBC);
+}
+
+void sub_802F974(void)
+{
+ if(gUnknown_203B314 != NULL)
+ {
+ gUnknown_203B314->unkF8[gUnknown_203B314->unkF0] = gUnknown_80E06FC;
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B314->unkF8, 1, 1);
+ MemoryFree(gUnknown_203B314);
+ gUnknown_203B314 = NULL;
+ }
+}