From 377bd14ea67d6177250fb401e12d7dfcf44e2cf6 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 9 Jun 2021 22:54:21 -0500 Subject: Dungeon pokemon/Floor ID JSON Part 1 (#39) * move Thunderwave and Tiny Woods pokemon to json * rule tweaking to actually build tool before parsing JSON * delete .inc pokemon for tiny Woods and Thunderwave * silence git complaining about br_ips and ips_patch * use defines for species and pass the header file for species * convert sinister woods * convert MtThunderPeak * convert silent chasm * add trial floor_id w/ tiny woods * change make rule name to fix compile * MtSteel converted and bugfix * convert few floor headers and great canyon pokemon * code cleanup * unify unkData into UnkTextStruct2 * more code cleanup and some text decomp * doc more funcs and decomp/split some stuff * document more save stuff * more save work and move some data * pika sniped UpdateNatureTotal * decomp a litle and convert a few more dungeons * better scanning for json files * mt freeze and peak --- src/adventure_log.c | 26 +-- src/adventure_log_menu.c | 2 +- src/code_2.c | 19 +-- src/code_800D090.c | 2 +- src/code_80118A4.c | 10 +- src/code_8012A18_1.c | 9 +- src/code_801C620.c | 17 +- src/code_801D760.c | 38 ++--- src/code_801DCC4.c | 71 ++++++-- src/code_8027C84_pre.c | 86 ---------- src/code_80521D0_1.c | 25 +-- src/code_808DAB4.c | 21 --- src/code_8097670.c | 188 +++++++++++++++++++++ src/code_8098BDC.c | 12 +- src/debug.c | 49 +++++- src/debug_menu.c | 36 ++-- src/debug_menu_1.c | 17 +- src/debug_menu_2.c | 186 +++++++++++++++++++++ src/debug_menu_mid.c | 102 +++++------- src/ds_menus.c | 2 +- src/exclusive_pokemon.c | 2 +- src/felicity_bank.c | 18 +- src/friend_area.c | 8 +- src/friend_area_1.c | 2 +- src/friend_area_action_menu.c | 246 ++++++++++++++++++++++++++++ src/friend_area_action_menu_1.c | 122 ++++++++++++++ src/friend_rescue.c | 2 +- src/gulpin_shop.c | 158 ++++++++++++++++++ src/items.c | 9 +- src/kangaskhan_storage.c | 10 +- src/kangaskhan_storage_2.c | 94 ++++++++++- src/kecleon_items.c | 10 +- src/kecleon_items_1.c | 20 +-- src/load_screen.c | 71 ++++---- src/main.c | 12 +- src/main_menu.c | 13 +- src/main_menu_1.c | 20 +-- src/makuhita_dojo.c | 15 +- src/memory_mid.c | 20 +-- src/other_menus.c | 54 +++--- src/personality_test.c | 169 ++++++------------- src/play_time.c | 6 +- src/pokemon.c | 12 +- src/pokemon_1.c | 9 + src/pokemon_mid.c | 38 ++--- src/post_office_guide.c | 27 ++- src/rescue_team_info.c | 6 +- src/save.c | 352 ++++++++++++++++++++-------------------- src/text_1.c | 27 +++ src/trade_items_menu.c | 46 +++--- src/unk_menu_203B360.c | 19 +-- src/unk_menu_203B360_1.c | 12 +- src/unk_menu_203B364.c | 19 +-- src/wonder_mail.c | 158 +++++++++--------- src/wonder_mail_2.c | 29 ++-- src/wonder_mail_main_menu.c | 23 ++- src/wonder_mail_pre.c | 6 +- 57 files changed, 1794 insertions(+), 988 deletions(-) delete mode 100644 src/code_8027C84_pre.c delete mode 100644 src/code_808DAB4.c create mode 100644 src/code_8097670.c create mode 100644 src/debug_menu_2.c create mode 100644 src/friend_area_action_menu.c create mode 100644 src/friend_area_action_menu_1.c create mode 100644 src/gulpin_shop.c create mode 100644 src/text_1.c (limited to 'src') diff --git a/src/adventure_log.c b/src/adventure_log.c index 4c9b10f..f7c2250 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -2,15 +2,7 @@ #include "input.h" #include "gba/io_reg.h" #include "memory.h" - -struct unkData -{ - u8 unk0[14]; - u16 unkD; - u16 unk10; - u16 unk12; - u8 *unk14; -}; +#include "text.h" struct AdventureLog { @@ -22,8 +14,8 @@ struct AdventureLog u16 unk20; u8 fill22[0x34 - 0x22]; u32 unk34; - struct unkData *unk38; - struct unkData unk3C[3]; + struct UnkTextStruct2 *unk38; + struct UnkTextStruct2 unk3C[3]; u8 fill84[0x9C - 0x84]; u8 unk9C; /* 0x9D */ u8 currPage_u8; @@ -33,19 +25,19 @@ struct AdventureLog extern struct AdventureLog *gAdventureLog; -const struct unkData gUnknown_80E1FF0 = { +const struct UnkTextStruct2 gUnknown_80E1FF0 = { 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, NULL }; -const struct unkData gUnknown_80E2008 = { +const struct UnkTextStruct2 gUnknown_80E2008 = { 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x1A, 0x00, 0x04, + 0x1A, 0x04, 0x06, 0x00, NULL }; @@ -55,8 +47,6 @@ const u8 gAdventureLogHeaderText[] = "Adventure Log"; const u8 gUnknown_80E2030[] = "~95~95~95~95~95~95~95~95~95~95~95~95~95~95~95 "; // string of ??????? const u8 fill_adven[] = "pksdir0"; -extern void sub_8006518(struct unkData *); -extern void sub_800641C(void *, u32, u32); void sub_8032084(); void DisplayAdventureLog(); extern void sub_8013818(void *, u32, u32, u32); @@ -145,7 +135,7 @@ void sub_8032084(void) sVar2 = sub_80095E4(gAdventureLog->unk1A,0xc) + 2 << 0x10; // TODO needs asr r3, r0, r16 // and lsr r0, r0, r16 - gAdventureLog->unk3C[gAdventureLog->unk34].unkD = sVar2; + gAdventureLog->unk3C[gAdventureLog->unk34].unkE = sVar2; // Good past here except regs for this store gAdventureLog->unk3C[gAdventureLog->unk34].unk10 = sVar2 + 2; ResetUnusedInputStruct(); diff --git a/src/adventure_log_menu.c b/src/adventure_log_menu.c index b935716..0f9e9a7 100644 --- a/src/adventure_log_menu.c +++ b/src/adventure_log_menu.c @@ -2,8 +2,8 @@ #include "input.h" #include "main_menu.h" #include "adventure_log.h" +#include "text.h" -extern void sub_800641C(u8 *, u32, u32); extern void CreateAdventureLogScreen(u32); extern u32 HandleAdventureLogInput(u32); extern void CleanAdventureLogScreen(); diff --git a/src/code_2.c b/src/code_2.c index c4362b3..55f802b 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -9,18 +9,19 @@ #include "play_time.h" #include "save.h" #include "gUnknown_203B46C.h" +#include "text.h" +#include "exclusive_pokemon.h" +#include "pokemon.h" +#include "rescue_team_info.h" extern void NDS_DebugInit(void); extern void sub_801180C(void); extern void NDS_LoadOverlay_GroundMain(void); extern void sub_8014144(void); -extern void LoadMonsterParameters(void); extern void sub_8097670(void); extern void LoadGameOptions(void); extern void sub_8094C14(void); -extern void LoadExclusivePokemon(void); extern void LoadItemParameters(void); -extern void LoadRescueTeamInfo(void); extern void LoadWazaParameters(void); extern void sub_80950BC(void); extern void sub_80958E8(void); @@ -35,15 +36,13 @@ extern void sub_80015C0(u32, u32); extern u32 sub_8001658(u32, u32); extern void sub_800A8F8(u32); extern void ResetSprites(u32); -extern void xxx_update_some_bg_tiles(u32); extern void sub_80097B0(void); extern void sub_800CDA8(u32); -extern void sub_800641C(u32, u32, u32); extern void LoadTitleScreen(void); extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *); extern void sub_80095CC(u32, u32); extern void InitMainMenu(void); -extern u8 sub_80363E0(void); +extern bool8 sub_80363E0(void); extern void SetUpMenu(void); extern u32 UpdateMenu(void); extern void CleanUpMenu(void); @@ -139,10 +138,10 @@ void GameLoop(void) xxx_update_stuff(0); } if (tmp3) { - sub_8012468(); - while ((u8)(tmp3 = sub_8012484())) + PrepareSavePakRead(); + while ((tmp3 = ReadSavePak())) xxx_update_stuff(0); - sub_8012558(); + FinishReadSavePak(); } tmp3 = 1; StartNewBGM(MUS_LOADING_SCREEN); @@ -150,7 +149,7 @@ void GameLoop(void) sub_80095CC(0, 20); InitMainMenu(); while (1) { - if ((u8)sub_80363E0()) { + if (sub_80363E0()) { if (gRealInputs.pressed & L_BUTTON) { flag = FALSE; SetBGOBJEnableFlags(19); diff --git a/src/code_800D090.c b/src/code_800D090.c index fc93392..45f89f7 100644 --- a/src/code_800D090.c +++ b/src/code_800D090.c @@ -76,7 +76,7 @@ void sub_800D098(void) while(REG_KEYINPUT != KEYS_MASK){} // All buttons } -void sub_800D158(u8 *buffer, const char *text, ...) +void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...) { va_list vArgv; va_start(vArgv, text); diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 815a737..d6832ba 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -41,11 +41,11 @@ struct UnkBgStruct extern struct UnkBgStruct *gUnknown_203B0E4; -extern u16 gUnknown_80D4144[]; -extern s16 gUnknown_202DE20; -extern s16 gUnknown_202DE22; -extern s16 gUnknown_202DE24; -extern u32 gUnknown_202DE1C; +extern const u16 gUnknown_80D4144[8]; +EWRAM_DATA u32 gUnknown_202DE1C; +EWRAM_DATA s16 gUnknown_202DE20; +EWRAM_DATA s16 gUnknown_202DE22; +EWRAM_DATA s16 gUnknown_202DE24; void nullsub_8(u32); void sub_8005838(u32, u32); diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c index 62dc64d..e91d971 100644 --- a/src/code_8012A18_1.c +++ b/src/code_8012A18_1.c @@ -3,16 +3,17 @@ #include "file_system.h" #include "memory.h" #include "input.h" - -extern void sub_800641C(u32, u32, u32); +#include "text.h" struct unkStruct_203B200 { + // size: 0x50 u32 unk0; u32 unk4; u8 *pokeName; s32 state; /* 0x10 */ struct MenuItem menus[3]; + u8 fill[0x50 - 0x28]; }; extern struct unkStruct_203B200 *gUnknown_203B200; extern const char *gUnknown_80D4920; @@ -94,7 +95,7 @@ u32 sub_801602C(u32 r0, u8 *name) { ResetUnusedInputStruct(); sub_800641C(0, 1, 1); - gUnknown_203B200 = MemoryAlloc(0x50, 8); + gUnknown_203B200 = MemoryAlloc(sizeof(struct unkStruct_203B200), 8); gUnknown_203B200->unk0 = r0; gUnknown_203B200->pokeName = name; switch(r0) @@ -139,8 +140,6 @@ u32 sub_8016080(void) return 0; } -extern void MemoryFree(void *); - void sub_80160D8(void) { if(gUnknown_203B200 != NULL) diff --git a/src/code_801C620.c b/src/code_801C620.c index 66269c9..c2c2c44 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -1,12 +1,7 @@ #include "global.h" #include "input.h" #include "memory.h" - -struct unkData -{ - u8 unk0[24]; -}; - +#include "text.h" struct subStruct_203B240 { @@ -16,6 +11,7 @@ struct subStruct_203B240 struct unkStruct_203B240 { + // size: 0x94 s32 unk0; u8 unk4; u8 fill5[3]; @@ -25,8 +21,10 @@ struct unkStruct_203B240 u8 fill14[0x20 - 0x18]; u32 unk20; u32 unk24; - struct unkData unk28[4]; + struct UnkTextStruct2 unk28[4]; u32 unk88; + u32 unk8C; + u32 unk90; }; extern struct unkStruct_203B240 *gUnknown_203B240; @@ -38,8 +36,7 @@ extern u8 gAvailablePokemonNames[0x58]; extern void ResetSprites(u32); extern void sub_801317C(u32 *); -extern void sub_80140B4(struct unkData *); -extern void sub_800641C(struct unkData *,u32, u32); +extern void sub_80140B4(struct UnkTextStruct2 *); extern void sub_8014FF0(u32, u32, char *, u32, u32); @@ -62,7 +59,7 @@ void sub_801C848(); u32 sub_801C620(u8 param_1) { ResetSprites(1); - gUnknown_203B240 = MemoryAlloc(0x94,8); + gUnknown_203B240 = MemoryAlloc(sizeof(struct unkStruct_203B240),8); gUnknown_203B240->unk4 = param_1; sub_801317C(&gUnknown_203B240->unk88); gUnknown_203B240->unk24 = 0; diff --git a/src/code_801D760.c b/src/code_801D760.c index be96c88..3b07d05 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -4,12 +4,7 @@ #include "gUnknown_203B460.h" #include "memory.h" #include "input.h" - -struct unkData -{ - u8 unk0[0x14]; - u32 *unk14; -}; +#include "text.h" struct unkStruct_203B258 { @@ -18,16 +13,14 @@ struct unkStruct_203B258 u32 unk14; u8 fill18[0x34 - 0x18]; u32 unk34; - struct unkData *unk38; - struct unkData unk3C[4]; - u32 unk9C; + struct UnkTextStruct2 *unk38; + struct UnkTextStruct2 unk3C[4]; + u8 unk9C[4]; }; extern struct unkStruct_203B258 *gUnknown_203B258; -extern struct unkData gUnknown_80DBF88; +extern struct UnkTextStruct2 gUnknown_80DBF88; -extern void sub_800641C(struct unkData *, u32, u32); -extern void sub_8006518(struct unkData *); extern void sub_8013818(void *, u32, u32, u32); extern void sub_8013878(void *, s32); extern u8 sub_80138B8(void *, u32); @@ -62,7 +55,6 @@ extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, s32 *); extern const char *sub_8098FB4(); extern void xxx_format_string(const char *, u8 *, u32 **, u32); -extern const char *GetFriendAreaName(u8); extern s32 sub_8008ED0(u8 *); extern void xxx_call_draw_string(s32 size, u32, u8 *, u32, u32); extern const char *GetFriendAreaName(u8); @@ -73,7 +65,7 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); void LoadTeamRankBadge(u32, u32, u32); -extern void sub_800D158(u8 *, u32 *, ...); +extern void ExpandPlaceholdersBuffer(u8 *, u32 *, ...); extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray); extern void sub_8007E20(u32, u32, u32, u32, u32, u8 *, u32); @@ -316,7 +308,7 @@ void sub_801D894(void) // Stored on stack u32 *preload_string; u32 *r5; // R5 - u8 auStack116 [96]; // sp +4 + u8 buffer [96]; // sp +4 if (gUnknown_203B250->currFriendAreaLocation == NONE) { location = sub_8098FB4(); @@ -325,12 +317,12 @@ void sub_801D894(void) location = GetFriendAreaName(gUnknown_203B250->currFriendAreaLocation); } // TODO this is def a hack - xxx_format_string(location, auStack116, &preload_string + 1, 0); - location_length = sub_8008ED0(auStack116); + xxx_format_string(location, buffer, &preload_string + 1, 0); + location_length = sub_8008ED0(buffer); x_coord = (128 - location_length) / 2; // Centers the location name sub_8008C54(1); sub_80073B8(1); - xxx_call_draw_string(x_coord, 4, auStack116, 1, 0); + xxx_call_draw_string(x_coord, 4, buffer, 1, 0); sub_80073E0(1); sub_8008C54(2); sub_80073B8(2); @@ -339,10 +331,10 @@ void sub_801D894(void) // Have to load before TeamRank funcs r5 = &gUnknown_80DBF3C; // %s #C5%d#R Pts. rank = GetRescueTeamRank(); - sub_800D158(auStack116, r5, GetTeamRankString(rank), GetTeamRankPts()); - xxx_call_draw_string(32, 4, auStack116, 2, 0); - sub_800D158(auStack116, &gUnknown_80DBF4C, gUnknown_203B460->teamMoney); - xxx_call_draw_string(32, 18, auStack116, 2, 0); + ExpandPlaceholdersBuffer(buffer, r5, GetTeamRankString(rank), GetTeamRankPts()); + xxx_call_draw_string(32, 4, buffer, 2, 0); + ExpandPlaceholdersBuffer(buffer, &gUnknown_80DBF4C, gUnknown_203B460->teamMoney); + xxx_call_draw_string(32, 18, buffer, 2, 0); sub_80073E0(2); } @@ -374,7 +366,7 @@ u32 sub_801D9E4(void) gUnknown_203B258->unk38 = &gUnknown_203B258->unk3C[3]; sub_8006518(gUnknown_203B258->unk3C); gUnknown_203B258->unk3C[gUnknown_203B258->unk34] = gUnknown_80DBF88; - gUnknown_203B258->unk38->unk14 = &gUnknown_203B258->unk9C; + gUnknown_203B258->unk38->unk14 = gUnknown_203B258->unk9C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B258->unk3C,1,1); sub_8013818(gUnknown_203B258,0xe5,10,gUnknown_203B258->unk34); diff --git a/src/code_801DCC4.c b/src/code_801DCC4.c index d713bd6..0fde1a2 100644 --- a/src/code_801DCC4.c +++ b/src/code_801DCC4.c @@ -2,16 +2,7 @@ #include "memory.h" #include "menu.h" #include "gUnknown_203B46C.h" - -struct unkData -{ - u8 unk0[0xB]; - u16 unkB; - u16 unkD; - u16 unk10; - u16 unk12; - u32 *unk14; -}; +#include "text.h" struct unkStruct_203B25C { @@ -25,7 +16,7 @@ struct unkStruct_203B25C struct MenuItem unk6C[3]; u8 fill84[0xAC - 0x84]; u16 unkAC[8]; - struct unkData unkBC[4]; + struct UnkTextStruct2 unkBC[4]; }; @@ -58,9 +49,12 @@ extern void sub_801E2C4(void); extern s32 sub_80144A4(s32 *); extern void sub_8094C14(void); extern void sub_8099690(u32); +extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern struct UnkSaveStruct1 *gUnknown_203B46C; extern struct unkStruct_203B25C *gUnknown_203B25C; +extern const struct UnkTextStruct2 gUnknown_80DBFCC; +extern const struct UnkTextStruct2 gUnknown_80DBFB0; extern const char gOthers_MenuOption[]; extern const char gUnknown_80DBFEC[]; @@ -131,6 +125,60 @@ void sub_801DD6C(u32 newState) sub_801DED0(); } +#ifdef NONMATCHING +void sub_801DD84(void) +{ + s32 iVar3; + sub_8006518(gUnknown_203B25C->unkBC); + switch(gUnknown_203B25C->state) + { + case 0: + CreateOthersMenu(); + // TODO probably could be cleaned up to actually match + iVar3 = 0; + if (gUnknown_203B25C->unkAC[iVar3] == 0) { + gUnknown_203B25C->unk18 = gUnknown_203B25C->unk6C[iVar3].menuAction; + } + else { + do { + iVar3++; + if(iVar3 > 7) + break; + if(gUnknown_203B25C->unkAC[iVar3] == 0){ + gUnknown_203B25C->unk18 = gUnknown_203B25C->unk6C[iVar3].menuAction; + break; + } + } while (iVar3 < 8); + } + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFCC; + } + gUnknown_203B25C->unkBC[0] = gUnknown_80DBFB0; + sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->unk6C); + gUnknown_203B25C->unkBC[0].unk0c = 0xA; + break; + case 1: + CreateOthersMenu(); + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0; + } + gUnknown_203B25C->unkBC[0] = gUnknown_80DBFCC; + sub_8012CAC(&gUnknown_203B25C->unkBC[0], gUnknown_203B25C->unk6C); + gUnknown_203B25C->unkBC[0].unk0c = 0xA; + break; + default: + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B25C->unkBC[iVar3] = gUnknown_80DBFB0; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B25C->unkBC, 1, 1); +} +#else NAKED void sub_801DD84(void) { @@ -297,6 +345,7 @@ void sub_801DD84(void) "\t.align 2, 0\n" "_0801DECC: .4byte gUnknown_203B25C"); } +#endif void sub_801DED0(void) { diff --git a/src/code_8027C84_pre.c b/src/code_8027C84_pre.c deleted file mode 100644 index 9ff107e..0000000 --- a/src/code_8027C84_pre.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "global.h" - - -struct UnkOtherStructTemp -{ - /* 0x0 */ u32 unk0; - /* 0x4 */ u32 unk4; - /* 0x8 */ u32 unk8; - /* 0xC */ u32 unkC; - /* 0x10 */ u32 unk10; - /* 0x14 */ u32 unk14; - /* 0x18 */ u32 unk18; - /* 0x1C */ u32 unk1C; - /* 0x20 */ u16 *unk20; - /* 0x24 */ u16 unk24; - /* 0x26 */ u16 unk26; - /* 0x28 */ u16 unk28; - /* 0x2A */ u16 unk2A; -}; - -struct UnkStructTemp -{ - /* 0x0 */ u32 unk0; - /* 0x4 */ u32 unk4; - /* 0x8 */ u32 unk8; - /* 0xC */ u32 unkC; - /* 0x10 */ u32 unk10; - /* 0x14 */ u32 unk14; - /* 0x18 */ u32 unk18; - /* 0x1C */ u32 unk1C; - /* 0x20 */ u32 unk20; - /* 0x24 */ u16 unk24; - /* 0x26 */ u16 unk26; - /* 0x28 */ u16 unk28; - /* 0x2A */ u16 *unk2A; -}; - - -extern struct UnkStructTemp *gUnknown_203B2BC; -u32 sub_801B410(); -void sub_801B450(); -void sub_8027184(u8 r0); -u32 sub_801EF38(u8 r0); -struct UnkOtherStructTemp *sub_801F194(); -void sub_8027184(u8 r0); -void sub_801F214(); - -void sub_8027C84() -{ - u32 temp = sub_801B410(); - if(temp <= 1) - return; - if(temp > 3) - return; - sub_801B450(); - sub_8027184(0xB); -} - -//void sub_8027CA0() -//{ -// struct UnkOtherStructTemp *temp_store; -// u32 temp = sub_801EF38(1); -// if(temp > 4) -// return; -// switch(temp) -// { -// case 0: -// case 1: -// break; -// case 2: -// sub_801F214(); -// sub_8027184(0x2); -// return; -// case 3: -// case 4: -// temp_store = sub_801F194(); -// gUnknown_203B2BC->unk20 = temp_store; -// // TODO missing -// // lsls r0, 3 -// // adds r0, r1, r0 -// // Why are we shifting the pointer by 3? -// gUnknown_203B2BC->unk24 = temp_store->unk2A[temp_store]; -// sub_8027184(0x10); -// break; -// } -//} diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c index ec29b38..c70de32 100644 --- a/src/code_80521D0_1.c +++ b/src/code_80521D0_1.c @@ -110,7 +110,7 @@ extern void sub_803F878(u32, s32); extern void sub_8086A70(struct unkDungeon_8041D5C *, u32, u32); extern void sub_8085C54(u32, u32, u32, u32, u32); extern void sub_803E9D0(void); -extern void sub_808C4C4(void); +extern void DeoxysScreenFlash(void); extern void sub_8085EB0(); extern void sub_808563C(void *); extern void sub_80858AC(u32 *, u32); @@ -131,7 +131,7 @@ extern void sub_80861B8(struct unkDungeon_8041D5C *, u32, u32); void nullsub_99(); extern u32 sub_8084100(s32); -extern u8 *gFriendAreas; +extern bool8 *gFriendAreas; extern void sub_8049884(); extern void sub_8049B8C(); @@ -258,7 +258,7 @@ u8 JirachiFriendAreaSearch(void) unlockCondition = GetFriendAreaUnlockCondition(friendAreaCounter); if (!(unlockCondition == UNLOCK_LEGENDARY_REQUEST)){ if (!(unlockCondition == UNLOCK_WONDER_MAIL)){ - if(gFriendAreas[friendAreaCounter] == FALSE) { + if(!gFriendAreas[friendAreaCounter]) { friendAreas[numUnlockableAreas] = friendAreaCounter; numUnlockableAreas++; } @@ -579,9 +579,9 @@ void DeoxysPreFightDialogue(void) sub_8083EA8(0x1a,0x3c); sub_808C550(); sub_8052910(&gUnknown_81062E8); - sub_808C4C4(); + DeoxysScreenFlash(); sub_8052910(&gUnknown_8106368); - sub_808C4C4(); + DeoxysScreenFlash(); sub_8052910(&gUnknown_8106390); sub_803E708(10,0x46); sub_808563C(sub_808C5AC); @@ -589,7 +589,7 @@ void DeoxysPreFightDialogue(void) } } -void sub_808C4C4(void) +void DeoxysScreenFlash(void) { s32 iVar1; @@ -619,12 +619,12 @@ void sub_808C550(void) sub_803E9D0(); sub_803E46C(0x46); gUnknown_203B418->unk7 = 0; - sub_808C4C4(); + DeoxysScreenFlash(); } void sub_808C590(struct unkDungeon_8041D5C *r0) { - sub_8068FE0(r0, 0x87 << 2, 0); + sub_8068FE0(r0, 0x21C, 0); } void sub_808C5A0(struct unkDungeon_8041D5C *r0) @@ -658,6 +658,7 @@ void sub_808C5C0(void) CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_CELEBI); } +// Dummy Celebi Fight Dialogue?? void nullsub_100(void) { } @@ -1190,7 +1191,7 @@ void MedichamResuceDialogue(void) sub_806CE68(temp, 0); sub_803E708(0x20, 0x46); sub_8042B0C(temp); - sub_8068FE0(temp, 0x87 << 2, 0); + sub_8068FE0(temp, 0x21C, 0); gUnknown_203B418->unk4 = 1; gUnknown_203B418->unk11 = 4; } @@ -1205,7 +1206,7 @@ void sub_808CB5C(void) sub_8083E88(0x72); sub_80854D4(); sub_8085930(4); - sub_8068FE0(temp_2, 0x87 << 2, 0); + sub_8068FE0(temp_2, 0x21C, 0); sub_8085860(temp->unk4, temp->unk6); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM); } @@ -1280,7 +1281,7 @@ void SmeargleRescueDialogue(void) sub_806CE68(temp, 0); sub_803E708(0x20, 0x46); sub_8042B0C(temp); - sub_8068FE0(temp, 0x87 << 2, 0); + sub_8068FE0(temp, 0x21C, 0); gUnknown_203B418->unk4 = 1; gUnknown_203B418->unk11 = 4; @@ -1297,7 +1298,7 @@ void sub_808CD44(void) sub_80854D4(); sub_8085930(4); sub_80855E4(sub_8086A3C); - sub_8068FE0(temp_2, 0x87 << 2, 0); + sub_8068FE0(temp_2, 0x21C, 0); sub_8085860(temp->unk4, temp->unk6 - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE); } diff --git a/src/code_808DAB4.c b/src/code_808DAB4.c deleted file mode 100644 index f606355..0000000 --- a/src/code_808DAB4.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "global.h" - -struct unkStruct_203B45C -{ - u8 unk0; - u8 padding1; - u8 unk2; - u8 padding2; - u8 unk4; - u8 array[0x53]; -}; - -extern struct unkStruct_203B45C *gRecruitedPokemonRef; - -extern void sub_808DE50(void* r0, struct unkStruct_203B45C *r1, u32 r2, u32 r3); - - -void sub_808DE30(void* r0, u32 r1) -{ - sub_808DE50(r0, &gRecruitedPokemonRef[r1], r1, r1 * sizeof(struct unkStruct_203B45C)); -} diff --git a/src/code_8097670.c b/src/code_8097670.c new file mode 100644 index 0000000..388bce6 --- /dev/null +++ b/src/code_8097670.c @@ -0,0 +1,188 @@ +#include "global.h" + +struct unkStruct_203B494 +{ + // size: 0xC8? + u32 unk0; + s32 numAdventures; + s32 unk8; + s32 unkC; + u8 unk10; // location? + u8 unk11; + u8 fill12[2]; + s16 unk14; + s16 unk16; + s16 unk18; + u32 unk1C[0xE]; + u8 fill54[0x8C - 0x54]; + u32 unk8C[0xD]; + union UNKC0{ + s32 unkC0; + s16 unkC0_16; + } UNKC0; +}; + +extern struct unkStruct_203B494 *gUnknown_203B494; +extern struct unkStruct_203B494 gUnknown_2039778; +extern const u8 *gAdventureLogText[]; + +void sub_8097670(void) +{ + gUnknown_203B494 = &gUnknown_2039778; +} + +struct unkStruct_203B494 *sub_8097680(void) +{ + return &gUnknown_2039778; +} + +void sub_8097688(u8 *r0) +{ + gUnknown_203B494->unk10 = r0[0]; + gUnknown_203B494->unk11 = r0[1]; +} + +u8 *sub_809769C(void) +{ + return &gUnknown_203B494->unk10; +} + +void sub_80976A8(void) +{ + s32 iVar2; + + gUnknown_203B494->unk0 = 0; + gUnknown_203B494->unk14 = 0; + gUnknown_203B494->unk16 = 0; + gUnknown_203B494->unk18 = 0; + gUnknown_203B494->UNKC0.unkC0 = 0; + gUnknown_203B494->unk8 = 0; + gUnknown_203B494->unkC = 0; + + for(iVar2 = 0; iVar2 < 0xE; iVar2++) + { + gUnknown_203B494->unk1C[iVar2] = 0; + } + + for(iVar2 = 0; iVar2 < 0xD; iVar2++) + { + gUnknown_203B494->unk8C[iVar2] = 0; + } +} + +void sub_80976F8(u8 r0) +{ + gUnknown_203B494->unk0 |= (1 << r0); +} + +u8 sub_8097710(u8 r0) +{ + if((gUnknown_203B494->unk0 & (1 << r0)) != 0) + return 1; + else + return 0; +} + +const u8 *GetAdventureLogLine(u8 index) +{ + return gAdventureLogText[index]; +} + +void ResetNumAdventures(void) +{ + gUnknown_203B494->numAdventures = 0; +} + +void IncrementNumAdventures(void) +{ + gUnknown_203B494->numAdventures++; + if(gUnknown_203B494->numAdventures > 99999) + gUnknown_203B494->numAdventures = 99999; +} + +s32 GetNumAdventures(void) +{ + return gUnknown_203B494->numAdventures; +} + +void SetNumAdventures(s32 numAdventures) +{ + gUnknown_203B494->numAdventures = numAdventures; +} + +void sub_8097790(void) +{ + gUnknown_203B494->unk8++; + if(gUnknown_203B494->unk8 > 99999) + gUnknown_203B494->unk8 = 99999; + sub_80976F8(8); +} + +s32 sub_80977B8(void) +{ + return gUnknown_203B494->unk8; +} + +void sub_80977C4(s32 r0) +{ + gUnknown_203B494->unk8 = r0; +} + +void sub_80977D0(void) +{ + gUnknown_203B494->unkC++; + if(gUnknown_203B494->unkC > 99999) + gUnknown_203B494->unkC = 99999; + sub_80976F8(9); +} + +s32 sub_80977F8(void) +{ + return gUnknown_203B494->unkC; +} + +void sub_8097804(s32 r0) +{ + gUnknown_203B494->unkC = r0; +} + +void sub_8097810(void) +{ + if(gUnknown_203B494->unk14 < 9999) + gUnknown_203B494->unk14++; + sub_80976F8(0xB); +} + +s16 sub_8097838(void) +{ + return gUnknown_203B494->unk14; +} + +void sub_8097848(void) +{ + if(gUnknown_203B494->unk16 < 9999) + gUnknown_203B494->unk16++; + sub_80976F8(0xA); +} + +s16 sub_8097870(void) +{ + return gUnknown_203B494->unk16; +} + +s16 sub_8097880(void) +{ + return gUnknown_203B494->unk18; +} + +void sub_8097890(void) +{ + if(gUnknown_203B494->UNKC0.unkC0 < 99999) + gUnknown_203B494->UNKC0.unkC0++; + sub_80976F8(0xC); +} + +s16 sub_80978B8(void) +{ + return gUnknown_203B494->UNKC0.unkC0_16; +} diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index f4a745f..c060642 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -257,13 +257,13 @@ bool8 sub_8098E18(s16 r0, u32 r1) } // Unused -u32 sub_8098EB0(u32 r0, u32 r1, u32 r2, u32 r3) +u32 sub_8098EB0(u32 r0) { if(gUnknown_20398A8 == 0) { if(gUnknown_203B49D != 0) { - Log(NULL, &gUnknown_8115FA4, r0, r3); + Log(NULL, &gUnknown_8115FA4, r0); gUnknown_20398A8 = 7; gUnknown_20398AC = 1; gUnknown_20398B0 = r0; @@ -274,11 +274,11 @@ u32 sub_8098EB0(u32 r0, u32 r1, u32 r2, u32 r3) return 0; } -u32 sub_8098F00(u32 r0, u32 r1, u32 r2, u32 r3) +u32 sub_8098F00(u32 r0) { if(gUnknown_20398A8 == 0) { - Log(NULL, &gUnknown_8115FC8, r0, r3); + Log(NULL, &gUnknown_8115FC8, r0); gUnknown_20398A8 = 9; gUnknown_20398AC = 1; gUnknown_20398B0 = r0; @@ -288,11 +288,11 @@ u32 sub_8098F00(u32 r0, u32 r1, u32 r2, u32 r3) return 0; } -u32 sub_8098F44(u32 r0, u32 r1, u32 r2, u32 r3) +u32 sub_8098F44(u32 r0) { if(gUnknown_20398A8 == 0) { - Log(NULL, &gUnknown_8115FE8, r0, r3); + Log(NULL, &gUnknown_8115FE8, r0); gUnknown_20398A8 = 10; gUnknown_20398AC = 1; gUnknown_20398B0 = r0; diff --git a/src/debug.c b/src/debug.c index 0f4cf35..59fdc1a 100644 --- a/src/debug.c +++ b/src/debug.c @@ -9,14 +9,49 @@ extern void Hang(); extern bool32 gNDS_DebugEnabled; extern u8 gUnknown_203B150; -extern const char gUnknown_80D421C[]; -extern const char gNotMountText[]; -extern const char gNotEntryText[]; extern const char gFuncFileLineString[]; -extern const char gFuncFileLineStringWPrefix[]; -extern const char gFuncFileLineString2[]; -extern const char gFatalText[]; -extern const char gUnknown_80D42D4[]; + +ALIGNED(4) const char gNotEntryText[] = _("--- not entry ---"); +ALIGNED(4) const char gFuncFileLineStringWPrefix[] = _("%sfunc = '%s'\n" + "file = '%s' line = %5d\n"); + +ALIGNED(4) const char gFuncFileLineString2[] = _("func = '%s'\n" + "file = '%s' line = %5d\n"); + +ALIGNED(4) const char debug_fill14[] = _("pksdir0"); +ALIGNED(4) const char gUnknown_80D421C[] = _(" Print "); +ALIGNED(4) const char debug_fill13[] = _("pksdir0"); + +ALIGNED(4) const char Performance_Text[] = _("Performance"); +ALIGNED(4) const char MemoryCard_Text[] = _("Memory Card"); +ALIGNED(4) const char Memory_Text[] = _("Memory"); +ALIGNED(4) const char Flag_Text[] = _("Flag"); +ALIGNED(4) const char Se_Text[] = _("Se"); +ALIGNED(4) const char Bgm_Text[] = _("Bgm"); +ALIGNED(4) const char Sound_Text[] = _("Sound"); +ALIGNED(4) const char Dungeon_Text[] = _("Dungeon"); +ALIGNED(4) const char GroundScript_Text[] = _("GroundScript"); +ALIGNED(4) const char Ground_Text[] = _("Ground"); + + +ALIGNED(4) const char gNotMountText[] = _("not mount log system"); +ALIGNED(4) const char debug_fill9[] = _("pksdir0"); +ALIGNED(4) const char debug_fill10[] = _("pksdir0"); +ALIGNED(4) const char debug_fill11[] = _("pksdir0"); +ALIGNED(4) const char debug_fill12[] = _("pksdir0"); + +ALIGNED(4) const char gFatalText[] = _("!!!!! Fatal !!!!!\n"); +ALIGNED(4) const char gUnknown_80D42D4[] = _("%s\n"); + +ALIGNED(4) const char debug_fill0[] = _("pksdir0"); +ALIGNED(4) const char debug_fill1[] = _("pksdir0"); +ALIGNED(4) const char debug_fill2[] = _("pksdir0"); +ALIGNED(4) const char debug_fill3[] = _("pksdir0"); +ALIGNED(4) const char debug_fill4[] = _("pksdir0"); +ALIGNED(4) const char debug_fill5[] = _("pksdir0"); +ALIGNED(4) const char debug_fill6[] = _("pksdir0"); +ALIGNED(4) const char debug_fill7[] = _("pksdir0"); +ALIGNED(4) const char debug_fill8[] = _("pksdir0"); void NDS_DebugInit(void) { diff --git a/src/debug_menu.c b/src/debug_menu.c index 54f25d9..c0c8b68 100644 --- a/src/debug_menu.c +++ b/src/debug_menu.c @@ -6,24 +6,24 @@ extern struct DebugMenu *gUnknown_203B3EC; -const struct unkData gUnknown_80E7D40 = +const struct UnkTextStruct2 gUnknown_80E7D40 = { 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 + 0x00, 0x00, + 0x00, 0x00, + NULL }; -const struct unkData gUnknown_80E7D58 = +const struct UnkTextStruct2 gUnknown_80E7D58 = { 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, - 0x09, 0x00, 0x0b, 0x00, - 0x0b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 + 0x09, 0x0b, + 0x0b, 0x00, + NULL }; extern const char dungeons_string[]; @@ -55,16 +55,14 @@ ALIGNED(4) const char field_map_string[] = _("Field Map"); ALIGNED(4) const char field_string[] = _("Field"); ALIGNED(4) const char dungeons_string[] = _("Dungeons"); -ALIGNED(4) const char debug_fill0[] = _("pksdir0"); -ALIGNED(4) const char debug_fill1[] = _("pksdir0"); -ALIGNED(4) const char debug_fill2[] = _("pksdir0"); -ALIGNED(4) const char debug_fill3[] = _("pksdir0"); -ALIGNED(4) const char debug_fill4[] = _("pksdir0"); -ALIGNED(4) const char debug_fill5[] = _("pksdir0"); -ALIGNED(4) const char debug_fill6[] = _("pksdir0"); - +ALIGNED(4) const char debug_menu_fill0[] = _("pksdir0"); +ALIGNED(4) const char debug_menu_fill1[] = _("pksdir0"); +ALIGNED(4) const char debug_menu_fill2[] = _("pksdir0"); +ALIGNED(4) const char debug_menu_fill3[] = _("pksdir0"); +ALIGNED(4) const char debug_menu_fill4[] = _("pksdir0"); +ALIGNED(4) const char debug_menu_fill5[] = _("pksdir0"); +ALIGNED(4) const char debug_menu_fill6[] = _("pksdir0"); -extern void sub_800641C(struct unkData *, u32, u32); extern void ResetUnusedInputStruct(void); extern u8 sub_8012FD8(struct DebugMenu *); @@ -73,9 +71,9 @@ extern void sub_80976F8(u8); extern void sub_803A3BC(void); extern void sub_803A3A0(void); -extern void SetMenuItems(void *menu, struct unkData *, u32, const struct unkData *, const struct MenuItem *entries, u32, u32, u32); +extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_8035CF4(struct DebugMenu *, u32, u32); -extern void sub_8035CC0(struct unkData *, u32); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); void CreateDebugMenu(void) { diff --git a/src/debug_menu_1.c b/src/debug_menu_1.c index 705a23f..0104c07 100644 --- a/src/debug_menu_1.c +++ b/src/debug_menu_1.c @@ -1,17 +1,12 @@ #include "global.h" - -struct subStruct -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; -}; +#include "pokemon.h" struct unkStruct_203B3F8 { - u8 fill0[8]; - struct subStruct *unk8; + // size: 0x140 + u32 state; + u32 unk4; + struct PokemonStruct *pokemon; u8 fill4[4]; u32 unk10; u8 fill14[0x60 - 0x14]; @@ -61,7 +56,7 @@ void sub_803AFE8(void) default: break; case 3: - gUnknown_203B3F8->unk8->unk3 = gUnknown_203B3F8->unk60; + gUnknown_203B3F8->pokemon->unk3 = gUnknown_203B3F8->unk60; // Fallthrough is needed to match case 2: sub_803ACD0(2); diff --git a/src/debug_menu_2.c b/src/debug_menu_2.c new file mode 100644 index 0000000..158f540 --- /dev/null +++ b/src/debug_menu_2.c @@ -0,0 +1,186 @@ +#include "global.h" +#include "memory.h" +#include "pokemon.h" +#include "text.h" +#include "input.h" +#include "menu.h" + +struct unkStruct_203B3F8 +{ + // size: 0x140 + u32 state; + u32 unk4; + struct PokemonStruct *pokemon; + u32 unkC; + const char *unk10; + u8 fill14[0x60 - 0x14]; + u32 unk60; + u32 unk64; + u32 unk68; + u32 unk6C; + u32 unk70; + u32 unk74; + struct UnkTextStruct2 *unk78; + u32 unk7C; + u32 unk80; + u8 fill84[0x90 - 0x84]; + struct MenuItem unk90[3]; + u8 fillA8[0xD0 - 0xA8]; + u16 unkD0[8]; + struct UnkTextStruct2 unkE0[4]; +}; +extern struct unkStruct_203B3F8 *gUnknown_203B3F8; +extern struct UnkTextStruct2 gUnknown_80E7ED4; +extern struct UnkTextStruct2 gUnknown_80E7EEC; +extern struct UnkTextStruct2 gUnknown_80E7F04; +extern u8 gDebug_NumberText2[]; + +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_8013C68(u32 *); +extern void sub_80073E0(u32); +extern void sub_8023DA4(void); +extern void sub_8012EA4(const char **, u32); +extern void xxx_call_draw_string(u32, u32, u8 *, u32, u32); + +void sub_803ACD0(u32); +extern void sub_803ACE8(); +extern void sub_803AD88(); +extern void sub_803AF38(); +extern void sub_803AF88(); +extern void sub_803AFE8(); +extern void sub_803B034(); +extern void sub_8023868(u32, u32, u32, u32); +extern void sub_8023B7C(u32); +extern void sub_8023DA4(); +extern void sub_8013AA0(u32 *); +extern void sub_803AE58(); +extern void sub_801602C(u32, u8 *); + +extern void sub_803AEB0(); +extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); +extern void sub_8012D60(const char **, struct MenuItem *, u32, u16 *, u32, u32); + +u32 sub_803AC24(void) +{ + gUnknown_203B3F8 = MemoryAlloc(sizeof(struct unkStruct_203B3F8), 8); + sub_803ACD0(0); + return 1; +} + +u32 sub_803AC48(void) +{ + switch(gUnknown_203B3F8->state) + { + case 0: + sub_803ACD0(1); + break; + case 1: + case 2: + sub_803AF38(); + break; + case 3: + sub_803AF88(); + break; + case 5: + sub_803AFE8(); + break; + case 6: + sub_803B034(); + break; + case 4: + case 7: + default: + return 3; + } + return 0; +} + +void sub_803ACB4(void) +{ + if(gUnknown_203B3F8 != NULL) + { + MemoryFree(gUnknown_203B3F8); + gUnknown_203B3F8 = NULL; + } +} + +void sub_803ACD0(u32 newState) +{ + gUnknown_203B3F8->state = newState; + sub_803ACE8(); + sub_803AD88(); +} + +void sub_803ACE8(void) +{ + s32 iVar2; + sub_8006518(gUnknown_203B3F8->unkE0); + switch(gUnknown_203B3F8->state) + { + case 3: + sub_803AEB0(); + gUnknown_203B3F8->unkE0[2] = gUnknown_80E7EEC; + sub_8012CAC(&gUnknown_203B3F8->unkE0[2], gUnknown_203B3F8->unk90); + break; + case 5: + gUnknown_203B3F8->unkE0[3] = gUnknown_80E7F04; + break; + default: + for(iVar2 = 0; iVar2 < 4; iVar2++) + { + gUnknown_203B3F8->unkE0[iVar2] = gUnknown_80E7ED4; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B3F8->unkE0, 1, 1); +} + +void sub_803AD88(void) +{ + switch(gUnknown_203B3F8->state) + { + case 1: + sub_8023868(1, 0, 0, 10); + break; + case 2: + sub_8023B7C(1); + break; + case 3: + sub_8023DA4(); + sub_8012D60(&gUnknown_203B3F8->unk10, gUnknown_203B3F8->unk90, 0, gUnknown_203B3F8->unkD0, gUnknown_203B3F8->unkC, 2); + break; + case 5: + gUnknown_203B3F8->unk70 = 3; + gUnknown_203B3F8->unk68 = 1; + gUnknown_203B3F8->unk6C = 0x64; + gUnknown_203B3F8->unk64 = gUnknown_203B3F8->pokemon->unk3; + gUnknown_203B3F8->unk74 = 3; + gUnknown_203B3F8->unk78 = &gUnknown_203B3F8->unkE0[3]; + gUnknown_203B3F8->unk7C = 0x2C; + gUnknown_203B3F8->unk80 = 0x12; + sub_8013AA0(&gUnknown_203B3F8->unk60); + sub_803AE58(); + break; + case 6: + sub_801602C(2, gUnknown_203B3F8->pokemon->name); + case 0: + case 4: + case 7: + default: + break; + + } +} + +void sub_803AE58(void) +{ + sub_8008C54(gUnknown_203B3F8->unk74); + sub_80073B8(gUnknown_203B3F8->unk74); + xxx_call_draw_string(4, 0, gDebug_NumberText2, gUnknown_203B3F8->unk74, 0); + sub_8013C68(&gUnknown_203B3F8->unk60); + sub_80073E0(gUnknown_203B3F8->unk74); + sub_8023DA4(); + sub_8012EA4(&gUnknown_203B3F8->unk10, 0); +} diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c index 796ac2a..995a30a 100644 --- a/src/debug_menu_mid.c +++ b/src/debug_menu_mid.c @@ -2,26 +2,17 @@ #include "input.h" #include "gUnknown_203B460.h" #include "memory.h" - -struct unkData -{ - u8 unk0[24]; -}; - +#include "menu.h" +#include "text.h" struct unkStruct_203B3F0 { // size: 0x138 - u32 unk0; - u8 unk4; + u32 state; + u8 itemIndex; u8 fill5[0x8 - 5]; u32 unk8; - u32 *unkC; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1C; - u32 unk20; + struct MenuItem menus[3]; u8 fill24[0x4C - 0x24]; u32 unk4C; u8 fill50[0x9C - 0x50]; @@ -31,11 +22,11 @@ struct unkStruct_203B3F0 u32 unkA8; u32 unkAC; u32 unkB0; - struct unkData *unkB4; + struct UnkTextStruct2 *unkB4; u32 unkB8; u32 unkBC; u8 fill4[0xD8 - 0xC0]; - struct unkData unkD8[4]; + struct UnkTextStruct2 unkD8[4]; }; extern struct unkStruct_203B3F0 *gUnknown_203B3F0; @@ -43,20 +34,15 @@ extern struct unkStruct_203B3F0 *gUnknown_203B3F0; struct unkStruct_203B3F4 { // size: 0xFC - u32 unk0; + u32 state; u8 unk4; u8 fill5[0x8 - 5]; u32 unk8; - u32 *unkC; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1C; - u32 unk20; + struct MenuItem menus[3]; u8 fill24[0x4C - 0x24]; u32 unk4C; u8 fill50[0x9C - 0x50]; - struct unkData unk9C[4]; + struct UnkTextStruct2 unk9C[4]; }; extern struct unkStruct_203B3F4 *gUnknown_203B3F4; @@ -67,29 +53,27 @@ extern void sub_801B3C0(u8 *); extern void sub_8090A8C(u8 *, u8, u32); extern void sub_8013AA0(u32 *); -extern struct unkData gUnknown_80E7E4C; -extern struct unkData gUnknown_80E7E34; -extern struct unkData gUnknown_80E7E64; -extern struct unkData gUnknown_80E7EA4; -extern struct unkData gUnknown_80E7E8C; +extern struct UnkTextStruct2 gUnknown_80E7E34; +extern struct UnkTextStruct2 gUnknown_80E7E4C; +extern struct UnkTextStruct2 gUnknown_80E7E64; +extern const char gDebug_NumberText; +extern struct UnkTextStruct2 gUnknown_80E7E8C; +extern struct UnkTextStruct2 gUnknown_80E7EA4; -extern u32 gDebug_NumberText; -extern u32 gUnknown_80D4970; +extern const char *gUnknown_80D4970[]; -extern void sub_800641C(void *, u32, u32); -extern void sub_8006518(void *); extern void sub_801C8C4(u32, u32, u32, u32); extern void sub_801CB5C(u32); extern void sub_801CCD8(); -extern void sub_8012D60(u32 *, u32 **, u32, u32, u32, u32); +extern void sub_8012D60(u32 *, struct MenuItem *, u32, u32, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_8012EA4(u32 *, u32); extern void sub_80073E0(u32); extern void sub_8013C68(u32 *); -extern void xxx_call_draw_string(s32, u32, u32 *, u32, u32); -extern u8 sub_8091524(u8); +extern void xxx_call_draw_string(s32, u32, const char *, u32, u32); +extern bool8 sub_8091524(u8); extern u32 sub_801CA08(u32); extern u8 sub_801CB24(); extern void sub_801CBB8(); @@ -135,7 +119,7 @@ u32 sub_803A45C(void) u32 sub_803A48C(void) { - switch(gUnknown_203B3F0->unk0) { + switch(gUnknown_203B3F0->state) { case 0: case 1: sub_803A740(); @@ -166,7 +150,7 @@ void sub_803A4E8(void) void sub_803A504(u32 newState) { - gUnknown_203B3F0->unk0 = newState; + gUnknown_203B3F0->state = newState; sub_803A51C(); sub_803A5A0(); } @@ -176,7 +160,7 @@ void sub_803A51C(void) s32 iVar4; sub_8006518(gUnknown_203B3F0->unkD8); - switch(gUnknown_203B3F0->unk0) + switch(gUnknown_203B3F0->state) { case 3: gUnknown_203B3F0->unkD8[1] = gUnknown_80E7E64; @@ -199,7 +183,7 @@ void sub_803A5A0(void) { u8 auStack8 [4]; - switch(gUnknown_203B3F0->unk0) { + switch(gUnknown_203B3F0->state) { case 0: sub_801C8C4(2,3,0,10); break; @@ -209,13 +193,13 @@ void sub_803A5A0(void) case 2: sub_801CCD8(); sub_803A6F0(); - sub_8012D60(&gUnknown_203B3F0->unk4C, &gUnknown_203B3F0->unkC, 0, 0, gUnknown_203B3F0->unk8, 2); + sub_8012D60(&gUnknown_203B3F0->unk4C, gUnknown_203B3F0->menus, 0, 0, gUnknown_203B3F0->unk8, 2); break; case 3: gUnknown_203B3F0->unkAC = 3; gUnknown_203B3F0->unkA4 = 0; gUnknown_203B3F0->unkA8 = 0x3e7; - gUnknown_203B3F0->unkA0 = gUnknown_203B460->unk50[gUnknown_203B3F0->unk4]; + gUnknown_203B3F0->unkA0 = gUnknown_203B460->unk50[gUnknown_203B3F0->itemIndex]; gUnknown_203B3F0->unkB0 = 1; gUnknown_203B3F0->unkB4 = &gUnknown_203B3F0->unkD8[1]; gUnknown_203B3F0->unkB8 = 0x2C; @@ -224,7 +208,7 @@ void sub_803A5A0(void) sub_803A690(); break; case 4: - sub_8090A8C(auStack8,gUnknown_203B3F0->unk4,0); + sub_8090A8C(auStack8,gUnknown_203B3F0->itemIndex,0); sub_801B3C0(auStack8); break; case 5: @@ -248,20 +232,20 @@ void sub_803A6F0(void) s32 temp1; struct unkStruct_203B3F0 *preload; - gUnknown_203B3F0->unkC = &gDebug_NumberText; - gUnknown_203B3F0->unk10 = 2; + gUnknown_203B3F0->menus[0].text = &gDebug_NumberText; + gUnknown_203B3F0->menus[0].menuAction = 2; gUnknown_203B3F0->unk8 = 2; - if (sub_8091524(gUnknown_203B3F0->unk4) == 0) { - gUnknown_203B3F0->unk10 = -1; + if (!sub_8091524(gUnknown_203B3F0->itemIndex)) { + gUnknown_203B3F0->menus[0].menuAction = -1; gUnknown_203B3F0->unk8 = 3; } preload = gUnknown_203B3F0; // this var gets loaded in between the sets... very dumb temp1 = 1; - preload->unk14 = gUnknown_80D4970; - preload->unk18 = 3; - preload->unk1C = 0; - preload->unk20 = temp1; + preload->menus[1].text = *gUnknown_80D4970; + preload->menus[1].menuAction = 3; + preload->menus[2].text = NULL; + preload->menus[2].menuAction = temp1; } void sub_803A740(void) @@ -271,11 +255,11 @@ void sub_803A740(void) case 1: break; case 3: - gUnknown_203B3F0->unk4 = sub_801CB24(); + gUnknown_203B3F0->itemIndex = sub_801CB24(); sub_803A504(2); break; case 4: - gUnknown_203B3F0->unk4 = sub_801CB24(); + gUnknown_203B3F0->itemIndex = sub_801CB24(); sub_803A504(4); break; case 2: @@ -316,7 +300,7 @@ void sub_803A810(void) switch(sub_8013BBC(&gUnknown_203B3F0->unk9C)) { case 3: - gUnknown_203B460->unk50[gUnknown_203B3F0->unk4] = gUnknown_203B3F0->unk9C; + gUnknown_203B460->unk50[gUnknown_203B3F0->itemIndex] = gUnknown_203B3F0->unk9C; // Fallthrough needed to match case 2: sub_803A504(1); @@ -355,7 +339,7 @@ u32 sub_803A888(void) u32 sub_803A8B8(void) { - switch(gUnknown_203B3F4->unk0) { + switch(gUnknown_203B3F4->state) { case 0: case 1: sub_803AAC4(); @@ -383,7 +367,7 @@ void sub_803A908(void) void sub_803A924(u32 newState) { - gUnknown_203B3F4->unk0 = newState; + gUnknown_203B3F4->state = newState; sub_803A93C(); sub_803A9AC(); } @@ -392,7 +376,7 @@ void sub_803A93C(void) { s32 iVar4; sub_8006518(gUnknown_203B3F4->unk9C); - if(gUnknown_203B3F4->unk0 == 2) + if(gUnknown_203B3F4->state == 2) { gUnknown_203B3F4->unk9C[2] = gUnknown_80E7EA4; } @@ -409,7 +393,7 @@ void sub_803A93C(void) void sub_803A9AC(void) { - switch(gUnknown_203B3F4->unk0) { + switch(gUnknown_203B3F4->state) { case 0: sub_80211AC(0,3); break; @@ -419,7 +403,7 @@ void sub_803A9AC(void) case 2: sub_8021494(); sub_803AA34(); - sub_8012D60(&gUnknown_203B3F4->unk4C,&gUnknown_203B3F4->unkC,0,0,gUnknown_203B3F4->unk8,2); + sub_8012D60(&gUnknown_203B3F4->unk4C,gUnknown_203B3F4->menus,0,0,gUnknown_203B3F4->unk8,2); break; case 3: sub_8021774(gUnknown_203B3F4->unk4,1,0); diff --git a/src/ds_menus.c b/src/ds_menus.c index 47cece9..29100b6 100644 --- a/src/ds_menus.c +++ b/src/ds_menus.c @@ -1,8 +1,8 @@ #include "global.h" #include "input.h" +#include "text.h" extern u8 *gUnknown_203B3E8; -extern void sub_800641C(void *, u32, u32); extern void nullsub_54(); extern void sub_8039E18(); diff --git a/src/exclusive_pokemon.c b/src/exclusive_pokemon.c index cbcdf0c..903b189 100644 --- a/src/exclusive_pokemon.c +++ b/src/exclusive_pokemon.c @@ -28,7 +28,7 @@ const u8 filler_ex1[8] = }; extern struct ExclusivePokemonData *gUnknown_203B498; -extern struct ExclusivePokemonData gExclusivePokemonInfo; +EWRAM_DATA struct ExclusivePokemonData gExclusivePokemonInfo; void LoadExclusivePokemon(void) diff --git a/src/felicity_bank.c b/src/felicity_bank.c index 8a2aae8..28550dd 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -10,12 +10,10 @@ extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; extern struct unkStruct_203B204 *gUnknown_203B204; -extern struct unkData gUnknown_80DB6DC; -extern struct unkData gUnknown_80DB6F4; -extern struct unkData gUnknown_80DB70C; +extern struct UnkTextStruct2 gUnknown_80DB6DC; +extern struct UnkTextStruct2 gUnknown_80DB6F4; +extern struct UnkTextStruct2 gUnknown_80DB70C; -extern void sub_800641C(struct unkData *, u32, u32); -extern void sub_8006518(struct unkData *); extern void sub_8016B24(); extern void sub_80169BC(); extern void Felicity_DepositMoney(); @@ -115,17 +113,17 @@ void sub_801645C(void) switch(gUnknown_203B204->currState) { case 2: - gUnknown_203B204->unkA8[0].unk0[0] = 0x80; - gUnknown_203B204->unkA8[1].unk0[0] = 0x80; - gUnknown_203B204->unkA8[2].unk0[0] = 0x80; + gUnknown_203B204->unkA8[0].fill00[0] = 0x80; + gUnknown_203B204->unkA8[1].fill00[0] = 0x80; + gUnknown_203B204->unkA8[2].fill00[0] = 0x80; gUnknown_203B204->unkA8[3] = gUnknown_80DB6F4; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B204->unkA8, 1, 0); break; case 8: case 11: - gUnknown_203B204->unkA8[0].unk0[0] = 0x80; - gUnknown_203B204->unkA8[1].unk0[0] = 0x80; + gUnknown_203B204->unkA8[0].fill00[0] = 0x80; + gUnknown_203B204->unkA8[1].fill00[0] = 0x80; gUnknown_203B204->unkA8[3] = gUnknown_80DB6F4; gUnknown_203B204->unkA8[2] = gUnknown_80DB70C; ResetUnusedInputStruct(); diff --git a/src/friend_area.c b/src/friend_area.c index a6fd1d5..329670e 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -3,7 +3,7 @@ #include "friend_area.h" #include "pokemon.h" -extern bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS]; +EWRAM_DATA bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS]; extern bool8 *gFriendAreas; @@ -16,7 +16,7 @@ extern const char *gFriendAreaNames[]; extern const char gUnknown_81098A4; extern const char gUnknown_81098AC; -extern void sub_800D158(u8 *buffer, const char *r2, ...); +extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *r2, ...); extern void sub_8090FEC(u32, u32 *r1, u32); const struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS] = @@ -601,7 +601,7 @@ u32 GetFriendAreaPrice(u8 index) void sub_8092558(u8 *buffer, u8 index) { // colors the friend area name green and prints to buffer? - sub_800D158(buffer, &gUnknown_81098A4, gFriendAreaNames[index]); + ExpandPlaceholdersBuffer(buffer, &gUnknown_81098A4, gFriendAreaNames[index]); } void sub_8092578(u8 *buffer, u8 index, u8 r2) @@ -611,7 +611,7 @@ void sub_8092578(u8 *buffer, u8 index, u8 r2) if(r2) { sub_8090FEC(gFriendAreaSettings[index].price, (&temp[0]), 1); - sub_800D158(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, temp); + ExpandPlaceholdersBuffer(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, temp); } else { diff --git a/src/friend_area_1.c b/src/friend_area_1.c index c3dd57f..bd089c0 100644 --- a/src/friend_area_1.c +++ b/src/friend_area_1.c @@ -26,7 +26,7 @@ u32 SaveFriendAreas(u8 *r0, u32 r1) return temp[2]; } -u32 ReadSavedFriendAreas(u8 *r0, u32 r1) +u32 ReadSavedFriendAreas(u8 *r0, s32 r1) { u32 temp[5]; s32 counter; diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c new file mode 100644 index 0000000..04896d2 --- /dev/null +++ b/src/friend_area_action_menu.c @@ -0,0 +1,246 @@ +#include "global.h" +#include "memory.h" +#include "text.h" +#include "input.h" +#include "menu.h" +#include "friend_area_action_menu.h" + +extern struct unkStruct_203B2BC *gUnknown_203B2BC; +extern struct UnkTextStruct2 gUnknown_80DD74C; +extern struct UnkTextStruct2 gUnknown_80DD704; +extern struct UnkTextStruct2 gUnknown_80DD6EC; +extern struct UnkTextStruct2 gUnknown_80DD71C; +extern const char gUnknown_80DD764[]; +extern const char gUnknown_80DD7FC[]; +extern const char gUnknown_80DD8A0[]; +extern const char gUnknown_80DD8D0[]; + +extern void sub_80141B4(const char *r0, u32, u32 *r1, u32); +extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32); +extern void sub_8012D60(u32 *, struct MenuItem *, u32, u32 *, u32, u32); +extern void sub_8027D40(u32, u8 *); +extern void sub_8023868(u32, u32, u32, u32); +extern void sub_8023B7C(u32); +extern void sub_8023DA4(); +extern void sub_8024458(s16, u32); +extern void sub_801BEEC(s16); +extern void sub_8093560(u32, u32 *, u32 *); +extern void sub_801F808(u32 *); +extern void sub_8027794(); +extern void sub_801A5D8(u32, u32, u32, u32); +extern void sub_801A8D0(u32); +extern void sub_801A9E0(); +extern void sub_801F1B0(u32, u32); +extern void sub_8090B64(u8 *, u8 *); +extern void sub_801B3C0(u8 *); +extern void sub_809401C(u32 *, u32 *); +extern void sub_801EE10(u32, s16, u32 *, u32, u32, u32); + +extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); +extern void sub_8027184(u32); +extern void ResetSprites(u8 ); +extern void sub_802719C(); +extern void sub_8027274(); +extern void sub_80277FC(); +extern void sub_80278B4(); +extern void sub_8027A40(); +extern void sub_8027A5C(); +extern void sub_8027D1C(); +extern void sub_8027A78(); +extern void sub_8027AE4(); +extern void sub_8027B28(); +extern void sub_8027BD8(); +extern void sub_8027C84(); +extern void sub_8027CA0(); +extern void sub_8027D00(); +extern void CreateFriendActionMenu(); +extern void sub_80276A8(); + + +u32 sub_8027074(void) +{ + ResetSprites(0); + gUnknown_203B2BC = MemoryAlloc(sizeof(struct unkStruct_203B2BC), 8); + gUnknown_203B2BC->unk70 = 0; + gUnknown_203B2BC->unk74 = 0; + gUnknown_203B2BC->unk78 = 0; + sub_8027184(0); + return 1; +} + +u32 sub_80270A4(void) +{ + switch(gUnknown_203B2BC->state) { + case 0: + sub_8027184(1); + break; + case 1: + case 2: + sub_80277FC(); + break; + case 3: + sub_80278B4(); + break; + case 4: + sub_8027A40(); + break; + case 5: + sub_8027A5C(); + break; + case 8: + sub_8027A78(); + break; + case 9: + sub_8027AE4(); + break; + case 10: + case 0xb: + sub_8027B28(); + break; + case 0xc: + sub_8027BD8(); + break; + case 0xd: + sub_8027C84(); + break; + case 0xe: + case 0xf: + sub_8027CA0(); + break; + case 0x10: + sub_8027D00(); + break; + default: + sub_8027D1C(); + break; + case 0x11: + return 3; + } + return 0; +} + +void sub_8027168(void) +{ + if(gUnknown_203B2BC != NULL) + { + MemoryFree(gUnknown_203B2BC); + gUnknown_203B2BC = NULL; + } +} + +void sub_8027184(u32 newState) +{ + gUnknown_203B2BC->state = newState; + sub_802719C(); + sub_8027274(); +} + +void sub_802719C(void) +{ + s32 iVar3; + + sub_8006518(gUnknown_203B2BC->unk180); + switch(gUnknown_203B2BC->state) + { + case 3: + gUnknown_203B2BC->unk180[3] = gUnknown_80DD74C; + CreateFriendActionMenu(); + gUnknown_203B2BC->unk180[2] = gUnknown_80DD704; + sub_8012CAC(&gUnknown_203B2BC->unk180[2], gUnknown_203B2BC->menuItems); + break; + case 0xC: + sub_80276A8(); + gUnknown_203B2BC->unk180[2] = gUnknown_80DD71C; + sub_8012CAC(&gUnknown_203B2BC->unk180[2], gUnknown_203B2BC->menuItems); + break; + default: + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B2BC->unk180[iVar3] = gUnknown_80DD6EC; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2BC->unk180, 1, 1); +} + +void sub_8027274(void) +{ + u8 auStack12 [4]; + + switch(gUnknown_203B2BC->state) { + case 0: + case 0x11: + break; + case 1: + sub_8023868(1,0,0,7); + break; + case 2: + sub_8023B7C(1); + break; + case 3: + sub_8027D40(3,&gUnknown_203B2BC->unk14); + sub_8023DA4(); + sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk70,2); + break; + case 4: + sub_8024458(gUnknown_203B2BC->unk8,2); + break; + case 5: + sub_801BEEC(gUnknown_203B2BC->unk8); + break; + case 10: + sub_801A5D8(1,0,0,10); + break; + case 0xb: + sub_801A8D0(1); + break; + case 0xc: + sub_801A9E0(); + sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk74,2); + break; + case 0xd: + sub_8090B64(auStack12,&gUnknown_203B2BC->unk10); + sub_801B3C0(auStack12); + break; + case 0xe: + sub_809401C(&gUnknown_203B2BC->unk28,&gUnknown_203B2BC->unk18->unk2C); + sub_801EE10(3,gUnknown_203B2BC->unk8,&gUnknown_203B2BC->unk28,0,0,0); + break; + case 0xf: + sub_801F1B0(1,0); + break; + case 8: + sub_8027794(); + // You have chosen to say farewell to this Pokemon. + // The pokemon will leave its friend area. + // It will no longer be available for adventures. + // Is that OK? + sub_8014248(gUnknown_80DD764,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101); + break; + case 9: + sub_8027794(); + // If you say farewell to this Pokemon, it will be gone forever. + // You will never be able to get another one + // like it to join your team. + // Will you release it anyway? + sub_8014248(gUnknown_80DD7FC,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101); + break; + case 0x10: + sub_8093560(gUnknown_203B2BC->unk20,&gUnknown_203B2BC->unk28,&gUnknown_203B2BC->unk68); + sub_801F808(&gUnknown_203B2BC->unk68); + break; + case 6: + gUnknown_203B2BC->unk4 = 2; + // The #C4$i0#R was + // returned to the Toolbox + sub_80141B4(gUnknown_80DD8A0,0,0,0x101); + break; + case 7: + gUnknown_203B2BC->unk4 = 2; + // The #C4$i0#R was + // returned to storage + sub_80141B4(gUnknown_80DD8D0,0,0,0x101); + break; + } +} diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c new file mode 100644 index 0000000..a6a84ba --- /dev/null +++ b/src/friend_area_action_menu_1.c @@ -0,0 +1,122 @@ +#include "global.h" +#include "text.h" +#include "input.h" +#include "menu.h" +#include "gUnknown_203B460.h" +#include "friend_area_action_menu.h" + +extern struct unkStruct_203B2BC *gUnknown_203B2BC; +extern struct unkStruct_203B460 *gUnknown_203B460; + +u32 sub_801B410(); +void sub_801B450(); +u32 sub_801EF38(u8 r0); +void sub_801F214(); + +extern void sub_8027184(u32); +extern u8 sub_8012FD8(u32 *r0); +extern void sub_8013114(u32 *, s32 *); +extern void PlaySound(u32); +extern void sub_80911F8(u32); +extern void sub_80910B4(); +extern void nullsub_104(); +extern void sub_8091274(u8 *); +extern void sub_801A928(); +extern void sub_8099690(u32); +extern void sub_808D800(s16, u8 *); +extern u32 sub_801A8AC(); +extern u32 sub_801A6E8(u32); + +extern s32 sub_80144A4(s32 *); +extern void sub_8027EB8(); +extern void sub_808D31C(struct unkSubStruct_203B2BC *); + +void sub_8027AE4(void) +{ + s32 local_8; + + if (sub_80144A4(&local_8) == 0) { + switch(local_8) + { + case 1: + case 3: + sub_8027184(2); + break; + case 2: + sub_8027EB8(); + sub_808D31C(gUnknown_203B2BC->unk18); + break; + } + } +} + +void sub_8027B28(void) +{ + switch(sub_801A6E8(1)) + { + case 3: + gUnknown_203B2BC->unkC = sub_801A8AC(); + gUnknown_203B2BC->unk10 = gUnknown_203B460->fill0[gUnknown_203B2BC->unkC].itemIndex; + gUnknown_203B2BC->unk11 = gUnknown_203B460->fill0[gUnknown_203B2BC->unkC].numItems; + sub_8027184(0xc); + break; + case 4: + gUnknown_203B2BC->unkC = sub_801A8AC(); + gUnknown_203B2BC->unk10 = gUnknown_203B460->fill0[gUnknown_203B2BC->unkC].itemIndex; + gUnknown_203B2BC->unk11 = gUnknown_203B460->fill0[gUnknown_203B2BC->unkC].numItems; + sub_8099690(0); + sub_8027184(0xd); + break; + case 2: + sub_801A928(); + sub_8027184(2); + break; + case 0: + case 1: + break; + } +} + +void sub_8027BD8(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) { + gUnknown_203B2BC->unk74 = menuAction; + } + switch(menuAction) + { + case 10: + PlaySound(0x14d); + sub_80911F8(gUnknown_203B2BC->unkC); + sub_80910B4(); + if (gUnknown_203B2BC->unk14 != 0) { + sub_8091274(&gUnknown_203B2BC->unk14); + } + sub_808D800(gUnknown_203B2BC->unk8,&gUnknown_203B2BC->unk10); + sub_801A928(); + nullsub_104(); + sub_8027184(2); + break; + case 4: + sub_8099690(0); + sub_8027184(0xd); + break; + case 1: + sub_8027184(0xb); + break; + } +} + +void sub_8027C84() +{ + u32 temp = sub_801B410(); + if(temp <= 1) + return; + if(temp > 3) + return; + sub_801B450(); + sub_8027184(0xB); +} diff --git a/src/friend_rescue.c b/src/friend_rescue.c index bbff322..ef1d729 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -3,6 +3,7 @@ #include "pokemon.h" #include "constants/species.h" #include "memory.h" +#include "text.h" extern void sub_80338C4(u32); extern s32 sub_80144A4(s32 *); @@ -18,7 +19,6 @@ extern struct WonderMailStruct_203B33C *gUnknown_203B33C; extern u8 sub_8039880(void); void ResetUnusedInputStruct(void); -void sub_800641C(void *, u32, u32); extern void sub_8035300(void); extern void sub_8035404(u32); diff --git a/src/gulpin_shop.c b/src/gulpin_shop.c new file mode 100644 index 0000000..810a191 --- /dev/null +++ b/src/gulpin_shop.c @@ -0,0 +1,158 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "memory.h" +#include "constants/species.h" +#include "text.h" +#include "input.h" + +struct unkStruct_Gulpin +{ + u8 fill0[0x22]; + u16 unk22; +}; + +struct unkStruct_203B26C +{ +// size: 0x18C + u32 unk0; + u32 unk4; + u32 unk8; + s16 unkC; + u8 unkE; + struct unkStruct_Gulpin * unk10; + u8 fill14[0x1C - 0x14]; + u16 unk1C; + u8 fill20[0x28 - 0x20]; + u32 unk28; + u8 fill2C[0x118 - 0x2C]; + /* 0x118 */ struct OpenedFile *faceFile; + /* 0x11C */ u8 *faceData; + /* 0x120 */ u16 unk120; + u16 unk122; + u8 unk124; + u8 unk125; + u8 unk126; + u8 unk127; + struct OpenedFile **unk128; + struct UnkTextStruct2 unk12C[4]; +}; +extern struct unkStruct_203B26C *gUnknown_203B26C; +extern const struct UnkTextStruct2 gUnknown_80DC11C; +extern const struct UnkTextStruct2 gUnknown_80DC134; + +extern void UpdateGulpinShopState(u32); +extern void sub_801ECBC(); +extern void sub_801ED28(); +extern void sub_801EDA4(); +extern void sub_801EDC0(); +extern void sub_801E980(); +extern void sub_801EA28(); +extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *); +extern void sub_801EBC4(); + +u32 DisplayGulpinDialogueSprite(s32 param_1,s16 param_2,struct unkStruct_Gulpin *param_3) +{ + struct OpenedFile *faceFile; + s32 param2_32; + + param2_32 = param_2; // dumb cast needed to get lsr/asr combo + + gUnknown_203B26C = MemoryAlloc(0x18c,8); + gUnknown_203B26C->unk0 = param_1; + gUnknown_203B26C->unkC = param2_32; + gUnknown_203B26C->unk10 = param_3; + gUnknown_203B26C->unk1C = param_3->unk22; + + if (param_1 == 0) { + gUnknown_203B26C->unk128 = &gUnknown_203B26C->faceFile; + } + else { + gUnknown_203B26C->unk128 = NULL; + } + faceFile = GetDialogueSpriteDataPtr(SPECIES_GULPIN); + gUnknown_203B26C->faceFile = faceFile; + gUnknown_203B26C->faceData = faceFile->data; + + gUnknown_203B26C->unk124 = 0; + gUnknown_203B26C->unk125 = 0; + gUnknown_203B26C->unk126 = 0; + + gUnknown_203B26C->unk120 = 2; + gUnknown_203B26C->unk122 = 8; + UpdateGulpinShopState(0); + return 1; +} + +u32 sub_801E8C0(void) +{ + switch(gUnknown_203B26C->unk4) + { + case 0: + case 1: + sub_801ECBC(); + break; + case 2: + sub_801ED28(); + break; + case 3: + sub_801EDA4(); + break; + case 4: + sub_801EDC0(); + if(gUnknown_203B26C->unk4 == 5) + return 3; + break; + case 5: + return 3; + case 6: + return 2; + } + return 0; +} + +u8 sub_801E930(void) +{ + return gUnknown_203B26C->unkE; +} + +void sub_801E93C(void) +{ + if(gUnknown_203B26C != NULL) + { + CloseFile(gUnknown_203B26C->faceFile); + MemoryFree(gUnknown_203B26C); + gUnknown_203B26C = NULL; + } +} + +void UpdateGulpinShopState(u32 newState) +{ + gUnknown_203B26C->unk4 = newState; + sub_801E980(); + sub_801EA28(); +} + +void sub_801E980(void) +{ + s32 iVar2; + + sub_8006518(gUnknown_203B26C->unk12C); + switch(gUnknown_203B26C->unk4) + { + case 2: + sub_801EBC4(); + gUnknown_203B26C->unk12C[1] = gUnknown_80DC11C; + gUnknown_203B26C->unk12C[2] = gUnknown_80DC134; + sub_8012CAC(&gUnknown_203B26C->unk12C[2], &gUnknown_203B26C->unk28); + break; + default: + for(iVar2 = 0; iVar2 < 4; iVar2++) + { + gUnknown_203B26C->unk12C[iVar2] = gUnknown_80DC11C; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B26C->unk12C, 1, 1); +} diff --git a/src/items.c b/src/items.c index 238bc06..d6128f5 100644 --- a/src/items.c +++ b/src/items.c @@ -8,8 +8,9 @@ extern struct unkStruct_203B460 *gUnknown_203B460; extern struct unkStruct_203B460 gUnknown_20389A8; extern struct FileArchive gSystemFileArchive; extern const char gUnknown_8109764; -extern struct OpenedFile *gItemParametersFile; -extern struct Item *gItemParametersData; + +EWRAM_DATA struct OpenedFile *gItemParametersFile; +EWRAM_DATA struct Item *gItemParametersData; extern void sub_8091840(u8); extern u8 GetItemType(u8); @@ -52,10 +53,10 @@ void InitializeMoneyItems(void) gUnknown_203B460->teamSavings = 0; } -u32 sub_8090A34(void) +s32 sub_8090A34(void) { s32 iVar2; - u32 iVar3; + s32 iVar3; iVar3 = 0; for(iVar2 = 0; iVar2 < 0x14; iVar2++) diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c index 6d7cdd1..f77d129 100644 --- a/src/kangaskhan_storage.c +++ b/src/kangaskhan_storage.c @@ -7,15 +7,13 @@ #include "memory.h" extern struct unkStruct_203B208 *gUnknown_203B208; -extern struct unkData gUnknown_80DB748; -extern struct unkData gUnknown_80DB778; -extern struct unkData gUnknown_80DB790; -extern struct unkData gUnknown_80DB760; +extern struct UnkTextStruct2 gUnknown_80DB748; +extern struct UnkTextStruct2 gUnknown_80DB778; +extern struct UnkTextStruct2 gUnknown_80DB790; +extern struct UnkTextStruct2 gUnknown_80DB760; extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; -extern void sub_800641C(struct unkData *, u32, u32); -extern void sub_8006518(struct unkData *); void UpdateKangaskhanStorageState(u32); extern void sub_8017828(); diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c index ebef475..d9d253c 100644 --- a/src/kangaskhan_storage_2.c +++ b/src/kangaskhan_storage_2.c @@ -1,6 +1,11 @@ #include "global.h" #include "input.h" #include "memory.h" +#include "text.h" +#include "item.h" +#include "kangaskhan_storage.h" + +extern struct unkStruct_203B208 *gUnknown_203B208; struct unkStruct_203B20C { @@ -12,10 +17,6 @@ struct unkStruct_203B20C }; extern struct unkStruct_203B20C *gUnknown_203B20C; -extern void sub_800641C(u8 *, u32, u32); -extern void sub_8017F10(u32); - - extern void sub_8017F10(u32); extern void sub_8018588(void); extern void sub_8018620(void); @@ -29,6 +30,91 @@ extern void sub_8018AE4(void); extern void sub_8017F28(); extern void sub_8018100(); +extern void UpdateKangaskhanStorageState(u32); +extern s32 sub_80144A4(s32 *); +extern void sub_801B450(); +extern u32 sub_801B410(void); + +extern u8 sub_8012FD8(u32 *r0); +extern void sub_8013114(u32 *, s32 *); +extern void sub_801CBB8(); +extern void sub_801CA08(); + +void sub_8017D24(void) +{ + s32 menuAction; + menuAction = 0; + sub_801CA08(); + if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) { + sub_8013114(&gUnknown_203B208->unk58, &menuAction); + if(menuAction != 1) gUnknown_203B208->unk20 = menuAction; + } + + switch(menuAction) + { + case 3: + if (sub_8090A34() > 0x13) + { + sub_801CBB8(); + UpdateKangaskhanStorageState(0x6); + } + else + { + if(sub_8090A60(gUnknown_203B208->itemIndex)) + UpdateKangaskhanStorageState(0x18); + else + UpdateKangaskhanStorageState(0x1B); + } + break; + case 6: + UpdateKangaskhanStorageState(0x1A); + break; + case 1: + UpdateKangaskhanStorageState(0x17); + break; + } +} + +void sub_8017DC0(void) +{ + switch(sub_801B410()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801B450(); + UpdateKangaskhanStorageState(0xE); + break; + } +} + +void sub_8017DDC(void) +{ + switch(sub_801B410()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801B450(); + UpdateKangaskhanStorageState(0x17); + break; + } +} + +void sub_8017DF8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateKangaskhanStorageState(gUnknown_203B208->unk8); + } +} u32 sub_8017E1C(void) { diff --git a/src/kecleon_items.c b/src/kecleon_items.c index 59b9ec6..f1f2806 100644 --- a/src/kecleon_items.c +++ b/src/kecleon_items.c @@ -9,10 +9,10 @@ extern struct unkStruct_203B210 *gUnknown_203B210; extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; -extern struct unkData gUnknown_80DB840; -extern struct unkData gUnknown_80DB870; -extern struct unkData gUnknown_80DB888; -extern struct unkData gUnknown_80DB858; +extern struct UnkTextStruct2 gUnknown_80DB840; +extern struct UnkTextStruct2 gUnknown_80DB870; +extern struct UnkTextStruct2 gUnknown_80DB888; +extern struct UnkTextStruct2 gUnknown_80DB858; void UpdateKecleonStoreState(u32); @@ -29,8 +29,6 @@ extern void sub_8019D4C(); extern void sub_8019D68(); extern void sub_8018D30(); extern void sub_8018E88(); -extern void sub_8006518(struct unkData *); -extern void sub_800641C(struct unkData *, u32, u32); u32 DisplayKeckleonDialogueSprite(u32 param_1) { diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index f305c6f..0db9bb3 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -60,19 +60,19 @@ void sub_8019B08(void) void sub_8019BBC(void) { - int local_c; + int menuAction; - local_c = 0; + menuAction = 0; if (gUnknown_203B210->unk4 != 0) { sub_8019EDC(0); } else { sub_801A2A8(0); } - if ((sub_8012FD8(&gUnknown_203B210->unk84) == 0) && (sub_8013114(&gUnknown_203B210->unk84,&local_c), local_c != 1)) { - gUnknown_203B210->unk30 = local_c; + if ((sub_8012FD8(&gUnknown_203B210->unk84) == 0) && (sub_8013114(&gUnknown_203B210->unk84,&menuAction), menuAction != 1)) { + gUnknown_203B210->unk30 = menuAction; } - switch(local_c){ + switch(menuAction){ case 2: if (gUnknown_203B460->teamMoney == 0) { UpdateKecleonStoreState(0x6); @@ -97,14 +97,14 @@ void sub_8019BBC(void) void sub_8019C78(void) { - int local_c; + int menuAction; - local_c = 0; + menuAction = 0; sub_801A6E8(0); - if ((sub_8012FD8(&gUnknown_203B210->unk84) == '\0') && (sub_8013114(&gUnknown_203B210->unk84,&local_c), local_c != 1)) { - gUnknown_203B210->unk2C = local_c; + if ((sub_8012FD8(&gUnknown_203B210->unk84) == '\0') && (sub_8013114(&gUnknown_203B210->unk84,&menuAction), menuAction != 1)) { + gUnknown_203B210->unk2C = menuAction; } - switch(local_c){ + switch(menuAction){ case 3: sub_8099690(0); if (sub_80914E4(gUnknown_203B210->unk1C.itemIndex) == '\0') { diff --git a/src/load_screen.c b/src/load_screen.c index 2b40564..6271dbc 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -4,6 +4,7 @@ #include "play_time.h" #include "file_system.h" #include "memory.h" +#include "text.h" extern struct PlayTimeStruct *gPlayTimeRef; extern struct PlayTimeStruct gPlayTime; @@ -19,16 +20,11 @@ struct unkStruct_808D33C struct unkStruct_203B484 { u8 fill0[0xC]; - s16 unkC; + s16 speciesIndex; u8 fillE[0x50 - 0xE]; u32 unk50; }; -struct unkData -{ - u8 unk0[24]; -}; - struct unkStruct_203B374 { // size: 0x27c @@ -39,7 +35,7 @@ struct unkStruct_203B374 u8 fill58[0xA4 - 0x58]; u32 unkA4; u8 fillA8[0x144 - 0xA8]; - struct unkData unk144[4]; + struct UnkTextStruct2 unk144[4]; /* 0x1A4 */ u8 formattedTeamName[0x24]; /* 0x1C8 */ u8 formattedPlayerName[0x24]; /* 0x1EC */ u8 formattedLocation[0x24]; @@ -54,15 +50,15 @@ extern u32 gUnknown_203B3B8[]; extern u32 gUnknown_203B388[]; extern struct unkStruct_203B484 *gUnknown_203B484; -extern struct unkData gUnknown_80E75F8; -extern struct unkData gUnknown_80E7610; -extern struct unkData gUnknown_80E762C; +extern struct UnkTextStruct2 gUnknown_80E75F8; +extern struct UnkTextStruct2 gUnknown_80E7610; +extern struct UnkTextStruct2 gUnknown_80E762C; extern u32 gUnknown_80E7644; extern u32 gUnknown_80E7684; extern u32 gUnknown_80E76B8; extern u32 gUnknown_80E76E8; extern u32 gUnknown_80E7730; -extern struct unkData gUnknown_80E7784; +extern struct UnkTextStruct2 gUnknown_80E7784; extern u32 gUnknown_80E779C; extern u8 gUnknown_80E77BC; extern u8 gUnknown_80E77C4; @@ -85,8 +81,7 @@ extern const char gUnknown_80E785C[]; // clmkpat u8 IsQuickSave(void); void DrawLoadScreenText(void); extern void sub_8035CF4(u32 *, u32, u32); -extern void sub_800641C(struct unkData *, u32, u32); -extern void SetMenuItems(u32 *, struct unkData *, u32, struct unkData *, u32 *, u32, u32, u32); +extern void SetMenuItems(u32 *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, u32 *, u32, u32, u32); extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, u32 *); extern void sub_8095240(u32); @@ -96,10 +91,10 @@ extern void sub_80920D8(u8 *); extern struct unkStruct_808D33C *sub_808D33C(void); extern u8 sub_80023E4(u32); extern u8 *sub_8098FB4(); -extern void sub_800D158(u8 *buffer, u8 *text, ...); +extern void ExpandPlaceholdersBuffer(u8 *buffer, u8 *text, ...); extern s32 sub_8011C1C(void); extern u8 *sub_809769C(void); -extern u32 sub_8097778(void); +extern u32 GetNumAdventures(void); extern void xxx_call_draw_string(u32 x, u32 y, u8 *, u32, u32); extern void sub_8090228(u8 *, u8 *); extern void sub_80922B4(u8 *, u8 *, u32); @@ -244,7 +239,7 @@ void DrawLoadScreenText(void) else { strcpy(teamNameBuffer,&gUnknown_80E77F8); } - sub_800D158(gUnknown_203B374->formattedTeamName,&gUnknown_80E7804,teamNameBuffer); + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedTeamName,&gUnknown_80E7804,teamNameBuffer); xxx_call_draw_string(64,0,gUnknown_203B374->formattedTeamName,0,0); // Draw Player Name @@ -255,7 +250,7 @@ void DrawLoadScreenText(void) else { sub_80922B4(playerName,&playerInfo->unk4C,10); } - sub_800D158(gUnknown_203B374->formattedPlayerName,&gUnknown_80E7804,playerName); + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedPlayerName,&gUnknown_80E7804,playerName); xxx_call_draw_string(64,12,gUnknown_203B374->formattedPlayerName,0,0); // Draw Location Info @@ -265,25 +260,25 @@ void DrawLoadScreenText(void) sub_8090228(gUnknown_203B374->formattedLocation,sub_809769C()); } else { - sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted } } else { switch(sub_8011C1C()) { default: - sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E7824); // Location unknown + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E7824); // Location unknown break; case 1: switch(sub_8001658(0,24)) { default: - sub_800D158(auStack356,&gUnknown_80E7804,sub_8098FB4()); + ExpandPlaceholdersBuffer(auStack356,&gUnknown_80E7804,sub_8098FB4()); xxx_format_string(auStack356,gUnknown_203B374->formattedLocation,gUnknown_203B374->formattedPlayTime,0); break; case 0x7: case 0xB: - sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted break; } break; @@ -292,7 +287,7 @@ void DrawLoadScreenText(void) { sub_8090228(gUnknown_203B374->formattedLocation,sub_809769C()); } else { - sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted } break; } @@ -301,23 +296,23 @@ void DrawLoadScreenText(void) // Draw Play Time DeconstructPlayTime(gPlayTimeRef,&hours,&minutes,&seconds); - sub_800D158(gUnknown_203B374->formattedPlayTime,&gUnknown_80E7838,hours,minutes,seconds); + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedPlayTime,&gUnknown_80E7838,hours,minutes,seconds); xxx_call_draw_string(64,36,gUnknown_203B374->formattedPlayTime,0,0); // Draw Adventures Info - numAdventures = sub_8097778(); - sub_800D158(gUnknown_203B374->formattedAdventures,&gUnknown_80E7848,numAdventures); // %d + numAdventures = GetNumAdventures(); + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedAdventures,&gUnknown_80E7848,numAdventures); // %d xxx_call_draw_string(64,48,gUnknown_203B374->formattedAdventures,0,0); // Draw Helper Info - if ((iVar2 == 0xf1207) && (gUnknown_203B484->unkC != 0)) { - sub_808D930(speciesHelper,gUnknown_203B484->unkC); + if ((iVar2 == 0xf1207) && (gUnknown_203B484->speciesIndex != 0)) { + sub_808D930(speciesHelper,gUnknown_203B484->speciesIndex); // TODO very hacky match here sub_80922B4(nameHelper,(u8 *)(&gUnknown_203B484 + 0x14),10); - sub_800D158(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E784C,nameHelper,speciesHelper); // %s (%s) + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E784C,nameHelper,speciesHelper); // %s (%s) } else { - sub_800D158(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E7854); // ----- + ExpandPlaceholdersBuffer(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E7854); // ----- } xxx_call_draw_string(64,60,gUnknown_203B374->formattedHelperInfo,0,0); @@ -404,7 +399,7 @@ void DrawLoadScreenText(void) "\tlsls r4, 1\n" "\tadds r0, r4\n" "\tldr r1, _08039590\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "\tldr r2, [r5]\n" "\tadds r2, r4\n" "\tmovs r0, 0\n" @@ -443,7 +438,7 @@ void DrawLoadScreenText(void) "\tadds r0, r4\n" "\tldr r6, _080395F4\n" "\tadds r1, r6, 0\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "\tldr r2, [r5]\n" "\tadds r2, r4\n" "\tmovs r0, 0\n" @@ -505,7 +500,7 @@ void DrawLoadScreenText(void) "\tadds r2, r0, 0\n" "\tadd r0, sp, 0x4\n" "\tadds r1, r6, 0\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "\tldr r0, [r5]\n" "\tmovs r3, 0xF6\n" "\tlsls r3, 1\n" @@ -549,7 +544,7 @@ void DrawLoadScreenText(void) "_08039690:\n" "\tldr r1, _0803974C\n" "_08039692:\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "_08039696:\n" "\tldr r7, _08039750\n" "\tldr r2, [r7]\n" @@ -580,7 +575,7 @@ void DrawLoadScreenText(void) "\tadd r4, sp, 0x14C\n" "\tldr r4, [r4]\n" "\tstr r4, [sp]\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "\tldr r2, [r7]\n" "\tadds r2, r5\n" "\tstr r6, [sp]\n" @@ -588,14 +583,14 @@ void DrawLoadScreenText(void) "\tmovs r1, 0x24\n" "\tmovs r3, 0\n" "\tbl xxx_call_draw_string\n" - "\tbl sub_8097778\n" + "\tbl GetNumAdventures\n" "\tadds r2, r0, 0\n" "\tldr r0, [r7]\n" "\tmovs r4, 0x8D\n" "\tlsls r4, 2\n" "\tadds r0, r4\n" "\tldr r1, _0803975C\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "\tldr r2, [r7]\n" "\tadds r2, r4\n" "\tstr r6, [sp]\n" @@ -629,7 +624,7 @@ void DrawLoadScreenText(void) "\tldr r1, _08039768\n" "\tadds r2, r4, 0\n" "\tadds r3, r5, 0\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "\tb _0803977C\n" "\t.align 2, 0\n" "_0803974C: .4byte gUnknown_80E780C\n" @@ -647,7 +642,7 @@ void DrawLoadScreenText(void) "\tlsls r1, 2\n" "\tadds r0, r1\n" "\tldr r1, _080397B0\n" - "\tbl sub_800D158\n" + "\tbl ExpandPlaceholdersBuffer\n" "_0803977C:\n" "\tldr r0, _080397AC\n" "\tldr r2, [r0]\n" diff --git a/src/main.c b/src/main.c index ee657d6..d18d0de 100644 --- a/src/main.c +++ b/src/main.c @@ -8,14 +8,14 @@ extern char ewram_start[]; typedef void (*IntrCallback)(void); -extern u8 IntrMain_Buffer[0x120]; -extern IntrCallback gIntrCallbacks[6]; +EWRAM_DATA u8 IntrMain_Buffer[0x120]; +EWRAM_DATA u32 gIntrTable[6]; +EWRAM_DATA IntrCallback gIntrCallbacks[6]; extern u16 gBldCnt; extern u8 gUnknown_202D7FE; extern u8 gInterruptsEnabled; extern u16 gUnknown_203B0AC; extern s16 gUnknown_203B0AE; -extern u32 gIntrTable[]; extern char alt_203B038[]; @@ -227,9 +227,9 @@ void AckInterrupt(u16 flag) void InitIntrTable(const u32 *interrupt_table) { - CpuCopy32(interrupt_table, &gIntrTable, 0x18); // 0x18 = 0x6 * 4 (0x4f00 is 32 bits) - CpuCopy32(&IntrMain, &IntrMain_Buffer, 0x120); // 0x120 = 0x48 * 4 (0x4f00 is 32 bits) - INTR_VECTOR = &IntrMain_Buffer; + CpuCopy32(interrupt_table, gIntrTable, sizeof(gIntrTable)); // 0x18 = 0x6 * 4 (0x4f00 is 32 bits) + CpuCopy32(IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer)); // 0x120 = 0x48 * 4 (0x4f00 is 32 bits) + INTR_VECTOR = IntrMain_Buffer; } u32 *sub_800B6E8(u32 r0) diff --git a/src/main_menu.c b/src/main_menu.c index 052ad49..81b7525 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -5,6 +5,7 @@ #include "input.h" #include "menu.h" #include "memory.h" +#include "text.h" // NOTE: 0x13 and 0x14 // Communication Screen? @@ -74,17 +75,15 @@ struct unkStruct_203B34C u8 fillC[0x30 - 0xC]; s16 menuIndex; u8 fill32[0x144 - 0x32]; - struct unkData unk144[4]; + struct UnkTextStruct2 unk144[4]; /* 0x1A4 */ u32 currMenuChoice; }; extern struct unkStruct_203B34C *gUnknown_203B34C; extern struct MainMenu *gMainMenu; -extern struct unkData gUnknown_80E59A8; -extern struct unkData gUnknown_80E59C8; -extern void sub_8006518(struct unkData *); -extern void sub_800641C(struct unkData *, u32, u32); +extern struct UnkTextStruct2 gUnknown_80E59A8; +extern struct UnkTextStruct2 gUnknown_80E59C8; extern bool8 SetMainMenuText(); extern void SetMainMenuItems(); @@ -349,7 +348,7 @@ void sub_8035C1C(void) } void -SetMenuItems(struct unkStruct_Menu *param_1, struct unkData *unkData, int param_3, const struct unkData *param_4, const struct MenuItem *param_5, char param_6 ,u32 param_7, u32 unused_8) +SetMenuItems(struct unkStruct_Menu *param_1, struct UnkTextStruct2 *unkData, int param_3, const struct UnkTextStruct2 *param_4, const struct MenuItem *param_5, char param_6 ,u32 param_7, u32 unused_8) { unkData[param_3] = *param_4; ResetUnusedInputStruct(); @@ -363,7 +362,7 @@ SetMenuItems(struct unkStruct_Menu *param_1, struct unkData *unkData, int param_ param_1[param_3].unk4C = 1; } -void sub_8035CC0(struct unkData *dataArray, u32 index) +void sub_8035CC0(struct UnkTextStruct2 *dataArray, u32 index) { sub_8006518(dataArray); dataArray[index] = gUnknown_80E59A8; diff --git a/src/main_menu_1.c b/src/main_menu_1.c index 5363bf9..668df86 100644 --- a/src/main_menu_1.c +++ b/src/main_menu_1.c @@ -1,11 +1,7 @@ #include "global.h" #include "main_menu.h" #include "menu.h" - -struct unkData -{ - u8 unk0[24]; -}; +#include "text.h" struct unkStruct_203B34C { @@ -16,7 +12,7 @@ struct unkStruct_203B34C u8 fillC[0x30 - 0xC]; s16 menuIndex; u8 fill32[0x144 - 0x32]; - struct unkData unk144[4]; + struct UnkTextStruct2 unk144[4]; /* 0x1A4 */ u32 currMenuChoice; }; @@ -53,11 +49,11 @@ extern const struct MenuItem gUnknown_80E6030[]; extern u8 sub_803D0D8(); extern s32 sub_8011C34(); extern s32 sub_8095324(u32); -extern void SetMenuItems(u32 *, struct unkData *, u32, u32 *, const struct MenuItem *, u32, u32, 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 unkData *, u32); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); bool8 SetMainMenuText(void) { @@ -210,11 +206,11 @@ void SetMainMenuItems(void) } } -u8 sub_80363E0(void) +bool8 sub_80363E0(void) { if(gUnknown_203B34C == NULL) - return 0; + return FALSE; if(gUnknown_203B34C->unk0 == 0xC) - return 0; - return 1; + return FALSE; + return TRUE; } diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c index d35a659..b01e1a6 100644 --- a/src/makuhita_dojo.c +++ b/src/makuhita_dojo.c @@ -4,11 +4,7 @@ #include "input.h" #include "constants/species.h" #include "memory.h" - -struct unkData -{ - u8 unk0[24]; -}; +#include "text.h" struct unkStruct_203B318 { @@ -28,16 +24,13 @@ struct unkStruct_203B318 u8 unk66; u8 unk67; struct OpenedFile** unk68; - struct unkData unk6C[4]; + struct UnkTextStruct2 unk6C[4]; }; extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; extern struct unkStruct_203B318 *gUnknown_203B318; -extern struct unkData gUnknown_80E0760; - -extern void sub_800641C(struct unkData *, u32, u32); -extern void sub_8006518(struct unkData *); +extern struct UnkTextStruct2 gUnknown_80E0760; extern void sub_8030208(); extern void sub_8030258(); @@ -56,7 +49,7 @@ u32 CreateMakuhitaShop(u32 param_1) ResetUnusedInputStruct(); sub_800641C(0,1,1); - gUnknown_203B318 = MemoryAlloc(0xcc,8); + gUnknown_203B318 = MemoryAlloc(sizeof(struct unkStruct_203B318),8); gUnknown_203B318->unk10 = -1; gUnknown_203B318->unk0 = param_1; switch(param_1) { diff --git a/src/memory_mid.c b/src/memory_mid.c index 32628cb..1eb707c 100644 --- a/src/memory_mid.c +++ b/src/memory_mid.c @@ -15,32 +15,32 @@ void *DoAlloc(struct HeapDescriptor *, s32, u32); void FatalError(u32 *, u32 *, ...) __attribute__((noreturn)); -s32 _LocateSet(struct HeapDescriptor *heap, s32 size, s32 param_3) +s32 _LocateSet(struct HeapDescriptor *heap, s32 size, s32 group) { s32 index; struct HeapDescriptor * uVar2; - s32 uVar3; + s32 atb; if (heap == NULL) { heap = &gMainHeapDescriptor; } // Set some sort flag/attr? - uVar3 = param_3 >> 8 | 1; + atb = group >> 8 | 1; // Reset it? - param_3 = param_3 & 0xff; + group = group & 0xff; - if ((uVar3 & 2) != 0) { - index = MemorySearchFromFront(heap,uVar3,size); + if ((atb & 2) != 0) { + index = MemorySearchFromFront(heap,atb,size); if (index < 0) goto error; - uVar2 = _LocateSetFront(heap,index,uVar3,size,param_3); + uVar2 = _LocateSetFront(heap,index,atb,size,group); return uVar2->freeCount; } else { - index = MemorySearchFromBack(heap,uVar3,size); + index = MemorySearchFromBack(heap,atb,size); if (index < 0) goto error; - uVar2 = _LocateSetBack(heap,index,uVar3,size,param_3); + uVar2 = _LocateSetBack(heap,index,atb,size,group); return uVar2->freeCount; } @@ -49,7 +49,7 @@ error: // atb %02x grp %3d FatalError(&gUnknown_80B7F14, &gUnknown_80B7F20, - heap,size,uVar3,param_3); + heap,size,atb,group); } void *MemoryAlloc(s32 size, s32 b) diff --git a/src/other_menus.c b/src/other_menus.c index 193d800..0cfe949 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -4,16 +4,7 @@ #include "gUnknown_203B460.h" #include "menu.h" #include "memory.h" - -struct unkData -{ - u8 unk0[14]; - u16 unkD; - u16 unk10; - u16 unk12; - u8 *unk14; -}; - +#include "text.h" struct unkStruct_203B35C { @@ -24,41 +15,41 @@ struct unkStruct_203B35C u8 fillC[0x1C - 0xC]; u32 unk1C; u8 fill20[0x15C - 0x20]; - struct unkData unk15C[4]; + struct UnkTextStruct2 unk15C[4]; u8 unk1BC[4]; u32 unk1C0[9]; }; extern struct unkStruct_203B35C *gUnknown_203B35C; -extern struct unkData gUnknown_80E653C; +extern struct UnkTextStruct2 gUnknown_80E653C; -extern struct unkData gUnknown_80E66BC; +extern struct UnkTextStruct2 gUnknown_80E66BC; extern struct MenuItem gUnknown_80E66D4[]; -extern struct unkData gUnknown_80E6748; +extern struct UnkTextStruct2 gUnknown_80E6748; extern struct MenuItem gUnknown_80E6760[]; -extern struct unkData gUnknown_80E67D4; +extern struct UnkTextStruct2 gUnknown_80E67D4; extern struct MenuItem gUnknown_80E67EC[]; -extern struct unkData gUnknown_80E689C; +extern struct UnkTextStruct2 gUnknown_80E689C; extern struct MenuItem gUnknown_80E68B4[]; -extern struct unkData gUnknown_80E6938; +extern struct UnkTextStruct2 gUnknown_80E6938; extern struct MenuItem gUnknown_80E6950[]; -extern struct unkData gUnknown_80E69B0; +extern struct UnkTextStruct2 gUnknown_80E69B0; extern struct MenuItem gUnknown_80E69C8[]; -extern struct unkData gUnknown_80E6A10; +extern struct UnkTextStruct2 gUnknown_80E6A10; extern struct MenuItem gUnknown_80E6A28[]; -extern struct unkData gUnknown_80E6A74; +extern struct UnkTextStruct2 gUnknown_80E6A74; extern struct MenuItem gUnknown_80E6A8C[]; -extern struct unkData gUnknown_80E6B78; +extern struct UnkTextStruct2 gUnknown_80E6B78; extern struct MenuItem gUnknown_80E6B90[]; -extern struct unkData gUnknown_80E6BF4; +extern struct UnkTextStruct2 gUnknown_80E6BF4; extern struct MenuItem gUnknown_80E6C0C[]; -extern struct unkData gUnknown_80E6C50; +extern struct UnkTextStruct2 gUnknown_80E6C50; extern struct MenuItem gUnknown_80E6C68[]; -extern struct unkData gUnknown_80E6CD0; +extern struct UnkTextStruct2 gUnknown_80E6CD0; extern struct MenuItem gUnknown_80E6CE8[]; -extern struct unkData gUnknown_80E6DDC; +extern struct UnkTextStruct2 gUnknown_80E6DDC; extern struct MenuItem gUnknown_80E6DF4[]; -extern struct unkData gUnknown_80E6D54; +extern struct UnkTextStruct2 gUnknown_80E6D54; extern struct MenuItem gUnknown_80E6D6C[]; struct unkStruct_8035D94 @@ -73,11 +64,10 @@ extern struct unkStruct_8035D94 *sub_8035D94(); extern struct unkStruct_203B460 *gUnknown_203B460; extern void sub_8037400(void); -extern void sub_800641C(void *, u32, u32); extern void ResetSprites(u32); extern void sub_8035CF4(u32 *,u32, u32); extern void sub_80376CC(); -extern void sub_8035CC0(void *, u32); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); extern u8 sub_80130A8(u32 *); extern void sub_8013114(u32 *, u32 *); @@ -87,7 +77,7 @@ extern void sub_80371B8(void); extern void sub_8037900(void); extern void PlayMenuSoundEffect(u32); extern u32 sub_8037798(void); -extern void SetMenuItems(void *, void *, u32, struct unkData *, struct MenuItem *, u32, u32, u32); +extern void SetMenuItems(void *, void *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); extern void sub_8005838(u32, u32); extern void sub_80060EC(); extern void sub_800CB20(); @@ -309,7 +299,7 @@ void sub_80371B8(void) { struct unkStruct_8035D94 *pbVar2; struct MenuItem *MenuItems; - struct unkData *puVar5; + struct UnkTextStruct2 *puVar5; puVar5 = NULL; MenuItems = NULL; @@ -317,7 +307,7 @@ void sub_80371B8(void) if ((gUnknown_203B35C->unk0 < 2) &&(gUnknown_203B35C->unk4 == 0)) { if (sub_8037C10(0) != 0) { sub_80376CC(); - sub_8035CC0(&gUnknown_203B35C->unk15C,0); + sub_8035CC0(gUnknown_203B35C->unk15C,0); // Success! // The item exchange with your friend // went through successfully @@ -327,7 +317,7 @@ void sub_80371B8(void) } else { sub_80376CC(); - sub_8035CC0(&gUnknown_203B35C->unk15C, 0); + sub_8035CC0(gUnknown_203B35C->unk15C, 0); switch(gUnknown_203B35C->unk4) { case 0: puVar5 = &gUnknown_80E66BC; diff --git a/src/personality_test.c b/src/personality_test.c index ef31ec1..1ec55e2 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -9,9 +9,9 @@ #include "save.h" #include "memory.h" #include "gUnknown_203B46C.h" +#include "text.h" extern void sub_801317C(u32 *); -extern void sub_8099690(u32); extern void sub_8001024(u32 *); extern s32 sub_8094E4C(void); extern void sub_8094D28(s32); @@ -29,8 +29,6 @@ extern u32 sub_8016080(void); extern void sub_80160D8(void); extern void sub_8099690(u32); -extern void sub_8006518(void *); -extern void sub_800641C(void *, u32, u32); extern void sub_80073E0(u32); extern void sub_80073B8(u32); extern void sub_8008C54(u32); @@ -48,36 +46,13 @@ extern void PlayMenuSoundEffect(u32); extern void sub_8013984(struct UnkInputStruct **r0); u32 sub_8013800(struct UnkInputStruct **r0, u32); extern void AddMenuCursorSprite(struct UnkInputStruct **r0); -extern void xxx_call_draw_string(u32 size, u32, const char *text, u32, u32); +extern void xxx_call_draw_string(u32 x, u32 y, const char *text, u32, u32); extern u32 sub_80095E4(s16, u32); - -struct PersonalityAnswer -{ - const char * text; - int effect; -}; - -struct PersonalityQuestion -{ - const char * question; - const struct PersonalityAnswer * answers; - const u8 (*effects[16]); -}; - extern struct PersonalityQuestion *gPersonalityQuestionPointerTable[NUM_QUIZ_QUESTIONS]; extern struct UnkSaveStruct1 *gUnknown_203B46C; -struct stack_PartnerSprite -{ - // size: 0x60 - u32 unk0; - u8 padding[0x18 - 4]; - struct unkData data; - u32 padding2[12]; -}; - extern const char gStarterReveal[]; extern const char gGenderText[]; extern u32 gGenderMenu; @@ -100,17 +75,17 @@ extern const char gRelaxedDescription[]; extern const char gLonelyDescription[]; extern const char gQuirkyDescription[]; -const char gStarterReveal[] = _("\n{CENTER_ALIGN}The Pokémon $m0!"); +ALIGNED(4) const char gStarterReveal[] = _("\n{CENTER_ALIGN}The Pokémon $m0!"); const char * const gStarterRevealPtr = gStarterReveal; -const char gPartnerPrompt[] = _( +ALIGNED(4) const char gPartnerPrompt[] = _( "{CENTER_ALIGN}This is the final step.{WAIT_PRESS}\n" "{CENTER_ALIGN}Who would you like to have as a partner?{EXTRA_MSG}" "{CENTER_ALIGN}Choose the Pokémon you want\n" "{CENTER_ALIGN}as your partner from this group."); const char * const gPartnerPromptPtr = gPartnerPrompt; -const char gPartnerNickPrompt[] = _("{CENTER_ALIGN}What is your partner~27s nickname?"); +ALIGNED(4) const char gPartnerNickPrompt[] = _("{CENTER_ALIGN}What is your partner~27s nickname?"); const char * const gPartnerNickPromptPtr = gPartnerNickPrompt; ALIGNED(4) const char gEndIntroText[] = _( @@ -139,13 +114,13 @@ const char * const gPersonalityTypeDescriptionTable[NUM_PERSONALITIES] = #include "data/nature_description.h" -struct unkData gUnknown_80F4244 = +const struct UnkTextStruct2 gUnknown_80F4244 = { - 0, 0, - 5, 0, - 0xC, 6, - 5, 5, - 5,0, + 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x06, 0x00, + 0x05, 0x05, + 0x05, 0x00, NULL }; @@ -165,31 +140,31 @@ const s16 gPartners[NUM_PARTNERS] = SPECIES_MUDKIP }; -const struct unkData gUnknown_80F4278 = +const struct UnkTextStruct2 gUnknown_80F4278 = { - 0x00, 0x00, - 0x03, 0x00, - 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, NULL }; -const struct unkData gUnknown_80F4290 = +const struct UnkTextStruct2 gUnknown_80F4290 = { - 0x00, 0x00, - 0x06, 0x00, - 0x02, 0x02, + 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, 0x09, 0x0B, 0x0D, 0x00, NULL }; -const struct unkData gUnknown_80F42A8 = +const struct UnkTextStruct2 gUnknown_80F42A8 = { - 0x00, 0x00, - 0x05, 0x00, - 0x0E, 0x04, + 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x04, 0x00, 0x05, 0x05, 0x05, 0x00, NULL @@ -344,67 +319,31 @@ void CallPromptNewQuestion(void) gUnknown_203B400->TestState = 2; } -NAKED -void UpdateNatureTotals(void) +void UpdateNatureTotals() { - asm_unified( - "\tpush {r4-r6,lr}\n" - "\tsub sp, 0x4\n" - "\tmov r0, sp\n" - "\tbl sub_80144A4\n" - "\tcmp r0, 0\n" - "\tbne _0803C97C\n" - "\tldr r3, [sp]\n" - "\tcmp r3, 0x63\n" - "\tbne _0803C944\n" - "\tldr r0, _0803C940\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x37\n" - "\tstr r0, [r1, 0x3C]\n" - "\tmovs r0, 0x1\n" - "\tb _0803C97A\n" - "\t.align 2, 0\n" -"_0803C940: .4byte gUnknown_203B400\n" -"_0803C944:\n" - "\tldr r1, _0803C984\n" - "\tldr r2, _0803C988\n" - "\tldr r0, [r2]\n" - "\tldr r0, [r0, 0x3C]\n" - "\tlsls r0, 2\n" - "\tadds r0, r1\n" - "\tldr r0, [r0]\n" - "\tldr r4, [r0, 0x8]\n" - "\tlsls r0, r3, 4\n" - "\tadds r4, r0\n" - "\tmovs r3, 0\n" - "\tadds r6, r2, 0\n" - "\tadds r5, r6, 0\n" -"_0803C95E:\n" - "\tldr r1, [r5]\n" - "\tlsls r0, r3, 2\n" - "\tadds r1, 0x44\n" - "\tadds r1, r0\n" - "\tadds r0, r4, r3\n" - "\tldrb r2, [r0]\n" - "\tldr r0, [r1]\n" - "\tadds r0, r2\n" - "\tstr r0, [r1]\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0xC\n" - "\tble _0803C95E\n" - "\tldr r1, [r6]\n" - "\tmovs r0, 0\n" -"_0803C97A:\n" - "\tstr r0, [r1, 0x34]\n" -"_0803C97C:\n" - "\tadd sp, 0x4\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0803C984: .4byte gPersonalityQuestionPointerTable\n" -"_0803C988: .4byte gUnknown_203B400" - ); + s32 answerIndex; + s32 natureIndex; + const u8 *pointArray; + + if (!sub_80144A4(&answerIndex)) + { + if (answerIndex == 99) + { + gUnknown_203B400->currQuestionIndex = NUM_QUIZ_QUESTIONS; + gUnknown_203B400->TestState = 1; + } + else + { + pointArray = gPersonalityQuestionPointerTable[gUnknown_203B400->currQuestionIndex]->effects; + // Skip until we get to the one for our answer + pointArray += 16 * answerIndex; + for (natureIndex = 0; natureIndex < NUM_PERSONALITIES; natureIndex++) + { + gUnknown_203B400->NatureTotals[natureIndex] += pointArray[natureIndex]; + } + gUnknown_203B400->TestState = 0; + } + } } void SetPlayerGender(void) @@ -635,13 +574,13 @@ void PersonalityTest_DisplayStarterSprite(void) int palleteIndex; u8 *r6; u32 faceIndex; - struct stack_PartnerSprite stackArray; + struct UnkTextStruct2 stackArray[4]; starterID = gUnknown_203B400->StarterID; - sub_8006518(&stackArray); - stackArray.data = gUnknown_80F4244; + sub_8006518(stackArray); + stackArray[1] = gUnknown_80F4244; ResetUnusedInputStruct(); - sub_800641C(&stackArray, 1, 0); + sub_800641C(stackArray, 1, 0); sub_8008C54(1); sub_80073B8(1); faceFile = GetDialogueSpriteDataPtr(starterID); @@ -753,7 +692,7 @@ void sub_803CECC(void) void RedrawPartnerSelectionMenu(void) { s32 sVar1; - u32 uVar2; + u32 yCoord; const char *monName; s32 monCounter; @@ -776,9 +715,9 @@ void RedrawPartnerSelectionMenu(void) monCounter = 0; while (monCounter < gUnknown_203B404->unk32) { - uVar2 = sub_8013800(&gUnknown_203B404->unk18, monCounter); + yCoord = sub_8013800(&gUnknown_203B404->unk18, monCounter); monName = GetMonSpecies(gUnknown_203B404->PartnerArray[monCounter]); - xxx_call_draw_string(8, uVar2, monName, gUnknown_203B404->unk4C, 0); + xxx_call_draw_string(8, yCoord, monName, gUnknown_203B404->unk4C, 0); monCounter++; } sub_80073E0(gUnknown_203B404->unk4C); diff --git a/src/play_time.c b/src/play_time.c index 37af5fe..7622e31 100644 --- a/src/play_time.c +++ b/src/play_time.c @@ -2,7 +2,7 @@ #include "play_time.h" extern struct PlayTimeStruct *gPlayTimeRef; -extern struct PlayTimeStruct gPlayTime; +EWRAM_DATA struct PlayTimeStruct gPlayTime; extern void sub_809488C(u8 *r0, u8 *r1, u32); extern void sub_8094924(u8 *r0, u8 *r1, u32); @@ -76,7 +76,7 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut } } -void sub_8095044(u8 *r0) +void WritePlayTime(u8 *r0) { sub_809488C(r0, (&(gPlayTimeRef->frames)), 6); sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6); @@ -84,7 +84,7 @@ void sub_8095044(u8 *r0) sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14); } -void sub_8095080(u8 *r0) +void ReadPlayTime(u8 *r0) { sub_8094924(r0, (&(gPlayTimeRef->frames)), 6); sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6); diff --git a/src/pokemon.c b/src/pokemon.c index e87c8c6..2499e11 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3,17 +3,17 @@ #include "file_system.h" #include "constants/species.h" -extern struct unkStruct_203B45C gRecruitedPokemon[]; extern struct FileArchive gSystemFileArchive; extern const char gUnknown_81075F4; -extern struct OpenedFile *gMonsterParametersFile; -extern u16 gLevelCurrentPokeId; -extern struct gPokemon *gMonsterParameters; +EWRAM_DATA struct gPokemon *gMonsterParameters; +EWRAM_DATA struct OpenedFile *gMonsterParametersFile; +EWRAM_DATA struct unkStruct_203B45C gRecruitedPokemon; extern struct unkStruct_203B45C *gRecruitedPokemonRef; +EWRAM_DATA u16 gLevelCurrentPokeId; void LoadMonsterParameters(void) { - gRecruitedPokemonRef = gRecruitedPokemon; + gRecruitedPokemonRef = &gRecruitedPokemon; gMonsterParametersFile = OpenFileAndGetFileDataPtr(&gUnknown_81075F4, &gSystemFileArchive); gMonsterParameters = (struct gPokemon *)gMonsterParametersFile->data; gLevelCurrentPokeId = 0; @@ -21,7 +21,7 @@ void LoadMonsterParameters(void) struct unkStruct_203B45C *GetRecruitedPokemon(void) { - return gRecruitedPokemon; + return &gRecruitedPokemon; } void InitializeRecruitedPokemon(void) diff --git a/src/pokemon_1.c b/src/pokemon_1.c index a6aff55..86f410d 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -7,6 +7,10 @@ extern int sprintf(char *, const char *, ...); extern struct gPokemon *gMonsterParameters; extern struct FileArchive gMonsterFileArchive; extern const char gUnknown_8107684[]; +extern struct unkStruct_203B45C *gRecruitedPokemonRef; + +extern void sub_808DE50(void* r0, struct PokemonStruct *r1, u32 r2, u32 r3); + u8 *GetCategoryString(s16 index) { @@ -217,3 +221,8 @@ bool8 IsPokemonDialogueSpriteAvail(s16 index, s32 r1) // checking to see if dialogue sprite is available?? return (gMonsterParameters[index].dialogue_sprites >> r1) & 1; } + +void sub_808DE30(void* r0, u32 r1) +{ + sub_808DE50(r0, &gRecruitedPokemonRef->pokemon[r1], r1, r1 * sizeof(struct PokemonStruct)); +} diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index e8405c8..9653217 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -10,12 +10,12 @@ extern const char gUnknown_8107630[]; extern const char gUnknown_8107638[]; extern const char gUnknown_810763C[]; -extern void sub_800D158(u8 *buffer, const char *r2, ...); +extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *r2, ...); extern s16 sub_808E770(u32); extern s32 GetUnownIndex(s32); extern void sub_80922B4(u8 *, u8 *, s32); -extern void sub_800D158(u8 *buffer, const char *r2, ...); +extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *r2, ...); void CopySpeciesNametoBuffer(u8 * buffer, s16 index) { @@ -25,13 +25,13 @@ void CopySpeciesNametoBuffer(u8 * buffer, s16 index) void CopyYellowSpeciesNametoBuffer(u8 *buffer, s16 index) { s32 new_index = index; - sub_800D158(buffer, gUnknown_8107600, gMonsterParameters[new_index].species); // #c6%s#r + ExpandPlaceholdersBuffer(buffer, gUnknown_8107600, gMonsterParameters[new_index].species); // #c6%s#r } void CopyCyanSpeciesNametoBuffer(u8 *buffer, s16 index) { s32 new_index = index; - sub_800D158(buffer, gUnknown_8107608, gMonsterParameters[new_index].species); // #c5%s#r + ExpandPlaceholdersBuffer(buffer, gUnknown_8107608, gMonsterParameters[new_index].species); // #c5%s#r } void sub_808D930(u8 *buffer, s16 index) @@ -46,10 +46,10 @@ void sub_808D930(u8 *buffer, s16 index) preload = gUnknown_8107630; // %s%c unownString = GetMonSpecies(SPECIES_UNOWN); unownIndex = GetUnownIndex(newIndex); - sub_800D158(buffer,preload,unownString,gUnownLetters[unownIndex]); // ABCDEFGHIJKLMNOPQRSTUVWXYZ!? + ExpandPlaceholdersBuffer(buffer,preload,unownString,gUnownLetters[unownIndex]); // ABCDEFGHIJKLMNOPQRSTUVWXYZ!? } else { - sub_800D158(buffer,gUnknown_8107638, gMonsterParameters[newIndex].species); // %s + ExpandPlaceholdersBuffer(buffer,gUnknown_8107638, gMonsterParameters[newIndex].species); // %s } } @@ -58,37 +58,37 @@ char * GetMonSpecies(s16 index) return gMonsterParameters[index].species; } -void sub_808D9AC(u8 *param_1, u8 *param_2, s32 param_3) +void sub_808D9AC(u8 *buffer, struct PokemonStruct *pokemon, s32 colorNum) { u8 auStack32 [20]; - sub_80922B4(auStack32, param_2 + 0x4c, 10); - if (param_3 == 0) { - param_3 = 5; + sub_80922B4(auStack32, pokemon->name, 10); + if (colorNum == 0) { + colorNum = 5; } - sub_800D158(param_1,gUnknown_810763C,param_3,auStack32); // #c%c%s#r + ExpandPlaceholdersBuffer(buffer,gUnknown_810763C,colorNum,auStack32); // #c%c%s#r } -void sub_808D9DC(u8 *param_1, u8 *param_2, s32 param_3) +void sub_808D9DC(u8 *buffer, u8 *param_2, s32 colorNum) { u8 auStack32 [20]; sub_80922B4(auStack32, param_2 + 0x58, 10); - if (param_3 == 0) { - param_3 = 6; + if (colorNum == 0) { + colorNum = 6; } - sub_800D158(param_1,gUnknown_810763C,param_3,auStack32); // #c%c%s#r + ExpandPlaceholdersBuffer(buffer,gUnknown_810763C,colorNum,auStack32); // #c%c%s#r } -void sub_808DA0C(u8 *param_1, u8 *param_2) +void sub_808DA0C(u8 *buffer, u8 *param_2) { u8 auStack32 [20]; sub_80922B4(auStack32, param_2 + 0x58, 10); - sub_800D158(param_1,gUnknown_8107638,auStack32); // %s + ExpandPlaceholdersBuffer(buffer,gUnknown_8107638,auStack32); // %s } -void sub_808DA34(u8 *param_1, u8 *param_2) +void sub_808DA34(u8 *buffer, struct PokemonStruct *pokemon) { - sub_80922B4(param_1, param_2 + 0x4c, 10); + sub_80922B4(buffer, pokemon->name, 10); } diff --git a/src/post_office_guide.c b/src/post_office_guide.c index dd28446..2c0f1d6 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -5,6 +5,7 @@ #include "constants/species.h" #include "menu.h" #include "memory.h" +#include "text.h" struct PostOfficeHelper { @@ -23,12 +24,6 @@ struct PostOfficeHelper extern struct PostOfficeHelper *gPostOfficeHelper; -struct unkData -{ - u8 unk0[20]; - const u8 *unk20; -}; - struct unkStruct_203B330 { // size: 0x78 @@ -38,8 +33,8 @@ struct unkStruct_203B330 u8 unkD; u8 fillE[2]; u32 unk10; - struct unkData *unk14; - struct unkData unk18[3]; + struct UnkTextStruct2 *unk14; + struct UnkTextStruct2 unk18[3]; }; extern struct unkStruct_203B330 *gUnknown_203B330; @@ -137,25 +132,25 @@ ALIGNED(4) const char GettingHelp_Text[] = _("Getting Help"); ALIGNED(4) const u8 wonder_mail_fill[] = _("pksdir0"); -const struct unkData gUnknown_80E1EFC = +const struct UnkTextStruct2 gUnknown_80E1EFC = { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0, 0, 0, + 0, 0, + 0, 0, NULL }; const u8 gUnkData_80E1F14[] = {1, 0, 8, 0}; -const struct unkData gUnknown_80E1F18 = +const struct UnkTextStruct2 gUnknown_80E1F18 = { 0, 0, 0, 0, 6, 0, 0, 0, 2, 0, 2, 0, - 0x14, 0, 4, 0, - 4, 0, 0, 0, + 0x14, 4, + 4, 0, gUnkData_80E1F14 }; @@ -168,8 +163,6 @@ extern void sub_8031AE8(); extern u8 gUnknown_202E5D8[]; extern u8 gAvailablePokemonNames[]; -extern void sub_800641C(struct unkData *, u32, u32); -extern void sub_8006518(struct unkData *); extern void sub_8031A2C(void); extern void sub_801317C(void *); @@ -184,7 +177,7 @@ extern void HandlePostOfficeHelpGetHelpMenuSelection(); extern void sub_8031988(); extern s32 sub_80144A4(s32 *); extern s32 sub_80969D0(u8); -extern void sub_8012D08(struct unkData *, s32); +extern void sub_8012D08(struct UnkTextStruct2 *, s32); u32 CreateHelperPelipperMenu(s16 speciesID) diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c index 205ce18..0f3b0f9 100644 --- a/src/rescue_team_info.c +++ b/src/rescue_team_info.c @@ -2,7 +2,7 @@ #include "rescue_team_info.h" extern struct RescueTeamData *gRescueTeamInfoRef; -extern struct RescueTeamData gRescueTeamInfo; +EWRAM_DATA struct RescueTeamData gRescueTeamInfo; extern void sub_809485C(u32 *r0, u8 *r1, u32 r2); extern void sub_809486C(u32 *r0, u8 *r1, u32 r2); @@ -131,7 +131,7 @@ u8 sub_80921B8(void) return gRescueTeamInfoRef->unk10; } -u32 sub_80921C4(u8 *param_1, u32 param_2) +u32 SaveRescueTeamInfo(u8 *param_1, u32 param_2) { u32 auStack36[4]; @@ -160,7 +160,7 @@ u32 sub_80921C4(u8 *param_1, u32 param_2) return auStack36[2]; } -u32 sub_809222C(u8 *param_1, u32 param_2) +u32 ReadRescueTeamInfo(u8 *param_1, u32 param_2) { u32 auStack32 [4]; u8 byteArray[4]; diff --git a/src/save.c b/src/save.c index 4f71d9a..b040f72 100644 --- a/src/save.c +++ b/src/save.c @@ -10,72 +10,69 @@ struct unk_struct { + // size: 0x800 u32 unk0; - u32 unk4; - u32 unk8; - u32 unkC; - u32 unk10; + u8 unk4[0x10]; // has "POKE_DUNGEON__05 u32 unk14; u32 unk18; u32 unk1C; - u32 padding[504]; + u32 unk20; + u32 padding[503]; }; -struct unk_203B188 +struct SavePakRead { u32 state; u32 readStatus; }; +extern struct SavePakRead *gSavePakRead; -extern struct unk_203B188 *gUnknown_203B188; - -struct unkStruct_203B18C +struct SavePakWrite { u32 state; s32 unk4; u32 saveStatus; struct OpenedFile *faceFile; u8 *faceData; - u16 unk14; - u16 unk16; - u8 unk18; - u8 unk19; - u8 unk1A; - u8 unk1B; - u16 pokeID; + u16 unk14; + u16 unk16; + u8 unk18; + u8 unk19; + u8 unk1A; + u8 unk1B; + u16 pokeID; }; -extern struct unkStruct_203B18C *gUnknown_203B18C; +extern struct SavePakWrite *gSavePakWrite; -struct unkStruct_203B190 +struct QuickSaveRead { s32 state; - u8 *unk4; - u32 unk8; - u8 unkC; + u8 *dest; + u32 size; + bool8 saveValid; }; -extern struct unkStruct_203B190 *gUnknown_203B190; +extern struct QuickSaveRead *gQuickSaveRead; -struct unkStruct_203B194 +struct QuickSaveWrite { s32 state; u8 *unk4; u32 unk8; u8 unkC; - u8 fillD[3]; u32 quickSaveStatus; }; -extern struct unkStruct_203B194 *gUnknown_203B194; +extern struct QuickSaveWrite *gQuickSaveWrite; extern s32 gUnknown_202DE28; extern u32 gUnknown_203B17C; extern char *gUnknown_203B180; -extern u32 *gRecruitedPokemonRef; -extern u32 *gUnknown_203B460; +extern struct unkStruct_203B45C *gRecruitedPokemonRef; +extern struct unkStruct_203B460 *gUnknown_203B460; extern struct RescueTeamData *gRescueTeamInfoRef; -extern u8 *gFriendAreas; +extern bool8 *gFriendAreas; extern u32 gUnknown_203B46C; extern u8 *gUnknown_203B480; extern u8 *gUnknown_203B484; @@ -85,10 +82,17 @@ extern u32 gUnknown_203B490; extern u32 gUnknown_203B494; extern struct ExclusivePokemonData *gUnknown_203B498; +ALIGNED(4) const char PokeDungeon_Text[] = _("POKE_DUNGEON__05"); + +ALIGNED(4) const char fill_save0[] = _("pksdir0"); +ALIGNED(4) const char fill_save1[] = _("pksdir0"); +ALIGNED(4) const char fill_save2[] = _("pksdir0"); +ALIGNED(4) const char fill_save3[] = _("pksdir0"); + ALIGNED(4) const char gSaveCorrupted[] = _("#+The game data is corrupted.\n" "#+Your data will be erased."); -ALIGNED(4) const char fill_save0[] = _("pksdir0"); +ALIGNED(4) const char fill_save4[] = _("pksdir0"); ALIGNED(4) const char gSavingAdventure[] = _("#+Saving your adventure...\n" "#+Please don~27t turn off the power."); @@ -105,7 +109,7 @@ ALIGNED(4) const char gSaveNotWritten[] = _("#+The data could not be written.\n" ALIGNED(4) const char gSaveFailed[] = _("#+Save failed."); -ALIGNED(4) const char fill_save1[] = _("pksdir0"); +ALIGNED(4) const char fill_save5[] = _("pksdir0"); ALIGNED(4) const char gUnknown_80D44C8[] = _("#+Your data was not properly saved~2c\n" "#+so your game cannot be resumed\n" @@ -114,7 +118,7 @@ ALIGNED(4) const char gUnknown_80D44C8[] = _("#+Your data was not properly saved "#+Before shutting down~2c save in your\n" "#+team base~2c or quicksave in a dungeon."); -ALIGNED(4) const char fill_save2[] = _("pksdir0"); +ALIGNED(4) const char fill_save6[] = _("pksdir0"); ALIGNED(4) const char gUnknown_80D45AC[] = _("#+Quicksaving your adventure...\n" "#+Please don~27t turn off the power."); @@ -135,7 +139,7 @@ ALIGNED(4) const char gSaveNotWritten2[] = _("#+The data could not be written.\n "#+and reinsert the DS Card."); ALIGNED(4) const char gSaveFailed2[] = _("#+Save failed."); -ALIGNED(4) const char fill_save3[] = _("pksdir0"); +ALIGNED(4) const char fill_save7[] = _("pksdir0"); extern volatile struct UnkStruct_203B184 *gUnknown_203B184; @@ -147,15 +151,13 @@ extern void sub_80140DC(); extern void sub_8014114(); extern void sub_80141B4(const char *r0, u32 r1, u8 *r2, u16 r3); extern u32 sub_80144A4(u32 *a); -extern u32 sub_808ED78(u8 *, u32); -extern u32 sub_808EE9C(void* a, s32 b); +extern u32 SaveRecruitedPokemon(u8 *, u32); +extern u32 ReadRecruitedPokemon(void* a, s32 b); extern u32 sub_808F154(u8 *, u32); extern u32 sub_808F2B0(void* a, s32 b); extern u32 sub_8091C68(u8 *, u32); extern u32 sub_8091D14(void* a, s32 b); extern u32 sub_80921C4(u8 *, u32); -extern u32 SaveFriendAreas(u8 *, u32); -extern u32 ReadSavedFriendAreas(void* a, s32 b); extern u8 *sub_8095100(void); extern u32 *sub_8095108(void); extern u32 *sub_8095110(void); @@ -169,10 +171,6 @@ extern u32 sub_8097D60(u8 *, u32); extern u32 sub_8097D98(void* a, s32 b); extern void sub_80993E4(); extern void sub_800135C(void); -extern u32 *GetRecruitedPokemon(void); -extern void InitializeRecruitedPokemon(void); -extern u32 *GetMoneyItemsInfo(void); -extern void InitializeMoneyItems(void); extern u32 GetGameOptions(void); extern void InitializeGameOptions(u8 r0); extern u8 *sub_80950F8(void); @@ -183,7 +181,7 @@ extern void sub_80972F4(void); extern u32 sub_8097680(void); extern u32 *sub_809769C(void); extern void sub_80974E8(void); -extern void sub_8097748(void); +extern void ResetNumAdventures(void); extern void sub_80993D8(void); extern struct PlayTimeStruct *gPlayTimeRef; @@ -213,7 +211,7 @@ void sub_8011C40(s32 in) char *sub_8011C4C(void) { - return gUnknown_203B180; + return gUnknown_203B180; // returns POKE_DUNGEON__05 } void CalculateChecksum(u8 *out, u32 size) @@ -304,15 +302,15 @@ u32 ReadSaveSector(s32 *a, u8 *dest, s32 size) } } else { - return 1; + return READ_SAVE_FAILED; } if (r1) { - return 1; + return READ_SAVE_FAILED; } if (ValidateChecksum(dest, size)) { - return 2; + return READ_SAVE_CHECKSUM_ERROR; } - return 0; + return READ_SAVE_VALID; } // Unused @@ -346,12 +344,12 @@ u32 ReadSaveFromPak(u32 *a) if (gUnknown_203B184 == NULL) { sub_8011C28(r5->unk41C); sub_8011C40(r5->unk418); - SetRngState(r5->unk420); + SetRngState(r5->RngState); } else { gUnknown_203B184->unk054 = r5->unk41C; gUnknown_203B184->unk050 = r5->unk418; - gUnknown_203B184->unk058 = r5->unk420; + gUnknown_203B184->RngState = r5->RngState; } } if (!r7) @@ -367,8 +365,8 @@ u32 ReadSaveFromPak(u32 *a) } if (!r7) { - r1 = sub_808EE9C(r4, 0x4650); - if (r1 != r5->unk424) { + r1 = ReadRecruitedPokemon(r4, 0x4650); + if (r1 != r5->savedRecruitedPokemon) { r7 = 3; } r4 += 0x4650; @@ -382,8 +380,8 @@ u32 ReadSaveFromPak(u32 *a) r7 = 3; } r4 += 0x1d8; - r1 = sub_809222C(r4, 0x10); - if (r1 != r5->unk434) { + r1 = ReadRescueTeamInfo(r4, 0x10); + if (r1 != r5->savedRescueTeamInfo) { r7 = 3; } r4 += 0x10; @@ -424,7 +422,7 @@ u32 sub_8011FA8(void) struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5); temp = 0x1F; temp2 = ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct)); - if( temp2 == 0) + if( temp2 == READ_SAVE_VALID) { if(r5->unk14 != 0x5071412) { @@ -432,7 +430,7 @@ u32 sub_8011FA8(void) } } temp3 = 0xf1209; - if(temp2 == 0) + if(temp2 == READ_SAVE_VALID) { temp3 = r5->unk18; } @@ -447,7 +445,7 @@ bool8 IsSaveCorrupted(void) struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5); temp = 0x1F; isCorrupted = FALSE; - if(ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct)) == 0) + if(ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct)) == READ_SAVE_VALID) { if(r5->unk14 == 0x5071412) { @@ -471,30 +469,30 @@ u32 WriteSavetoPak(s32 *param_1,u32 param_2) if (gUnknown_203B184 == NULL) { iVar1->unk41C = param_2; iVar1->unk418 = sub_8011C34(); - iVar1->unk420 = GetRngState(); + iVar1->RngState = GetRngState(); } else { iVar1->unk41C = gUnknown_203B184->unk054; iVar1->unk418 = gUnknown_203B184->unk050; - iVar1->unk420 = gUnknown_203B184->unk058; + iVar1->RngState = gUnknown_203B184->RngState; } iVar1->unk414 = 0x5071412; __src = sub_8011C4C(); - strncpy(iVar1->unk404,__src,16); + strncpy(iVar1->unk404,__src, ARRAY_COUNT(iVar1->unk404)); if (gUnknown_203B184 == NULL) { - sub_8002700(&iVar1->unk004); + sub_8002700(iVar1->unk004); } else { - MemoryCopy8(iVar1->unk004,gUnknown_203B184->unk04C,0x400); + MemoryCopy8(iVar1->unk004,gUnknown_203B184->unk04C,ARRAY_COUNT(iVar1->unk004)); } - iVar1->unk424 = sub_808ED78(array_ptr,0x4650); + iVar1->savedRecruitedPokemon = SaveRecruitedPokemon(array_ptr,0x4650); array_ptr += 0x4650; iVar1->unk428 = sub_808F154(array_ptr,0x258); array_ptr += 0x258; iVar1->unk430 = sub_8091C68(array_ptr,0x1D8); array_ptr += 0x1D8; - iVar1->unk434 = sub_80921C4(array_ptr,0x10); + iVar1->savedRescueTeamInfo = SaveRescueTeamInfo(array_ptr,0x10); array_ptr += 0x10; iVar1->savedFriendAreas = SaveFriendAreas(array_ptr,8); array_ptr += 8; @@ -508,12 +506,12 @@ u32 WriteSavetoPak(s32 *param_1,u32 param_2) r4 = WriteSaveSector(param_1,(u8 *)iVar1,sizeof(struct UnkStruct_sub_8011DAC)); MemoryFree(iVar1); - if (r5 != 0) + if (r5 != SAVE_COMPLETED) return r5; - if (r4 != 0) + if (r4 != SAVE_COMPLETED) return r4; - return 0; // Success + return SAVE_COMPLETED; } @@ -525,7 +523,7 @@ s32 sub_80121D4(s32 *a, u8 *src, s32 size) u32 sub_80121E0(u32 r0) { u32 temp; - char *temp2; + char *string; u32 temp3; struct unk_struct *r4 = MemoryAlloc(sizeof(struct unk_struct), 5); temp = 0x1F; @@ -534,8 +532,8 @@ u32 sub_80121E0(u32 r0) r4->unk1C = *sub_809769C(); r4->unk14 = 0x5071412; - temp2 = sub_8011C4C(); - strncpy((u8 *)r4 + 4, temp2, 16); + string = sub_8011C4C(); + strncpy(r4->unk4, string, ARRAY_COUNT(r4->unk4)); sub_80958E4((u8 *)r4 + 32, 0); temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct)); MemoryFree(r4); @@ -591,7 +589,7 @@ void sub_80122D0(void) { sub_8011C28(0); sub_8011C40(-1); - sub_8097748(); + ResetNumAdventures(); ResetPlayTime(gPlayTimeRef); } @@ -626,7 +624,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0) gUnknown_203B184 = r0; if(r0 != NULL) { - gUnknown_203B460 = r0->unk0; + gUnknown_203B460 = r0->MoneyItems; gRecruitedPokemonRef = r0->recruitedPokemon; gUnknown_203B480 = r0->unk8; gUnknown_203B484 = r0->unkC; @@ -657,52 +655,52 @@ void sub_8012334(struct UnkStruct_203B184 *r0) } -void sub_8012468(void) +void PrepareSavePakRead(void) { - gUnknown_203B188 = MemoryAlloc(sizeof(struct unk_203B188), 5); - gUnknown_203B188->state = 1; + gSavePakRead = MemoryAlloc(sizeof(struct SavePakRead), 5); + gSavePakRead->state = 1; } -u8 sub_8012484(void) +u8 ReadSavePak(void) { u32 temp; u32 temp2; - switch(gUnknown_203B188->state) + switch(gSavePakRead->state) { case 0: - gUnknown_203B188->state = 1; + gSavePakRead->state = 1; break; case 1: temp = 0; - gUnknown_203B188->readStatus = ReadSaveFromPak(&temp); - gUnknown_203B188->state = 2; + gSavePakRead->readStatus = ReadSaveFromPak(&temp); + gSavePakRead->state = 2; break; case 2: - if(gUnknown_203B188->readStatus != 0) + if(gSavePakRead->readStatus != READ_SAVE_VALID) { if(IsSaveCorrupted()) { sub_80141B4(gSaveCorrupted, 0, 0, 0x301); - gUnknown_203B188->state = 3; + gSavePakRead->state = 3; } else { - gUnknown_203B188->state = 4; + gSavePakRead->state = 4; } } else { - gUnknown_203B188->state = 6; + gSavePakRead->state = 6; } break; case 3: if(sub_80144A4(&temp2) == 0) - gUnknown_203B188->state = 4; + gSavePakRead->state = 4; break; case 4: sub_8012298(); - gUnknown_203B188->state = 6; + gSavePakRead->state = 6; case 5: break; case 6: @@ -711,16 +709,16 @@ u8 sub_8012484(void) return 1; } -void sub_8012558(void) +void FinishReadSavePak(void) { - if(gUnknown_203B188 != NULL) + if(gSavePakRead != NULL) { - MemoryFree(gUnknown_203B188); - gUnknown_203B188 = NULL; + MemoryFree(gSavePakRead); + gSavePakRead = NULL; } } -void sub_8012574(s16 PokemonID) +void PrepareSavePakWrite(s16 PokemonID) { struct OpenedFile *file; s32 id_s32; @@ -729,138 +727,138 @@ void sub_8012574(s16 PokemonID) id_s32 = PokemonID; // had to cast for asr shift sub_80993D8(); - gUnknown_203B18C = MemoryAlloc(sizeof(struct unkStruct_203B18C),5); - gUnknown_203B18C->pokeID = id_s32; - gUnknown_203B18C->faceFile = NULL; - gUnknown_203B18C->faceData = NULL; + gSavePakWrite = MemoryAlloc(sizeof(struct SavePakWrite),5); + gSavePakWrite->pokeID = id_s32; + gSavePakWrite->faceFile = NULL; + gSavePakWrite->faceData = NULL; if (PokemonID != 0) { file = GetDialogueSpriteDataPtr(PokemonID); - gUnknown_203B18C->faceFile = file; - gUnknown_203B18C->faceData = file->data; - gUnknown_203B18C->unk18 = 0; - gUnknown_203B18C->unk19 = 0; - gUnknown_203B18C->unk1A = 0; - gUnknown_203B18C->unk14 = 2; - gUnknown_203B18C->unk16 = 8; + gSavePakWrite->faceFile = file; + gSavePakWrite->faceData = file->data; + gSavePakWrite->unk18 = 0; + gSavePakWrite->unk19 = 0; + gSavePakWrite->unk1A = 0; + gSavePakWrite->unk14 = 2; + gSavePakWrite->unk16 = 8; } - if (gUnknown_203B18C->faceFile != 0) { - preload_face = (u8 *)&gUnknown_203B18C->faceFile; + if (gSavePakWrite->faceFile != 0) { + preload_face = (u8 *)&gSavePakWrite->faceFile; sub_80141B4(gSavingAdventure,0,preload_face,0x20); } else { sub_80141B4(gSavingAdventure,0,0,0x20); } - gUnknown_203B18C->state = 3; + gSavePakWrite->state = 3; } -bool8 sub_8012600(void) +bool8 WriteSavePak(void) { struct OpenedFile **faceFile; u32 local_14; u32 other_stack; faceFile = NULL; - if (gUnknown_203B18C->faceFile != 0) { - faceFile = &gUnknown_203B18C->faceFile; + if (gSavePakWrite->faceFile != 0) { + faceFile = &gSavePakWrite->faceFile; } - switch(gUnknown_203B18C->state) + switch(gSavePakWrite->state) { case 0: - gUnknown_203B18C->state = 7; + gSavePakWrite->state = 7; break; case 1: - gUnknown_203B18C->unk4++; - if (gUnknown_203B18C->unk4 > 8) { + gSavePakWrite->unk4++; + if (gSavePakWrite->unk4 > 8) { sub_80141B4(gWriteGamePak, 0, 0, 0x20); - gUnknown_203B18C->state = 3; + gSavePakWrite->state = 3; } break; case 2: break; case 3: - gUnknown_203B18C->state = 4; + gSavePakWrite->state = 4; break; case 4: local_14 = 0; sub_80140DC(); - gUnknown_203B18C->saveStatus = WriteSavetoPak(&local_14, sub_8011C1C()); - switch(gUnknown_203B18C->saveStatus) + gSavePakWrite->saveStatus = WriteSavetoPak(&local_14, sub_8011C1C()); + switch(gSavePakWrite->saveStatus) { case SAVE_COMPLETED: - if(gUnknown_203B18C->faceFile != NULL) + if(gSavePakWrite->faceFile != NULL) sub_80141B4(gSaveCompleted, 0, (u8 *)faceFile, 0x101); else sub_80141B4(gSaveCompleted, 0, (u8 *)faceFile, 0x101); - gUnknown_203B18C->state = 5; + gSavePakWrite->state = 5; break; case SAVE_NOT_WRTTEN: sub_80141B4(gSaveNotWritten, 0, 0, 0); - gUnknown_203B18C->state = 6; + gSavePakWrite->state = 6; break; default: - if(gUnknown_203B18C->faceFile != NULL) + if(gSavePakWrite->faceFile != NULL) sub_80141B4(gSaveFailed, 0, (u8 *)faceFile, 0x101); else sub_80141B4(gSaveFailed, 0, (u8 *)faceFile, 0x101); - gUnknown_203B18C->state = 5; + gSavePakWrite->state = 5; break; } sub_8014114(); break; case 5: if (sub_80144A4(&other_stack) == 0) - gUnknown_203B18C->state = 7; + gSavePakWrite->state = 7; break; case 6: break; case 7: - return 0; + return FALSE; } - return 1; + return TRUE; } -u32 sub_8012744(void) +u32 GetSavePakStatus(void) { - return gUnknown_203B18C->saveStatus; + return gSavePakWrite->saveStatus; } -void sub_8012750(void) +void FinishWriteSavePak(void) { - if(gUnknown_203B18C != NULL) + if(gSavePakWrite != NULL) { - if(gUnknown_203B18C->faceFile != NULL) - CloseFile(gUnknown_203B18C->faceFile); - MemoryFree(gUnknown_203B18C); - gUnknown_203B18C = NULL; + if(gSavePakWrite->faceFile != NULL) + CloseFile(gSavePakWrite->faceFile); + MemoryFree(gSavePakWrite); + gSavePakWrite = NULL; } sub_80993E4(); } -void sub_801277C(u8 *r0, u32 r1) +void PrepareQuickSaveRead(u8 *dest, u32 size) { - gUnknown_203B190 = MemoryAlloc(sizeof(struct unkStruct_203B190), 5); - gUnknown_203B190->unk4 = r0; - gUnknown_203B190->unk8 = r1; - gUnknown_203B190->unkC = 0; - gUnknown_203B190->state = 1; + gQuickSaveRead = MemoryAlloc(sizeof(struct QuickSaveRead), 5); + gQuickSaveRead->dest = dest; + gQuickSaveRead->size = size; + gQuickSaveRead->saveValid = FALSE; + gQuickSaveRead->state = 1; } -u32 sub_80127A8(void) +bool8 ReadQuickSave(void) { u32 stack_1; u32 stack_2; - switch(gUnknown_203B190->state) + switch(gQuickSaveRead->state) { case 0: - gUnknown_203B190->state = 1; + gQuickSaveRead->state = 1; break; case 1: stack_1 = 16; - if(sub_8011F9C(&stack_1, gUnknown_203B190->unk4, gUnknown_203B190->unk8) == 0) + if(sub_8011F9C(&stack_1, gQuickSaveRead->dest, gQuickSaveRead->size) == READ_SAVE_VALID) { - gUnknown_203B190->unkC = 1; - gUnknown_203B190->state = 3; + gQuickSaveRead->saveValid = TRUE; + gQuickSaveRead->state = 3; } else { @@ -870,42 +868,42 @@ u32 sub_80127A8(void) // Before shutting down, save in your // team base or quicksave in a dungeon sub_80141B4(gUnknown_80D44C8, 0, 0, 0x301); - gUnknown_203B190->state = 2; + gQuickSaveRead->state = 2; } break; case 2: if(sub_80144A4(&stack_2) == 0) - gUnknown_203B190->state = 3; + gQuickSaveRead->state = 3; break; case 3: - return 0; + return FALSE; default: break; } - return 1; + return TRUE; } -u8 sub_8012828(void) +bool8 IsQuickSaveValid(void) { - return gUnknown_203B190->unkC; + return gQuickSaveRead->saveValid; } -void sub_8012834(void) +void FinishQuickSaveRead(void) { - if(gUnknown_203B190 != NULL){ - MemoryFree(gUnknown_203B190); - gUnknown_203B190 = 0; + if(gQuickSaveRead != NULL){ + MemoryFree(gQuickSaveRead); + gQuickSaveRead = 0; } } -void sub_8012850(u8 *r0, u32 r1, u8 r2) +void PrepareQuickSaveWrite(u8 *r0, u32 r1, u8 r2) { - gUnknown_203B194 = MemoryAlloc(sizeof(struct unkStruct_203B194), 5); - gUnknown_203B194->unk4 = r0; - gUnknown_203B194->unk8 = r1; - gUnknown_203B194->unkC = r2; - gUnknown_203B194->state = 0; - if(gUnknown_203B194->unkC != 0) + gQuickSaveWrite = MemoryAlloc(sizeof(struct QuickSaveWrite), 5); + gQuickSaveWrite->unk4 = r0; + gQuickSaveWrite->unk8 = r1; + gQuickSaveWrite->unkC = r2; + gQuickSaveWrite->state = 0; + if(gQuickSaveWrite->unkC != 0) // Quicksaving your adventure... // Please don't turn off the power. sub_80141B4(gUnknown_80D45AC, 0, 0, 0x20); @@ -915,30 +913,30 @@ void sub_8012850(u8 *r0, u32 r1, u8 r2) sub_80141B4(gUnknown_80D45AC, 0, 0, 0x20); } -u32 sub_80128B0(void) +u32 WriteQuickSave(void) { u32 stack_1; u32 stack_2; - switch(gUnknown_203B194->state) + switch(gQuickSaveWrite->state) { case 0: - gUnknown_203B194->state = 1; + gQuickSaveWrite->state = 1; break; case 1: sub_80140DC(); stack_1 = 16; - gUnknown_203B194->quickSaveStatus = sub_80121D4(&stack_1, gUnknown_203B194->unk4, gUnknown_203B194->unk8); - gUnknown_203B194->state = 2; + gQuickSaveWrite->quickSaveStatus = sub_80121D4(&stack_1, gQuickSaveWrite->unk4, gQuickSaveWrite->unk8); + gQuickSaveWrite->state = 2; return 1; case 2: stack_1 = 0; - if(gUnknown_203B194->quickSaveStatus == 0) - gUnknown_203B194->quickSaveStatus = WriteSavetoPak(&stack_1, 2); - switch(gUnknown_203B194->quickSaveStatus) + if(gQuickSaveWrite->quickSaveStatus == 0) + gQuickSaveWrite->quickSaveStatus = WriteSavetoPak(&stack_1, 2); + switch(gQuickSaveWrite->quickSaveStatus) { case SAVE_COMPLETED: sub_80121E0(0xf1207); - if(gUnknown_203B194->unkC != 0) + if(gQuickSaveWrite->unkC != 0) // Your adventure has been saved // When you are in a dungeon, quicksave // your progress before ending the game. @@ -950,31 +948,31 @@ u32 sub_80128B0(void) // save your progress in your team base, // or quicksave in a dungeon. sub_80141B4(gUnknown_80D4668, 0, 0, 0x301); - gUnknown_203B194->state = 3; + gQuickSaveWrite->state = 3; break; case SAVE_NOT_WRTTEN: // The data could not be written. // Please turn off the power and remove // and reinsert the DS Card sub_80141B4(gSaveNotWritten2, 0, 0, 0); - gUnknown_203B194->state = 4; + gQuickSaveWrite->state = 4; break; default: sub_80121E0(0xf1209); sub_80141B4(gSaveFailed2, 0, 0, 0x301); - gUnknown_203B194->state = 3; + gQuickSaveWrite->state = 3; break; } sub_8014114(); break; case 3: if(sub_80144A4(&stack_2) == 0) - gUnknown_203B194->state = 5; + gQuickSaveWrite->state = 5; break; case 4: break; case 5: - if(gUnknown_203B194->quickSaveStatus == SAVE_COMPLETED) + if(gQuickSaveWrite->quickSaveStatus == SAVE_COMPLETED) return 2; else return 3; @@ -985,11 +983,11 @@ u32 sub_80128B0(void) return 0; } -void sub_80129FC() +void FinishQuickSaveWrite() { - if (gUnknown_203B194) { - MemoryFree(gUnknown_203B194); - gUnknown_203B194 = NULL; + if (gQuickSaveWrite) { + MemoryFree(gQuickSaveWrite); + gQuickSaveWrite = NULL; } } diff --git a/src/text_1.c b/src/text_1.c new file mode 100644 index 0000000..068417c --- /dev/null +++ b/src/text_1.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "text.h" + +extern struct UnkTextStruct2 gUnknown_202AFC0[4]; +extern u32 gUnknown_80B8814[]; + +void nullsub_152(void) +{ +} + +void sub_8006518(struct UnkTextStruct2 *unkData) +{ + s32 iVar2; + for(iVar2 = 0; iVar2 < 4; iVar2++) + { + unkData[iVar2] = gUnknown_202AFC0[iVar2]; + } +} + +void nullsub_153(void) +{ +} + +u32 sub_8006544(u32 index) +{ + return gUnknown_80B8814[index]; +} diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c index cb86468..d9cdc33 100644 --- a/src/trade_items_menu.c +++ b/src/trade_items_menu.c @@ -3,13 +3,14 @@ #include "trade_items_menu.h" #include "gUnknown_203B460.h" #include "memory.h" +#include "save.h" extern struct TradeItemsMenu *gTradeItemsMenu; extern struct unkStruct_203B460 *gUnknown_203B460; extern u32 gUnknown_202DE30; extern u32 gUnknown_202DE58; -extern struct unkData gUnknown_80E6174; +extern struct UnkTextStruct2 gUnknown_80E6174; // Trade Items Menu Link Error Messages extern u32 gTradeItemsCommunicationError; @@ -36,18 +37,16 @@ extern u32 gUnknown_80E6314; extern void sub_8013AA0(u32 *); -extern void sub_800641C(u32 *, u32, u32); extern void sub_8035C1C(); extern void sub_8035DA0(); extern s32 sub_80144A4(s32 *); extern u32 sub_801CA08(u32); extern void sub_801CBB8(); extern u8 sub_801CB24(); -extern void sub_8006518(u32 *); extern void sub_801B3C0(u8 *); extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, s32 *); -extern void sub_8035CC0(struct unkData *, u32); +extern void sub_8035CC0(struct UnkTextStruct2 *, u32); extern void sub_801CCD8(); extern u32 sub_801B410(); extern void sub_801B450(); @@ -56,13 +55,8 @@ extern void sub_8035CF4(u32 *, u32, u32); extern u32 sub_8013BBC(u32 *); void sub_8036F30(); extern void TradeItem_AddItem(); -extern void sub_8012574(u32); extern void sub_80141B4(u32 *, u32, u32, u32); -extern void sub_8012574(u32); -extern u8 sub_8012600(void); -extern void sub_8012750(); - extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_8013C68(u32 *); @@ -254,7 +248,7 @@ void sub_80365AC(void) gTradeItemsMenu->unk4 = 2; gTradeItemsMenu->chosenItem = sub_801CB24(); gTradeItemsMenu->chosenNum = 1; - sub_8006518(&gTradeItemsMenu->unk1E4); + sub_8006518(gTradeItemsMenu->unk1E4); ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_801B3C0(&gTradeItemsMenu->unk25C); @@ -278,7 +272,7 @@ void sub_8036674(void) break; case 4: // Info gTradeItemsMenu->unk4 = 0x13; - sub_8006518(&gTradeItemsMenu->unk1E4); + sub_8006518(gTradeItemsMenu->unk1E4); ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_801B3C0(&gTradeItemsMenu->unk25C); @@ -302,7 +296,7 @@ void sub_8036728(void) case 3: sub_801B450(); ResetUnusedInputStruct(); - sub_800641C(&gTradeItemsMenu->unk1E4, 1, 1); + sub_800641C(gTradeItemsMenu->unk1E4, 1, 1); sub_801CB5C(1); if (gTradeItemsMenu->unk4 == 0x13) { sub_8035CF4(&gTradeItemsMenu->unk44, 3, 1); @@ -363,7 +357,7 @@ void TradeItem_SendItemConfirm(void) load -= gTradeItemsMenu->numItemsToSend; gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem] = load; SetTradeItemMenu(TRADE_ITEMS_PREPARE_TRADE_SAVING); - sub_8012574(0); + PrepareSavePakWrite(0); break; case 6: case 0: @@ -405,7 +399,7 @@ void sub_80368D4(void) { TradeItem_AddItem(); SetTradeItemMenu(0x11); - sub_8012574(0); + PrepareSavePakWrite(0); } break; } @@ -444,7 +438,7 @@ void sub_8036950(void) // Link Failure TradeItem_AddItem(); // Add back the item SetTradeItemMenu(0xb); - sub_8012574(0); + PrepareSavePakWrite(0); } else { PrintTradeItemsLinkError(gTradeItemsMenu->linkStatus); @@ -488,7 +482,7 @@ void sub_8036A34(void) if(sub_80144A4(&temp) == 0) { SetTradeItemMenu(0x10); - sub_8012574(0); + PrepareSavePakWrite(0); } } @@ -497,9 +491,9 @@ void sub_8036A54(void) s32 temp; if(sub_80144A4(&temp) == 0) { - if(sub_8012600() == 0) + if(!WriteSavePak()) { - sub_8012750(); + FinishWriteSavePak(); SetTradeItemMenu(TRADE_ITEMS_EXIT); } } @@ -510,9 +504,9 @@ void sub_8036A7C(void) s32 temp; if(sub_80144A4(&temp) == 0) { - if(sub_8012600() == 0) + if(!WriteSavePak()) { - sub_8012750(); // cleans up from Save Message + FinishWriteSavePak(); // cleans up from Save Message SetTradeItemMenu(0x8); } } @@ -523,9 +517,9 @@ void sub_8036AA4(void) s32 temp; if(sub_80144A4(&temp) == 0) { - if(sub_8012600() == 0) + if(!WriteSavePak()) { - sub_8012750(); + FinishWriteSavePak(); PrintTradeItemsLinkError(gTradeItemsMenu->linkStatus); SetTradeItemMenu(0xC); } @@ -537,9 +531,9 @@ void sub_8036ADC(void) s32 temp; if(sub_80144A4(&temp) == 0) { - if(sub_8012600() == 0) + if(!WriteSavePak()) { - sub_8012750(); + FinishWriteSavePak(); SetTradeItemMenu(TRADE_ITEMS_EXIT); } } @@ -1079,7 +1073,7 @@ void sub_8036ECC(u32 index, u32 r1) sub_8013AA0(&gTradeItemsMenu->numItemsToSend); gTradeItemsMenu->unk184[index] = gUnknown_80E6174; ResetUnusedInputStruct(); - sub_800641C((u32 *)&gTradeItemsMenu->unk184, 1, 1); + sub_800641C(gTradeItemsMenu->unk184, 1, 1); } void sub_8036F30(void) @@ -1097,7 +1091,7 @@ void sub_8036F30(void) void sub_8036F74(void) { - sub_8006518((u32 *)&gTradeItemsMenu->unk184); + sub_8006518(gTradeItemsMenu->unk184); sub_8036ECC(2, gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem]); sub_801CCD8(); sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0); diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index 2d22ef1..beb5205 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -2,15 +2,7 @@ #include "input.h" #include "main_menu.h" #include "memory.h" - -struct unkData -{ - u8 unk0[14]; - u16 unkD; - u16 unk10; - u16 unk12; - u8 *unk14; -}; +#include "text.h" struct unkStruct_203B360 { @@ -19,21 +11,20 @@ struct unkStruct_203B360 u32 unk4; // state u32 unk8; u8 fill8[0x148 - 0xC]; - struct unkData unk148[4]; + struct UnkTextStruct2 unk148[4]; u32 unk1A8; u32 unk1AC; u32 unk1B0; // sprite count? }; extern struct unkStruct_203B360 *gUnknown_203B360; -extern struct unkData gUnknown_80E6E7C; -extern struct unkData gUnknown_80E6E94; +extern struct UnkTextStruct2 gUnknown_80E6E7C; +extern struct UnkTextStruct2 gUnknown_80E6E94; extern struct MenuItem gUnknown_80E6EAC[]; extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); -extern void sub_800641C(void *, u32, u32); -extern void SetMenuItems(void *, struct unkData *, u32, struct unkData *, struct MenuItem *, u32, u32, u32); +extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); extern u8 sub_80130A8(u32 *); extern void sub_8013114(u32 *, u32 *); extern void sub_80384D0(); diff --git a/src/unk_menu_203B360_1.c b/src/unk_menu_203B360_1.c index 1b84f52..743b134 100644 --- a/src/unk_menu_203B360_1.c +++ b/src/unk_menu_203B360_1.c @@ -1,13 +1,5 @@ #include "global.h" - -struct unkData -{ - u8 unk0[14]; - u16 unkD; - u16 unk10; - u16 unk12; - u8 *unk14; -}; +#include "text.h" struct unkStruct_203B360 { @@ -16,7 +8,7 @@ struct unkStruct_203B360 u32 unk4; u32 unk8; u8 fill8[0x148 - 0xC]; - struct unkData unk148[4]; + struct UnkTextStruct2 unk148[4]; u16 unk1A8; u16 unk1AA; u16 unk1AC; diff --git a/src/unk_menu_203B364.c b/src/unk_menu_203B364.c index 4d8a716..c4dcd62 100644 --- a/src/unk_menu_203B364.c +++ b/src/unk_menu_203B364.c @@ -3,15 +3,7 @@ #include "menu.h" #include "main_menu.h" #include "memory.h" - -struct unkData -{ - u8 unk0[14]; - u16 unkD; - u16 unk10; - u16 unk12; - u8 *unk14; -}; +#include "text.h" struct unkStruct_203B360 { @@ -20,7 +12,7 @@ struct unkStruct_203B360 u32 unk4; u32 unk8; u8 fill8[0x148 - 0xC]; - struct unkData unk148[4]; + struct UnkTextStruct2 unk148[4]; u16 unk1A8; u16 unk1AA; u16 unk1AC; @@ -29,15 +21,14 @@ struct unkStruct_203B360 }; extern struct unkStruct_203B360 *gUnknown_203B364; -extern struct unkData gUnknown_80E6F20; -extern struct unkData gUnknown_80E6F38; +extern struct UnkTextStruct2 gUnknown_80E6F20; +extern struct UnkTextStruct2 gUnknown_80E6F38; extern struct MenuItem gUnknown_80E7090[]; extern struct MenuItem gUnknown_80E6F50[]; extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); -extern void sub_800641C(void *, u32, u32); -extern void SetMenuItems(void *, struct unkData *, u32, struct unkData *, struct MenuItem *, u32, u32, u32); +extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, struct UnkTextStruct2 *, struct MenuItem *, u32, u32, u32); extern u8 sub_80130A8(u32 *); extern void sub_8013114(u32 *, u32 *); extern void sub_80384D0(); diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 48bb3fc..05d3d03 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -5,6 +5,7 @@ #include "constants/species.h" #include "wonder_mail.h" #include "memory.h" +#include "text.h" extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; @@ -76,16 +77,13 @@ extern void sub_803084C(); extern u32 sub_8030768(u32); extern s8 sub_80307EC(); extern void sub_8030D40(u8, u32); -extern void sub_8006518(u32 *r0); extern u8 sub_8012FD8(u32 *r0); extern void sub_8030810(u32); -extern void sub_8035CC0(u32 *r0, u32); +extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32); extern void sub_8035CF4(u32 *r0, u32, u32); extern u32 sub_8030DA0(void); extern void sub_8030DE4(void); extern void sub_803092C(void); -extern void sub_8011C28(u32); - extern u32 sub_80154F0(); extern u32 sub_8039068(u32, u8 *r1, u8 *r0); @@ -94,7 +92,6 @@ extern void sub_8095274(u32); extern void sub_80155F0(); extern void sub_80951BC(u8 *r0); extern void sub_8013114(u32 *r0, s32 *r1); -extern void sub_8035CC0(u32 *r0, u32); extern void sub_8023C60(); extern u32 sub_8023A94(u32); extern void sub_8024458(s16, u32); @@ -164,7 +161,6 @@ extern u8 sub_8099B94(); extern void sub_8099A5C(u32, u32, u32*); extern void sub_8099AFC(u32, u32, u32*); -extern void sub_800641C(void *, u32, u32); extern void ResetUnusedInputStruct(); extern void sub_8099690(u32); extern void sub_80141B4(const char *r0, u32, u32 *r1, u32); @@ -178,10 +174,8 @@ extern void sub_8030D40(u8, u32); extern u32 sub_8030768(u32); extern void sub_803084C(void); extern s8 sub_80307EC(void); -extern void sub_8006518(u32 *); extern u8 sub_8012FD8(u32 *r0); extern void sub_8013114(u32 *, s32 *); -extern void sub_8035CC0(u32 *, u32); extern void sub_8030810(u32); extern u32 sub_8030DA0(); extern void sub_8030DE4(); @@ -200,7 +194,7 @@ extern void sub_8011C28(u32); void sub_8028B04(u32 r0) { - gUnknown_203B2C0->unk4 = r0; + gUnknown_203B2C0->state = r0; nullsub_130(); sub_8028348(); } @@ -484,7 +478,7 @@ void sub_8028E84() } sub_8028B04(24); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } void sub_8028EAC() @@ -495,9 +489,9 @@ void sub_8028EAC() { return; } - if(!sub_8012600()) + if(!WriteSavePak()) { - sub_8012750(); + FinishWriteSavePak(); sub_8028B04(25); } } @@ -549,7 +543,7 @@ void sub_8028F30() } sub_8028B04(22); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } void sub_8028F58() @@ -560,9 +554,9 @@ void sub_8028F58() { return; } - if(!sub_8012600()) + if(!WriteSavePak()) { - sub_8012750(); + FinishWriteSavePak(); sub_8028B04(2); } } @@ -644,7 +638,7 @@ void sub_8029044(void) case 4: gUnknown_203B2C0->unk0 = 0x1F; gUnknown_203B2C0->unk218 = sub_80307EC(); - sub_8006518(&(gUnknown_203B2C0->unk3BC)); + sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->unk218, 0); @@ -665,14 +659,14 @@ void sub_80290D4(void) void sub_80290F0(void) { - s32 temp; - temp = -1; + s32 menuAction; + menuAction = -1; sub_8030768(0); if(sub_8012FD8(&(gUnknown_203B2C0->unk30C)) == 0) { - sub_8013114(&(gUnknown_203B2C0->unk30C), &temp); + sub_8013114(&(gUnknown_203B2C0->unk30C), &menuAction); } - switch(temp) + switch(menuAction) { case 11: sub_803084C(); @@ -680,7 +674,7 @@ void sub_80290F0(void) break; case 12: gUnknown_203B2C0->unk0 = 0x3D; - sub_8006518(&(gUnknown_203B2C0->unk3BC)); + sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->unk218, 0); @@ -688,7 +682,7 @@ void sub_80290F0(void) break; case 4: case 10: - sub_8035CC0(&(gUnknown_203B2C0->unk35C), 2); + sub_8035CC0(gUnknown_203B2C0->unk35C, 2); sub_8030810(1); sub_8028B04(31); break; @@ -705,7 +699,7 @@ void sub_80291AC(void) case 3: sub_8030DE4(); ResetUnusedInputStruct(); - sub_800641C(&(gUnknown_203B2C0->unk3BC), 1, 1); + sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_803092C(); if(gUnknown_203B2C0->unk0 == 0x3D) { @@ -733,7 +727,7 @@ void sub_8029208(void) case 13: case 14: - gUnknown_203B2C0->unk534 = 0xD; + gUnknown_203B2C0->unk534 = 13; switch(gUnknown_203B2C0->unk538) { case 0: @@ -747,7 +741,7 @@ void sub_8029208(void) } break; case 15: - gUnknown_203B2C0->unk534 = temp; + gUnknown_203B2C0->unk534 = 15; switch(gUnknown_203B2C0->unk538) { case 0: @@ -845,7 +839,7 @@ void sub_8029374(void) } sub_8028B04(0x24); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } void sub_802939C(void) @@ -856,10 +850,10 @@ void sub_802939C(void) { return; } - if(!sub_8012600()) + if(!WriteSavePak()) { - saveStatus = sub_8012744(); - sub_8012750(); + saveStatus = GetSavePakStatus(); + FinishWriteSavePak(); if(saveStatus == SAVE_COMPLETED) { sub_8028B04(0x25); @@ -892,7 +886,7 @@ void sub_80293F4(void) switch(return_var) { case 3: - switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), &temp.unk0)) + switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp.unk0)) { case 8: case 9: @@ -937,7 +931,7 @@ void sub_80293F4(void) case 2: sub_80155F0(); ResetUnusedInputStruct(); - sub_800641C(&(gUnknown_203B2C0->unk3BC), 1, 1); + sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_8028B04(1); break; default: @@ -1008,7 +1002,7 @@ void sub_80295D8(void) case 4: gUnknown_203B2C0->unk0 = 0x2A; gUnknown_203B2C0->unk218 = sub_80307EC(); - sub_8006518(&(gUnknown_203B2C0->unk3BC)); + sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->unk218, 0); @@ -1029,14 +1023,14 @@ void sub_8029668(void) void sub_8029684(void) { - s32 temp; - temp = -1; + s32 menuAction; + menuAction = -1; sub_8030768(0); if(sub_8012FD8(&(gUnknown_203B2C0->unk30C)) == 0) { - sub_8013114(&(gUnknown_203B2C0->unk30C), &temp); + sub_8013114(&(gUnknown_203B2C0->unk30C), &menuAction); } - switch(temp) + switch(menuAction) { case 0xB: sub_803084C(); @@ -1044,7 +1038,7 @@ void sub_8029684(void) break; case 0xC: gUnknown_203B2C0->unk0 = 0x3D; - sub_8006518(&(gUnknown_203B2C0->unk3BC)); + sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8030D40(gUnknown_203B2C0->unk218, 0); @@ -1052,7 +1046,7 @@ void sub_8029684(void) break; case 0x4: case 0xA: - sub_8035CC0(&(gUnknown_203B2C0->unk35C),2); + sub_8035CC0(gUnknown_203B2C0->unk35C,2); sub_8030810(1); sub_8028B04(0x2A); break; @@ -1067,7 +1061,7 @@ void sub_8029740(void) case 3: sub_8030DE4(); ResetUnusedInputStruct(); - sub_800641C(&(gUnknown_203B2C0->unk3BC), 1, 1); + sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_803092C(); if(gUnknown_203B2C0->unk0 == 0x3D) { @@ -1118,7 +1112,7 @@ void sub_80297D4(void) case 4: gUnknown_203B2C0->unk0 = 0x33; gUnknown_203B2C0->unk544 = sub_8023B44(); - sub_8006518(&(gUnknown_203B2C0->unk3BC)); + sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8024458(gUnknown_203B2C0->unk544, 0); @@ -1129,14 +1123,14 @@ void sub_80297D4(void) void sub_8029884(void) { - s32 temp; - temp = -1; + s32 menuAction; + menuAction = -1; sub_8023A94(0); if(sub_8012FD8(&(gUnknown_203B2C0->unk30C)) == 0) { - sub_8013114(&(gUnknown_203B2C0->unk30C), &temp); + sub_8013114(&(gUnknown_203B2C0->unk30C), &menuAction); } - switch(temp) + switch(menuAction) { case 0xB: sub_8023C60(); @@ -1144,7 +1138,7 @@ void sub_8029884(void) break; case 0xC: gUnknown_203B2C0->unk0 = 0x3D; - sub_8006518(&(gUnknown_203B2C0->unk3BC)); + sub_8006518(gUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); sub_800641C(0, 1, 1); sub_8024458(gUnknown_203B2C0->unk544, 0); @@ -1152,7 +1146,7 @@ void sub_8029884(void) break; case 0x4: case 0xA: - sub_8035CC0(&(gUnknown_203B2C0->unk35C), 3); + sub_8035CC0(gUnknown_203B2C0->unk35C, 3); sub_8023B7C(1); sub_8028B04(0x33); break; @@ -1176,7 +1170,7 @@ void sub_8029944(void) case 3: sub_802453C(); ResetUnusedInputStruct(); - sub_800641C(&(gUnknown_203B2C0->unk3BC), 1, 1); + sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_8023B7C(1); if(gUnknown_203B2C0->unk0 == 0x3D) { @@ -1278,9 +1272,9 @@ void sub_8029A88(void) { return; } - if(!sub_8012600()) + if(!WriteSavePak()) { - sub_8012750(); + FinishWriteSavePak(); sub_8028B04(0x39); } } @@ -1294,7 +1288,7 @@ void sub_8029AB0(void) } sub_8028B04(0x38); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } void sub_8029AD8(void) @@ -1316,7 +1310,7 @@ void sub_8029AF4(void) case 3: sub_8031E10(); ResetUnusedInputStruct(); - sub_800641C(&(gUnknown_203B2C0->unk3BC), 1, 1); + sub_800641C(gUnknown_203B2C0->unk3BC, 1, 1); sub_8028B04(0x3C); break; case 1: @@ -1361,8 +1355,8 @@ u32 sub_8029B50(void) gUnknown_203B2C4->unk428 = 2; gUnknown_203B2C4->unk42A = 8; - for(counter = 0; counter < 0x36; counter++){ - gUnknown_203B2C4->unk8[counter] = 0; + for(counter = 0; counter < PASSWORD_BUFFER_SIZE; counter++){ + gUnknown_203B2C4->passwordBuffer[counter] = 0; } gUnknown_203B2C4->unk534 = 3; @@ -1388,7 +1382,7 @@ u32 sub_8029B50(void) u32 sub_8029C98(void) { - switch(gUnknown_203B2C4->unk0) { + switch(gUnknown_203B2C4->state) { case 5: sub_802AB7C(); break; @@ -1592,7 +1586,7 @@ void sub_8029F98(void) if (sub_80144A4(&auStack20) != 0) { return; } - MemoryFill8((u8 *)&gUnknown_203B2C4->unk41C, 0, 4); + MemoryFill8((u8 *)&gUnknown_203B2C4->unk41C, 0, sizeof(struct unkStruct_41C)); gUnknown_203B2C4->unk41C.unk41E = 0; gUnknown_203B2C4->unk41C.unk41D = 1; gUnknown_203B2C4->unk41C.unk41C = 0; @@ -1637,7 +1631,7 @@ void sub_802A050(void) case 2: sub_8031E10(); ResetUnusedInputStruct(); - sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1); + sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); sub_802B2BC(0x1B); break; case 1: @@ -1683,7 +1677,7 @@ void sub_802A0C8(void) case 4: gUnknown_203B2C4->unk4 = 0x10; gUnknown_203B2C4->unk218 = sub_80307EC(); - sub_8006518(&gUnknown_203B2C4->unk3BC); + sub_8006518(gUnknown_203B2C4->unk3BC); ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_8030D40(gUnknown_203B2C4->unk218,0); @@ -1703,15 +1697,15 @@ void sub_802A158(void) void sub_802A174(void) { - s32 temp; + s32 menuAction; - temp = -1; + menuAction = -1; sub_8030768(0); if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { - sub_8013114(&gUnknown_203B2C4->unk30C, &temp); + sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); } - switch(temp) + switch(menuAction) { case 0xB: sub_803084C(); @@ -1719,7 +1713,7 @@ void sub_802A174(void) break; case 0xC: gUnknown_203B2C4->unk4 = 0x2b; - sub_8006518(&gUnknown_203B2C4->unk3BC); + sub_8006518(gUnknown_203B2C4->unk3BC); ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_8030D40(gUnknown_203B2C4->unk218,0); @@ -1727,7 +1721,7 @@ void sub_802A174(void) break; case 0: case 0xD: - sub_8035CC0(&gUnknown_203B2C4->unk35C,2); + sub_8035CC0(gUnknown_203B2C4->unk35C,2); sub_8030810(1); sub_802B2BC(0x10); default: @@ -1743,7 +1737,7 @@ void sub_802A230(void) case 3: sub_8030DE4(); ResetUnusedInputStruct(); - sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1); + sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); sub_803092C(); if (gUnknown_203B2C4->unk4 == 0x2b) { sub_8035CF4(&gUnknown_203B2C4->unk21C, 3, 1); @@ -1778,7 +1772,7 @@ void sub_802A28C(void) case 4: gUnknown_203B2C4->unk4 = 0x13; gUnknown_203B2C4->unk41C.unk41E = sub_801CB24(); - sub_8006518(&gUnknown_203B2C4->unk3BC); + sub_8006518(gUnknown_203B2C4->unk3BC); ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_801B3C0(&gUnknown_203B2C4->unk41C); @@ -1795,7 +1789,7 @@ void sub_802A33C(void) case 3: sub_801B450(); ResetUnusedInputStruct(); - sub_800641C(&gUnknown_203B2C4->unk3BC,1,1); + sub_800641C(gUnknown_203B2C4->unk3BC,1,1); sub_801CB5C(1); if (gUnknown_203B2C4->unk4 == 0x2b) { sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); @@ -1813,15 +1807,15 @@ void sub_802A33C(void) void sub_802A39C(void) { - s32 temp; + s32 menuAction; - temp = -1; + menuAction = -1; sub_801CA08(0); if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { - sub_8013114(&gUnknown_203B2C4->unk30C, &temp); + sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); } - switch(temp) + switch(menuAction) { case 0xB: sub_801CBB8(); @@ -1829,7 +1823,7 @@ void sub_802A39C(void) break; case 0xC: gUnknown_203B2C4->unk4 = 0x2b; - sub_8006518(&gUnknown_203B2C4->unk3BC); + sub_8006518(gUnknown_203B2C4->unk3BC); ResetUnusedInputStruct(); sub_800641C(0,1,1); sub_801B3C0(&gUnknown_203B2C4->unk41C); @@ -1837,7 +1831,7 @@ void sub_802A39C(void) break; case 0: case 0xD: - sub_8035CC0(&gUnknown_203B2C4->unk35C, 3); + sub_8035CC0(gUnknown_203B2C4->unk35C, 3); sub_801CCD8(); sub_802B2BC(0x13); default: @@ -1879,7 +1873,7 @@ void sub_802A4AC(void) { sub_802B2BC(0x18); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } } @@ -1913,7 +1907,7 @@ void sub_802A50C(void) switch(return_var) { case 3: - switch(sub_8039068(0x20,gUnknown_203B2C4->unk8,&temp.unk0)) + switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp.unk0)) { case 7: case 8: @@ -1956,7 +1950,7 @@ void sub_802A50C(void) case 2: sub_80155F0(); ResetUnusedInputStruct(); - sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1); + sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); sub_802B2BC(1); break; } @@ -1967,8 +1961,8 @@ void sub_802A68C(void) s32 temp; if (sub_80144A4(&temp) == 0) { - if (sub_8012600() == 0) { - sub_8012750(); + if (!WriteSavePak()) { + FinishWriteSavePak(); sub_802B2BC(0xd); } } @@ -1980,9 +1974,9 @@ void sub_802A6B4(void) u32 temp; if (sub_80144A4(&temp) == 0) { - if (sub_8012600() == 0) { - saveStatus = sub_8012744(); - sub_8012750(); + if (!WriteSavePak()) { + saveStatus = GetSavePakStatus(); + FinishWriteSavePak(); if (saveStatus == SAVE_COMPLETED) { sub_802B2BC(0x20); } @@ -2000,7 +1994,7 @@ void sub_802A6F0(void) if (sub_80144A4(&temp) == 0) { sub_802B2BC(0x18); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } } @@ -2011,7 +2005,7 @@ void sub_802A718(void) if (sub_80144A4(&temp) == 0) { sub_802B2BC(0x25); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 84bc576..2791d0c 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -4,6 +4,8 @@ #include "pokemon.h" #include "constants/species.h" #include "memory.h" +#include "text.h" +#include "save.h" struct unkStruct_203B2C8 { @@ -19,9 +21,9 @@ struct unkStruct_203B2C8 /* 0x11 */ u8 unk11; /* 0x12 */ u8 unk12; /* 0x13 */ u8 unk13; - /* 0x14 */ u8 unk14[4]; // Figure out size of this buffer + /* 0x14 */ u8 teamName[4]; // Figure out size of this buffer u8 fill18[0x114 - 0x18]; - u8 unk114[0xA]; // holds species name + u8 speciesName[0xA]; // holds species name u8 fill118[0x128 - 0x11E]; u16 unk128; u8 unk12A; @@ -72,16 +74,9 @@ extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; extern u32 sub_802F298(); extern void sub_802F2C0(); -extern u32 sub_8011C34(); -extern void sub_800641C(void *, u32, u32); extern u8 sub_8099394(u8 *); extern void sub_802B548(u32); extern u32 sub_80144A4(s32 *); -extern void sub_8011C28(u32); -extern void sub_8012574(u32); -extern void sub_8012750(); -extern bool8 sub_8012600(); - extern void sub_802B560(); extern void sub_802B57C(); @@ -89,7 +84,7 @@ extern void sub_802B5B8(); extern void sub_802B5FC(); extern void sub_802B624(); -void sub_800D158(u8 *buffer, const char *text, ...); +void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...); extern void sub_802F204(u8 *, u32); extern void sub_803C37C(u8 *, u32, u8 *); extern u32 sub_803C200(u8 *, u32); @@ -183,13 +178,13 @@ void sub_802B3E0(void) strcpy(teamNameBuffer,gUnknown_80DF9F0); } // Print and expand placeholders? - sub_800D158(gUnknown_203B2C8->unk14,gUnknown_80DF9F8,teamNameBuffer); + ExpandPlaceholdersBuffer(gUnknown_203B2C8->teamName,gUnknown_80DF9F8,teamNameBuffer); // Display to screen with Pelliper face - sub_80141B4(gUnknown_203B2C8->unk14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); + sub_80141B4(gUnknown_203B2C8->teamName, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); break; case 1: monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gUnknown_203B2C8->unk114, monName); + strcpy(gUnknown_203B2C8->speciesName, monName); gUnknown_203B2C8->unk128 = 0x130; gUnknown_203B2C8->unk12A = 2; gUnknown_203B2C8->unk12C = 0; @@ -201,7 +196,7 @@ void sub_802B3E0(void) gUnknown_203B2C8->unk132 = 0; gUnknown_203B2C8->unk133 = 10; gUnknown_203B2C8->unk134 = 0; - sub_802F204(gUnknown_203B2C8->unk114, 0); + sub_802F204(gUnknown_203B2C8->speciesName, 0); break; case 2: // I hope you will keep on rescuing your friends @@ -260,7 +255,7 @@ void sub_802B5B8(void) puVar3->unk28 = uVar2; sub_802B548(3); sub_8011C28(1); - sub_8012574(0); + PrepareSavePakWrite(0); } } @@ -269,8 +264,8 @@ void sub_802B5FC(void) s32 temp; if (sub_80144A4(&temp) == 0) { - if (sub_8012600() == '\0') { - sub_8012750(); + if (!WriteSavePak()) { + FinishWriteSavePak(); sub_802B548(4); } } diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index 204f622..2b475a8 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -1,6 +1,8 @@ #include "global.h" #include "save.h" #include "memory.h" +#include "text.h" +#include "input.h" #define EXIT_TO_MAIN_MENU 5 #define PASSWORD_SUCCESS 13 @@ -20,10 +22,9 @@ struct unkStruct_203B3E8 struct unkWonderMailData unk38; // 0x30 - 0x14 u8 unk38_1[0x30 - 20]; // TODO: split for the ldm/stm stuff (fix dumb hack) u8 fill68[0x1EC - 0x68]; - u32 unk1EC; - u8 fill1F0[0x24C - 0x1F0]; + struct UnkTextStruct2 unk1EC[4]; u32 unk24C; - u32 unk250; + u32 wonderMailStatus; u8 fill254[0x3C0 - 0x254]; struct unkWonderMailData unk3C0; // 0x3C0 + 0x14 u8 fill3D0[0x490 - 0x3D4]; @@ -40,8 +41,6 @@ extern u32 sub_80144A4(s32 *); extern u32 sub_8011C1C(void); extern struct unkStruct_203B3E8 *gUnknown_203B3E8; extern void sub_803A1C0(u8); -extern void ResetUnusedInputStruct(void); -extern void sub_800641C(void *, u32, u32); extern void sub_8030DE4(void); extern void sub_801B450(void); extern void sub_803084C(void); @@ -252,7 +251,7 @@ void sub_8039B58(void) s32 temp; if (sub_80144A4(&temp) == 0) { - if (gUnknown_203B3E8->unk250 == 0) { + if (gUnknown_203B3E8->wonderMailStatus == 0) { switch(gUnknown_203B3E8->unk24C){ case 9: sub_803A1C0(7); @@ -263,7 +262,7 @@ void sub_8039B58(void) } } else { - sub_8039BAC(gUnknown_203B3E8->unk250); + sub_8039BAC(gUnknown_203B3E8->wonderMailStatus); sub_803A1C0(10); } } @@ -328,7 +327,7 @@ void sub_8039C60(void) case 3: sub_80155F0(); ResetUnusedInputStruct(); - sub_800641C(&gUnknown_203B3E8->unk1EC,1,1); + sub_800641C(gUnknown_203B3E8->unk1EC,1,1); if ( !sub_803D358(gUnknown_203B3E8->PasswordEntryBuffer, &gUnknown_203B3E8->unk38) || !sub_80959C0(&gUnknown_203B3E8->unk38) ) { // Invalid password @@ -346,7 +345,7 @@ void sub_8039C60(void) case 2: sub_80155F0(); ResetUnusedInputStruct(); - sub_800641C(&gUnknown_203B3E8->unk1EC,1,1); + sub_800641C(gUnknown_203B3E8->unk1EC,1,1); sub_803A1C0(EXIT_TO_MAIN_MENU); break; } @@ -381,7 +380,7 @@ void sub_8039D68(void) if(sub_80144A4(&iVar2) == 0) { sub_803A1C0(0xF); - sub_8012574(0); // "Saving Adventure.." + PrepareSavePakWrite(0); // "Saving Adventure.." } } @@ -399,9 +398,9 @@ void sub_8039DA4(void) int iVar2; if(sub_80144A4(&iVar2) == 0) { - if(!sub_8012600()) + if(!WriteSavePak()) { - sub_8012750(); + FinishWriteSavePak(); sub_803A1C0(0x10); } } diff --git a/src/wonder_mail_pre.c b/src/wonder_mail_pre.c index 9d15ab3..4cf76c8 100644 --- a/src/wonder_mail_pre.c +++ b/src/wonder_mail_pre.c @@ -7,8 +7,6 @@ #include "memory.h" -extern void sub_800641C(void *r0, u8, u8); - extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; @@ -89,8 +87,8 @@ u32 sub_8027F88(void) gUnknown_203B2C0->unk42E = 0; gUnknown_203B2C0->unk428 = 2; gUnknown_203B2C0->unk42A = 8; - for(counter = 0; counter < 0x36; counter++){ - gUnknown_203B2C0->unk8[counter] = 0; + 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? -- cgit v1.2.3