diff options
Diffstat (limited to 'src')
40 files changed, 1678 insertions, 345 deletions
diff --git a/src/adventure_log.c b/src/adventure_log.c index d3baf40..4c9b10f 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -1,6 +1,7 @@ #include "global.h" #include "input.h" #include "gba/io_reg.h" +#include "memory.h" struct unkData { @@ -54,8 +55,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 *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern void sub_8006518(struct unkData *); extern void sub_800641C(void *, u32, u32); void sub_8032084(); @@ -78,7 +77,7 @@ extern u32 gUnknown_202DE30; u32 CreateAdventureLogScreen(u32 param_1) { - gAdventureLog = MemoryAlloc(0xa0,8); + gAdventureLog = MemoryAlloc(sizeof(struct AdventureLog),8); gAdventureLog->unk34 = param_1; gAdventureLog->unk38 = &gAdventureLog->unk3C[param_1]; sub_8006518(gAdventureLog->unk3C); diff --git a/src/code_2.c b/src/code_2.c index 08db080..c4362b3 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -8,6 +8,7 @@ #include "music.h" #include "play_time.h" #include "save.h" +#include "gUnknown_203B46C.h" extern void NDS_DebugInit(void); extern void sub_801180C(void); @@ -15,7 +16,7 @@ extern void NDS_LoadOverlay_GroundMain(void); extern void sub_8014144(void); extern void LoadMonsterParameters(void); extern void sub_8097670(void); -extern void sub_8094980(void); +extern void LoadGameOptions(void); extern void sub_8094C14(void); extern void LoadExclusivePokemon(void); extern void LoadItemParameters(void); @@ -24,7 +25,7 @@ extern void LoadWazaParameters(void); extern void sub_80950BC(void); extern void sub_80958E8(void); extern void sub_800CD64(u32, u32); -extern void sub_8094998(u32); +extern void InitializeGameOptions(u32); extern void SetWindowTitle(char *); extern void sub_800DAAC(void); extern void SetSavingIconCoords(u32); @@ -71,7 +72,7 @@ extern u16 gUnknown_2026E4E; extern s32 gUnknown_2000A80; extern struct OpenedFile *gTitlePaletteFile; extern struct Inputs gRealInputs; -extern u8 *gUnknown_203B46C; +extern struct UnkSaveStruct1 *gUnknown_203B46C; extern char gPMDBuildVersion[]; @@ -92,7 +93,7 @@ void GameLoop(void) LoadMonsterParameters(); sub_8097670(); InitializePlayTime(); - sub_8094980(); + LoadGameOptions(); sub_8094C14(); LoadExclusivePokemon(); LoadFriendAreas(); @@ -103,7 +104,7 @@ void GameLoop(void) sub_80958E8(); sub_800CD64(0x8000, 0); sub_8012284(); - sub_8094998(1); + InitializeGameOptions(1); SetWindowTitle(gPMDBuildVersion); sub_800DAAC(); SetSavingIconCoords(0); @@ -207,7 +208,7 @@ void xxx_update_stuff(u32 r0) { xxx_draw_string_80144C4(); sub_8005838(0, 0); - nullsub_8(gUnknown_203B46C[10]); + nullsub_8(gUnknown_203B46C->unkA); sub_8005180(); sub_80060EC(); sub_8011860(); diff --git a/src/code_8012A18.c b/src/code_8012A18.c index 0e0099b..983d4e7 100644 --- a/src/code_8012A18.c +++ b/src/code_8012A18.c @@ -1,15 +1,7 @@ #include "global.h" #include "code_800558C.h" #include "input.h" - -struct UnkStruct_203B46C -{ - /* 0x0 */ u32 unk0; - /* 0x4 */ u32 unk4; - /* 0x8 */ u16 unk8; - /* 0xA */ u8 unkA; -}; - +#include "gUnknown_203B46C.h" extern void sub_8011860(); extern void xxx_draw_string_80144C4(); @@ -24,7 +16,7 @@ extern void sub_8009908(); extern void xxx_call_update_bg_sound_input(); extern void ResetSprites(u8 r0); -extern struct UnkStruct_203B46C *gUnknown_203B46C; +extern struct UnkSaveStruct1 *gUnknown_203B46C; void sub_8012A18() diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c new file mode 100644 index 0000000..62dc64d --- /dev/null +++ b/src/code_8012A18_1.c @@ -0,0 +1,284 @@ +#include "global.h" +#include "menu.h" +#include "file_system.h" +#include "memory.h" +#include "input.h" + +extern void sub_800641C(u32, u32, u32); + +struct unkStruct_203B200 +{ + u32 unk0; + u32 unk4; + u8 *pokeName; + s32 state; + /* 0x10 */ struct MenuItem menus[3]; +}; +extern struct unkStruct_203B200 *gUnknown_203B200; +extern const char *gUnknown_80D4920; +extern const char *gUnknown_80D4928; + +extern const char gUnknown_80DB6A4; +extern const char gUnknown_80DB6BC; +extern const char gUnknown_80DB688; +extern u8 gAvailablePokemonNames[0x58]; + +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); + +extern s32 sub_80144A4(s32 *); +extern void sub_80151C0(u32, u8 *); +extern void CreateConfirmNameMenu(void); +extern void sub_80160F4(u32); +bool8 sub_80162B8(void); +extern u32 sub_80154F0(void); +extern void sub_80155F0(void); +extern void sub_80922B4(u8 *, u8 *, s32); + +void nullsub_36(void); +void sub_8016110(void); +extern void sub_80161F8(void); +extern void HandleConfirmNameMenu(void); +extern void sub_8016280(void); +extern void sub_801629C(void); + + +enum +{ + MENU_ACTION_DEFAULT = 1, + MENU_ACTION_YES, + MENU_ACTION_NO, +}; + +extern u32 ReturnIntFromChar2(u8); + +struct unkChar +{ + u32 unk0; + s16 unk4; + s16 unk6; +}; + +struct unkChar *GetCharacter(u32); + + +s32 sub_8015FEC(u8 *buffer, s32 size) +{ + struct unkChar *iVar2; + s32 currLength; + s32 iVar4; + u8 *bufferPtr; + + iVar4 = 0; + currLength = 0; + + if(currLength < size && *buffer != '\0') + { + bufferPtr = buffer; // Had to have another variable to match.. + do { + iVar2 = GetCharacter(ReturnIntFromChar2(*bufferPtr)); + iVar4 += iVar2->unk6; + bufferPtr++; + currLength++; + } while (currLength < size && *bufferPtr != '\0'); + } + return iVar4; +} + +s32 sub_8016028(void) +{ + return 60; +} + +u32 sub_801602C(u32 r0, u8 *name) +{ + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + gUnknown_203B200 = MemoryAlloc(0x50, 8); + gUnknown_203B200->unk0 = r0; + gUnknown_203B200->pokeName = name; + switch(r0) + { + case 0: + gUnknown_203B200->unk4 = 0; + break; + case 1: + gUnknown_203B200->unk4 = 1; + break; + case 2: + gUnknown_203B200->unk4 = 2; + break; + case 3: + gUnknown_203B200->unk4 = 3; + break; + default: + break; + } + sub_80160F4(0); + return 1; +} + +u32 sub_8016080(void) +{ + switch(gUnknown_203B200->state) { + case 0: + sub_80161F8(); + break; + case 1: + HandleConfirmNameMenu(); + break; + case 2: + sub_8016280(); + break; + case 3: + sub_801629C(); + break; + case 4: + return 3; + } + return 0; +} + +extern void MemoryFree(void *); + +void sub_80160D8(void) +{ + if(gUnknown_203B200 != NULL) + { + MemoryFree(gUnknown_203B200); + gUnknown_203B200 = NULL; + } +} + + +void sub_80160F4(u32 newState) +{ + gUnknown_203B200->state = newState; + nullsub_36(); + sub_8016110(); +} + +void nullsub_36(void) +{ +} + +void sub_8016110(void) +{ + switch(gUnknown_203B200->state) + { + case 0: + sub_80151C0(gUnknown_203B200->unk4,gUnknown_203B200->pokeName); + break; + case 1: + CreateConfirmNameMenu(); + if (gUnknown_203B200->unk4 == 1) { + sub_80922B4(gAvailablePokemonNames,gUnknown_203B200->pokeName,10); + } + else { + sub_80922B4(gAvailablePokemonNames,gUnknown_203B200->pokeName,10); + } + // Is the name #C5$m0#R OK? + sub_8014248(&gUnknown_80DB688,0,3,gUnknown_203B200->menus,0,4,0,0,0x20); + break; + + case 2: + // This name is too long + sub_80141B4(&gUnknown_80DB6A4,0,0,0x121); + break; + case 3: + // Please enter a name + sub_80141B4(&gUnknown_80DB6BC,0,0,0x121); + break; + default: + break; + } +} + +void CreateConfirmNameMenu(void) +{ + gUnknown_203B200->menus[0].text = gUnknown_80D4920; // Yes + gUnknown_203B200->menus[0].menuAction = MENU_ACTION_YES; + gUnknown_203B200->menus[1].text = gUnknown_80D4928; // No + gUnknown_203B200->menus[1].menuAction = MENU_ACTION_NO; + gUnknown_203B200->menus[2].text = NULL; + gUnknown_203B200->menus[2].menuAction = MENU_ACTION_DEFAULT; +} + +void sub_80161F8(void) +{ + s32 iVar2; + s32 maxLength; + + if (sub_80154F0() == 3) { + sub_80155F0(); + if (sub_80162B8()) { + sub_80160F4(3); + } + else{ + iVar2 = sub_8015FEC(gUnknown_203B200->pokeName,10); + maxLength = sub_8016028(); // returns 60 + if (iVar2 > maxLength) { + sub_80160F4(2); + } + else { + sub_80160F4(1); + } + } + } +} + +void HandleConfirmNameMenu(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + switch(temp) + { + case MENU_ACTION_YES: + sub_80160F4(4); + break; + case MENU_ACTION_NO: + case MENU_ACTION_DEFAULT: + sub_80160F4(0); + break; + default: + break; + } + } +} + +void sub_8016280(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + sub_80160F4(0); + } +} + + +void sub_801629C(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + sub_80160F4(0); + } +} + +bool8 sub_80162B8(void) +{ + u8 character; + s32 index; + s32 max; + + max = 10; // constant needed at top of loop to match + index = 0; + do { + character = gUnknown_203B200->pokeName[index]; + if (character == '\0') break; + if (character != ' ') return 0; + index++; + } while (index < max); + return 1; +} diff --git a/src/code_801C620.c b/src/code_801C620.c new file mode 100644 index 0000000..66269c9 --- /dev/null +++ b/src/code_801C620.c @@ -0,0 +1,197 @@ +#include "global.h" +#include "input.h" +#include "memory.h" + +struct unkData +{ + u8 unk0[24]; +}; + + +struct subStruct_203B240 +{ + char * unk0; + char * unk4; +}; + +struct unkStruct_203B240 +{ + s32 unk0; + u8 unk4; + u8 fill5[3]; + s32 unk8; + s32 unkC; + struct subStruct_203B240 *unk10[2]; + u8 fill14[0x20 - 0x18]; + u32 unk20; + u32 unk24; + struct unkData unk28[4]; + u32 unk88; +}; + +extern struct unkStruct_203B240 *gUnknown_203B240; +extern char gUnknown_80DBE2C[]; // $i0 +extern char gUnknown_80DBE30[]; // $m0 +extern u8 gUnknown_202DE58[0x58]; +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_8014FF0(u32, u32, char *, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void xxx_call_draw_string(u32, u32, char *, u32, u32); +extern void sub_80073E0(u32); +extern u32 sub_8097DF0(char *, struct subStruct_203B240 **); +extern u32 sub_8012A64(u32 *, u32); +extern void sub_8013F84(); +extern void PlayMenuSoundEffect(u32); +extern char * GetIQSkillName(u8 r0); +extern char * GetIQSkillDescription(u8 r0); + +void sub_801C6D0(s32); +void sub_801C7D4(); +void sub_801C6E4(); +void sub_801C848(); + +u32 sub_801C620(u8 param_1) +{ + ResetSprites(1); + gUnknown_203B240 = MemoryAlloc(0x94,8); + gUnknown_203B240->unk4 = param_1; + sub_801317C(&gUnknown_203B240->unk88); + gUnknown_203B240->unk24 = 0; + sub_80140B4(gUnknown_203B240->unk28); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B240->unk28,1,1); + sub_801C6D0(0); + return 1; +} + +u32 sub_801C674(void) +{ + switch(gUnknown_203B240->unk0) + { + case 0: + sub_801C7D4(); + break; + case 1: + sub_801C848(); + break; + case 3: + return 3; + case 2: + default: + return 2; + } + return 0; +} + +void sub_801C6B4(void) +{ + if(gUnknown_203B240 != NULL) + { + MemoryFree(gUnknown_203B240); + gUnknown_203B240 = NULL; + } +} + +void sub_801C6D0(s32 unk0) +{ + gUnknown_203B240->unk0 = unk0; + sub_801C6E4(); +} + +void sub_801C6E4(void) +{ + char *skillName; + struct subStruct_203B240 *preload; + + switch(gUnknown_203B240->unk0) + { + case 0: + sub_8008C54(gUnknown_203B240->unk24); + sub_80073B8(gUnknown_203B240->unk24); + skillName = GetIQSkillName(gUnknown_203B240->unk4); + strcpy(gUnknown_202DE58,skillName); + sub_8014FF0(16,0,gUnknown_80DBE2C,0,0); // $i0 + xxx_call_draw_string(8,16,GetIQSkillDescription(gUnknown_203B240->unk4),gUnknown_203B240->unk24,0); + sub_80073E0(gUnknown_203B240->unk24); + gUnknown_203B240->unkC = sub_8097DF0(GetIQSkillDescription(gUnknown_203B240->unk4),gUnknown_203B240->unk10); + gUnknown_203B240->unk20 = 0; + break; + case 1: + sub_8008C54(gUnknown_203B240->unk24); + sub_80073B8(gUnknown_203B240->unk24); + preload = gUnknown_203B240->unk10[gUnknown_203B240->unk8]; + strcpy(gAvailablePokemonNames,preload->unk0); + sub_8014FF0(16,0,gUnknown_80DBE30,gUnknown_203B240->unk24,0); // $m0 + sub_8014FF0(4,16,gUnknown_203B240->unk10[gUnknown_203B240->unk8]->unk4, gUnknown_203B240->unk24,0); + sub_80073E0(gUnknown_203B240->unk24); + break; + case 2: + case 3: + break; + } +} + +void sub_801C7D4(void) +{ + + if (gUnknown_203B240->unkC != 0) { + if ((gUnknown_203B240->unk20 & 8) != 0) { + sub_8013F84(); + } + gUnknown_203B240->unk20++; + } + switch(sub_8012A64(&gUnknown_203B240->unk88,gUnknown_203B240->unk24)) + { + case 1: + PlayMenuSoundEffect(0); + if (gUnknown_203B240->unkC != 0) { + gUnknown_203B240->unk8 = 0; + sub_801C6D0(1); + } + else { + sub_801C6D0(3); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801C6D0(2); + break; + } +} + +void sub_801C848(void) +{ + + if (gUnknown_203B240->unk8 < (gUnknown_203B240->unkC - 1)) { + if ((gUnknown_203B240->unk20 & 8) != 0) { + sub_8013F84(); + } + gUnknown_203B240->unk20++; + } + switch(sub_8012A64(&gUnknown_203B240->unk88,gUnknown_203B240->unk24)) + { + case 1: + PlayMenuSoundEffect(0); + gUnknown_203B240->unk8++; + if (gUnknown_203B240->unk8 < gUnknown_203B240->unkC) { + sub_801C6D0(1); + } + else { + sub_801C6D0(0); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801C6D0(2); + break; + } +} diff --git a/src/code_801D760.c b/src/code_801D760.c index b0f163a..be96c88 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -2,6 +2,39 @@ #include "constants/friend_area.h" #include "file_system.h" #include "gUnknown_203B460.h" +#include "memory.h" +#include "input.h" + +struct unkData +{ + u8 unk0[0x14]; + u32 *unk14; +}; + +struct unkStruct_203B258 +{ + // size: 0xA0 + u8 fill0[0x14]; + u32 unk14; + u8 fill18[0x34 - 0x18]; + u32 unk34; + struct unkData *unk38; + struct unkData unk3C[4]; + u32 unk9C; +}; + +extern struct unkStruct_203B258 *gUnknown_203B258; +extern struct unkData 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); +extern u32 GetKeyPress(void *); +extern void PlayMenuSoundEffect(u32); +extern void sub_801DB54(); +extern void sub_801DBD4(); extern u32 sub_801BF48(void); extern void sub_801BF98(void); @@ -121,130 +154,156 @@ void sub_801D680(void) void sub_801D760() { - u32 temp; - temp = sub_8022860(); - if (temp <= 1) - return; - if (temp > 3) - return; - sub_8022908(); - sub_801D208(1); - + switch(sub_8022860()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_8022908(); + sub_801D208(1); + break; + } } void sub_801D77C() { - u32 temp; - temp = sub_80270A4(); - if (temp <= 1) - return; - if (temp > 3) - return; - sub_8027168(); - sub_801D208(1); - + switch(sub_80270A4()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_8027168(); + sub_801D208(1); + break; + } } void sub_801D798(void) { - u32 temp; - temp = sub_8025F68(); - if (temp <= 1) - return; - if (temp > 3) - return; - if(sub_802604C() != 0) - gUnknown_203B250->unk7 = gUnknown_203B250->currFriendAreaLocation; - sub_8026058(); - sub_801D208(2); + switch(sub_8025F68()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + if(sub_802604C() != 0) + gUnknown_203B250->unk7 = gUnknown_203B250->currFriendAreaLocation; + sub_8026058(); + sub_801D208(2); + break; + } } void sub_801D7CC() { - u32 check; - u32 temp2; - - check = sub_8025354(); - if(check <= 1) - return; - if(check > 3) - return; - - temp2 = sub_802540C(); - gUnknown_203B250->unk7 = temp2; - - sub_8025418(); - - if(gUnknown_203B250->unk7 != 0) - { - sub_801D208(2); - } - else + switch(sub_8025354()) { - sub_801D208(1); + case 0: + case 1: + default: + break; + case 2: + case 3: + gUnknown_203B250->unk7 = sub_802540C(); + sub_8025418(); + if(gUnknown_203B250->unk7 != 0) + { + sub_801D208(2); + } + else + { + sub_801D208(1); + } + break; } } void sub_801D808(void) { - u32 check; - - check = sub_80244E4(); - if(check <= 1) - return; - if(check > 3) - return; - - sub_802453C(); - sub_801D208(1); + switch(sub_80244E4()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_802453C(); + sub_801D208(1); + break; + } } void sub_801D824(void) { - u32 check; - check = sub_801BF48(); - if(check <= 1) - return; - if(check > 3) - return; - sub_801BF98(); - sub_801D208(1); + switch(sub_801BF48()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801BF98(); + sub_801D208(1); + break; + } } void sub_801D840(void) { - u32 check; - check = sub_80217EC(); - if(check <= 1) - return; - if(check > 3) - return; - sub_8021830(); - sub_801D208(1); + switch(sub_80217EC()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_8021830(); + sub_801D208(1); + break; + } } void sub_801D85C(void) { - u32 check; - check = sub_802C898(); - if(check <= 1) - return; - if(check > 3) - return; - sub_802C8F4(); - sub_801D208(1); + switch(sub_802C898()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_802C8F4(); + sub_801D208(1); + break; + } } void sub_801D878(void) { - u32 check; - check = sub_801DCE8(); - if(check <= 1) - return; - if(check > 3) - return; - sub_801DD50(); - sub_801D208(1); + switch(sub_801DCE8()) + { + case 0: + case 1: + default: + break; + case 2: + case 3: + sub_801DD50(); + sub_801D208(1); + break; + } } void sub_801D894(void) @@ -307,3 +366,50 @@ void LoadTeamRankBadge(u32 param_1, u32 param_2, u32 param_3) sub_8007E20(param_1, param_2, param_3, 16, 16, teamBadgePic, 14); CloseFile(teamBadgeFile); } + +u32 sub_801D9E4(void) +{ + gUnknown_203B258 = MemoryAlloc(sizeof(struct unkStruct_203B258),8); + gUnknown_203B258->unk34 = 3; + 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; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B258->unk3C,1,1); + sub_8013818(gUnknown_203B258,0xe5,10,gUnknown_203B258->unk34); + sub_801DB54(); + sub_801DBD4(); + return 1; +} + +void sub_801DA58(s16 param_0) +{ + s32 cast; + cast = param_0; + sub_8013878(gUnknown_203B258, cast); + sub_801DB54(); + sub_801DBD4(); +} + +u32 sub_801DA78(void) +{ + switch(GetKeyPress(gUnknown_203B258)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + return 3; + default: + if(sub_80138B8(gUnknown_203B258, 1) != 0) + { + sub_801DB54(); + sub_801DBD4(); + return 1; + } + else { + return 0; + } + } +} diff --git a/src/code_801DCC4.c b/src/code_801DCC4.c new file mode 100644 index 0000000..d713bd6 --- /dev/null +++ b/src/code_801DCC4.c @@ -0,0 +1,474 @@ +#include "global.h" +#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; +}; + +struct unkStruct_203B25C +{ + // size: 0x11C + u32 state; + u32 unk4; + struct UnkSaveStruct1 unk8; + u32 unk18; + const char *unk1C; + u8 fill20[0x6C - 0x20]; + struct MenuItem unk6C[3]; + u8 fill84[0xAC - 0x84]; + u16 unkAC[8]; + struct unkData unkBC[4]; +}; + + +extern void sub_801DD6C(u32); + +extern void HandleOthersMenu(); +extern void sub_801E088(); +extern void sub_801E0E0(); +extern void sub_801E0FC(); +extern void HandleChangeSettingsMenu(); +extern void sub_801DD84(); +extern void sub_801DED0(); +extern void sub_8012D60(const char **, struct MenuItem *, u32, u16 *, u32, u32); +extern u32 sub_801E198(struct UnkSaveStruct1 *); +extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32); +extern void sub_801E658(u32); +extern void sub_801E3F0(u32); +extern void sub_801E510(u32); +extern void CreateChangeSettingsConfirmMenu(void); +extern u8 sub_8012FD8(u32 *); +extern void sub_8013114(u32 *, u32 *); +extern u32 sub_801E474(u32); +extern u32 sub_801E4F4(void); +extern void sub_801E54C(void); +extern u32 sub_801E6CC(void); +extern void sub_801E724(void); +extern u32 sub_801E218(void); +extern bool8 GameOptionsNotChange(struct UnkSaveStruct1 *); +extern void sub_801E2C4(void); +extern s32 sub_80144A4(s32 *); +extern void sub_8094C14(void); +extern void sub_8099690(u32); + +extern struct UnkSaveStruct1 *gUnknown_203B46C; +extern struct unkStruct_203B25C *gUnknown_203B25C; + +extern const char gOthers_MenuOption[]; +extern const char gUnknown_80DBFEC[]; +extern const char gOthers_GameOptions[]; +extern const char gOthers_Hints[]; +extern const char *gUnknown_80D4920[]; +extern const char *gUnknown_80D4928[]; + + +enum +{ + MENU_OPTION_DEFAULT = 1, + MENU_OPTION_HINTS, + MENU_OPTION_GAMEOPTIONS, + MENU_OPTION_YES, + MENU_OPTION_NO +}; + +u32 sub_801DCC4(void) +{ + gUnknown_203B25C = MemoryAlloc(sizeof(struct unkStruct_203B25C), 8); + sub_801DD6C(0); + return 1; +} + +u32 sub_801DCE8(void) +{ + switch(gUnknown_203B25C->state) + { + case 2: + return 3; + case 0: + case 1: + HandleOthersMenu(); + break; + case 3: + case 4: + sub_801E088(); + break; + case 5: + sub_801E0E0(); + break; + case 6: + sub_801E0FC(); + break; + case 7: + HandleChangeSettingsMenu(); + break; + default: + break; + } + return 0; +} + +void sub_801DD50(void) +{ + if(gUnknown_203B25C != NULL) + { + MemoryFree(gUnknown_203B25C); + gUnknown_203B25C = NULL; + } +} + +void sub_801DD6C(u32 newState) +{ + gUnknown_203B25C->state = newState; + sub_801DD84(); + sub_801DED0(); +} + +NAKED +void sub_801DD84(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tldr r4, _0801DDAC\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xBC\n" + "\tbl sub_8006518\n" + "\tldr r0, [r4]\n" + "\tldr r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq _0801DDB4\n" + "\tcmp r0, 0x1\n" + "\tbeq _0801DE38\n" + "\tmovs r3, 0\n" + "\tadds r7, r4, 0\n" + "\tldr r2, _0801DDB0\n" + "\tb _0801DE90\n" + "\t.align 2, 0\n" +"_0801DDAC: .4byte gUnknown_203B25C\n" +"_0801DDB0: .4byte gUnknown_80DBFB0\n" +"_0801DDB4:\n" + "\tbl CreateOthersMenu\n" + "\tmovs r3, 0\n" + "\tldr r1, [r4]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0xAC\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _0801DDCE\n" + "\tldr r0, [r1, 0x70]\n" + "\tstr r0, [r1, 0x18]\n" + "\tadds r7, r4, 0\n" + "\tb _0801DDF2\n" +"_0801DDCE:\n" + "\tadds r3, 0x1\n" + "\tldr r7, _0801DE2C\n" + "\tcmp r3, 0x7\n" + "\tbgt _0801DDF2\n" + "\tldr r2, [r7]\n" + "\tlsls r0, r3, 1\n" + "\tadds r1, r2, 0\n" + "\tadds r1, 0xAC\n" + "\tadds r1, r0\n" + "\tldrh r0, [r1]\n" + "\tcmp r0, 0\n" + "\tbne _0801DDCE\n" + "\tlsls r0, r3, 3\n" + "\tadds r1, r2, 0\n" + "\tadds r1, 0x70\n" + "\tadds r1, r0\n" + "\tldr r0, [r1]\n" + "\tstr r0, [r2, 0x18]\n" +"_0801DDF2:\n" + "\tldr r0, _0801DE30\n" + "\tmov r9, r0\n" + "\tldr r2, _0801DE2C\n" + "\tmov r12, r2\n" + "\tldr r3, _0801DE34\n" + "\tmov r8, r3\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x3\n" +"_0801DE02:\n" + "\tmov r4, r12\n" + "\tldr r1, [r4]\n" + "\tadds r1, r2\n" + "\tadds r1, 0xBC\n" + "\tmov r0, r8\n" + "\tldm r0!, {r4-r6}\n" + "\tstm r1!, {r4-r6}\n" + "\tldm r0!, {r4-r6}\n" + "\tstm r1!, {r4-r6}\n" + "\tadds r2, 0x18\n" + "\tsubs r3, 0x1\n" + "\tcmp r3, 0\n" + "\tbge _0801DE02\n" + "\tldr r1, [r7]\n" + "\tadds r1, 0xBC\n" + "\tmov r0, r9\n" + "\tldm r0!, {r2,r5,r6}\n" + "\tstm r1!, {r2,r5,r6}\n" + "\tldm r0!, {r3-r5}\n" + "\tstm r1!, {r3-r5}\n" + "\tb _0801DE70\n" + "\t.align 2, 0\n" +"_0801DE2C: .4byte gUnknown_203B25C\n" +"_0801DE30: .4byte gUnknown_80DBFCC\n" +"_0801DE34: .4byte gUnknown_80DBFB0\n" +"_0801DE38:\n" + "\tbl CreateOthersMenu\n" + "\tmov r8, r4\n" + "\tldr r6, _0801DE88\n" + "\tmov r12, r6\n" + "\tmov r7, r8\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x3\n" +"_0801DE48:\n" + "\tmov r0, r8\n" + "\tldr r1, [r0]\n" + "\tadds r1, r2\n" + "\tadds r1, 0xBC\n" + "\tmov r0, r12\n" + "\tldm r0!, {r4-r6}\n" + "\tstm r1!, {r4-r6}\n" + "\tldm r0!, {r4-r6}\n" + "\tstm r1!, {r4-r6}\n" + "\tadds r2, 0x18\n" + "\tsubs r3, 0x1\n" + "\tcmp r3, 0\n" + "\tbge _0801DE48\n" + "\tldr r1, [r7]\n" + "\tadds r1, 0xBC\n" + "\tldr r0, _0801DE8C\n" + "\tldm r0!, {r2-r4}\n" + "\tstm r1!, {r2-r4}\n" + "\tldm r0!, {r2,r5,r6}\n" + "\tstm r1!, {r2,r5,r6}\n" +"_0801DE70:\n" + "\tldr r1, [r7]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0xBC\n" + "\tadds r1, 0x6C\n" + "\tbl sub_8012CAC\n" + "\tldr r0, [r7]\n" + "\tadds r0, 0xC8\n" + "\tmovs r1, 0xA\n" + "\tstrh r1, [r0]\n" + "\tb _0801DEAC\n" + "\t.align 2, 0\n" +"_0801DE88: .4byte gUnknown_80DBFB0\n" +"_0801DE8C: .4byte gUnknown_80DBFCC\n" +"_0801DE90:\n" + "\tldr r0, [r7]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r0, r1\n" + "\tadds r0, 0xBC\n" + "\tadds r1, r2, 0\n" + "\tldm r1!, {r4-r6}\n" + "\tstm r0!, {r4-r6}\n" + "\tldm r1!, {r4-r6}\n" + "\tstm r0!, {r4-r6}\n" + "\tadds r3, 0x1\n" + "\tcmp r3, 0x3\n" + "\tble _0801DE90\n" +"_0801DEAC:\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, _0801DECC\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0xBC\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0801DECC: .4byte gUnknown_203B25C"); +} + +void sub_801DED0(void) +{ + switch(gUnknown_203B25C->state) { + case 0: + case 1: + gUnknown_203B25C->unk1C = gOthers_MenuOption; + sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->unk6C,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->unk18,0); + break; + case 3: + sub_801E3F0(0); + break; + case 4: + sub_801E510(1); + break; + case 5: + sub_801E658(gUnknown_203B25C->unk4); + break; + case 6: + // Load our current options? + gUnknown_203B25C->unk8 = *gUnknown_203B46C; + sub_801E198(&gUnknown_203B25C->unk8); + break; + case 7: + CreateChangeSettingsConfirmMenu(); + // Change settings? + sub_8014248(gUnknown_80DBFEC,0,4,gUnknown_203B25C->unk6C,0,4,0,0,0x20); + break; + } +} + +void CreateOthersMenu(void) +{ + const char *blankText; + s32 defaultAction; + struct unkStruct_203B25C *preload; + + MemoryFill16(gUnknown_203B25C->unkAC,0,sizeof(gUnknown_203B25C->unkAC)); + + // This is dumb that I have to squeeze this in like this + preload = gUnknown_203B25C; + blankText = NULL; + preload->unk6C[0].text = gOthers_GameOptions; + preload->unk6C[0].menuAction = MENU_OPTION_GAMEOPTIONS; + defaultAction = MENU_OPTION_DEFAULT; + preload->unk6C[1].text = gOthers_Hints; + preload->unk6C[1].menuAction = MENU_OPTION_HINTS; + preload->unk6C[2].text = blankText; + preload->unk6C[2].menuAction = defaultAction; +} + +void CreateChangeSettingsConfirmMenu(void) +{ + const char *blankText; + s32 defaultAction; + struct unkStruct_203B25C *preload; + + MemoryFill16(gUnknown_203B25C->unkAC,0,sizeof(gUnknown_203B25C->unkAC)); + + // This is dumb that I have to squeeze this in like this + preload = gUnknown_203B25C; + blankText = NULL; + preload->unk6C[0].text = *gUnknown_80D4920; // Yes + preload->unk6C[0].menuAction = MENU_OPTION_YES; + defaultAction = MENU_OPTION_DEFAULT; + preload->unk6C[1].text = *gUnknown_80D4928; // No + preload->unk6C[1].menuAction = MENU_OPTION_NO; + preload->unk6C[2].text = blankText; + preload->unk6C[2].menuAction = defaultAction; +} + +void HandleOthersMenu(void) +{ + s32 menuAction; + + menuAction = 0; + if (sub_8012FD8((u32 *)&gUnknown_203B25C->unk1C) == '\0') { + sub_8013114((u32 *)&gUnknown_203B25C->unk1C,&menuAction); + gUnknown_203B25C->unk18 = menuAction; + } + switch(menuAction) + { + case MENU_OPTION_HINTS: + sub_801DD6C(3); + break; + case MENU_OPTION_GAMEOPTIONS: + sub_801DD6C(6); + break; + case MENU_OPTION_DEFAULT: + sub_801DD6C(2); + break; + } +} + +void sub_801E088(void) +{ + + switch(sub_801E474(1)) + { + case 3: + case 4: + gUnknown_203B25C->unk4 = sub_801E4F4(); + sub_801DD6C(5); + break; + case 2: + sub_801E54C(); + sub_801DD6C(1); + break; + case 0: + case 1: + default: + break; + } +} + + +void sub_801E0E0(void) +{ + switch(sub_801E6CC()) + { + case 3: + case 2: + sub_801E724(); + sub_801DD6C(4); + break; + case 0: + case 1: + default: + break; + } +} + +void sub_801E0FC(void) +{ + switch(sub_801E218()) + { + case 2: + case 3: + sub_801E2C4(); + // Check to see if the options changed? + if (GameOptionsNotChange(&gUnknown_203B25C->unk8)) { + sub_801DD6C(1); + } + else { + sub_801DD6C(7); + } + break; + case 0: + case 1: + break; + } +} + +void HandleChangeSettingsMenu(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case MENU_OPTION_YES: + // Save our option changes?? + *gUnknown_203B46C = gUnknown_203B25C->unk8; + sub_8094C14(); + sub_8099690(0); + sub_801DD6C(1); + break; + case MENU_OPTION_DEFAULT: + case MENU_OPTION_NO: + sub_801DD6C(1); + break; + } + } +} diff --git a/src/code_8048480.c b/src/code_8048480.c index efac5df..2995170 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -15,16 +15,16 @@ extern void sub_8075FCC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C extern void sub_8077AE4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2); extern void sub_8072008(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2, u8 r3, u32); extern void sub_8076D10(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); -extern void sub_807232C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2); +extern void LevelDownTarget(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2); extern void sub_8045B94(u8 *r0, struct unkDungeon_8041D5C *r1, u32); extern void sub_807A290(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); extern void sub_80522F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32); -extern void sub_8079270(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); +extern void RestoreVisionTarget(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); extern void sub_8077910(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32); extern void sub_80791D8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); -extern void sub_8079140(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); -extern void sub_8077C44(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, s16, s16, u32); +extern void BlindTarget(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); +extern void HealTargetHP(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, s16, s16, u32); extern void sub_80792F8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32); extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u8); extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32, u32, u32, u32, u32, u32); @@ -41,13 +41,12 @@ void sub_8048364(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u void sub_8048374(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - sub_8077C44(r0, r1, gUnknown_80F4FB6, gUnknown_80F4FB8, 1); + HealTargetHP(r0, r1, gUnknown_80F4FB6, gUnknown_80F4FB8, 1); } - void sub_804839C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - sub_8077C44(r0, r1, gUnknown_80F4FBA, gUnknown_80F4FBC, 1); + HealTargetHP(r0, r1, gUnknown_80F4FBA, gUnknown_80F4FBC, 1); } void sub_80483C4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) @@ -57,12 +56,12 @@ void sub_80483C4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) void sub_80483D4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - sub_8077C44(r0, r1, 0, gUnknown_80F4FBE, 1); + HealTargetHP(r0, r1, 0, gUnknown_80F4FBE, 1); } void sub_80483F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - sub_8079140(r0, r1); + BlindTarget(r0, r1); } void sub_8048400(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) @@ -77,12 +76,12 @@ void sub_804840C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) void sub_804841C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - sub_8079270(r0, r1); + RestoreVisionTarget(r0, r1); } void sub_8048428(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - if(r1->unk70->unkAC == 4) + if(r1->unk70->statusCondition == 4) // 4 - Paralyzed?? sub_807A290(r0, r1); else // Pointer to "But nothing happened!" @@ -91,7 +90,7 @@ void sub_8048428(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) void sub_8048450(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - if((u8)(r1->unk70->unkAC - 2) <= 1) + if((u8)(r1->unk70->statusCondition - 2) <= 1) sub_807A290(r0, r1); else // Pointer to "But nothing happened!" @@ -131,12 +130,12 @@ void sub_80484C8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) void sub_80484DC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - sub_807232C(r0, r1, 1); + LevelDownTarget(r0, r1, 1); } void sub_80484E8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { - if(r1->unk70->unkAC == 1) + if(r1->unk70->statusCondition == 1) // 1 - Burn?? sub_807A290(r0, r1); else { diff --git a/src/code_8057824.c b/src/code_8057824.c index edc338d..27a546f 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -19,10 +19,10 @@ extern u8 sub_807EAA0(u32, u32); extern void sub_80522F4(struct unkDungeon_8041D5C *r1, struct unkDungeon_8041D5C *r2, u32); extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32); -extern u8 sub_805727C(u32, u32, s16); -extern u32 sub_8055640(u32, u32, u32, u32, u32); -extern void sub_80779F0(u32, u32, u32, u32); -extern void sub_8078968(); +extern u8 sub_805727C(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, s16); +extern u32 sub_8055640(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, u32, u32, u32); +extern void sub_80779F0(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, u32, u32); +extern void sub_8078968(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1); extern void sub_8079618(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32); extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); @@ -33,51 +33,53 @@ extern u32 gUnknown_80FD018; extern s16 sub_8057600(u32, u32); extern u32 sub_8092B00(u32); -u32 sub_8057824(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) +bool32 sub_8057824(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) { + // Lower evasion? sub_80775DC(param_1,param_2,gUnknown_8106A50,1); - return 1; + return TRUE; } -u32 sub_805783C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) +bool32 sub_805783C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) { + // Lower attack? sub_80772C0(param_1,param_2,gUnknown_8106A4C,0x80,1); - return 1; + return TRUE; } -u32 sub_805785C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) +bool32 sub_805785C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) { gUnknown_203B418->unkE26B = gUnknown_80F4F42; if (sub_807EAA0(1,0) == '\0') { // The weather remains unchanged sub_80522F4(param_1,param_2,gUnknown_80FCF74); } - return 1; + return TRUE; } -u32 sub_80578A4(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) +bool32 sub_80578A4(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) { gUnknown_203B418->unkE26C = gUnknown_80F4F42; if (sub_807EAA0(1,0) == '\0') { // The weather remains unchanged sub_80522F4(param_1,param_2,gUnknown_80FCF80); } - return 1; + return TRUE; } -u32 sub_80578EC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) +bool32 sub_80578EC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1) { sub_8079F20(r0, r1, 1, 0); - return 1; + return TRUE; } -u32 sub_80578FC(u32 param_1, u32 param_2, u32 param_3, u32 param_4) +bool32 sub_80578FC(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4) { - u32 uVar3; + bool32 uVar3; uVar3 = 0; if (sub_8055640(param_1, param_2, param_3, 0x80 << 1, param_4) != 0) { - uVar3 = 1; + uVar3 = TRUE; if (sub_805727C(param_1,param_2, gUnknown_80F4DB6) != '\0') { sub_80779F0(param_1, param_2, 1, 0); } @@ -85,25 +87,25 @@ u32 sub_80578FC(u32 param_1, u32 param_2, u32 param_3, u32 param_4) return uVar3; } -u32 sub_8057948(void) +bool32 sub_8057948(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2) { - sub_8078968(); - return 1; + sub_8078968(param_1, param_2); + return TRUE; } -u32 sub_8057954(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3) +bool32 sub_8057954(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3) { // $m0 is enraged sub_8079618(param_1,param_2,0xc,param_3,gUnknown_80FAC88); - return 1; + return TRUE; } -u8 sub_8057974(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4) +bool32 sub_8057974(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4) { s32 newHP; u8 local_24; - newHP = param_2->unk70->unkE / 2; + newHP = param_2->unk70->HP / 2; local_24 = 0; if (newHP != 0) { sub_806F370(param_1,param_2,newHP,1,&local_24,sub_8092B00(param_3),sub_8057600(param_3,param_4),0,1,0); diff --git a/src/code_808EAB0.c b/src/code_808EAB0.c index f50d053..fd03834 100644 --- a/src/code_808EAB0.c +++ b/src/code_808EAB0.c @@ -13,22 +13,22 @@ extern u32 gUnknown_81076E4[]; extern bool8 sub_808ECD0(u8 *, u32); extern void sub_808EC30(u8 *, u32); -u32 sub_808EAB0(u8 r0) +u32 GetIQSkillName(u8 r0) { return gIQSkillNames[r0]; } -void sub_808EAC0(char *r0, u8 r1) +void CopyTacticsNameToBuffer(char *r0, u8 r1) { strncpy(r0, gTactics[r1], 0x14); } -u32 sub_808EADC(u8 r0) +u32 GetIQSkillDescription(u8 r0) { return gIQSkillDescriptions[r0]; } -u32 sub_808EAEC(u8 r0) +u32 GetTacticsDescription(u8 r0) { return gTacticsDescriptions[r0]; } diff --git a/src/credits.c b/src/credits.c index 2329bd4..33fa3ba 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1,11 +1,12 @@ #include "global.h" #include "input.h" +#include "memory.h" extern struct Inputs gRealInputs; struct unkStruct_203B344 { - u32 unk0; // state variable + u32 state; // state variable u32 unk4; // timer?? }; @@ -15,8 +16,6 @@ struct unkStruct_203B340 u32 unk0; }; -extern void MemoryFree(void *); -extern void* MemoryAlloc(u32, u32); extern void sub_80015C0(u32, u32); extern u16 gUnknown_80E5990[]; @@ -37,7 +36,7 @@ void sub_803565C(void) u32 sub_8035678(void) { gUnknown_203B344 = MemoryAlloc(sizeof(struct unkStruct_203B344), 8); - gUnknown_203B344->unk0 = 0; + gUnknown_203B344->state = 0; gUnknown_203B344->unk4 = 0; sub_80015C0(0, 0x39); return 1; @@ -51,46 +50,46 @@ u32 sub_80356A0(void) held_input = gRealInputs.held; uVar1 = gUnknown_80E5990[gUnknown_203B344->unk4]; - switch(gUnknown_203B344->unk0) { - case 0: - gUnknown_203B344->unk0 = 3; - break; - case 1: - if (uVar1 == 0) - gUnknown_203B344->unk0 = 4; - else { - if (held_input == uVar1) - gUnknown_203B344->unk0 = 2; - else { - // NOTE: couldn't match with OR'd condition so split up to match - if ((uVar1 & held_input) != held_input) - gUnknown_203B344->unk0 = 3; - else - { - if (gUnknown_203B344->unk4 == 0) - gUnknown_203B344->unk0 = 3; + switch(gUnknown_203B344->state) { + case 0: + gUnknown_203B344->state = 3; + break; + case 1: + if (uVar1 == 0) + gUnknown_203B344->state = 4; + else { + if (held_input == uVar1) + gUnknown_203B344->state = 2; + else { + // NOTE: couldn't match with OR'd condition so split up to match + if ((uVar1 & held_input) != held_input) + gUnknown_203B344->state = 3; + else + { + if (gUnknown_203B344->unk4 == 0) + gUnknown_203B344->state = 3; + } + } } - } - } - break; - case 2: - if (held_input == 0) { - gUnknown_203B344->unk0 = 1; - gUnknown_203B344->unk4++; - } - else { - if ((uVar1 & held_input) != held_input) - gUnknown_203B344->unk0 = 3; - } - break; - case 3: - return 2; - case 4: - return 3; // sub_809C478 clears the flash data when this is returned + break; + case 2: + if (held_input == 0) { + gUnknown_203B344->state = 1; + gUnknown_203B344->unk4++; + } + else { + if ((uVar1 & held_input) != held_input) + gUnknown_203B344->state = 3; + } + break; + case 3: + return 2; + case 4: + return 3; // sub_809C478 clears the flash data when this is returned } if (sub_8001658(0,0x39) != 0) { - gUnknown_203B344->unk0 = 3; + gUnknown_203B344->state = 3; return 2; } else { diff --git a/src/debug.c b/src/debug.c index b6f4ee7..0f4cf35 100644 --- a/src/debug.c +++ b/src/debug.c @@ -15,6 +15,8 @@ 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[]; void NDS_DebugInit(void) { @@ -198,3 +200,17 @@ void FatalErrorHang() { Hang(); } + +/*void +FatalError(struct DebugLocation *debug, const char *text, ...) +{ + char buf[0x100]; + va_list vArgv; + + FatalErrorPrintFuncFileLine(gFatalText, debug); + va_start(vArgv, text); + vsprintf(buf, text, vArgv); + va_end(vArgv); + FatalErrorFormatMessage(gUnknown_80D42D4, buf); + FatalErrorHang(); +}*/ diff --git a/src/debug_menu.c b/src/debug_menu.c index 3fa662c..54f25d9 100644 --- a/src/debug_menu.c +++ b/src/debug_menu.c @@ -2,6 +2,7 @@ #include "debug_menu.h" #include "main_menu.h" #include "menu.h" +#include "memory.h" extern struct DebugMenu *gUnknown_203B3EC; @@ -63,9 +64,6 @@ ALIGNED(4) const char debug_fill5[] = _("pksdir0"); ALIGNED(4) const char debug_fill6[] = _("pksdir0"); -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); -extern void MemoryFill8(u8 *, u8, u32); extern void sub_800641C(struct unkData *, u32, u32); extern void ResetUnusedInputStruct(void); diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c index 8ca2cbd..796ac2a 100644 --- a/src/debug_menu_mid.c +++ b/src/debug_menu_mid.c @@ -1,6 +1,7 @@ #include "global.h" #include "input.h" #include "gUnknown_203B460.h" +#include "memory.h" struct unkData { @@ -76,8 +77,6 @@ extern u32 gDebug_NumberText; extern u32 gUnknown_80D4970; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern void sub_800641C(void *, u32, u32); extern void sub_8006518(void *); extern void sub_801C8C4(u32, u32, u32, u32); diff --git a/src/felicity_bank.c b/src/felicity_bank.c index 3bd3620..8a2aae8 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -4,6 +4,7 @@ #include "input.h" #include "constants/species.h" #include "felicity_bank.h" +#include "memory.h" extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; @@ -13,8 +14,6 @@ extern struct unkData gUnknown_80DB6DC; extern struct unkData gUnknown_80DB6F4; extern struct unkData gUnknown_80DB70C; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern void sub_800641C(struct unkData *, u32, u32); extern void sub_8006518(struct unkData *); extern void sub_8016B24(); diff --git a/src/friend_area.c b/src/friend_area.c index 27eddee..a6fd1d5 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -1,22 +1,13 @@ #include "global.h" #include "constants/friend_area.h" #include "friend_area.h" +#include "pokemon.h" extern bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS]; extern bool8 *gFriendAreas; -struct unkStruct_203B45C -{ - // size: 0x58? - u16 unk0; - s16 unk2; - u8 unk4[0x24]; - u8 unk28; - u8 unk29[0x2f]; -}; - -extern struct unkStruct_203B45C gRecruitedPokemonRef[]; +extern struct unkStruct_203B45C *gRecruitedPokemonRef; extern bool8 *gFriendAreas; @@ -362,14 +353,17 @@ void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3) s32 counter; bool32 flag; s32 r6; + struct PokemonStruct *pokemon; + r6 = 0; for(counter = 0; counter <= 412; counter++) { - if((u8)(gRecruitedPokemonRef[counter].unk0) & 1) + pokemon = &gRecruitedPokemonRef->pokemon[counter]; + if((u8)(pokemon->unk0) & 1) { - if(((u8)gRecruitedPokemonRef[counter].unk2 == 0) || r2) + if((pokemon->unk2 == 0) || r2) { - flag = (u8)gRecruitedPokemonRef[counter].unk4[0] == 65; + flag = (u8)pokemon->fill4[0] == 65; if(!flag || r3) { if(sub_80923D4(counter) == r0) diff --git a/src/friend_rescue.c b/src/friend_rescue.c index d89f5ea..bbff322 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -2,6 +2,7 @@ #include "friend_rescue.h" #include "pokemon.h" #include "constants/species.h" +#include "memory.h" extern void sub_80338C4(u32); extern s32 sub_80144A4(s32 *); @@ -16,8 +17,6 @@ extern char gAvailablePokemonNames[0x50]; extern struct WonderMailStruct_203B33C *gUnknown_203B33C; extern u8 sub_8039880(void); -void MemoryFill8(u8 *dest, u8 value, s32 size); -void *MemoryAlloc(u32, u32); void ResetUnusedInputStruct(void); void sub_800641C(void *, u32, u32); @@ -102,7 +101,6 @@ extern void sub_8035210(void); extern void sub_8035430(void); extern void sub_8034848(void); -extern void MemoryFree(void *); extern void sub_803084C(void); extern void sub_8031E10(void); extern void sub_8023C60(void); diff --git a/src/game_options.c b/src/game_options.c new file mode 100644 index 0000000..8f549f7 --- /dev/null +++ b/src/game_options.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "gUnknown_203B46C.h" + +extern struct UnkSaveStruct1 *gUnknown_203B46C; +extern struct UnkSaveStruct1 gUnknown_2038C70; +extern void sub_8094C14(); + +void LoadGameOptions(void) +{ + gUnknown_203B46C = &gUnknown_2038C70; +} + +struct UnkSaveStruct1 * GetGameOptions(void) +{ + return &gUnknown_2038C70; +} + +void InitializeGameOptions(u8 r0) +{ + gUnknown_203B46C->unk8 = 0; + if(r0 != 0) + { + gUnknown_203B46C->playerGender = 0; + } + gUnknown_203B46C->unk9 = 0; + gUnknown_203B46C->unkA = 0; + gUnknown_203B46C->unk0 = 0; + gUnknown_203B46C->unk1 = 1; + gUnknown_203B46C->unk2 = 1; + gUnknown_203B46C->unk3 = 1; + gUnknown_203B46C->unk4 = 1; + gUnknown_203B46C->unkC = 0; + sub_8094C14(); +} diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c index c695aec..6d7cdd1 100644 --- a/src/kangaskhan_storage.c +++ b/src/kangaskhan_storage.c @@ -4,6 +4,7 @@ #include "input.h" #include "constants/species.h" #include "kangaskhan_storage.h" +#include "memory.h" extern struct unkStruct_203B208 *gUnknown_203B208; extern struct unkData gUnknown_80DB748; @@ -13,8 +14,6 @@ extern struct unkData gUnknown_80DB760; extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern void sub_800641C(struct unkData *, u32, u32); extern void sub_8006518(struct unkData *); void UpdateKangaskhanStorageState(u32); diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c new file mode 100644 index 0000000..ebef475 --- /dev/null +++ b/src/kangaskhan_storage_2.c @@ -0,0 +1,98 @@ +#include "global.h" +#include "input.h" +#include "memory.h" + +struct unkStruct_203B20C +{ + u32 state; + u8 unk4[0x10]; + u32 unk14; + u32 unk18; + u32 unk1C; +}; +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); +extern void sub_8018904(void); +extern void sub_8018AC8(void); +extern void sub_80186F8(void); +extern void sub_8018854(void); +extern void sub_80189C8(void); +extern void sub_8018AE4(void); + + +extern void sub_8017F28(); +extern void sub_8018100(); + +u32 sub_8017E1C(void) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + gUnknown_203B20C = MemoryAlloc(0x150, 8); + gUnknown_203B20C->unk14 = 0; + gUnknown_203B20C->unk18 = 0; + gUnknown_203B20C->unk1C = 0; + sub_8017F10(0); + return 1; +} + +u32 sub_8017E54(void) +{ + switch(gUnknown_203B20C->state) + { + case 0: + sub_8017F10(1); + break; + case 1: + sub_8018588(); + break; + case 4: + case 5: + sub_8018620(); + break; + case 6: + sub_8018904(); + break; + case 7: + sub_8018AC8(); + break; + case 10: + case 11: + sub_80186F8(); + break; + case 12: + sub_8018854(); + break; + case 13: + sub_80189C8(); + break; + case 14: + sub_8018AE4(); + break; + case 3: + return 3; + } + return 0; +} + +void sub_8017EF4(void) +{ + if(gUnknown_203B20C != NULL) + { + MemoryFree(gUnknown_203B20C); + gUnknown_203B20C = NULL; + } +} + +void sub_8017F10(u32 newState) +{ + gUnknown_203B20C->state = newState; + sub_8017F28(); + sub_8018100(); +} diff --git a/src/kangaskhan_storage_3.c b/src/kangaskhan_storage_3.c new file mode 100644 index 0000000..e5382c3 --- /dev/null +++ b/src/kangaskhan_storage_3.c @@ -0,0 +1,37 @@ +#include "global.h" + +extern u32 sub_801B410(); +extern void sub_801B450(); +extern void sub_8017F10(u32); + +void sub_8018AC8(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8017F10(0x5); + break; + case 0: + case 1: + default: + break; + } +} + +void sub_8018AE4(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8017F10(0xB); + break; + case 0: + case 1: + default: + break; + } +} diff --git a/src/kecleon_items.c b/src/kecleon_items.c index a3d0fd0..59b9ec6 100644 --- a/src/kecleon_items.c +++ b/src/kecleon_items.c @@ -4,6 +4,7 @@ #include "constants/species.h" #include "input.h" #include "kecleon_items.h" +#include "memory.h" extern struct unkStruct_203B210 *gUnknown_203B210; extern u8 gUnknown_202E5D8[]; @@ -13,8 +14,6 @@ extern struct unkData gUnknown_80DB870; extern struct unkData gUnknown_80DB888; extern struct unkData gUnknown_80DB858; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); void UpdateKecleonStoreState(u32); extern void sub_8019730(); @@ -47,7 +46,7 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1) { case 0: gUnknown_203B210->unk4 = 1; - gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4; + gUnknown_203B210->unkE4 = &gUnknown_203B210->faceFile; CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); monName = GetMonSpecies( SPECIES_KECLEON); @@ -63,7 +62,7 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1) break; case 2: gUnknown_203B210->unk4 = 0; - gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4; + gUnknown_203B210->unkE4 = &gUnknown_203B210->faceFile; CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); monName = GetMonSpecies( SPECIES_KECLEON); @@ -81,7 +80,7 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1) break; } faceFile = GetDialogueSpriteDataPtr(SPECIES_KECLEON); - gUnknown_203B210->unkD4 = faceFile; + gUnknown_203B210->faceFile = faceFile; gUnknown_203B210->unkD8 = faceFile->data; gUnknown_203B210->unkE0 = 0; gUnknown_203B210->unkE1 = 0; @@ -141,7 +140,7 @@ void sub_8018CF0(void) { if(gUnknown_203B210 != NULL) { - CloseFile(gUnknown_203B210->unkD4); + CloseFile(gUnknown_203B210->faceFile); MemoryFree(gUnknown_203B210); gUnknown_203B210 = NULL; } diff --git a/src/load_screen.c b/src/load_screen.c index e49d5a9..2b40564 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -3,6 +3,7 @@ #include "main_menu.h" #include "play_time.h" #include "file_system.h" +#include "memory.h" extern struct PlayTimeStruct *gPlayTimeRef; extern struct PlayTimeStruct gPlayTime; @@ -81,9 +82,6 @@ extern u8 gUnknown_80E7854; extern const char gUnknown_80E785C[]; // clmkpat -extern void *MemoryAlloc(u32, u32); -extern void MemoryFill8(u8 *, u32, u32); -extern void MemoryFree(void *); u8 IsQuickSave(void); void DrawLoadScreenText(void); extern void sub_8035CF4(u32 *, u32, u32); diff --git a/src/main_menu.c b/src/main_menu.c index 62dc4d9..052ad49 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -4,6 +4,7 @@ #include "adventure_log.h" #include "input.h" #include "menu.h" +#include "memory.h" // NOTE: 0x13 and 0x14 // Communication Screen? @@ -20,10 +21,7 @@ extern struct MainMenu *gMainMenu; -extern void* MemoryAlloc(u32 a, u32 b); -extern void MemoryFill8(u8 *dest, u8 value, s32 size); void sub_8035DA0(void); -extern void MemoryFree(void *); extern void sub_8094C14(void); extern void sub_8099690(u32); @@ -74,7 +72,7 @@ struct unkStruct_203B34C u32 unk4; struct unkSubStruct *unk8; // Array of menu choices?? u8 fillC[0x30 - 0xC]; - s16 unk30; + s16 menuIndex; u8 fill32[0x144 - 0x32]; struct unkData unk144[4]; /* 0x1A4 */ u32 currMenuChoice; diff --git a/src/main_menu_1.c b/src/main_menu_1.c index 1879db4..5363bf9 100644 --- a/src/main_menu_1.c +++ b/src/main_menu_1.c @@ -14,7 +14,7 @@ struct unkStruct_203B34C u32 unk4; struct MenuItem *unk8; // Array of menu choices?? u8 fillC[0x30 - 0xC]; - s16 unk30; + s16 menuIndex; u8 fill32[0x144 - 0x32]; struct unkData unk144[4]; /* 0x1A4 */ u32 currMenuChoice; @@ -66,7 +66,7 @@ bool8 SetMainMenuText(void) // Have to load the pointer before the index preload = gUnknown_203B34C->unk8; - menuChoice = preload[gUnknown_203B34C->unk30].menuAction; // chosen menu action? + menuChoice = preload[gUnknown_203B34C->menuIndex].menuAction; // chosen menu action? if (gUnknown_203B34C->currMenuChoice == menuChoice) { return FALSE; } diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c index 6061531..d35a659 100644 --- a/src/makuhita_dojo.c +++ b/src/makuhita_dojo.c @@ -3,6 +3,7 @@ #include "pokemon.h" #include "input.h" #include "constants/species.h" +#include "memory.h" struct unkData { @@ -14,7 +15,7 @@ struct unkStruct_203B318 // size: 0xcc u32 unk0; u32 unk4; - s32 unk8; + s32 state; u8 fillC[0x10 - 0xC]; s16 unk10; u8 fill[0x58 - 0x12]; @@ -37,8 +38,6 @@ extern struct unkData gUnknown_80E0760; extern void sub_800641C(struct unkData *, u32, u32); extern void sub_8006518(struct unkData *); -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern void sub_8030208(); extern void sub_8030258(); @@ -46,7 +45,7 @@ extern void sub_80302A8(); extern void sub_80302C4(); extern void UpdateMakuhitaDialogue(); -void sub_802FF04(s32); +void UpdateMakuhitaState(s32); void sub_802FF1C(); u32 CreateMakuhitaShop(u32 param_1) @@ -113,14 +112,14 @@ u32 CreateMakuhitaShop(u32 param_1) gUnknown_203B318->unk66 = 0; gUnknown_203B318->unk60 = 2; gUnknown_203B318->unk62 = 8; - sub_802FF04(initialState); + UpdateMakuhitaState(initialState); return 1; } u32 sub_802FE58(void) { - switch(gUnknown_203B318->unk8) { + switch(gUnknown_203B318->state) { case 0: case 1: sub_8030208(); @@ -145,7 +144,7 @@ s16 sub_802FED0(void) return gUnknown_203B318->unk10; } -void sub_802FEE0(void) +void CleanMakuhitaShop(void) { if(gUnknown_203B318 != NULL) { @@ -155,9 +154,9 @@ void sub_802FEE0(void) } } -void sub_802FF04(s32 newState) +void UpdateMakuhitaState(s32 newState) { - gUnknown_203B318->unk8 = newState; + gUnknown_203B318->state = newState; sub_802FF1C(); UpdateMakuhitaDialogue(); } @@ -166,7 +165,7 @@ void sub_802FF1C(void) { s32 iVar3; sub_8006518(gUnknown_203B318->unk6C); - switch(gUnknown_203B318->unk8) + switch(gUnknown_203B318->state) { case 0: case 4: diff --git a/src/memory_mid.c b/src/memory_mid.c new file mode 100644 index 0000000..32628cb --- /dev/null +++ b/src/memory_mid.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "memory.h" + +extern u32 gUnknown_80B7F14; +extern u32 gUnknown_80B7F20; +extern struct HeapDescriptor gMainHeapDescriptor; + +extern s32 MemorySearchFromBack(struct HeapDescriptor *heap, s32, s32); +extern s32 MemorySearchFromFront(struct HeapDescriptor *heap, s32, s32); +extern struct HeapDescriptor * _LocateSetBack(struct HeapDescriptor *, u32, u32, u32, u32); +extern struct HeapDescriptor * _LocateSetFront(struct HeapDescriptor *, u32, u32, u32, u32); +void DoFree(struct HeapDescriptor *, void *); +void *DoAlloc(struct HeapDescriptor *, s32, u32); + +void FatalError(u32 *, u32 *, ...) __attribute__((noreturn)); + + +s32 _LocateSet(struct HeapDescriptor *heap, s32 size, s32 param_3) +{ + s32 index; + struct HeapDescriptor * uVar2; + s32 uVar3; + + if (heap == NULL) { + heap = &gMainHeapDescriptor; + } + + // Set some sort flag/attr? + uVar3 = param_3 >> 8 | 1; + + // Reset it? + param_3 = param_3 & 0xff; + + if ((uVar3 & 2) != 0) { + index = MemorySearchFromFront(heap,uVar3,size); + if (index < 0) goto error; + uVar2 = _LocateSetFront(heap,index,uVar3,size,param_3); + return uVar2->freeCount; + } + else { + index = MemorySearchFromBack(heap,uVar3,size); + if (index < 0) goto error; + uVar2 = _LocateSetBack(heap,index,uVar3,size,param_3); + return uVar2->freeCount; + } + +error: + // LocateSet [%p] buffer %8x size can't locate + // atb %02x grp %3d + FatalError(&gUnknown_80B7F14, + &gUnknown_80B7F20, + heap,size,uVar3,param_3); +} + +void *MemoryAlloc(s32 size, s32 b) +{ + DoAlloc(&gMainHeapDescriptor, size, b); +} + +void MemoryFree(void *a) +{ + DoFree(&gMainHeapDescriptor, a); +} diff --git a/src/other_menus.c b/src/other_menus.c index 86a90fc..193d800 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -3,6 +3,7 @@ #include "main_menu.h" #include "gUnknown_203B460.h" #include "menu.h" +#include "memory.h" struct unkData { @@ -19,7 +20,7 @@ struct unkStruct_203B35C // size: 0x504 u32 unk0; u32 unk4; // link status? - u32 unk8; // state var? + u32 state; // state var? u8 fillC[0x1C - 0xC]; u32 unk1C; u8 fill20[0x15C - 0x20]; @@ -74,9 +75,6 @@ extern struct unkStruct_203B460 *gUnknown_203B460; extern void sub_8037400(void); extern void sub_800641C(void *, u32, u32); extern void ResetSprites(u32); -extern void *MemoryAlloc(u32, u32); -extern void MemoryFill8(u8 *, u8, s32); -extern void MemoryFree(void *); extern void sub_8035CF4(u32 *,u32, u32); extern void sub_80376CC(); extern void sub_8035CC0(void *, u32); @@ -115,7 +113,7 @@ void sub_8036FDC(s32 param_1) gUnknown_203B35C->unk0 = param_1; gUnknown_203B35C->unk4 = 0; - gUnknown_203B35C->unk8 = 0; + gUnknown_203B35C->state = 0; iVar3 = 0; do { gUnknown_203B35C->unk1C0[iVar3 * 2] = 0; @@ -269,7 +267,7 @@ u32 sub_80370F0(void) local_10 = 4; nextMenu = MENU_NO_SCREEN_CHANGE; - switch(gUnknown_203B35C->unk8){ + switch(gUnknown_203B35C->state){ case 0: if (sub_80130A8(&gUnknown_203B35C->unk1C) == '\0') { sub_8013114(&gUnknown_203B35C->unk1C,&local_10); @@ -278,13 +276,13 @@ u32 sub_80370F0(void) sub_8037748(); } else { - gUnknown_203B35C->unk8 = 1; + gUnknown_203B35C->state = 1; sub_8037900(); } break; case 1: sub_80376CC(); - gUnknown_203B35C->unk8 = 2; + gUnknown_203B35C->state = 2; sub_80371B8(); break; case 2: @@ -298,7 +296,7 @@ u32 sub_80370F0(void) if (local_10 != 4) { PlayMenuSoundEffect(3); nextMenu = sub_8037798(); - gUnknown_203B35C->unk8 = 4; + gUnknown_203B35C->state = 4; } sub_8037748(); } diff --git a/src/personality_test.c b/src/personality_test.c index 8d28ef3..ef31ec1 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -7,9 +7,9 @@ #include "pokemon.h" #include "input.h" #include "save.h" +#include "memory.h" +#include "gUnknown_203B46C.h" -extern void* MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern void sub_801317C(u32 *); extern void sub_8099690(u32); extern void sub_8001024(u32 *); @@ -67,14 +67,6 @@ struct PersonalityQuestion extern struct PersonalityQuestion *gPersonalityQuestionPointerTable[NUM_QUIZ_QUESTIONS]; -struct UnkSaveStruct1 -{ - /* 0x0 */ u32 unk0; - /* 0x4 */ u32 unk4; - /* 0x8 */ u16 unk8; - /* 0xA */ u8 unkA; - /* 0xB */ u8 playerGender; -}; extern struct UnkSaveStruct1 *gUnknown_203B46C; struct stack_PartnerSprite diff --git a/src/pokemon.c b/src/pokemon.c index 90a0c00..e87c8c6 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1,25 +1,46 @@ #include "global.h" #include "pokemon.h" #include "file_system.h" +#include "constants/species.h" -extern u32 *gRecruitedPokemonRef; -extern u32 gRecruitedPokemon; +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; +extern struct unkStruct_203B45C *gRecruitedPokemonRef; void LoadMonsterParameters(void) { - gRecruitedPokemonRef = &gRecruitedPokemon; + gRecruitedPokemonRef = gRecruitedPokemon; gMonsterParametersFile = OpenFileAndGetFileDataPtr(&gUnknown_81075F4, &gSystemFileArchive); gMonsterParameters = (struct gPokemon *)gMonsterParametersFile->data; gLevelCurrentPokeId = 0; } -u32 *sub_808CE00(void) +struct unkStruct_203B45C *GetRecruitedPokemon(void) { - return &gRecruitedPokemon; + return gRecruitedPokemon; } +void InitializeRecruitedPokemon(void) +{ + s32 iVar3; + + for(iVar3 = 0; iVar3 < NUM_SPECIES; iVar3++) + { + gRecruitedPokemonRef->pokemon[iVar3].unk0 = 0; + } + + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gRecruitedPokemonRef->pokemon2[iVar3].unk0 = 0; + } + + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gRecruitedPokemonRef->pokemon3[iVar3].unk8 = 0; + gRecruitedPokemonRef->pokemon3[iVar3].unk0 = 0; + } +} diff --git a/src/post_office_guide.c b/src/post_office_guide.c index 42a8acb..dd28446 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -4,6 +4,7 @@ #include "input.h" #include "constants/species.h" #include "menu.h" +#include "memory.h" struct PostOfficeHelper { @@ -30,6 +31,7 @@ struct unkData struct unkStruct_203B330 { + // size: 0x78 struct UnkInputStruct *unk0; u8 fill4[0x8]; u8 unkC; @@ -166,8 +168,6 @@ extern void sub_8031AE8(); extern u8 gUnknown_202E5D8[]; extern u8 gAvailablePokemonNames[]; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern void sub_800641C(struct unkData *, u32, u32); extern void sub_8006518(struct unkData *); extern void sub_8031A2C(void); @@ -63,7 +63,7 @@ struct unkStruct_203B194 u8 *unk4; u32 unk8; u8 unkC; - u8 padding[0x10 - 0xD]; + u8 fillD[3]; u32 quickSaveStatus; }; extern struct unkStruct_203B194 *gUnknown_203B194; @@ -85,19 +85,57 @@ extern u32 gUnknown_203B490; extern u32 gUnknown_203B494; extern struct ExclusivePokemonData *gUnknown_203B498; -extern const char gSaveCorrupted; -extern const char gSavingAdventure; -extern const char gWriteGamePak; -extern const char gSaveCompleted; -extern const char gSaveNotWritten; -extern const char gSaveFailed; -extern const char gUnknown_80D44C8; -extern const char gUnknown_80D45AC; +ALIGNED(4) const char gSaveCorrupted[] = _("#+The game data is corrupted.\n" + "#+Your data will be erased."); -extern const char gUnknown_80D45F4; -extern const char gUnknown_80D4668; -extern const char gSaveNotWritten2; -extern const char gSaveFailed2; +ALIGNED(4) const char fill_save0[] = _("pksdir0"); + +ALIGNED(4) const char gSavingAdventure[] = _("#+Saving your adventure...\n" + "#+Please don~27t turn off the power."); + +ALIGNED(4) const char gWriteGamePak[] = _("#+Writing to GBA Game Pak.\n" + "#+Do not remove the GBA Game Pak.\n" + "#+Please wait with the power on."); + +ALIGNED(4) const char gSaveCompleted[] = _("#+Save completed!"); + +ALIGNED(4) const char gSaveNotWritten[] = _("#+The data could not be written.\n" + "#+Please turn off the power and remove\n" + "#+and reinsert the DS Card."); + +ALIGNED(4) const char gSaveFailed[] = _("#+Save failed."); + +ALIGNED(4) const char fill_save1[] = _("pksdir0"); + +ALIGNED(4) const char gUnknown_80D44C8[] = _("#+Your data was not properly saved~2c\n" + "#+so your game cannot be resumed\n" + "#+from your last spot.#P" + "#+Your last outing is considered a defeat.\n" + "#+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 gUnknown_80D45AC[] = _("#+Quicksaving your adventure...\n" + "#+Please don~27t turn off the power."); + +ALIGNED(4) const char gUnknown_80D45F4[] = _("#+Your adventure has been saved.\n" + "#+When you are in a dungeon~2c quicksave\n" + "#+your progress before ending the game."); + +ALIGNED(4) const char gUnknown_80D4668[] = _("#+Your adventure has been saved.\n" + "#+When you resume play~2c the quicksave\n" + "#+data will be deleted.#P" + "#+When you are shutting down the game~2c\n" + "#+save your progress in your team base~2c\n" + "#+or quicksave in a dungeon."); + +ALIGNED(4) const char gSaveNotWritten2[] = _("#+The data could not be written.\n" + "#+Please turn off the power and remove\n" + "#+and reinsert the DS Card."); + +ALIGNED(4) const char gSaveFailed2[] = _("#+Save failed."); +ALIGNED(4) const char fill_save3[] = _("pksdir0"); extern volatile struct UnkStruct_203B184 *gUnknown_203B184; @@ -131,12 +169,12 @@ 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 *sub_808CE00(void); -extern void sub_808CE08(void); +extern u32 *GetRecruitedPokemon(void); +extern void InitializeRecruitedPokemon(void); extern u32 *GetMoneyItemsInfo(void); extern void InitializeMoneyItems(void); -extern u32 sub_8094990(void); -extern void sub_8094998(u8 r0); +extern u32 GetGameOptions(void); +extern void InitializeGameOptions(u8 r0); extern u8 *sub_80950F8(void); extern void sub_80958E4(u8 *a, u32 b); extern u32 sub_80958F8(void); @@ -150,10 +188,6 @@ extern void sub_80993D8(void); extern struct PlayTimeStruct *gPlayTimeRef; - -extern void* MemoryAlloc(u32 a, u32 b); -extern void MemoryFree(void* a); -extern void MemoryFill8(u8 *dest, u8 value, s32 size); extern void xxx_call_start_bg_music(void); @@ -527,7 +561,7 @@ void sub_8012284(void) { sub_80122D0(); sub_80122F4(); - sub_8012300(); + InitializePlayerData(); } void sub_8012298(void) @@ -540,7 +574,7 @@ void sub_80122A8(void) { sub_80122D0(); sub_80122F4(); - sub_8012300(); + InitializePlayerData(); sub_8012240(); } @@ -566,17 +600,17 @@ void sub_80122F4(void) sub_800135C(); } -void sub_8012300(void) +void InitializePlayerData(void) { InitializeFriendAreas(); - sub_808CE08(); + InitializeRecruitedPokemon(); InitializeMoneyItems(); InitializeResuceTeamInfo(); sub_80972F4(); sub_8095118(); sub_8095900(); sub_80974E8(); - sub_8094998(1); + InitializeGameOptions(1); InitializeExclusivePokemon(); } @@ -593,7 +627,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0) if(r0 != NULL) { gUnknown_203B460 = r0->unk0; - gRecruitedPokemonRef = r0->unk4; + gRecruitedPokemonRef = r0->recruitedPokemon; gUnknown_203B480 = r0->unk8; gUnknown_203B484 = r0->unkC; gUnknown_203B488 = r0->unk10; @@ -603,12 +637,12 @@ void sub_8012334(struct UnkStruct_203B184 *r0) gUnknown_203B494 = r0->unk20; gUnknown_203B498 = r0->ExclusivePokemon; gFriendAreas = r0->BoughtFriendAreas; - gUnknown_203B46C = r0->unk2C; + gUnknown_203B46C = r0->gameOptions; gPlayTimeRef = r0->playTime; return; } gUnknown_203B460 = GetMoneyItemsInfo(); - gRecruitedPokemonRef = sub_808CE00(); + gRecruitedPokemonRef = GetRecruitedPokemon(); gUnknown_203B480 = sub_80950F8(); gUnknown_203B484 = sub_8095100(); gUnknown_203B488 = sub_8095108(); @@ -618,7 +652,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0) gUnknown_203B494 = sub_8097680(); gUnknown_203B498 = GetExclusivePokemon(); gFriendAreas = GetBoughtFriendAreas(); - gUnknown_203B46C = sub_8094990(); + gUnknown_203B46C = GetGameOptions(); gPlayTimeRef = GetPlayTime(); } @@ -649,7 +683,7 @@ u8 sub_8012484(void) { if(IsSaveCorrupted()) { - sub_80141B4(&gSaveCorrupted, 0, 0, 0x301); + sub_80141B4(gSaveCorrupted, 0, 0, 0x301); gUnknown_203B188->state = 3; } else @@ -661,11 +695,11 @@ u8 sub_8012484(void) { gUnknown_203B188->state = 6; } - break; + break; case 3: if(sub_80144A4(&temp2) == 0) gUnknown_203B188->state = 4; - break; + break; case 4: sub_8012298(); gUnknown_203B188->state = 6; @@ -711,10 +745,10 @@ void sub_8012574(s16 PokemonID) } if (gUnknown_203B18C->faceFile != 0) { preload_face = (u8 *)&gUnknown_203B18C->faceFile; - sub_80141B4(&gSavingAdventure,0,preload_face,0x20); + sub_80141B4(gSavingAdventure,0,preload_face,0x20); } else { - sub_80141B4(&gSavingAdventure,0,0,0x20); + sub_80141B4(gSavingAdventure,0,0,0x20); } gUnknown_203B18C->state = 3; } @@ -736,8 +770,8 @@ bool8 sub_8012600(void) break; case 1: gUnknown_203B18C->unk4++; - if (8 < gUnknown_203B18C->unk4) { - sub_80141B4(&gWriteGamePak, 0, 0, 0x20); + if (gUnknown_203B18C->unk4 > 8) { + sub_80141B4(gWriteGamePak, 0, 0, 0x20); gUnknown_203B18C->state = 3; } break; @@ -754,20 +788,20 @@ bool8 sub_8012600(void) { case SAVE_COMPLETED: if(gUnknown_203B18C->faceFile != NULL) - sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); + sub_80141B4(gSaveCompleted, 0, (u8 *)faceFile, 0x101); else - sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); + sub_80141B4(gSaveCompleted, 0, (u8 *)faceFile, 0x101); gUnknown_203B18C->state = 5; break; case SAVE_NOT_WRTTEN: - sub_80141B4(&gSaveNotWritten, 0, 0, 0); + sub_80141B4(gSaveNotWritten, 0, 0, 0); gUnknown_203B18C->state = 6; break; default: if(gUnknown_203B18C->faceFile != NULL) - sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); + sub_80141B4(gSaveFailed, 0, (u8 *)faceFile, 0x101); else - sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); + sub_80141B4(gSaveFailed, 0, (u8 *)faceFile, 0x101); gUnknown_203B18C->state = 5; break; } @@ -830,7 +864,12 @@ u32 sub_80127A8(void) } else { - sub_80141B4(&gUnknown_80D44C8, 0, 0, 0x301); + // Data was not properly saved + // so your game cannot be resumed + // from your last spot. Your last outing is considered a defeat. + // Before shutting down, save in your + // team base or quicksave in a dungeon + sub_80141B4(gUnknown_80D44C8, 0, 0, 0x301); gUnknown_203B190->state = 2; } break; @@ -867,9 +906,13 @@ void sub_8012850(u8 *r0, u32 r1, u8 r2) gUnknown_203B194->unkC = r2; gUnknown_203B194->state = 0; if(gUnknown_203B194->unkC != 0) - sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20); + // Quicksaving your adventure... + // Please don't turn off the power. + sub_80141B4(gUnknown_80D45AC, 0, 0, 0x20); else - sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20); + // Quicksaving your adventure... + // Please don't turn off the power. + sub_80141B4(gUnknown_80D45AC, 0, 0, 0x20); } u32 sub_80128B0(void) @@ -896,18 +939,29 @@ u32 sub_80128B0(void) case SAVE_COMPLETED: sub_80121E0(0xf1207); if(gUnknown_203B194->unkC != 0) - sub_80141B4(&gUnknown_80D45F4, 0, 0, 0x301); + // Your adventure has been saved + // When you are in a dungeon, quicksave + // your progress before ending the game. + sub_80141B4(gUnknown_80D45F4, 0, 0, 0x301); else - sub_80141B4(&gUnknown_80D4668, 0, 0, 0x301); + // Your adventure has been saved. + // When you resume play, the quicksave + // data will be deleted. When you are shutting down the game, + // save your progress in your team base, + // or quicksave in a dungeon. + sub_80141B4(gUnknown_80D4668, 0, 0, 0x301); gUnknown_203B194->state = 3; break; case SAVE_NOT_WRTTEN: - sub_80141B4(&gSaveNotWritten2, 0, 0, 0); + // 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; break; default: sub_80121E0(0xf1209); - sub_80141B4(&gSaveFailed2, 0, 0, 0x301); + sub_80141B4(gSaveFailed2, 0, 0, 0x301); gUnknown_203B194->state = 3; break; } diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c index 5ca115a..cb86468 100644 --- a/src/trade_items_menu.c +++ b/src/trade_items_menu.c @@ -2,6 +2,7 @@ #include "input.h" #include "trade_items_menu.h" #include "gUnknown_203B460.h" +#include "memory.h" extern struct TradeItemsMenu *gTradeItemsMenu; @@ -35,9 +36,6 @@ extern u32 gUnknown_80E6314; extern void sub_8013AA0(u32 *); -extern void *MemoryAlloc(u32, u32); -extern void MemoryFill8(u8 *, u32, u32); -extern void MemoryFree(void *); extern void sub_800641C(u32 *, u32, u32); extern void sub_8035C1C(); extern void sub_8035DA0(); diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index 811ce38..2d22ef1 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -1,6 +1,7 @@ #include "global.h" #include "input.h" #include "main_menu.h" +#include "memory.h" struct unkData { @@ -29,9 +30,6 @@ extern struct unkData gUnknown_80E6E7C; extern struct unkData gUnknown_80E6E94; extern struct MenuItem gUnknown_80E6EAC[]; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFill8(u8 *, u8, u32); -extern void MemoryFree(void *); extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); extern void sub_800641C(void *, u32, u32); diff --git a/src/unk_menu_203B364.c b/src/unk_menu_203B364.c index baba184..4d8a716 100644 --- a/src/unk_menu_203B364.c +++ b/src/unk_menu_203B364.c @@ -2,6 +2,7 @@ #include "input.h" #include "menu.h" #include "main_menu.h" +#include "memory.h" struct unkData { @@ -33,9 +34,6 @@ extern struct unkData gUnknown_80E6F38; extern struct MenuItem gUnknown_80E7090[]; extern struct MenuItem gUnknown_80E6F50[]; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFill8(u8 *, u8, u32); -extern void MemoryFree(void *); extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); extern void sub_800641C(void *, u32, u32); diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 6f93048..48bb3fc 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -4,6 +4,7 @@ #include "file_system.h" #include "constants/species.h" #include "wonder_mail.h" +#include "memory.h" extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; @@ -86,10 +87,6 @@ extern void sub_803092C(void); extern void sub_8011C28(u32); -extern void MemoryFill8(u8 *dest, u8 value, s32 size); -extern void* MemoryAlloc(u32, u32); -extern void MemoryFree(void *); - extern u32 sub_80154F0(); extern u32 sub_8039068(u32, u8 *r1, u8 *r0); extern void sub_8014248(const char *r0, u32, u32, u32 *r4, u32, u32, u32, u32 *r5, u32); diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 911df42..84bc576 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -3,6 +3,7 @@ #include "input.h" #include "pokemon.h" #include "constants/species.h" +#include "memory.h" struct unkStruct_203B2C8 { @@ -33,6 +34,7 @@ struct unkStruct_203B2C8 u8 unk134; u8 fill135[0x3]; u32 unk138; + u32 fill13C; }; extern struct unkStruct_203B2C8 *gUnknown_203B2C8; @@ -71,9 +73,6 @@ extern char gAvailablePokemonNames[0x50]; extern u32 sub_802F298(); extern void sub_802F2C0(); extern u32 sub_8011C34(); -extern void *MemoryAlloc(u32, u32); -extern void MemoryFill8(u8 *, u8, s32); -extern void MemoryFree(void *); extern void sub_800641C(void *, u32, u32); extern u8 sub_8099394(u8 *); extern void sub_802B548(u32); @@ -108,8 +107,8 @@ u32 sub_802B2D4(void) ResetUnusedInputStruct(); sub_800641C(0,1,1); - gUnknown_203B2C8 = MemoryAlloc(0x140,8); - MemoryFill8((u8 *)gUnknown_203B2C8,0,0x140); + gUnknown_203B2C8 = MemoryAlloc(sizeof(struct unkStruct_203B2C8),8); + MemoryFill8((u8 *)gUnknown_203B2C8,0,sizeof(struct unkStruct_203B2C8)); gUnknown_203B2C8->unk1 = -1; CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index 7951efc..80552f6 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -1,9 +1,10 @@ #include "global.h" +#include "memory.h" struct unkStruct_203B2F8 { // size: 0x208 - u32 unk0; // state + u32 state; // state u32 unk4; u8 unk8; u8 unk9; @@ -17,8 +18,6 @@ struct unkStruct_203B2F8 }; extern struct unkStruct_203B2F8 *gUnknown_203B2F8; -extern void *MemoryAlloc(u32, u32); -extern void MemoryFree(void *); extern u8 sub_8099328(u8 *); extern u32 sub_8011C1C(); extern void sub_802D1A0(u32); @@ -52,7 +51,7 @@ u32 sub_802D098(u32 param_1) u32 sub_802D0E0(void) { - switch(gUnknown_203B2F8->unk0) { + switch(gUnknown_203B2F8->state) { case 0: break; case 1: @@ -100,7 +99,7 @@ void sub_802D184(void) void sub_802D1A0(u32 newState) { - gUnknown_203B2F8->unk0 = newState; + gUnknown_203B2F8->state = newState; sub_802D1B8(); sub_802D2A8(); } diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index 288d352..204f622 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -1,5 +1,6 @@ #include "global.h" #include "save.h" +#include "memory.h" #define EXIT_TO_MAIN_MENU 5 #define PASSWORD_SUCCESS 13 @@ -38,9 +39,6 @@ extern u32 sub_8095324(u32); extern u32 sub_80144A4(s32 *); extern u32 sub_8011C1C(void); extern struct unkStruct_203B3E8 *gUnknown_203B3E8; -extern void* MemoryAlloc(u32, u32); -extern void MemoryFree(void *); -extern void MemoryFill8(u8 *dest, u8 value, s32 size); extern void sub_803A1C0(u8); extern void ResetUnusedInputStruct(void); extern void sub_800641C(void *, u32, u32); diff --git a/src/wonder_mail_pre.c b/src/wonder_mail_pre.c index a187a9c..9d15ab3 100644 --- a/src/wonder_mail_pre.c +++ b/src/wonder_mail_pre.c @@ -4,10 +4,9 @@ #include "pokemon.h" #include "constants/species.h" #include "wonder_mail.h" +#include "memory.h" -extern void* MemoryAlloc(u32 a, u32 b); -extern void MemoryFill8(u8 *dest, u8 value, s32 size); extern void sub_800641C(void *r0, u8, u8); extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; |