feat: the great labeling of wonder mail

This commit is contained in:
Seth Barberee
2023-03-27 20:25:08 -07:00
parent cfe7799295
commit dfedc6a896
32 changed files with 1368 additions and 1301 deletions

View File

@@ -1371,7 +1371,7 @@ _0801D49C:
b _0801D4B6
_0801D4AA:
movs r0, 0
bl sub_802C860
bl InitializeJobListMenu
b _0801D4B6
_0801D4B2:
bl sub_801DCC4

View File

@@ -22,7 +22,7 @@ CreatePelipperBoardMenu:
adds r1, 0xC0
movs r0, 0x2
str r0, [r1]
bl sub_802C4A4
bl HasNoPelipperBoardJobs
lsls r0, 24
cmp r0, 0
beq _0802EB66
@@ -93,7 +93,7 @@ _0802EBB6:
str r0, [r1, 0x64]
b _0802EC0A
.align 2, 0
_0802EBDC: .4byte gUnknown_203B308
_0802EBDC: .4byte gPelipperBoard
_0802EBE0: .4byte gPelipperBoard_BulletinBoard
_0802EBE4: .4byte gPelipperBoard_JobList
_0802EBE8:
@@ -202,7 +202,7 @@ _0802ECA2:
pop {r0}
bx r0
.align 2, 0
_0802ECA8: .4byte gUnknown_203B308
_0802ECA8: .4byte gPelipperBoard
_0802ECAC: .4byte gUnknown_80D4990
_0802ECB0: .4byte gUnknown_80D4970
thumb_func_end sub_802EC10

View File

@@ -210,29 +210,29 @@ _0802CC1C:
.4byte _0802CC30
.4byte _0802CC48
_0802CC30:
bl sub_802C620
bl GetPelipperBoardSlotIndex
ldr r1, _0802CC44
ldr r1, [r1]
strb r0, [r1, 0xC]
movs r0, 0x2
bl sub_802C910
bl SetJobListState
b _0802CC6A
.align 2, 0
_0802CC44: .4byte gUnknown_203B2F0
_0802CC48:
bl sub_802C620
bl GetPelipperBoardSlotIndex
ldr r1, _0802CC5C
ldr r1, [r1]
strb r0, [r1, 0xC]
movs r0, 0x4
bl sub_802C910
bl SetJobListState
b _0802CC6A
.align 2, 0
_0802CC5C: .4byte gUnknown_203B2F0
_0802CC60:
bl sub_802C688
movs r0, 0x5
bl sub_802C910
bl SetJobListState
_0802CC6A:
pop {r0}
bx r0
@@ -306,22 +306,22 @@ _0802CCF4:
_0802CD06:
strb r1, [r0]
movs r0, 0x1
bl sub_802C910
bl SetJobListState
b _0802CD2E
.align 2, 0
_0802CD10: .4byte 0x00000133
_0802CD14: .4byte gUnknown_203B2F0
_0802CD18:
movs r0, 0x3
bl sub_802C910
bl SetJobListState
b _0802CD2E
_0802CD20:
movs r0, 0x4
bl sub_802C910
bl SetJobListState
b _0802CD2E
_0802CD28:
movs r0, 0x1
bl sub_802C910
bl SetJobListState
_0802CD2E:
add sp, 0x4
pop {r4}
@@ -366,7 +366,7 @@ _0802CD7C:
bne _0802CDB0
_0802CD80:
movs r0, 0x1
bl sub_802C910
bl SetJobListState
b _0802CDB0
_0802CD88:
ldr r0, [r4]
@@ -379,11 +379,11 @@ _0802CD88:
beq _0802CDAA
bl sub_802C688
movs r0, 0x5
bl sub_802C910
bl SetJobListState
b _0802CDB0
_0802CDAA:
movs r0, 0x1
bl sub_802C910
bl SetJobListState
_0802CDB0:
add sp, 0x4
pop {r4}
@@ -401,7 +401,7 @@ sub_802CDB8:
bhi _0802CDD0
bl sub_802DF24
movs r0, 0x1
bl sub_802C910
bl SetJobListState
_0802CDD0:
pop {r0}
bx r0

View File

@@ -20,7 +20,7 @@ struct unkStruct_203B480
struct Item unk20;
u32 unk24;
u32 unk28;
s8 unk2C;
s8 rescuesAllowed;
u8 unk2D;
u8 padding4[0x30 - 0x2E];
};
@@ -39,13 +39,13 @@ struct unkStruct_203B48C
bool8 sub_80951FC(struct unkStruct_203B480 *param_1);
struct unkStruct_203B480 * sub_8095228(u8 index);
void sub_8095240(u8 index);
void DeleteMailAtIndex(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 CountMailType(u8 mailType);
u32 sub_8095350(void);
u32 CountAllMail(void);
s32 sub_8095374(void);
s32 sub_809539C(u8 mailType, u32 param_2);
s32 sub_80953D4(u8 mailType);

View File

@@ -12,7 +12,6 @@ struct unkStruct_203B304
u32 fallbackState;
u8 mailboxIndex;
u8 mailIndex;
u8 fillA[0xC - 0xA];
u32 unkC;
u8 fill10[0x50 - 0x10];
u8 unk50;
@@ -28,4 +27,19 @@ struct unkStruct_203B304
extern void SetMailboxState(u32);
extern s32 GetNumAcceptedJobs(void);
enum MailBoxStates {
INITIALIZE_MAILBOX,
MAIN_MAILBOX_MENU,
// 2 is ???
MAILBOX_EXIT = 3,
MAIL_MENU = 4,
MAIL_MENU_1 = 5,
MAIL_ACTION_MENU = 6,
MAIL_INFO = 7,
JOB_LIST_MENU = 8,
PKMN_NEWS_MENU = 0x9,
PKMN_NEWS_MENU_1 = 0xA,
DISPLAY_SEL_PKMN_NEWS = 0xB,
};
#endif // GUARD_MAILBOX_H

View File

@@ -5,8 +5,8 @@ void sub_8012C60(u32 x, u32 y, u32 param_3, u32 param_4, u32 param_5);
void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2);
void sub_8012D08(struct UnkTextStruct2 *param_1, s32 param_2);
void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2);
void sub_8012D60(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 param_5, s32 index);
void sub_8012E04(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 param_5, s32 index);
void sub_8012D60(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index);
void sub_8012E04(struct MenuStruct *param_1, const struct MenuItem *menuItems, u32 *colorArray, u16 *param_4, s32 menuAction, s32 index);
void sub_8012EA4(struct MenuStruct *param_1, bool8 r1);
void sub_8012EBC(struct MenuStruct *param_1);
bool8 sub_8012FD8(struct MenuStruct *param_1);

31
include/pelipper_board.h Normal file
View File

@@ -0,0 +1,31 @@
// Guessing based off of 203B304
struct unkStruct_203B308
{
// size: 0xB6 << 1
u32 state;
u32 unk4;
u8 jobIndex;
u32 unkC;
u8 fill10[0x50 - 0x10];
u8 unk50;
u8 fill51[0x64 - 0x51];
u32 menuAction1;
u32 menuAction2;
struct MenuStruct unk6C;
struct MenuItem unkBC[8];
u16 unkFC[8];
struct UnkTextStruct2 unk10C[4];
};
extern struct unkStruct_203B308 *gPelipperBoard;
enum PelipperBoardStates {
INITIALIZE_PELIPPER_BOARD,
MAIN_PELIPPER_BOARD_MENU,
// 2 is ???
PELIPPER_BOARD_EXIT = 3,
PELIPPER_JOB_INFO = 7,
PELIPPER_JOB_LIST_MENU,
};

View File

@@ -77,7 +77,7 @@ struct WonderMailStruct_203B2C0
u32 unk534;
s32 unk538; // A7 << 3
u32 unk53C;
u32 unk540; // A8 << 4
u32 mailCount; // A8 << 4
s16 speciesNum;
};
@@ -113,6 +113,6 @@ struct WonderMailStruct_203B2C4
struct unkStruct_802F204 unk53C;
};
void sub_8028B04(u32 r0);
void SetFriendRescueCounterState(u32 r0);
#endif

View File

@@ -39,7 +39,7 @@ struct unkStruct_203B2F8
bool8 unk9;
u8 dungeonID;
u8 unkB;
struct unkSubStruct_203B2F8 *unkC;
struct unkSubStruct_203B2F8 *mail;
u8 jobSlotIndex;
u8 fill11[0x14 - 0x11];
u32 unk14;
@@ -60,3 +60,24 @@ struct unkStruct_203B2F8
u32 unk1E4;
};
extern struct unkStruct_203B2F8 *gUnknown_203B2F8;
enum WonderMailRescueStates
{
INITIAL_WONDER_MAIL_CHECK,
// 1 is ??
WONDER_MAIL_EXIT = 2,
DUPLICATE_WONDER_MAIL = 3,
DUPLICATE_WONDER_MAIL_1,
// 5 is ??
// 6 is ??
// 7 is ??
RECEIVE_WONDER_MAIL = 8,
// 9 is ??
JOB_LIST_FULL = 0xA,
DRAW_JOB_LIST = 0xB,
DRAW_JOB_LIST_1 = 0xC,
// 0xD is ??
// 0xE is ??
// 0xF is ??
// 0x10 is ??
};

View File

