diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bg_palette_buffer.c | 4 | ||||
-rw-r--r-- | src/code_80958E8.c | 2 | ||||
-rw-r--r-- | src/friend_area.c | 4 | ||||
-rw-r--r-- | src/input.c | 4 | ||||
-rw-r--r-- | src/items.c | 12 | ||||
-rw-r--r-- | src/load_screen.c | 602 | ||||
-rw-r--r-- | src/mailbox.c | 186 | ||||
-rw-r--r-- | src/mailbox_1.c | 104 | ||||
-rw-r--r-- | src/pelipper_board.c | 184 | ||||
-rw-r--r-- | src/pelipper_board_1.c | 60 | ||||
-rw-r--r-- | src/pokemon_mid.c | 8 | ||||
-rw-r--r-- | src/post_office_guide.c | 4 | ||||
-rw-r--r-- | src/rescue_team_info.c | 2 | ||||
-rw-r--r-- | src/save.c | 18 | ||||
-rw-r--r-- | src/wonder_mail_2.c | 5 | ||||
-rw-r--r-- | src/wonder_mail_main_menu.c | 156 |
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; @@ -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; } } |