summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-09-23 22:49:43 -0700
committerGitHub <noreply@github.com>2021-09-24 00:49:43 -0500
commit0d3b11e81a215875fc533db17895613c47a4da73 (patch)
treed392a83755f1b7631c241c100c9e778d96ef5527 /src
parent8237e29a164211eb2ec4cd161eb4183cc1947fee (diff)
Data work and decomp some mail/pelipper board (#54)
* data work and decomp some mail/pelipper board * resuce -> rescue * label more data
Diffstat (limited to 'src')
-rw-r--r--src/bg_palette_buffer.c4
-rw-r--r--src/code_80958E8.c2
-rw-r--r--src/friend_area.c4
-rw-r--r--src/input.c4
-rw-r--r--src/items.c12
-rw-r--r--src/load_screen.c602
-rw-r--r--src/mailbox.c186
-rw-r--r--src/mailbox_1.c104
-rw-r--r--src/pelipper_board.c184
-rw-r--r--src/pelipper_board_1.c60
-rw-r--r--src/pokemon_mid.c8
-rw-r--r--src/post_office_guide.c4
-rw-r--r--src/rescue_team_info.c2
-rw-r--r--src/save.c18
-rw-r--r--src/wonder_mail_2.c5
-rw-r--r--src/wonder_mail_main_menu.c156
16 files changed, 829 insertions, 526 deletions
diff --git a/src/bg_palette_buffer.c b/src/bg_palette_buffer.c
index 9917adf..6a19362 100644
--- a/src/bg_palette_buffer.c
+++ b/src/bg_palette_buffer.c
@@ -3,8 +3,8 @@
#define BG_PALETTE_BUFFER_SIZE 512
#define BG_PALETTE_BUFFER_CHUNK_SIZE 16
-extern u16 gBGPaletteBuffer[BG_PALETTE_BUFFER_SIZE];
-extern bool8 gBGPaletteUsed[BG_PALETTE_BUFFER_SIZE / BG_PALETTE_BUFFER_CHUNK_SIZE];
+EWRAM_DATA u16 gBGPaletteBuffer[BG_PALETTE_BUFFER_SIZE];
+EWRAM_DATA bool8 gBGPaletteUsed[BG_PALETTE_BUFFER_SIZE / BG_PALETTE_BUFFER_CHUNK_SIZE];
extern void CpuCopy(void* src, void* dest, u32 size);
diff --git a/src/code_80958E8.c b/src/code_80958E8.c
index f32a41b..7674ed4 100644
--- a/src/code_80958E8.c
+++ b/src/code_80958E8.c
@@ -94,7 +94,7 @@ bool8 IsValidWonderMail(struct WonderMail *WonderMailData)
// Has to equal 5 for Wonder Mail
// https://web.archive.org/web/20080913124416/http://www.upokecenter.com/games/dungeon/guides/passwords.html
//
- if(WonderMailData->mailType != 5)
+ if(WonderMailData->mailType != WONDER_MAIL_TYPE_WONDER)
{
return FALSE;
}
diff --git a/src/friend_area.c b/src/friend_area.c
index 329670e..034b783 100644
--- a/src/friend_area.c
+++ b/src/friend_area.c
@@ -3,8 +3,8 @@
#include "friend_area.h"
#include "pokemon.h"
-EWRAM_DATA bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS];
-extern bool8 *gFriendAreas;
+bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS];
+EWRAM_DATA bool8 *gFriendAreas;
extern struct unkStruct_203B45C *gRecruitedPokemonRef;
diff --git a/src/input.c b/src/input.c
index e13bb7d..d1fca00 100644
--- a/src/input.c
+++ b/src/input.c
@@ -1,13 +1,13 @@
#include "global.h"
#include "input.h"
-EWRAM_DATA struct UnusedInputStruct gUnusedInputsRelated;
EWRAM_DATA struct Inputs gRealInputs;
+EWRAM_DATA struct UnusedInputStruct gUnusedInputsRelated;
+EWRAM_DATA u32 gUnusedScrambledInputJunk;
EWRAM_DATA struct Inputs gBufferedInputs;
EWRAM_DATA struct Inputs gCurrentInputs;
EWRAM_DATA struct Inputs gLastInputs;
EWRAM_DATA struct InputTimers gInputTimers;
-EWRAM_DATA u32 gUnusedScrambledInputJunk;
void ReadKeyInput(struct Inputs *r0);
diff --git a/src/items.c b/src/items.c
index f4f7170..5f6a626 100644
--- a/src/items.c
+++ b/src/items.c
@@ -12,7 +12,7 @@ extern struct TeamInventory *gTeamInventory_203B460;
extern struct TeamInventory gUnknown_20389A8;
extern struct FileArchive gSystemFileArchive;
extern struct unkStruct_203B45C *gRecruitedPokemonRef;
-extern const char gUnknown_8109764;
+extern const char gItemParaFileName[];
extern const char gUnknown_8109794[];
extern const char gUnknown_81097A4[];
extern s32 gUnknown_81097B0[];
@@ -52,7 +52,7 @@ bool8 xxx_insert_unk250_8091C1C(u8);
void LoadItemParameters(void)
{
gTeamInventory_203B460 = &gUnknown_20389A8;
- gItemParametersFile = OpenFileAndGetFileDataPtr(&gUnknown_8109764,&gSystemFileArchive);
+ gItemParametersFile = OpenFileAndGetFileDataPtr(gItemParaFileName,&gSystemFileArchive);
gItemParametersData = (struct Item *) gItemParametersFile->data;
}
@@ -70,7 +70,7 @@ void InitializeMoneyItems(void)
gTeamInventory_203B460->teamItems[i].itemFlags = 0;
}
- for(i = 0; i < 0xF0; i++)
+ for(i = 0; i < STORAGE_SIZE; i++)
{
gTeamInventory_203B460->teamStorage[i] = 0;
}
@@ -1169,7 +1169,7 @@ s32 SaveTeamInventory(u8* unk0, u32 size)
for (i = 0; i < INVENTORY_SIZE; i++) {
SaveItemSlot(&unk, &gTeamInventory_203B460->teamItems[i]);
}
- for (i = 0; i < NUMBER_OF_ITEM_IDS; i++) {
+ for (i = 0; i < STORAGE_SIZE; i++) {
SaveIntegerBits(&unk, &gTeamInventory_203B460->teamStorage[i], 10);
}
for (i = 0; i < 8; i++) {
@@ -1190,10 +1190,10 @@ s32 RestoreTeamInventory(u8 *unk0, u32 size)
s32 i;
xxx_init_struct_8094924_restore_809485C(&unk, unk0, size);
- for (i = 0; i < 20; i++) {
+ for (i = 0; i < INVENTORY_SIZE; i++) {
RestoreItemSlot(&unk, &gTeamInventory_203B460->teamItems[i]);
}
- for (i = 0; i < 240; i++) {
+ for (i = 0; i < STORAGE_SIZE; i++) {
RestoreIntegerBits(&unk, &gTeamInventory_203B460->teamStorage[i], 10);
}
for (i = 0; i < 8; i++) {
diff --git a/src/load_screen.c b/src/load_screen.c
index c0ff22d..cad8049 100644
--- a/src/load_screen.c
+++ b/src/load_screen.c
@@ -4,28 +4,25 @@
#include "play_time.h"
#include "file_system.h"
#include "memory.h"
+#include "menu.h"
#include "text.h"
+#include "pokemon.h"
+#include "save.h"
extern struct PlayTimeStruct *gPlayTimeRef;
extern struct PlayTimeStruct gPlayTime;
extern const struct FileArchive gTitleMenuFileArchive;
-struct unkStruct_808D33C
-{
- u8 fill0[0x4C];
- u8 unk4C;
-};
-
struct unkStruct_203B484
{
u8 fill0[0xC];
- s16 speciesIndex;
+ /* 0xC */ s16 speciesIndex;
u8 fillE[0x50 - 0xE];
- u32 unk50;
+ /* 0x50 */ u8 helperName[10];
};
-struct unkStruct_203B374
+struct LoadScreen
{
// size: 0x27c
u32 currMenu;
@@ -44,65 +41,78 @@ struct unkStruct_203B374
/* 0x258 */ u8 formattedHelperInfo[0x24];
};
-extern struct unkStruct_203B374 *gUnknown_203B374;
-extern u32 gUnknown_203B378;
-extern u32 gUnknown_203B3B8[];
-extern u32 gUnknown_203B388[];
+EWRAM_DATA struct LoadScreen *gLoadScreen;
+EWRAM_DATA struct MenuItem gUnknown_203B378[2];
+EWRAM_DATA u32 gUnknown_203B388[12];
+EWRAM_DATA u32 gUnknown_203B3B8[12];
+
extern struct unkStruct_203B484 *gUnknown_203B484;
extern struct UnkTextStruct2 gUnknown_80E75F8;
extern struct UnkTextStruct2 gUnknown_80E7610;
extern struct UnkTextStruct2 gUnknown_80E762C;
-extern u32 gUnknown_80E7644;
-extern u32 gUnknown_80E7684;
-extern u32 gUnknown_80E76B8;
-extern u32 gUnknown_80E76E8;
-extern u32 gUnknown_80E7730;
+extern struct MenuItem gResumeQuicksaveMenuItems[];
+extern struct MenuItem gResumeAdventureMenuItems[];
+extern struct MenuItem gQuitWaitingRescueMenuItems[];
+extern struct MenuItem gDeleteSavePromptMenuItems[];
+extern struct MenuItem gDeleteSaveConfirmMenuItems[];
extern struct UnkTextStruct2 gUnknown_80E7784;
-extern u32 gUnknown_80E779C;
-extern u8 gUnknown_80E77BC;
-extern u8 gUnknown_80E77C4;
-extern u8 gUnknown_80E77CC;
-extern u8 gUnknown_80E77D8;
-extern u8 gUnknown_80E77E4;
-extern u8 gUnknown_80E77F0;
-extern u8 gUnknown_80E77F8;
-extern u8 gUnknown_80E7804;
-extern u8 gUnknown_80E7808;
-extern u8 gUnknown_80E780C;
-extern u8 gUnknown_80E7824;
-extern u8 gUnknown_80E7838;
-extern u8 gUnknown_80E7848;
-extern u8 gUnknown_80E784C;
-extern u8 gUnknown_80E7854;
-extern const char gUnknown_80E785C[]; // clmkpat
+
+extern const char No_80E77B4[];
+extern const char Yes_80E77B8[];
+
+const struct MenuItem gLoadScreenYesNoMenu[3] =
+{
+ {Yes_80E77B8, 1},
+ {No_80E77B4, 2},
+ {NULL, 3},
+};
+
+ALIGNED(4) const char No_80E77B4[] = "No";
+ALIGNED(4) const char Yes_80E77B8[] = "Yes";
+
+ALIGNED(4) const char gTeamHeadingText[] = "Team:";
+ALIGNED(4) const char gNameHeadingText[] = "Name:";
+ALIGNED(4) const char gLocationHeadingText[] = "Location:";
+ALIGNED(4) const char gPlayTimeHeadingText[] = "Play time:";
+ALIGNED(4) const char gAdventuresHeadingText[] = "Adventures:";
+ALIGNED(4) const char gHelperHeadingText[] = "Helper:";
+ALIGNED(4) const char gNoTeamNamePlaceholder[] = _("????");
+ALIGNED(4) const char gUnknown_80E7804[] = "%s ";
+ALIGNED(4) const char gNoNamePlaceholder[] = "???";
+ALIGNED(4) const char gQuicksaveDataDeletedText[] = "Quicksave data deleted.";
+ALIGNED(4) const char gLocationUnknownText[] = "Location unknown.";
+ALIGNED(4) const char gPlayTimePlaceholder[] = "%d:%02d:%02d ";
+ALIGNED(4) const char gNumAdventurePlaceholder[] = "%d";
+ALIGNED(4) const char gHelperInfoPlaceholder[] = "%s (%s)";
+ALIGNED(4) const char gNoHelperText[] = "-----";
+ALIGNED(4) const char gClmkpatFileName[] = "clmkpat"; // clmkpat
+ALIGNED(4) const char load_screen_fill[] = "pksdir0";
u8 IsQuickSave(void);
void DrawLoadScreenText(void);
+void sub_80397B4(void);
+
extern void sub_8035CF4(u32 *, u32, u32);
-extern void SetMenuItems(u32 *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, u32 *, u32, u32, u32);
+extern void SetMenuItems(u32 *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32);
extern u8 sub_8012FD8(u32 *);
extern void sub_8013114(u32 *, u32 *);
extern void sub_8095240(u32);
-extern void sub_80122A8(void);
extern void sub_80920D8(u8 *);
-extern struct unkStruct_808D33C *sub_808D33C(void);
+extern struct PokemonStruct *sub_808D33C(void);
extern u8 sub_80023E4(u32);
extern u8 *sub_8098FB4();
-extern void ExpandPlaceholdersBuffer(u8 *buffer, u8 *text, ...);
-extern s32 sub_8011C1C(void);
+extern void ExpandPlaceholdersBuffer(u8 *buffer, const u8 *text, ...);
extern u8 *GetDungeonLocationInfo(void);
extern u32 GetNumAdventures(void);
-extern void xxx_call_draw_string(u32 x, u32 y, u8 *, u32, u32);
+extern void xxx_call_draw_string(u32 x, u32 y, const u8 *, u32, u32);
extern void PrintDungeonLocationtoBuffer(u8 *, u8 *);
-extern void sub_80922B4(u8 *, u8 *, u32);
+extern void sub_80922B4(u8 *, const u8 *, u32);
extern s32 sub_8095324(u32);
extern u32 sub_8001658(u32, u32);
-void sub_80397B4(void);
extern void sub_80073E0(u32);
-extern s32 sub_8011FA8(void);
extern void sub_8008C54(u32);
extern void sub_80073B8(u32);
@@ -117,38 +127,38 @@ void CreateLoadScreen(u32 currMenu)
{
int iVar8;
- if (gUnknown_203B374 == NULL) {
- gUnknown_203B374 = MemoryAlloc(sizeof(struct unkStruct_203B374),8);
- MemoryFill8((u8 *)gUnknown_203B374,0,sizeof(struct unkStruct_203B374));
+ if (gLoadScreen == NULL) {
+ gLoadScreen = MemoryAlloc(sizeof(struct LoadScreen),8);
+ MemoryFill8((u8 *)gLoadScreen,0,sizeof(struct LoadScreen));
}
- gUnknown_203B374->currMenu = currMenu;
+ gLoadScreen->currMenu = currMenu;
for(iVar8 = 0; iVar8 < 4; iVar8++){
- gUnknown_203B374->unk144[iVar8] = gUnknown_80E75F8;
+ gLoadScreen->unk144[iVar8] = gUnknown_80E75F8;
}
ResetUnusedInputStruct();
- sub_800641C(gUnknown_203B374->unk144,1,1);
- SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,0,&gUnknown_80E7610,&gUnknown_203B378,0,6,0);
- switch(gUnknown_203B374->currMenu){
+ sub_800641C(gLoadScreen->unk144,1,1);
+ SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,0,&gUnknown_80E7610,gUnknown_203B378,0,6,0);
+ switch(gLoadScreen->currMenu){
case MENU_CONTINUE:
if (IsQuickSave())
- SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E7644,0,6,0);
+ SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gResumeQuicksaveMenuItems,0,6,0);
else
- SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E7684,0,6,0);
+ SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gResumeAdventureMenuItems,0,6,0);
break;
case MENU_AWAITING_RESCUE:
- SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E76B8,0,6,0);
+ SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gQuitWaitingRescueMenuItems,0,6,0);
break;
case MENU_DELETE_SAVE_PROMPT:
- SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E76E8,0,6,0);
+ SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C,gDeleteSavePromptMenuItems,0,6,0);
break;
case MENU_DELETE_SAVE_CONFIRM:
- SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C, &gUnknown_80E7730,0,6,0);
+ SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,1,&gUnknown_80E762C, gDeleteSaveConfirmMenuItems,0,6,0);
break;
}
- SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,2,&gUnknown_80E7784,&gUnknown_80E779C,1,2,0);
- sub_8035CF4(&gUnknown_203B374->unk4,0,0);
- sub_8035CF4(&gUnknown_203B374->unk4,1,0);
- sub_8035CF4(&gUnknown_203B374->unk4,2,1);
+ SetMenuItems(&gLoadScreen->unk4,gLoadScreen->unk144,2,&gUnknown_80E7784,gLoadScreenYesNoMenu,1,2,0);
+ sub_8035CF4(&gLoadScreen->unk4,0,0);
+ sub_8035CF4(&gLoadScreen->unk4,1,0);
+ sub_8035CF4(&gLoadScreen->unk4,2,1);
DrawLoadScreenText();
}
@@ -156,10 +166,10 @@ void CleanLoadScreen(void)
{
ResetUnusedInputStruct();
sub_800641C(NULL, 1, 1);
- if(gUnknown_203B374 != NULL)
+ if(gLoadScreen != NULL)
{
- MemoryFree(gUnknown_203B374);
- gUnknown_203B374 = NULL;
+ MemoryFree(gLoadScreen);
+ gLoadScreen = NULL;
}
}
@@ -170,9 +180,9 @@ u32 UpdateLoadScreenMenu(void)
nextMenu = MENU_NO_SCREEN_CHANGE;
menuAction = 4;
- sub_8012FD8(&gUnknown_203B374->unk54);
- if (sub_8012FD8(&gUnknown_203B374->unkA4) == '\0') {
- sub_8013114(&gUnknown_203B374->unkA4,&menuAction);
+ sub_8012FD8(&gLoadScreen->unk54);
+ if (sub_8012FD8(&gLoadScreen->unkA4) == '\0') {
+ sub_8013114(&gLoadScreen->unkA4,&menuAction);
}
switch(menuAction)
@@ -182,7 +192,7 @@ u32 UpdateLoadScreenMenu(void)
nextMenu = MENU_MAIN_SCREEN;
break;
case 1:
- switch(gUnknown_203B374->currMenu)
+ switch(gLoadScreen->currMenu)
{
case MENU_CONTINUE:
nextMenu = 2; // MENU_???
@@ -207,7 +217,11 @@ u32 UpdateLoadScreenMenu(void)
return nextMenu;
}
-#ifdef NONMATCHING
+static inline u8 *DrawLoadScreenTextSub(u8 *teamNameBuffer) {
+ strcpy(teamNameBuffer,gNoTeamNamePlaceholder);
+ return teamNameBuffer;
+}
+
void DrawLoadScreenText(void)
{
int iVar2;
@@ -220,48 +234,48 @@ void DrawLoadScreenText(void)
u32 hours;
u32 minutes;
u32 seconds;
- struct unkStruct_808D33C *playerInfo;
+ struct PokemonStruct *playerInfo;
+ struct unkStruct_203B484 *temp2;
+ u8 *r2;
iVar2 = sub_8011FA8();
sub_8008C54(0);
sub_80073B8(0);
- xxx_call_draw_string(8,0, &gUnknown_80E77BC,0,0); // Team:
- xxx_call_draw_string(8,12,&gUnknown_80E77C4,0,0); // Name:
- xxx_call_draw_string(8,24,&gUnknown_80E77CC,0,0); // Location:
- xxx_call_draw_string(8,36,&gUnknown_80E77D8,0,0); // Play time:
- xxx_call_draw_string(8,48,&gUnknown_80E77E4,0,0); // Adventures:
- xxx_call_draw_string(8,60,&gUnknown_80E77F0,0,0); // Helper:
+ xxx_call_draw_string(8,0, gTeamHeadingText,0,0); // Team:
+ xxx_call_draw_string(8,12,gNameHeadingText,0,0); // Name:
+ xxx_call_draw_string(8,24,gLocationHeadingText,0,0); // Location:
+ xxx_call_draw_string(8,36,gPlayTimeHeadingText,0,0); // Play time:
+ xxx_call_draw_string(8,48,gAdventuresHeadingText,0,0); // Adventures:
+ xxx_call_draw_string(8,60,gHelperHeadingText,0,0); // Helper:
// Draw Team Name
if (sub_80023E4(0) != '\0') {
sub_80920D8(teamNameBuffer);
+ r2 = teamNameBuffer;
}
else {
- strcpy(teamNameBuffer,&gUnknown_80E77F8);
+ // NOTE: static inline was needed here to match -jiang
+ r2 = DrawLoadScreenTextSub(teamNameBuffer);
}
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedTeamName,&gUnknown_80E7804,teamNameBuffer);
- xxx_call_draw_string(64,0,gUnknown_203B374->formattedTeamName,0,0);
+
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedTeamName,gUnknown_80E7804,r2);
+ xxx_call_draw_string(64,0,gLoadScreen->formattedTeamName,0,0);
// Draw Player Name
playerInfo = sub_808D33C();
- if (playerInfo == NULL) {
- sub_80922B4(playerName,&gUnknown_80E7808,10);
- }
- else {
- sub_80922B4(playerName,&playerInfo->unk4C,10);
- }
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedPlayerName,&gUnknown_80E7804,playerName);
- xxx_call_draw_string(64,12,gUnknown_203B374->formattedPlayerName,0,0);
+ if (playerInfo == NULL)
+ sub_80922B4(playerName, gNoNamePlaceholder, POKEMON_NAME_LENGTH);
+ else
+ sub_80922B4(playerName, playerInfo->name, POKEMON_NAME_LENGTH);
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedPlayerName,gUnknown_80E7804,playerName);
+ xxx_call_draw_string(64,12,gLoadScreen->formattedPlayerName,0,0);
// Draw Location Info
- // TODO: fix these branches.. correct logic but branching isn't right
if ((sub_8095324(1) != 0) || (sub_8095324(7) != 0)) {
- if (iVar2 == 0xf1207) {
- PrintDungeonLocationtoBuffer(gUnknown_203B374->formattedLocation,GetDungeonLocationInfo());
- }
- else {
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted
- }
+ if (iVar2 == 0xf1207)
+ PrintDungeonLocationtoBuffer(gLoadScreen->formattedLocation,GetDungeonLocationInfo());
+ else
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedLocation,gQuicksaveDataDeletedText); // Quicksave data deleted
}
else {
switch(sub_8011C1C())
@@ -270,405 +284,59 @@ void DrawLoadScreenText(void)
switch(sub_8001658(0,24))
{
default:
- ExpandPlaceholdersBuffer(auStack356,&gUnknown_80E7804,sub_8098FB4());
- xxx_format_string(auStack356,gUnknown_203B374->formattedLocation,gUnknown_203B374->formattedPlayTime,0);
+ ExpandPlaceholdersBuffer(auStack356,gUnknown_80E7804,sub_8098FB4());
+ xxx_format_string(auStack356,gLoadScreen->formattedLocation,gLoadScreen->formattedPlayTime,0);
break;
case 0x7:
case 0xB:
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedLocation,gQuicksaveDataDeletedText); // Quicksave data deleted
break;
}
break;
case 2:
if (iVar2 == 0xf1207)
- {
- PrintDungeonLocationtoBuffer(gUnknown_203B374->formattedLocation,GetDungeonLocationInfo());
- } else {
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted
- }
+ PrintDungeonLocationtoBuffer(gLoadScreen->formattedLocation,GetDungeonLocationInfo());
+ else
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedLocation,gQuicksaveDataDeletedText); // Quicksave data deleted
break;
default:
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E7824); // Location unknown
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedLocation,gLocationUnknownText); // Location unknown
break;
}
}
- xxx_call_draw_string(64,24,gUnknown_203B374->formattedLocation,0,0);
+ xxx_call_draw_string(64,24,gLoadScreen->formattedLocation,0,0);
// Draw Play Time
DeconstructPlayTime(gPlayTimeRef,&hours,&minutes,&seconds);
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedPlayTime,&gUnknown_80E7838,hours,minutes,seconds);
- xxx_call_draw_string(64,36,gUnknown_203B374->formattedPlayTime,0,0);
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedPlayTime,gPlayTimePlaceholder,hours,minutes,seconds);
+ xxx_call_draw_string(64,36,gLoadScreen->formattedPlayTime,0,0);
// Draw Adventures Info
numAdventures = GetNumAdventures();
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedAdventures,&gUnknown_80E7848,numAdventures); // %d
- xxx_call_draw_string(64,48,gUnknown_203B374->formattedAdventures,0,0);
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedAdventures,gNumAdventurePlaceholder,numAdventures); // %d
+ xxx_call_draw_string(64,48,gLoadScreen->formattedAdventures,0,0);
// Draw Helper Info
- if ((iVar2 == 0xf1207) && (gUnknown_203B484->speciesIndex != 0)) {
- sub_808D930(speciesHelper,gUnknown_203B484->speciesIndex);
- // TODO very hacky match here
- sub_80922B4(nameHelper,(u8 *)(&gUnknown_203B484 + 0x14),10);
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E784C,nameHelper,speciesHelper); // %s (%s)
+ if (iVar2 == 0xf1207){
+ // NOTE: very hacky match here but needed var here to match
+ temp2 = gUnknown_203B484;
+ if(temp2->speciesIndex != SPECIES_NONE) {
+ sub_808D930(speciesHelper,temp2->speciesIndex);
+ sub_80922B4(nameHelper,temp2->helperName,POKEMON_NAME_LENGTH);
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedHelperInfo,gHelperInfoPlaceholder,nameHelper,speciesHelper); // %s (%s)
+ }
+ else
+ goto print_helper_placeholder;
}
else {
- ExpandPlaceholdersBuffer(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E7854); // -----
+ print_helper_placeholder:
+ ExpandPlaceholdersBuffer(gLoadScreen->formattedHelperInfo,gNoHelperText); // -----
}
- xxx_call_draw_string(64,60,gUnknown_203B374->formattedHelperInfo,0,0);
+ xxx_call_draw_string(64,60,gLoadScreen->formattedHelperInfo,0,0);
sub_80397B4(); // Draw event icons??
sub_80073E0(0);
}
-#else
-NAKED
-void DrawLoadScreenText(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r8\n"
- "\tpush {r7}\n"
- "\tsub sp, 0x150\n"
- "\tbl sub_8011FA8\n"
- "\tmov r8, r0\n"
- "\tmovs r0, 0\n"
- "\tbl sub_8008C54\n"
- "\tmovs r0, 0\n"
- "\tbl sub_80073B8\n"
- "\tldr r2, _0803952C\n"
- "\tmovs r4, 0\n"
- "\tstr r4, [sp]\n"
- "\tmovs r0, 0x8\n"
- "\tmovs r1, 0\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tldr r2, _08039530\n"
- "\tstr r4, [sp]\n"
- "\tmovs r0, 0x8\n"
- "\tmovs r1, 0xC\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tldr r2, _08039534\n"
- "\tstr r4, [sp]\n"
- "\tmovs r0, 0x8\n"
- "\tmovs r1, 0x18\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tldr r2, _08039538\n"
- "\tstr r4, [sp]\n"
- "\tmovs r0, 0x8\n"
- "\tmovs r1, 0x24\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tldr r2, _0803953C\n"
- "\tstr r4, [sp]\n"
- "\tmovs r0, 0x8\n"
- "\tmovs r1, 0x30\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tldr r2, _08039540\n"
- "\tstr r4, [sp]\n"
- "\tmovs r0, 0x8\n"
- "\tmovs r1, 0x3C\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tmovs r0, 0\n"
- "\tbl sub_80023E4\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _08039544\n"
- "\tadd r4, sp, 0x68\n"
- "\tadds r0, r4, 0\n"
- "\tbl sub_80920D8\n"
- "\tadds r2, r4, 0\n"
- "\tb _0803954E\n"
- "\t.align 2, 0\n"
-"_0803952C: .4byte gUnknown_80E77BC\n"
-"_08039530: .4byte gUnknown_80E77C4\n"
-"_08039534: .4byte gUnknown_80E77CC\n"
-"_08039538: .4byte gUnknown_80E77D8\n"
-"_0803953C: .4byte gUnknown_80E77E4\n"
-"_08039540: .4byte gUnknown_80E77F0\n"
-"_08039544:\n"
- "\tldr r1, _08039588\n"
- "\tadd r0, sp, 0x68\n"
- "\tbl strcpy\n"
- "\tadd r2, sp, 0x68\n"
-"_0803954E:\n"
- "\tldr r5, _0803958C\n"
- "\tldr r0, [r5]\n"
- "\tmovs r4, 0xD2\n"
- "\tlsls r4, 1\n"
- "\tadds r0, r4\n"
- "\tldr r1, _08039590\n"
- "\tbl ExpandPlaceholdersBuffer\n"
- "\tldr r2, [r5]\n"
- "\tadds r2, r4\n"
- "\tmovs r0, 0\n"
- "\tstr r0, [sp]\n"
- "\tmovs r0, 0x40\n"
- "\tmovs r1, 0\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tbl sub_808D33C\n"
- "\tcmp r0, 0\n"
- "\tbne _08039598\n"
- "\tadd r4, sp, 0x90\n"
- "\tldr r1, _08039594\n"
- "\tadds r0, r4, 0\n"
- "\tmovs r2, 0xA\n"
- "\tbl sub_80922B4\n"
- "\tb _080395A6\n"
- "\t.align 2, 0\n"
-"_08039588: .4byte gUnknown_80E77F8\n"
-"_0803958C: .4byte gUnknown_203B374\n"
-"_08039590: .4byte gUnknown_80E7804\n"
-"_08039594: .4byte gUnknown_80E7808\n"
-"_08039598:\n"
- "\tadd r4, sp, 0x90\n"
- "\tadds r1, r0, 0\n"
- "\tadds r1, 0x4C\n"
- "\tadds r0, r4, 0\n"
- "\tmovs r2, 0xA\n"
- "\tbl sub_80922B4\n"
-"_080395A6:\n"
- "\tadds r2, r4, 0\n"
- "\tldr r5, _080395F0\n"
- "\tldr r0, [r5]\n"
- "\tmovs r4, 0xE4\n"
- "\tlsls r4, 1\n"
- "\tadds r0, r4\n"
- "\tldr r6, _080395F4\n"
- "\tadds r1, r6, 0\n"
- "\tbl ExpandPlaceholdersBuffer\n"
- "\tldr r2, [r5]\n"
- "\tadds r2, r4\n"
- "\tmovs r0, 0\n"
- "\tstr r0, [sp]\n"
- "\tmovs r0, 0x40\n"
- "\tmovs r1, 0xC\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tmovs r0, 0x1\n"
- "\tbl sub_8095324\n"
- "\tcmp r0, 0\n"
- "\tbne _080395E0\n"
- "\tmovs r0, 0x7\n"
- "\tbl sub_8095324\n"
- "\tcmp r0, 0\n"
- "\tbeq _08039606\n"
-"_080395E0:\n"
- "\tldr r0, _080395F8\n"
- "\tcmp r8, r0\n"
- "\tbne _080395FC\n"
- "\tldr r4, [r5]\n"
- "\tmovs r0, 0xF6\n"
- "\tlsls r0, 1\n"
- "\tadds r4, r0\n"
- "\tb _08039676\n"
- "\t.align 2, 0\n"
-"_080395F0: .4byte gUnknown_203B374\n"
-"_080395F4: .4byte gUnknown_80E7804\n"
-"_080395F8: .4byte 0x000f1207\n"
-"_080395FC:\n"
- "\tldr r0, [r5]\n"
- "\tmovs r1, 0xF6\n"
- "\tlsls r1, 1\n"
- "\tadds r0, r1\n"
- "\tb _08039690\n"
-"_08039606:\n"
- "\tbl sub_8011C1C\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _08039624\n"
- "\tcmp r0, 0x2\n"
- "\tbeq _08039668\n"
- "\tldr r0, [r5]\n"
- "\tmovs r2, 0xF6\n"
- "\tlsls r2, 1\n"
- "\tadds r0, r2\n"
- "\tldr r1, _08039620\n"
- "\tb _08039692\n"
- "\t.align 2, 0\n"
-"_08039620: .4byte gUnknown_80E7824\n"
-"_08039624:\n"
- "\tmovs r0, 0\n"
- "\tmovs r1, 0x18\n"
- "\tbl sub_8001658\n"
- "\tcmp r0, 0x7\n"
- "\tbeq _08039658\n"
- "\tcmp r0, 0xB\n"
- "\tbeq _08039658\n"
- "\tbl sub_8098FB4\n"
- "\tadds r2, r0, 0\n"
- "\tadd r0, sp, 0x4\n"
- "\tadds r1, r6, 0\n"
- "\tbl ExpandPlaceholdersBuffer\n"
- "\tldr r0, [r5]\n"
- "\tmovs r3, 0xF6\n"
- "\tlsls r3, 1\n"
- "\tadds r1, r0, r3\n"
- "\tadds r3, 0x24\n"
- "\tadds r2, r0, r3\n"
- "\tadd r0, sp, 0x4\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_format_string\n"
- "\tb _08039696\n"
-"_08039658:\n"
- "\tldr r0, _08039664\n"
- "\tldr r0, [r0]\n"
- "\tmovs r1, 0xF6\n"
- "\tlsls r1, 1\n"
- "\tadds r0, r1\n"
- "\tb _08039690\n"
- "\t.align 2, 0\n"
-"_08039664: .4byte gUnknown_203B374\n"
-"_08039668:\n"
- "\tldr r0, _08039684\n"
- "\tcmp r8, r0\n"
- "\tbne _08039688\n"
- "\tldr r4, [r5]\n"
- "\tmovs r2, 0xF6\n"
- "\tlsls r2, 1\n"
- "\tadds r4, r2\n"
-"_08039676:\n"
- "\tbl GetDungeonLocationInfo\n"
- "\tadds r1, r0, 0\n"
- "\tadds r0, r4, 0\n"
- "\tbl PrintDungeonLocationtoBuffer\n"
- "\tb _08039696\n"
- "\t.align 2, 0\n"
-"_08039684: .4byte 0x000f1207\n"
-"_08039688:\n"
- "\tldr r0, [r5]\n"
- "\tmovs r3, 0xF6\n"
- "\tlsls r3, 1\n"
- "\tadds r0, r3\n"
-"_08039690:\n"
- "\tldr r1, _0803974C\n"
-"_08039692:\n"
- "\tbl ExpandPlaceholdersBuffer\n"
-"_08039696:\n"
- "\tldr r7, _08039750\n"
- "\tldr r2, [r7]\n"
- "\tmovs r0, 0xF6\n"
- "\tlsls r0, 1\n"
- "\tadds r2, r0\n"
- "\tmovs r6, 0\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x40\n"
- "\tmovs r1, 0x18\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tldr r0, _08039754\n"
- "\tldr r0, [r0]\n"
- "\tadd r1, sp, 0x144\n"
- "\tadd r2, sp, 0x148\n"
- "\tadd r3, sp, 0x14C\n"
- "\tbl DeconstructPlayTime\n"
- "\tldr r0, [r7]\n"
- "\tmovs r5, 0x84\n"
- "\tlsls r5, 2\n"
- "\tadds r0, r5\n"
- "\tldr r1, _08039758\n"
- "\tadd r2, sp, 0x144\n"
- "\tldr r2, [r2]\n"
- "\tadd r3, sp, 0x148\n"
- "\tldr r3, [r3]\n"
- "\tadd r4, sp, 0x14C\n"
- "\tldr r4, [r4]\n"
- "\tstr r4, [sp]\n"
- "\tbl ExpandPlaceholdersBuffer\n"
- "\tldr r2, [r7]\n"
- "\tadds r2, r5\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x40\n"
- "\tmovs r1, 0x24\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tbl GetNumAdventures\n"
- "\tadds r2, r0, 0\n"
- "\tldr r0, [r7]\n"
- "\tmovs r4, 0x8D\n"
- "\tlsls r4, 2\n"
- "\tadds r0, r4\n"
- "\tldr r1, _0803975C\n"
- "\tbl ExpandPlaceholdersBuffer\n"
- "\tldr r2, [r7]\n"
- "\tadds r2, r4\n"
- "\tstr r6, [sp]\n"
- "\tmovs r0, 0x40\n"
- "\tmovs r1, 0x30\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tldr r0, _08039760\n"
- "\tcmp r8, r0\n"
- "\tbne _0803976C\n"
- "\tldr r0, _08039764\n"
- "\tldr r6, [r0]\n"
- "\tmovs r1, 0xC\n"
- "\tldrsh r0, [r6, r1]\n"
- "\tcmp r0, 0\n"
- "\tbeq _0803976C\n"
- "\tadd r5, sp, 0x130\n"
- "\tadds r1, r0, 0\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_808D930\n"
- "\tadd r4, sp, 0xE0\n"
- "\tadds r1, r6, 0\n"
- "\tadds r1, 0x50\n"
- "\tadds r0, r4, 0\n"
- "\tmovs r2, 0xA\n"
- "\tbl sub_80922B4\n"
- "\tldr r0, [r7]\n"
- "\tmovs r3, 0x96\n"
- "\tlsls r3, 2\n"
- "\tadds r0, r3\n"
- "\tldr r1, _08039768\n"
- "\tadds r2, r4, 0\n"
- "\tadds r3, r5, 0\n"
- "\tbl ExpandPlaceholdersBuffer\n"
- "\tb _0803977C\n"
- "\t.align 2, 0\n"
-"_0803974C: .4byte gUnknown_80E780C\n"
-"_08039750: .4byte gUnknown_203B374\n"
-"_08039754: .4byte gPlayTimeRef\n"
-"_08039758: .4byte gUnknown_80E7838\n"
-"_0803975C: .4byte gUnknown_80E7848\n"
-"_08039760: .4byte 0x000f1207\n"
-"_08039764: .4byte gUnknown_203B484\n"
-"_08039768: .4byte gUnknown_80E784C\n"
-"_0803976C:\n"
- "\tldr r0, _080397AC\n"
- "\tldr r0, [r0]\n"
- "\tmovs r1, 0x96\n"
- "\tlsls r1, 2\n"
- "\tadds r0, r1\n"
- "\tldr r1, _080397B0\n"
- "\tbl ExpandPlaceholdersBuffer\n"
-"_0803977C:\n"
- "\tldr r0, _080397AC\n"
- "\tldr r2, [r0]\n"
- "\tmovs r3, 0x96\n"
- "\tlsls r3, 2\n"
- "\tadds r2, r3\n"
- "\tmovs r0, 0\n"
- "\tstr r0, [sp]\n"
- "\tmovs r0, 0x40\n"
- "\tmovs r1, 0x3C\n"
- "\tmovs r3, 0\n"
- "\tbl xxx_call_draw_string\n"
- "\tbl sub_80397B4\n"
- "\tmovs r0, 0\n"
- "\tbl sub_80073E0\n"
- "\tadd sp, 0x150\n"
- "\tpop {r3}\n"
- "\tmov r8, r3\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"_080397AC: .4byte gUnknown_203B374\n"
-"_080397B0: .4byte gUnknown_80E7854");
-}
-#endif
// Think structure of clmkFile is like Team Rank Badges except each pic has a diff pallete
// TODO clean up but it matches so yea
@@ -679,7 +347,7 @@ void sub_80397B4(void)
int iVar4;
s32 other_arg;
- clmkFile = OpenFileAndGetFileDataPtr(gUnknown_80E785C,&gTitleMenuFileArchive); // clmkpat
+ clmkFile = OpenFileAndGetFileDataPtr(gClmkpatFileName,&gTitleMenuFileArchive); // clmkpat
for(iVar3 = 0; iVar3 < 64; iVar3++)
{
@@ -688,6 +356,8 @@ void sub_80397B4(void)
iVar4 = 8;
other_arg = 0x49;
+
+ // Draw the 12 legendary icons
for(iVar3 = 0; iVar3 < 12; iVar3++)
{
if (sub_80023E4(gUnknown_203B3B8[iVar3]) != 0) {
diff --git a/src/mailbox.c b/src/mailbox.c
new file mode 100644
index 0000000..d7301db
--- /dev/null
+++ b/src/mailbox.c
@@ -0,0 +1,186 @@
+#include "global.h"
+#include "memory.h"
+#include "text.h"
+#include "menu.h"
+#include "input.h"
+#include "mailbox.h"
+
+
+extern void sub_802E4B0(void);
+extern void nullsub_133(void);
+extern void sub_802E578(void);
+extern void sub_802E60C(void);
+extern void sub_802E73C(void);
+extern void sub_802E758(void);
+extern void sub_802E774(void);
+extern void sub_802E7D0(void);
+
+
+extern void sub_802E0A0(void);
+extern void sub_802E1AC(void);
+
+extern struct UnkTextStruct2 gUnknown_80E0284;
+extern struct UnkTextStruct2 gUnknown_80E029C;
+extern struct UnkTextStruct2 gUnknown_80E02B4;
+extern struct UnkTextStruct2 gUnknown_80E02CC;
+
+
+extern struct unkStruct_203B304 *gUnknown_203B304;
+extern void sub_802E088(u32);
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
+extern void CreateMailboxMenu(void);
+extern void CreateMailActionMenu(void);
+
+extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32);
+extern void sub_802BD14(u32, u32, u32);
+extern void sub_802BE94(u32);
+extern void CreateMailMenu(void);
+extern void CreateMailAcceptedStatusBox(u32);
+extern u32 sub_8095FE8(u32);
+extern void sub_803B35C(u32, u32 *);
+extern void sub_802DE84(u32 *);
+extern void sub_802C860(u32);
+extern void sub_802B640(u32, u32, u32);
+extern void sub_802B7D0(u32);
+extern void sub_802B9FC(u8);
+
+u32 sub_802DFB0(void)
+{
+ gUnknown_203B304 = MemoryAlloc(sizeof(struct unkStruct_203B304), 8);
+ gUnknown_203B304->unk64 = 0;
+ gUnknown_203B304->unk68 = 0;
+ SetMailboxState(0);
+ return 1;
+}
+
+u32 sub_802DFD8(void)
+{
+ switch(gUnknown_203B304->state)
+ {
+ case 0:
+ SetMailboxState(1);
+ break;
+ case 1:
+ sub_802E4B0();
+ break;
+ case 2:
+ nullsub_133();
+ break;
+ case 4:
+ case 5:
+ sub_802E578();
+ break;
+ case 6:
+ sub_802E60C();
+ break;
+ case 7:
+ sub_802E73C();
+ break;
+ case 8:
+ sub_802E758();
+ break;
+ case 9:
+ case 0xA:
+ sub_802E774();
+ break;
+ case 0xB:
+ sub_802E7D0();
+ break;
+ case 3:
+ default:
+ return 3;
+ }
+ return 0;
+}
+
+void sub_802E06C(void)
+{
+ if(gUnknown_203B304 != NULL)
+ {
+ MemoryFree(gUnknown_203B304);
+ gUnknown_203B304 = NULL;
+ }
+}
+
+void SetMailboxState(u32 newState)
+{
+ gUnknown_203B304->state = newState;
+ sub_802E0A0();
+ sub_802E1AC();
+}
+
+void sub_802E0A0(void)
+{
+ s32 iVar1;
+ sub_8006518(gUnknown_203B304->unk10C);
+ switch(gUnknown_203B304->state)
+ {
+ case 1:
+ for(iVar1 = 0; iVar1 < 4; iVar1++)
+ {
+ gUnknown_203B304->unk10C[iVar1] = gUnknown_80E0284;
+ }
+ CreateMailboxMenu();
+ gUnknown_203B304->unk10C[2] = gUnknown_80E029C;
+ sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC);
+ break;
+ case 6:
+ CreateMailActionMenu();
+ gUnknown_203B304->unk10C[2] = gUnknown_80E02B4;
+ sub_8012CAC(&gUnknown_203B304->unk10C[2], gUnknown_203B304->unkBC);
+ gUnknown_203B304->unk10C[2].unk0c = 6;
+ gUnknown_203B304->unk10C[3] = gUnknown_80E02CC;
+ break;
+ default:
+ for(iVar1 = 0; iVar1 < 4; iVar1++)
+ {
+ gUnknown_203B304->unk10C[iVar1] = gUnknown_80E0284;
+ }
+ break;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B304->unk10C, 1, 1);
+}
+
+void sub_802E1AC(void)
+{
+ switch(gUnknown_203B304->state)
+ {
+ case 1:
+ sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, gUnknown_203B304->unkFC, gUnknown_203B304->unk64, 2);
+ break;
+ case 4:
+ sub_802BD14(0, 0, 4);
+ break;
+ case 5:
+ sub_802BE94(1);
+ break;
+ case 6:
+ CreateMailMenu();
+ CreateMailAcceptedStatusBox(3);
+ sub_8012D60(&gUnknown_203B304->unk6C, gUnknown_203B304->unkBC, 0, 0, gUnknown_203B304->unk68, 2);
+ break;
+ case 7:
+ sub_803B35C(sub_8095FE8(gUnknown_203B304->unk8), &gUnknown_203B304->unkC);
+ gUnknown_203B304->unkC = 3;
+ gUnknown_203B304->unk50 = 0;
+ sub_802DE84(&gUnknown_203B304->unkC);
+ break;
+ case 8:
+ sub_802C860(0);
+ break;
+ case 9:
+ sub_802B640(0, 0, 8);
+ break;
+ case 0xA:
+ sub_802B7D0(1);
+ break;
+ case 0xB:
+ sub_802B9FC(gUnknown_203B304->unk9);
+ break;
+ case 0:
+ case 2:
+ case 3:
+ break;
+ }
+}
diff --git a/src/mailbox_1.c b/src/mailbox_1.c
new file mode 100644
index 0000000..ee212ae
--- /dev/null
+++ b/src/mailbox_1.c
@@ -0,0 +1,104 @@
+#include "global.h"
+#include "memory.h"
+#include "text.h"
+#include "menu.h"
+#include "input.h"
+#include "mailbox.h"
+
+extern u8 gMailAccepted[];
+extern u8 gUnknown_80E0324[];
+extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32);
+extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32);
+extern u32 sub_80969AC(void);
+extern void sub_8008C54(u32);
+extern void sub_80073B8(u32);
+extern void sub_80073E0(u32);
+extern u32 sub_802BA8C(void);
+extern void sub_802BACC(void);
+extern u8 sub_802B7A8(void);
+extern void sub_802B81C(void);
+extern u32 sub_802B720(u32);
+extern u32 sub_802C898(void);
+extern void sub_802C8F4(void);
+extern u32 sub_802DEE0(void);
+extern void sub_802DF24(void);
+
+extern struct unkStruct_203B304 *gUnknown_203B304;
+
+
+void sub_802E73C(void)
+{
+ switch(sub_802DEE0())
+ {
+ case 2:
+ case 3:
+ sub_802DF24();
+ SetMailboxState(5);
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_802E758(void)
+{
+ switch(sub_802C898())
+ {
+ case 2:
+ case 3:
+ sub_802C8F4();
+ SetMailboxState(1);
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_802E774(void)
+{
+ switch(sub_802B720(1))
+ {
+ case 0:
+ case 1:
+ break;
+ case 3:
+ case 4:
+ gUnknown_203B304->unk9 = sub_802B7A8();
+ gUnknown_203B304->unk4 = 0xA;
+ SetMailboxState(0xB);
+ break;
+ case 2:
+ sub_802B81C();
+ SetMailboxState(0x1);
+ break;
+ }
+}
+
+void sub_802E7D0(void)
+{
+ switch(sub_802BA8C())
+ {
+ case 2:
+ case 3:
+ sub_802BACC();
+ SetMailboxState(gUnknown_203B304->unk4);
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void nullsub_133(void)
+{
+}
+
+void CreateMailAcceptedStatusBox(u32 r0)
+{
+ sub_8008C54(r0);
+ sub_80073B8(r0);
+ xxx_call_draw_string(3, 0, gMailAccepted, r0, 0);
+ sub_8012BC4(0x12, 0xD, sub_80969AC(), 2, 7, r0);
+ xxx_call_draw_string(0x16, 0xD, gUnknown_80E0324, r0, 0);
+ sub_8012BC4(0x23, 0xD, 0x8, 0x2, 7, r0);
+ sub_80073E0(r0);
+}
diff --git a/src/pelipper_board.c b/src/pelipper_board.c
new file mode 100644
index 0000000..41bb023
--- /dev/null
+++ b/src/pelipper_board.c
@@ -0,0 +1,184 @@
+#include "global.h"
+#include "memory.h"
+#include "text.h"
+#include "menu.h"
+#include "input.h"
+
+// Guessing based off of 203B304
+struct unkStruct_203B308
+{
+ // size: 0xB6 << 1
+ u32 state;
+ u32 unk4;
+ u8 unk8;
+ u8 fill9[0xC - 9];
+ u32 unkC;
+ u8 fill10[0x50 - 0x10];
+ u8 unk50;
+ u8 fill51[0x64 - 0x51];
+ u32 unk64;
+ u32 unk68;
+ u32 unk6C;
+ u8 fill70[0xBC - 0x70];
+ struct MenuItem unkBC[8];
+ u16 unkFC[8];
+ struct UnkTextStruct2 unk10C[4];
+};
+extern struct unkStruct_203B308 *gUnknown_203B308;
+extern void SetPelipperBoardState(u32);
+extern struct UnkTextStruct2 gUnknown_80E0330;
+extern struct UnkTextStruct2 gUnknown_80E0348;
+extern struct UnkTextStruct2 gUnknown_80E0360;
+extern struct UnkTextStruct2 gUnknown_80E0378;
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
+extern void sub_802ECB4(void);
+extern void nullsub_134(void);
+extern void sub_802ED4C(void);
+extern void sub_802EDBC(void);
+extern void sub_802EEA0(void);
+extern void sub_802EEBC(void);
+extern void sub_802E94C(void);
+extern void sub_802EA58(void);
+extern void CreatePelipperBoardMenu(void);
+extern void sub_802EC10(void);
+
+extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32);
+extern void sub_802C10C(u32, u32, u32);
+extern void sub_802C28C(u32);
+extern void sub_802C39C(void);
+extern void CreatePelipperAcceptedStatusBox(u32);
+extern u32 sub_8096574(u32);
+extern void sub_803B35C(u32, u32 *);
+extern void sub_802DE84(u32 *);
+extern void sub_802C860(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);
+ return 1;
+}
+
+u32 sub_802E890(void)
+{
+ switch(gUnknown_203B308->state)
+ {
+ case 0:
+ SetPelipperBoardState(1);
+ break;
+ case 1:
+ sub_802ECB4();
+ break;
+ case 2:
+ nullsub_134();
+ break;
+ case 4:
+ case 5:
+ sub_802ED4C();
+ break;
+ case 6:
+ sub_802EDBC();
+ break;
+ case 7:
+ sub_802EEA0();
+ break;
+ case 8:
+ sub_802EEBC();
+ break;
+ case 3:
+ default:
+ return 3;
+ }
+ return 0;
+}
+
+u32 sub_802E90C(void)
+{
+ return gUnknown_203B308->unk4;
+}
+
+void sub_802E918(void)
+{
+ if(gUnknown_203B308 != NULL)
+ {
+ MemoryFree(gUnknown_203B308);
+ gUnknown_203B308 = NULL;
+ }
+}
+
+void SetPelipperBoardState(u32 newState)
+{
+ gUnknown_203B308->state = newState;
+ sub_802E94C();
+ sub_802EA58();
+}
+
+void sub_802E94C(void)
+{
+ s32 iVar1;
+ sub_8006518(gUnknown_203B308->unk10C);
+ switch(gUnknown_203B308->state)
+ {
+ case 1:
+ for(iVar1 = 0; iVar1 < 4; iVar1++)
+ {
+ gUnknown_203B308->unk10C[iVar1] = gUnknown_80E0330;
+ }
+ CreatePelipperBoardMenu();
+ gUnknown_203B308->unk10C[2] = gUnknown_80E0348;
+ sub_8012CAC(&gUnknown_203B308->unk10C[2], gUnknown_203B308->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].unk0c = 6;
+ gUnknown_203B308->unk10C[3] = gUnknown_80E0378;
+ break;
+ default:
+ for(iVar1 = 0; iVar1 < 4; iVar1++)
+ {
+ gUnknown_203B308->unk10C[iVar1] = gUnknown_80E0330;
+ }
+ break;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B308->unk10C, 1, 1);
+}
+
+void sub_802EA58(void)
+{
+ switch(gUnknown_203B308->state)
+ {
+ case 1:
+ sub_8012D60(&gUnknown_203B308->unk6C, gUnknown_203B308->unkBC, 0, gUnknown_203B308->unkFC, gUnknown_203B308->unk64, 2);
+ break;
+ case 4:
+ sub_802C10C(0, 0, 4);
+ break;
+ case 5:
+ sub_802C28C(1);
+ break;
+ case 6:
+ sub_802C39C();
+ CreatePelipperAcceptedStatusBox(3);
+ sub_8012D60(&gUnknown_203B308->unk6C, gUnknown_203B308->unkBC, 0, 0, gUnknown_203B308->unk68, 2);
+ break;
+ case 7:
+ sub_803B35C(sub_8096574(gUnknown_203B308->unk8), &gUnknown_203B308->unkC);
+ gUnknown_203B308->unkC = 3;
+ gUnknown_203B308->unk50 = 0;
+ sub_802DE84(&gUnknown_203B308->unkC);
+ break;
+ case 8:
+ sub_802C860(0);
+ break;
+ case 0:
+ case 2:
+ case 3:
+ break;
+ }
+}
diff --git a/src/pelipper_board_1.c b/src/pelipper_board_1.c
new file mode 100644
index 0000000..b8fabd0
--- /dev/null
+++ b/src/pelipper_board_1.c
@@ -0,0 +1,60 @@
+#include "global.h"
+
+extern u8 gUnknown_80E03AC[];
+extern u8 gUnknown_80E03B8[];
+extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32);
+extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32);
+extern u32 sub_80969AC(void);
+extern void sub_8008C54(u32);
+extern void sub_80073B8(u32);
+extern void sub_80073E0(u32);
+extern u32 sub_802C898(void);
+extern void sub_802C8F4(void);
+extern void SetPelipperBoardState(u32);
+extern u32 sub_802DEE0(void);
+extern void sub_802DF24(void);
+
+
+void sub_802EEA0(void)
+{
+ switch(sub_802DEE0())
+ {
+ case 2:
+ case 3:
+ sub_802DF24();
+ SetPelipperBoardState(5);
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_802EEBC(void)
+{
+ switch(sub_802C898())
+ {
+ case 2:
+ case 3:
+ sub_802C8F4();
+ SetPelipperBoardState(1);
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+
+void nullsub_134(void)
+{
+}
+
+void CreatePelipperAcceptedStatusBox(u32 r0)
+{
+ sub_8008C54(r0);
+ sub_80073B8(r0);
+ xxx_call_draw_string(3, 0, gUnknown_80E03AC, r0, 0);
+ sub_8012BC4(0x12, 0xD, sub_80969AC(), 2, 7, r0);
+ xxx_call_draw_string(0x16, 0xD, gUnknown_80E03B8, r0, 0);
+ sub_8012BC4(0x23, 0xD, 0x8, 0x2, 7, r0);
+ sub_80073E0(r0);
+}
diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c
index 0af12d0..2c875ef 100644
--- a/src/pokemon_mid.c
+++ b/src/pokemon_mid.c
@@ -198,7 +198,7 @@ bool8 IsPokemonRenamed(struct PokemonStruct* pokemon) {
char* species = GetMonSpecies(pokemon->speciesNum);
s32 i;
CopyStringtoBuffer(species_name, species);
- for (i = 0; i < 10; i++) {
+ for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
if (pokemon->name[i] != species_name[i]) {
return FALSE;
}
@@ -216,7 +216,7 @@ bool8 ComparePokemonNames(s16 a1, s16 a2) {
u8* name2 = gRecruitedPokemonRef->pokemon[index2].name;
s32 i;
- for (i = 0; i < 10; i++) {
+ for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
s32 c1 = ReturnIntFromChar(*name1);
s32 c2 = ReturnIntFromChar(*name2);
if (c1 > c2) {
@@ -544,7 +544,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po
a1->unk18 = pokemon->unk1C;
sub_8093F50(&a1->unk1C, &pokemon->unk2C);
- for (i = 0; i < 10; i++) {
+ for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
a1->name[i] = pokemon->name[i];
}
@@ -595,7 +595,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct
pokemon->unk1C = a2->unk18;
sub_8093FA8(pokemon->unk2C, a2->unk1C);
- for (i = 0; i < 10; i++) {
+ for (i = 0; i < POKEMON_NAME_LENGTH; i++) {
pokemon->name[i] = a2->name[i];
}
diff --git a/src/post_office_guide.c b/src/post_office_guide.c
index 063d0fa..9c96472 100644
--- a/src/post_office_guide.c
+++ b/src/post_office_guide.c
@@ -20,7 +20,7 @@ struct PostOfficeHelper
u8 unk16;
};
-extern struct PostOfficeHelper *gPostOfficeHelper;
+EWRAM_DATA struct PostOfficeHelper *gPostOfficeHelper;
struct unkStruct_203B330
@@ -35,7 +35,7 @@ struct unkStruct_203B330
struct UnkTextStruct2 *unk14;
struct UnkTextStruct2 unk18[4];
};
-extern struct unkStruct_203B330 *gUnknown_203B330;
+EWRAM_DATA struct unkStruct_203B330 *gUnknown_203B330;
extern const char DeletingMailInfo_Text[];
diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c
index ccae32c..9de46ad 100644
--- a/src/rescue_team_info.c
+++ b/src/rescue_team_info.c
@@ -42,7 +42,7 @@ struct RescueTeamData *GetRescueTeamInfo(void)
return &gRescueTeamInfo;
}
-void InitializeResuceTeamInfo(void)
+void InitializeRescueTeamInfo(void)
{
BoundedCopyStringtoBuffer(gRescueTeamInfoRef->teamName, gTeamNamePlaceholder, TEAM_NAME_LENGTH);
gRescueTeamInfoRef->teamRankPts = 0;
diff --git a/src/save.c b/src/save.c
index cef5b27..bdc3d3a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -8,6 +8,11 @@
#include "save.h"
#include "exclusive_pokemon.h"
+
+EWRAM_DATA u32 gUnknown_203B17C;
+EWRAM_DATA char *gUnknown_203B180;
+EWRAM_DATA struct UnkStruct_203B184 *gUnknown_203B184;
+
struct unk_struct
{
// size: 0x800
@@ -26,7 +31,7 @@ struct SavePakRead
u32 readStatus;
};
-extern struct SavePakRead *gSavePakRead;
+EWRAM_DATA struct SavePakRead *gSavePakRead;
struct SavePakWrite
{
@@ -44,7 +49,7 @@ struct SavePakWrite
u16 pokeID;
};
-extern struct SavePakWrite *gSavePakWrite;
+EWRAM_DATA struct SavePakWrite *gSavePakWrite;
struct QuickSaveRead
{
@@ -53,7 +58,7 @@ struct QuickSaveRead
u32 size;
bool8 saveValid;
};
-extern struct QuickSaveRead *gQuickSaveRead;
+EWRAM_DATA struct QuickSaveRead *gQuickSaveRead;
struct QuickSaveWrite
{
@@ -63,12 +68,10 @@ struct QuickSaveWrite
u8 unkC;
u32 quickSaveStatus;
};
-extern struct QuickSaveWrite *gQuickSaveWrite;
+EWRAM_DATA struct QuickSaveWrite *gQuickSaveWrite;
extern s32 gUnknown_202DE28;
-extern u32 gUnknown_203B17C;
-extern char *gUnknown_203B180;
extern struct unkStruct_203B45C *gRecruitedPokemonRef;
extern struct TeamInventory *gTeamInventory_203B460;
extern struct RescueTeamData *gRescueTeamInfoRef;
@@ -141,7 +144,6 @@ ALIGNED(4) const char gSaveNotWritten2[] = _("{CENTER_ALIGN}The data could not b
ALIGNED(4) const char gSaveFailed2[] = _("{CENTER_ALIGN}Save failed.");
ALIGNED(4) const char fill_save7[] = _("pksdir0");
-extern volatile struct UnkStruct_203B184 *gUnknown_203B184;
extern bool8 sub_800DAB0(u16, u8*, s32);
extern bool8 sub_800DAB4(u16, u8*, s32);
@@ -601,7 +603,7 @@ void InitializePlayerData(void)
InitializeFriendAreas();
InitializeRecruitedPokemon();
InitializeMoneyItems();
- InitializeResuceTeamInfo();
+ InitializeRescueTeamInfo();
sub_80972F4();
sub_8095118();
sub_8095900();
diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c
index cca9794..285c0d0 100644
--- a/src/wonder_mail_2.c
+++ b/src/wonder_mail_2.c
@@ -72,7 +72,7 @@ extern void sub_802B8D4(void);
extern void sub_8013818(void *, u32, u32, u32);
extern void sub_8012D08(struct UnkTextStruct2 *, s32);
extern void sub_8013984(u32 *);
-extern u8 sub_802B9D8(void);
+extern u8 HasNoPKMNNews(void);
extern u16 gUnknown_203B2D0;
extern u16 gUnknown_203B2D2;
@@ -330,10 +330,11 @@ void sub_802B624(void)
}
}
+// Start of some Pokemon News related stuff
u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2)
{
- if(sub_802B9D8())
+ if(HasNoPKMNNews())
{
return 0;
}
diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c
index 87166b9..84c0d25 100644
--- a/src/wonder_mail_main_menu.c
+++ b/src/wonder_mail_main_menu.c
@@ -5,7 +5,9 @@
#include "input.h"
#include "sub_8095228.h"
#include "wonder_mail.h"
+#include "menu.h"
+#define SELECT_WONDER_MAIL_MODE_MAIN_SCREEN 0
#define SEND_WONDER_MAIL_MAIN_SCREEN 1
#define SEND_GAME_LINK_CABLE 2
#define RECEIVE_WONDER_MAIL_MAIN_SCREEN 4
@@ -22,6 +24,120 @@
#define PASSWORD_INVALID 19
#define PASSWORD_ENTRY_SCREEN 18
+extern const char Cancel_80E7D24[];
+extern const char Cancel_80E78B4[];
+extern const char Yes_80E7D2C[];
+extern const char Yes_80E7910[];
+extern const char GameLinkCable_80E78C8[];
+extern const char Password_80E78BC[];
+
+extern const char Receive_80E7884[];
+extern const char Send_80E788C[];
+
+const struct MenuItem gSelectWonderMailModeMainMenuItems[3] =
+{
+ {Send_80E788C, WONDER_MAIL_MODE_SEND},
+ {Receive_80E7884, WONDER_MAIL_MODE_RECEIVE},
+ {NULL, 0}
+};
+
+ALIGNED(4) const char Receive_80E7884[] = "Receive";
+ALIGNED(4) const char Send_80E788C[] = "Send";
+
+
+const struct MenuItem gSendWonderMailMainMenuItems[4] =
+{
+ {GameLinkCable_80E78C8, WONDER_MAIL_GAME_LINK},
+ {Password_80E78BC, -1},
+ {Cancel_80E78B4, 8},
+ {NULL, 0}
+
+};
+
+ALIGNED(4) const char Cancel_80E78B4[] = "Cancel";
+ALIGNED(4) const char Password_80E78BC[] = "Password";
+ALIGNED(4) const char GameLinkCable_80E78C8[] = "Game Link cable";
+
+const struct MenuItem gReceiveWonderMailMainMenuItems[4] =
+{
+ {GameLinkCable_80E78C8, WONDER_MAIL_GAME_LINK},
+ {Password_80E78BC, WONDER_MAIL_PASSWORD},
+ {Cancel_80E78B4, 8},
+ {NULL, 0}
+};
+
+const struct MenuItem gUnknown_80E78F8[3] =
+{
+ {Yes_80E7910, 6},
+ {Cancel_80E78B4, 0},
+ {NULL, 0}
+};
+
+ALIGNED(4) const char Yes_80E7910[] = "Yes";
+
+ALIGNED(4) const char gUnknown_80E7914[] = "There was a communication error.";
+
+ALIGNED(4) const char gUnknown_80E7938[] = "An incorrect number of GBA systems are\n"
+ "connected.\n"
+ "Please redo this process from the start.";
+
+ALIGNED(4) const char gUnknown_80E7994[] = "There is no response from your friend.\n"
+ "Please redo this process from the start.";
+
+ALIGNED(4) const char gUnknown_80E79E4[] = "The sender and receiver appear to be\n"
+ "in different modes.\n"
+ "Please redo the process from the start.";
+
+ALIGNED(4) const char gUnknown_80E7A48[] = "There is no response from your friend.\n"
+ "Please make sure the sender and receiver\n"
+ "are ready~2c then redo this from the start.";
+
+ALIGNED(4) const char gUnknown_80E7AC4[] = "What would you like to do?";
+
+ALIGNED(4) const char gUnknown_80E7AE0[] = "How would you like to send your\n"
+ "#CGWonder Mail#R?";
+
+ALIGNED(4) const char gUnknown_80E7B14[] = "How would you like to receive the\n"
+ "#CGWonder Mail#R?";
+
+ALIGNED(4) const char gUnknown_80E7B48[] = "Your adventure will be saved.";
+
+ALIGNED(4) const char gUnknown_80E7B68[] = "Your #CGWonder Mail#R was sent.";
+
+ALIGNED(4) const char gUnknown_80E7B88[] = "The received #CGWonder Mail#R was\n"
+ "added to the #CGJob List#R.";
+
+ALIGNED(4) const char gUnknown_80E7BC8[] = "The #CGWonder Mail#R was refused.";
+
+ALIGNED(4) const char gUnknown_80E7BEC[] = _("Connect a #CGGame Link cable#R.\n"
+ "When you and your friend are ready~2c\n"
+ "you may communicate. ");
+
+ALIGNED(4) const char gUnknown_80E7C48[] = _("#+In communication...\n"
+ "#+Please wait with the power on.\n"
+ "#+To cancel~2c press {B_BUTTON}.");
+
+ALIGNED(4) const char gUnknown_80E7C98[] = "Please enter the\n"
+ "#CGWonder Mail password#R.";
+
+ALIGNED(4) const char gUnknown_80E7CC4[] = "This password is incorrect.\n"
+ "Would you like to enter it again?";
+
+ALIGNED(4) const char wonder_mail_main_fill0[] = "pksdir0";
+
+const struct MenuItem WonderMailMainUnused[3] =
+{
+ {Yes_80E7D2C, 1},
+ {Cancel_80E7D24, 0},
+ {NULL, 0},
+};
+
+ALIGNED(4) const char Cancel_80E7D24[] = "Cancel";
+ALIGNED(4) const char Yes_80E7D2C[] = "Yes";
+
+ALIGNED(4) const char wonder_mail_main_fill1[] = "pksdir0";
+ALIGNED(4) const char wonder_mail_main_fill2[] = "pksdir0";
+
struct unkStruct_803B344
{
@@ -64,10 +180,11 @@ struct unkStruct_203B3E8
u8 unk498;
};
+EWRAM_DATA struct unkStruct_203B3E8 *gUnknown_203B3E8;
+
extern u32 sub_8095324(u32);
extern u32 sub_80144A4(s32 *);
extern u32 sub_8011C1C(void);
-extern struct unkStruct_203B3E8 *gUnknown_203B3E8;
extern void SetWonderMailMainMenuState(u8);
extern void sub_8030DE4(void);
extern void sub_801B450(void);
@@ -82,7 +199,7 @@ extern s32 sub_80381F4(u32, void *, void *);
extern void sub_8011830(void);
extern void sub_80151C0(u32, u8 *);
extern void xxx_call_start_bg_music(void);
-extern void sub_8014248(u8 *, u32, u32, u8 *, u32, u32, u32, u32, u32);
+extern void sub_8014248(const char *, u32, u32, const struct MenuItem *, u32, u32, u32, u32, u32);
extern void nullsub_23(u32);
extern void sub_802EF48(void);
extern void sub_802D098(struct WonderMail *);
@@ -92,21 +209,6 @@ extern struct unkStruct_803B344 *sub_803B344(u8);
-extern u8 gUnknown_80E7CC4[];
-extern u8 gUnknown_80E78F8;
-extern u8 gUnknown_80E7AC4[];
-extern u8 gUnknown_80E786C;
-extern u8 gUnknown_80E7AE0[];
-extern u8 gUnknown_80E7894;
-extern u8 gUnknown_80E7C48[];
-extern u8 gUnknown_80E7B14[];
-extern u8 gUnknown_80E78D8;
-extern u8 gUnknown_80E7B68[];
-extern u8 gUnknown_80E7BEC[];
-extern u8 gUnknown_80E7BC8[];
-extern u8 gUnknown_80E7B88[];
-extern u8 gUnknown_80E7C98[];
-extern u8 gUnknown_80E7B48[];
extern s32 sub_8037B28(u32);
extern u32 sub_802D0E0();
@@ -116,7 +218,7 @@ extern void sub_802D184();
extern s32 sub_80154F0();
extern bool8 DecodeWonderMailPassword(u8 *, struct WonderMail *);
extern bool8 IsValidWonderMail(struct WonderMail *WonderMailData);
-extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32);
+extern void sub_80141B4(const char *r0, u32, u32 *r1, u32);
void PrintWonderMailMainMenuError(u32);
void HandleWonderMailMainScreen(void);
@@ -135,12 +237,6 @@ void HandlePasswordEntryScreen(void);
void HandleInvalidPasswordMenu(void);
-extern u8 gUnknown_80E7914[];
-extern u8 gUnknown_80E7938[];
-extern u8 gUnknown_80E7994[];
-extern u8 gUnknown_80E79E4[];
-extern u8 gUnknown_80E7A48[];
-
bool8 sub_8039880(void)
{
return (sub_8095324(1) != 0 || sub_8095324(7) != 0 || sub_8011C1C() == 2);
@@ -504,11 +600,11 @@ void WonderMailMainMenuCallback(void)
struct unkStruct_803B344 *temp;
switch(gUnknown_203B3E8->state) {
- case 0:
- sub_8014248(gUnknown_80E7AC4,0,1,&gUnknown_80E786C,0,4,0,0,0x101);
+ case SELECT_WONDER_MAIL_MODE_MAIN_SCREEN:
+ sub_8014248(gUnknown_80E7AC4,0,1,gSelectWonderMailModeMainMenuItems,0,4,0,0,0x101);
break;
case SEND_WONDER_MAIL_MAIN_SCREEN:
- sub_8014248(gUnknown_80E7AE0,0,3,&gUnknown_80E7894,0,4,0,0,0x101);
+ sub_8014248(gUnknown_80E7AE0,0,3,gSendWonderMailMainMenuItems,0,4,0,0,0x101);
break;
case 3:
ResetUnusedInputStruct();
@@ -516,7 +612,7 @@ void WonderMailMainMenuCallback(void)
sub_802EF48();
break;
case RECEIVE_WONDER_MAIL_MAIN_SCREEN:
- sub_8014248(gUnknown_80E7B14,0,3,&gUnknown_80E78D8,0,4,0,0,0x101);
+ sub_8014248(gUnknown_80E7B14,0,3,gReceiveWonderMailMainMenuItems,0,4,0,0,0x101);
break;
case PASSWORD_SUCCESS:
gUnknown_203B3E8->unk474 = gUnknown_203B3E8->unk3C0.unk0;
@@ -561,7 +657,7 @@ void WonderMailMainMenuCallback(void)
}
break;
case GAME_LINK_CABLE_MENU:
- sub_8014248(gUnknown_80E7BEC,0,6,&gUnknown_80E78F8,0,4,0,0,0x101);
+ sub_8014248(gUnknown_80E7BEC,0,6,gUnknown_80E78F8,0,4,0,0,0x101);
break;
case 6:
nullsub_23(0);
@@ -620,7 +716,7 @@ void WonderMailMainMenuCallback(void)
sub_80151C0(5,gUnknown_203B3E8->PasswordEntryBuffer);
break;
case PASSWORD_INVALID:
- sub_8014248(gUnknown_80E7CC4,0,6,&gUnknown_80E78F8,0,4,0,0,0x101);
+ sub_8014248(gUnknown_80E7CC4,0,6,gUnknown_80E78F8,0,4,0,0,0x101);
break;
}
}