@@ -132,6 +132,7 @@ SECTIONS {
src/wonder_mail.o(.text);
src/thank_you_wonder_mail.o(.text);
src/wonder_mail_2.o(.text);
src/pokemon_news.o(.text);
src/wonder_mail_2_mid.o(.text);
src/wonder_mail_2_1.o(.text);
asm/wonder_mail_802C860.o(.text);
@@ -429,6 +430,7 @@ SECTIONS {
src/wonder_mail.o(.rodata);
src/thank_you_wonder_mail.o(.rodata);
src/wonder_mail_2.o(.rodata);
src/pokemon_news.o(.rodata);
src/wonder_mail_2_1.o(.rodata);
src/wonder_mail_3.o(.rodata);
src/wonder_mail_802DF88.o(.rodata);

View File

@@ -16,6 +16,7 @@
#include "exclusive_pokemon.h"
#include "pokemon.h"
#include "rescue_team_info.h"
#include "code_8094F88.h"
extern void sub_801180C(void);
extern void NDS_LoadOverlay_GroundMain(void);
@@ -42,7 +43,6 @@ extern void LoadTitleScreen(void);
extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *);
extern void sub_80095CC(u32, u32);
extern s32 sub_80953D4(u8);
extern void sub_8095240(u8);
extern void nullsub_33(void);
extern u32 sub_80009D0(u32);
@@ -174,9 +174,9 @@ void GameLoop(void)
CloseFile(gTitlePaletteFile);
switch (nextMenu) {
case 2: {
s32 tmp5 = sub_80953D4(7);
if (tmp5 != -1) {
sub_8095240(tmp5);
s32 mailIndex = sub_80953D4(7);
if (mailIndex != -1) {
DeleteMailAtIndex(mailIndex);
tmp3 = sub_80009D0(2);
} else {
tmp3 = sub_80009D0(1);

View File

@@ -48,7 +48,7 @@ struct unkStruct_203B480 * sub_8095228(u8 index)
return ptr;
}
void sub_8095240(u8 index)
void DeleteMailAtIndex(u8 index)
{
struct unkStruct_203B480 *unused;
@@ -120,7 +120,7 @@ s32 CountMailType(u8 mailType)
return total;
}
u32 sub_8095350(void)
u32 CountAllMail(void)
{
struct unkStruct_203B480 *ptr;
u32 total = 0;
@@ -205,7 +205,7 @@ void sub_809542C(struct unkStruct_809542C *param_1)
PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct());
CopyStringtoBuffer(gUnknown_203B480->playerName, buffer);
gUnknown_203B480->unk24 = sub_8011C34();
gUnknown_203B480->unk2C = GetRescuesAllowed(gUnknown_203B480->dungeon.id);
gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->dungeon.id);
}
void sub_8095494(struct unkStruct_809542C *param_1, u8 index)
@@ -331,7 +331,7 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
RestoreIntegerBits(a, &b->unk20.id, 0x8);
RestoreIntegerBits(a, &b->unk24, 0x20);
RestoreIntegerBits(a, &b->unk28, 0x20);
RestoreIntegerBits(a, &b->unk2C, 0x8);
RestoreIntegerBits(a, &b->rescuesAllowed, 0x8);
RestoreIntegerBits(a, &temp, 1);
b->unk2D = temp & 1;
@@ -356,7 +356,7 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
SaveIntegerBits(a, &b->unk20.id, 0x8);
SaveIntegerBits(a, &b->unk24, 0x20);
SaveIntegerBits(a, &b->unk28, 0x20);
SaveIntegerBits(a, &b->unk2C, 0x8);
SaveIntegerBits(a, &b->rescuesAllowed, 0x8);
if(b->unk2D != 0)
puVar2 = &neg1;

View File

@@ -242,7 +242,7 @@ bool8 sub_8096A08(u8 dungeon, s32 param_2)
return FALSE;
}
bool8 sub_8096A78(struct WonderMail *mail)
bool8 AcceptJob(struct WonderMail *mail)
{
s32 index;
@@ -347,7 +347,7 @@ void sub_8096BD0(void)
sub_8096D24();
}
bool8 sub_8096C08(u8 *param_1)
bool8 sub_8096C08(u8 *jobIndex)
{
s32 index;
struct WonderMail *mail;
@@ -357,7 +357,7 @@ bool8 sub_8096C08(u8 *param_1)
if(mail->mailType > 4 && mail->unk2 == 4)
{
param_1[0] = index;
*jobIndex = index;
return TRUE;
}
}

View File

@@ -9,7 +9,6 @@
extern void SetFriendRescueMenuState(u32);
extern s32 sub_80144A4(s32 *);
extern void sub_802F2C0();
extern void sub_8095240(u8);
extern u32 sub_802F298();
extern char gUnknown_202E5D8[0x50];

View File

@@ -13,6 +13,7 @@
#include "menu.h"
#include "rescue_password_menu.h"
#include "menu_input.h"
#include "code_8094F88.h"
extern struct TeamInventory *gTeamInventory_203B460;
@@ -21,7 +22,6 @@ extern u8 *gUnknown_203B484;
extern void SetFriendRescueMenuState(u32);
extern s32 sub_80144A4(s32 *);
extern void sub_802F2C0();
extern void sub_8095240(u8);
extern u32 sub_802F298();
extern char gUnknown_202E5D8[0x50];
@@ -246,7 +246,6 @@ void sprintfStatic(char *buffer, const char *text, ...);
extern void SetFriendRescueMenuState(u32);
extern s32 sub_80144A4(s32 *);
extern void sub_802F2C0();
extern void sub_8095240(u8);
extern u32 sub_802F298();
extern char gUnknown_202E5D8[0x50];
@@ -1933,7 +1932,7 @@ void nullsub_49(void)
void sub_80352A4(void)
{
u8 uVar1;
u8 mailIndex;
char *monName;
if ( sub_802F298() == 3) {
@@ -1941,8 +1940,8 @@ void sub_80352A4(void)
CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER);
monName = GetMonSpecies(MONSTER_PELIPPER);
strcpy(gAvailablePokemonNames, monName);
uVar1 = sub_809539C(6, gUnknown_203B33C->unk420);
sub_8095240(uVar1);
mailIndex = sub_809539C(6, gUnknown_203B33C->unk420);
DeleteMailAtIndex(mailIndex);
SetFriendRescueMenuState(0x70);
}
}

View File

@@ -237,7 +237,7 @@ u32 UpdateLoadScreenMenu(void)
nextMenu = 2; // MENU_???
break;
case MENU_AWAITING_RESCUE:
sub_8095240(0);
DeleteMailAtIndex(0);
nextMenu = 4; // MENU_???
break;
case MENU_DELETE_SAVE_PROMPT:

View File

@@ -82,7 +82,7 @@ extern void CreateMailAcceptedStatusBox(u32);
extern struct WonderMail * GetMailboxSlotInfo(u32);
extern void sub_803B35C(struct WonderMail *, u32 *);
extern void sub_802DE84(u32 *);
extern void sub_802C860(u32);
extern void InitializeJobListMenu(u32);
extern void sub_802B640(u32, u32, u32);
extern void sub_802B7D0(u32);
extern void sub_802B9FC(u8);
@@ -92,7 +92,7 @@ u32 sub_802DFB0(void)
gUnknown_203B304 = MemoryAlloc(sizeof(struct unkStruct_203B304), 8);
gUnknown_203B304->unk64 = 0;
gUnknown_203B304->unk68 = 0;
SetMailboxState(0);
SetMailboxState(INITIALIZE_MAILBOX);
return 1;
}
@@ -100,36 +100,36 @@ u32 sub_802DFD8(void)
{
switch(gUnknown_203B304->state)
{
case 0:
SetMailboxState(1);
case INITIALIZE_MAILBOX:
SetMailboxState(MAIN_MAILBOX_MENU);
break;
case 1:
case MAIN_MAILBOX_MENU:
HandleMailboxMenu();
break;
case 2:
nullsub_133();
break;
case 4:
case 5:
case MAIL_MENU:
case MAIL_MENU_1:
sub_802E578();
break;
case 6:
case MAIL_ACTION_MENU:
HandleMailActionMenu();
break;
case 7:
case MAIL_INFO:
sub_802E73C();
break;
case 8:
case JOB_LIST_MENU:
sub_802E758();
break;
case 9:
case 0xA:
case PKMN_NEWS_MENU:
case PKMN_NEWS_MENU_1:
sub_802E774();
break;
case 0xB:
case DISPLAY_SEL_PKMN_NEWS:
sub_802E7D0();
break;
case 3:
case MAILBOX_EXIT:
default:
return 3;
}
@@ -154,20 +154,20 @@ void SetMailboxState(u32 newState)
void sub_802E0A0(void)
{
s32 iVar1;
s32 index;
sub_8006518(gUnknown_203B304->unk10C);
switch(gUnknown_203B304->state)
{
case 1:
for(iVar1 = 0; iVar1 < 4; iVar1++)
case MAIN_MAILBOX_MENU:
for(index = 0; index < 4; index++)
{
gUnknown_203B304->unk10C[iVar1] = gUnknown_80E0284;
gUnknown_203B304->unk10C[index] = gUnknown_80E0284;
}
CreateMailboxMenu();
gUnknown_203B304->unk10C[2] = gUnknown_80E029C;
sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC);
break;
case 6:
case MAIL_ACTION_MENU:
CreateMailActionMenu();
gUnknown_203B304->unk10C[2] = gUnknown_80E02B4;
sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC);
@@ -175,9 +175,9 @@ void sub_802E0A0(void)
gUnknown_203B304->unk10C[3] = gUnknown_80E02CC;
break;
default:
for(iVar1 = 0; iVar1 < 4; iVar1++)
for(index = 0; index < 4; index++)
{
gUnknown_203B304->unk10C[iVar1] = gUnknown_80E0284;
gUnknown_203B304->unk10C[index] = gUnknown_80E0284;
}
break;
}
@@ -189,41 +189,41 @@ void sub_802E1AC(void)
{
switch(gUnknown_203B304->state)
{
case 1:
case MAIN_MAILBOX_MENU:
sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, gUnknown_203B304->unkFC, gUnknown_203B304->unk64, 2);
break;
case 4:
case MAIL_MENU:
sub_802BD14(0, 0, 4);
break;
case 5:
case MAIL_MENU_1:
sub_802BE94(1);
break;
case 6:
case MAIL_ACTION_MENU:
CreateMailMenu();
CreateMailAcceptedStatusBox(3);
sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, 0, gUnknown_203B304->unk68, 2);
break;
case 7:
case MAIL_INFO:
sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC);
gUnknown_203B304->unkC = 3;
gUnknown_203B304->unk50 = 0;
sub_802DE84(&gUnknown_203B304->unkC);
break;
case 8:
sub_802C860(0);
case JOB_LIST_MENU:
InitializeJobListMenu(0);
break;
case 9:
case PKMN_NEWS_MENU:
sub_802B640(0, 0, 8);
break;
case 0xA:
case PKMN_NEWS_MENU_1:
sub_802B7D0(1);
break;
case 0xB:
case DISPLAY_SEL_PKMN_NEWS:
sub_802B9FC(gUnknown_203B304->mailIndex);
break;
case 0:
case INITIALIZE_MAILBOX:
case 2:
case 3:
case MAILBOX_EXIT:
break;
}
}

View File

@@ -28,7 +28,7 @@ extern void sub_802DF24(void);
extern struct WonderMail *GetMailboxSlotInfo(u8);
extern u8 HasNoMailinMailbox(void);
extern u32 sub_802BDEC(u32);
extern void sub_8096A78(struct WonderMail *);
extern void AcceptJob(struct WonderMail *);
extern void sub_8096C80(void);
extern void sub_8096D24(void);
extern void ResetMailboxSlot(u8);
@@ -52,21 +52,23 @@ void HandleMailboxMenu(void)
}
switch(menuAction)
{
// Check Mail
case 2:
if(!HasNoMailinMailbox())
SetMailboxState(4);
SetMailboxState(MAIL_MENU);
else
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
break;
// Job List
case 3:
if(!HasNoAcceptedJobs())
SetMailboxState(8);
SetMailboxState(JOB_LIST_MENU);
else
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
break;
case 4:
if(!HasNoPKMNNews())
SetMailboxState(9);
SetMailboxState(PKMN_NEWS_MENU);
else
sub_8012EA4(&gUnknown_203B304->unk6C, 1);
break;
@@ -74,37 +76,37 @@ void HandleMailboxMenu(void)
SetMailboxState(2);
break;
case 1:
SetMailboxState(3);
SetMailboxState(MAILBOX_EXIT);
break;
}
}
void sub_802E578(void)
{
struct WonderMail *return_var;
struct WonderMail *mail;
switch(sub_802BDEC(1))
{
case 3:
gUnknown_203B304->mailboxIndex = sub_802BE74();
SetMailboxState(6);
SetMailboxState(MAIL_ACTION_MENU);
break;
case 4:
gUnknown_203B304->mailboxIndex = sub_802BE74();
return_var = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
if(return_var->mailType == 1)
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
if(mail->mailType == 1)
{
gUnknown_203B304->mailIndex = return_var->dungeon.floor;
gUnknown_203B304->fallbackState = 5;
SetMailboxState(0xB);
gUnknown_203B304->mailIndex = mail->dungeon.floor;
gUnknown_203B304->fallbackState = MAIL_MENU_1;
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
}
else
SetMailboxState(7);
SetMailboxState(MAIL_INFO);
break;
case 2:
sub_802BEDC();
SetMailboxState(1);
SetMailboxState(MAIN_MAILBOX_MENU);
break;
case 0:
case 1:
@@ -115,7 +117,7 @@ void sub_802E578(void)
void HandleMailActionMenu(void)
{
s32 menuAction = 0;
struct WonderMail *return_var;
struct WonderMail *mail;
sub_802BDEC(0);
@@ -130,9 +132,11 @@ void HandleMailActionMenu(void)
case 3:
case 4:
break;
// Accept
case 5:
PlaySound(0x133);
sub_8096A78(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex));
AcceptJob(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex));
sub_8096C80();
sub_8096D24();
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
@@ -140,37 +144,43 @@ void HandleMailActionMenu(void)
if(HasNoMailinMailbox())
{
sub_802BEDC();
SetMailboxState(1);
SetMailboxState(MAIN_MAILBOX_MENU);
}
else
SetMailboxState(5);
SetMailboxState(MAIL_MENU_1);
break;
// Info
case 8:
SetMailboxState(7);
SetMailboxState(MAIL_INFO);
break;
// Store
case 6:
PlaySound(0x133);
return_var = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
ReceivePKMNNews(return_var->dungeon.floor);
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
ReceivePKMNNews(mail->dungeon.floor);
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
sub_8096078();
if(HasNoMailinMailbox())
{
sub_802BEDC();
SetMailboxState(1);
SetMailboxState(MAIN_MAILBOX_MENU);
}
else
SetMailboxState(5);
SetMailboxState(MAIL_MENU_1);
break;
// Read
case 7:
PlayMenuSoundEffect(0);
return_var = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
gUnknown_203B304->mailIndex = return_var->dungeon.floor;
gUnknown_203B304->fallbackState = 5;
SetMailboxState(0xB);
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
gUnknown_203B304->mailIndex = mail->dungeon.floor;
gUnknown_203B304->fallbackState = MAIL_MENU_1;
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
break;
case 1:
SetMailboxState(5);
SetMailboxState(MAIL_MENU_1);
break;
}
}
@@ -182,7 +192,7 @@ void sub_802E73C(void)
case 2:
case 3:
sub_802DF24();
SetMailboxState(5);
SetMailboxState(MAIL_MENU_1);
case 0:
case 1:
break;
@@ -196,7 +206,7 @@ void sub_802E758(void)
case 2:
case 3:
sub_802C8F4();
SetMailboxState(1);
SetMailboxState(MAIN_MAILBOX_MENU);
case 0:
case 1:
break;
@@ -213,12 +223,12 @@ void sub_802E774(void)
case 3:
case 4:
gUnknown_203B304->mailIndex = GetPokemonNewsIndex();
gUnknown_203B304->fallbackState = 0xA;
SetMailboxState(0xB);
gUnknown_203B304->fallbackState = PKMN_NEWS_MENU_1;
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
break;
case 2:
sub_802B81C();
SetMailboxState(1);
SetMailboxState(MAIN_MAILBOX_MENU);
break;
}
}

