diff --git a/include/code_80130A8.h b/include/code_80130A8.h index a38710fe5..8858a8921 100644 --- a/include/code_80130A8.h +++ b/include/code_80130A8.h @@ -6,6 +6,7 @@ #include "structs/str_text.h" // code_80130A8.s +extern void sub_8013E54(void); extern void sub_8013F84(void); extern void sub_80140B4(UnkTextStruct2 *); extern void sub_80140DC(void); diff --git a/include/code_803B050.h b/include/code_803B050.h index af702c5c8..15575393f 100644 --- a/include/code_803B050.h +++ b/include/code_803B050.h @@ -21,7 +21,11 @@ typedef struct unkStruct_80E9F8C } unkStruct_80E9F8C; void CreateRescueDescription(unkStruct_802C39C *); +void CreateRescueTitle(unkStruct_802C39C *); void sub_803B6B0(s32 x, s32 y, u8 index, u32); +// code_803B050.s +extern void sub_803B35C(WonderMail *, unkStruct_802C39C *); + #endif // GUARD_CODE_803B050_H \ No newline at end of file diff --git a/include/code_80958E8_1.h b/include/code_80958E8_1.h index 96088fb95..22b4b644d 100644 --- a/include/code_80958E8_1.h +++ b/include/code_80958E8_1.h @@ -13,7 +13,12 @@ struct unkStruct_8096AF8 s32 CountJobsinDungeon(u8 dungeon); WonderMail *GetJobSlotInfo(u8 index); +bool8 IsMailinJobSlot(WonderMail *mail); void sub_8096AF8(struct unkStruct_8096AF8 *, u8 slotIndex, u8 dungeon); +// code_80958E8_1.s +extern WonderMail *GetPelipperBoardSlotInfo(u8); +extern bool8 IsPelipperBoardSlotEmpty(u8); + #endif // GUARD_CODE_80958E8_1_H \ No newline at end of file diff --git a/include/code_8096AF8.h b/include/code_8096AF8.h index b31155773..8397553f5 100644 --- a/include/code_8096AF8.h +++ b/include/code_8096AF8.h @@ -2,6 +2,7 @@ #define GUARD_CODE_8096AF8_H // code_8096AF8.s +extern u8 CheckPKMNNewsSlot(u8); extern bool8 sub_8096E2C(void); extern void sub_8096EEC(void); diff --git a/include/mailbox_8095F8C.h b/include/mailbox_8095F8C.h new file mode 100644 index 000000000..2f692e9f8 --- /dev/null +++ b/include/mailbox_8095F8C.h @@ -0,0 +1,10 @@ +#ifndef GUARD_MAILBOX_8095F8C_H +#define GUARD_MAILBOX_8095F8C_H + +#include "wonder_mail.h" + +WonderMail *GetMailboxSlotInfo(u8 index); +bool8 IsMailSlotEmpty(u8 index); +void ResetMailboxSlot(u8 index); + +#endif // GUARD_MAILBOX_8095F8C_H \ No newline at end of file diff --git a/include/pokemon.h b/include/pokemon.h index eee2502e5..d4d00d795 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -91,6 +91,7 @@ s32 sub_808E218(unkStruct_808E218_arg *, PokemonStruct1 *pokemon); extern PokemonStruct1 *GetPlayerPokemonStruct(void); extern void sub_808CFD0(u8 *, s16, u8 *, u8, u32 *, u16 *); extern u32 sub_808D1DC(u8 *); +extern PokemonStruct1 *sub_808D3BC(void); extern PokemonStruct1 *sub_808D3F8(void); extern s32 sub_808D544(u32); extern s32 sub_808D580(s32 *); diff --git a/include/pokemon_mail.h b/include/pokemon_mail.h index 600db740e..8af868d76 100644 --- a/include/pokemon_mail.h +++ b/include/pokemon_mail.h @@ -3,13 +3,13 @@ struct PokemonMail { - const char *headline; - const char *text; + const u8 *headline; + const u8 *text; }; #define NUM_POKEMON_MAIL 56 -const char *GetPokemonMailHeadline(u8 index); -const char *GetPokemonMailText(u8 index); +const u8 *GetPokemonMailHeadline(u8 index); +const u8 *GetPokemonMailText(u8 index); #endif // POKEMON_MAIL_H diff --git a/include/pokemon_news1.h b/include/pokemon_news1.h new file mode 100644 index 000000000..c8c113db7 --- /dev/null +++ b/include/pokemon_news1.h @@ -0,0 +1,26 @@ +#ifndef GUARD_POKEMON_NEWS1_H +#define GUARD_POKEMON_NEWS1_H + +#include "constants/wonder_mail.h" +#include "input.h" +#include "structs/str_text.h" + +// size: 0xD4; +struct unkStruct_203B2CC +{ + /* 0x0 */ u8 receivedNewsletters[NUM_POKEMON_NEWS]; + /* 0x38 */ MenuInputStruct input; + u32 unk6C; + UnkTextStruct2 *unk70; + UnkTextStruct2 unk74[4]; +}; + +u8 GetPokemonNewsIndex(void); +bool8 HasNoPKMNNews(void); + +bool8 sub_802B640(u32, UnkTextStruct2_sub *, u32); +u32 sub_802B720(bool8); +void sub_802B7D0(bool8 cursorSprite); +void sub_802B81C(void); + +#endif // GUARD_POKEMON_NEWS1_H \ No newline at end of file diff --git a/include/pokemon_news2.h b/include/pokemon_news2.h new file mode 100644 index 000000000..6a02b054c --- /dev/null +++ b/include/pokemon_news2.h @@ -0,0 +1,26 @@ +#ifndef GUARD_POKEMON_NEWS2_H +#define GUARD_POKEMON_NEWS2_H + +#include "input.h" +#include "structs/str_text.h" + +// size: 0x94 +struct unkStruct_203B2D4 +{ + /* 0x0 */ s32 state; + /* 0x4 */ u8 currMailIndex; + s32 unk8; + s32 unkC; + const u8 *unk10[4]; + u32 unk20; + u32 unk24; + UnkTextStruct2 unk28[4]; + MenuInputStructSub unk88; +}; + +bool8 sub_802B9FC(u8 mailIndex); +u32 sub_802BA8C(void); +void sub_802BACC(void); +void sub_802BC7C(void); + +#endif // GUARD_POKEMON_NEWS2_H \ No newline at end of file diff --git a/include/pokemon_news3.h b/include/pokemon_news3.h new file mode 100644 index 000000000..72a7a2222 --- /dev/null +++ b/include/pokemon_news3.h @@ -0,0 +1,27 @@ +#ifndef GUARD_POKEMON_NEWS3_H +#define GUARD_POKEMON_NEWS3_H + +#include "input.h" +#include "structs/str_text.h" + +// size: 0xA4 +struct unkStruct_203B2D8 +{ + u8 unk0[4]; + /* 0x4 */ MenuInputStruct input; + u32 unk38; + UnkTextStruct2 *unk3C; + UnkTextStruct2 unk40[4]; + u8 unkA0[4]; +}; + +void CreateMailMenu(void); +bool8 HasNoMailinMailbox(void); + +bool8 sub_802BD14(s32, UnkTextStruct2_sub *, u32); +u32 sub_802BDEC(bool8); +u8 sub_802BE74(void); +void sub_802BE94(bool8 cursorSprite); +void sub_802BEDC(void); + +#endif // GUARD_POKEMON_NEWS3_H \ No newline at end of file diff --git a/include/structs/str_text.h b/include/structs/str_text.h index d30e4756c..26353b193 100644 --- a/include/structs/str_text.h +++ b/include/structs/str_text.h @@ -55,7 +55,7 @@ typedef struct UnkTextStruct2 s16 unkE; s16 unk10; s16 unk12; - const u8 *unk14; + const u8 *unk14; // Pointer to 4 bytes which may be x-coord related } UnkTextStruct2; #endif // GUARD_STR_TEXT_H \ No newline at end of file diff --git a/include/wonder_mail_802C10C.h b/include/wonder_mail_802C10C.h new file mode 100644 index 000000000..538af7361 --- /dev/null +++ b/include/wonder_mail_802C10C.h @@ -0,0 +1,28 @@ +#ifndef GUARD_WONDER_MAIL_802C10C_H +#define GUARD_WONDER_MAIL_802C10C_H + +#include "constants/mailbox.h" +#include "input.h" +#include "structs/str_text.h" + +// size: 0xA8 +struct unkStruct_203B2E0 +{ + u8 pelipperBoardSlots[MAX_ACCEPTED_JOBS]; + /* 0x8 */ MenuInputStruct input; + s32 unk3C; + UnkTextStruct2 *unk40; + UnkTextStruct2 unk44[4]; + u8 unkA4[4]; +}; + +void DrawPelipperBoardJobMenu(void); +bool8 HasNoPelipperBoardJobs(void); + +bool8 sub_802C10C(s32, UnkTextStruct2_sub *, s32); +u32 sub_802C1E4(bool8); +u8 sub_802C26C(void); +void sub_802C28C(bool8 cursorSprite); +void sub_802C2D4(void); + +#endif // GUARD_WONDER_MAIL_802C10C_H \ No newline at end of file diff --git a/ld_script.txt b/ld_script.txt index ba39328a6..17e02cb36 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -136,8 +136,10 @@ 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/pokemon_news1.o(.text); + src/pokemon_news2.o(.text); + src/pokemon_news3.o(.text); + src/wonder_mail_802C10C.o(.text); src/wonder_mail_2_1.o(.text); src/wonder_mail_3.o(.text); src/code_802DB28.o(.text); @@ -453,7 +455,10 @@ 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/pokemon_news1.o(.rodata); + src/pokemon_news2.o(.rodata); + src/pokemon_news3.o(.rodata); + src/wonder_mail_802C10C.o(.rodata); src/wonder_mail_2_1.o(.rodata); src/wonder_mail_3.o(.rodata); src/code_802DB28.o(.rodata); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index ac25ec345..a33c98421 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -10,11 +10,11 @@ #include "pokemon.h" #include "pokemon_3.h" #include "code_8094F88.h" +#include "mailbox_8095F8C.h" extern bool8 sub_809017C(DungeonLocation *); extern u8 sub_803C1D0(DungeonLocation *, u8); extern bool8 sub_803C0DC(s16); -extern void ResetMailboxSlot(u8); extern void ResetPelipperBoardSlot(u8); extern void ResetJobSlot(u8); extern bool8 ValidateWonderMail(WonderMail *); diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index 997fb1e25..c5125ad6b 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -17,7 +17,6 @@ extern void sub_8096C80(void); extern void sub_8096D24(void); extern void sub_80965F4(); extern void SortPelipperJobs(); -extern WonderMail *GetPelipperBoardSlotInfo(u8); u8 sub_8097318(s16 param_1); extern bool8 GenerateMailJobInfo(WonderMail *); diff --git a/src/data/pokemon_news1.h b/src/data/pokemon_news1.h new file mode 100644 index 000000000..6b0a78a77 --- /dev/null +++ b/src/data/pokemon_news1.h @@ -0,0 +1,22 @@ +ALIGNED(4) static const u8 sFill[] = _("pksdir0"); + +static const UnkTextStruct2 sUnknown_80DFBD0 = { + 0, 0, 0, 0, + 3, + 0, 0, + 0, 0, + 0, 0, + NULL +}; + +static const u8 sUnknown_80DFBE8[] = {1, 0, 12, 0}; +static const UnkTextStruct2 sUnknown_80DFBEC = { + 0, 0, 0, 0, + 6, + 2, 2, + 24, 14, + 14, 0, + sUnknown_80DFBE8 +}; + +ALIGNED(4) static const u8 sNewsList[] = _("News List"); \ No newline at end of file diff --git a/src/data/pokemon_news2.h b/src/data/pokemon_news2.h new file mode 100644 index 000000000..14531203a --- /dev/null +++ b/src/data/pokemon_news2.h @@ -0,0 +1,23 @@ +ALIGNED(4) static const u8 sFill[] = _("pksdir0"); + +static const UnkTextStruct2 sUnknown_80DFC18 = { + 0, 0, 0, 0, + 3, + 0, 0, + 0, 0, + 0, 0, + NULL +}; + +static const u8 sUnknown_80DFC30[] = {1, 0, 22, 0}; +static const UnkTextStruct2 sUnknown_80DFC34 = { + 0, 0, 0, 0, + 6, + 2, 2, + 26, 16, + 16, 0, + sUnknown_80DFC30 +}; + +ALIGNED(4) static const u8 sShe[] = _("She"); +ALIGNED(4) static const u8 sHe[] = _("He"); \ No newline at end of file diff --git a/src/data/pokemon_news3.h b/src/data/pokemon_news3.h new file mode 100644 index 000000000..037ceff99 --- /dev/null +++ b/src/data/pokemon_news3.h @@ -0,0 +1,21 @@ +ALIGNED(4) static const u8 sFill[] = _("pksdir0"); + +static const UnkTextStruct2 sUnknown_80DFC5C = { + 0, 0, 0, 0, + 3, + 0, 0, + 0, 0, + 0, 0, + NULL +}; + +static const UnkTextStruct2 sUnknown_80DFC74 = { + 0, 0, 0, 0, + 6, + 2, 2, + 24, 14, + 14, 0, + NULL +}; + +ALIGNED(4) static const u8 sMailbox[] = _("Mailbox"); \ No newline at end of file diff --git a/src/data/wonder_mail_802C10C.h b/src/data/wonder_mail_802C10C.h new file mode 100644 index 000000000..df90236a3 --- /dev/null +++ b/src/data/wonder_mail_802C10C.h @@ -0,0 +1,21 @@ +ALIGNED(4) static const u8 sFill[] = _("pksdir0"); + +static const UnkTextStruct2 sUnknown_80DFC9C = { + 0, 0, 0, 0, + 3, + 0, 0, + 0, 0, + 0, 0, + NULL +}; + +static const UnkTextStruct2 sUnknown_80DFCB4 = { + 0, 0, 0, 0, + 6, + 2, 2, + 24, 14, + 14, 0, + NULL +}; + +ALIGNED(4) static const u8 sBulletinBoard[] = _("Bulletin Board"); \ No newline at end of file diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index 044ef8e2c..768d43110 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -49,7 +49,6 @@ extern void SetFriendAreaActionMenuState(u32); extern void PlaySound(u32); extern void sub_808D31C(PokemonStruct1 *); -extern PokemonStruct1 *sub_808D3BC(void); extern u8 gUnknown_202DE58[]; extern bool8 sub_808D750(s16 index_); extern void sub_808ED00(void); diff --git a/src/mailbox.c b/src/mailbox.c index 05db7cb01..2a771bfb3 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -11,6 +11,12 @@ #include "menu_input.h" #include "code_80118A4.h" #include "wonder_mail_2_1.h" +#include "pokemon_news1.h" +#include "pokemon_news2.h" +#include "pokemon_news3.h" +#include "mailbox_8095F8C.h" +#include "code_803B050.h" +#include "code_80958E8_1.h" EWRAM_DATA_2 struct unkStruct_203B304 *gUnknown_203B304 = {0}; @@ -65,8 +71,6 @@ const u8 gMailAccepted[] = "Accepted"; const u8 gUnknown_80E0324[] = "/"; static const u8 mailbox_fill[] = "pksdir0"; -extern bool8 IsMailinJobSlot(WonderMail *mail); - void sub_802E578(void); void HandleMailActionMenu(void); void HandleMailboxMenu(void); @@ -80,32 +84,12 @@ void sub_802E7D0(void); extern void sub_802E088(u32); extern void CreateMailboxMenu(void); extern void CreateMailActionMenu(void); -extern void sub_802BD14(u32, u32, u32); -extern void sub_802BE94(u32); -extern void CreateMailMenu(void); extern void CreateMailAcceptedStatusBox(u32); -extern void sub_803B35C(WonderMail *, unkStruct_802C39C *); -extern void sub_802B640(u32, u32, u32); -extern void sub_802B7D0(u32); -extern void sub_802B9FC(u8); -extern u32 sub_802BA8C(void); -extern void sub_802BACC(void); -extern u8 GetPokemonNewsIndex(void); -extern void sub_802B81C(void); -extern u32 sub_802B720(u32); -extern WonderMail *GetMailboxSlotInfo(u8); -extern u8 HasNoMailinMailbox(void); -extern u32 sub_802BDEC(u32); extern void AcceptJob(WonderMail *); extern void sub_8096C80(void); extern void sub_8096D24(void); -extern void ResetMailboxSlot(u8); extern void ReceivePKMNNews(u8); extern void sub_8096078(void); -extern void sub_802BEDC(void); -extern u8 sub_802BE74(void); -extern u8 HasNoPelipperBoardJobs(void); -extern u8 HasNoPKMNNews(void); u32 sub_802DFB0(void) { @@ -213,10 +197,10 @@ void sub_802E1AC(void) sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->menuItems, 0, gUnknown_203B304->unkFC, gUnknown_203B304->menuAction1, 2); break; case MAIL_MENU: - sub_802BD14(0, 0, 4); + sub_802BD14(0, NULL, 4); break; case MAIL_MENU_1: - sub_802BE94(1); + sub_802BE94(TRUE); break; case MAIL_ACTION_MENU: CreateMailMenu(); @@ -233,10 +217,10 @@ void sub_802E1AC(void) InitializeJobListMenu(0); break; case PKMN_NEWS_MENU: - sub_802B640(0, 0, 8); + sub_802B640(0, NULL, 8); break; case PKMN_NEWS_MENU_1: - sub_802B7D0(1); + sub_802B7D0(TRUE); break; case DISPLAY_SEL_PKMN_NEWS: sub_802B9FC(gUnknown_203B304->mailIndex); @@ -387,7 +371,7 @@ void sub_802E578(void) { WonderMail *mail; - switch(sub_802BDEC(1)) + switch(sub_802BDEC(TRUE)) { case 3: @@ -422,7 +406,7 @@ void HandleMailActionMenu(void) WonderMail *mail; - sub_802BDEC(0); + sub_802BDEC(FALSE); if(!sub_8012FD8(&gUnknown_203B304->unk6C)) { sub_8013114(&gUnknown_203B304->unk6C, &menuAction); @@ -517,7 +501,7 @@ void sub_802E758(void) void sub_802E774(void) { - switch(sub_802B720(1)) + switch(sub_802B720(TRUE)) { case 0: case 1: diff --git a/src/mailbox_8095F8C.c b/src/mailbox_8095F8C.c index 4f4996b81..395c568b0 100644 --- a/src/mailbox_8095F8C.c +++ b/src/mailbox_8095F8C.c @@ -1,12 +1,9 @@ #include "global.h" -#include "wonder_mail.h" #include "code_80958E8.h" +#include "mailbox_8095F8C.h" extern unkStruct_203B490 *gUnknown_203B490; -bool8 IsMailSlotEmpty(u8); -void ResetMailboxSlot(u8); - s32 CountFilledMailboxSlots(void) { s32 index; @@ -21,8 +18,7 @@ s32 CountFilledMailboxSlots(void) return counter; } -// Unused -bool8 sub_8095FB0(WonderMail *mail) +UNUSED static bool8 sub_8095FB0(WonderMail *mail) { s32 index; diff --git a/src/party_list_menu.c b/src/party_list_menu.c index 46bddca58..6408e0d9b 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -35,7 +35,6 @@ static EWRAM_DATA_2 unkStruct_203B2B8 *sUnknown_203B2B8 = {0}; extern u32 sub_8026F04(PokemonStruct1 *); bool8 CanTakePokemonHeldItem(PokemonStruct1 *r0); -extern PokemonStruct1 *sub_808D3BC(void); extern bool8 sub_808D750(s16 index_); extern void sub_808ED00(void); bool8 sub_8026E88(PokemonStruct1 *r0); diff --git a/src/pelipper_board.c b/src/pelipper_board.c index daa617f51..18a948af1 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -14,6 +14,9 @@ #include "pelipper_board.h" #include "code_80118A4.h" #include "wonder_mail_2_1.h" +#include "wonder_mail_802C10C.h" +#include "code_80958E8_1.h" +#include "code_803B050.h" EWRAM_DATA_2 struct unkStruct_203B308 *gPelipperBoard = {0}; @@ -74,23 +77,13 @@ extern void sub_802EA58(void); extern void CreatePelipperBoardMenu(void); extern void sub_802EC10(void); -extern void sub_802C10C(u32, u32, u32); -extern void sub_802C28C(u32); -extern void DrawPelipperBoardJobMenu(void); extern void CreatePelipperAcceptedStatusBox(u32); -extern void sub_803B35C(WonderMail *, unkStruct_802C39C *); -extern WonderMail *GetPelipperBoardSlotInfo(u8); -extern u8 HasNoPelipperBoardJobs(void); extern void sub_8096C80(void); extern void sub_8096D24(void); extern void AcceptJob(WonderMail*); extern void ResetPelipperBoardSlot(u8); extern void sub_80965F4(void); -extern void sub_802C2D4(void); -extern u32 sub_802C1E4(u32); -extern u8 sub_802C26C(void); -extern bool8 IsMailinJobSlot(WonderMail *mail); void SetPelipperBoardState(u32); @@ -199,10 +192,10 @@ void sub_802EA58(void) sub_8012D60(&gPelipperBoard->unk6C, gPelipperBoard->menuItems, 0, gPelipperBoard->unkFC, gPelipperBoard->menuAction1, 2); break; case 4: - sub_802C10C(0, 0, 4); + sub_802C10C(0, NULL, 4); break; case 5: - sub_802C28C(1); + sub_802C28C(TRUE); break; case 6: DrawPelipperBoardJobMenu(); @@ -333,7 +326,7 @@ void sub_802ECB4(void) void sub_802ED4C(void) { - switch(sub_802C1E4(1)) + switch(sub_802C1E4(TRUE)) { case 3: gPelipperBoard->jobIndex = sub_802C26C(); @@ -358,7 +351,7 @@ void sub_802EDBC(void) WonderMail *mail; s32 menuAction = 0; - sub_802C1E4(0); + sub_802C1E4(FALSE); if(!sub_8012FD8(&gPelipperBoard->unk6C)) { sub_8013114(&gPelipperBoard->unk6C, &menuAction); diff --git a/src/pokemon_mail.c b/src/pokemon_mail.c index a3d8fae05..c6caa28ee 100644 --- a/src/pokemon_mail.c +++ b/src/pokemon_mail.c @@ -1,13 +1,14 @@ #include "global.h" #include "pokemon_mail.h" + #include "data/pokemon_mail.h" -const char *GetPokemonMailHeadline(u8 index) +const u8 *GetPokemonMailHeadline(u8 index) { return gPokemonMail[index].headline; } -const char *GetPokemonMailText(u8 index) +const u8 *GetPokemonMailText(u8 index) { return gPokemonMail[index].text; } diff --git a/src/pokemon_news.c b/src/pokemon_news.c deleted file mode 100644 index f7c75e478..000000000 --- a/src/pokemon_news.c +++ /dev/null @@ -1,690 +0,0 @@ -#include "constants/input.h" -#include "global.h" -#include "pokemon.h" -#include "pokemon_mail.h" -#include "pokemon_mid.h" -#include "memory.h" -#include "text1.h" -#include "text2.h" -#include "save.h" -#include "menu_input.h" -#include "code_80130A8.h" -#include "code_80118A4.h" -#include "code_803B050.h" -#include "game_options.h" - -struct unkStruct_203B2CC -{ - // size: 0xD4; - u8 receivedNewsletters[NUM_POKEMON_NEWS]; - MenuInputStruct input; - u32 unk6C; - UnkTextStruct2 *unk70; - 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; - UnkTextStruct2 unk28[4]; - MenuInputStructSub unk88; -}; -extern struct unkStruct_203B2D4 *gUnknown_203B2D4; - -struct unkStruct_203B2D8 -{ - // size: 0xA4 - u8 unk0[4]; - MenuInputStruct input; - u32 unk38; - UnkTextStruct2 *unk3C; - UnkTextStruct2 unk40[4]; - u8 unkA0[4]; -}; -extern struct unkStruct_203B2D8 *gUnknown_203B2D8; - -const UnkTextStruct2 gUnknown_80DFBD0 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const u8 gUnknown_80DFBE8[] = { 0x01, 0x00, 0x0C, 0x00 }; - -const UnkTextStruct2 gUnknown_80DFBEC = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x02, - 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 UnkTextStruct2 gUnknown_80DFC18 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const u8 gUnkData_80DFC30[] = { 0x01, 0x00, 0x16, 0x00 }; - -const UnkTextStruct2 gUnknown_80DFC34 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x02, - 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 UnkTextStruct2 gUnknown_80DFC5C = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const UnkTextStruct2 gUnknown_80DFC74 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x02, - 0x18, 0x0E, - 0x0E, 0x00, - NULL -}; - -ALIGNED(4) const u8 gMailboxText[] = "Mailbox"; -ALIGNED(4) static const char wonder_mail_2_fill3[] = "pksdir0"; - -const UnkTextStruct2 gUnknown_80DFC9C = -{ - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const UnkTextStruct2 gUnknown_80DFCB4 = -{ - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x02, - 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_802BCC4(void); -extern void sub_802BB14(u32); -extern u8 HasNoMailinMailbox(void); -extern void sub_802BF30(void); -extern void CreateMailMenu(void); -extern s32 CountEmptyMailSlots(void); -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 char gUnknown_202E5D8[0x50]; -extern char gAvailablePokemonNames[0x50]; -extern void sub_802BC7C(void); -extern PokemonStruct1 *sub_808D3BC(void); - -u32 sub_802B640(u32 r0, UnkTextStruct2_sub *r1, u32 r2) -{ - if (HasNoPKMNNews()) - return 0; - - 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].unk8 = *r1; - - sub_8012D08(gUnknown_203B2CC->unk70, r2); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2CC->unk74, TRUE, TRUE); - - sub_8013818(&gUnknown_203B2CC->input, GetNumPKMNNews(), r2, r0); - - gUnknown_203B2CC->input.menuIndex = gUnknown_203B2D0; - gUnknown_203B2CC->input.unk1E = gUnknown_203B2D2; - - sub_8013984(&gUnknown_203B2CC->input); - sub_802B880(); - CreatePKMNNewsMenu(); - - return 1; -} - -u32 sub_802B720(u8 r0) -{ - if (r0 == 0) { - sub_8013660(&gUnknown_203B2CC->input); - return 0; - } - - switch (GetKeyPress(&gUnknown_203B2CC->input)) - { - 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->input, 1) != 0) - { - sub_802B880(); - CreatePKMNNewsMenu(); - return 1; - } - else - return 0; -} - -u8 GetPokemonNewsIndex(void) -{ - return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->input.unk1E * gUnknown_203B2CC->input.unk1C) + gUnknown_203B2CC->input.menuIndex]; -} - -void sub_802B7D0(u8 r0) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2CC->unk74, FALSE, FALSE); - - gUnknown_203B2CC->input.unk22 = GetNumPKMNNews(); - sub_8013984(&gUnknown_203B2CC->input); - sub_802B880(); - CreatePKMNNewsMenu(); - - if (r0 != 0) - AddMenuCursorSprite(&gUnknown_203B2CC->input); -} - -void sub_802B81C(void) -{ - if (gUnknown_203B2CC != NULL) { - gUnknown_203B2D0 = gUnknown_203B2CC->input.menuIndex; - - gUnknown_203B2D2 = gUnknown_203B2CC->input.unk1E; - - gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBD0; - - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2CC->unk74, TRUE, TRUE); - - MemoryFree(gUnknown_203B2CC); - gUnknown_203B2CC = NULL; - } -} - -NAKED // sub_80095E4 memes -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->input.unk1E + 1, 2, 7, gUnknown_203B2CC->unk6C); - - for (index = 0; index < gUnknown_203B2CC->input.unk1A; index++) { - y = sub_8013800(&gUnknown_203B2CC->input, index); - new_index = (gUnknown_203B2CC->input.unk1E * gUnknown_203B2CC->input.unk1C) + 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; -} - - - - - - - - -// THIS IS A NEW FILE - -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, TRUE, TRUE); - 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, TRUE, TRUE); - 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++; - } - } -} - - - - - -// THIS IS A NEW FILE: - - - - - - -u32 sub_802BD14(s32 param_1, UnkTextStruct2_sub *param_2, u32 param_3) -{ - if (HasNoMailinMailbox()) - return 0; - - 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].unk8 = *param_2; - - sub_8012D34(gUnknown_203B2D8->unk3C,param_3); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D8->unk40, TRUE, TRUE); - sub_8013848(&gUnknown_203B2D8->input,CountEmptyMailSlots(),param_3,param_1); - gUnknown_203B2D8->input.menuIndex = gUnknown_203B2DC; - sub_8013984(&gUnknown_203B2D8->input); - sub_802BF30(); - CreateMailMenu(); - return 1; -} - -u32 sub_802BDEC(u8 r0) -{ - if (r0 == 0) { - sub_8013660(&gUnknown_203B2D8->input); - return 0; - } - - switch (GetKeyPress(&gUnknown_203B2D8->input)) { - 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->input, 1) != 0) { - sub_802BF30(); - CreateMailMenu(); - return 1; - } - else - return 0; - } -} - -u8 sub_802BE74(void) -{ - return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->input.unk1E * gUnknown_203B2D8->input.unk1C) + gUnknown_203B2D8->input.menuIndex]; -} - -void sub_802BE94(u8 r0) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D8->unk40, FALSE, FALSE); - - gUnknown_203B2D8->input.unk22 = CountEmptyMailSlots(); - sub_8013984(&gUnknown_203B2D8->input); - sub_802BF30(); - CreateMailMenu(); - - if (r0 != 0) - AddMenuCursorSprite(&gUnknown_203B2D8->input); -} - -void sub_802BEDC(void) -{ - if (gUnknown_203B2D8 != NULL) { - gUnknown_203B2DC = gUnknown_203B2D8->input.menuIndex; - gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC5C; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2D8->unk40, TRUE, TRUE); - 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" - ); -} - diff --git a/src/pokemon_news1.c b/src/pokemon_news1.c new file mode 100644 index 000000000..7e1e548ca --- /dev/null +++ b/src/pokemon_news1.c @@ -0,0 +1,220 @@ +#include "global.h" +#include "code_80118A4.h" +#include "code_80130A8.h" +#include "code_803B050.h" +#include "code_8096AF8.h" +#include "constants/input.h" +#include "pokemon_mail.h" +#include "pokemon_news1.h" +#include "pokemon_news2.h" +#include "memory.h" +#include "menu_input.h" +#include "text1.h" +#include "text2.h" + +static EWRAM_DATA_2 struct unkStruct_203B2CC *sUnknown_203B2CC = {0}; +static EWRAM_DATA_2 u16 sUnknown_203B2D0 = {0}; +static EWRAM_DATA_2 u16 sUnknown_203B2D2 = {0}; + +#include "data/pokemon_news1.h" + +static void CreatePKMNNewsMenu(void); +static s32 GetNumPKMNNews(void); + +static void sub_802B880(void); + +bool8 sub_802B640(u32 a0, UnkTextStruct2_sub *a1, u32 a2) +{ + if (HasNoPKMNNews()) + return FALSE; + + if (sUnknown_203B2CC == NULL) + sUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 8); + + sUnknown_203B2CC->unk6C = a0; + sUnknown_203B2CC->unk70 = &sUnknown_203B2CC->unk74[a0]; + + sub_8006518(sUnknown_203B2CC->unk74); + + sUnknown_203B2CC->unk74[sUnknown_203B2CC->unk6C] = sUnknown_80DFBEC; + + if (a1 != NULL) + sUnknown_203B2CC->unk74[sUnknown_203B2CC->unk6C].unk8 = *a1; + + sub_8012D08(sUnknown_203B2CC->unk70, a2); + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2CC->unk74, TRUE, TRUE); + + sub_8013818(&sUnknown_203B2CC->input, GetNumPKMNNews(), a2, a0); + + sUnknown_203B2CC->input.menuIndex = sUnknown_203B2D0; + sUnknown_203B2CC->input.unk1E = sUnknown_203B2D2; + + sub_8013984(&sUnknown_203B2CC->input); + sub_802B880(); + CreatePKMNNewsMenu(); + + return TRUE; +} + +u32 sub_802B720(bool8 a0) +{ + if (!a0) { + sub_8013660(&sUnknown_203B2CC->input); + return 0; + } + + switch (GetKeyPress(&sUnknown_203B2CC->input)) { + 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(&sUnknown_203B2CC->input, 1)) { + sub_802B880(); + CreatePKMNNewsMenu(); + return 1; + } + return 0; +} + +u8 GetPokemonNewsIndex(void) +{ + return sUnknown_203B2CC->receivedNewsletters[(sUnknown_203B2CC->input.unk1E * sUnknown_203B2CC->input.unk1C) + sUnknown_203B2CC->input.menuIndex]; +} + +void sub_802B7D0(bool8 cursorSprite) +{ + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2CC->unk74, FALSE, FALSE); + + sUnknown_203B2CC->input.unk22 = GetNumPKMNNews(); + sub_8013984(&sUnknown_203B2CC->input); + sub_802B880(); + CreatePKMNNewsMenu(); + + if (cursorSprite) + AddMenuCursorSprite(&sUnknown_203B2CC->input); +} + +void sub_802B81C(void) +{ + if (sUnknown_203B2CC != NULL) { + sUnknown_203B2D0 = sUnknown_203B2CC->input.menuIndex; + + sUnknown_203B2D2 = sUnknown_203B2CC->input.unk1E; + + sUnknown_203B2CC->unk74[sUnknown_203B2CC->unk6C] = sUnknown_80DFBD0; + + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2CC->unk74, TRUE, TRUE); + + MemoryFree(sUnknown_203B2CC); + sUnknown_203B2CC = NULL; + } +} + +NAKED // sub_80095E4 memes +static 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 sUnknown_203B2CC"); +} + +static void CreatePKMNNewsMenu(void) +{ + s32 index; + s32 y; + s32 new_index; + u8 mailIndex; + + sub_8008C54(sUnknown_203B2CC->unk6C); + sub_80073B8(sUnknown_203B2CC->unk6C); + xxx_call_draw_string(10, 0, sNewsList, sUnknown_203B2CC->unk6C, 0); + + sub_8012BC4((sUnknown_80DFBE8[2] * 8) + 4, 0, sUnknown_203B2CC->input.unk1E + 1, 2, 7, sUnknown_203B2CC->unk6C); + + for (index = 0; index < sUnknown_203B2CC->input.unk1A; index++) { + y = sub_8013800(&sUnknown_203B2CC->input, index); + new_index = (sUnknown_203B2CC->input.unk1E * sUnknown_203B2CC->input.unk1C) + index; + mailIndex = sUnknown_203B2CC->receivedNewsletters[new_index]; + sub_803B6B0(10, y, 6, sUnknown_203B2CC->unk6C); + sub_802BC7C(); + xxx_format_and_draw(21, y, GetPokemonMailHeadline(mailIndex), sUnknown_203B2CC->unk6C, 0); + } + + sub_80073E0(sUnknown_203B2CC->unk6C); +} + +static s32 GetNumPKMNNews(void) +{ + s32 i; + s32 newsCount; + + newsCount = 0; + + for (i = 0; i < NUM_POKEMON_NEWS; i++) { + if (CheckPKMNNewsSlot(i)) { + sUnknown_203B2CC->receivedNewsletters[newsCount] = i; + newsCount++; + } + } + + return newsCount; +} + +bool8 HasNoPKMNNews(void) +{ + s32 i; + + for (i = 0; i < NUM_POKEMON_NEWS; i++) { + if (CheckPKMNNewsSlot(i)) + return FALSE; + } + + return TRUE; +} \ No newline at end of file diff --git a/src/pokemon_news2.c b/src/pokemon_news2.c new file mode 100644 index 000000000..e0c62ac93 --- /dev/null +++ b/src/pokemon_news2.c @@ -0,0 +1,174 @@ +#include "global.h" +#include "code_80118A4.h" +#include "code_80130A8.h" +#include "game_options.h" +#include "pokemon_mail.h" +#include "pokemon_mid.h" +#include "pokemon_news2.h" +#include "memory.h" +#include "menu_input.h" +#include "text1.h" +#include "text2.h" + +extern u8 gAvailablePokemonNames[]; // 202DF98 + +static EWRAM_DATA_2 struct unkStruct_203B2D4 *sUnknown_203B2D4 = {0}; + +#include "data/pokemon_news2.h" + +static void sub_802BB14(u32 newState); +static void sub_802BB28(void); +static void sub_802BB98(void); +static void sub_802BC08(void); +static void sub_802BCC4(void); + +bool8 sub_802B9FC(u8 mailIndex) +{ + sUnknown_203B2D4 = MemoryAlloc(sizeof(struct unkStruct_203B2D4), 8); + sUnknown_203B2D4->currMailIndex = mailIndex; + sub_801317C(&sUnknown_203B2D4->unk88); + sUnknown_203B2D4->unk24 = 0; + sUnknown_203B2D4->unk28[0] = sUnknown_80DFC34; + sUnknown_203B2D4->unk28[1] = sUnknown_80DFC18; + sUnknown_203B2D4->unk28[2] = sUnknown_80DFC18; + sUnknown_203B2D4->unk28[3] = sUnknown_80DFC18; + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2D4->unk28, TRUE, TRUE); + sUnknown_203B2D4->unk8 = 0; + sub_802BCC4(); + sub_802BC7C(); + sub_802BB14(0); + return TRUE; +} + +u32 sub_802BA8C(void) +{ + switch (sUnknown_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 (sUnknown_203B2D4 != NULL) { + sUnknown_203B2D4->unk28[sUnknown_203B2D4->unk24] = sUnknown_80DFC18; + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2D4->unk28, TRUE, TRUE); + MemoryFree(sUnknown_203B2D4); + sUnknown_203B2D4 = NULL; + } +} + +static void sub_802BB14(u32 newState) +{ + sUnknown_203B2D4->state = newState; + sub_802BB28(); +} + +static void sub_802BB28(void) +{ + switch (sUnknown_203B2D4->state) { + case 0: + case 1: + sub_8008C54(sUnknown_203B2D4->unk24); + sub_80073B8(sUnknown_203B2D4->unk24); + xxx_format_and_draw(10, 0, GetPokemonMailHeadline(sUnknown_203B2D4->currMailIndex), sUnknown_203B2D4->unk24, 0); + xxx_format_and_draw(6, 20, sUnknown_203B2D4->unk10[sUnknown_203B2D4->unk8], sUnknown_203B2D4->unk24, 0); + sub_80073E0(sUnknown_203B2D4->unk24); + sUnknown_203B2D4->unk8++; + break; + case 2: + case 3: + break; + } +} + +static void sub_802BB98(void) +{ + if (sUnknown_203B2D4->unkC != 0) { + if (sUnknown_203B2D4->unk20 & 8) + sub_8013E54(); + sUnknown_203B2D4->unk20++; + } + + switch (sub_8012A64(&sUnknown_203B2D4->unk88, sUnknown_203B2D4->unk24)) { + case 1: + PlayMenuSoundEffect(0); + if (sUnknown_203B2D4->unkC != 0) + sub_802BB14(1); + else + sub_802BB14(3); + break; + case 2: + PlayMenuSoundEffect(1); + sub_802BB14(2); + break; + } +} + +static void sub_802BC08(void) +{ + if (sUnknown_203B2D4->unk8 < sUnknown_203B2D4->unkC) { + if (sUnknown_203B2D4->unk20 & 8) + sub_8013E54(); + sUnknown_203B2D4->unk20++; + } + + switch (sub_8012A64(&sUnknown_203B2D4->unk88, sUnknown_203B2D4->unk24)) { + case 1: + PlayMenuSoundEffect(0); + if (sUnknown_203B2D4->unk8 < sUnknown_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 + 80, sShe); + else + strcpy(gAvailablePokemonNames + 80, sHe); +} + +static void sub_802BCC4(void) +{ + const u8 *mailTextPtr; + + mailTextPtr = GetPokemonMailText(sUnknown_203B2D4->currMailIndex); + sUnknown_203B2D4->unkC = 0; + sUnknown_203B2D4->unk10[0] = mailTextPtr; + + // Count all the {EXTRA_MSG}'s + while (*mailTextPtr != '\0') { + if (*mailTextPtr == '#') { + if (mailTextPtr[1] == 'P' || mailTextPtr[1] == 'p') { + sUnknown_203B2D4->unkC++; + sUnknown_203B2D4->unk10[sUnknown_203B2D4->unkC] = mailTextPtr + 2; + } + mailTextPtr += 2; + } + else + mailTextPtr++; + } +} \ No newline at end of file diff --git a/src/pokemon_news3.c b/src/pokemon_news3.c new file mode 100644 index 000000000..98072d7ee --- /dev/null +++ b/src/pokemon_news3.c @@ -0,0 +1,238 @@ +#include "global.h" +#include "code_800D090.h" +#include "code_80118A4.h" +#include "code_802C39C.h" +#include "code_803B050.h" +#include "code_80958E8_1.h" +#include "constants/input.h" +#include "constants/mailbox.h" +#include "mailbox_8095F8C.h" +#include "memory.h" +#include "menu_input.h" +#include "pokemon_mail.h" +#include "pokemon_mid.h" +#include "pokemon_news3.h" +#include "text1.h" +#include "text2.h" + +extern u8 gAvailablePokemonNames[]; // 202DF98 + +static EWRAM_DATA_2 struct unkStruct_203B2D8 *sUnknown_203B2D8 = {0}; +static EWRAM_DATA_2 u16 sUnknown_203B2DC = {0}; + +#include "data/pokemon_news3.h" + +static s32 CountEmptyMailSlots(void); + +static void sub_802BF30(void); + +bool8 sub_802BD14(s32 a0, UnkTextStruct2_sub *a1, u32 a2) +{ + if (HasNoMailinMailbox()) + return FALSE; + + if (sUnknown_203B2D8 == NULL) + sUnknown_203B2D8 = MemoryAlloc(sizeof(struct unkStruct_203B2D8), 8); + + sUnknown_203B2D8->unk38 = a0; + sUnknown_203B2D8->unk3C = &sUnknown_203B2D8->unk40[a0]; + sub_8006518(sUnknown_203B2D8->unk40); + sUnknown_203B2D8->unk40[sUnknown_203B2D8->unk38] = sUnknown_80DFC74; + sUnknown_203B2D8->unk3C->unk14 = sUnknown_203B2D8->unkA0; + + if (a1 != NULL) + sUnknown_203B2D8->unk40[sUnknown_203B2D8->unk38].unk8 = *a1; + + sub_8012D34(sUnknown_203B2D8->unk3C, a2); + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2D8->unk40, TRUE, TRUE); + sub_8013848(&sUnknown_203B2D8->input, CountEmptyMailSlots(), a2, a0); + sUnknown_203B2D8->input.menuIndex = sUnknown_203B2DC; + sub_8013984(&sUnknown_203B2D8->input); + sub_802BF30(); + CreateMailMenu(); + return TRUE; +} + +u32 sub_802BDEC(bool8 a0) +{ + if (!a0) { + sub_8013660(&sUnknown_203B2D8->input); + return 0; + } + + switch (GetKeyPress(&sUnknown_203B2D8->input)) { + 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(&sUnknown_203B2D8->input, 1)) { + sub_802BF30(); + CreateMailMenu(); + return 1; + } + return 0; + } +} + +u8 sub_802BE74(void) +{ + return sUnknown_203B2D8->unk0[(sUnknown_203B2D8->input.unk1E * sUnknown_203B2D8->input.unk1C) + sUnknown_203B2D8->input.menuIndex]; +} + +void sub_802BE94(bool8 cursorSprite) +{ + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2D8->unk40, FALSE, FALSE); + + sUnknown_203B2D8->input.unk22 = CountEmptyMailSlots(); + sub_8013984(&sUnknown_203B2D8->input); + sub_802BF30(); + CreateMailMenu(); + + if (cursorSprite) + AddMenuCursorSprite(&sUnknown_203B2D8->input); +} + +void sub_802BEDC(void) +{ + if (sUnknown_203B2D8 != NULL) { + sUnknown_203B2DC = sUnknown_203B2D8->input.menuIndex; + sUnknown_203B2D8->unk40[sUnknown_203B2D8->unk38] = sUnknown_80DFC5C; + ResetUnusedInputStruct(); + sub_800641C(sUnknown_203B2D8->unk40, TRUE, TRUE); + MemoryFree(sUnknown_203B2D8); + sUnknown_203B2D8 = NULL; + } +} + +NAKED +static 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 sUnknown_203B2D8" + ); +} + +void CreateMailMenu(void) +{ + WonderMail *mail; + s32 y; + s32 i; + unkStruct_802C39C local; + u8 buffer[128]; + + sub_8008C54(sUnknown_203B2D8->unk38); + sub_80073B8(sUnknown_203B2D8->unk38); + xxx_call_draw_string((sUnknown_203B2D8->input.unk1E * 8) + 10, 0, sMailbox, sUnknown_203B2D8->unk38, 0); + + for (i = 0; i < sUnknown_203B2D8->input.unk1A; i++) { + mail = GetMailboxSlotInfo(sUnknown_203B2D8->unk0[(sUnknown_203B2D8->input.unk1E * sUnknown_203B2D8->input.unk1C) + i]); + local.unk0[0] = sUnknown_203B2D8->unk38; + local.y = sub_8013800(&sUnknown_203B2D8->input, i); + + if (mail->mailType == MAIL_TYPE_UNK1) { + y = sub_8013800(&sUnknown_203B2D8->input, i); + sub_803B6B0(10, y, 6, sUnknown_203B2D8->unk38); + PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); + sprintfStatic(buffer, GetPokemonMailHeadline(mail->unk4.dungeon.floor), gAvailablePokemonNames); + xxx_call_draw_string(21, y, buffer, sUnknown_203B2D8->unk38, 0); + } + else { + sub_803B35C(mail, &local); + if (IsMailinJobSlot(mail)) + local.unk43 = 2; + + CreateRescueTitle(&local); + } + } + + sub_80073E0(sUnknown_203B2D8->unk38); +} + +static s32 CountEmptyMailSlots(void) +{ + s32 mailSlots; + s32 i; + + mailSlots = 0; + + for (i = 0; i < NUM_MAILBOX_SLOTS; i++) { + if (!IsMailSlotEmpty(i)) { + sUnknown_203B2D8->unk0[mailSlots] = i; + mailSlots++; + } + } + + return mailSlots; +} + +bool8 HasNoMailinMailbox(void) +{ + s32 i; + + for (i = 0; i < NUM_MAILBOX_SLOTS; i++) { + if (!IsMailSlotEmpty(i)) + return FALSE; + } + + return TRUE; +} \ No newline at end of file diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 8ee829f19..32952089a 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -77,8 +77,6 @@ ALIGNED(4) const char gUnknown_80DFB14[] = _( " Please give me a shout if\n" "you would like to send {COLOR_1 LIGHT_BLUE}A-OK Mail{END_COLOR_TEXT_1}."); -ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0"; - u32 sub_802B2D4(void) { s32 iVar1; diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 23f591d04..c94c50a7b 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -12,11 +12,13 @@ #include "wonder_mail_2_1.h" #include "code_80118A4.h" #include "code_80958E8_1.h" +#include "code_803B050.h" extern struct unkStruct_203B2F0 *gUnknown_203B2F0; extern struct unkStruct_203B2E8* gUnknown_203B2E8; -extern struct unkStruct_203B2E8* gUnknown_203B2E0; -u16 gUnknown_203B2EC; +extern u16 gUnknown_203B2EC; + +ALIGNED(4) static const char wonder_mail_2_fill4[] = "pksdir0"; const UnkTextStruct2 gUnknown_80DFCE4 = { @@ -100,12 +102,9 @@ static const u8 wonder_mail_fill1[] = "pksdir0"; extern void sub_802CAA4(void); extern u8 IsJobSlotEmpty(u8); -extern void sub_803B35C(WonderMail *, unkStruct_802C39C *); -extern void CreateRescueTitle(unkStruct_802C39C *); extern void sub_802C6DC(void); extern void DrawJobListMenu(void); -extern bool8 IsPelipperBoardSlotEmpty(u8); extern void SetJobListState(u32); extern void sub_802CC00(void); extern void sub_802CC70(void); @@ -117,38 +116,6 @@ extern void sub_802CBAC(void); s32 CountAcceptedJobs(void); -s32 CountPelipperBoardSlots(void) -{ - s32 index; - s32 counter = 0; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if(!IsPelipperBoardSlotEmpty(index)) - { - gUnknown_203B2E0->pelipperBoardSlots[counter] = index; - counter++; - } - } - return counter; -} - -bool8 HasNoPelipperBoardJobs(void) -{ - s32 index; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if(!IsPelipperBoardSlotEmpty(index)) - return FALSE; - } - return TRUE; -} - - - - - -// THIS IS A NEW FILE: - diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c deleted file mode 100644 index 8101524ce..000000000 --- a/src/wonder_mail_2_mid.c +++ /dev/null @@ -1,317 +0,0 @@ -#include "global.h" -#include "constants/input.h" -#include "constants/mailbox.h" -#include "code_800D090.h" -#include "input.h" -#include "memory.h" -#include "text1.h" -#include "text2.h" -#include "pokemon_mail.h" -#include "wonder_mail.h" -#include "code_802C39C.h" -#include "menu_input.h" -#include "code_80118A4.h" -#include "code_803B050.h" -#include "pokemon_mid.h" - -bool8 IsMailSlotEmpty(u8); -extern s32 CountPelipperBoardSlots(void); -extern void sub_802C328(void); -extern void DrawPelipperBoardJobMenu(void); -extern u8 HasNoPelipperBoardJobs(void); - -extern WonderMail *GetPelipperBoardSlotInfo(u32); -extern void sub_803B35C(WonderMail *, u32 *); -extern u8 gBulletinBoardText[]; -extern bool8 IsMailinJobSlot(WonderMail *); -extern void CreateRescueTitle(unkStruct_802C39C *); - -struct unkStruct_203B2D8 -{ - // size: 0xA4 - u8 unk0[4]; - MenuInputStruct input; - u32 unk38; - UnkTextStruct2 *unk3C; - UnkTextStruct2 unk40[4]; - u8 unkA0[4]; -}; - -extern struct unkStruct_203B2D8 *gUnknown_203B2D8; - -struct unkStruct_203B2E0 -{ - // size: 0xA8 - u8 unk0[0x8]; - MenuInputStruct input; - s32 unk3C; - UnkTextStruct2 *unk40; - UnkTextStruct2 unk44[4]; - u8 unkA4[4]; -}; -extern struct unkStruct_203B2E0 *gUnknown_203B2E0; - -extern UnkTextStruct2 gUnknown_80DFCB4; -extern UnkTextStruct2 gUnknown_80DFC9C; - -extern u16 gUnknown_203B2E4; - -extern WonderMail *GetMailboxSlotInfo(u8); -extern u8 gMailboxText[]; -extern u8 gAvailablePokemonNames[]; - -void CreateMailMenu(void) -{ - WonderMail *mail; - s32 y; - s32 index; - unkStruct_802C39C local; - u8 buffer [128]; - - sub_8008C54(gUnknown_203B2D8->unk38); - sub_80073B8(gUnknown_203B2D8->unk38); - xxx_call_draw_string(gUnknown_203B2D8->input.unk1E * 8 + 10,0,gMailboxText,gUnknown_203B2D8->unk38,0); - for (index = 0; index < gUnknown_203B2D8->input.unk1A; index++) { - mail = GetMailboxSlotInfo(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->input.unk1E * gUnknown_203B2D8->input.unk1C) + index]); - local.unk0[0] = gUnknown_203B2D8->unk38; - local.y = sub_8013800(&gUnknown_203B2D8->input, index); - if (mail->mailType == MAIL_TYPE_UNK1) { - y = sub_8013800(&gUnknown_203B2D8->input, index); - sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); - PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); - sprintfStatic(buffer, GetPokemonMailHeadline(mail->unk4.dungeon.floor), gAvailablePokemonNames); - xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0); - } - else { - sub_803B35C(mail,local.unk0); - if (IsMailinJobSlot(mail)) { - local.unk43 = 2; - } - CreateRescueTitle(&local); - } - } - sub_80073E0(gUnknown_203B2D8->unk38); -} - -s32 CountEmptyMailSlots(void) -{ - s32 mailSlots; - s32 index; - - mailSlots = 0; - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - if(!IsMailSlotEmpty(index)) - { - gUnknown_203B2D8->unk0[mailSlots] = index; - mailSlots++; - } - } - return mailSlots; -} - -bool8 HasNoMailinMailbox(void) -{ - s32 index; - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - if(!IsMailSlotEmpty(index)) - return FALSE; - } - return TRUE; -} - - - - -// THIS IS A NEW FILE: - - - - -bool8 sub_802C10C(s32 param_1,UnkTextStruct2_sub *param_2,s32 param_3) -{ - if (HasNoPelipperBoardJobs() != 0) { - return FALSE; - } - else - { - if (gUnknown_203B2E0 == NULL) - gUnknown_203B2E0 = MemoryAlloc(sizeof(struct unkStruct_203B2E0), 8); - - gUnknown_203B2E0->unk3C = param_1; - gUnknown_203B2E0->unk40 = &gUnknown_203B2E0->unk44[param_1]; - sub_8006518(gUnknown_203B2E0->unk44); - - gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFCB4; - gUnknown_203B2E0->unk40->unk14 = gUnknown_203B2E0->unkA4; - - if (param_2 != NULL) - gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C].unk8 = *param_2; - - sub_8012D34(gUnknown_203B2E0->unk40,param_3); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2E0->unk44, TRUE, TRUE); - sub_8013848(&gUnknown_203B2E0->input,CountPelipperBoardSlots(),param_3,param_1); - gUnknown_203B2E0->input.menuIndex = gUnknown_203B2E4; - sub_8013984(&gUnknown_203B2E0->input); - sub_802C328(); - DrawPelipperBoardJobMenu(); - return TRUE; - } -} - -u32 sub_802C1E4(u8 param_1) -{ - if (param_1 == '\0') { - sub_8013660(&gUnknown_203B2E0->input); - return 0; - } - else { - switch(GetKeyPress(&gUnknown_203B2E0->input)) - { - 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_203B2E0->input,1)) { - sub_802C328(); - DrawPelipperBoardJobMenu(); - return 1; - } - else { - return 0; - } - } - } -} - -u8 sub_802C26C(void) -{ - return gUnknown_203B2E0->unk0[(gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C) + gUnknown_203B2E0->input.menuIndex]; -} - -void sub_802C28C(u8 r0) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2E0->unk44, FALSE, FALSE); - gUnknown_203B2E0->input.unk22 = CountPelipperBoardSlots(); - sub_8013984(&gUnknown_203B2E0->input); - sub_802C328(); - DrawPelipperBoardJobMenu(); - if(r0) - AddMenuCursorSprite(&gUnknown_203B2E0->input); -} - -void sub_802C2D4(void) -{ - if(gUnknown_203B2E0 != NULL) - { - gUnknown_203B2E4 = gUnknown_203B2E0->input.menuIndex; - gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFC9C; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2E0->unk44, TRUE, TRUE); - MemoryFree(gUnknown_203B2E0); - gUnknown_203B2E0 = NULL; - } -} - -NAKED -void sub_802C328(void) -{ - asm_unified( - "\tpush {r4,lr}\n" - "\tldr r4, _0802C398\n" - "\tldr r0, [r4]\n" - "\tldrh r1, [r0, 0x28]\n" - "\tadds r0, 0xA4\n" - "\tmovs r2, 0\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tldrh r1, [r0, 0x26]\n" - "\tadds r0, 0xA5\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA6\n" - "\tmovs r1, 0xC\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xA7\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tmovs r1, 0x22\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, 0x3C]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r1, r2, r1\n" - "\tadds r1, 0x52\n" - "\tasrs r3, r0, 16\n" - "\tlsrs r0, 16\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r2, 0x3C]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tlsls r0, 3\n" - "\tadds r2, r0\n" - "\tadds r3, 0x2\n" - "\tadds r2, 0x54\n" - "\tstrh r3, [r2]\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x44\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" -"_0802C398: .4byte gUnknown_203B2E0"); -} - -void DrawPelipperBoardJobMenu(void) -{ - u32 slotIndex; - WonderMail *mail; - s32 iVar4; - s32 x; - s32 index; - unkStruct_802C39C local; - - sub_8008C54(gUnknown_203B2E0->unk3C); - sub_80073B8(gUnknown_203B2E0->unk3C); - iVar4 = gUnknown_203B2E0->input.unk1E * 8; - x = iVar4; - x += 10; - xxx_call_draw_string(x,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0); - iVar4 += 4; - x = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; - sub_8012BC4(x,0,gUnknown_203B2E0->input.unk1E + 1,2,7,gUnknown_203B2E0->unk3C); - - for(index = 0; index < gUnknown_203B2E0->input.unk1A; index++) - { - slotIndex = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C + index]); - mail = GetPelipperBoardSlotInfo(slotIndex); - local.unk0[0] = gUnknown_203B2E0->unk3C; - local.y = sub_8013800(&gUnknown_203B2E0->input,index); - sub_803B35C(mail,local.unk0); - if (IsMailinJobSlot(GetPelipperBoardSlotInfo(slotIndex))) { - local.unk43 = 2; - } - CreateRescueTitle(&local); - } - sub_80073E0(gUnknown_203B2E0->unk3C); -} diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index 1f0ec5cd5..9a0f3fed7 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -17,6 +17,7 @@ #include "code_80118A4.h" #include "code_80A26CC.h" #include "code_80958E8_1.h" +#include "code_803B050.h" const UnkTextStruct2 gUnknown_80DFDD4 = { @@ -130,14 +131,12 @@ extern void sub_802D1B8(); extern void sub_802D2A8(); -extern bool8 IsMailinJobSlot(WonderMail *); extern u8 sub_8096F50(WonderMail *); extern u8 sub_802DAA8(void); extern u8 sub_802DADC(void); extern u8 *sub_8096DD8(void); extern u8 sub_8096C08(u8 *); extern void DrawJobListMenu(void); -extern void sub_803B35C(WonderMail *, unkStruct_802C39C*); extern void sub_802D73C(void); extern void sub_802C640(u32); extern void sub_802C4C8(u32, u32, u32); @@ -148,7 +147,6 @@ extern void sub_8096D24(void); extern u8 *sub_8096DE8(void); extern void AcceptJob(unkSubStruct_203B2F8 *); unkStruct_803B344 *sub_803B344(u8); -extern void CreateRescueTitle(unkStruct_802C39C *); extern u8 gUnknown_80DFDBC[]; extern void sub_802CF5C(void); extern void sub_802CFD0(void); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index f1887d970..884109a33 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -18,6 +18,7 @@ #include "wonder_mail_3.h" #include "code_801B60C.h" #include "common_strings.h" +#include "code_803B050.h" extern unkStruct_803B344 *sub_803B344(u8); @@ -102,7 +103,6 @@ extern void sub_802F1E8(void); extern void sub_802F004(); extern void sub_802F088(); extern void sub_802F108(void); -extern void sub_803B35C(WonderMail*, unkStruct_802C39C *); extern void sub_802CDD4(u32); extern void sub_802CED8(u32); extern void sub_802CFD0(void); diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index c7fa9db21..a7365c48b 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -11,6 +11,7 @@ #include "code_802C39C.h" #include "menu_input.h" #include "code_80118A4.h" +#include "code_803B050.h" struct unkStruct_203B320 { @@ -81,8 +82,6 @@ extern s32 sub_8030A74(void); extern void sub_80308A0(void); extern void sub_803092C(void); -extern void CreateRescueTitle(unkStruct_802C39C *); - u32 sub_80306A8(u32 wonderMailType, u32 r1, UnkTextStruct2_sub *r2, u32 r3) { if (HasNoWonderMailType(wonderMailType)) diff --git a/src/wonder_mail_802C10C.c b/src/wonder_mail_802C10C.c new file mode 100644 index 000000000..9d3044d98 --- /dev/null +++ b/src/wonder_mail_802C10C.c @@ -0,0 +1,228 @@ +#include "global.h" +#include "code_80118A4.h" +#include "code_803B050.h" +#include "code_80958E8_1.h" +#include "constants/input.h" +#include "memory.h" +#include "menu_input.h" +#include "text1.h" +#include "text2.h" +#include "wonder_mail_802C10C.h" + +static EWRAM_DATA_2 struct unkStruct_203B2E0 *gUnknown_203B2E0 = {0}; +static EWRAM_DATA_2 u16 gUnknown_203B2E4 = {0}; + +#include "data/wonder_mail_802C10C.h" + +static s32 CountPelipperBoardSlots(void); + +static void sub_802C328(void); + +bool8 sub_802C10C(s32 a0, UnkTextStruct2_sub *a1, s32 a2) +{ + if (HasNoPelipperBoardJobs()) + return FALSE; + + if (gUnknown_203B2E0 == NULL) + gUnknown_203B2E0 = MemoryAlloc(sizeof(struct unkStruct_203B2E0), 8); + + gUnknown_203B2E0->unk3C = a0; + gUnknown_203B2E0->unk40 = &gUnknown_203B2E0->unk44[a0]; + sub_8006518(gUnknown_203B2E0->unk44); + + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = sUnknown_80DFCB4; + gUnknown_203B2E0->unk40->unk14 = gUnknown_203B2E0->unkA4; + + if (a1 != NULL) + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C].unk8 = *a1; + + sub_8012D34(gUnknown_203B2E0->unk40, a2); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44, TRUE, TRUE); + sub_8013848(&gUnknown_203B2E0->input, CountPelipperBoardSlots(), a2, a0); + gUnknown_203B2E0->input.menuIndex = gUnknown_203B2E4; + sub_8013984(&gUnknown_203B2E0->input); + sub_802C328(); + DrawPelipperBoardJobMenu(); + return TRUE; +} + +u32 sub_802C1E4(bool8 a0) +{ + if (!a0) { + sub_8013660(&gUnknown_203B2E0->input); + return 0; + } + + switch (GetKeyPress(&gUnknown_203B2E0->input)) { + 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_203B2E0->input, 1)) { + sub_802C328(); + DrawPelipperBoardJobMenu(); + return 1; + } + return 0; + } +} + +u8 sub_802C26C(void) +{ + return gUnknown_203B2E0->pelipperBoardSlots[(gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C) + gUnknown_203B2E0->input.menuIndex]; +} + +void sub_802C28C(bool8 cursorSprite) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44, FALSE, FALSE); + gUnknown_203B2E0->input.unk22 = CountPelipperBoardSlots(); + sub_8013984(&gUnknown_203B2E0->input); + sub_802C328(); + DrawPelipperBoardJobMenu(); + + if (cursorSprite) + AddMenuCursorSprite(&gUnknown_203B2E0->input); +} + +void sub_802C2D4(void) +{ + if (gUnknown_203B2E0 != NULL) { + gUnknown_203B2E4 = gUnknown_203B2E0->input.menuIndex; + gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = sUnknown_80DFC9C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2E0->unk44, TRUE, TRUE); + MemoryFree(gUnknown_203B2E0); + gUnknown_203B2E0 = NULL; + } +} + +NAKED +static void sub_802C328(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0802C398\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x28]\n" + "\tadds r0, 0xA4\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x26]\n" + "\tadds r0, 0xA5\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA6\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xA7\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x22\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, 0x3C]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x52\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x3C]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x54\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x44\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" +"_0802C398: .4byte gUnknown_203B2E0"); +} + +void DrawPelipperBoardJobMenu(void) +{ + u32 slotIndex; + WonderMail *mail; + s32 iVar4; + s32 x; + s32 i; + unkStruct_802C39C local; + + sub_8008C54(gUnknown_203B2E0->unk3C); + sub_80073B8(gUnknown_203B2E0->unk3C); + iVar4 = gUnknown_203B2E0->input.unk1E * 8; + x = iVar4; + x += 10; + xxx_call_draw_string(x, 0, sBulletinBoard, gUnknown_203B2E0->unk3C, 0); + + iVar4 += 4; + x = iVar4 + (gUnknown_203B2E0->unkA4[2] * 8); + sub_8012BC4(x, 0, gUnknown_203B2E0->input.unk1E + 1, 2, 7, gUnknown_203B2E0->unk3C); + + for (i = 0; i < gUnknown_203B2E0->input.unk1A; i++) { + slotIndex = (gUnknown_203B2E0->pelipperBoardSlots[(gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C) + i]); + mail = GetPelipperBoardSlotInfo(slotIndex); + local.unk0[0] = gUnknown_203B2E0->unk3C; + local.y = sub_8013800(&gUnknown_203B2E0->input, i); + sub_803B35C(mail, &local); + + if (IsMailinJobSlot(GetPelipperBoardSlotInfo(slotIndex))) + local.unk43 = 2; + + CreateRescueTitle(&local); + } + + sub_80073E0(gUnknown_203B2E0->unk3C); +} + +static s32 CountPelipperBoardSlots(void) +{ + s32 i; + s32 counter = 0; + + for (i = 0; i < MAX_ACCEPTED_JOBS; i++) { + if (!IsPelipperBoardSlotEmpty(i)) { + gUnknown_203B2E0->pelipperBoardSlots[counter] = i; + counter++; + } + } + + return counter; +} + +bool8 HasNoPelipperBoardJobs(void) +{ + s32 i; + + for (i = 0; i < MAX_ACCEPTED_JOBS; i++) { + if (!IsPelipperBoardSlotEmpty(i)) + return FALSE; + } + + return TRUE; +} \ No newline at end of file diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 4373881d5..b584d3764 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -191,30 +191,12 @@ gUnknown_203B2C4: /* 203B2C4 (CreateThankYouMailPelipper - SetThankYouMailMenuSt gUnknown_203B2C8: /* 203B2C8 (sub_802B2D4 - sub_802B5B8) */ .space 0x4 -gUnknown_203B2CC: /* 203B2CC (sub_802B640 - GetNumPKMNNews) */ - .space 0x4 - -gUnknown_203B2D0: /* 203B2D0 (sub_802B640 - sub_802B81C) */ - .space 0x2 - -gUnknown_203B2D2: /* 203B2D2 (sub_802B640 - sub_802B81C) */ +.include "src/pokemon_news1.o" +.include "src/pokemon_news2.o" +.include "src/pokemon_news3.o" +.include "src/wonder_mail_802C10C.o" .space 0x2 -gUnknown_203B2D4: /* 203B2D4 (sub_802B9FC - sub_802BCC4) */ - .space 0x4 - -gUnknown_203B2D8: /* 203B2D8 (sub_802BD14 - CountEmptyMailSlots) */ - .space 0x4 - -gUnknown_203B2DC: /* 203B2DC (sub_802BD14 - sub_802BEDC) */ - .space 0x4 - -gUnknown_203B2E0: /* 203B2E0 (sub_802C10C - CountPelipperBoardSlots) */ - .space 0x4 - -gUnknown_203B2E4: /* 203B2E4 (sub_802C10C - sub_802C2D4) */ - .space 0x4 - gUnknown_203B2E8: /* 203B2E8 (sub_802C4C8 - CountAcceptedJobs) */ .space 0x4