diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_2.c | 11 | ||||
-rw-r--r-- | src/code_80521D0_1.c | 2 | ||||
-rw-r--r-- | src/code_8057824_1.c | 8 | ||||
-rw-r--r-- | src/code_80848F0.c | 421 | ||||
-rw-r--r-- | src/main_menu.c | 497 | ||||
-rw-r--r-- | src/main_menu_1.c | 216 | ||||
-rw-r--r-- | src/memory_mid.c | 6 | ||||
-rw-r--r-- | src/personality_test.c | 6 | ||||
-rw-r--r-- | src/thank_you_wonder_mail.c | 26 | ||||
-rw-r--r-- | src/wonder_mail.c | 649 | ||||
-rw-r--r-- | src/wonder_mail_2.c | 38 | ||||
-rw-r--r-- | src/wonder_mail_3.c | 192 | ||||
-rw-r--r-- | src/wonder_mail_3_mid.c | 772 | ||||
-rw-r--r-- | src/wonder_mail_4.c | 137 | ||||
-rw-r--r-- | src/wonder_mail_pre.c | 305 |
15 files changed, 2669 insertions, 617 deletions
diff --git a/src/code_2.c b/src/code_2.c index 9ed43f9..c26b20b 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -6,6 +6,7 @@ #include "friend_area.h" #include "input.h" #include "memory.h" +#include "main_menu.h" #include "music.h" #include "play_time.h" #include "save.h" @@ -41,12 +42,6 @@ extern void sub_800CDA8(u32); extern void LoadTitleScreen(void); extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *); extern void sub_80095CC(u32, u32); -extern void InitMainMenu(void); -extern bool8 sub_80363E0(void); -extern void SetUpMenu(void); -extern u32 UpdateMenu(void); -extern void CleanUpMenu(void); -extern void DeleteMainMenu(void); extern s32 sub_80953D4(u32); extern void sub_8095240(u8); extern void nullsub_33(void); @@ -168,7 +163,7 @@ void GameLoop(void) CleanUpMenu(); if (nextMenu == 2) break; if (nextMenu == 4) break; - if (nextMenu == 3) break; + if (nextMenu == MENU_NEW_GAME) break; } DeleteMainMenu(); while (gUnknown_2000A80 > 0) { @@ -193,7 +188,7 @@ void GameLoop(void) case 4: tmp3 = sub_80009D0(3); break; - case 3: + case MENU_NEW_GAME: sub_80122A8(); nullsub_33(); tmp3 = sub_80009D0(0); diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c index ecb0ec1..fa1c79e 100644 --- a/src/code_80521D0_1.c +++ b/src/code_80521D0_1.c @@ -659,7 +659,7 @@ void sub_808C5C0(void) } // Dummy Celebi Fight Dialogue?? -void nullsub_100(void) +void nullsub_100(u32 r0, u32 r1, u32 r2) { } diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index d88918f..ec518d7 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -259,7 +259,7 @@ extern struct DungeonEntity *sub_8083600(); extern void sub_80421C0(struct DungeonEntity *, u32); extern void sub_8046D20(); extern void sub_808B1CC(u8); -extern void sub_80464C8(struct DungeonEntity *, u32, struct ItemSlot *); +extern void sub_80464C8(struct DungeonEntity *, u32 *, struct ItemSlot *); extern void sub_8098044(u32); extern void PlaySoundEffect(u32); extern void sub_8085C54(u32, u32, u32, u32, u32); @@ -3092,7 +3092,7 @@ void sub_808ADCC(void) } } -void sub_808AE54(char param_1,char param_2,u32 param_3) +void sub_808AE54(char param_1,char param_2,u32 *param_3) { struct DungeonEntity * uVar3; u8 auStack24 [4]; @@ -3115,7 +3115,7 @@ void sub_808AE54(char param_1,char param_2,u32 param_3) } -void sub_808AEC8(char param_1,char param_2,u32 param_3) +void sub_808AEC8(char param_1,char param_2,u32 *param_3) { struct DungeonEntity * uVar3; u8 auStack24 [4]; @@ -3137,7 +3137,7 @@ void sub_808AEC8(char param_1,char param_2,u32 param_3) } } -void sub_808AF3C(char param_1,char param_2,u32 param_3) +void sub_808AF3C(char param_1,char param_2,u32 *param_3) { struct DungeonEntity * uVar3; u8 auStack24 [4]; diff --git a/src/code_80848F0.c b/src/code_80848F0.c new file mode 100644 index 0000000..f82c4af --- /dev/null +++ b/src/code_80848F0.c @@ -0,0 +1,421 @@ +#include "global.h" +#include "dungeon_global_data.h" + +extern struct DungeonGlobalData *gDungeonGlobalData; + +extern void SkarmonyPreFightDialogue(); +extern void SkarmonyReFightDialogue(); +extern void sub_8086E40(); +extern void TeamMeaniePreFightDialogue(); +extern void TeamMeanieReFightDialogue(); +extern void sub_8087130(); +extern void ZapdosPreFightDialogue(); +extern void ZapdosReFightDialogue(); +extern void ZapdosPostStoryPreFightDialogue(); +extern void MoltresPreFightDialogue(); +extern void MoltresReFightDialogue(); +extern void MoltresPostStoryPreFightDialogue(); +extern void ArticunoPreFightDialogue(); +extern void ArticunoReFightDialogue(); +extern void ArticunoPostStoryPreFightDialogue(); +extern void sub_8088608(); +extern void sub_8088618(); +extern void GroudonPreFightDialogue(); +extern void GroudonReFightDialogue(); +extern void GroudonPostStoryPreFightDialogue(); +extern void MagmaCavernMidDialogue(); +extern void sub_8089168(); +extern void RayquazaPreFightDialogue(); +extern void RayquazaReFightDialogue(); +extern void RayquazaPostStoryPreFightDialogue(); +extern void sub_80897F0(); +extern void sub_8089878(); +extern void sub_80898E4(); +extern void MewtwoPreFightDialogue(); +extern void MewtwoPreFightDialogue1(); +extern void EnteiPreFightDialogue(); +extern void EnteiPreFightDialogue1(); +extern void EnteiPreFightDialogue2(); +extern void RaikouPreFightDialogue(); +extern void RaikouPreFightDialogue1(); +extern void RaikouPreFightDialogue2(); +extern void SuicunePreFightDialogue(); +extern void SuicunePreFightDialogue1(); +extern void SuicunePreFightDialogue2(); +extern void HoOhPreFightDialogue(); +extern void HoOhPreFightDialogue1(); +extern void LatiosPreFightDialogue(); +extern void LatiosReFightDialogue(); +extern void sub_808AC3C(); +extern void RegirockPreFightDialogue(); +extern void RegicePreFightDialogue(); +extern void RegisteelPreFightDialogue(); +extern void JirachiPreFightDialogue(); +extern void JirachiPreFightDialogue1(); +extern void LugiaPreFightDialogue(); +extern void KyogrePreFightDialogue(); +extern void DeoxysPreFightDialogue(); +extern void CelebiJoinDialogue(); +extern void sub_808C998(); +extern void MedichamRescueDialogue(); +extern void DummyFightDialogue(); +extern void SmeargleRescueDialogue(); +extern void sub_808CD9C(); +extern void sub_8085764(); +extern void sub_80857B8(); +extern void sub_8097FF8(); + +extern void sub_8086BDC(u32,u8); +extern void sub_8086F54(u32,u8); +extern void sub_8087334(u32,u8); +extern void sub_80878F4(u32,u8); +extern void sub_8088088(u32,u8); +extern void sub_8088818(u32,u8); +extern void sub_80893B4(u32,u8); +extern void sub_8089788(struct DungeonEntity *,u32,u8); +extern void sub_8089A00(u32,u8); +extern void sub_8089CFC(u32,u8); +extern void sub_8089FF0(u32,u8); +extern void sub_808A36C(u32,u8); +extern void sub_808A6E8(u32,u8); +extern void sub_808AAF0(u32,u8); +extern void sub_808AE54(u32,u8,s16 *); +extern void sub_808AEC8(u32,u8,s16 *); +extern void sub_808AF3C(u32,u8,s16 *); +extern void sub_808B3E4(u32,u8,u8); +extern void sub_808BE70(u32,u8,u8); +extern void sub_808C1A4(u32,u8,u8); +extern void sub_808C414(u32,u8,u8); +extern void nullsub_100(u32,u8,u8); +extern void sub_808C948(struct DungeonEntity *,u8); +extern void sub_8083E88(u32); + +extern void sub_808AFB0(u8); +extern void sub_808B030(u8); +extern void sub_808B0B0(u8); + + +void DisplayPreFightDialogue(void) +{ + + switch(gDungeonGlobalData->unk3A0D) { + case 0: + break; + case 1: + SkarmonyPreFightDialogue(); + break; + case 2: + SkarmonyReFightDialogue(); + break; + case 3: + sub_8086E40(); + break; + case 4: + TeamMeaniePreFightDialogue(); + break; + case 5: + TeamMeanieReFightDialogue(); + break; + case 6: + sub_8087130(); + break; + case 7: + ZapdosPreFightDialogue(); + break; + case 8: + ZapdosReFightDialogue(); + break; + case 9: + ZapdosPostStoryPreFightDialogue(); + break; + case 10: + MoltresPreFightDialogue(); + break; + case 0xb: + MoltresReFightDialogue(); + break; + case 0xc: + MoltresPostStoryPreFightDialogue(); + break; + case 0xd: + ArticunoPreFightDialogue(); + break; + case 0xe: + ArticunoReFightDialogue(); + break; + case 0xf: + ArticunoPostStoryPreFightDialogue(); + break; + case 0x10: + sub_8088608(); + break; + case 0x11: + sub_8088618(); + break; + case 0x12: + GroudonPreFightDialogue(); + break; + case 0x13: + GroudonReFightDialogue(); + break; + case 0x14: + GroudonPostStoryPreFightDialogue(); + break; + case 0x15: + MagmaCavernMidDialogue(); + break; + case 0x16: + sub_8089168(); + break; + case 0x17: + RayquazaPreFightDialogue(); + break; + case 0x18: + RayquazaReFightDialogue(); + break; + case 0x19: + RayquazaPostStoryPreFightDialogue(); + break; + case 0x1a: + sub_80897F0(); + break; + case 0x1b: + sub_8089878(); + break; + case 0x1c: + sub_80898E4(); + break; + case 0x1d: + case 0x1e: + MewtwoPreFightDialogue(); + break; + case 0x1f: + MewtwoPreFightDialogue1(); + break; + case 0x20: + EnteiPreFightDialogue(); + break; + case 0x21: + EnteiPreFightDialogue1(); + break; + case 0x22: + EnteiPreFightDialogue2(); + break; + case 0x23: + RaikouPreFightDialogue(); + break; + case 0x24: + RaikouPreFightDialogue1(); + break; + case 0x25: + RaikouPreFightDialogue2(); + break; + case 0x26: + SuicunePreFightDialogue(); + break; + case 0x27: + SuicunePreFightDialogue1(); + break; + case 0x28: + SuicunePreFightDialogue2(); + break; + case 0x29: + HoOhPreFightDialogue(); + break; + case 0x2a: + HoOhPreFightDialogue1(); + break; + case 0x2b: + LatiosPreFightDialogue(); + break; + case 0x2c: + LatiosReFightDialogue(); + break; + case 0x2d: + sub_808AC3C(); + break; + case 0x2e: + RegirockPreFightDialogue(); + break; + case 0x2f: + RegicePreFightDialogue(); + break; + case 0x30: + RegisteelPreFightDialogue(); + break; + case 0x31: + JirachiPreFightDialogue(); + break; + case 0x32: + JirachiPreFightDialogue1(); + break; + case 0x33: + LugiaPreFightDialogue(); + break; + case 0x34: + KyogrePreFightDialogue(); + break; + case 0x35: + DeoxysPreFightDialogue(); + break; + case 0x36: + CelebiJoinDialogue(); + break; + case 0x37: + sub_808C998(); + break; + case 0x38: + MedichamRescueDialogue(); + break; + case 0x39: + DummyFightDialogue(); + break; + case 0x3a: + SmeargleRescueDialogue(); + break; + case 0x3b: + sub_808CD9C(); + break; + case 0x3C: + break; + } + sub_8085764(); + sub_80857B8(); + gDungeonGlobalData->unk1356C = 0; + sub_8097FF8(); +} + +void sub_8084E00(struct DungeonEntity *param_1,char param_2,char param_3) +{ + + if (param_2 != '\0') { + switch(gDungeonGlobalData->unk3A0D) { + case 0: + break; + case 1: + case 2: + sub_8086BDC(param_2,gDungeonGlobalData->unk3A0D); + break; + case 4: + case 5: + sub_8086F54(param_2,gDungeonGlobalData->unk3A0D); + break; + case 7: + case 8: + case 9: + sub_8087334(param_2,gDungeonGlobalData->unk3A0D); + break; + case 10: + case 0xb: + case 0xc: + sub_80878F4(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0xd: + case 0xe: + case 0xf: + sub_8088088(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x12: + case 0x13: + case 0x14: + sub_8088818(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x17: + case 0x18: + case 0x19: + sub_80893B4(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x1a: + case 0x1b: + sub_8089788(param_1,param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x1d: + case 0x1e: + case 0x1f: + sub_8089A00(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x20: + case 0x21: + case 0x22: + sub_8089CFC(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x23: + case 0x24: + case 0x25: + sub_8089FF0(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x26: + case 0x27: + case 0x28: + sub_808A36C(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x29: + case 0x2a: + sub_808A6E8(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x2b: + case 0x2c: + case 0x2d: + sub_808AAF0(param_2,gDungeonGlobalData->unk3A0D); + break; + case 0x2e: + sub_808AE54(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorldX); + break; + case 0x2f: + sub_808AEC8(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorldX); + break; + case 0x30: + sub_808AF3C(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorldX); + break; + case 0x31: + case 0x32: + sub_808B3E4(param_2,gDungeonGlobalData->unk3A0D,param_3); + break; + case 0x33: + sub_808BE70(param_2,gDungeonGlobalData->unk3A0D,param_3); + break; + case 0x34: + sub_808C1A4(param_2,gDungeonGlobalData->unk3A0D,param_3); + break; + case 0x35: + sub_808C414(param_2,gDungeonGlobalData->unk3A0D,param_3); + break; + case 0x36: + nullsub_100(param_2,gDungeonGlobalData->unk3A0D,param_3); + break; + case 0x37: + sub_808C948(param_1,gDungeonGlobalData->unk3A0D); + break; + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + break; + } + if ((param_3 == '\0') && (gDungeonGlobalData->unk2 != '\0')) { + sub_8083E88(999); + } + } +} + +void sub_8085140(void) +{ + switch(gDungeonGlobalData->unk3A0D) { + // NOTE: shortcut way to generate all cases from 0 - 0x3C properly + default: + case 0: + case 1: + case 0x3C: + break; + case 0x2e: + sub_808AFB0(gDungeonGlobalData->unk3A0D); + break; + case 0x2f: + sub_808B030(gDungeonGlobalData->unk3A0D); + break; + case 0x30: + sub_808B0B0(gDungeonGlobalData->unk3A0D); + break; + } +} diff --git a/src/main_menu.c b/src/main_menu.c index cf0524a..37cd217 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -22,9 +22,6 @@ // Deletes the Save -extern struct MainMenu *gMainMenu; -void sub_8035DA0(void); - extern void sub_8094C14(void); extern void sub_8099690(u32); extern void sub_8036FDC(s32); @@ -35,7 +32,7 @@ extern void CreateWonderMailMenu(void); extern void CreateLoadScreen(u32); extern void CreateRescuePasswordMenu(u32); extern void CreateSaveMenu(u32); -extern s32 UpdateMainMenu(void); +extern u32 UpdateMainMenu(void); extern s32 UpdateLoadScreenMenu(void); extern s32 UpdateFriendRescueMenu(void); extern s32 UpdateWonderMailMenu(void); @@ -53,38 +50,261 @@ extern void CleanWirelessCommsMenu(void); extern void CleanRescuePasswordMenu(void); extern void sub_80383A8(void); extern void CleanSaveMenu(void); +extern u8 sub_8012FD8(u32 *); +extern void sub_8013114(u32 *, s32 *); +extern u8 sub_803D0D8(); +extern s32 sub_8011C34(); +extern s32 sub_8095324(u32); void CleanMainMenu(void); void DrawMainMenu(void); s32 sub_8035DB4(u32); - -struct unkSubStruct -{ - u32 unk0; - u32 unk4; -}; +void sub_803623C(void); +bool8 SetMainMenuText(); +void SetMainMenuItems(); +void sub_8035DA0(void); struct unkStruct_203B34C { // size: 0x1A8 u32 unk0; u32 unk4; - struct unkSubStruct *unk8; // Array of menu choices?? + struct MenuItem *unk8; // Array of menu choices?? u8 fillC[0x30 - 0xC]; s16 menuIndex; - u8 fill32[0x144 - 0x32]; + u8 fill32[0x54 - 0x32]; + + u32 unk54; + u8 fill58[0xA4 - 0x58]; + + u32 unkA4; + u32 unkA8; + u8 fillAC[0x144 - 0xAC]; struct UnkTextStruct2 unk144[4]; /* 0x1A4 */ u32 currMenuChoice; }; -extern struct unkStruct_203B34C *gUnknown_203B34C; +EWRAM_DATA struct MainMenu *gMainMenu; +EWRAM_DATA struct unkStruct_203B34C *gUnknown_203B34C; +EWRAM_DATA u32 gUnknown_203B350; +EWRAM_DATA u32 gUnknown_203B354; // unused everywhere else except here.. + + +extern const char NewGame_80E5A20[]; +extern const char AdventureLog_80E5A10[]; +extern const char WonderMail_80E5A54[]; +extern const char Continue_80E5AF0[]; +extern const char DeleteSaveData_80E5ADC[]; +extern const char FriendRescue_80E5ACC[]; +extern const char TradeItems_80E5AC0[]; +extern const char ReviveTeam_80E5C0C[]; +extern const char SendItems_80E5C90[]; +extern const char ReceiveItems_80E5C80[]; +extern const char AwaitingRescue_80E5B7C[]; + +const struct UnkTextStruct2 gUnknown_80E59A8 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const char main_menu_fill[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80E59C8 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80E59E0 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x0A, 0x03, + 0x03, 0x00, + NULL +}; + +const struct MenuItem gUnknown_80E59F8[] = +{ + {NewGame_80E5A20, MENU_NEW_GAME}, + {AdventureLog_80E5A10, MENU_ADVENTURE_LOG}, + {NULL, 0xffdd}, +}; + +const char AdventureLog_80E5A10[] = "Adventure Log"; +const char NewGame_80E5A20[] = "New Game"; + +const struct UnkTextStruct2 gUnknown_80E5A29 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x0A, 0x02, + 0x02, 0x00, + NULL +}; + +const struct MenuItem gUnknown_80E5A44[] = +{ + {WonderMail_80E5A54, MENU_WONDER_MAIL}, + {NULL, 0xffdd}, +}; + +const char WonderMail_80E5A54[] = "Wonder Mail"; + +const struct UnkTextStruct2 gUnknown_80E5A60 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x0A, 0x08, + 0x08, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80E5A78 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x0B, 0x09, + 0x09, 0x00, + NULL +}; + +const struct MenuItem gUnknown_80E5A90[] = +{ + {Continue_80E5AF0, MENU_CONTINUE}, + {DeleteSaveData_80E5ADC, MENU_DELETE_SAVE_PROMPT}, + {AdventureLog_80E5A10, MENU_ADVENTURE_LOG}, + {FriendRescue_80E5ACC, MENU_FRIEND_RESCUE}, + {TradeItems_80E5AC0, MENU_TRADE_ITEMS}, + {NULL, 0xffdd}, +}; + +const char TradeItems_80E5AC0[] = "Trade Items"; +const char FriendRescue_80E5ACC[] = "Friend Rescue"; +const char DeleteSaveData_80E5ADC[] = "Delete Save Data"; +const char Continue_80E5AF0[] = "Continue"; + + +const struct MenuItem gUnknown_80E5AFC[] = +{ + {Continue_80E5AF0, MENU_CONTINUE}, + {DeleteSaveData_80E5ADC, MENU_DELETE_SAVE_PROMPT}, + {AdventureLog_80E5A10, MENU_ADVENTURE_LOG}, + {FriendRescue_80E5ACC, MENU_FRIEND_RESCUE}, + {TradeItems_80E5AC0, MENU_TRADE_ITEMS}, + {WonderMail_80E5A54, MENU_WONDER_MAIL}, + {NULL, 0xffdd}, +}; + +const struct UnkTextStruct2 gUnknown_80E5B34 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x0A, 0x08, + 0x08, 0x00, + NULL +}; + +const struct MenuItem gUnknown_80E5B4C[] = +{ + {AwaitingRescue_80E5B7C, MENU_AWAITING_RESCUE}, + {DeleteSaveData_80E5ADC, MENU_DELETE_SAVE_PROMPT}, + {AdventureLog_80E5A10, MENU_ADVENTURE_LOG}, + {FriendRescue_80E5ACC, MENU_FRIEND_RESCUE}, + {TradeItems_80E5AC0, MENU_TRADE_ITEMS}, + {NULL, 0xffdd}, +}; +const char AwaitingRescue_80E5B7C[] = "Awaiting Rescue"; + +const struct MenuItem gUnknown_80E5B8C[] = +{ + {AwaitingRescue_80E5B7C, MENU_AWAITING_RESCUE}, + {DeleteSaveData_80E5ADC, MENU_DELETE_SAVE_PROMPT}, + {AdventureLog_80E5A10, MENU_ADVENTURE_LOG}, + {FriendRescue_80E5ACC, MENU_FRIEND_RESCUE}, + {TradeItems_80E5AC0, MENU_TRADE_ITEMS}, + {WonderMail_80E5A54, MENU_WONDER_MAIL}, + {NULL, 0xffdd}, +}; + +const struct UnkTextStruct2 gUnknown_80E5BC4 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x0A, 0x08, + 0x08, 0x00, + NULL +}; + +const struct MenuItem gUnknown_80E5BDC[] = +{ + {ReviveTeam_80E5C0C, MENU_CONTINUE}, + {DeleteSaveData_80E5ADC, MENU_DELETE_SAVE_PROMPT}, + {AdventureLog_80E5A10, MENU_ADVENTURE_LOG}, + {FriendRescue_80E5ACC, MENU_FRIEND_RESCUE}, + {TradeItems_80E5AC0, MENU_TRADE_ITEMS}, + {NULL, 0xffdd}, +}; +const char ReviveTeam_80E5C0C[] = "Revive Team"; + +const struct MenuItem gUnknown_80E5C18[] = +{ + {ReviveTeam_80E5C0C, MENU_CONTINUE}, + {DeleteSaveData_80E5ADC, MENU_DELETE_SAVE_PROMPT}, + {AdventureLog_80E5A10, MENU_ADVENTURE_LOG}, + {FriendRescue_80E5ACC, MENU_FRIEND_RESCUE}, + {TradeItems_80E5AC0, MENU_TRADE_ITEMS}, + {WonderMail_80E5A54, MENU_WONDER_MAIL}, + {NULL, 0xffdd}, +}; + +const struct UnkTextStruct2 gUnknown_80E5C50 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x0A, 0x03, + 0x03, 0x00, + NULL +}; + +const struct MenuItem gUnknown_80E5C68[] = +{ + {SendItems_80E5C90, MENU_SEND_ITEMS}, + {ReceiveItems_80E5C80, MENU_RECEIVE_ITEMS}, + {NULL, 0xffdd}, +}; + +const char ReceiveItems_80E5C80[] = "Receive Items"; +const char SendItems_80E5C90[] = "Send Items"; + +const struct MenuItem gUnknown_80E5C9C[] = +{ + {SendItems_80E5C90, -1}, + {ReceiveItems_80E5C80, MENU_RECEIVE_ITEMS}, + {NULL, 0xffdd}, +}; + +extern const struct UnkTextStruct2 gUnknown_80E5CB4; +extern const struct MenuItem gUnknown_80E5CCC[]; +extern const struct MenuItem gUnknown_80E5D0C[]; +extern const struct MenuItem gUnknown_80E5D48[]; +extern const struct MenuItem gUnknown_80E5DA0[]; +extern const struct MenuItem gUnknown_80E5DF0[]; +extern const struct MenuItem gUnknown_80E5E5C[]; +extern const struct MenuItem gUnknown_80E5EBC[]; +extern const struct MenuItem gUnknown_80E5F1C[]; +extern const struct MenuItem gUnknown_80E5F80[]; +extern const struct MenuItem gUnknown_80E5FCC[]; +extern const struct MenuItem gUnknown_80E6030[]; -extern struct MainMenu *gMainMenu; -extern struct UnkTextStruct2 gUnknown_80E59A8; -extern struct UnkTextStruct2 gUnknown_80E59C8; -extern bool8 SetMainMenuText(); -extern void SetMainMenuItems(); struct unkStruct_Menu { @@ -396,6 +616,7 @@ void sub_8035D1C(void) gMainMenu->unk38 = -1; } +// Unused void sub_8035D30(s32 r0) { gMainMenu->unk38 = r0; @@ -411,11 +632,13 @@ struct MainMenu *GetMainMenu(void) return gMainMenu; } +// Unused void sub_8035D58(void) { gMainMenu->unk3C = -1; } +// Unused void sub_8035D68(s32 r0) { gMainMenu->unk3C = r0; @@ -528,3 +751,241 @@ void CleanMainMenu(void) } } +u32 UpdateMainMenu(void) +{ + u32 nextMenu = MENU_NO_SCREEN_CHANGE; + switch(gUnknown_203B34C->unk0) + { + case 1: + sub_8012FD8(&gUnknown_203B34C->unkA4); + if(!sub_8012FD8(&gUnknown_203B34C->unk4)) + sub_8013114(&gUnknown_203B34C->unk4, &nextMenu); + + if(SetMainMenuText()) + { + sub_8035CF4(&gUnknown_203B34C->unk4, 0, 1); + sub_8035CF4(&gUnknown_203B34C->unk4, 2, 0); + } + switch(nextMenu) + { + case MENU_NO_SCREEN_CHANGE: + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0xffdd: + gUnknown_203B34C->unk0 = 1; + nextMenu = MENU_NO_SCREEN_CHANGE; + ResetUnusedInputStruct(); + sub_8035CF4(&gUnknown_203B34C->unk4, 0, 1); + sub_8035CF4(&gUnknown_203B34C->unk4, 2, 0); + break; + case MENU_TRADE_ITEMS: + sub_8035DA0(); + gUnknown_203B350 = nextMenu; + break; + case MENU_NEW_GAME: + case MENU_AWAITING_RESCUE: + case MENU_CONTINUE: + case MENU_DELETE_SAVE_PROMPT: + case MENU_DELETE_SAVE_CONFIRM: + case MENU_ADVENTURE_LOG: + case MENU_FRIEND_RESCUE: + case MENU_WONDER_MAIL: + case MENU_DUAL_SLOT: + case MENU_WIRELESS_COMMS: + case MENU_DEBUG: + gUnknown_203B350 = nextMenu; + break; + + } + break; + case 0xC: + if(!sub_8012FD8(&gUnknown_203B34C->unk54)) + sub_8013114(&gUnknown_203B34C->unk54, &nextMenu); + switch(nextMenu) + { + case 0xffdd: + sub_803623C(); + gUnknown_203B34C->unk0 = 1; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case MENU_SEND_ITEMS: + gUnknown_203B354 = nextMenu; + nextMenu = MENU_TRADE_ITEMS; + break; + case MENU_RECEIVE_ITEMS: + gUnknown_203B354 = nextMenu; + nextMenu = MENU_COMMUNICATION_2; + break; + case MENU_NO_SCREEN_CHANGE: + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + default: + break; + } + break; + default: + case 0xD: // forces the bls switch + break; + } + return nextMenu; +} + +bool8 SetMainMenuText(void) +{ + u32 menuChoice; + struct MenuItem *preload; + + // Have to load the pointer before the index + preload = gUnknown_203B34C->unk8; + menuChoice = preload[gUnknown_203B34C->menuIndex].menuAction; // chosen menu action? + if (gUnknown_203B34C->currMenuChoice == menuChoice) { + return FALSE; + } + + gUnknown_203B34C->currMenuChoice = menuChoice; + sub_8035CC0(gUnknown_203B34C->unk144,2); + sub_8035CC0(gUnknown_203B34C->unk144,3); + switch(menuChoice) { + case MENU_WIRELESS_COMMS: + // Using wireless communications, you can go on an adventure to unknown worlds. + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E6030,0,0,0); + break; + case MENU_WONDER_MAIL: + // Using passwords, you can receive Wonder Mail + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F80,0,0,0); + break; + case MENU_AWAITING_RESCUE: + // You are awaiting resuce by a friend + // You can give up waiting for rescue + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F1C,0,0,0); + break; + case MENU_NEW_GAME: + // Start an entirely new adventure + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5CCC,0,0,0); + break; + case MENU_CONTINUE: + // Resume your adventure from where you last saved + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DA0,0,0,0); + break; + case MENU_DELETE_SAVE_PROMPT: + // This will delete your saved game data. + // Beware! This will delete it forever + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DF0,0,0,0); + break; + case MENU_ADVENTURE_LOG: + // Check your career as an adventurer + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D0C,0,0,0); + break; + case MENU_FRIEND_RESCUE: + // Using a Game Link cable or passwords, friends may rescue each other + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5E5C,0,0,0); + break; + case MENU_TRADE_ITEMS: + // Using a Game Link cable you can trade stored items with a friend + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5EBC,0,0,0); + break; + case MENU_DUAL_SLOT: + // Using Dual Slot function, you can receive teams from your friends + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5FCC,0,0,0); + break; + case MENU_DEBUG: + // This is the Debug Mode. + // It won't be in the release version + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D48,0,0,0); + break; + default: + break; + } + return TRUE; +} + +void sub_803623C(void) +{ + sub_8035CC0(gUnknown_203B34C->unk144,1); + SetMainMenuItems(); + gUnknown_203B34C->currMenuChoice = -1; + if (SetMainMenuText()) { + sub_8035CF4(&gUnknown_203B34C->unk4,2,0); + } + sub_8035CF4(&gUnknown_203B34C->unk4,0,1); +} + +void SetMainMenuItems(void) +{ + if (sub_8011C34() != -1) { + if (sub_8095324(1) == 0) { + if (sub_8095324(7) != 0) { + if (sub_803D0D8() != 0) { + // Revive Team + // Delete Save Data + // Adventure Log + // Friend Rescue + // Trade Items + // Wonder Mail + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5C18,1,gUnknown_203B350,1); + } + else { + // Revive Team + // Delete Save Data + // Adventure Log + // Friend Rescue + // Trade Items + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,gUnknown_80E5BDC,1,gUnknown_203B350,1); + } + } + else { + if (sub_803D0D8() != 0) { + // Continue + // Delete Save Data + // Adventure Log + // Friend Rescue + // Trade Items + // Wonder Mail + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5AFC,1,gUnknown_203B350,1); + } + else { + // Continue + // Delete Save Data + // Adventure Log + // Friend Rescue + // Trade Items + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,gUnknown_80E5A90,1,gUnknown_203B350,1); + } + } + } + else { + if (sub_803D0D8() != 0) { + // Awaiting Rescue + // Delete Save Data + // Adventure Log + // Friend Rescue + // Trade Items + // Wonder Mail + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5B8C,1,gUnknown_203B350,1); + } + else { + // Awaiting Rescue + // Delete Save Data + // Adventure Log + // Friend Rescue + // Trade Items + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,gUnknown_80E5B4C,1,gUnknown_203B350,1); + } + } + } + else + { + // New Game + // Adventure Log + SetMenuItems((struct unkStruct_Menu *)&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,gUnknown_80E59F8,1,gUnknown_203B350,1); + } +} + +bool8 sub_80363E0(void) +{ + if(gUnknown_203B34C == NULL) + return FALSE; + if(gUnknown_203B34C->unk0 == 0xC) + return FALSE; + return TRUE; +} diff --git a/src/main_menu_1.c b/src/main_menu_1.c deleted file mode 100644 index 668df86..0000000 --- a/src/main_menu_1.c +++ /dev/null @@ -1,216 +0,0 @@ -#include "global.h" -#include "main_menu.h" -#include "menu.h" -#include "text.h" - -struct unkStruct_203B34C -{ - // size: 0x1A8 - u32 unk0; - u32 unk4; - struct MenuItem *unk8; // Array of menu choices?? - u8 fillC[0x30 - 0xC]; - s16 menuIndex; - u8 fill32[0x144 - 0x32]; - struct UnkTextStruct2 unk144[4]; - /* 0x1A4 */ u32 currMenuChoice; -}; - -extern struct unkStruct_203B34C *gUnknown_203B34C; -extern u32 gUnknown_203B350; - - -extern u32 gUnknown_80E59E0; -extern u32 gUnknown_80E5A78; -extern u32 gUnknown_80E5B34; -extern u32 gUnknown_80E5BC4; -extern u32 gUnknown_80E5CB4; -extern u32 gUnknown_80E5A60; - -extern const struct MenuItem gUnknown_80E59F8[]; -extern const struct MenuItem gUnknown_80E5A90[]; -extern const struct MenuItem gUnknown_80E5AFC[]; -extern const struct MenuItem gUnknown_80E5B4C[]; -extern const struct MenuItem gUnknown_80E5B8C[]; -extern const struct MenuItem gUnknown_80E5BDC[]; -extern const struct MenuItem gUnknown_80E5C18[]; -extern const struct MenuItem gUnknown_80E5CCC[]; -extern const struct MenuItem gUnknown_80E5D0C[]; -extern const struct MenuItem gUnknown_80E5D48[]; -extern const struct MenuItem gUnknown_80E5DA0[]; -extern const struct MenuItem gUnknown_80E5DF0[]; -extern const struct MenuItem gUnknown_80E5E5C[]; -extern const struct MenuItem gUnknown_80E5EBC[]; -extern const struct MenuItem gUnknown_80E5F1C[]; -extern const struct MenuItem gUnknown_80E5F80[]; -extern const struct MenuItem gUnknown_80E5FCC[]; -extern const struct MenuItem gUnknown_80E6030[]; - -extern u8 sub_803D0D8(); -extern s32 sub_8011C34(); -extern s32 sub_8095324(u32); -extern void SetMenuItems(u32 *, struct UnkTextStruct2 *, u32, u32 *, const struct MenuItem *, u32, u32, u32); -void SetMainMenuItems(void); -extern bool8 SetMainMenuText(); -extern void sub_8035CF4(u32 *, u32, u32); -extern void sub_8035CC0(struct UnkTextStruct2 *, u32); - -bool8 SetMainMenuText(void) -{ - u32 menuChoice; - struct MenuItem *preload; - - // Have to load the pointer before the index - preload = gUnknown_203B34C->unk8; - menuChoice = preload[gUnknown_203B34C->menuIndex].menuAction; // chosen menu action? - if (gUnknown_203B34C->currMenuChoice == menuChoice) { - return FALSE; - } - - gUnknown_203B34C->currMenuChoice = menuChoice; - sub_8035CC0(gUnknown_203B34C->unk144,2); - sub_8035CC0(gUnknown_203B34C->unk144,3); - switch(menuChoice) { - case MENU_WIRELESS_COMMS: - // Using wireless communications, you can go on an adventure to unknown worlds. - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E6030,0,0,0); - break; - case MENU_WONDER_MAIL: - // Using passwords, you can receive Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F80,0,0,0); - break; - case MENU_AWAITING_RESCUE: - // You are awaiting resuce by a friend - // You can give up waiting for rescue - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F1C,0,0,0); - break; - case MENU_NEW_GAME: - // Start an entirely new adventure - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5CCC,0,0,0); - break; - case MENU_CONTINUE: - // Resume your adventure from where you last saved - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DA0,0,0,0); - break; - case MENU_DELETE_SAVE_PROMPT: - // This will delete your saved game data. - // Beware! This will delete it forever - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DF0,0,0,0); - break; - case MENU_ADVENTURE_LOG: - // Check your career as an adventurer - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D0C,0,0,0); - break; - case MENU_FRIEND_RESCUE: - // Using a Game Link cable or passwords, friends may rescue each other - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5E5C,0,0,0); - break; - case MENU_TRADE_ITEMS: - // Using a Game Link cable you can trade stored items with a friend - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5EBC,0,0,0); - break; - case MENU_DUAL_SLOT: - // Using Dual Slot function, you can receive teams from your friends - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5FCC,0,0,0); - break; - case MENU_DEBUG: - // This is the Debug Mode. - // It won't be in the release version - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D48,0,0,0); - break; - default: - break; - } - return TRUE; -} - -void sub_803623C(void) -{ - sub_8035CC0(gUnknown_203B34C->unk144,1); - SetMainMenuItems(); - gUnknown_203B34C->currMenuChoice = -1; - if (SetMainMenuText()) { - sub_8035CF4(&gUnknown_203B34C->unk4,2,0); - } - sub_8035CF4(&gUnknown_203B34C->unk4,0,1); -} - -void SetMainMenuItems(void) -{ - if (sub_8011C34() != -1) { - if (sub_8095324(1) == 0) { - if (sub_8095324(7) != 0) { - if (sub_803D0D8() != 0) { - // Revive Team - // Delete Save Data - // Adventure Log - // Friend Rescue - // Trade Items - // Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5C18,1,gUnknown_203B350,1); - } - else { - // Revive Team - // Delete Save Data - // Adventure Log - // Friend Rescue - // Trade Items - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,gUnknown_80E5BDC,1,gUnknown_203B350,1); - } - } - else { - if (sub_803D0D8() != 0) { - // Continue - // Delete Save Data - // Adventure Log - // Friend Rescue - // Trade Items - // Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5AFC,1,gUnknown_203B350,1); - } - else { - // Continue - // Delete Save Data - // Adventure Log - // Friend Rescue - // Trade Items - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,gUnknown_80E5A90,1,gUnknown_203B350,1); - } - } - } - else { - if (sub_803D0D8() != 0) { - // Awaiting Rescue - // Delete Save Data - // Adventure Log - // Friend Rescue - // Trade Items - // Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5B8C,1,gUnknown_203B350,1); - } - else { - // Awaiting Rescue - // Delete Save Data - // Adventure Log - // Friend Rescue - // Trade Items - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,gUnknown_80E5B4C,1,gUnknown_203B350,1); - } - } - } - else - { - // New Game - // Adventure Log - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,gUnknown_80E59F8,1,gUnknown_203B350,1); - } -} - -bool8 sub_80363E0(void) -{ - if(gUnknown_203B34C == NULL) - return FALSE; - if(gUnknown_203B34C->unk0 == 0xC) - return FALSE; - return TRUE; -} diff --git a/src/memory_mid.c b/src/memory_mid.c index 1eb707c..51c927a 100644 --- a/src/memory_mid.c +++ b/src/memory_mid.c @@ -2,7 +2,7 @@ #include "memory.h" extern u32 gUnknown_80B7F14; -extern u32 gUnknown_80B7F20; +extern const char gLocateSetErrorMessage[]; extern struct HeapDescriptor gMainHeapDescriptor; extern s32 MemorySearchFromBack(struct HeapDescriptor *heap, s32, s32); @@ -12,7 +12,7 @@ extern struct HeapDescriptor * _LocateSetFront(struct HeapDescriptor *, u32, u32 void DoFree(struct HeapDescriptor *, void *); void *DoAlloc(struct HeapDescriptor *, s32, u32); -void FatalError(u32 *, u32 *, ...) __attribute__((noreturn)); +void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); s32 _LocateSet(struct HeapDescriptor *heap, s32 size, s32 group) @@ -48,7 +48,7 @@ error: // LocateSet [%p] buffer %8x size can't locate // atb %02x grp %3d FatalError(&gUnknown_80B7F14, - &gUnknown_80B7F20, + gLocateSetErrorMessage, heap,size,atb,group); } diff --git a/src/personality_test.c b/src/personality_test.c index 2034b7b..d129d8c 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -56,7 +56,6 @@ extern struct UnkSaveStruct1 *gUnknown_203B46C; extern const char gStarterReveal[]; extern const char gGenderText[]; extern struct MenuItem gGenderMenu[]; -extern const char gPartnerSelectionHeaderText; extern u8 gNatureQuestionTable[NUM_QUIZ_QUESTIONS]; extern u8 gAvailablePokemonNames[0x50]; @@ -170,7 +169,8 @@ const struct UnkTextStruct2 gUnknown_80F42A8 = NULL }; - +const char gPartnerSelectionHeaderText[] = _("Pokémon"); +const char personality_test_fill[] = "pksdir0"; u8 CreateTestTracker(void) { @@ -712,7 +712,7 @@ void RedrawPartnerSelectionMenu(void) sub_800641C(gUnknown_203B404->unk54,1,1); sub_8008C54(gUnknown_203B404->unk4C); sub_80073B8(gUnknown_203B404->unk4C); - xxx_call_draw_string(0xc, 0, &gPartnerSelectionHeaderText, gUnknown_203B404->unk4C, 0); + xxx_call_draw_string(0xc, 0, gPartnerSelectionHeaderText, gUnknown_203B404->unk4C, 0); monCounter = 0; while (monCounter < gUnknown_203B404->unk32) { diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 745d682..536c9d9 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -424,7 +424,7 @@ extern struct PokemonStruct *sub_808D33C(void); extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...); extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_80922B4(u8 *, u8 *, u32); -extern void sub_802F204(u8 *, u32); +extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void sub_80151C0(u32, u8 *); extern void xxx_call_start_bg_music(void); extern void sub_803092C(void); @@ -1615,23 +1615,23 @@ void UpdateThankYouMailText(void) break; case 0x22: monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gUnknown_203B2C4->unk53C,monName); - gUnknown_203B2C4->unk550 = 0x130; - gUnknown_203B2C4->unk552 = 2; - gUnknown_203B2C4->unk554 = 0; + strcpy(gUnknown_203B2C4->unk53C.clientName,monName); // 0x53C + gUnknown_203B2C4->unk53C.unk14 = SPECIES_PELIPPER; // 0x550 + gUnknown_203B2C4->unk53C.unk16 = 2; // 0x552 + gUnknown_203B2C4->unk53C.moneyReward = 0; // 0x554 uVar2 = sub_809539C(6,gUnknown_203B2C4->unk430); puVar4 = sub_8095228(uVar2); cVar1 = puVar4->unk20.itemIndex; if (cVar1 != '\0') - gUnknown_203B2C4->unk558 = cVar1; + gUnknown_203B2C4->unk53C.itemRewards[0] = cVar1; // unk558 else - gUnknown_203B2C4->unk558 = 0; - gUnknown_203B2C4->unk55B = 1; - gUnknown_203B2C4->unk560 = sub_803C200(&puVar4->unk4, 0); - gUnknown_203B2C4->unk559 = 0; - gUnknown_203B2C4->unk55A = 0; - gUnknown_203B2C4->unk55C = 0; - sub_802F204(gUnknown_203B2C4->unk53C,0); + gUnknown_203B2C4->unk53C.itemRewards[0] = 0; // unk558 + gUnknown_203B2C4->unk53C.numItems = 1; // unk55B + gUnknown_203B2C4->unk53C.teamRankPtsReward = sub_803C200(&puVar4->unk4, 0); // unk560 + gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559 + gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A + gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C + sub_802F204(&gUnknown_203B2C4->unk53C,0); // unk53C break; case COMMUNICATING_THANK_YOU_MAIL: // Communicating.. diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 29cd2bc..cae3233 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -34,7 +34,7 @@ extern struct MenuItem gUnknown_80DDA48[]; extern s32 sub_8095190(void); extern u32 sub_8095324(u32); -extern void sub_80141B4(const char *r0, u32, u32 *r1, u32); +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void nullsub_130(void); extern void sub_8028348(void); extern void ResetUnusedInputStruct(); @@ -52,7 +52,7 @@ extern void sub_803092C(void); extern u32 sub_80154F0(); extern u32 sub_8039068(u32, u8 *r1, u8 *r0); -extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); +extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, void *r5, u32); extern void sub_8095274(u32); extern void sub_80155F0(); extern void sub_80951BC(u8 *r0); @@ -83,6 +83,621 @@ extern void sub_8099690(u32); extern void sub_8031E10(void); extern void sub_803084C(void); extern void sub_8030DE4(); +extern u8 gUnknown_80DDAE4[]; +extern struct MenuItem gUnknown_80DDAA0[]; +extern struct MenuItem gUnknown_80DDA80[]; +extern struct MenuItem gUnknown_80DDAFC[]; +extern struct MenuItem gUnknown_80DDB60[]; +extern struct MenuItem gUnknown_80DDA64[]; +extern struct unkStruct_203B45C *gRecruitedPokemonRef; +extern struct MenuItem gUnknown_80DDB24[]; +extern struct MenuItem gUnknown_80DD9EC[]; +extern u8 gUnknown_80DDACC[]; +extern struct MenuItem gUnknown_80DD970[]; + +extern void nullsub_23(u32); +extern s32 sub_8037D64(u32, void *, void *); +extern s32 sub_80381F4(u32, void *, void *); +extern void sub_8023868(u32, u32, u32, u32); +extern void sub_80306A8(u32, u32, u32, u32); +extern s32 sub_8037B28(u32); +extern void sub_8011830(void); +extern u32 sub_8095350(); +extern void sub_8031D70(u8, u32); +extern void sub_80151C0(u32, u8 *); +extern void xxx_call_start_bg_music(void); +extern u32 sub_8023CE8(void); +extern u32 sub_8030894(void); +extern void sub_8030F58(u32); +extern void sub_8023DA4(void); +extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, u8 *, struct MenuItem *, u32, u32, u32); +extern void sub_8029B34(void); +extern void sub_8029AD8(void); +extern void sub_8029AF4(void); +extern void sub_8029A88(void); +extern void sub_8029AB0(void); +extern void sub_80297B8(void); +extern void sub_80297D4(void); +extern void sub_8029884(void); +extern void sub_8029944(void); +extern void sub_80299AC(void); +extern void sub_80299D8(void); +extern void sub_8029A6C(void); +extern void sub_8028CE0(void); +extern void sub_8028BF0(void); +extern void sub_8029A18(void); +extern void sub_80295A8(void); +extern void sub_8029668(void); +extern void sub_8029684(void); +extern void sub_8029740(void); +extern void sub_80295D8(void); +extern void sub_802979C(void); +extern void sub_8029358(void); +extern void sub_8029374(void); +extern void sub_802939C(void); +extern void sub_8028F58(void); +extern void sub_8028F30(void); +extern void sub_8028F04(void); +extern void sub_8028ED4(void); +extern void sub_80293D8(void); +extern void sub_80293F4(void); +extern void sub_8028DE8(u32); +extern void sub_8028EAC(void); +extern void sub_802955C(void); +extern void sub_80292A4(void); +extern void sub_80292EC(void); +extern void sub_802933C(void); +extern void sub_802958C(void); +extern void sub_8029208(void); +extern void sub_8028E84(void); +extern void sub_8028F80(void); +extern void sub_8028FC0(void); +extern void sub_8028FDC(void); +extern void sub_8028E54(void); +extern void sub_8028E24(void); +extern void sub_8028E08(void); +extern void sub_80290D4(void); +extern void sub_80290F0(void); +extern void sub_80291AC(void); +extern void sub_8029044(void); +extern void sub_8028CFC(void); +extern void sub_8028D4C(void); +extern void sub_8031E10(void); +extern void sub_8023C60(void); +extern void sub_803084C(void); +extern void sub_80155F0(void); +extern void sub_80310B4(void); +extern void sub_8030DE4(void); +extern void sub_802453C(void); + + + +u32 sub_8027F88(void) +{ + char *monName; + struct OpenedFile *faceFile; + s32 counter; + + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + gUnknown_203B2C0 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C0), 8); + MemoryFill8((u8 *)gUnknown_203B2C0, 0, sizeof(struct WonderMailStruct_203B2C0)); + gUnknown_203B2C0->unk53C = 0; + gUnknown_203B2C0->unk218 = -1; + gUnknown_203B2C0->unk544 = -1; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); + monName = GetMonSpecies(SPECIES_PELIPPER); + strcpy(gAvailablePokemonNames, monName); + faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); + gUnknown_203B2C0->faceFile = faceFile; + gUnknown_203B2C0->faceData = faceFile->data; + gUnknown_203B2C0->unk42C = 0; + gUnknown_203B2C0->unk42D = 0; + gUnknown_203B2C0->unk42E = 0; + gUnknown_203B2C0->unk428 = 2; + gUnknown_203B2C0->unk42A = 8; + for(counter = 0; counter < PASSWORD_BUFFER_SIZE; counter++){ + gUnknown_203B2C0->passwordBuffer[counter] = 0; + } + gUnknown_203B2C0->unk0 = 0x3D; + sub_8028B04(0); // Set initial state to 0? + return 1; +} + +u32 sub_8028078(void) +{ + + switch(gUnknown_203B2C0->state) { + case 0x3c: + sub_8029B34(); + break; + case 0x3a: + sub_8029AD8(); + break; + case 0x3b: + sub_8029AF4(); + break; + case 0x38: + sub_8029A88(); + break; + case 0x37: + sub_8029AB0(); + break; + case 0x32: + sub_80297B8(); + break; + case 0x33: + sub_80297D4(); + break; + case 0x34: + sub_8029884(); + break; + case 0x35: + sub_8029944(); + break; + case 0x31: + sub_80299AC(); + break; + case 0x36: + sub_80299D8(); + break; + case 0x30: + sub_8029A6C(); + break; + case 0x2e: + sub_8029A18(); + break; + case 0x2d: + sub_80295A8(); + break; + case 0x29: + sub_8029668(); + break; + case 0x2b: + sub_8029684(); + break; + case 0x2c: + sub_8029740(); + break; + case 0x2a: + sub_80295D8(); + break; + case 0x2f: + sub_802979C(); + break; + case 9: + sub_8029358(); + break; + case 0x23: + sub_8029374(); + break; + case 0x24: + sub_802939C(); + break; + case 0x26: + sub_80293D8(); + break; + case 0x27: + sub_80293F4(); + break; + case 0x28: + sub_802955C(); + break; + case 4: + sub_80292A4(); + break; + case 6: + sub_80292EC(); + break; + case 7: + sub_802933C(); + break; + case 5: + sub_802958C(); + break; + case 8: + sub_8029208(); + break; + case 0x1a: + sub_8028DE8(1); + break; + case 0x1b: + sub_8028F80(); + break; + case 0x1c: + case 0x1d: + sub_8028FC0(); + break; + case 0x22: + sub_8028FDC(); + break; + case 0x1e: + sub_80290D4(); + break; + case 0x20: + sub_80290F0(); + break; + case 0x21: + sub_80291AC(); + break; + case 0x1f: + sub_8029044(); + break; + case 10: + sub_8028CFC(); + break; + case 0xb: + sub_8028D4C(); + break; + case 0xd: + case 0xf: + sub_8028DE8(10); + break; + case 0x11: + sub_8028E08(); + break; + case 0xc: + case 0xe: + case 0x10: + sub_8028DE8(0x19); + break; + case 0x12: + sub_8028E24(); + break; + case 0x13: + sub_8028E54(); + break; + case 0x17: + sub_8028E84(); + break; + case 0x18: + sub_8028EAC(); + break; + case 0x19: + sub_8028ED4(); + break; + case 0x14: + sub_8028F04(); + break; + case 0x15: + sub_8028F30(); + break; + case 0x16: + sub_8028F58(); + break; + case 0: + case 1: + sub_8028BF0(); + break; + case 2: + case 0x25: + case 0x39: + sub_8028CE0(); + break; + case 3: + return 3; + } + return 0; +} + +s32 sub_80282DC(u8 *r0) +{ + *r0 = gUnknown_203B2C0->unk218; + return gUnknown_203B2C0->unk53C; +} + +void sub_80282FC(void) +{ + if (gUnknown_203B2C0 != NULL) { + CloseFile(gUnknown_203B2C0->faceFile); + MemoryFree(gUnknown_203B2C0); + gUnknown_203B2C0 = NULL; + sub_8031E10(); + sub_8023C60(); + sub_803084C(); + sub_80155F0(); + sub_80310B4(); + sub_8030DE4(); + sub_802453C(); + } +} + +void nullsub_130(void) +{ +} + +void sub_8028348(void) +{ + s32 linkError; + switch(gUnknown_203B2C0->state) + { + case 0x3B: + sub_8006518(gUnknown_203B2C0->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8031D70(gUnknown_203B2C0->unk218, 0); + break; + case 0x3C: + sub_80141B4(gUnknown_80DDBA8, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x3A: + sub_80141B4(gUnknown_80DDBFC, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x38: + sub_80141B4(gUnknown_80DDC30, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x37: + switch(gUnknown_203B2C0->unk534) + { + // 0x0 - 0x9 included here too... + case 0x10: + case 0xF: + case 0xD: + sub_80141B4(gUnknown_80DDC70, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0xE: + break; + } + break; + case 0x39: + sub_80141B4(gUnknown_80DDC30, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x32: + sub_80141B4(gUnknown_80DDCBC, 0, 0,0x101); + break; + case 0x33: + if(sub_8023CE8() != 0) + { + break; + } + else + { + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_8023868(3, 0, 0, 9); + } + break; + case 0x34: + sub_8006518(gUnknown_203B2C0->unk35C); + SetMenuItems(&gUnknown_203B2C0->unk21C, gUnknown_203B2C0->unk35C, 3, gUnknown_80DDAE4, gUnknown_80DDAFC, 1, 0, 0); + sub_8023DA4(); + sub_8035CF4(&gUnknown_203B2C0->unk21C, 3, 1); + break; + case 0x31: + sub_8014248(gUnknown_80DDD2C, 0, 0xA, gUnknown_80DDAA0, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0x36: + sub_8014248(gUnknown_80DDD88, 0, 8, gUnknown_80DDA80, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0x2D: + sub_8014248(gUnknown_80DDDBC, 0, 8, gUnknown_80DDA64, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0x29: + sub_80141B4(gUnknown_80DDDD8, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x2A: + if(sub_8030894() != 0) + { + break; + } + else + { + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_80306A8(4, 0, 0, 6); + } + break; + case 0x2F: + sub_80141B4(gUnknown_80DDE20, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x30: + sub_80141B4(gUnknown_80DDE58, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x2E: + sub_8014248(gUnknown_80DDEC0, 0, 0x11, gUnknown_80DDB60, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 9: + sub_80141B4(gUnknown_80DDF2C, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 4: + sub_8014248(gUnknown_80DDFB8, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 5: + nullsub_23(0); + sub_80141B4(gUnknown_80DE01C, 0 , 0, 0); + break; + case 6: + gUnknown_203B2C0->linkError = 0; + sub_8011830(); + linkError = sub_8037B28(gUnknown_203B2C0->unk40); + gUnknown_203B2C0->linkError = linkError; + if(linkError == 0) + { + switch(gUnknown_203B2C0->unk40) + { + case 3: + MemoryFill8(gUnknown_203B2C0->unk48, 0, 0x30); + MemoryFill8(gUnknown_203B2C0->unk78, 0, 0x30); + gUnknown_203B2C0->linkError = sub_8037D64(gUnknown_203B2C0->unk40, gUnknown_203B2C0->unk48, gUnknown_203B2C0->unk78); + break; + case 4: + MemoryFill8((u8 *)&gUnknown_203B2C0->unkA8, 0, 0x88); + MemoryFill8(&gUnknown_203B2C0->unk130, 0, 0x88); + gUnknown_203B2C0->unkD8.speciesNum = linkError; + gUnknown_203B2C0->unk168 = linkError; + gUnknown_203B2C0->unkA8 = *sub_8095228(gUnknown_203B2C0->unk218); + if(gUnknown_203B2C0->unk544 != -1) + { + gUnknown_203B2C0->unkD8 = gRecruitedPokemonRef->pokemon[gUnknown_203B2C0->unk544]; + } + gUnknown_203B2C0->linkError = sub_8037D64(gUnknown_203B2C0->unk40, &gUnknown_203B2C0->unkA8, &gUnknown_203B2C0->unk130); + break; + } + if(gUnknown_203B2C0->linkError == 0) + { + switch(gUnknown_203B2C0->unk40) + { + case 3: + gUnknown_203B2C0->linkError = sub_80381F4(3, gUnknown_203B2C0->unk48, gUnknown_203B2C0->unk78); + break; + case 4: + gUnknown_203B2C0->linkError = sub_80381F4(4, &gUnknown_203B2C0->unkA8, &gUnknown_203B2C0->unk130); + break; + } + } + xxx_call_start_bg_music(); + } + else + { + xxx_call_start_bg_music(); + } + break; + case 0x23: + switch(gUnknown_203B2C0->unk534) + { + // 0x0 - 0x9 included here too... + case 0x10: + case 0xF: + case 0xD: + sub_80141B4(gUnknown_80DE06C, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0xE: + break; + } + break; + case 0x25: + sub_80141B4(gUnknown_80DE0C0, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x26: + sub_80141B4(gUnknown_80DE124, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x27: + sub_8006518(gUnknown_203B2C0->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_80151C0(4, gUnknown_203B2C0->passwordBuffer); + break; + case 8: + switch(gUnknown_203B2C0->unk538) + { + case 0: + sub_8014248(gUnknown_80DE178, 0, 0xD, gUnknown_80DDB24, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 2: + sub_8014248(gUnknown_80DE1B4, 0, 0xD, gUnknown_80DDB24, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + } + break; + case 0x1A: + sub_80141B4(gUnknown_80DE1E4, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x1B: + sub_80141B4(gUnknown_80DE280, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x1C: + sub_80141B4(gUnknown_80DE2B0, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x1D: + sub_80141B4(gUnknown_80DE368, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x22: + sub_8014248(gUnknown_80DDDBC, 0, 8, gUnknown_80DDA64, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0x1E: + sub_80141B4(gUnknown_80DE430, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x1F: + if(sub_8030894() != 0) + { + break; + } + else + { + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + sub_80306A8(2, 0, 0, 6); + } + break; + case 0x20: + case 0x2B: + sub_8006518(gUnknown_203B2C0->unk35C); + SetMenuItems(&gUnknown_203B2C0->unk21C, gUnknown_203B2C0->unk35C, 3, gUnknown_80DDACC, gUnknown_80DDAFC, 1, 0, 0); + sub_803092C(); + sub_8035CF4(&gUnknown_203B2C0->unk21C, 3, 1); + break; + case 0xA: + gUnknown_203B2C0->unk540 = sub_8095350(); + switch((u32)gUnknown_203B2C0->unk538) + { + case 5: + sub_8030F58(2); + break; + case 6: + sub_8030F58(4); + break; + default: + case 7: + break; + } + break; + case 0xB: + sub_8014248(gUnknown_80DE48C, 0, 5, gUnknown_80DD9EC, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0xD: + sub_80141B4(gUnknown_80DE4B8, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0xC: + sub_80141B4(gUnknown_80DE4F0, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0xF: + sub_80141B4(gUnknown_80DE524, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0xE: + sub_80141B4(gUnknown_80DE614, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x11: + sub_80141B4(gUnknown_80DE648, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x10: + sub_80141B4(gUnknown_80DE694, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x12: + sub_8014248(gUnknown_80DE6D4, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0x13: + sub_8014248(gUnknown_80DE754, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0x17: + sub_80141B4(gUnknown_80DE7B8, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x18: + sub_80141B4(gUnknown_80DE7E8, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x19: + sub_8014248(gUnknown_80DE808, 0, 8, gUnknown_80DDA64, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 0x14: + sub_80141B4(gUnknown_80DE830, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x15: + sub_80141B4(gUnknown_80DE864, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0x16: + sub_80141B4(gUnknown_80DE7E8, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 0: + sub_8014248(gUnknown_80DE8B4, 0, 0, gUnknown_80DD970, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 1: + sub_8014248(gUnknown_80DE918, 0, 0, gUnknown_80DD970, 0, 4, 0, &gUnknown_203B2C0->faceFile,0xC); + break; + case 2: + sub_80141B4(gUnknown_80DE93C, 0, &gUnknown_203B2C0->faceFile,0x10d); + break; + case 3: + break; + } +} void sub_8028B04(u32 r0) @@ -101,43 +716,43 @@ void sub_8028B1C(u32 r0) break; case 1: case 2: - sub_80141B4(gWonderMailErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailErrorText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 3: - sub_80141B4(gWonderMailNumGBAsText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailNumGBAsText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 4: - sub_80141B4(gWonderMailWrongModeText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailWrongModeText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 5: - sub_80141B4(gWonderMailErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailErrorText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 6: - sub_80141B4(gWonderMailStorageFullText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailStorageFullText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 7: - sub_80141B4(gWonderMailDuplicateText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailDuplicateText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 8: break; case 9: - sub_80141B4(gWonderMailNotEligibleReceiveText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailNotEligibleReceiveText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 10: break; case 11: - sub_80141B4(gWonderMailNotEligibleReceiveText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailNotEligibleReceiveText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 12: break; case 13: - sub_80141B4(gWonderMailNoRoomText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailNoRoomText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 14: - sub_80141B4(gWonderMailErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailErrorText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; case 15: - sub_80141B4(gWonderMailFriendErrorText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailFriendErrorText, 0, &gUnknown_203B2C0->faceFile, 0x10d); break; default: break; @@ -774,22 +1389,22 @@ void sub_80293F4(void) switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp.unk0)) { case 17: - sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0xC); + sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile, 0xC); sub_8028B04(40); break; case 18: - sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailSOSPasswordIncorrectText, 0, &gUnknown_203B2C0->faceFile, 0x10d); sub_8028B04(7); break; case 7: - sub_80141B4(gWonderMailDuplicateText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x10d); + sub_80141B4(gWonderMailDuplicateText, 0, &gUnknown_203B2C0->faceFile, 0x10d); sub_8028B04(7); break; case 22: sub_8095274(temp.unk10); temp.unk0 = 2; // Some sort of Ack? sub_80951BC(&temp.unk0); - sub_80141B4(gWonderMailAOKMailReceivedText, 0, (u32 *)&gUnknown_203B2C0->faceFile, 0x101); + sub_80141B4(gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->faceFile, 0x101); sub_8028B04(35); break; case 23: diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 285c0d0..21074d6 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -25,19 +25,7 @@ struct unkStruct_203B2C8 /* 0x13 */ u8 unk13; /* 0x14 */ u8 teamName[4]; // Figure out size of this buffer u8 fill18[0x114 - 0x18]; - u8 speciesName[0xA]; // holds species name - u8 fill118[0x128 - 0x11E]; - u16 unk128; - u8 unk12A; - u8 unk12B; - u32 unk12C; - u8 unk130; - u8 unk131; - u8 unk132; - u8 unk133; - u8 unk134; - u8 fill135[0x3]; - u32 unk138; + struct unkStruct_802F204 unk114; u32 fill13C; }; @@ -107,7 +95,7 @@ extern void sub_802B5FC(void); extern void sub_802B624(void); void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...); -extern void sub_802F204(u8 *, u32); +extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void sub_803C37C(u8 *, u32, u8 *); extern u32 sub_803C200(u8 *, u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); @@ -233,19 +221,19 @@ void sub_802B3E0(void) break; case 1: monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gUnknown_203B2C8->speciesName, monName); - gUnknown_203B2C8->unk128 = 0x130; - gUnknown_203B2C8->unk12A = 2; - gUnknown_203B2C8->unk12C = 0; + strcpy(gUnknown_203B2C8->unk114.clientName, monName); + gUnknown_203B2C8->unk114.unk14 = SPECIES_PELIPPER; + gUnknown_203B2C8->unk114.unk16 = 2; + gUnknown_203B2C8->unk114.moneyReward = 0; sub_8097790(); iVar3 = sub_8095228(gUnknown_203B2C8->unk1); - sub_803C37C(&iVar3->unk4, 0, &gUnknown_203B2C8->unk130); - gUnknown_203B2C8->unk138 = sub_803C200(&iVar3->unk4, 0); - gUnknown_203B2C8->unk131 = 0; - gUnknown_203B2C8->unk132 = 0; - gUnknown_203B2C8->unk133 = 10; - gUnknown_203B2C8->unk134 = 0; - sub_802F204(gUnknown_203B2C8->speciesName, 0); + sub_803C37C(&iVar3->unk4, 0, gUnknown_203B2C8->unk114.itemRewards); + gUnknown_203B2C8->unk114.teamRankPtsReward = sub_803C200(&iVar3->unk4, 0); + gUnknown_203B2C8->unk114.itemRewards[1] = 0; + gUnknown_203B2C8->unk114.itemRewards[2] = 0; + gUnknown_203B2C8->unk114.numItems = 10; + gUnknown_203B2C8->unk114.friendAreaReward = 0; + sub_802F204(&gUnknown_203B2C8->unk114, 0); break; case 2: // I hope you will keep on rescuing your friends diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index e318d26..6cc1e96 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -3,6 +3,15 @@ #include "text.h" #include "input.h" #include "menu.h" +#include "constants/dungeon.h" +#include "wonder_mail.h" + +struct unkSubStruct_203B2F8 +{ + struct WonderMail wonderMail; + u8 *unk14; + u8 *unk18; +}; struct unkStruct_203B2F8 { @@ -13,12 +22,21 @@ struct unkStruct_203B2F8 u8 unk9; u8 unkA; u8 unkB; - u32 unkC; - u8 fill10[0x6C - 0x10]; + struct unkSubStruct_203B2F8 *unkC; + u8 unk10; + u8 fill11[0x14 - 0x11]; + u32 unk14; + u8 fill18[0x58 - 0x18]; + u8 unk58; + u8 fill59[0x64 - 0x59]; + u8 *unk64; + u32 unk68; u32 unk6C; u32 unk70; u32 unk74; - u8 fill78[0x118 - 0x78]; + u8 unk78[0xC8 - 0x78]; + u8 unkC8[4]; + u8 fillCC[0x118 - 0xCC]; struct MenuItem unk118[8]; struct MenuItem unk158[8]; u16 unk198[8]; @@ -47,8 +65,44 @@ extern void sub_802DA84(); extern void sub_802D1B8(); extern void sub_802D2A8(); +extern u8 gUnknown_80E0010[]; +extern u8 gUnknown_80DFFA4[]; +extern u8 gUnknown_80DFF2C[]; +extern u8 gUnknown_80DFED0[]; +extern u8 gUnknown_80DFE9C[]; +extern u8 gUnknown_80DFE4C[]; +extern u8 gUnknown_80E0108[]; +extern u8 gUnknown_80E0094[]; +extern u8 gUnknown_80E0074[]; + +extern u8 sub_80968B0(void *); +extern u8 sub_8096F50(void *); +extern u8 sub_802DAA8(void); +extern u8 sub_802DADC(void); +extern u8 *sub_8096DD8(void); +extern u8 sub_8096C08(u8 *); +extern void sub_802C750(void); +extern s32 sub_80969AC(void); +extern void sub_802D1A0(u32); +extern void sub_8012EA4(u8 *, u32); +extern void* sub_8096AB4(u8); +extern void sub_803B35C(void *, u32*); +extern void sub_802DE84(u32 *); +extern void sub_802D73C(void); +extern void sub_802C640(u32); +extern void sub_802C4C8(u32, u32, u32); +extern void sub_8097418(u32, u32); +extern void sub_802D690(void); +extern void sub_8096C80(void); +extern void sub_8096D24(void); +extern void sub_80141B4(u8 *, u32, u32, u32); +extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32); +extern u8 *sub_8096DE8(void); +extern void sub_8096A78(struct unkSubStruct_203B2F8 *); +extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32); -u32 sub_802D098(u32 param_1) + +u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1) { gUnknown_203B2F8 = MemoryAlloc(0x208,8); gUnknown_203B2F8->unk6C = 0; @@ -149,3 +203,133 @@ void sub_802D1B8(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2F8->unk1A8, 1, 1); } + +void sub_802D2A8(void) +{ + + switch(gUnknown_203B2F8->state) { + case 0: + if (sub_80968B0(gUnknown_203B2F8->unkC) != 0) { + sub_802D1A0(3); + } + else + { + if (sub_8096F50(gUnknown_203B2F8->unkC) != 0) { + sub_802D1A0(4); + } + else + { + if ((gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) && (sub_8096C08(&gUnknown_203B2F8->unk10) != 0)) { + if (sub_802DAA8() != 0) { + sub_802D1A0(9); + } + else { + sub_802D1A0(5); + } + } + else { + if (sub_80969AC() >= 8) { + if (sub_802DADC() != 0) { + sub_802D1A0(10); + } + else { + sub_802D1A0(6); + } + } + else + { + sub_802D1A0(8); + } + } + } + } + break; + case 1: + sub_802D73C(); + sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0); + break; + case 3: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFE9C,0,0,0x101); + break; + case 4: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFED0,0,0,0x101); + break; + case 5: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFF2C,0,0,0x101); + break; + case 6: + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80DFFA4,0,0,0x101); + break; + case 7: + gUnknown_203B2F8->unk4 = 0xc; + sub_80141B4(gUnknown_80E0010,0,0,0x101); + break; + case 8: + gUnknown_203B2F8->unk8 = 1; + sub_8096A78(gUnknown_203B2F8->unkC); + sub_8096C80(); + sub_8096D24(); + if (gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) { + MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28); + MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78); + } + switch(gUnknown_203B2F8->unkC->wonderMail.dungeon) + { + // NOTE: subtract 1 from each of the case as the input?? + case DUNGEON_ODDITY_CAVE: // 0x2B + sub_8097418(0x2A, 1); + break; + case DUNGEON_REMAINS_ISLAND: + sub_8097418(0x2B, 1); + break; + case DUNGEON_MARVELOUS_SEA: + sub_8097418(0x2C, 1); + break; + case DUNGEON_FANTASY_STRAIT: // 0x2E + sub_8097418(0x2D, 1); + break; + } + gUnknown_203B2F8->unk4 = 2; + sub_80141B4(gUnknown_80E0074,0,0,0x101); + break; + case 9: + sub_802D690(); + sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0); + break; + case 10: + gUnknown_203B2F8->unk4 = 0xb; + sub_80141B4(gUnknown_80E0108,0,0,0x101); + break; + case 0xb: + sub_802C4C8(0,0,4); + break; + case 0xc: + sub_802C640(1); + break; + case 0xd: + sub_802C750(); + sub_8012D60(gUnknown_203B2F8->unk78,gUnknown_203B2F8->unk118,0,gUnknown_203B2F8->unk198, + gUnknown_203B2F8->unk6C,2); + break; + case 0xe: + sub_802C750(); + sub_8012EA4(gUnknown_203B2F8->unk78,0); + sub_8012D60(gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3); + break; + case 0xf: + sub_803B35C(sub_8096AB4(gUnknown_203B2F8->unk10),&gUnknown_203B2F8->unk14); + gUnknown_203B2F8->unk14 = 3; + sub_802DE84(&gUnknown_203B2F8->unk14); + break; + case 0x10: + sub_803B35C(gUnknown_203B2F8->unkC,&gUnknown_203B2F8->unk14); + gUnknown_203B2F8->unk14 = 3; + gUnknown_203B2F8->unk58 = 0; + gUnknown_203B2F8->unk64 = gUnknown_203B2F8->unkC->unk18; + sub_802DE84(&gUnknown_203B2F8->unk14); + } +} diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c new file mode 100644 index 0000000..5661d44 --- /dev/null +++ b/src/wonder_mail_3_mid.c @@ -0,0 +1,772 @@ +#include "global.h" +#include "memory.h" +#include "text.h" +#include "input.h" +#include "wonder_mail.h" +#include "menu.h" +#include "pokemon.h" +#include "rescue_team_info.h" +#include "friend_area.h" +#include "item.h" + +struct unkStruct_803B344 +{ + // size: 0xB4 + struct WonderMail unk0; + u8* unk14; + u8* unk18; + u8 fill1C[0x3C - 0x1C]; + u8 unk3C[0x78]; +}; + +extern struct unkStruct_803B344 *sub_803B344(u8); + +struct unkStruct_203B30C +{ + // size: 0x150 + s32 state; + u8 unk4; + u8 unk5[3]; + u32 unk8; + u8 fillC[0x4C - 0xC]; + u8 unk4C; + u8 fill4D[0x58 - 0x4D]; + u8 *unk58; + u32 unk5C; + u32 unk60; + u8 fill64[0xB0 - 0x64]; + struct MenuItem unkB0[8]; + struct UnkTextStruct2 unkF0[4]; +}; +extern struct unkStruct_203B30C *gUnknown_203B30C; + +struct unkStruct_203B310 +{ + // size: 0x84 + /* 0x0 */ u32 state; + u32 unk4; + u8 unk8; + /* 0x9 */ u8 currTeamRank; // team rank + u8 unkA; + u8 unkB; + /* 0xC */ s32 itemRewardIndex; + struct unkStruct_802F204 *unk10; + /* 0x14 */ struct OpenedFile *faceFile; + /* 0x18 */ u8 *faceData; + s16 unk1C; + s16 unk1E; + u8 unk20; + u8 unk21; + u8 unk22; + struct UnkTextStruct2 unk24[4]; +}; +extern struct unkStruct_203B310 *gUnknown_203B310; + +// TODO: port to ItemSlot +struct ItemSlot_Alt +{ + // OG struct + // u8 itemFlags + // u8 numItems + // u8 itemIndex + union temp { + u8 itemFlags; + u8 numItems; + u8 itemIndex; + u32 full_bits; + } temp; +}; + +struct unkStruct_203B314 +{ + // size: 0x15C + s16 unk0[2]; + u8 fill4[0xB8 - 0x4]; + u8 unkB8; + u8 unkB9; + u8 unkBA; + u8 unkBB; + u32 unkBC; + u8 fillC0[0xD4 - 0xC0]; + s16 unkD4; + s16 unkD6; + s16 unkD8; + s16 unkDA; + s16 unkDC; + s16 unkDE; + u8 fillDF[0xF0 - 0xE0]; + u32 unkF0; + struct UnkTextStruct2 *unkF4; + struct UnkTextStruct2 unkF8[4]; + u8 unk158[4]; +}; + +extern struct unkStruct_203B314 *gUnknown_203B314; +extern struct UnkTextStruct2 gUnknown_80E072C; +extern struct UnkTextStruct2 gUnknown_80E0714; +extern struct UnkTextStruct2 gUnknown_80E06FC; + +extern u8 sub_802FCF0(u32); +extern void sub_802F9C0(void); +extern void sub_802FA50(void); +extern void sub_8012D08(struct UnkTextStruct2 *, u32); +extern void sub_8013818(u32 *, u32, u32, u32); +extern u32 sub_802FBF4(void); +extern void sub_8013878(u32 *, s32); + +extern void AddMenuCursorSprite(u32 *); +extern void sub_8013984(u32 *); +extern void sub_802F2E8(u32); +extern void sub_802EFEC(u32); +extern void sub_802F148(void); +extern void sub_802F184(void); +extern void sub_802F1E8(void); +extern void sub_802F004(); +extern void sub_802F088(); +extern void sub_801B72C(void); +extern u32 sub_801B6AC(void); +extern void sub_802F108(void); +extern s32 sub_80144A4(s32 *); +extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); +extern void sub_803B35C(void *, u32 *); +extern void sub_802DE84(u32 *); +extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); +extern void sub_802CDD4(u32); +extern void sub_802CED8(u32); +extern void sub_802CFD0(void); +extern u8 sub_802CEBC(void); +extern u32 sub_802CE5C(u32); +extern void sub_802CF14(void); +extern u8 sub_8012FD8(u32 *r0); +extern void sub_8013114(u32 *, s32 *); +extern u32 sub_802DEE0(void); +extern void sub_802DF24(void); +extern void sub_808DA34(u8 *buffer, struct PokemonStruct *pokemon); +extern struct PokemonStruct *sub_808D33C(void); +extern void sub_802F6FC(void); +extern void sub_802F718(void); +extern u8 sub_80138B8(u32 *, u32); +extern void sub_8013660(u32 *); +extern u32 GetKeyPress(u32 *); +extern void PlayMenuSoundEffect(u32); +extern void sub_802F300(void); +extern void PlaySound(u32); +extern s32 sub_808D544(u32); +extern void sub_80141B4(u8 *, u32, struct OpenedFile **, u32); +extern u32 sub_801B60C(u32, u8, u8); +extern void sub_8092578(u8 *buffer, u8 index, u8 r2); +void HandleMissionReward(void); + +extern struct UnkTextStruct2 gUnknown_80E03C4; +extern struct UnkTextStruct2 gUnknown_80E03F4; +extern struct UnkTextStruct2 gUnknown_80E041C; +extern u8 gUnknown_80E0434[]; +extern u8 gUnknown_80E045C[]; +extern u8 gUnknown_80E0484[]; +extern u8 gUnknown_80E04F4[]; +extern u8 gUnknown_80E06A8[]; +extern u8 gUnknown_80E0670[]; +extern u8 gUnknown_80E05FC[]; +extern u8 gUnknown_80E04B4[]; +extern u8 gUnknown_80E05C0[]; +extern u8 gUnknown_80E0640[]; + +extern u8 gUnknown_202E038[]; +extern u8 gUnknown_202E088[]; +extern u8 gUnknown_202E628[]; +extern u8 gUnknown_202DEA8[]; +extern u8 gUnknown_202E5D8[]; +extern u8 gAvailablePokemonNames[]; +extern u32 gUnknown_202DE30; +extern const char gUnknown_80E040C[]; +extern const char *gUnknown_80D4970[]; + + + +u32 sub_802EF48(void) +{ + gUnknown_203B30C = MemoryAlloc(sizeof(struct unkStruct_203B30C), 8); + sub_802EFEC(0); + return 1; +} + +u32 sub_802EF6C(void) +{ + switch(gUnknown_203B30C->state) + { + case 0: + case 1: + sub_802F148(); + break; + case 2: + sub_802F184(); + break; + case 3: + sub_802F1E8(); + break; + case 4: + return 3; + case 5: + default: + return 2; + } + return 0; +} + +u8 sub_802EFC4(void) +{ + return gUnknown_203B30C->unk4; +} + +void sub_802EFD0(void) +{ + if(gUnknown_203B30C != NULL) + { + MemoryFree(gUnknown_203B30C); + gUnknown_203B30C = NULL; + } +} + +void sub_802EFEC(u32 newState) +{ + gUnknown_203B30C->state = newState; + sub_802F004(); + sub_802F088(); +} + +void sub_802F004(void) +{ + s32 iVar3; + + sub_8006518(gUnknown_203B30C->unkF0); + switch(gUnknown_203B30C->state) + { + case 2: + sub_802F108(); + gUnknown_203B30C->unkF0[2] = gUnknown_80E03F4; + sub_8012CAC(&gUnknown_203B30C->unkF0[2], gUnknown_203B30C->unkB0); + break; + default: + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B30C->unkF0[iVar3] = gUnknown_80E03C4; + } + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B30C->unkF0, 1, 1); +} + +void sub_802F088(void) +{ + struct unkStruct_803B344 *temp; + + switch(gUnknown_203B30C->state) + { + case 0: + sub_802CDD4(0); + break; + case 1: + sub_802CED8(1); + break; + case 2: + sub_802CFD0(); + sub_8012D60(&gUnknown_203B30C->unk60, gUnknown_203B30C->unkB0, 0, 0, 3, 2); + break; + case 3: + temp = sub_803B344(gUnknown_203B30C->unk4); + sub_803B35C(temp, &gUnknown_203B30C->unk8); + gUnknown_203B30C->unk8 = 3; + gUnknown_203B30C->unk4C = 0; + gUnknown_203B30C->unk58 = temp->unk18; + sub_802DE84(&gUnknown_203B30C->unk8); + } +} + +void sub_802F108(void) +{ + struct unkStruct_203B30C *preload; + const char *blankText; + s32 action_1; + + preload = gUnknown_203B30C; + blankText = NULL; + preload->unkB0[0].text = gUnknown_80E040C; + preload->unkB0[0].menuAction = 2; + action_1 = 1; + preload->unkB0[1].text = *gUnknown_80D4970; + preload->unkB0[1].menuAction = 3; + preload->unkB0[2].text = blankText; + preload->unkB0[2].menuAction = action_1; +} + +void sub_802F148(void) +{ + switch(sub_802CE5C(1)) + { + case 0: + case 1: + break; + case 3: + gUnknown_203B30C->unk4 = sub_802CEBC(); + sub_802EFEC(2); + break; + case 2: + sub_802CF14(); + sub_802EFEC(5); + break; + } +} + +void sub_802F184(void) +{ + s32 menuAction; + + menuAction = 0; + sub_802CE5C(0); + + if (sub_8012FD8(&gUnknown_203B30C->unk60) == 0) { + sub_8013114(&gUnknown_203B30C->unk60, &menuAction); + } + + switch(menuAction) + { + case 2: + sub_802CF14(); + sub_802EFEC(4); + break; + case 3: + sub_802EFEC(3); + break; + case 1: + sub_802EFEC(1); + break; + } +} + +void sub_802F1E8(void) +{ + switch(sub_802DEE0()) + { + case 2: + case 3: + sub_802DF24(); + sub_802EFEC(1); + break; + case 0: + case 1: + break; + } +} + + + +u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1) +{ + struct unkStruct_203B310 *preload; + + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + gUnknown_203B310 = MemoryAlloc(sizeof(struct unkStruct_203B310), 8); + gUnknown_203B310->unk10 = r0; + gUnknown_203B310->itemRewardIndex = 0; + gUnknown_203B310->unk8 = r1; + + // NOTE: dumb var to get correct ordering + preload = gUnknown_203B310; + strcpy(gUnknown_202E5D8, preload->unk10->clientName); + sub_808DA34(gAvailablePokemonNames, sub_808D33C()); + + gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->unk14); + gUnknown_203B310->faceData = NULL; + + gUnknown_203B310->unk20 = 0; + gUnknown_203B310->unk21 = 0; + gUnknown_203B310->unk22 = 0; + gUnknown_203B310->unk1C = 2; + gUnknown_203B310->unk1E = 8; + + if(gUnknown_203B310->faceFile != NULL) + { + gUnknown_203B310->faceData = gUnknown_203B310->faceFile->data; + } + + sub_802F2E8(0); + return 1; +} + +u32 sub_802F298(void) +{ + switch(gUnknown_203B310->state) + { + case 9: + return 3; + case 5: + sub_802F6FC(); + return 0; + default: + sub_802F718(); + return 0; + } +} + +void sub_802F2C0(void) +{ + if(gUnknown_203B310 != NULL) + { + if(gUnknown_203B310->faceFile != 0) + CloseFile(gUnknown_203B310->faceFile); + MemoryFree(gUnknown_203B310); + gUnknown_203B310 = NULL; + } +} + +void sub_802F2E8(u32 newState) +{ + gUnknown_203B310->state = newState; + sub_802F300(); + HandleMissionReward(); +} + +void sub_802F300(void) +{ + s32 iVar3; + switch(gUnknown_203B310->state) + { + case 0: + sub_8006518(gUnknown_203B310->unk24); + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B310->unk24[iVar3] = gUnknown_80E041C; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B310->unk24, 1, 1); + default: + break; + } +} + +void HandleMissionReward(void) +{ + int moneyReward; + const char *rankString; + u8 uVar7; + struct unkStruct_8090F58 local_20; + struct ItemSlot_Alt local_14; + u32 numItems; + u32 index_cast; + u32 index_cast2; + + switch(gUnknown_203B310->state) { + case 0: + // Reward intro.. + moneyReward = gUnknown_203B310->unk10->moneyReward; + if (moneyReward == 0) { + sub_802F2E8(2); + } + else { + gUnknown_202DE30 = moneyReward; + if (gUnknown_203B310->unk8 != '\0') { + sub_80141B4(gUnknown_80E0434,0,&gUnknown_203B310->faceFile,0x10d); + gUnknown_203B310->unk4 = 1; + } + else { + sub_802F2E8(1); + } + } + break; + case 1: + PlaySound(0xcb); + AddToTeamMoney(gUnknown_203B310->unk10->moneyReward); + if (sub_808D544(0) < 2) { + sub_80141B4(gUnknown_80E045C,0,0,0x101); + } + else { + sub_80141B4(gUnknown_80E0484,0,0,0x101); + } + gUnknown_203B310->unk4 = 2; + break; + case 2: + if (gUnknown_203B310->unk10->friendAreaReward == '\0') { + // No friend area reward.. go to item reward + sub_802F2E8(4); + } + else { + sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0); + if (gUnknown_203B310->unk8 != '\0') { + sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d); + gUnknown_203B310->unk4 = 3; + } + else { + sub_802F2E8(3); + } + } + break; + case 3: + // Friend area reward + if (GetFriendAreaStatus(gUnknown_203B310->unk10->friendAreaReward)) { + // We already have the friend area + AddToTeamMoney(1000); + sub_80141B4(gUnknown_80E04F4,0,0,0x101); + } + else + { + if (sub_808D544(0) < 2) { + UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward); + PlaySound(0xce); + sub_80141B4(gUnknown_80E05C0,0,0,0x101); + } + else + { + UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward); + PlaySound(0xce); + sub_80141B4(gUnknown_80E05FC,0,0,0x101); + } + } + gUnknown_203B310->unk4 = 4; + break; + case 4: + uVar7 = gUnknown_203B310->unk10->itemRewards[0]; + if (uVar7 != 0) + { + if (gUnknown_203B310->unk10->moneyReward == 0) { + + // Cast ItemIndex + index_cast = uVar7 << 16; + local_14.temp.full_bits = (local_14.temp.full_bits & 0xff00ffff) | index_cast; + + index_cast2 = local_14.temp.full_bits >> 16; + if (IsThrowableItem(index_cast2)) { + // Cast number items + numItems = (gUnknown_203B310->unk10->numItems << 8); + local_14.temp.full_bits = (local_14.temp.full_bits & 0xffff00ff) | numItems; + } + else { + local_14.temp.full_bits = (local_14.temp.full_bits & 0xffff00ff) | 0; + } + local_14.temp.full_bits = (local_14.temp.full_bits & 0xffffff00) | ITEM_FLAG_EXISTS; + local_20.unk0 = 0; + local_20.unk4 = 0; + local_20.unk8 = 1; + sub_8090E14(gUnknown_202DEA8,(struct ItemSlot *)&local_14,&local_20); + if (gUnknown_203B310->unk8 != '\0') { + sub_80141B4(gUnknown_80E0640,0,&gUnknown_203B310->faceFile,0x10d); + gUnknown_203B310->unk4 = 5; + } + else + { + sub_802F2E8(5); + } + } + else + { + sub_802F2E8(5); + } + } + else + sub_802F2E8(7); + break; + case 5: + // Item reward + if ((gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex]) == 0) { + // No item in this reward slot + sub_802F2E8(6); + } + else { + if ((gUnknown_203B310->itemRewardIndex == 0) && (gUnknown_203B310->unk10->moneyReward == 0)) { + sub_801B60C(0,gUnknown_203B310->unk10->itemRewards[0],gUnknown_203B310->unk10->numItems); + } + else { + sub_801B60C(1,gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex],gUnknown_203B310->unk10->numItems); + } + } + break; + case 6: + // Increase item reward slot index + gUnknown_203B310->itemRewardIndex++; + if(gUnknown_203B310->itemRewardIndex < MAX_ITEM_REWARDS) + sub_802F2E8(5); + else + // No more items to check... move to give points + sub_802F2E8(7); + break; + case 7: + if (gUnknown_203B310->unk10->teamRankPtsReward == 0) { + // No pnts to reward + sub_802F2E8(9); + } + else { + gUnknown_203B310->currTeamRank = GetRescueTeamRank(); + AddToTeamRankPts(gUnknown_203B310->unk10->teamRankPtsReward); + PlaySound(0xcb); + if (gUnknown_203B310->currTeamRank != GetRescueTeamRank()) { + // Rank up time + gUnknown_203B310->unk4 = 8; + } + else { + // No rank up.. close out + gUnknown_203B310->unk4 = 9; + } + gUnknown_202DE30 = gUnknown_203B310->unk10->teamRankPtsReward; + sub_80141B4(gUnknown_80E0670,0,0,0x101); + } + break; + case 8: + // Rank up + PlaySound(0xc9); + gUnknown_203B310->unk4 = 9; + rankString = GetTeamRankString(gUnknown_203B310->currTeamRank); + strcpy(gUnknown_202E038,rankString); + rankString = GetTeamRankString(GetRescueTeamRank()); + strcpy(gUnknown_202E038 + 0x50,rankString); + sub_80141B4(gUnknown_80E06A8,0,0,0x101); + break; + case 9: + break; + } +} + +void sub_802F6FC(void) +{ + switch(sub_801B6AC()) + { + case 2: + case 3: + sub_801B72C(); + sub_802F2E8(6); + break; + case 0: + case 1: + break; + } +} + +void sub_802F718(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + sub_802F2E8(gUnknown_203B310->unk4); + } +} + +u32 sub_802F73C(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2, u8 r3) +{ + if(sub_802FCF0(r0)) + { + return 0; + } + else + { + if(gUnknown_203B314 == NULL) + gUnknown_203B314 = MemoryAlloc(sizeof(struct unkStruct_203B314), 0x8); + gUnknown_203B314->unkB8 = r3; + gUnknown_203B314->unkF0 = r0; + gUnknown_203B314->unkF4 = &gUnknown_203B314->unkF8[gUnknown_203B314->unkF0]; + sub_8006518(gUnknown_203B314->unkF8); + if(r3 != 0) + { + gUnknown_203B314->unkF8[gUnknown_203B314->unkF0] = gUnknown_80E072C; + } + else + { + gUnknown_203B314->unkF8[gUnknown_203B314->unkF0] = gUnknown_80E0714; + } + + gUnknown_203B314->unkF4->unk14 = gUnknown_203B314->unk158; + if(r1 != 0) + { + gUnknown_203B314->unkF8[gUnknown_203B314->unkF0].unk08 = *r1; + } + + sub_8012D08(gUnknown_203B314->unkF4, r2); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B314->unkF8, 1, 1); + sub_8013818(&gUnknown_203B314->unkBC, sub_802FBF4(), r2, r0); + sub_802F9C0(); + sub_802FA50(); + return 1; + } +} + +u32 sub_802F848(s16 param_1) +{ + int iVar2; + s32 param_1_32; + + param_1_32 = param_1; // cast needed + + for( iVar2 = 0; iVar2 < gUnknown_203B314->unkDE; iVar2++ ) { + if (gUnknown_203B314->unk0[iVar2] == param_1_32) { + sub_8013878(&gUnknown_203B314->unkBC,iVar2); + sub_802F9C0(); + sub_802FA50(); + return 1; + } + } + sub_8013878(&gUnknown_203B314->unkBC,0); + return 0; +} + +u32 sub_802F8A0(u8 r0) +{ + if(r0 == 0) + { + sub_8013660(&gUnknown_203B314->unkBC); + return 0; + } + else + { + switch(GetKeyPress(&gUnknown_203B314->unkBC)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + if(sub_80138B8(&gUnknown_203B314->unkBC, 1) != 0) + { + sub_802F9C0(); + sub_802FA50(); + return 1; + } + else + { + return 0; + } + } + } +} + +s16 sub_802F90C(void) +{ + return gUnknown_203B314->unk0[(gUnknown_203B314->unkDA * gUnknown_203B314->unkD8) + gUnknown_203B314->unkD4]; +} + +void sub_802F938(u32 r0) +{ + u8 r0_u8; + + r0_u8 = r0; + + gUnknown_203B314->unkDE = sub_802FBF4(); + sub_8013984(&gUnknown_203B314->unkBC); + sub_802F9C0(); + sub_802FA50(); + + if(r0_u8 != 0) + AddMenuCursorSprite(&gUnknown_203B314->unkBC); +} + +void sub_802F974(void) +{ + if(gUnknown_203B314 != NULL) + { + gUnknown_203B314->unkF8[gUnknown_203B314->unkF0] = gUnknown_80E06FC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B314->unkF8, 1, 1); + MemoryFree(gUnknown_203B314); + gUnknown_203B314 = NULL; + } +} diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c new file mode 100644 index 0000000..873daf4 --- /dev/null +++ b/src/wonder_mail_4.c @@ -0,0 +1,137 @@ +#include "global.h" +#include "text.h" +#include "input.h" +#include "memory.h" + +struct unkStruct_203B320 +{ + // size: 0xC4 + u8 unk0[4]; + u8 fill4[0x20 - 4]; + u32 unk20; + u8 fill24[0x3C - 0x24]; + s16 unk3C; + s16 unk3E; + s16 unk40; + s16 unk42; + s16 unk44; + s16 unk46; + u8 fill48[0x58 - 0x48]; + u32 unk58; + struct UnkTextStruct2 *unk5C; + struct UnkTextStruct2 unk60[4]; + u8 unkC0[4]; +}; +extern struct unkStruct_203B320 *gUnknown_203B320; +extern struct UnkTextStruct2 gUnknown_80E083C; +extern struct UnkTextStruct2 gUnknown_80E0854; + +extern u8 sub_8030C20(u32); +extern s32 sub_8030A74(void); +extern void sub_80308A0(void); +extern void sub_803092C(void); +extern void sub_8012D08(struct UnkTextStruct2 *, s32); +extern void sub_8013818(void *, u32, u32, u32); + +extern u8 sub_80138B8(u8 *, u32); +extern void sub_8013660(u8 *); +extern s32 GetKeyPress(u8 *); +extern void PlayMenuSoundEffect(u32); +extern void sub_8013984(u8 *); +extern void AddMenuCursorSprite(u8 *); + +u32 sub_80306A8(u32 r0, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3) +{ + if(sub_8030C20(r0)) + return 0; + gUnknown_203B320 = MemoryAlloc(sizeof(struct unkStruct_203B320), 0x8); + gUnknown_203B320->unk20 = r0; + gUnknown_203B320->unk58 = r1; + + gUnknown_203B320->unk5C = &gUnknown_203B320->unk60[gUnknown_203B320->unk58]; + sub_8006518(gUnknown_203B320->unk60); + + gUnknown_203B320->unk60[gUnknown_203B320->unk58] = gUnknown_80E0854; + gUnknown_203B320->unk5C->unk14 = gUnknown_203B320->unkC0; + + if(r2 != 0) + { + gUnknown_203B320->unk60[gUnknown_203B320->unk58].unk08 = *r2; + } + + + sub_8012D08(gUnknown_203B320->unk5C, r3); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B320->unk60, 1, 1); + sub_8013818(gUnknown_203B320->fill24, sub_8030A74(), r3, r1); + sub_80308A0(); + sub_803092C(); + return 1; +} + +u32 sub_8030768(u8 r0) +{ + if(r0 == 0) + { + sub_8013660(gUnknown_203B320->fill24); + return 0; + } + switch(GetKeyPress(gUnknown_203B320->fill24)) + { + case 4: + PlayMenuSoundEffect(4); + return 4; + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + if(sub_80138B8(gUnknown_203B320->fill24, 1) != 0) + { + sub_80308A0(); + sub_803092C(); + return 1; + } + else + return 0; + } +} + +u8 sub_80307EC(void) +{ + return gUnknown_203B320->unk0[(gUnknown_203B320->unk42 * gUnknown_203B320->unk40) + gUnknown_203B320->unk3C]; +} + +void sub_8030810(u32 r0) +{ + u8 r0_u8; + + r0_u8 = r0; // cast needed.. + + gUnknown_203B320->unk46 = sub_8030A74(); + sub_8013984(gUnknown_203B320->fill24); + + sub_80308A0(); + sub_803092C(); + if(r0_u8 != 0) + AddMenuCursorSprite(gUnknown_203B320->fill24); +} + +void sub_803084C() +{ + if(gUnknown_203B320 != NULL) + { + gUnknown_203B320->unk60[gUnknown_203B320->unk58] = gUnknown_80E083C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B320->unk60, 1, 1); + MemoryFree(gUnknown_203B320); + gUnknown_203B320 = NULL; + } +} + +u8 *sub_8030894() +{ + return gUnknown_203B320->unk0; +} diff --git a/src/wonder_mail_pre.c b/src/wonder_mail_pre.c deleted file mode 100644 index 34cbaea..0000000 --- a/src/wonder_mail_pre.c +++ /dev/null @@ -1,305 +0,0 @@ -#include "global.h" -#include "file_system.h" -#include "input.h" -#include "pokemon.h" -#include "sub_8095228.h" -#include "wonder_mail.h" -#include "memory.h" - - -extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; -extern char gUnknown_202E5D8[0x50]; -extern char gAvailablePokemonNames[0x50]; - -extern void sub_8029B34(void); -extern void sub_8029AD8(void); -extern void sub_8029AF4(void); -extern void sub_8029A88(void); -extern void sub_8029AB0(void); -extern void sub_80297B8(void); -extern void sub_80297D4(void); -extern void sub_8029884(void); -extern void sub_8029944(void); -extern void sub_80299AC(void); -extern void sub_80299D8(void); -extern void sub_8029A6C(void); -extern void sub_8028CE0(void); -extern void sub_8028BF0(void); -extern void sub_8029A18(void); -extern void sub_80295A8(void); -extern void sub_8029668(void); -extern void sub_8029684(void); -extern void sub_8029740(void); -extern void sub_80295D8(void); -extern void sub_802979C(void); -extern void sub_8029358(void); -extern void sub_8029374(void); -extern void sub_802939C(void); -extern void sub_8028F58(void); -extern void sub_8028F30(void); -extern void sub_8028F04(void); -extern void sub_8028ED4(void); -extern void sub_80293D8(void); -extern void sub_80293F4(void); -extern void sub_8028DE8(u32); -extern void sub_8028EAC(void); -extern void sub_802955C(void); -extern void sub_80292A4(void); -extern void sub_80292EC(void); -extern void sub_802933C(void); -extern void sub_802958C(void); -extern void sub_8029208(void); -extern void sub_8028E84(void); -extern void sub_8028F80(void); -extern void sub_8028FC0(void); -extern void sub_8028FDC(void); -extern void sub_8028E54(void); -extern void sub_8028E24(void); -extern void sub_8028E08(void); -extern void sub_80290D4(void); -extern void sub_80290F0(void); -extern void sub_80291AC(void); -extern void sub_8029044(void); -extern void sub_8028CFC(void); -extern void sub_8028D4C(void); -extern void sub_8031E10(void); -extern void sub_8023C60(void); -extern void sub_803084C(void); -extern void sub_80155F0(void); -extern void sub_80310B4(void); -extern void sub_8030DE4(void); -extern void sub_802453C(void); - -u32 sub_8027F88(void) -{ - char *monName; - struct OpenedFile *faceFile; - s32 counter; - - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - gUnknown_203B2C0 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C0), 8); - MemoryFill8((u8 *)gUnknown_203B2C0, 0, sizeof(struct WonderMailStruct_203B2C0)); - gUnknown_203B2C0->unk53C = 0; - gUnknown_203B2C0->unk218 = -1; - gUnknown_203B2C0->unk544 = -1; - CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); - monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gAvailablePokemonNames, monName); - faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); - gUnknown_203B2C0->faceFile = faceFile; - gUnknown_203B2C0->faceData = faceFile->data; - gUnknown_203B2C0->unk42C = 0; - gUnknown_203B2C0->unk42D = 0; - gUnknown_203B2C0->unk42E = 0; - gUnknown_203B2C0->unk428 = 2; - gUnknown_203B2C0->unk42A = 8; - for(counter = 0; counter < PASSWORD_BUFFER_SIZE; counter++){ - gUnknown_203B2C0->passwordBuffer[counter] = 0; - } - gUnknown_203B2C0->unk0 = 0x3D; - sub_8028B04(0); // Set initial state to 0? - return 1; -} - -u32 sub_8028078(void) -{ - - switch(gUnknown_203B2C0->state) { - case 0x3c: - sub_8029B34(); - break; - case 0x3a: - sub_8029AD8(); - break; - case 0x3b: - sub_8029AF4(); - break; - case 0x38: - sub_8029A88(); - break; - case 0x37: - sub_8029AB0(); - break; - case 0x32: - sub_80297B8(); - break; - case 0x33: - sub_80297D4(); - break; - case 0x34: - sub_8029884(); - break; - case 0x35: - sub_8029944(); - break; - case 0x31: - sub_80299AC(); - break; - case 0x36: - sub_80299D8(); - break; - case 0x30: - sub_8029A6C(); - break; - case 0x2e: - sub_8029A18(); - break; - case 0x2d: - sub_80295A8(); - break; - case 0x29: - sub_8029668(); - break; - case 0x2b: - sub_8029684(); - break; - case 0x2c: - sub_8029740(); - break; - case 0x2a: - sub_80295D8(); - break; - case 0x2f: - sub_802979C(); - break; - case 9: - sub_8029358(); - break; - case 0x23: - sub_8029374(); - break; - case 0x24: - sub_802939C(); - break; - case 0x26: - sub_80293D8(); - break; - case 0x27: - sub_80293F4(); - break; - case 0x28: - sub_802955C(); - break; - case 4: - sub_80292A4(); - break; - case 6: - sub_80292EC(); - break; - case 7: - sub_802933C(); - break; - case 5: - sub_802958C(); - break; - case 8: - sub_8029208(); - break; - case 0x1a: - sub_8028DE8(1); - break; - case 0x1b: - sub_8028F80(); - break; - case 0x1c: - case 0x1d: - sub_8028FC0(); - break; - case 0x22: - sub_8028FDC(); - break; - case 0x1e: - sub_80290D4(); - break; - case 0x20: - sub_80290F0(); - break; - case 0x21: - sub_80291AC(); - break; - case 0x1f: - sub_8029044(); - break; - case 10: - sub_8028CFC(); - break; - case 0xb: - sub_8028D4C(); - break; - case 0xd: - case 0xf: - sub_8028DE8(10); - break; - case 0x11: - sub_8028E08(); - break; - case 0xc: - case 0xe: - case 0x10: - sub_8028DE8(0x19); - break; - case 0x12: - sub_8028E24(); - break; - case 0x13: - sub_8028E54(); - break; - case 0x17: - sub_8028E84(); - break; - case 0x18: - sub_8028EAC(); - break; - case 0x19: - sub_8028ED4(); - break; - case 0x14: - sub_8028F04(); - break; - case 0x15: - sub_8028F30(); - break; - case 0x16: - sub_8028F58(); - break; - case 0: - case 1: - sub_8028BF0(); - break; - case 2: - case 0x25: - case 0x39: - sub_8028CE0(); - break; - case 3: - return 3; - } - return 0; -} - -s32 sub_80282DC(u8 *r0) -{ - *r0 = gUnknown_203B2C0->unk218; - return gUnknown_203B2C0->unk53C; -} - -void sub_80282FC(void) -{ - if (gUnknown_203B2C0 != NULL) { - CloseFile(gUnknown_203B2C0->faceFile); - MemoryFree(gUnknown_203B2C0); - gUnknown_203B2C0 = NULL; - sub_8031E10(); - sub_8023C60(); - sub_803084C(); - sub_80155F0(); - sub_80310B4(); - sub_8030DE4(); - sub_802453C(); - } -} - -void nullsub_130(void) -{ -} |