View File

@@ -192,7 +192,7 @@ void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2)
"\tbx r0");
}
void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5,
void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 menuAction,
s32 index)
{
const u8 *textPtr;
@@ -214,7 +214,7 @@ void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32
if(textPtr)
{
while (textPtr != 0) {
if ((0 <= param_5) && (param_5 == menuItems->menuAction)) {
if ((0 <= menuAction) && (menuAction == menuItems->menuAction)) {
menuIndex = counter;
}
if (*menuItems->text == '*') {
@@ -237,7 +237,7 @@ void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32
param_1->menuAction = -1;
}
void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 param_5,
void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 *colorArray,u16 *param_4,s32 menuAction,
s32 index)
{
const u8 *textPtr;
@@ -253,7 +253,7 @@ void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32
if (textPtr) {
menuItemPtr = menuItems;
while (textPtr != NULL) {
if ((0 <= param_5) && (param_5 == menuItemPtr->menuAction)) {
if ((0 <= menuAction) && (menuAction == menuItemPtr->menuAction)) {
menuIndex = counter;
}
if (*menuItemPtr->text == '*') {

View File

@@ -4,27 +4,8 @@
#include "menu.h"
#include "input.h"
#include "menu_input.h"
#include "pelipper_board.h"
// Guessing based off of 203B304
struct unkStruct_203B308
{
// size: 0xB6 << 1
u32 state;
u32 unk4;
u8 jobIndex;
u8 fill9[0xC - 9];
u32 unkC;
u8 fill10[0x50 - 0x10];
u8 unk50;
u8 fill51[0x64 - 0x51];
u32 unk64;
u32 unk68;
struct MenuStruct unk6C;
struct MenuItem unkBC[8];
u16 unkFC[8];
struct UnkTextStruct2 unk10C[4];
};
extern struct unkStruct_203B308 *gUnknown_203B308;
extern void SetPelipperBoardState(u32);
const struct UnkTextStruct2 gUnknown_80E0330 =
@@ -86,31 +67,31 @@ extern void sub_802EC10(void);
extern void sub_802C10C(u32, u32, u32);
extern void sub_802C28C(u32);
extern void sub_802C39C(void);
extern void DrawPelipperBoardJobMenu(void);
extern void CreatePelipperAcceptedStatusBox(u32);
extern struct WonderMail *GetPelipperBoardSlotInfo(u32);
extern void sub_803B35C(struct WonderMail *, u32 *);
extern void sub_802DE84(u32 *);
extern void sub_802C860(u32);
extern void InitializeJobListMenu(u32);
u32 sub_802E864(void)
{
gUnknown_203B308 = MemoryAlloc(sizeof(struct unkStruct_203B308), 8);
gUnknown_203B308->unk64 = 0;
gUnknown_203B308->unk68 = 0;
gUnknown_203B308->unk4 = 0;
SetPelipperBoardState(0);
gPelipperBoard = MemoryAlloc(sizeof(struct unkStruct_203B308), 8);
gPelipperBoard->menuAction1 = 0;
gPelipperBoard->menuAction2 = 0;
gPelipperBoard->unk4 = 0;
SetPelipperBoardState(INITIALIZE_PELIPPER_BOARD);
return 1;
}
u32 sub_802E890(void)
{
switch(gUnknown_203B308->state)
switch(gPelipperBoard->state)
{
case 0:
SetPelipperBoardState(1);
case INITIALIZE_PELIPPER_BOARD:
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
break;
case 1:
case MAIN_PELIPPER_BOARD_MENU:
sub_802ECB4();
break;
case 2:
@@ -123,13 +104,13 @@ u32 sub_802E890(void)
case 6:
sub_802EDBC();
break;
case 7:
case PELIPPER_JOB_INFO:
sub_802EEA0();
break;
case 8:
case PELIPPER_JOB_LIST_MENU:
sub_802EEBC();
break;
case 3:
case PELIPPER_BOARD_EXIT:
default:
return 3;
}
@@ -138,64 +119,64 @@ u32 sub_802E890(void)
u32 sub_802E90C(void)
{
return gUnknown_203B308->unk4;
return gPelipperBoard->unk4;
}
void sub_802E918(void)
{
if(gUnknown_203B308 != NULL)
if(gPelipperBoard != NULL)
{
MemoryFree(gUnknown_203B308);
gUnknown_203B308 = NULL;
MemoryFree(gPelipperBoard);
gPelipperBoard = NULL;
}
}
void SetPelipperBoardState(u32 newState)
{
gUnknown_203B308->state = newState;
gPelipperBoard->state = newState;
sub_802E94C();
sub_802EA58();
}
void sub_802E94C(void)
{
s32 iVar1;
sub_8006518(gUnknown_203B308->unk10C);
switch(gUnknown_203B308->state)
s32 index;
sub_8006518(gPelipperBoard->unk10C);
switch(gPelipperBoard->state)
{
case 1:
for(iVar1 = 0; iVar1 < 4; iVar1++)
case MAIN_PELIPPER_BOARD_MENU:
for(index = 0; index < 4; index++)
{
gUnknown_203B308->unk10C[iVar1] = gUnknown_80E0330;
gPelipperBoard->unk10C[index] = gUnknown_80E0330;
}
CreatePelipperBoardMenu();
gUnknown_203B308->unk10C[2] = gUnknown_80E0348;
sub_8012CAC(&gUnknown_203B308->unk10C[2], gUnknown_203B308->unkBC);
gPelipperBoard->unk10C[2] = gUnknown_80E0348;
sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->unkBC);
break;
case 6:
sub_802EC10();
gUnknown_203B308->unk10C[2] = gUnknown_80E0360;
sub_8012CAC(&gUnknown_203B308->unk10C[2], gUnknown_203B308->unkBC);
gUnknown_203B308->unk10C[2].unkC = 6;
gUnknown_203B308->unk10C[3] = gUnknown_80E0378;
gPelipperBoard->unk10C[2] = gUnknown_80E0360;
sub_8012CAC(&gPelipperBoard->unk10C[2], gPelipperBoard->unkBC);
gPelipperBoard->unk10C[2].unkC = 6;
gPelipperBoard->unk10C[3] = gUnknown_80E0378;
break;
default:
for(iVar1 = 0; iVar1 < 4; iVar1++)
for(index = 0; index < 4; index++)
{
gUnknown_203B308->unk10C[iVar1] = gUnknown_80E0330;
gPelipperBoard->unk10C[index] = gUnknown_80E0330;
}
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B308->unk10C, 1, 1);
sub_800641C(gPelipperBoard->unk10C, 1, 1);
}
void sub_802EA58(void)
{
switch(gUnknown_203B308->state)
switch(gPelipperBoard->state)
{
case 1:
sub_8012D60(&gUnknown_203B308->unk6C, gUnknown_203B308->unkBC, 0, gUnknown_203B308->unkFC, gUnknown_203B308->unk64, 2);
case MAIN_PELIPPER_BOARD_MENU:
sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->unkBC, 0, gPelipperBoard->unkFC, gPelipperBoard->menuAction1, 2);
break;
case 4:
sub_802C10C(0, 0, 4);
@@ -204,22 +185,22 @@ void sub_802EA58(void)
sub_802C28C(1);
break;
case 6:
sub_802C39C();
DrawPelipperBoardJobMenu();
CreatePelipperAcceptedStatusBox(3);
sub_8012D60(&gUnknown_203B308->unk6C, gUnknown_203B308->unkBC, 0, 0, gUnknown_203B308->unk68, 2);
sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->unkBC, 0, 0, gPelipperBoard->menuAction2, 2);
break;
case 7:
sub_803B35C(GetPelipperBoardSlotInfo(gUnknown_203B308->jobIndex), &gUnknown_203B308->unkC);
gUnknown_203B308->unkC = 3;
gUnknown_203B308->unk50 = 0;
sub_802DE84(&gUnknown_203B308->unkC);
case PELIPPER_JOB_INFO:
sub_803B35C(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex), &gPelipperBoard->unkC);
gPelipperBoard->unkC = 3;
gPelipperBoard->unk50 = 0;
sub_802DE84(&gPelipperBoard->unkC);
break;
case 8:
sub_802C860(0);
case PELIPPER_JOB_LIST_MENU:
InitializeJobListMenu(0);
break;
case 0:
case INITIALIZE_PELIPPER_BOARD:
case 2:
case 3:
case PELIPPER_BOARD_EXIT:
break;
}
}

View File

@@ -8,26 +8,7 @@
#include "team_inventory.h"
#include "wonder_mail.h"
#include "menu_input.h"
struct unkStruct_203B308
{
// size: 0xB6 << 1
u32 state;
u32 unk4;
u8 jobIndex;
u8 fill9[0xC - 9];
u32 unkC;
u8 fill10[0x50 - 0x10];
u8 unk50;
u8 fill51[0x64 - 0x51];
u32 unk64;
u32 unk68;
struct MenuStruct unk6C;
struct MenuItem unkBC[8];
u16 unkFC[8];
struct UnkTextStruct2 unk10C[4];
};
extern struct unkStruct_203B308 *gUnknown_203B308;
#include "pelipper_board.h"
extern u8 gPelipperBoard_Accepted[];
extern u8 gPelipperStatusSlash[];
@@ -40,10 +21,10 @@ extern void sub_802C8F4(void);
extern u32 sub_802DEE0(void);
extern void sub_802DF24(void);
extern struct WonderMail *GetPelipperBoardSlotInfo(u8);
extern u8 sub_802C4A4(void);
extern u8 HasNoPelipperBoardJobs(void);
extern void sub_8096C80(void);
extern void sub_8096D24(void);
extern void sub_8096A78(struct WonderMail*);
extern void AcceptJob(struct WonderMail*);
extern void ResetPelipperBoardSlot(u8);
extern void sub_80965F4(void);
extern void sub_802C2D4(void);
@@ -57,31 +38,33 @@ void sub_802ECB4(void)
{
s32 menuAction = 0;
if(!sub_8012FD8(&gUnknown_203B308->unk6C))
if(!sub_8012FD8(&gPelipperBoard->unk6C))
{
sub_8013114(&gUnknown_203B308->unk6C, &menuAction);
if(menuAction != 1) gUnknown_203B308->unk64 = menuAction;
sub_8013114(&gPelipperBoard->unk6C, &menuAction);
if(menuAction != 1) gPelipperBoard->menuAction1 = menuAction;
}
switch(menuAction)
{
// Bulletin Board
case 2:
if(!sub_802C4A4())
if(!HasNoPelipperBoardJobs())
SetPelipperBoardState(4);
else
sub_8012EA4(&gUnknown_203B308->unk6C, 1);
sub_8012EA4(&gPelipperBoard->unk6C, 1);
break;
// Job List
case 3:
if(!HasNoAcceptedJobs())
SetPelipperBoardState(8);
SetPelipperBoardState(PELIPPER_JOB_LIST_MENU);
else
sub_8012EA4(&gUnknown_203B308->unk6C, 1);
sub_8012EA4(&gPelipperBoard->unk6C, 1);
break;
case 5:
SetPelipperBoardState(2);
break;
case 1:
SetPelipperBoardState(3);
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
break;
}
}
@@ -91,16 +74,16 @@ void sub_802ED4C(void)
switch(sub_802C1E4(1))
{
case 3:
gUnknown_203B308->jobIndex = sub_802C26C();
gPelipperBoard->jobIndex = sub_802C26C();
SetPelipperBoardState(6);
break;
case 4:
gUnknown_203B308->jobIndex = sub_802C26C();
gPelipperBoard->jobIndex = sub_802C26C();
SetPelipperBoardState(7);
break;
case 2:
sub_802C2D4();
SetPelipperBoardState(1);
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
break;
case 0:
case 1:
@@ -114,55 +97,57 @@ void sub_802EDBC(void)
s32 menuAction = 0;
sub_802C1E4(0);
if(!sub_8012FD8(&gUnknown_203B308->unk6C))
if(!sub_8012FD8(&gPelipperBoard->unk6C))
{
sub_8013114(&gUnknown_203B308->unk6C, &menuAction);
if(menuAction != 1) gUnknown_203B308->unk68 = menuAction;
sub_8013114(&gPelipperBoard->unk6C, &menuAction);
if(menuAction != 1) gPelipperBoard->menuAction2 = menuAction;
}
switch(menuAction)
{
// Accept
case 4:
PlaySound(0x133);
mail = GetPelipperBoardSlotInfo(gUnknown_203B308->jobIndex);
mail = GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex);
switch(mail->mailType)
{
case 2:
gUnknown_203B308->unk4 = 1;
ResetPelipperBoardSlot(gUnknown_203B308->jobIndex);
gPelipperBoard->unk4 = 1;
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
sub_80965F4();
sub_802C2D4();
SetPelipperBoardState(3);
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
break;
case 3:
gUnknown_203B308->unk4 = 2;
ResetPelipperBoardSlot(gUnknown_203B308->jobIndex);
gPelipperBoard->unk4 = 2;
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
sub_80965F4();
sub_802C2D4();
SetPelipperBoardState(3);
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
break;
case 4:
gUnknown_203B308->unk4 = 3;
ResetPelipperBoardSlot(gUnknown_203B308->jobIndex);
gPelipperBoard->unk4 = 3;
ResetPelipperBoardSlot(gPelipperBoard->jobIndex);
sub_80965F4();
sub_802C2D4();
SetPelipperBoardState(3);
SetPelipperBoardState(PELIPPER_BOARD_EXIT);
break;
default:
sub_8096A78(mail);
AcceptJob(mail);
sub_8096C80();
sub_8096D24();
if(sub_802C4A4())
if(HasNoPelipperBoardJobs())
{
sub_802C2D4();
SetPelipperBoardState(1);
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
}
else
SetPelipperBoardState(5);
break;
}
break;
// Info
case 5:
SetPelipperBoardState(7);
SetPelipperBoardState(PELIPPER_JOB_INFO);
break;
case 1:
SetPelipperBoardState(5);
@@ -191,7 +176,7 @@ void sub_802EEBC(void)
case 2:
case 3:
sub_802C8F4();
SetPelipperBoardState(1);
SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU);
case 0:
case 1:
break;

741
src/pokemon_news.c Normal file
View File

@@ -0,0 +1,741 @@
#include "constants/input.h"
#include "global.h"
#include "file_system.h"
#include "input.h"
#include "pokemon.h"
#include "pokemon_mail.h"
#include "memory.h"
#include "text.h"
#include "menu.h"
#include "save.h"
#include "menu_input.h"
struct unkStruct_203B2CC
{
// size: 0xD4;
u8 receivedNewsletters[NUM_POKEMON_NEWS];
u32 unk38;
u8 fill3C[0x50 - 0x3C];
s16 unk50;
s16 unk52;
s16 unk54;
s16 unk56;
u16 unk58;
u16 numPKMNNews;
u8 fill5C[0x6C - 0x5C];
u32 unk6C;
struct UnkTextStruct2 *unk70;
struct UnkTextStruct2 unk74[4];
};
extern struct unkStruct_203B2CC *gUnknown_203B2CC;
struct unkStruct_203B2D4
{
// size: 0x94
/* 0x0 */ s32 state;
/* 0x4 */ u8 currMailIndex;
s32 unk8;
s32 unkC;
const u8 *unk10[4];
u32 unk20;
u32 unk24;
struct UnkTextStruct2 unk28[4];
u32 unk88;
u8 fill8C[0x94 - 0x8C];
};
extern struct unkStruct_203B2D4 *gUnknown_203B2D4;
struct unkStruct_203B2D8
{
// size: 0xA4
u8 unk0[4];
u32 unk4;
u8 fill8[0x1C - 0x8];
s16 unk1C;
s16 unk1E;
s16 unk20;
s16 unk22;
s16 fill24;
/* 0x26 */ s16 emptyMailSlots;
u8 fill28[0x38 - 0x28];
u32 unk38;
struct UnkTextStruct2 *unk3C;
struct UnkTextStruct2 unk40[4];
u8 unkA0[4];
};
extern struct unkStruct_203B2D8 *gUnknown_203B2D8;
extern struct GameOptions *gGameOptionsRef;
const struct UnkTextStruct2 gUnknown_80DFBD0 =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const u8 gUnknown_80DFBE8[] = { 0x01, 0x00, 0x0C, 0x00 };
const struct UnkTextStruct2 gUnknown_80DFBEC =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x18, 0x0E,
0x0E, 0x00,
gUnknown_80DFBE8
};
ALIGNED(4) const u8 gUnknown_80DFC04[] = "News List";
ALIGNED(4) static const char wonder_mail_2_fill1[] = "pksdir0";
const struct UnkTextStruct2 gUnknown_80DFC18 =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const u8 gUnkData_80DFC30[] = { 0x01, 0x00, 0x16, 0x00 };
const struct UnkTextStruct2 gUnknown_80DFC34 =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x1A, 0x10,
0x10, 0x00,
gUnkData_80DFC30
};
ALIGNED(4) const u8 gUnknown_80DFC4C[] = "She";
ALIGNED(4) const u8 gUnknown_80DFC50[] = "He";
ALIGNED(4) static const char wonder_mail_2_fill2[] = "pksdir0";
const struct UnkTextStruct2 gUnknown_80DFC5C =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DFC74 =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x18, 0x0E,
0x0E, 0x00,
NULL
};
ALIGNED(4) const u8 gMailboxText[] = "Mailbox";
ALIGNED(4) static const char wonder_mail_2_fill3[] = "pksdir0";
const struct UnkTextStruct2 gUnknown_80DFC9C =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DFCB4 =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x18, 0x0E,
0x0E, 0x00,
NULL
};
ALIGNED(4) const u8 gBulletinBoardText[] = "Bulletin Board";
ALIGNED(4) static const char wonder_mail_2_fill4[] = "pksdir0";
extern u8 HasNoPKMNNews(void);
extern u8 CheckPKMNNewsSlot(u8 r0);
extern u16 gUnknown_203B2D0;
extern u16 gUnknown_203B2D2;
extern u16 gUnknown_203B2DC;
extern s32 GetNumPKMNNews(void);
extern void sub_802B880(void);
extern void CreatePKMNNewsMenu(void);
extern void sub_8013818(void *, u32, u32, u32);
extern u8 sub_80138B8(void *, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(u32 *);
extern void sub_8013660(u32 *);
extern void AddMenuCursorSprite(u32 *);
extern void sub_802BCC4(void);
extern void sub_802BB14(u32);
extern void sub_801317C(u32 *);
extern u8 HasNoMailinMailbox(void);
extern void sub_802BF30(void);
extern void CreateMailMenu(void);
extern s32 CountEmptyMailSlots(void);
extern void sub_8013848(u32 *, s32, u32, u32);
void sub_802BB28(void);
extern void sub_802BB98(void);
extern void sub_802BC08(void);
extern void sub_802BB28(void);
extern void sub_8013E54(void);
extern s32 sub_8012A64(u32 *, u32);
extern char gUnknown_202E5D8[0x50];
extern char gAvailablePokemonNames[0x50];
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_802BC7C(void);
extern void sub_80073E0(u32);
extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32);
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
extern void sub_803B6B0(u32, u32, u32, u32);
extern s32 sub_8013800(u32 *, s32);
extern void sub_8013984(u32 *);
extern struct PokemonStruct *sub_808D3BC(void);
extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon);
u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2)
{
if(HasNoPKMNNews())
{
return 0;
}
else
{
if(gUnknown_203B2CC == NULL)
{
gUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 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, GetNumPKMNNews(), r2, r0);
gUnknown_203B2CC->unk50 = gUnknown_203B2D0;
gUnknown_203B2CC->unk56 = gUnknown_203B2D2;
sub_8013984(&gUnknown_203B2CC->unk38);
sub_802B880();
CreatePKMNNewsMenu();
return 1;
}
}
u32 sub_802B720(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B2CC->unk38);
return 0;
}
else
{
switch(GetKeyPress(&gUnknown_203B2CC->unk38))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
case INPUT_START_BUTTON:
PlayMenuSoundEffect(4);
return 4;
}
if(sub_80138B8(&gUnknown_203B2CC->unk38, 1) != 0)
{
sub_802B880();
CreatePKMNNewsMenu();
return 1;
}
else
return 0;
}
}
u8 GetPokemonNewsIndex(void)
{
return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + gUnknown_203B2CC->unk50];
}
void sub_802B7D0(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2CC->unk74, 0, 0);
gUnknown_203B2CC->numPKMNNews = GetNumPKMNNews();
sub_8013984(&gUnknown_203B2CC->unk38);
sub_802B880();
CreatePKMNNewsMenu();
if(r0 != 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;
}
}
NAKED
void sub_802B880(void)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tldr r4, _0802B8D0\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x52\n"
"\tmovs r1, 0\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x6C]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x82\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x6C]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x84\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x74\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"\t_0802B8D0: .4byte gUnknown_203B2CC");
}
void CreatePKMNNewsMenu(void)
{
s32 index;
s32 y;
s32 new_index;
u8 mailIndex;
sub_8008C54(gUnknown_203B2CC->unk6C);
sub_80073B8(gUnknown_203B2CC->unk6C);
xxx_call_draw_string(0xA, 0, gUnknown_80DFC04, gUnknown_203B2CC->unk6C, 0);
sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->unk56 + 1, 2, 7, gUnknown_203B2CC->unk6C);
for(index = 0; index < gUnknown_203B2CC->unk52; index++)
{
y = sub_8013800(&gUnknown_203B2CC->unk38, index);
new_index = (gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + index;
mailIndex = gUnknown_203B2CC->receivedNewsletters[new_index];
sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C);
sub_802BC7C();
xxx_format_and_draw(0x15, y, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0);
}
sub_80073E0(gUnknown_203B2CC->unk6C);
}
s32 GetNumPKMNNews(void)
{
s32 index;
s32 newsCount;
newsCount = 0;
for(index = 0; index < NUM_POKEMON_NEWS; index++)
{
if(CheckPKMNNewsSlot(index))
{
gUnknown_203B2CC->receivedNewsletters[newsCount] = index;
newsCount++;
}
}
return newsCount;
}
bool8 HasNoPKMNNews(void)
{
s32 index;
for(index = 0; index < NUM_POKEMON_NEWS; index++)
{
if(CheckPKMNNewsSlot(index))
{
return FALSE;
}
}
return TRUE;
}
u32 sub_802B9FC(u8 mailIndex)
{
gUnknown_203B2D4 = MemoryAlloc(sizeof(struct unkStruct_203B2D4), 8);
gUnknown_203B2D4->currMailIndex = mailIndex;
sub_801317C(&gUnknown_203B2D4->unk88);
gUnknown_203B2D4->unk24 = 0;
gUnknown_203B2D4->unk28[0] = gUnknown_80DFC34;
gUnknown_203B2D4->unk28[1] = gUnknown_80DFC18;
gUnknown_203B2D4->unk28[2] = gUnknown_80DFC18;
gUnknown_203B2D4->unk28[3] = gUnknown_80DFC18;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D4->unk28, 1, 1);
gUnknown_203B2D4->unk8 = 0;
sub_802BCC4();
sub_802BC7C();
sub_802BB14(0);
return 1;
}
u32 sub_802BA8C(void)
{
switch(gUnknown_203B2D4->state)
{
case 0:
sub_802BB98();
break;
case 1:
sub_802BC08();
break;
case 3:
return 3;
case 2:
default:
return 2;
}
return 0;
}
void sub_802BACC(void)
{
if(gUnknown_203B2D4 != NULL)
{
gUnknown_203B2D4->unk28[gUnknown_203B2D4->unk24] = gUnknown_80DFC18;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D4->unk28, 1, 1);
MemoryFree(gUnknown_203B2D4);
gUnknown_203B2D4 = NULL;
}
}
void sub_802BB14(u32 newState)
{
gUnknown_203B2D4->state = newState;
sub_802BB28();
}
void sub_802BB28(void)
{
switch(gUnknown_203B2D4->state)
{
case 0:
case 1:
sub_8008C54(gUnknown_203B2D4->unk24);
sub_80073B8(gUnknown_203B2D4->unk24);
xxx_format_and_draw(0xA, 0, GetPokemonMailHeadline(gUnknown_203B2D4->currMailIndex), gUnknown_203B2D4->unk24, 0);
xxx_format_and_draw(0x6, 0x14, gUnknown_203B2D4->unk10[gUnknown_203B2D4->unk8], gUnknown_203B2D4->unk24, 0);
sub_80073E0(gUnknown_203B2D4->unk24);
gUnknown_203B2D4->unk8++;
break;
case 2:
case 3:
break;
}
}
void sub_802BB98(void)
{
if(gUnknown_203B2D4->unkC != 0)
{
if(gUnknown_203B2D4->unk20 & 8)
sub_8013E54();
gUnknown_203B2D4->unk20++;
}
switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24))
{
case 1:
PlayMenuSoundEffect(0);
if(gUnknown_203B2D4->unkC != 0)
sub_802BB14(1);
else
sub_802BB14(3);
break;
case 2:
PlayMenuSoundEffect(1);
sub_802BB14(2);
break;
}
}
void sub_802BC08(void)
{
if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC)
{
if(gUnknown_203B2D4->unk20 & 8)
sub_8013E54();
gUnknown_203B2D4->unk20++;
}
switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24))
{
case 1:
PlayMenuSoundEffect(0);
if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC)
sub_802BB14(1);
else
sub_802BB14(3);
break;
case 2:
PlayMenuSoundEffect(1);
sub_802BB14(2);
break;
}
}
void sub_802BC7C(void)
{
PrintPokeNameToBuffer(gAvailablePokemonNames, sub_808D3BC());
if(gGameOptionsRef->playerGender == FEMALE)
{
strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC4C); // She
}
else
{
strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC50); // He
}
}
void sub_802BCC4(void)
{
const char *mailTextPtr;
mailTextPtr = GetPokemonMailText(gUnknown_203B2D4->currMailIndex);
gUnknown_203B2D4->unkC = 0;
gUnknown_203B2D4->unk10[0] = mailTextPtr;
// Count all the {EXTRA_MSG}'s
while (*mailTextPtr != '\0') {
if (*mailTextPtr == '#') {
if ((mailTextPtr[1] == 'P') || (mailTextPtr[1] == 'p')) {
gUnknown_203B2D4->unkC++;
gUnknown_203B2D4->unk10[gUnknown_203B2D4->unkC] = mailTextPtr + 2;
}
mailTextPtr += 2;
}
else {
mailTextPtr++;
}
}
}
u32 sub_802BD14(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3)
{
if (HasNoMailinMailbox()) {
return 0;
}
else
{
if (gUnknown_203B2D8 == NULL) {
gUnknown_203B2D8 = MemoryAlloc(sizeof(struct unkStruct_203B2D8),8);
}
gUnknown_203B2D8->unk38 = param_1;
gUnknown_203B2D8->unk3C = &gUnknown_203B2D8->unk40[param_1];
sub_8006518(gUnknown_203B2D8->unk40);
gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC74;
gUnknown_203B2D8->unk3C->unk14 = gUnknown_203B2D8->unkA0;
if (param_2 != NULL) {
gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38].unk08 = *param_2;
}
sub_8012D34(gUnknown_203B2D8->unk3C,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40,1,1);
sub_8013848(&gUnknown_203B2D8->unk4,CountEmptyMailSlots(),param_3,param_1);
gUnknown_203B2D8->unk1C = gUnknown_203B2DC;
sub_8013984(&gUnknown_203B2D8->unk4);
sub_802BF30();
CreateMailMenu();
return 1;
}
}
u32 sub_802BDEC(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B2D8->unk4);
return 0;
}
switch(GetKeyPress(&gUnknown_203B2D8->unk4))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
case INPUT_START_BUTTON:
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(&gUnknown_203B2D8->unk4, 1) != 0)
{
sub_802BF30();
CreateMailMenu();
return 1;
}
else
return 0;
}
}
u8 sub_802BE74(void) {
return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + gUnknown_203B2D8->unk1C];
}
void sub_802BE94(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40, 0, 0);
gUnknown_203B2D8->emptyMailSlots = CountEmptyMailSlots();
sub_8013984(&gUnknown_203B2D8->unk4);
sub_802BF30();
CreateMailMenu();
if(r0 != 0)
{
AddMenuCursorSprite(&gUnknown_203B2D8->unk4);
}
}
void sub_802BEDC(void)
{
if(gUnknown_203B2D8 != NULL)
{
gUnknown_203B2DC = gUnknown_203B2D8->unk1C;
gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC5C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40, 1, 1);
MemoryFree(gUnknown_203B2D8);
gUnknown_203B2D8 = NULL;
}
}
NAKED
void sub_802BF30(void)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tldr r4, _0802BF9C\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA0\n"
"\tmovs r2, 0\n"
"\tmovs r1, 0x1\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA1\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA2\n"
"\tmovs r1, 0xC\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA3\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tmovs r1, 0x1E\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0x18\n"
"\tbl sub_8009614\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x38]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x4E\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x38]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x50\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x40\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0802BF9C: .4byte gUnknown_203B2D8"
);
}

