From 71e0c74addad6edf956ec59e502efd4bd0e887e2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 23 Dec 2022 12:33:27 -0800 Subject: [PATCH] major code refactor for sub_8095228 --- asm/code_8095014.s | 410 ------------------------------------ include/code_8094F88.h | 40 ++-- include/dungeon.h | 1 + include/sub_8095228.h | 25 --- include/wonder_mail.h | 8 +- include/wonder_mail_3.h | 2 +- src/code_8094F88.c | 2 +- src/code_8095824.c | 232 ++++++++++++++++++-- src/code_80958E8.c | 4 +- src/friend_rescue_1.c | 32 ++- src/load_screen.c | 2 - src/post_office_guide.c | 4 +- src/rescue_password_menu.c | 30 ++- src/thank_you_wonder_mail.c | 29 ++- src/wonder_mail.c | 13 +- src/wonder_mail_2.c | 6 +- src/wonder_mail_4.c | 5 +- src/wonder_mail_6.c | 2 +- src/wonder_mail_main_menu.c | 3 +- 19 files changed, 310 insertions(+), 540 deletions(-) delete mode 100644 include/sub_8095228.h diff --git a/asm/code_8095014.s b/asm/code_8095014.s index d5e9a3525..8a9e08126 100644 --- a/asm/code_8095014.s +++ b/asm/code_8095014.s @@ -42,414 +42,4 @@ _080951F6: bx r1 thumb_func_end sub_80951BC - thumb_func_start sub_80951FC -sub_80951FC: - push {r4,r5,lr} - ldr r1, _08095224 - ldr r1, [r1] - adds r1, 0x30 - ldrb r2, [r1] - negs r3, r2 - orrs r3, r2 - lsrs r3, 31 - ldm r0!, {r2,r4,r5} - stm r1!, {r2,r4,r5} - ldm r0!, {r2,r4,r5} - stm r1!, {r2,r4,r5} - ldm r0!, {r2,r4,r5} - stm r1!, {r2,r4,r5} - ldm r0!, {r2,r4,r5} - stm r1!, {r2,r4,r5} - adds r0, r3, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08095224: .4byte gUnknown_203B480 - thumb_func_end sub_80951FC - - thumb_func_start sub_8095228 -sub_8095228: - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809523C - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 4 - ldr r0, [r2] - adds r0, r1 - bx lr - .align 2, 0 -_0809523C: .4byte gUnknown_203B480 - thumb_func_end sub_8095228 - - thumb_func_start sub_8095240 -sub_8095240: - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08095270 - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 4 - ldr r0, [r5] - adds r0, r4 - movs r1, 0 - movs r2, 0x30 - bl MemoryFill8 - ldr r0, [r5] - adds r0, r4 - movs r1, 0 - strb r1, [r0] - ldr r0, [r5] - adds r0, r4 - adds r0, 0x22 - strb r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08095270: .4byte gUnknown_203B480 - thumb_func_end sub_8095240 - - thumb_func_start sub_8095274 -sub_8095274: - push {lr} - ldr r1, _08095294 - ldr r3, [r1] - adds r2, r3, 0 - ldm r2!, {r1} - lsls r1, 2 - adds r2, r1 - str r0, [r2] - ldr r0, [r3] - movs r1, 0 - cmp r0, 0x1E - bgt _0809528E - adds r1, r0, 0x1 -_0809528E: - str r1, [r3] - pop {r0} - bx r0 - .align 2, 0 -_08095294: .4byte gUnknown_203B48C - thumb_func_end sub_8095274 - - thumb_func_start sub_8095298 -sub_8095298: - push {lr} - adds r3, r0, 0 - movs r2, 0 - ldr r0, _080952B0 - ldr r0, [r0] - adds r1, r0, 0x4 -_080952A4: - ldr r0, [r1] - cmp r0, r3 - bne _080952B4 - movs r0, 0x1 - b _080952BE - .align 2, 0 -_080952B0: .4byte gUnknown_203B48C -_080952B4: - adds r1, 0x4 - adds r2, 0x1 - cmp r2, 0x1F - ble _080952A4 - movs r0, 0 -_080952BE: - pop {r1} - bx r1 - thumb_func_end sub_8095298 - - thumb_func_start sub_80952C4 -sub_80952C4: - push {r4,lr} - ldr r2, _080952EC - ldr r1, [r2] - movs r0, 0 - str r0, [r1] - movs r3, 0 - adds r4, r2, 0 - movs r2, 0x1 - negs r2, r2 -_080952D6: - ldr r0, [r4] - lsls r1, r3, 2 - adds r0, 0x4 - adds r0, r1 - str r2, [r0] - adds r3, 0x1 - cmp r3, 0x1F - ble _080952D6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080952EC: .4byte gUnknown_203B48C - thumb_func_end sub_80952C4 - - thumb_func_start sub_80952F0 -sub_80952F0: - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r1, r0, 24 - movs r3, 0 - ldr r0, _08095310 - ldr r2, [r0] -_080952FE: - ldrb r0, [r2] - cmp r0, r1 - bne _08095314 - ldr r0, [r2, 0x10] - cmp r0, r4 - bne _08095314 - movs r0, 0x1 - b _0809531E - .align 2, 0 -_08095310: .4byte gUnknown_203B480 -_08095314: - adds r2, 0x30 - adds r3, 0x1 - cmp r3, 0x1F - ble _080952FE - movs r0, 0 -_0809531E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80952F0 - - thumb_func_start sub_8095324 -sub_8095324: - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r3, 0 - ldr r0, _0809534C - ldr r1, [r0] - movs r2, 0x1F -_08095332: - ldrb r0, [r1] - cmp r0, r4 - bne _0809533A - adds r3, 0x1 -_0809533A: - adds r1, 0x30 - subs r2, 0x1 - cmp r2, 0 - bge _08095332 - adds r0, r3, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0809534C: .4byte gUnknown_203B480 - thumb_func_end sub_8095324 - - thumb_func_start sub_8095350 -sub_8095350: - push {lr} - movs r3, 0 - ldr r0, _08095370 - ldr r1, [r0] - movs r2, 0x1F -_0809535A: - ldrb r0, [r1] - cmp r0, 0 - beq _08095362 - adds r3, 0x1 -_08095362: - adds r1, 0x30 - subs r2, 0x1 - cmp r2, 0 - bge _0809535A - adds r0, r3, 0 - pop {r1} - bx r1 - .align 2, 0 -_08095370: .4byte gUnknown_203B480 - thumb_func_end sub_8095350 - - thumb_func_start sub_8095374 -sub_8095374: - push {lr} - movs r3, 0x1 - negs r3, r3 - movs r2, 0 - ldr r0, _08095398 - ldr r1, [r0] -_08095380: - ldrb r0, [r1] - cmp r0, 0x1 - bne _08095388 - adds r3, r2, 0 -_08095388: - adds r1, 0x30 - adds r2, 0x1 - cmp r2, 0x1F - ble _08095380 - adds r0, r3, 0 - pop {r1} - bx r1 - .align 2, 0 -_08095398: .4byte gUnknown_203B480 - thumb_func_end sub_8095374 - - thumb_func_start sub_809539C -sub_809539C: - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r1, r0, 24 - movs r3, 0 - ldr r0, _080953BC - ldr r2, [r0] -_080953AA: - ldrb r0, [r2] - cmp r0, r1 - bne _080953C0 - ldr r0, [r2, 0x10] - cmp r0, r4 - bne _080953C0 - adds r0, r3, 0 - b _080953CC - .align 2, 0 -_080953BC: .4byte gUnknown_203B480 -_080953C0: - adds r2, 0x30 - adds r3, 0x1 - cmp r3, 0x1F - ble _080953AA - movs r0, 0x1 - negs r0, r0 -_080953CC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_809539C - - thumb_func_start sub_80953D4 -sub_80953D4: - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r2, 0 - ldr r0, _080953EC - ldr r1, [r0] -_080953E0: - ldrb r0, [r1] - cmp r0, r3 - bne _080953F0 - adds r0, r2, 0 - b _080953FC - .align 2, 0 -_080953EC: .4byte gUnknown_203B480 -_080953F0: - adds r1, 0x30 - adds r2, 0x1 - cmp r2, 0x1F - ble _080953E0 - movs r0, 0x1 - negs r0, r0 -_080953FC: - pop {r1} - bx r1 - thumb_func_end sub_80953D4 - - thumb_func_start sub_8095400 -sub_8095400: - push {lr} - adds r3, r0, 0 - movs r2, 0 - ldr r0, _08095418 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x10 -_0809540E: - ldr r0, [r1] - cmp r0, r3 - bne _0809541C - adds r0, r2, 0 - b _08095428 - .align 2, 0 -_08095418: .4byte gUnknown_203B480 -_0809541C: - adds r1, 0x30 - adds r2, 0x1 - cmp r2, 0x1F - ble _0809540E - movs r0, 0x1 - negs r0, r0 -_08095428: - pop {r1} - bx r1 - thumb_func_end sub_8095400 - - thumb_func_start sub_809542C -sub_809542C: - push {r4,lr} - sub sp, 0x14 - ldr r4, _08095490 - ldr r2, [r4] - movs r1, 0x1 - strb r1, [r2] - ldr r2, [r4] - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [r2, 0x4] - str r1, [r2, 0x8] - bl Random - bl sub_8094D28 - bl sub_8094E4C - ldr r1, [r4] - str r0, [r1, 0x10] - bl GetPlayerPokemonStruct - ldr r1, [r4] - ldrh r0, [r0, 0x8] - strh r0, [r1, 0xC] - bl GetPlayerPokemonStruct - adds r1, r0, 0 - mov r0, sp - bl PrintPokeNameToBuffer - ldr r0, [r4] - adds r0, 0x14 - mov r1, sp - bl CopyStringtoBuffer - bl sub_8011C34 - ldr r1, [r4] - str r0, [r1, 0x24] - ldrb r0, [r1, 0x4] - bl GetUnk3 - ldr r1, [r4] - adds r1, 0x2C - strb r0, [r1] - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08095490: .4byte gUnknown_203B480 - thumb_func_end sub_809542C - - thumb_func_start sub_8095494 -sub_8095494: - lsls r1, 24 - lsrs r1, 24 - ldr r2, _080954B0 - ldr r3, [r2] - lsls r2, r1, 1 - adds r2, r1 - lsls r2, 4 - adds r3, r2 - ldr r1, [r3, 0x4] - ldr r2, [r3, 0x8] - str r1, [r0] - str r2, [r0, 0x4] - bx lr - .align 2, 0 -_080954B0: .4byte gUnknown_203B480 - thumb_func_end sub_8095494 - .align 2,0 diff --git a/include/code_8094F88.h b/include/code_8094F88.h index 967bd0f33..5a62c62d1 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -1,25 +1,25 @@ #ifndef GUARD_CODE_8094F88_H #define GUARD_CODE_8094F88_H -#include "global.h" +#include "item.h" +// TODO: same as unkStruct_8095228 struct unkStruct_203B480 { - u8 mailType; - struct DungeonLocation unk4; - u32 unk8; - u32 unkC; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1C; - u8 unk20; - u8 unk21; - u8 unk22; + /* 0x0 */ u8 mailType; + /* 0x1 */ u8 missionType; + /* 0x4 */ struct DungeonLocation dungeon; + /* 0x8 */ u32 unk8; + /* 0xC */ s16 clientSpecies; + /* 0xE */ s16 targetSpecies; + /* 0x10 */ u32 unk10; + /* 0x14 */ u8 playerName[0x20 - 0x14];; + struct ItemSlot unk20; u32 unk24; u32 unk28; - u8 unk2C; + s8 unk2C; u8 unk2D; + u8 padding4[0x30 - 0x2E]; }; struct unkStruct_203B484 @@ -34,4 +34,18 @@ struct unkStruct_203B48C s32 unk4[0x20]; }; +bool8 sub_80951FC(struct unkStruct_203B480 *param_1); +struct unkStruct_203B480 * sub_8095228(u8 index); +void sub_8095240(u8 index); +void sub_8095274(u32 param_1); +bool8 sub_8095298(s32 param_1); +void sub_80952C4(void); +bool8 sub_80952F0(u8 mailType, u32 param_2); +s32 sub_8095324(u8 mailType); +u32 sub_8095350(void); +s32 sub_8095374(void); +s32 sub_809539C(u8 mailType, u32 param_2); +s32 sub_80953D4(u8 param_1); + + #endif diff --git a/include/dungeon.h b/include/dungeon.h index 2be5e8a56..5b7d45409 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -31,6 +31,7 @@ const u8 *GetDungeonName1(u8 dungeon); u32 sub_80908D8(struct DungeonLocation *dungeon); u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2); bool8 sub_809095C(u8 dungeon); +s8 GetUnk3(u8 dungeon); u8 GetUnk9(u8 dungeon); #endif //GUARD_DUNGEON_H diff --git a/include/sub_8095228.h b/include/sub_8095228.h deleted file mode 100644 index 1dec21a72..000000000 --- a/include/sub_8095228.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef GUARD_SUB_8095228_H -#define GUARD_SUB_8095228_H - -struct unkStruct_8095228 -{ - /* 0x0 */ u8 mailType; // mail type - /* 0x1 */ u8 missionType; // mission type - /* 0x2 */ u8 unk2; - /* 0x3 */ u8 unk3; - /* 0x4 */ struct DungeonLocation dungeon; // dungeon - /* 0x8 */ u32 unk8; - /* 0xC */ s16 clientSpecies; // client pokemon - /* 0xE */ s16 targetSpecies; // target - u32 unk10; // TODO: verify that this is just a union of the 4 bytes in Wonder Mail - u8 padding2[0x20 - 0x14]; - struct ItemSlot unk20; - u8 padding3[0x28 - 0x24]; - u32 unk28; - s8 unk2C; - u8 padding4[0x30 - 0x2D]; -}; - -extern struct unkStruct_8095228 *sub_8095228(u8); - -#endif // GUARD_SUB_8095228_H diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 9ae464859..f74944a7f 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -5,7 +5,7 @@ #include "text.h" #include "item.h" #include "pokemon.h" -#include "sub_8095228.h" +#include "code_8094F88.h" #include "constants/wonder_mail.h" @@ -51,7 +51,7 @@ struct WonderMailStruct_203B2C0 u32 linkError; u8 unk48[0x30]; u8 unk78[0x30]; - struct unkStruct_8095228 unkA8; + struct unkStruct_203B480 unkA8; struct PokemonStruct unkD8; u8 unk130; u8 fill131[0x168 - 0x131]; @@ -93,8 +93,8 @@ struct WonderMailStruct_203B2C4 u32 unk40; /* 0x44 */ u32 linkError; // another link status u8 filler48[0x1B8 - 0x48]; - struct unkStruct_8095228 unk1B8; - struct unkStruct_8095228 unk1E8; + struct unkStruct_203B480 unk1B8; + struct unkStruct_203B480 unk1E8; s8 unk218; u32 unk21C; u8 filler220[0x30C - 0x220]; diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h index 7618bf84d..eb7b778b2 100644 --- a/include/wonder_mail_3.h +++ b/include/wonder_mail_3.h @@ -16,7 +16,7 @@ struct unkStruct_802C39C { /* 0x0 */ u32 unk0[2]; /* 0x8 */ struct DungeonLocation *unk8; - /* 0xC */ u8 *unkC; + /* 0xC */ u8 *playerName; /* 0x10 */ s16 unk10; /* 0x12 */ s16 unk12; /* 0x14 */ u8 unk14; diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 2a6f6b273..ea43105b9 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -57,7 +57,7 @@ void sub_8095118(void) unused = &gUnknown_203B480[iVar1]; gUnknown_203B480[iVar1].mailType = 0; unused = &gUnknown_203B480[iVar1]; - gUnknown_203B480[iVar1].unk22 = 0; + gUnknown_203B480[iVar1].unk20.itemIndex = 0; unused = &gUnknown_203B480[iVar1]; gUnknown_203B480[iVar1].unk2D = 0; } diff --git a/src/code_8095824.c b/src/code_8095824.c index 6289a1db5..b7241cef0 100644 --- a/src/code_8095824.c +++ b/src/code_8095824.c @@ -1,5 +1,10 @@ #include "global.h" +#include "dungeon.h" +#include "memory.h" #include "pokemon.h" +#include "random.h" +#include "save.h" +#include "text_util.h" #include "code_8094F88.h" extern struct unkStruct_203B484 *gUnknown_203B484; @@ -15,7 +20,208 @@ extern void RestorePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); -extern u32 sub_8095324(u32); +s32 sub_8095324(u8); + +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern s32 sub_8094E4C(void); +extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); +extern void sub_8094D28(s32); + +struct unkStruct_809542C +{ + struct DungeonLocation unk0; + u32 unk4; +}; + +bool8 sub_80951FC(struct unkStruct_203B480 *param_1) +{ + bool8 bVar1 = gUnknown_203B480[1].mailType != 0; + gUnknown_203B480[1] = *param_1; + return bVar1; +} + +struct unkStruct_203B480 * sub_8095228(u8 index) +{ + struct unkStruct_203B480 *ptr; + + ptr = &gUnknown_203B480[index]; + return ptr; +} + +void sub_8095240(u8 index) +{ + struct unkStruct_203B480 *unused; + + MemoryFill8((u8*)&gUnknown_203B480[index],0,sizeof(struct unkStruct_203B480)); + unused = &gUnknown_203B480[index]; + gUnknown_203B480[index].mailType = 0; + unused = &gUnknown_203B480[index]; + gUnknown_203B480[index].unk20.itemIndex = 0; +} + +void sub_8095274(u32 param_1) +{ + s32 iVar2; + s32 iVar3; + + gUnknown_203B48C->unk4[gUnknown_203B48C->unk0] = param_1; + iVar2 = gUnknown_203B48C->unk0; + iVar3 = 0; + if (iVar2 < 0x1f) { + iVar3 = iVar2 + 1; + } + gUnknown_203B48C->unk0 = iVar3; +} + +bool8 sub_8095298(s32 param_1) +{ + s32 index; + + for(index = 0; index < 0x20; index++) + { + if(gUnknown_203B48C->unk4[index] == param_1) return TRUE; + } + return FALSE; +} + +void sub_80952C4(void) +{ + s32 index; + + gUnknown_203B48C->unk0 = 0; + for(index = 0; index < 0x20; index++) + { + gUnknown_203B48C->unk4[index] = -1; + } +} + +bool8 sub_80952F0(u8 mailType, u32 param_2) +{ + struct unkStruct_203B480 *piVar1; + s32 index; + + for(index = 0, piVar1 = &gUnknown_203B480[0]; index < 0x20; piVar1++, index++) + { + if ((piVar1->mailType == mailType) && (piVar1->unk10 == param_2)) return TRUE; + } + return FALSE; +} + +s32 sub_8095324(u8 mailType) +{ + struct unkStruct_203B480 *piVar1; + s32 total = 0; + s32 index; + + for(index = 0, piVar1 = &gUnknown_203B480[0]; index < 0x20; piVar1++, index++) + { + if (piVar1->mailType == mailType) total++; + } + return total; +} + +u32 sub_8095350(void) +{ + struct unkStruct_203B480 *piVar1; + u32 total = 0; + s32 index; + + for(index = 0, piVar1 = &gUnknown_203B480[0]; index < 0x20; piVar1++, index++) + { + if (piVar1->mailType != 0) total++; + } + return total; +} + +s32 sub_8095374(void) +{ + struct unkStruct_203B480 *piVar1; + s32 retvar = -1; + s32 index; + + for(index = 0, piVar1 = &gUnknown_203B480[0]; index < 0x20; piVar1++, index++) + { + if (piVar1->mailType == 1) retvar = index; + } + return retvar; +} + +s32 sub_809539C(u8 mailType, u32 param_2) +{ + struct unkStruct_203B480 *piVar1; + s32 index; + + for(index = 0, piVar1 = &gUnknown_203B480[0]; index < 0x20; piVar1++, index++) + { + if ((piVar1->mailType == mailType) && (piVar1->unk10 == param_2)) return index; + } + return -1; +} + +s32 sub_80953D4(u8 param_1) +{ + struct unkStruct_203B480 *piVar1; + s32 index; + + for(index = 0, piVar1 = &gUnknown_203B480[0]; index < 0x20; piVar1++, index++) + { + if (piVar1->mailType == param_1) return index; + } + return -1; +} + +s32 sub_8095400(u32 param_1) +{ + u32 *piVar1; + s32 index; + + for(index = 0, piVar1 = &gUnknown_203B480[0].unk10; index < 0x20; piVar1 += 0xC, index++) + { + if (*piVar1 == param_1) return index; + } + return -1; +} + +void sub_809542C(struct unkStruct_809542C *param_1) +{ + u32 uVar4; + +#ifndef NONMATCHING + register struct unkStruct_203B480 *preload asm("r2"); +#else + struct unkStruct_203B480 *preload; +#endif + + u8 buffer [20]; + + gUnknown_203B480->mailType = 1; + preload = gUnknown_203B480; + uVar4 = param_1->unk4; + preload->dungeon = param_1->unk0; + preload->unk8 = uVar4; + sub_8094D28(Random()); + gUnknown_203B480->unk10 = sub_8094E4C(); + gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum; + PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct()); + CopyStringtoBuffer(gUnknown_203B480->playerName, buffer); + gUnknown_203B480->unk24 = sub_8011C34(); + gUnknown_203B480->unk2C = GetUnk3(gUnknown_203B480->dungeon.dungeonIndex); +} + +void sub_8095494(struct unkStruct_809542C *param_1, u8 index) +{ + u32 uVar1; + struct DungeonLocation temp; + struct unkStruct_203B480 *iVar2; + + iVar2 = gUnknown_203B480; + iVar2 += index; + + temp = iVar2->dungeon; + uVar1 = iVar2->unk8; + param_1->unk0 = temp; + param_1->unk4 = uVar1; +} u32 sub_80954B4(void) { @@ -115,14 +321,14 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) u8 temp; RestoreIntegerBits(a, &b->mailType, 4); - RestoreDungeonLocation(a, &b->unk4); + RestoreDungeonLocation(a, &b->dungeon); RestoreIntegerBits(a, &b->unk8, 0x18); - RestoreIntegerBits(a, &b->unkC, 0x9); + RestoreIntegerBits(a, &b->clientSpecies, 0x9); RestoreIntegerBits(a, &b->unk10, 0x20); - RestoreIntegerBits(a, &b->unk14, 0x50); - RestoreIntegerBits(a, &b->unk20, 0x8); - RestoreIntegerBits(a, &b->unk21, 0x8); - RestoreIntegerBits(a, &b->unk22, 0x8); + RestoreIntegerBits(a, &b->playerName, 0x50); + RestoreIntegerBits(a, &b->unk20.itemFlags, 0x8); + RestoreIntegerBits(a, &b->unk20.numItems, 0x8); + RestoreIntegerBits(a, &b->unk20.itemIndex, 0x8); RestoreIntegerBits(a, &b->unk24, 0x20); RestoreIntegerBits(a, &b->unk28, 0x20); RestoreIntegerBits(a, &b->unk2C, 0x8); @@ -140,14 +346,14 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) zero = 0; SaveIntegerBits(a, &b->mailType, 4); - SaveDungeonLocation(a, &b->unk4); + SaveDungeonLocation(a, &b->dungeon); SaveIntegerBits(a, &b->unk8, 0x18); - SaveIntegerBits(a, &b->unkC, 0x9); + SaveIntegerBits(a, &b->clientSpecies, 0x9); SaveIntegerBits(a, &b->unk10, 0x20); - SaveIntegerBits(a, &b->unk14, 0x50); - SaveIntegerBits(a, &b->unk20, 0x8); - SaveIntegerBits(a, &b->unk21, 0x8); - SaveIntegerBits(a, &b->unk22, 0x8); + SaveIntegerBits(a, &b->playerName, 0x50); + SaveIntegerBits(a, &b->unk20.itemFlags, 0x8); + SaveIntegerBits(a, &b->unk20.numItems, 0x8); + SaveIntegerBits(a, &b->unk20.itemIndex, 0x8); SaveIntegerBits(a, &b->unk24, 0x20); SaveIntegerBits(a, &b->unk28, 0x20); SaveIntegerBits(a, &b->unk2C, 0x8); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 071e468cd..909dda642 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -3,12 +3,12 @@ #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" #include "dungeon.h" #include "code_80958E8.h" - +#include "pokemon.h" +#include "code_8094F88.h" extern s32 GetDungeonFloorCount(u8); extern bool8 sub_809017C(struct DungeonLocation *); diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 8b2281ca6..d77329525 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -6,9 +6,9 @@ #include "input.h" #include "team_inventory.h" #include "friend_rescue.h" -#include "sub_8095228.h" #include "item.h" #include "code_8094F88.h" +#include "menu.h" #include "rescue_password_menu.h" extern struct TeamInventory *gTeamInventory_203B460; @@ -17,7 +17,6 @@ extern u8 *gUnknown_203B484; extern void SetFriendRescueMenuState(u32); extern s32 sub_80144A4(s32 *); extern void sub_802F2C0(); -extern u8 sub_809539C(u32, u32); extern void sub_8095240(u8); extern u32 sub_802F298(); @@ -26,7 +25,6 @@ extern char gAvailablePokemonNames[0x50]; extern struct WonderMailStruct_203B33C *gUnknown_203B33C; -extern u8 sub_80953D4(u32); extern u8 sub_801CF14(u32); extern u8 gUnknown_80E48A8[]; @@ -44,7 +42,7 @@ extern u8 gUnknown_80E31FC[]; extern u32 sub_80154F0(); extern void sub_80155F0(); -struct unkStruct_8095228 *sub_8095228(u8); +struct unkStruct_203B480 *sub_8095228(u8); extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32); extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); @@ -83,13 +81,10 @@ extern void sub_8023DA4(void); extern void sub_8035D1C(void); extern u16 sub_8023B44(void); -extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_203B480 *r0); extern void sub_8095274(u32); -extern void sub_80951BC(struct unkStruct_8095228 *r0); -extern void sub_80951FC(struct unkStruct_8095228 *r0); -extern u8 sub_809539C(u32, u32); +extern void sub_80951BC(struct unkStruct_203B480 *r0); extern u8 sub_800D588(void); -extern u32 sub_8095324(u32); extern s32 sub_8095190(void); extern u8 gUnknown_80E44A4[]; @@ -436,11 +431,11 @@ void sub_8033DBC(void) { u32 return_var; u32 input_var; - struct unkStruct_8095228 temp; - struct unkStruct_8095228 *temp2; + struct unkStruct_203B480 temp; + struct unkStruct_203B480 *temp2; return_var = sub_80154F0(); - MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_203B480)); switch(return_var) { case 3: @@ -490,7 +485,8 @@ void sub_8033DBC(void) sub_80951FC(&temp); temp2 = sub_8095228(sub_809539C(1, temp.unk10)); temp2->mailType = 7; - MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); + //MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); + MemoryFill8((u8 *)gUnknown_203B484, 0, 0x5C); SetFriendRescueMenuState(0x40); break; case 24: @@ -1333,11 +1329,11 @@ void sub_8034D54(void) void sub_8034D74(void) { u32 return_var; - struct unkStruct_8095228 temp; - struct unkStruct_8095228 *temp2; + struct unkStruct_203B480 temp; + struct unkStruct_203B480 *temp2; return_var = sub_80154F0(); - MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_203B480)); switch(return_var) { case 3: @@ -1448,7 +1444,7 @@ void sub_8034F58(void) void sub_8034F88(void) { s32 temp; - struct unkStruct_8095228 *temp2; + struct unkStruct_203B480 *temp2; if(sub_80144A4(&temp) == 0) { @@ -1644,7 +1640,7 @@ void sub_80351E0(void) void sub_8035210(void) { s32 temp; - struct unkStruct_8095228 *temp2; + struct unkStruct_203B480 *temp2; if(sub_80144A4(&temp) == 0) { diff --git a/src/load_screen.c b/src/load_screen.c index c4895ba6d..969f0d6b7 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -47,7 +47,6 @@ extern void sub_8035CF4(u32 *, u32, u32); extern void SetMenuItems(u32 *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, u32 *); -extern void sub_8095240(u32); extern void sub_80920D8(u8 *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); @@ -58,7 +57,6 @@ extern u32 GetNumAdventures(void); extern void xxx_call_draw_string(u32 x, u32 y, const u8 *, u32, u32); extern void PrintDungeonLocationtoBuffer(u8 *, u8 *); extern void sub_80922B4(u8 *, const u8 *, u32); -extern s32 sub_8095324(u32); extern u32 sub_8001658(u32, u32); extern void sub_80073E0(u32); diff --git a/src/post_office_guide.c b/src/post_office_guide.c index 43b0d7a72..178194d2f 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -6,8 +6,8 @@ #include "menu.h" #include "memory.h" #include "text.h" -#include "sub_8095228.h" #include "wonder_mail.h" +#include "code_8094F88.h" struct PostOfficeHelper { @@ -597,7 +597,7 @@ void DisplayMissionObjectives(void) { s32 yCoord; s32 jobSlotIdx; - struct unkStruct_8095228 *iVar8; + struct unkStruct_203B480 *iVar8; struct WonderMail *jobInfo; u8 auStack248 [100]; volatile u8 local_94; diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 57b42332c..6806cd6fb 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -5,7 +5,6 @@ #include "menu.h" #include "pokemon.h" #include "save.h" -#include "sub_8095228.h" #include "text.h" #include "main_menu.h" #include "rescue_password_menu.h" @@ -31,14 +30,14 @@ extern void sub_8031E10(void); extern void DisplayPasswordAcceptScreen(void); -extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_8095228 *r0); +extern u32 sub_8039068(u32, u8 *passwordBuffer, struct unkStruct_203B480 *r0); -extern void sub_80951BC(struct unkStruct_8095228 *r0); -extern void sub_80951FC(struct unkStruct_8095228 *r0); +extern void sub_80951BC(struct unkStruct_203B480 *r0); +extern bool8 sub_80951FC(struct unkStruct_203B480 *r0); extern u8 sub_8012FD8(u32 *r0); extern void sub_8013114(u32 *, s32 *); extern u32 sub_80154F0(void); -extern u8 sub_809539C(u32, u32); +extern s32 sub_809539C(u8, u32); extern void sub_8095274(u32); extern u32 sub_8031DCC(void); extern void sub_80391F8(void); @@ -47,13 +46,12 @@ extern void DisplayRescuePasswordError(u32); extern struct MainMenu *GetMainMenu(void); -extern void sub_8039174(void); extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern void sub_8035CF4(u32 *r0, u32, u32); bool8 IsInvalidItemReward(u8); -bool8 sub_80952F0(u32, u32); -bool8 sub_8095298(u32); -bool8 sub_803D204(u8 *, struct unkStruct_8095228 *); +bool8 sub_80952F0(u8, u32); +bool8 sub_8095298(s32); +bool8 sub_803D204(u8 *, struct unkStruct_203B480 *); extern s32 GetDungeonFloorCount(u8); extern s32 sub_8095190(void); @@ -81,7 +79,7 @@ extern struct MenuItem gUnknown_80E75A0[]; void CreateRescuePasswordMenu(u32 currMenu) { - struct unkStruct_8095228 *temp; + struct unkStruct_203B480 *temp; s32 counter; if(gRescuePasswordMenu == NULL) @@ -121,7 +119,7 @@ void CreateRescuePasswordMenu(u32 currMenu) break; case MENU_DISPLAY_RESCUE_PASSWORD: temp = sub_8095228(0x1F); - MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_203B480)); temp->mailType = 2; temp->unk20.itemIndex = ITEM_ID_NOTHING; sub_8031D70(0x1F, 0); @@ -163,12 +161,12 @@ static inline s32 UpdateRescuePasswordMenu_sub(s32 otherMenu) s32 UpdateRescuePasswordMenu(void) { - struct unkStruct_8095228 *puVar5; - struct unkStruct_8095228 *puVar6; + struct unkStruct_203B480 *puVar5; + struct unkStruct_203B480 *puVar6; u32 iVar7; struct MainMenu *iVar9; s32 nextMenu; - struct unkStruct_8095228 local_44; + struct unkStruct_203B480 local_44; u32 local_14; u32 subtract; @@ -184,7 +182,7 @@ s32 UpdateRescuePasswordMenu(void) case 3: case 5: iVar7 = sub_80154F0(); - MemoryFill8((u8 *)&local_44, 0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)&local_44, 0, sizeof(struct unkStruct_203B480)); switch(iVar7) { case 1: @@ -451,7 +449,7 @@ u32 ConvertMenutoRescuePasswordState(u32 unused) return uVar1; } -u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_8095228 *param_3) +u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *param_3) { if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) || (param_3->dungeon.dungeonFloor >= GetDungeonFloorCount(param_3->dungeon.dungeonIndex)) || diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 59e35c627..5067f568e 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -4,7 +4,7 @@ #include "pokemon.h" #include "file_system.h" #include "item.h" -#include "sub_8095228.h" +#include "code_8094F88.h" #include "wonder_mail.h" #include "memory.h" #include "menu.h" @@ -15,6 +15,7 @@ #include "code_800D090.h" extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; +struct unkStruct_203B480 * sub_8095228(u8 index); #define THANK_YOU_MAIL_MAIN_MENU 0 #define ANYTHING_ELSE_THANK_YOU_MAIN_MENU 1 @@ -153,13 +154,11 @@ const struct MenuItem gUnknown_80DEEE4[4] = #include "data/thank_you_wonder_mail.h" -extern s32 sub_80953D4(u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); extern u8 sub_8012FD8(u32 *r0); extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32); extern void sub_8030810(u32); -extern u32 sub_8095324(u32); extern u32 sub_8031DCC(void); extern void sub_8031E00(void); extern void sub_8095240(u8); @@ -236,7 +235,6 @@ extern void sub_80306A8(u32, 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); -extern u8 sub_809539C(u32, u32); extern u8 sub_800D588(void); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); extern void sub_8031D70(u8, u32); @@ -253,8 +251,7 @@ extern void sub_801CB5C(u32); extern void sub_801CCD8(void); extern void sub_8011C28(u32); extern u32 sub_80154F0(void); -extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); -extern u8 sub_809539C(u32, u32); +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_203B480 *r0); u32 CreateThankYouMailPelipper(void) @@ -263,7 +260,7 @@ u32 CreateThankYouMailPelipper(void) struct OpenedFile *faceFile; s32 uVar2; int counter; - struct unkStruct_8095228 *temp; + struct unkStruct_203B480 *temp; ResetUnusedInputStruct(); sub_800641C(0,1,1); @@ -822,12 +819,12 @@ void AdvanceToThankYouPasswordProcessing(void) void HandleThankYouMailPasswordMenu(void) { u8 uVar1; - struct unkStruct_8095228 *puVar5; + struct unkStruct_203B480 *puVar5; u32 return_var; - struct unkStruct_8095228 temp; + struct unkStruct_203B480 temp; return_var = sub_80154F0(); - MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_203B480)); switch(return_var) { case 3: @@ -954,7 +951,7 @@ void sub_802A75C(void) void HandleConfirmItemtoSendMenu(void) { s32 temp; - struct unkStruct_8095228 *return_var; + struct unkStruct_203B480 *return_var; if(sub_80144A4(&temp) == 0) { switch(temp) @@ -1137,7 +1134,7 @@ void sub_802A9FC(void) void HandleMailCommunicationMenu(void) { s32 temp; - struct unkStruct_8095228 *return_var; + struct unkStruct_203B480 *return_var; if(sub_80144A4(&temp) == 0) { switch(temp) @@ -1278,7 +1275,7 @@ void UpdateThankYouMailText(void) struct PokemonStruct *pokeStruct; struct PokemonStruct *pokeStruct2; s32 linkStatus; - struct unkStruct_8095228 *puVar4; + struct unkStruct_203B480 *puVar4; switch(gUnknown_203B2C4->state) { case 5: @@ -1335,13 +1332,13 @@ void UpdateThankYouMailText(void) switch(gUnknown_203B2C4->unk40) { case 6: - MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_203B480)); 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)); + MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_203B480)); + MemoryFill8((u8 *)&gUnknown_203B2C4->unk1E8,0, sizeof(struct unkStruct_203B480)); gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8); break; } diff --git a/src/wonder_mail.c b/src/wonder_mail.c index f2958d6b0..c584e39e8 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -5,7 +5,6 @@ #include "file_system.h" #include "item.h" #include "input.h" -#include "sub_8095228.h" #include "wonder_mail.h" #include "memory.h" #include "menu.h" @@ -25,13 +24,11 @@ extern u32 sub_8031050(); extern void sub_80310B4(); extern u32 sub_8095350(); extern u8 sub_80A2824(u8); -extern u8 sub_809539C(u32, u32); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; extern s32 sub_8095190(void); -extern u32 sub_8095324(u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void nullsub_130(void); extern void sub_8028348(void); @@ -48,11 +45,11 @@ extern void sub_8030DE4(void); extern void sub_803092C(void); extern u32 sub_80154F0(); -extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_203B480 *r0); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, void *r5, u32); extern void sub_8095274(u32); extern void sub_80155F0(); -extern void sub_80951BC(struct unkStruct_8095228 *r0); +extern void sub_80951BC(struct unkStruct_203B480 *r0); extern void sub_8013114(u32 *r0, s32 *r1); extern void sub_8023C60(); extern u32 sub_8023A94(u32); @@ -1162,7 +1159,7 @@ void sub_8028FC0() void sub_8028FDC(void) { s32 temp; - struct unkStruct_8095228 *return_var; + struct unkStruct_203B480 *return_var; if(sub_80144A4(&temp) != 0) { @@ -1453,10 +1450,10 @@ void sub_80293D8(void) void sub_80293F4(void) { u32 return_var; - struct unkStruct_8095228 temp; + struct unkStruct_203B480 temp; return_var = sub_80154F0(); - MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_203B480)); switch(return_var) { case 3: diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index ad16732c5..d7a2fd386 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -7,10 +7,10 @@ #include "text.h" #include "menu.h" #include "save.h" -#include "sub_8095228.h" #include "gUnknown_203B46C.h" #include "wonder_mail.h" #include "code_800D090.h" +#include "code_8094F88.h" struct unkStruct_203B2C8 { @@ -359,7 +359,7 @@ void nullsub_132(void) void sub_802B3E0(void) { - struct unkStruct_8095228 *iVar3; + struct unkStruct_203B480 *iVar3; char *monName; char teamNameBuffer[40]; @@ -441,7 +441,7 @@ void sub_802B57C(void) void sub_802B5B8(void) { u32 uVar2; - struct unkStruct_8095228 *puVar3; + struct unkStruct_203B480 *puVar3; s32 temp; if (sub_80144A4(&temp) == 0) { diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 20cef191d..74b2ffa3f 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -3,7 +3,6 @@ #include "input.h" #include "memory.h" #include "item.h" -#include "sub_8095228.h" #include "pokemon.h" #include "code_8094F88.h" #include "constants/wonder_mail.h" @@ -239,7 +238,7 @@ void sub_80308A0(void) void sub_803092C(void) { - struct unkStruct_8095228 *pbVar2; + struct unkStruct_203B480 *pbVar2; s32 r4; s32 r5; s32 r6; @@ -266,7 +265,7 @@ void sub_803092C(void) local.unk3C[12] = 0; local.unk8 = &pbVar2->dungeon; - local.unkC = pbVar2->padding2; + local.unkC = pbVar2->playerName; local.unk10 = (pbVar2->clientSpecies); local.unk12 = (pbVar2->clientSpecies); diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 8da1e098f..b35f601db 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -330,7 +330,7 @@ void sub_80313D8(u32 param_1) unused = &gUnknown_203B480[iVar2]; gUnknown_203B480[iVar2].mailType = 0; unused = &gUnknown_203B480[iVar2]; - gUnknown_203B480[iVar2].unk22 = 0; + gUnknown_203B480[iVar2].unk20.itemIndex = 0; } break; } diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index be22e6429..efb089066 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -3,9 +3,9 @@ #include "memory.h" #include "text.h" #include "input.h" -#include "sub_8095228.h" #include "wonder_mail.h" #include "menu.h" +#include "code_8094F88.h" #define SELECT_WONDER_MAIL_MODE_MAIN_SCREEN 0 #define SEND_WONDER_MAIL_MAIN_SCREEN 1 @@ -118,7 +118,6 @@ struct unkStruct_203B3E8 EWRAM_DATA struct unkStruct_203B3E8 *gUnknown_203B3E8; -extern u32 sub_8095324(u32); extern u32 sub_80144A4(s32 *); extern u32 sub_8011C1C(void); extern void SetWonderMailMainMenuState(u8);