View File

@@ -19,6 +19,7 @@ extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
#define THANK_YOU_MAIL_MAIN_MENU 0
#define ANYTHING_ELSE_THANK_YOU_MAIN_MENU 1
#define EXIT_THANK_YOU_MAIL_PRE 2
#define EXIT_THANK_YOU_MAIL 3
#define NO_THANK_YOU_MAIL 4
#define SELECT_THANK_YOU_MAIL_COMMS 6
@@ -160,7 +161,6 @@ extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32);
extern void sub_8030810(u32);
extern u32 sub_8031DCC(void);
extern void sub_8031E00(void);
extern void sub_8095240(u8);
extern u32 sub_802F298();
extern u8 sub_801CF14(u32);
extern u32 sub_8030768(u32);
@@ -424,7 +424,7 @@ u32 ThankYouMailPelipperCallback(void)
case ANYTHING_ELSE_THANK_YOU_MAIN_MENU:
HandleThankYouMailPelipperMainMenu();
break;
case 2:
case EXIT_THANK_YOU_MAIL_PRE:
sub_802AAC8();
break;
case EXIT_THANK_YOU_MAIL:
@@ -1250,7 +1250,7 @@ void sub_802AB98(void)
CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_PELIPPER);
monName = GetMonSpecies(MONSTER_PELIPPER);
strcpy(gAvailablePokemonNames, monName);
sub_8095240(sub_809539C(6, gUnknown_203B2C4->unk430));
DeleteMailAtIndex(sub_809539C(6, gUnknown_203B2C4->unk430));
SetThankYouMailMenuState(0x24);
break;
default:
@@ -1294,7 +1294,7 @@ void UpdateThankYouMailText(void)
break;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
sub_80306A8(5,0,0,6);
sub_80306A8(WONDER_MAIL_TYPE_THANK_YOU,0,0,6);
break;
case 0x11:
sub_8006518(gUnknown_203B2C4->unk35C);
@@ -1484,7 +1484,7 @@ void UpdateThankYouMailText(void)
// May I help you with anything else?
sub_8014248(gUnknown_80DF928,0,1,gThankYouMailMainMenuItems,0,4,0,&gUnknown_203B2C4->faceFile,0xc);
break;
case 2:
case EXIT_THANK_YOU_MAIL_PRE:
// Please come see me anytime
sub_80141B4(gUnknown_80DF94C,0,&gUnknown_203B2C4->faceFile,0x10d);
break;

File diff suppressed because it is too large Load Diff

View File

@@ -34,95 +34,6 @@ struct unkStruct_203B2C8
u32 fill13C;
};
struct unkStruct_203B2CC
{
// size: 0xD4;
u8 receivedNewsletters[NUM_POKEMON_NEWS];
u32 unk38;
u8 fill3C[0x50 - 0x3C];
s16 unk50;
s16 unk52;
s16 unk54;
s16 unk56;
u16 unk58;
u16 numPKMNNews;
u8 fill5C[0x6C - 0x5C];
u32 unk6C;
struct UnkTextStruct2 *unk70;
struct UnkTextStruct2 unk74[4];
};
extern struct unkStruct_203B2CC *gUnknown_203B2CC;
struct unkStruct_203B2D4
{
// size: 0x94
/* 0x0 */ s32 state;
/* 0x4 */ u8 currMailIndex;
s32 unk8;
s32 unkC;
const u8 *unk10[4];
u32 unk20;
u32 unk24;
struct UnkTextStruct2 unk28[4];
u32 unk88;
u8 fill8C[0x94 - 0x8C];
};
extern struct unkStruct_203B2D4 *gUnknown_203B2D4;
struct unkStruct_203B2D8
{
// size: 0xA4
u8 unk0[4];
u32 unk4;
u8 fill8[0x1C - 0x8];
s16 unk1C;
s16 unk1E;
s16 unk20;
s16 unk22;
s16 fill24;
/* 0x26 */ s16 emptyMailSlots;
u8 fill28[0x38 - 0x28];
u32 unk38;
struct UnkTextStruct2 *unk3C;
struct UnkTextStruct2 unk40[4];
u8 unkA0[4];
};
extern struct unkStruct_203B2D8 *gUnknown_203B2D8;
extern struct GameOptions *gGameOptionsRef;
extern s32 GetNumPKMNNews(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 HasNoPKMNNews(void);
extern u8 CheckPKMNNewsSlot(u8 r0);
extern struct PokemonStruct *sub_808D3BC(void);
extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon);
extern u16 gUnknown_203B2D0;
extern u16 gUnknown_203B2D2;
extern u16 gUnknown_203B2DC;
extern u8 sub_80138B8(void *, u32);
extern void PlayMenuSoundEffect(u32);
extern s32 GetKeyPress(u32 *);
extern void sub_8013660(u32 *);
extern void AddMenuCursorSprite(u32 *);
extern void sub_802BB98(void);
extern void sub_802BC08(void);
extern void sub_802BB28(void);
extern void sub_8013E54(void);
extern s32 sub_8012A64(u32 *, u32);
extern struct unkStruct_203B2C8 *gUnknown_203B2C8;
extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32);
@@ -148,26 +59,6 @@ extern void sub_803C37C(struct DungeonLocation *, u32, u8 *);
extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32);
extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
extern bool8 sub_80023E4(u32);
extern void nullsub_131(void);
extern void sub_802ABF8(void);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_802BC7C(void);
extern void sub_80073E0(u32);
extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32);
extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32);
extern void sub_803B6B0(u32, u32, u32, u32);
extern s32 sub_8013800(u32 *, s32);
extern void sub_802BCC4(void);
extern void sub_802BB14(u32);
extern void sub_801317C(u32 *);
extern u8 HasNoMailinMailbox(void);
extern void sub_802BF30(void);
extern void CreateMailMenu(void);
extern s32 CountEmptyMailSlots(void);
extern void sub_8013848(u32 *, s32, u32, u32);
ALIGNED(4) const char gRescueTeamNamePlaceholder[] = "????";
@@ -195,103 +86,6 @@ ALIGNED(4) const char gUnknown_80DFB14[] = _(
ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0";
const struct UnkTextStruct2 gUnknown_80DFBD0 =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const u8 gUnknown_80DFBE8[] = { 0x01, 0x00, 0x0C, 0x00 };
const struct UnkTextStruct2 gUnknown_80DFBEC =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x18, 0x0E,
0x0E, 0x00,
gUnknown_80DFBE8
};
ALIGNED(4) const u8 gUnknown_80DFC04[] = "News List";
ALIGNED(4) static const char wonder_mail_2_fill1[] = "pksdir0";
const struct UnkTextStruct2 gUnknown_80DFC18 =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const u8 gUnkData_80DFC30[] = { 0x01, 0x00, 0x16, 0x00 };
const struct UnkTextStruct2 gUnknown_80DFC34 =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x1A, 0x10,
0x10, 0x00,
gUnkData_80DFC30
};
ALIGNED(4) const u8 gUnknown_80DFC4C[] = "She";
ALIGNED(4) const u8 gUnknown_80DFC50[] = "He";
ALIGNED(4) static const char wonder_mail_2_fill2[] = "pksdir0";
const struct UnkTextStruct2 gUnknown_80DFC5C =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DFC74 =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x18, 0x0E,
0x0E, 0x00,
NULL
};
ALIGNED(4) const u8 gMailboxText[] = "Mailbox";
ALIGNED(4) static const char wonder_mail_2_fill3[] = "pksdir0";
const struct UnkTextStruct2 gUnknown_80DFC9C =
{
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DFCB4 =
{
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x00, 0x02, 0x00,
0x18, 0x0E,
0x0E, 0x00,
NULL
};
ALIGNED(4) const u8 gBulletinBoardText[] = "Bulletin Board";
ALIGNED(4) static const char wonder_mail_2_fill4[] = "pksdir0";
u32 sub_802B2D4(void)
{
s32 iVar1;
@@ -477,532 +271,3 @@ void sub_802B624(void)
sub_802B548(5);
}
}
// Start of some Pokemon News related stuff
u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2)
{
if(HasNoPKMNNews())
{
return 0;
}
else
{
if(gUnknown_203B2CC == NULL)
{
gUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 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, GetNumPKMNNews(), 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 GetPokemonNewsIndex(void)
{
return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + gUnknown_203B2CC->unk50];
}
void sub_802B7D0(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2CC->unk74, 0, 0);
gUnknown_203B2CC->numPKMNNews = GetNumPKMNNews();
sub_8013984(&gUnknown_203B2CC->unk38);
sub_802B880();
sub_802B8D4();
if(r0 != 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;
}
}
NAKED
void sub_802B880(void)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tldr r4, _0802B8D0\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x52\n"
"\tmovs r1, 0\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0xC\n"
"\tbl sub_80095E4\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x6C]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x82\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x6C]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x84\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x74\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"\t_0802B8D0: .4byte gUnknown_203B2CC");
}
void sub_802B8D4(void)
{
s32 iVar2;
s32 y;
s32 new_index;
u8 mailIndex;
sub_8008C54(gUnknown_203B2CC->unk6C);
sub_80073B8(gUnknown_203B2CC->unk6C);
xxx_call_draw_string(0xA, 0, gUnknown_80DFC04, gUnknown_203B2CC->unk6C, 0);
sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->unk56 + 1, 2, 7, gUnknown_203B2CC->unk6C);
for(iVar2 = 0; iVar2 < gUnknown_203B2CC->unk52; iVar2++)
{
y = sub_8013800(&gUnknown_203B2CC->unk38, iVar2);
new_index = (gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + iVar2;
mailIndex = gUnknown_203B2CC->receivedNewsletters[new_index];
sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C);
sub_802BC7C();
xxx_format_and_draw(0x15, y, GetPokemonMailHeadline(mailIndex), gUnknown_203B2CC->unk6C, 0);
}
sub_80073E0(gUnknown_203B2CC->unk6C);
}
s32 GetNumPKMNNews(void)
{
s32 index;
s32 newsCount;
newsCount = 0;
for(index = 0; index < NUM_POKEMON_NEWS; index++)
{
if(CheckPKMNNewsSlot(index))
{
gUnknown_203B2CC->receivedNewsletters[newsCount] = index;
newsCount++;
}
}
return newsCount;
}
bool8 HasNoPKMNNews(void)
{
s32 index;
for(index = 0; index < NUM_POKEMON_NEWS; index++)
{
if(CheckPKMNNewsSlot(index))
{
return FALSE;
}
}
return TRUE;
}
u32 sub_802B9FC(u8 mailIndex)
{
gUnknown_203B2D4 = MemoryAlloc(sizeof(struct unkStruct_203B2D4), 8);
gUnknown_203B2D4->currMailIndex = mailIndex;
sub_801317C(&gUnknown_203B2D4->unk88);
gUnknown_203B2D4->unk24 = 0;
gUnknown_203B2D4->unk28[0] = gUnknown_80DFC34;
gUnknown_203B2D4->unk28[1] = gUnknown_80DFC18;
gUnknown_203B2D4->unk28[2] = gUnknown_80DFC18;
gUnknown_203B2D4->unk28[3] = gUnknown_80DFC18;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D4->unk28, 1, 1);
gUnknown_203B2D4->unk8 = 0;
sub_802BCC4();
sub_802BC7C();
sub_802BB14(0);
return 1;
}
u32 sub_802BA8C(void)
{
switch(gUnknown_203B2D4->state)
{
case 0:
sub_802BB98();
break;
case 1:
sub_802BC08();
break;
case 3:
return 3;
case 2:
default:
return 2;
}
return 0;
}
void sub_802BACC(void)
{
if(gUnknown_203B2D4 != NULL)
{
gUnknown_203B2D4->unk28[gUnknown_203B2D4->unk24] = gUnknown_80DFC18;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D4->unk28, 1, 1);
MemoryFree(gUnknown_203B2D4);
gUnknown_203B2D4 = NULL;
}
}
void sub_802BB14(u32 newState)
{
gUnknown_203B2D4->state = newState;
sub_802BB28();
}
void sub_802BB28(void)
{
switch(gUnknown_203B2D4->state)
{
case 0:
case 1:
sub_8008C54(gUnknown_203B2D4->unk24);
sub_80073B8(gUnknown_203B2D4->unk24);
xxx_format_and_draw(0xA, 0, GetPokemonMailHeadline(gUnknown_203B2D4->currMailIndex), gUnknown_203B2D4->unk24, 0);
xxx_format_and_draw(0x6, 0x14, gUnknown_203B2D4->unk10[gUnknown_203B2D4->unk8], gUnknown_203B2D4->unk24, 0);
sub_80073E0(gUnknown_203B2D4->unk24);
gUnknown_203B2D4->unk8++;
break;
case 2:
case 3:
break;
}
}
void sub_802BB98(void)
{
if(gUnknown_203B2D4->unkC != 0)
{
if(gUnknown_203B2D4->unk20 & 8)
sub_8013E54();
gUnknown_203B2D4->unk20++;
}
switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24))
{
case 1:
PlayMenuSoundEffect(0);
if(gUnknown_203B2D4->unkC != 0)
sub_802BB14(1);
else
sub_802BB14(3);
break;
case 2:
PlayMenuSoundEffect(1);
sub_802BB14(2);
break;
}
}
void sub_802BC08(void)
{
if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC)
{
if(gUnknown_203B2D4->unk20 & 8)
sub_8013E54();
gUnknown_203B2D4->unk20++;
}
switch(sub_8012A64(&gUnknown_203B2D4->unk88, gUnknown_203B2D4->unk24))
{
case 1:
PlayMenuSoundEffect(0);
if(gUnknown_203B2D4->unk8 < gUnknown_203B2D4->unkC)
sub_802BB14(1);
else
sub_802BB14(3);
break;
case 2:
PlayMenuSoundEffect(1);
sub_802BB14(2);
break;
}
}
void sub_802BC7C(void)
{
PrintPokeNameToBuffer(gAvailablePokemonNames, sub_808D3BC());
if(gGameOptionsRef->playerGender == FEMALE)
{
strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC4C); // She
}
else
{
strcpy(gAvailablePokemonNames + 0x50, gUnknown_80DFC50); // He
}
}
void sub_802BCC4(void)
{
const char *mailTextPtr;
mailTextPtr = GetPokemonMailText(gUnknown_203B2D4->currMailIndex);
gUnknown_203B2D4->unkC = 0;
gUnknown_203B2D4->unk10[0] = mailTextPtr;
// Count all the {EXTRA_MSG}'s
while (*mailTextPtr != '\0') {
if (*mailTextPtr == '#') {
if ((mailTextPtr[1] == 'P') || (mailTextPtr[1] == 'p')) {
gUnknown_203B2D4->unkC++;
gUnknown_203B2D4->unk10[gUnknown_203B2D4->unkC] = mailTextPtr + 2;
}
mailTextPtr += 2;
}
else {
mailTextPtr++;
}
}
}
u32 sub_802BD14(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3)
{
if (HasNoMailinMailbox()) {
return 0;
}
else
{
if (gUnknown_203B2D8 == NULL) {
gUnknown_203B2D8 = MemoryAlloc(sizeof(struct unkStruct_203B2D8),8);
}
gUnknown_203B2D8->unk38 = param_1;
gUnknown_203B2D8->unk3C = &gUnknown_203B2D8->unk40[param_1];
sub_8006518(gUnknown_203B2D8->unk40);
gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC74;
gUnknown_203B2D8->unk3C->unk14 = gUnknown_203B2D8->unkA0;
if (param_2 != NULL) {
gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38].unk08 = *param_2;
}
sub_8012D34(gUnknown_203B2D8->unk3C,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40,1,1);
sub_8013848(&gUnknown_203B2D8->unk4,CountEmptyMailSlots(),param_3,param_1);
gUnknown_203B2D8->unk1C = gUnknown_203B2DC;
sub_8013984(&gUnknown_203B2D8->unk4);
sub_802BF30();
CreateMailMenu();
return 1;
}
}
u32 sub_802BDEC(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B2D8->unk4);
return 0;
}
switch(GetKeyPress(&gUnknown_203B2D8->unk4))
{
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
case 4:
PlayMenuSoundEffect(4);
return 4;
default:
if(sub_80138B8(&gUnknown_203B2D8->unk4, 1) != 0)
{
sub_802BF30();
CreateMailMenu();
return 1;
}
else
return 0;
}
}
u8 sub_802BE74(void) {
return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + gUnknown_203B2D8->unk1C];
}
void sub_802BE94(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40, 0, 0);
gUnknown_203B2D8->emptyMailSlots = CountEmptyMailSlots();
sub_8013984(&gUnknown_203B2D8->unk4);
sub_802BF30();
CreateMailMenu();
if(r0 != 0)
{
AddMenuCursorSprite(&gUnknown_203B2D8->unk4);
}
}
void sub_802BEDC(void)
{
if(gUnknown_203B2D8 != NULL)
{
gUnknown_203B2DC = gUnknown_203B2D8->unk1C;
gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC5C;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2D8->unk40, 1, 1);
MemoryFree(gUnknown_203B2D8);
gUnknown_203B2D8 = NULL;
}
}
NAKED
void sub_802BF30(void)
{
asm_unified(
"\tpush {r4,lr}\n"
"\tldr r4, _0802BF9C\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA0\n"
"\tmovs r2, 0\n"
"\tmovs r1, 0x1\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA1\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA2\n"
"\tmovs r1, 0xC\n"
"\tstrb r1, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0xA3\n"
"\tstrb r2, [r0]\n"
"\tldr r0, [r4]\n"
"\tmovs r1, 0x1E\n"
"\tldrsh r0, [r0, r1]\n"
"\tmovs r1, 0x18\n"
"\tbl sub_8009614\n"
"\tadds r0, 0x2\n"
"\tlsls r0, 16\n"
"\tldr r2, [r4]\n"
"\tldr r3, [r2, 0x38]\n"
"\tlsls r1, r3, 1\n"
"\tadds r1, r3\n"
"\tlsls r1, 3\n"
"\tadds r1, r2, r1\n"
"\tadds r1, 0x4E\n"
"\tasrs r3, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r1]\n"
"\tldr r1, [r2, 0x38]\n"
"\tlsls r0, r1, 1\n"
"\tadds r0, r1\n"
"\tlsls r0, 3\n"
"\tadds r2, r0\n"
"\tadds r3, 0x2\n"
"\tadds r2, 0x50\n"
"\tstrh r3, [r2]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x40\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl sub_800641C\n"
"\tpop {r4}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0802BF9C: .4byte gUnknown_203B2D8"
);
}

View File

@@ -1,3 +1,4 @@
#include "constants/input.h"
#include "global.h"
#include "constants/mailbox.h"
#include "input.h"
@@ -10,7 +11,7 @@
struct unkStruct_203B2E8
{
// size: 0xA8
u8 unk0[MAX_ACCEPTED_JOBS];
u8 pelipperBoardSlots[MAX_ACCEPTED_JOBS];
u32 unk8;
u8 fillC[0x20 - 0xC];
s16 unk20;
@@ -146,7 +147,7 @@ extern void CreateRescueTitle(void *);
extern void sub_8013984(u32 *);
extern void sub_802C6DC(void);
extern void sub_802C750(void);
extern void DrawJobListMenu(void);
extern void AddMenuCursorSprite(u32 *);
extern u8 sub_80138B8(void *, u32);
extern s32 GetKeyPress(void *);
@@ -154,7 +155,7 @@ extern void PlayMenuSoundEffect(u32);
extern void sub_8013660(void *);
extern void sub_8013848(u32 *, s32, u32, u32);
extern bool8 IsPelipperBoardSlotEmpty(u8);
extern void sub_802C910(u32);
extern void SetJobListState(u32);
extern void sub_802CC00(void);
extern void sub_802CC70(void);
extern void sub_802CD38(void);
@@ -167,7 +168,7 @@ extern void sub_802CBAC(void);
s32 CountAcceptedJobs(void);
bool8 HasNoAcceptedJobs(void);
s32 sub_802C474(void)
s32 CountPelipperBoardSlots(void)
{
s32 index;
s32 counter = 0;
@@ -175,14 +176,14 @@ s32 sub_802C474(void)
{
if(!IsPelipperBoardSlotEmpty(index))
{
gUnknown_203B2E0->unk0[counter] = index;
gUnknown_203B2E0->pelipperBoardSlots[counter] = index;
counter++;
}
}
return counter;
}
bool8 sub_802C4A4(void)
bool8 HasNoPelipperBoardJobs(void)
{
s32 index;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
@@ -218,7 +219,7 @@ bool8 sub_802C4C8(int param_1,struct UnkTextStruct2_sub *param_2,u32 param_3)
gUnknown_203B2E8->unk20 = gUnknown_203B2EC;
sub_8013984(&gUnknown_203B2E8->unk8);
sub_802C6DC();
sub_802C750();
DrawJobListMenu();
return TRUE;
}
}
@@ -232,20 +233,19 @@ u32 sub_802C598(u8 param_1)
else {
switch(GetKeyPress(&gUnknown_203B2E8->unk8))
{
case 2:
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case 1:
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
case 4:
case INPUT_START_BUTTON:
PlayMenuSoundEffect(4);
return 4;
break;
}
if (sub_80138B8(&gUnknown_203B2E8->unk8, 1) != '\0') {
sub_802C6DC();
sub_802C750();
DrawJobListMenu();
return 1;
}
else {
@@ -254,9 +254,9 @@ u32 sub_802C598(u8 param_1)
}
}
u8 sub_802C620(void)
u8 GetPelipperBoardSlotIndex(void)
{
return gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + gUnknown_203B2E8->unk20];
return gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + gUnknown_203B2E8->unk20];
}
void sub_802C640(u8 r0)
@@ -266,7 +266,7 @@ void sub_802C640(u8 r0)
gUnknown_203B2E8->unk2A = CountAcceptedJobs();
sub_8013984(&gUnknown_203B2E8->unk8);
sub_802C6DC();
sub_802C750();
DrawJobListMenu();
if(r0)
AddMenuCursorSprite(&gUnknown_203B2E8->unk8);
}
@@ -344,7 +344,7 @@ void sub_802C6DC(void)
}
void sub_802C750(void)
void DrawJobListMenu(void)
{
struct WonderMail *mail;
int index;
@@ -366,7 +366,7 @@ void sub_802C750(void)
if(( index < gUnknown_203B2E8->unk22))
do
{
mail = GetJobSlotInfo(gUnknown_203B2E8->unk0[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + index]);
mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + index]);
local.unk0[0] = gUnknown_203B2E8->unk3C;
local.y = sub_8013800(&gUnknown_203B2E8->unk8,index);
sub_803B35C(mail,local.unk0);
@@ -384,7 +384,7 @@ s32 CountAcceptedJobs(void)
{
if(!IsJobSlotEmpty(index))
{
gUnknown_203B2E8->unk0[counter] = index;
gUnknown_203B2E8->pelipperBoardSlots[counter] = index;
counter++;
}
}
@@ -402,7 +402,7 @@ bool8 HasNoAcceptedJobs(void)
return TRUE;
}
bool8 sub_802C860(u32 r0)
bool8 InitializeJobListMenu(u32 r0)
{
if(HasNoAcceptedJobs())
{
@@ -413,7 +413,7 @@ bool8 sub_802C860(u32 r0)
gUnknown_203B2F0 = MemoryAlloc(sizeof(struct unkStruct_203B2F0), 0x8);
gUnknown_203B2F0->unk68 = 0;
gUnknown_203B2F0->unk0 = r0;
sub_802C910(0);
SetJobListState(0);
return TRUE;
}
}
@@ -451,7 +451,7 @@ void sub_802C8F4(void)
}
}
void sub_802C910(u32 newState)
void SetJobListState(u32 newState)
{
gUnknown_203B2F0->state = newState;
sub_802C928();
@@ -494,12 +494,12 @@ void sub_802C9D8(void)
sub_802C640(1);
break;
case 2:
sub_802C750();
DrawJobListMenu();
sub_8012D60(&gUnknown_203B2F0->unk6C, gUnknown_203B2F0->unk10C, 0, 0, gUnknown_203B2F0->unk68, 2);
break;
case 3:
sub_802CBAC();
sub_802C750();
DrawJobListMenu();
sub_8012EA4(&gUnknown_203B2F0->unk6C, 0);
sub_8012D60(&gUnknown_203B2F0->unkBC, gUnknown_203B2F0->unk14C, 0, 0, 6, 3);
break;

View File

@@ -13,15 +13,15 @@
bool8 IsMailSlotEmpty(u8);
extern void sub_8013984(void *);
extern void sub_8013848(u32 *, s32, u32, u32);
extern s32 sub_802C474(void);
extern s32 CountPelipperBoardSlots(void);
extern void sub_802C328(void);
extern void sub_802C39C(void);
extern void DrawPelipperBoardJobMenu(void);
extern void PlayMenuSoundEffect(u32);
extern void sub_8013660(u32 *);
extern s32 GetKeyPress(u32 *);
extern bool8 sub_80138B8(u32 *, u32);
extern void AddMenuCursorSprite(u32 *);
extern u8 sub_802C4A4(void);
extern u8 HasNoPelipperBoardJobs(void);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
@@ -68,7 +68,7 @@ struct unkStruct_203B2E0
s16 unk24;
s16 unk26;
s16 unk28;
s16 unk2A;
s16 pelipperBoardSlots;
u8 fill22[0x3C - 0x2C];
s32 unk3C;
struct UnkTextStruct2 *unk40;
@@ -158,7 +158,7 @@ bool8 HasNoMailinMailbox(void)
bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3)
{
if (sub_802C4A4() != 0) {
if (HasNoPelipperBoardJobs() != 0) {
return FALSE;
}
else
@@ -178,11 +178,11 @@ bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3)
sub_8012D34(gUnknown_203B2E0->unk40,param_3);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E0->unk44,1,1);
sub_8013848(&gUnknown_203B2E0->unk8,sub_802C474(),param_3,param_1);
sub_8013848(&gUnknown_203B2E0->unk8,CountPelipperBoardSlots(),param_3,param_1);
gUnknown_203B2E0->unk20 = gUnknown_203B2E4;
sub_8013984(&gUnknown_203B2E0->unk8);
sub_802C328();
sub_802C39C();
DrawPelipperBoardJobMenu();
return TRUE;
}
}
@@ -208,7 +208,7 @@ u32 sub_802C1E4(u8 param_1)
default:
if (sub_80138B8(&gUnknown_203B2E0->unk8,1)) {
sub_802C328();
sub_802C39C();
DrawPelipperBoardJobMenu();
return 1;
}
else {
@@ -227,10 +227,10 @@ void sub_802C28C(u8 r0)
{
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2E0->unk44, 0, 0);
gUnknown_203B2E0->unk2A = sub_802C474();
gUnknown_203B2E0->pelipperBoardSlots = CountPelipperBoardSlots();
sub_8013984(&gUnknown_203B2E0->unk8);
sub_802C328();
sub_802C39C();
DrawPelipperBoardJobMenu();
if(r0)
AddMenuCursorSprite(&gUnknown_203B2E0->unk8);
}
@@ -308,7 +308,7 @@ void sub_802C328(void)
"_0802C398: .4byte gUnknown_203B2E0");
}
void sub_802C39C(void)
void DrawPelipperBoardJobMenu(void)
{
u32 slotIndex;
struct WonderMail *mail;

View File

@@ -10,6 +10,7 @@
#include "code_802C39C.h"
#include "menu_input.h"
const struct UnkTextStruct2 gUnknown_80DFDD4 =
{
0x00, 0x00, 0x00, 0x00,
@@ -89,7 +90,7 @@ ALIGNED(4) const u8 gUnknown_80E0010[] =
"a dungeon with a mission in progress.\n"
"Mail cannot be deleted now.";
ALIGNED(4) const u8 gUnknown_80E0074[] = _(
ALIGNED(4) const u8 gReceivedWonderMail[] = _(
"Received the {COLOR_1 LIGHT_BLUE_2}Wonder Mail{END_COLOR_TEXT_1}!");
ALIGNED(4) const u8 gUnknown_80E0094[] = _(
@@ -118,7 +119,7 @@ extern void sub_802D940();
extern void sub_802D9F0();
extern void sub_802DA60();
extern void sub_802D82C();
extern void sub_802DA84();
extern void AdvancetoFallbackWonderMailRescueState();
extern void sub_802D1B8();
extern void sub_802D2A8();
@@ -129,8 +130,7 @@ extern u8 sub_802DAA8(void);
extern u8 sub_802DADC(void);
extern u8 *sub_8096DD8(void);
extern u8 sub_8096C08(u8 *);
extern void sub_802C750(void);
extern void sub_802D1A0(u32);
extern void DrawJobListMenu(void);
extern struct WonderMail* GetJobSlotInfo(u8);
extern void sub_803B35C(void *, u32*);
extern void sub_802DE84(u32 *);
@@ -143,7 +143,7 @@ extern void sub_8096C80(void);
extern void sub_8096D24(void);
extern void sub_80141B4(const u8 *, u32, u32, u32);
extern u8 *sub_8096DE8(void);
extern void sub_8096A78(struct unkSubStruct_203B2F8 *);
extern void AcceptJob(struct unkSubStruct_203B2F8 *);
extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32);
struct unkStruct_803B344 *sub_803B344(u8);
extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32);
@@ -188,32 +188,32 @@ void sub_802CFD0(void)
sub_80073E0(gUnknown_203B2F4->unk34);
}
u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1)
u32 sub_802D098(struct unkSubStruct_203B2F8 *mail)
{
gUnknown_203B2F8 = MemoryAlloc(0x208,8);
gUnknown_203B2F8->unk6C = 0;
gUnknown_203B2F8->unk70 = 0;
gUnknown_203B2F8->unk74 = 0;
gUnknown_203B2F8->unkC = param_1;
gUnknown_203B2F8->mail = mail;
gUnknown_203B2F8->wonderMailAccepted = FALSE;
gUnknown_203B2F8->unk9 = sub_8099328(&gUnknown_203B2F8->dungeonID);
if (sub_8011C1C() != 2) {
gUnknown_203B2F8->unk9 = FALSE;
}
sub_802D1A0(0);
sub_802D1A0(INITIAL_WONDER_MAIL_CHECK);
return 1;
}
u32 sub_802D0E0(void)
{
switch(gUnknown_203B2F8->state) {
case 0:
case INITIAL_WONDER_MAIL_CHECK:
break;
case 1:
sub_802D7D0();
break;
case 0xb:
case 0xc:
case DRAW_JOB_LIST:
case DRAW_JOB_LIST_1:
sub_802D8CC();
break;
case 0xd:
@@ -229,10 +229,10 @@ u32 sub_802D0E0(void)
case 9:
sub_802D82C();
break;
case 2:
case WONDER_MAIL_EXIT:
return 3;
default:
sub_802DA84();
AdvancetoFallbackWonderMailRescueState();
break;
}
return 0;
@@ -261,7 +261,7 @@ void sub_802D1A0(u32 newState)
void sub_802D1B8(void)
{
s32 iVar2;
s32 index;
sub_8006518(gUnknown_203B2F8->unk1A8);
switch(gUnknown_203B2F8->state)
{
@@ -278,12 +278,12 @@ void sub_802D1B8(void)
gUnknown_203B2F8->unk1A8[3].unkC = 6;
break;
default:
for(iVar2 = 0; iVar2 < 4; iVar2++)
for(index = 0; index < 4; index++)
{
gUnknown_203B2F8->unk1A8[iVar2] = gUnknown_80DFDD4;
gUnknown_203B2F8->unk1A8[index] = gUnknown_80DFDD4;
}
break;
case 2:
case WONDER_MAIL_EXIT:
break;
}
ResetUnusedInputStruct();
@@ -294,14 +294,14 @@ void sub_802D2A8(void)
{
switch(gUnknown_203B2F8->state) {
case 0:
if (IsMailinJobSlot(&gUnknown_203B2F8->unkC->wonderMail)) {
sub_802D1A0(3);
case INITIAL_WONDER_MAIL_CHECK:
if (IsMailinJobSlot(&gUnknown_203B2F8->mail->wonderMail)) {
sub_802D1A0(DUPLICATE_WONDER_MAIL);
}
else if (sub_8096F50(&gUnknown_203B2F8->unkC->wonderMail) != 0) {
sub_802D1A0(4);
else if (sub_8096F50(&gUnknown_203B2F8->mail->wonderMail) != 0) {
sub_802D1A0(DUPLICATE_WONDER_MAIL_1);
}
else if ((gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) && (sub_8096C08(&gUnknown_203B2F8->jobSlotIndex) != 0)) {
else if ((gUnknown_203B2F8->mail->wonderMail.unk2 == 4) && (sub_8096C08(&gUnknown_203B2F8->jobSlotIndex) != 0)) {
if (sub_802DAA8() != 0) {
sub_802D1A0(9);
}
@@ -311,49 +311,49 @@ void sub_802D2A8(void)
}
else if (GetNumAcceptedJobs() >= MAX_ACCEPTED_JOBS) {
if (sub_802DADC() != 0) {
sub_802D1A0(10);
sub_802D1A0(JOB_LIST_FULL);
}
else {
sub_802D1A0(6);
}
}
else
sub_802D1A0(8);
sub_802D1A0(RECEIVE_WONDER_MAIL);
break;
case 1:
sub_802D73C();
sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0);
break;
case 3:
gUnknown_203B2F8->fallbackState = 2;
case DUPLICATE_WONDER_MAIL:
gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT;
sub_80141B4(gUnknown_80DFE9C,0,0,0x101);
break;
case 4:
gUnknown_203B2F8->fallbackState = 2;
case DUPLICATE_WONDER_MAIL_1:
gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT;
sub_80141B4(gUnknown_80DFED0,0,0,0x101);
break;
case 5:
gUnknown_203B2F8->fallbackState = 2;
gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT;
sub_80141B4(gUnknown_80DFF2C,0,0,0x101);
break;
case 6:
gUnknown_203B2F8->fallbackState = 2;
gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT;
sub_80141B4(gUnknown_80DFFA4,0,0,0x101);
break;
case 7:
gUnknown_203B2F8->fallbackState = 0xc;
gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1;
sub_80141B4(gUnknown_80E0010,0,0,0x101);
break;
case 8:
case RECEIVE_WONDER_MAIL:
gUnknown_203B2F8->wonderMailAccepted = TRUE;
sub_8096A78(gUnknown_203B2F8->unkC);
AcceptJob(gUnknown_203B2F8->mail);
sub_8096C80();
sub_8096D24();
if (gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) {
MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28);
MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78);
if (gUnknown_203B2F8->mail->wonderMail.unk2 == 4) {
MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->mail->unk14,0x28);
MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->mail->unk18,0x78);
}
switch(gUnknown_203B2F8->unkC->wonderMail.dungeon.id)
switch(gUnknown_203B2F8->mail->wonderMail.dungeon.id)
{
// NOTE: subtract 1 from each of the case as the input??
case DUNGEON_ODDITY_CAVE: // 0x2B
@@ -369,30 +369,30 @@ void sub_802D2A8(void)
sub_8097418(0x2D, 1);
break;
}
gUnknown_203B2F8->fallbackState = 2;
sub_80141B4(gUnknown_80E0074,0,0,0x101);
gUnknown_203B2F8->fallbackState = WONDER_MAIL_EXIT;
sub_80141B4(gReceivedWonderMail,0,0,0x101);
break;
case 9:
sub_802D690();
sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0);
break;
case 10:
gUnknown_203B2F8->fallbackState = 0xb;
case JOB_LIST_FULL:
gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST;
sub_80141B4(gUnknown_80E0108,0,0,0x101);
break;
case 0xb:
case DRAW_JOB_LIST:
sub_802C4C8(0,0,4);
break;
case 0xc:
case DRAW_JOB_LIST_1:
sub_802C640(1);
break;
case 0xd:
sub_802C750();
DrawJobListMenu();
sub_8012D60(&gUnknown_203B2F8->unk78,gUnknown_203B2F8->unk118,0,gUnknown_203B2F8->unk198,
gUnknown_203B2F8->unk6C,2);
break;
case 0xe:
sub_802C750();
DrawJobListMenu();
sub_8012EA4(&gUnknown_203B2F8->unk78,0);
sub_8012D60(&gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3);
break;
@@ -402,10 +402,10 @@ void sub_802D2A8(void)
sub_802DE84(&gUnknown_203B2F8->unk14);
break;
case 0x10:
sub_803B35C(gUnknown_203B2F8->unkC,&gUnknown_203B2F8->unk14);
sub_803B35C(gUnknown_203B2F8->mail,&gUnknown_203B2F8->unk14);
gUnknown_203B2F8->unk14 = 3;
gUnknown_203B2F8->unk58 = 0;
gUnknown_203B2F8->unk64 = gUnknown_203B2F8->unkC->unk18;
gUnknown_203B2F8->unk64 = gUnknown_203B2F8->mail->unk18;
sub_802DE84(&gUnknown_203B2F8->unk14);
break;
}

View File

@@ -1,3 +1,4 @@
#include "constants/input.h"
#include "global.h"
#include "text.h"
#include "input.h"
@@ -140,13 +141,13 @@ u32 sub_8030768(u8 r0)
}
switch(GetKeyPress(&gUnknown_203B320->unk24))
{
case 4:
case INPUT_START_BUTTON:
PlayMenuSoundEffect(4);
return 4;
case 2:
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case 1:
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
default:

View File

@@ -95,7 +95,6 @@ extern void sub_8030DE4();
extern void sub_8030810(u32);
extern void sub_803092C(void);
extern void sub_8030D40(u8, u32);
extern void sub_8095240(u8);
bool8 sub_8030F58(u32 wonderMailType)
{
@@ -316,7 +315,7 @@ void sub_80313D8(u32 state)
switch(state)
{
case 2:
sub_8095240(gUnknown_203B328->mailIndex);
DeleteMailAtIndex(gUnknown_203B328->mailIndex);
break;
case 3:
for(index = 0; index < 0x20; index++)

View File

@@ -128,7 +128,7 @@ extern u32 sub_802C598(s32);
extern void sub_802C688(void);
extern void sub_8096C80(void);
extern void ResetJobSlot(u8);
extern u8 sub_802C620(void);
extern u8 GetPelipperBoardSlotIndex(void);
void sub_802DE44(void);
void sub_802DE60(void);
@@ -149,17 +149,20 @@ void sub_802D7D0(void)
gUnknown_203B2F8->unk70 = menuAction;
}
switch(menuAction) {
// Yes
case 3:
sub_802D1A0(2);
sub_802D1A0(WONDER_MAIL_EXIT);
break;
// New Mail
case 6:
gUnknown_203B2F8->fallbackState = 1;
sub_802D1A0(0x10);
break;
// No
case 4:
case 2:
default:
sub_802D1A0(0);
sub_802D1A0(INITIAL_WONDER_MAIL_CHECK);
break;
}
}
@@ -174,19 +177,23 @@ void sub_802D82C(void)
gUnknown_203B2F8->unk74 = menuAction;
}
switch(menuAction) {
// Yes
case 3:
ResetJobSlot(gUnknown_203B2F8->jobSlotIndex);
sub_8096C80();
sub_802D1A0(8);
sub_802D1A0(RECEIVE_WONDER_MAIL);
break;
// New Mail
case 6:
gUnknown_203B2F8->fallbackState = 9;
sub_802D1A0(0x10);
break;
// Old Mail
case 7:
gUnknown_203B2F8->fallbackState = 9;
sub_802D1A0(0xf);
break;
// No
default:
case 1:
case 2:
@@ -204,12 +211,12 @@ void sub_802D8CC(void)
case 1:
break;
case 3:
gUnknown_203B2F8->jobSlotIndex = sub_802C620();
gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex();
sub_802D1A0(0xd);
break;
case 4:
gUnknown_203B2F8->jobSlotIndex = sub_802C620();
gUnknown_203B2F8->fallbackState = 0xc;
gUnknown_203B2F8->jobSlotIndex = GetPelipperBoardSlotIndex();
gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1;
sub_802D1A0(0xf);
break;
case 2:
@@ -232,21 +239,23 @@ void sub_802D940(void)
switch(menuAction)
{
// Delete
case 2:
if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > 5) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)))
{
sub_802D1A0(0x7);
sub_802D1A0(7);
}
else {
sub_802D1A0(0xE);
}
break;
// Info
case 5:
gUnknown_203B2F8->fallbackState = 0xc;
gUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1;
sub_802D1A0(0xf);
break;
case 1:
sub_802D1A0(0xc);
sub_802D1A0(DRAW_JOB_LIST_1);
break;
}
}
@@ -264,15 +273,17 @@ void sub_802D9F0(void)
switch(menuAction)
{
// No
case 1:
case 4:
sub_802D1A0(0xc);
sub_802D1A0(DRAW_JOB_LIST_1);
break;
// Yes
case 3:
sub_802C688();
ResetJobSlot(gUnknown_203B2F8->jobSlotIndex);
sub_8096C80();
sub_802D1A0(8);
sub_802D1A0(RECEIVE_WONDER_MAIL);
break;
}
}
@@ -292,7 +303,7 @@ void sub_802DA60(void)
}
}
void sub_802DA84(void)
void AdvancetoFallbackWonderMailRescueState(void)
{
s32 temp;
if(sub_80144A4(&temp) == 0)

View File

@@ -413,7 +413,7 @@ gUnknown_203B300: /* 203B300 */
gUnknown_203B304: /* 203B304 */
.space 0x4
gUnknown_203B308: /* 203B308 */
gPelipperBoard: /* 203B308 */
.space 0x4
gUnknown_203B30C: /* 203B30C */