From 67d9a242bf8a66ecf46072f3f832e1ee299f3021 Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Fri, 4 Aug 2023 00:37:49 -0400 Subject: [PATCH 1/6] Match UpdateMakuhitaDialogue --- asm/makuhita_dojo.s | 268 ---------------------------------------- include/makuhita_dojo.h | 19 +++ include/menu.h | 3 +- ld_script.txt | 1 - src/makuhita_dojo_1.c | 210 +++++++++++++++++++++---------- 5 files changed, 168 insertions(+), 333 deletions(-) delete mode 100644 asm/makuhita_dojo.s diff --git a/asm/makuhita_dojo.s b/asm/makuhita_dojo.s deleted file mode 100644 index 86d98251d..000000000 --- a/asm/makuhita_dojo.s +++ /dev/null @@ -1,268 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start UpdateMakuhitaDialogue -UpdateMakuhitaDialogue: - push {r4,r5,lr} - sub sp, 0x18 - ldr r1, _0802FFA4 - ldr r0, [r1] - ldr r0, [r0, 0x8] - adds r5, r1, 0 - cmp r0, 0xD - bls _0802FF9A - b _080301A0 -_0802FF9A: - lsls r0, 2 - ldr r1, _0802FFA8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802FFA4: .4byte gUnknown_203B318 -_0802FFA8: .4byte _0802FFAC - .align 2, 0 -_0802FFAC: - .4byte _0802FFE4 - .4byte _08030000 - .4byte _08030038 - .4byte _08030050 - .4byte _08030068 - .4byte _08030074 - .4byte _080300DC - .4byte _080300C4 - .4byte _080300F4 - .4byte _0803010C - .4byte _08030148 - .4byte _08030174 - .4byte _08030180 - .4byte _080301A0 -_0802FFE4: - bl DrawMakuhitaMainMenu - ldr r2, _0802FFF8 - ldr r0, _0802FFFC - ldr r5, [r0] - ldr r1, [r5, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - b _0803000E - .align 2, 0 -_0802FFF8: .4byte gMakuhitaDialogue -_0802FFFC: .4byte gUnknown_203B318 -_08030000: - ldr r2, _08030034 - ldr r5, [r5] - ldr r1, [r5, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x4 -_0803000E: - adds r0, r2 - ldr r0, [r0] - ldr r2, [r5, 0x14] - adds r3, r5, 0 - adds r3, 0x18 - movs r4, 0 - str r4, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r4, [sp, 0x8] - ldr r1, [r5, 0x68] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _080301A0 - .align 2, 0 -_08030034: .4byte gMakuhitaDialogue -_08030038: - ldr r3, [r5] - movs r0, 0xD - str r0, [r3, 0xC] - ldr r2, _0803004C - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x8 - b _0803015A - .align 2, 0 -_0803004C: .4byte gMakuhitaDialogue -_08030050: - ldr r3, [r5] - movs r0, 0x4 - str r0, [r3, 0xC] - ldr r2, _08030064 - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0xC - b _0803015A - .align 2, 0 -_08030064: .4byte gMakuhitaDialogue -_08030068: - movs r0, 0x3 - movs r1, 0 - movs r2, 0xA - bl sub_80302E8 - b _080301A0 -_08030074: - ldr r1, [r5] - movs r0, 0xD - str r0, [r1, 0xC] - movs r2, 0x10 - ldrsh r0, [r1, r2] - bl sub_80A2740 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080300B4 - ldr r1, [sp, 0x14] - ands r1, r2 - orrs r1, r0 - ldr r0, _080300B8 - ands r1, r0 - movs r0, 0x80 - lsls r0, 1 - orrs r1, r0 - str r1, [sp, 0x14] - ldr r0, _080300BC - add r1, sp, 0x14 - bl PrintYellowDungeonNametoBuffer - ldr r2, _080300C0 - ldr r3, [r5] - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x10 - b _0803015A - .align 2, 0 -_080300B4: .4byte 0xffffff00 -_080300B8: .4byte 0xffff00ff -_080300BC: .4byte gAvailablePokemonNames -_080300C0: .4byte gMakuhitaDialogue -_080300C4: - ldr r3, [r5] - movs r0, 0xD - str r0, [r3, 0xC] - ldr r2, _080300D8 - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x18 - b _0803015A - .align 2, 0 -_080300D8: .4byte gMakuhitaDialogue -_080300DC: - ldr r3, [r5] - movs r0, 0xD - str r0, [r3, 0xC] - ldr r2, _080300F0 - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x14 - b _0803015A - .align 2, 0 -_080300F0: .4byte gMakuhitaDialogue -_080300F4: - ldr r3, [r5] - movs r0, 0x9 - str r0, [r3, 0xC] - ldr r2, _08030108 - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x1C - b _0803015A - .align 2, 0 -_08030108: .4byte gMakuhitaDialogue -_0803010C: - ldr r4, _08030138 - bl GetPlayerPokemonStruct - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - ldr r0, _0803013C - ldr r1, [r0] - movs r0, 0xB - str r0, [r1, 0xC] - movs r0, 0xCB - bl PlaySound - ldr r0, _08030140 - ldr r3, _08030144 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - b _080301A0 - .align 2, 0 -_08030138: .4byte gPlayerName -_0803013C: .4byte gUnknown_203B318 -_08030140: .4byte gMakuhitaDojoBonslyDoll -_08030144: .4byte 0x00000101 -_08030148: - ldr r3, [r5] - movs r0, 0xD - str r0, [r3, 0xC] - ldr r2, _0803016C - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x20 -_0803015A: - adds r0, r2 - ldr r0, [r0] - ldr r2, [r3, 0x68] - ldr r3, _08030170 - movs r1, 0 - bl sub_80141B4 - b _080301A0 - .align 2, 0 -_0803016C: .4byte gMakuhitaDialogue -_08030170: .4byte 0x0000010d -_08030174: - movs r0, 0x1 - movs r1, 0x49 - movs r2, 0x1 - bl sub_801B60C - b _080301A0 -_08030180: - ldr r3, [r5] - movs r0, 0x1 - str r0, [r3, 0xC] - ldr r2, _080301A8 - ldr r1, [r3, 0x4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r2, 0x24 - adds r0, r2 - ldr r0, [r0] - ldr r2, [r3, 0x68] - ldr r3, _080301AC - movs r1, 0 - bl sub_80141B4 -_080301A0: - add sp, 0x18 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080301A8: .4byte gMakuhitaDialogue -_080301AC: .4byte 0x0000010d - thumb_func_end UpdateMakuhitaDialogue - - .align 2,0 diff --git a/include/makuhita_dojo.h b/include/makuhita_dojo.h index 3bc460d39..91d6f7995 100644 --- a/include/makuhita_dojo.h +++ b/include/makuhita_dojo.h @@ -1,3 +1,8 @@ +#ifndef GUARD_MAKUHITA_DOJO_H +#define GUARD_MAKUHITA_DOJO_H + +#include "constants/dungeon.h" + // size: 0xCC struct unkStruct_203B318 { @@ -21,3 +26,17 @@ struct unkStruct_203B318 struct UnkTextStruct2 unk6C[4]; }; +// size: 0xD0 +struct unkStruct_203B31C +{ + s16 unk0[NUM_DUNGEON_MAZE]; + /* 0x30 */ struct MenuInputStruct input; + u32 unk64; + struct UnkTextStruct2 *unk68; + struct UnkTextStruct2 unk6C[4]; + u8 unkCC[4]; +}; + +bool8 sub_80302E8(s32, struct UnkTextStruct2_sub *, u32); + +#endif // GUARD_MAKUHITA_DOJO_H \ No newline at end of file diff --git a/include/menu.h b/include/menu.h index a678c2c08..c2e01ee07 100644 --- a/include/menu.h +++ b/include/menu.h @@ -3,15 +3,16 @@ #include "input.h" +// size: 0x8 struct MenuItem { const u8 *text; s32 menuAction; // action?? }; +// size: 0x50 struct MenuStruct { - // size: 0x50 const u8 *unk0; // header text? /* 0x4 */ const struct MenuItem *menuItems; const u32 *menuTextColorArray; diff --git a/ld_script.txt b/ld_script.txt index 9c569a899..1bbbd152d 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -142,7 +142,6 @@ SECTIONS { asm/wonder_mail_3_mid.o(.text); src/wonder_mail_3_1.o(.text); src/makuhita_dojo.o(.text); - asm/makuhita_dojo.o(.text); src/makuhita_dojo_1.o(.text); src/wonder_mail_4.o(.text); src/wonder_mail_5.o(.text); diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c index 485e945e8..9e1340567 100644 --- a/src/makuhita_dojo_1.c +++ b/src/makuhita_dojo_1.c @@ -1,6 +1,5 @@ #include "global.h" #include "constants/colors.h" -#include "constants/dungeon.h" #include "constants/input.h" #include "code_800D090.h" #include "dungeon.h" @@ -11,19 +10,10 @@ #include "makuhita_dojo.h" #include "menu_input.h" -// size: 0xD0 -struct unkStruct_203B31C -{ - s16 unk0[NUM_DUNGEON_MAZE]; - /* 0x30 */ struct MenuInputStruct input; - u32 unk64; - struct UnkTextStruct2 *unk68; - struct UnkTextStruct2 unk6C[4]; - u8 unkCC[4]; -}; - extern struct unkStruct_203B31C *gUnknown_203B31C; extern struct unkStruct_203B318 *gUnknown_203B318; +extern u8 gAvailablePokemonNames[]; +extern u8 gPlayerName[]; static const u8 makuhita_dojo_fill[] = "pksdir0"; @@ -49,33 +39,108 @@ ALIGNED(4) const u8 gUnknown_80E0824[] = _("{STAR_BULLET}"); ALIGNED(4) const u8 gMakuhitaCoursePlaceholder[] = _("{COLOR_2}%c%s{END_COLOR_TEXT_2}"); static const u8 makuhita_dojo_fill2[] = "pksdir0"; +extern const u8 *gMakuhitaDialogue[2][10]; extern u8 gMakuhitaDojoGoTrain[]; +extern const u8 gMakuhitaDojoBonslyDoll[]; extern u8 *gUnknown_80D4934[]; extern u8 *gUnknown_80D4970[]; -extern bool8 sub_8097504(s16); -extern s16 sub_80A26CC(s16 r0); -extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern u8 sub_80A2740(s32 r0); -extern s16 sub_80A2668(u32 r0); -extern bool8 IsMazeCompleted(s32); -extern s32 sub_8030668(void); -extern void sub_80304C8(); -extern void DrawDojoCourseList(void); - -extern void PlayMenuSoundEffect(u32); -extern void sub_803053C(void); -extern u8 sub_80306A4(void); +extern void sub_8008C54(u32); +extern u32 sub_80095E4(s16, u32); +extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); +extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); extern s32 sub_80144A4(s32 *); -void UpdateMakuhitaState(s32); +extern u32 sub_801B60C(u32, u8, u8); extern u32 sub_801B6AC(void); extern void sub_801B72C(void); -extern s16 sub_8030418(void); extern u32 sub_80303AC(u8); +extern s16 sub_8030418(void); extern void sub_8030480(void); +extern void sub_80304C8(); +extern void sub_803053C(void); +extern s32 sub_8030668(void); +extern u8 sub_80306A4(void); +extern bool8 sub_8097504(s16); +extern s16 sub_80A2668(u32 r0); +extern s16 sub_80A26CC(s16 r0); +extern u8 sub_80A2740(s32 r0); +extern void DrawDojoCourseList(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern bool8 IsMazeCompleted(s32); +extern void PlayMenuSoundEffect(u32); +extern void PlaySound(u16); +extern void PrintColoredPokeNameToBuffer(u8 *, struct PokemonStruct *, s32); +extern void PrintYellowDungeonNametoBuffer(u8 *, struct DungeonLocation *); + +void DrawMakuhitaMainMenu(void); +void UpdateMakuhitaState(s32); + +void UpdateMakuhitaDialogue(void) +{ + struct DungeonLocation dLoc; + + switch (gUnknown_203B318->state) { + case 0: + DrawMakuhitaMainMenu(); + sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][0], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); + break; + case 1: + sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][1], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); + break; + case 2: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][2], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 3: + gUnknown_203B318->fallbackState = 4; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][3], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 4: + sub_80302E8(3, NULL, 10); + break; + case 5: + gUnknown_203B318->fallbackState = 13; + dLoc.id = sub_80A2740(gUnknown_203B318->unk10); + dLoc.floor = 1; + PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, &dLoc); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][4], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 7: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][6], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 6: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][5], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 8: + gUnknown_203B318->fallbackState = 9; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][7], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 9: + PrintColoredPokeNameToBuffer(gPlayerName, GetPlayerPokemonStruct(), COLOR_YELLOW); + gUnknown_203B318->fallbackState = 11; + PlaySound(0xCB); + sub_80141B4(gMakuhitaDojoBonslyDoll, 0, 0, 0x101); + break; + case 10: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][8], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 11: + sub_801B60C(1, ITEM_GINSENG, 1); + break; + case 12: + gUnknown_203B318->fallbackState = 1; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][9], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 13: + return; + } +} void DrawMakuhitaMainMenu(void) { @@ -105,6 +170,7 @@ void sub_8030208(void) s32 menuAction; if (sub_80144A4(&menuAction) == 0) { gUnknown_203B318->menuAction = menuAction; + switch (menuAction) { case 2: UpdateMakuhitaState(3); @@ -159,10 +225,10 @@ void GotoMakuhitaFallbackState(void) UpdateMakuhitaState(gUnknown_203B318->fallbackState); } -bool8 sub_80302E8(int param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) +bool8 sub_80302E8(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) { if (sub_80306A4()) - return 0; + return FALSE; if (gUnknown_203B31C == NULL) gUnknown_203B31C = MemoryAlloc(sizeof(struct unkStruct_203B31C), 8); @@ -176,38 +242,38 @@ bool8 sub_80302E8(int param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) if (param_2 != NULL) gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unk8 = *param_2; - sub_8012D08(gUnknown_203B31C->unk68,param_3); + sub_8012D08(gUnknown_203B31C->unk68, param_3); ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B31C->unk6C,1,1); - sub_8013818(&gUnknown_203B31C->input,sub_8030668(),param_3,param_1); + sub_800641C(gUnknown_203B31C->unk6C, 1, 1); + sub_8013818(&gUnknown_203B31C->input, sub_8030668(), param_3, param_1); sub_80304C8(); DrawDojoCourseList(); - return 1; + return TRUE; } u32 sub_80303AC(u8 param_1) { - if (param_1 == 0) { - sub_8013660(&gUnknown_203B31C->input); - return 0; - } + if (param_1 == 0) { + sub_8013660(&gUnknown_203B31C->input); + return 0; + } - switch (GetKeyPress(&gUnknown_203B31C->input)) { - case INPUT_B_BUTTON: - PlayMenuSoundEffect(1); - return 2; - case INPUT_A_BUTTON: - PlayMenuSoundEffect(0); - return 3; - default: - if (sub_80138B8(&gUnknown_203B31C->input, 1)) { - sub_80304C8(); - DrawDojoCourseList(); - return 1; - } - else - return 0; - } + switch (GetKeyPress(&gUnknown_203B31C->input)) { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + default: + if (sub_80138B8(&gUnknown_203B31C->input, 1)) { + sub_80304C8(); + DrawDojoCourseList(); + return 1; + } + else + return 0; + } } s16 sub_8030418(void) @@ -236,6 +302,23 @@ void sub_8030480(void) } } +#ifdef NONMATCHING +void sub_80304C8(void) +{ + s16 test; + + gUnknown_203B31C->unkCC[0] = 1; + gUnknown_203B31C->unkCC[1] = 0; + gUnknown_203B31C->unkCC[2] = 8; + gUnknown_203B31C->unkCC[3] = 0; + + test = sub_80095E4(gUnknown_203B31C->input.unk1A, 12) + 2; + gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unkE = test; + gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unk10 = test + 2; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B31C->unk6C, 1, 1); +} +#else NAKED void sub_80304C8(void) { @@ -295,6 +378,7 @@ void sub_80304C8(void) "\t.align 2, 0\n" "_08030538: .4byte gUnknown_203B31C"); } +#endif // NONMATCHING void DrawDojoCourseList(void) { @@ -331,18 +415,18 @@ void DrawDojoCourseList(void) s32 sub_8030668(void) { - s32 index; - s32 counter; - - counter = 0; + s32 index; + s32 counter; - for (index = 0; index < NUM_DUNGEON_MAZE; index++) { - if (sub_8097504(index)) { - gUnknown_203B31C->unk0[counter] = sub_80A26CC(index); - counter++; + counter = 0; + + for (index = 0; index < NUM_DUNGEON_MAZE; index++) { + if (sub_8097504(index)) { + gUnknown_203B31C->unk0[counter] = sub_80A26CC(index); + counter++; + } } - } - return counter; + return counter; } bool8 sub_80306A4(void) From 95095d68299ce7ab3601356fd0b3a658fd0a72a1 Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Fri, 4 Aug 2023 00:48:59 -0400 Subject: [PATCH 2/6] Merge Makuhita Dojo files together :) --- include/makuhita_dojo.h | 4 + ld_script.txt | 2 - src/makuhita_dojo.c | 602 ++++++++++++++++++++++++++++++++++------ src/makuhita_dojo_1.c | 435 ----------------------------- 4 files changed, 514 insertions(+), 529 deletions(-) delete mode 100644 src/makuhita_dojo_1.c diff --git a/include/makuhita_dojo.h b/include/makuhita_dojo.h index 91d6f7995..dd2e0c038 100644 --- a/include/makuhita_dojo.h +++ b/include/makuhita_dojo.h @@ -2,6 +2,10 @@ #define GUARD_MAKUHITA_DOJO_H #include "constants/dungeon.h" +#include "file_system.h" +#include "input.h" +#include "menu.h" +#include "text.h" // size: 0xCC struct unkStruct_203B318 diff --git a/ld_script.txt b/ld_script.txt index 1bbbd152d..cdfc9cede 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -142,7 +142,6 @@ SECTIONS { asm/wonder_mail_3_mid.o(.text); src/wonder_mail_3_1.o(.text); src/makuhita_dojo.o(.text); - src/makuhita_dojo_1.o(.text); src/wonder_mail_4.o(.text); src/wonder_mail_5.o(.text); src/wonder_mail_6.o(.text); @@ -416,7 +415,6 @@ SECTIONS { src/pelipper_board.o(.rodata); src/wonder_mail_3_mid.o(.rodata); src/makuhita_dojo.o(.rodata); - src/makuhita_dojo_1.o(.rodata); src/wonder_mail_4.o(.rodata); src/wonder_mail_5.o(.rodata); src/wonder_mail_6.o(.rodata); diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c index d0f609bb9..a50f4a2d3 100644 --- a/src/makuhita_dojo.c +++ b/src/makuhita_dojo.c @@ -1,20 +1,28 @@ #include "global.h" -#include "file_system.h" -#include "pokemon.h" -#include "input.h" -#include "memory.h" -#include "text.h" -#include "menu.h" +#include "constants/colors.h" +#include "constants/input.h" +#include "code_800D090.h" +#include "dungeon.h" #include "makuhita_dojo.h" +#include "memory.h" +#include "menu_input.h" +#include "pokemon.h" extern u8 gUnknown_202E5D8[]; extern u8 gUnknown_202E1C8[]; +extern struct unkStruct_203B31C *gUnknown_203B31C; extern struct unkStruct_203B318 *gUnknown_203B318; +extern u8 gAvailablePokemonNames[]; +extern u8 gPlayerName[]; + +extern const u8 *gMakuhitaDialogue[2][10]; +extern u8 *gUnknown_80D4934[]; +extern u8 *gUnknown_80D4970[]; ALIGNED(4) const u8 gUnknown_80E0744[] = "Dungeons"; ALIGNED(4) const u8 gUnknown_80E0750[] = {0x83, 0xC2}; ALIGNED(4) const u8 gUnknown_80E0754[] = {0x83, 0xC0}; -static const u8 makuhita_dojo_fill[] = "pksdir0"; +static const u8 makuhita_dojo_fill1[] = "pksdir0"; const struct UnkTextStruct2 gUnknown_80E0760 = { 0x00, 0x00, 0x00, 0x00, @@ -26,111 +34,165 @@ const struct UnkTextStruct2 gUnknown_80E0760 = { }; ALIGNED(4) const u8 gMakuhitaDojoBonslyDoll[] = _( - "{CENTER_ALIGN}{COLOR_1 YELLOW_5}$n0{END_COLOR_TEXT_1} received the {COLOR_1 GREEN_2}Bonsly Doll{END_COLOR_TEXT_1}!\n" - "{CENTER_ALIGN}It has been placed outside your\n" - "{CENTER_ALIGN}rescue team base."); + "{CENTER_ALIGN}{COLOR_1 YELLOW_5}$n0{END_COLOR_TEXT_1} received the {COLOR_1 GREEN_2}Bonsly Doll{END_COLOR_TEXT_1}!\n" + "{CENTER_ALIGN}It has been placed outside your\n" + "{CENTER_ALIGN}rescue team base."); const u8 gMakuhitaDojoGoTrain[] = "Go Train"; +static const u8 makuhita_dojo_fill2[] = "pksdir0"; + +const struct UnkTextStruct2 gUnknown_80E07EC = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; +const struct UnkTextStruct2 gUnknown_80E0804 = { + 0x00, 0x00, 0x00, 0x00, + 0x06, + 0x02, 0x02, + 0x0E, 0x0E, + 0x0E, 0x00, + NULL +}; + +const u8 gMakuhitaDojoHeader[] = "Courses"; +ALIGNED(4) const u8 gUnknown_80E0824[] = _("{STAR_BULLET}"); +ALIGNED(4) const u8 gMakuhitaCoursePlaceholder[] = _("{COLOR_2}%c%s{END_COLOR_TEXT_2}"); +static const u8 makuhita_dojo_fill3[] = "pksdir0"; + +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sub_8008C54(u32); +extern u32 sub_80095E4(s16, u32); +extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); +extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); +extern s32 sub_80144A4(s32 *); +extern u32 sub_801B60C(u32, u8, u8); +extern u32 sub_801B6AC(void); +extern void sub_801B72C(void); extern void sub_8030208(); extern void sub_8030258(); extern void sub_80302A8(); -extern void GotoMakuhitaFallbackState(); -extern void UpdateMakuhitaDialogue(); +extern u32 sub_80303AC(u8); +extern s16 sub_8030418(void); +extern void sub_8030480(void); +extern void sub_80304C8(); +extern void sub_803053C(void); +extern s32 sub_8030668(void); +extern u8 sub_80306A4(void); +extern bool8 sub_8097504(s16); +extern s16 sub_80A2668(u32 r0); +extern s16 sub_80A26CC(s16 r0); +extern u8 sub_80A2740(s32 r0); -void UpdateMakuhitaState(s32); +extern void DrawDojoCourseList(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern bool8 IsMazeCompleted(s32); +extern void PlayMenuSoundEffect(u32); +extern void PlaySound(u16); +extern void PrintColoredPokeNameToBuffer(u8 *, struct PokemonStruct *, s32); +extern void PrintYellowDungeonNametoBuffer(u8 *, struct DungeonLocation *); + +void GotoMakuhitaFallbackState(); +void DrawMakuhitaMainMenu(void); void sub_802FF1C(); +void UpdateMakuhitaDialogue(); +void UpdateMakuhitaState(s32); u32 CreateMakuhitaShop(u32 param_1) { - char *monName; - struct OpenedFile *faceFile; - u32 initialState; + char *monName; + struct OpenedFile *faceFile; + u32 initialState; - ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); - gUnknown_203B318 = MemoryAlloc(sizeof(struct unkStruct_203B318), 8); - gUnknown_203B318->unk10 = -1; - gUnknown_203B318->unk0 = param_1; + ResetUnusedInputStruct(); + sub_800641C(0, 1, 1); + gUnknown_203B318 = MemoryAlloc(sizeof(struct unkStruct_203B318), 8); + gUnknown_203B318->unk10 = -1; + gUnknown_203B318->unk0 = param_1; - switch (param_1) { - case 0: - initialState = 0; - gUnknown_203B318->unk4 = 0; - break; - case 1: - initialState = 7; - gUnknown_203B318->unk4 = 0; - break; - case 2: - initialState = 6; - gUnknown_203B318->unk4 = 0; - break; - case 3: - initialState = 8; - gUnknown_203B318->unk4 = 0; - break; - case 4: - initialState = 0; - gUnknown_203B318->unk4 = 1; - break; - case 5: - initialState = 7; - gUnknown_203B318->unk4 = 1; - break; - case 6: - initialState = 6; - gUnknown_203B318->unk4 = 1; - break; - case 7: - default: - initialState = 8; - gUnknown_203B318->unk4 = 1; - break; - } + switch (param_1) { + case 0: + initialState = 0; + gUnknown_203B318->unk4 = 0; + break; + case 1: + initialState = 7; + gUnknown_203B318->unk4 = 0; + break; + case 2: + initialState = 6; + gUnknown_203B318->unk4 = 0; + break; + case 3: + initialState = 8; + gUnknown_203B318->unk4 = 0; + break; + case 4: + initialState = 0; + gUnknown_203B318->unk4 = 1; + break; + case 5: + initialState = 7; + gUnknown_203B318->unk4 = 1; + break; + case 6: + initialState = 6; + gUnknown_203B318->unk4 = 1; + break; + case 7: + default: + initialState = 8; + gUnknown_203B318->unk4 = 1; + break; + } - if (gUnknown_203B318->unk4 == 1) - gUnknown_203B318->unk68 = NULL; - else - gUnknown_203B318->unk68 = &gUnknown_203B318->faceFile; + if (gUnknown_203B318->unk4 == 1) + gUnknown_203B318->unk68 = NULL; + else + gUnknown_203B318->unk68 = &gUnknown_203B318->faceFile; - CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_MAKUHITA); - CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, MONSTER_MAKUHITA); - monName = GetMonSpecies(MONSTER_MAKUHITA); - strcpy(gUnknown_202E1C8 - 0x50, monName); + CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_MAKUHITA); + CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, MONSTER_MAKUHITA); + monName = GetMonSpecies(MONSTER_MAKUHITA); + strcpy(gUnknown_202E1C8 - 0x50, monName); - faceFile = GetDialogueSpriteDataPtr(MONSTER_MAKUHITA); - gUnknown_203B318->faceFile = faceFile; - gUnknown_203B318->faceData = faceFile->data; - gUnknown_203B318->unk64 = 0; - gUnknown_203B318->unk65 = 0; - gUnknown_203B318->unk66 = 0; - gUnknown_203B318->unk60 = 2; - gUnknown_203B318->unk62 = 8; - UpdateMakuhitaState(initialState); - return 1; + faceFile = GetDialogueSpriteDataPtr(MONSTER_MAKUHITA); + gUnknown_203B318->faceFile = faceFile; + gUnknown_203B318->faceData = faceFile->data; + gUnknown_203B318->unk64 = 0; + gUnknown_203B318->unk65 = 0; + gUnknown_203B318->unk66 = 0; + gUnknown_203B318->unk60 = 2; + gUnknown_203B318->unk62 = 8; + UpdateMakuhitaState(initialState); + return 1; } u32 sub_802FE58(void) { - switch (gUnknown_203B318->state) { - case 0: - case 1: - sub_8030208(); - break; - case 4: - sub_8030258(); - break; - case 11: - sub_80302A8(); - break; - case 13: - return 3; - default: - GotoMakuhitaFallbackState(); - break; - } - return 0; + switch (gUnknown_203B318->state) { + case 0: + case 1: + sub_8030208(); + break; + case 4: + sub_8030258(); + break; + case 11: + sub_80302A8(); + break; + case 13: + return 3; + default: + GotoMakuhitaFallbackState(); + break; + } + return 0; } s16 sub_802FED0(void) @@ -174,3 +236,359 @@ void sub_802FF1C(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B318->unk6C, 1, 1); } + +void UpdateMakuhitaDialogue(void) +{ + struct DungeonLocation dLoc; + + switch (gUnknown_203B318->state) { + case 0: + DrawMakuhitaMainMenu(); + sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][0], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); + break; + case 1: + sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][1], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); + break; + case 2: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][2], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 3: + gUnknown_203B318->fallbackState = 4; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][3], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 4: + sub_80302E8(3, NULL, 10); + break; + case 5: + gUnknown_203B318->fallbackState = 13; + dLoc.id = sub_80A2740(gUnknown_203B318->unk10); + dLoc.floor = 1; + PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, &dLoc); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][4], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 7: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][6], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 6: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][5], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 8: + gUnknown_203B318->fallbackState = 9; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][7], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 9: + PrintColoredPokeNameToBuffer(gPlayerName, GetPlayerPokemonStruct(), COLOR_YELLOW); + gUnknown_203B318->fallbackState = 11; + PlaySound(0xCB); + sub_80141B4(gMakuhitaDojoBonslyDoll, 0, 0, 0x101); + break; + case 10: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][8], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 11: + sub_801B60C(1, ITEM_GINSENG, 1); + break; + case 12: + gUnknown_203B318->fallbackState = 1; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][9], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 13: + return; + } +} + +void DrawMakuhitaMainMenu(void) { + + s32 loopMax; + + gUnknown_203B318->menuAction = 2; + loopMax = 0; + gUnknown_203B318->unk18[loopMax].text = gMakuhitaDojoGoTrain; + gUnknown_203B318->unk18[loopMax].menuAction = 2; + if (sub_80306A4()) { + gUnknown_203B318->unk18[loopMax].menuAction = -1; + gUnknown_203B318->menuAction = 1; + } + loopMax += 1; + gUnknown_203B318->unk18[loopMax].text = *gUnknown_80D4970; + gUnknown_203B318->unk18[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B318->unk18[loopMax].text = *gUnknown_80D4934; + gUnknown_203B318->unk18[loopMax].menuAction = 1; + loopMax += 1; + gUnknown_203B318->unk18[loopMax].text = NULL; + gUnknown_203B318->unk18[loopMax].menuAction = 1; +} + +void sub_8030208(void) +{ + s32 menuAction; + if (sub_80144A4(&menuAction) == 0) { + gUnknown_203B318->menuAction = menuAction; + + switch (menuAction) { + case 2: + UpdateMakuhitaState(3); + break; + case 3: + UpdateMakuhitaState(12); + break; + case 1: + UpdateMakuhitaState(2); + break; + } + } +} + +void sub_8030258(void) +{ + switch (sub_80303AC(1)) { + case 3: + gUnknown_203B318->unk10 = sub_8030418(); + sub_8030480(); + UpdateMakuhitaState(5); + break; + case 2: + sub_8030480(); + gUnknown_203B318->unk10 = -1; + UpdateMakuhitaState(1); + break; + case 0: + case 1: + break; + } +} + +void sub_80302A8(void) +{ + switch (sub_801B6AC()) { + case 2: + case 3: + sub_801B72C(); + UpdateMakuhitaState(0xA); + break; + case 0: + case 1: + break; + } +} + +void GotoMakuhitaFallbackState(void) +{ + s32 temp; + if (sub_80144A4(&temp) == 0) + UpdateMakuhitaState(gUnknown_203B318->fallbackState); +} + +bool8 sub_80302E8(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) +{ + if (sub_80306A4()) + return FALSE; + + if (gUnknown_203B31C == NULL) + gUnknown_203B31C = MemoryAlloc(sizeof(struct unkStruct_203B31C), 8); + + gUnknown_203B31C->unk64 = param_1; + gUnknown_203B31C->unk68 = &gUnknown_203B31C->unk6C[param_1]; + sub_8006518(gUnknown_203B31C->unk6C); + gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64] = gUnknown_80E0804; + gUnknown_203B31C->unk68->unk14 = gUnknown_203B31C->unkCC; + + if (param_2 != NULL) + gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unk8 = *param_2; + + sub_8012D08(gUnknown_203B31C->unk68, param_3); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B31C->unk6C, 1, 1); + sub_8013818(&gUnknown_203B31C->input, sub_8030668(), param_3, param_1); + sub_80304C8(); + DrawDojoCourseList(); + return TRUE; +} + +u32 sub_80303AC(u8 param_1) +{ + if (param_1 == 0) { + sub_8013660(&gUnknown_203B31C->input); + return 0; + } + + switch (GetKeyPress(&gUnknown_203B31C->input)) { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + default: + if (sub_80138B8(&gUnknown_203B31C->input, 1)) { + sub_80304C8(); + DrawDojoCourseList(); + return 1; + } + else + return 0; + } +} + +s16 sub_8030418(void) +{ + return gUnknown_203B31C->unk0[(gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C) + gUnknown_203B31C->input.menuIndex]; +} + +void sub_8030444(u8 r0) +{ + gUnknown_203B31C->input.unk22 = sub_8030668(); + sub_8013984(&gUnknown_203B31C->input); + sub_80304C8(); + DrawDojoCourseList(); + if (r0) + AddMenuCursorSprite(&gUnknown_203B31C->input); +} + +void sub_8030480(void) +{ + if (gUnknown_203B31C != NULL) { + gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64] = gUnknown_80E07EC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B31C->unk6C, 1, 1); + MemoryFree(gUnknown_203B31C); + gUnknown_203B31C = NULL; + } +} + +#ifdef NONMATCHING +void sub_80304C8(void) +{ + s16 test; + + gUnknown_203B31C->unkCC[0] = 1; + gUnknown_203B31C->unkCC[1] = 0; + gUnknown_203B31C->unkCC[2] = 8; + gUnknown_203B31C->unkCC[3] = 0; + + test = sub_80095E4(gUnknown_203B31C->input.unk1A, 12) + 2; + gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unkE = test; + gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unk10 = test + 2; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B31C->unk6C, 1, 1); +} +#else +NAKED +void sub_80304C8(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _08030538\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xCC\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xCD\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xCE\n" + "\tmovs r1, 0x8\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xCF\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x4A\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x64]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x7A\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x64]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x7C\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x6C\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08030538: .4byte gUnknown_203B31C"); +} +#endif // NONMATCHING + +void DrawDojoCourseList(void) +{ + u8 dungeonIndex; + s32 mazeIndex; + s32 y; + s32 iVar6; + u32 color; + s32 index; + u8 buffer[256]; + + sub_8008C54(gUnknown_203B31C->unk64); + sub_80073B8(gUnknown_203B31C->unk64); + xxx_call_draw_string(10, 0, gMakuhitaDojoHeader,gUnknown_203B31C->unk64, 0); // Courses + sub_8012BC4(gUnknown_203B31C->unkCC[2] * 8 + 4, 0, gUnknown_203B31C->input.unk1E + 1, 2, 7, gUnknown_203B31C->unk64); + + for (index = 0; index < gUnknown_203B31C->input.unk1A; index++) { + iVar6 = gUnknown_203B31C->unk0[gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C + index]; + dungeonIndex = sub_80A2740(iVar6); + + mazeIndex = sub_80A2668(iVar6); + + y = sub_8013800(&gUnknown_203B31C->input, index); + color = COLOR_WHITE_2; // COLOR_WHITE again? + if (IsMazeCompleted(mazeIndex)) { + xxx_call_draw_string(8, y, gUnknown_80E0824, gUnknown_203B31C->unk64, 0); // Draw Star symbol + color = COLOR_GREEN; + } + sprintfStatic(buffer, gMakuhitaCoursePlaceholder, color, GetDungeonName1(dungeonIndex)); // "#c%c%s#r" + xxx_call_draw_string(0x10, y, buffer, gUnknown_203B31C->unk64, 0); + } + sub_80073E0(gUnknown_203B31C->unk64); +} + +s32 sub_8030668(void) +{ + s32 index; + s32 counter; + + counter = 0; + + for (index = 0; index < NUM_DUNGEON_MAZE; index++) { + if (sub_8097504(index)) { + gUnknown_203B31C->unk0[counter] = sub_80A26CC(index); + counter++; + } + } + return counter; +} + +bool8 sub_80306A4(void) +{ + return FALSE; +} \ No newline at end of file diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c deleted file mode 100644 index 9e1340567..000000000 --- a/src/makuhita_dojo_1.c +++ /dev/null @@ -1,435 +0,0 @@ -#include "global.h" -#include "constants/colors.h" -#include "constants/input.h" -#include "code_800D090.h" -#include "dungeon.h" -#include "input.h" -#include "memory.h" -#include "text.h" -#include "menu.h" -#include "makuhita_dojo.h" -#include "menu_input.h" - -extern struct unkStruct_203B31C *gUnknown_203B31C; -extern struct unkStruct_203B318 *gUnknown_203B318; -extern u8 gAvailablePokemonNames[]; -extern u8 gPlayerName[]; - -static const u8 makuhita_dojo_fill[] = "pksdir0"; - -const struct UnkTextStruct2 gUnknown_80E07EC = { - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; -const struct UnkTextStruct2 gUnknown_80E0804 = { - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x02, - 0x0E, 0x0E, - 0x0E, 0x00, - NULL -}; - -const u8 gMakuhitaDojoHeader[] = "Courses"; -ALIGNED(4) const u8 gUnknown_80E0824[] = _("{STAR_BULLET}"); -ALIGNED(4) const u8 gMakuhitaCoursePlaceholder[] = _("{COLOR_2}%c%s{END_COLOR_TEXT_2}"); -static const u8 makuhita_dojo_fill2[] = "pksdir0"; - -extern const u8 *gMakuhitaDialogue[2][10]; -extern u8 gMakuhitaDojoGoTrain[]; -extern const u8 gMakuhitaDojoBonslyDoll[]; -extern u8 *gUnknown_80D4934[]; -extern u8 *gUnknown_80D4970[]; - -extern void sub_80073B8(u32); -extern void sub_80073E0(u32); -extern void sub_8008C54(u32); -extern u32 sub_80095E4(s16, u32); -extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); -extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); -extern s32 sub_80144A4(s32 *); -extern u32 sub_801B60C(u32, u8, u8); -extern u32 sub_801B6AC(void); -extern void sub_801B72C(void); -extern u32 sub_80303AC(u8); -extern s16 sub_8030418(void); -extern void sub_8030480(void); -extern void sub_80304C8(); -extern void sub_803053C(void); -extern s32 sub_8030668(void); -extern u8 sub_80306A4(void); -extern bool8 sub_8097504(s16); -extern s16 sub_80A2668(u32 r0); -extern s16 sub_80A26CC(s16 r0); -extern u8 sub_80A2740(s32 r0); - -extern void DrawDojoCourseList(void); -extern struct PokemonStruct *GetPlayerPokemonStruct(void); -extern bool8 IsMazeCompleted(s32); -extern void PlayMenuSoundEffect(u32); -extern void PlaySound(u16); -extern void PrintColoredPokeNameToBuffer(u8 *, struct PokemonStruct *, s32); -extern void PrintYellowDungeonNametoBuffer(u8 *, struct DungeonLocation *); - -void DrawMakuhitaMainMenu(void); -void UpdateMakuhitaState(s32); - -void UpdateMakuhitaDialogue(void) -{ - struct DungeonLocation dLoc; - - switch (gUnknown_203B318->state) { - case 0: - DrawMakuhitaMainMenu(); - sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][0], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); - break; - case 1: - sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][1], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); - break; - case 2: - gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][2], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 3: - gUnknown_203B318->fallbackState = 4; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][3], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 4: - sub_80302E8(3, NULL, 10); - break; - case 5: - gUnknown_203B318->fallbackState = 13; - dLoc.id = sub_80A2740(gUnknown_203B318->unk10); - dLoc.floor = 1; - PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, &dLoc); - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][4], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 7: - gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][6], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 6: - gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][5], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 8: - gUnknown_203B318->fallbackState = 9; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][7], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 9: - PrintColoredPokeNameToBuffer(gPlayerName, GetPlayerPokemonStruct(), COLOR_YELLOW); - gUnknown_203B318->fallbackState = 11; - PlaySound(0xCB); - sub_80141B4(gMakuhitaDojoBonslyDoll, 0, 0, 0x101); - break; - case 10: - gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][8], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 11: - sub_801B60C(1, ITEM_GINSENG, 1); - break; - case 12: - gUnknown_203B318->fallbackState = 1; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][9], 0, gUnknown_203B318->unk68, 0x10D); - break; - case 13: - return; - } -} - -void DrawMakuhitaMainMenu(void) { - - s32 loopMax; - - gUnknown_203B318->menuAction = 2; - loopMax = 0; - gUnknown_203B318->unk18[loopMax].text = gMakuhitaDojoGoTrain; - gUnknown_203B318->unk18[loopMax].menuAction = 2; - if (sub_80306A4()) { - gUnknown_203B318->unk18[loopMax].menuAction = -1; - gUnknown_203B318->menuAction = 1; - } - loopMax += 1; - gUnknown_203B318->unk18[loopMax].text = *gUnknown_80D4970; - gUnknown_203B318->unk18[loopMax].menuAction = 3; - loopMax += 1; - gUnknown_203B318->unk18[loopMax].text = *gUnknown_80D4934; - gUnknown_203B318->unk18[loopMax].menuAction = 1; - loopMax += 1; - gUnknown_203B318->unk18[loopMax].text = NULL; - gUnknown_203B318->unk18[loopMax].menuAction = 1; -} - -void sub_8030208(void) -{ - s32 menuAction; - if (sub_80144A4(&menuAction) == 0) { - gUnknown_203B318->menuAction = menuAction; - - switch (menuAction) { - case 2: - UpdateMakuhitaState(3); - break; - case 3: - UpdateMakuhitaState(12); - break; - case 1: - UpdateMakuhitaState(2); - break; - } - } -} - -void sub_8030258(void) -{ - switch (sub_80303AC(1)) { - case 3: - gUnknown_203B318->unk10 = sub_8030418(); - sub_8030480(); - UpdateMakuhitaState(5); - break; - case 2: - sub_8030480(); - gUnknown_203B318->unk10 = -1; - UpdateMakuhitaState(1); - break; - case 0: - case 1: - break; - } -} - -void sub_80302A8(void) -{ - switch (sub_801B6AC()) { - case 2: - case 3: - sub_801B72C(); - UpdateMakuhitaState(0xA); - break; - case 0: - case 1: - break; - } -} - -void GotoMakuhitaFallbackState(void) -{ - s32 temp; - if (sub_80144A4(&temp) == 0) - UpdateMakuhitaState(gUnknown_203B318->fallbackState); -} - -bool8 sub_80302E8(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) -{ - if (sub_80306A4()) - return FALSE; - - if (gUnknown_203B31C == NULL) - gUnknown_203B31C = MemoryAlloc(sizeof(struct unkStruct_203B31C), 8); - - gUnknown_203B31C->unk64 = param_1; - gUnknown_203B31C->unk68 = &gUnknown_203B31C->unk6C[param_1]; - sub_8006518(gUnknown_203B31C->unk6C); - gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64] = gUnknown_80E0804; - gUnknown_203B31C->unk68->unk14 = gUnknown_203B31C->unkCC; - - if (param_2 != NULL) - gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unk8 = *param_2; - - sub_8012D08(gUnknown_203B31C->unk68, param_3); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B31C->unk6C, 1, 1); - sub_8013818(&gUnknown_203B31C->input, sub_8030668(), param_3, param_1); - sub_80304C8(); - DrawDojoCourseList(); - return TRUE; -} - -u32 sub_80303AC(u8 param_1) -{ - if (param_1 == 0) { - sub_8013660(&gUnknown_203B31C->input); - return 0; - } - - switch (GetKeyPress(&gUnknown_203B31C->input)) { - case INPUT_B_BUTTON: - PlayMenuSoundEffect(1); - return 2; - case INPUT_A_BUTTON: - PlayMenuSoundEffect(0); - return 3; - default: - if (sub_80138B8(&gUnknown_203B31C->input, 1)) { - sub_80304C8(); - DrawDojoCourseList(); - return 1; - } - else - return 0; - } -} - -s16 sub_8030418(void) -{ - return gUnknown_203B31C->unk0[(gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C) + gUnknown_203B31C->input.menuIndex]; -} - -void sub_8030444(u8 r0) -{ - gUnknown_203B31C->input.unk22 = sub_8030668(); - sub_8013984(&gUnknown_203B31C->input); - sub_80304C8(); - DrawDojoCourseList(); - if (r0) - AddMenuCursorSprite(&gUnknown_203B31C->input); -} - -void sub_8030480(void) -{ - if (gUnknown_203B31C != NULL) { - gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64] = gUnknown_80E07EC; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B31C->unk6C, 1, 1); - MemoryFree(gUnknown_203B31C); - gUnknown_203B31C = NULL; - } -} - -#ifdef NONMATCHING -void sub_80304C8(void) -{ - s16 test; - - gUnknown_203B31C->unkCC[0] = 1; - gUnknown_203B31C->unkCC[1] = 0; - gUnknown_203B31C->unkCC[2] = 8; - gUnknown_203B31C->unkCC[3] = 0; - - test = sub_80095E4(gUnknown_203B31C->input.unk1A, 12) + 2; - gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unkE = test; - gUnknown_203B31C->unk6C[gUnknown_203B31C->unk64].unk10 = test + 2; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B31C->unk6C, 1, 1); -} -#else -NAKED -void sub_80304C8(void) -{ - asm_unified( - "\tpush {r4,lr}\n" - "\tldr r4, _08030538\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xCC\n" - "\tmovs r2, 0\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xCD\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xCE\n" - "\tmovs r1, 0x8\n" - "\tstrb r1, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0xCF\n" - "\tstrb r2, [r0]\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x4A\n" - "\tmovs r1, 0\n" - "\tldrsh r0, [r0, r1]\n" - "\tmovs r1, 0xC\n" - "\tbl sub_80095E4\n" - "\tadds r0, 0x2\n" - "\tlsls r0, 16\n" - "\tldr r2, [r4]\n" - "\tldr r3, [r2, 0x64]\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r3\n" - "\tlsls r1, 3\n" - "\tadds r1, r2, r1\n" - "\tadds r1, 0x7A\n" - "\tasrs r3, r0, 16\n" - "\tlsrs r0, 16\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r2, 0x64]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tlsls r0, 3\n" - "\tadds r2, r0\n" - "\tadds r3, 0x2\n" - "\tadds r2, 0x7C\n" - "\tstrh r3, [r2]\n" - "\tbl ResetUnusedInputStruct\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x6C\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0x1\n" - "\tbl sub_800641C\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08030538: .4byte gUnknown_203B31C"); -} -#endif // NONMATCHING - -void DrawDojoCourseList(void) -{ - u8 dungeonIndex; - s32 mazeIndex; - s32 y; - s32 iVar6; - u32 color; - s32 index; - u8 buffer[256]; - - sub_8008C54(gUnknown_203B31C->unk64); - sub_80073B8(gUnknown_203B31C->unk64); - xxx_call_draw_string(10, 0, gMakuhitaDojoHeader,gUnknown_203B31C->unk64, 0); // Courses - sub_8012BC4(gUnknown_203B31C->unkCC[2] * 8 + 4, 0, gUnknown_203B31C->input.unk1E + 1, 2, 7, gUnknown_203B31C->unk64); - - for (index = 0; index < gUnknown_203B31C->input.unk1A; index++) { - iVar6 = gUnknown_203B31C->unk0[gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C + index]; - dungeonIndex = sub_80A2740(iVar6); - - mazeIndex = sub_80A2668(iVar6); - - y = sub_8013800(&gUnknown_203B31C->input, index); - color = COLOR_WHITE_2; // COLOR_WHITE again? - if (IsMazeCompleted(mazeIndex)) { - xxx_call_draw_string(8, y, gUnknown_80E0824, gUnknown_203B31C->unk64, 0); // Draw Star symbol - color = COLOR_GREEN; - } - sprintfStatic(buffer, gMakuhitaCoursePlaceholder, color, GetDungeonName1(dungeonIndex)); // "#c%c%s#r" - xxx_call_draw_string(0x10, y, buffer, gUnknown_203B31C->unk64, 0); - } - sub_80073E0(gUnknown_203B31C->unk64); -} - -s32 sub_8030668(void) -{ - s32 index; - s32 counter; - - counter = 0; - - for (index = 0; index < NUM_DUNGEON_MAZE; index++) { - if (sub_8097504(index)) { - gUnknown_203B31C->unk0[counter] = sub_80A26CC(index); - counter++; - } - } - return counter; -} - -bool8 sub_80306A4(void) -{ - return FALSE; -} From e68a5b70be5c69a1aa663ffb81198d5d2b86251d Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Fri, 4 Aug 2023 01:05:54 -0400 Subject: [PATCH 3/6] Clean/document some Makuhita Dojo --- include/makuhita_dojo.h | 7 ++++ src/makuhita_dojo.c | 93 +++++++++++++++++++++-------------------- 2 files changed, 54 insertions(+), 46 deletions(-) diff --git a/include/makuhita_dojo.h b/include/makuhita_dojo.h index dd2e0c038..fc295737c 100644 --- a/include/makuhita_dojo.h +++ b/include/makuhita_dojo.h @@ -41,6 +41,13 @@ struct unkStruct_203B31C u8 unkCC[4]; }; +void DestroyMakuhitaShop(void); + +u32 sub_802FE58(void); +s16 sub_802FED0(void); bool8 sub_80302E8(s32, struct UnkTextStruct2_sub *, u32); +u32 sub_80303AC(bool8); +s16 sub_8030418(void); +void sub_8030480(void); #endif // GUARD_MAKUHITA_DOJO_H \ No newline at end of file diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c index a50f4a2d3..e8cdef962 100644 --- a/src/makuhita_dojo.c +++ b/src/makuhita_dojo.c @@ -74,22 +74,12 @@ extern s32 sub_80144A4(s32 *); extern u32 sub_801B60C(u32, u8, u8); extern u32 sub_801B6AC(void); extern void sub_801B72C(void); -extern void sub_8030208(); -extern void sub_8030258(); -extern void sub_80302A8(); -extern u32 sub_80303AC(u8); -extern s16 sub_8030418(void); -extern void sub_8030480(void); -extern void sub_80304C8(); extern void sub_803053C(void); -extern s32 sub_8030668(void); -extern u8 sub_80306A4(void); extern bool8 sub_8097504(s16); extern s16 sub_80A2668(u32 r0); extern s16 sub_80A26CC(s16 r0); extern u8 sub_80A2740(s32 r0); -extern void DrawDojoCourseList(void); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern bool8 IsMazeCompleted(s32); extern void PlayMenuSoundEffect(u32); @@ -97,11 +87,19 @@ extern void PlaySound(u16); extern void PrintColoredPokeNameToBuffer(u8 *, struct PokemonStruct *, s32); extern void PrintYellowDungeonNametoBuffer(u8 *, struct DungeonLocation *); -void GotoMakuhitaFallbackState(); -void DrawMakuhitaMainMenu(void); -void sub_802FF1C(); -void UpdateMakuhitaDialogue(); -void UpdateMakuhitaState(s32); +void MakuhitaDojo_DrawCourseList(void); +void MakuhitaDojo_DrawMainMenu(void); +void MakuhitaDojo_GoToFallbackState(void); +bool8 MakuhitaDojo_ReturnFalse(void); +void MakuhitaDojo_SetState(s32); +void MakuhitaDojo_UpdateDialogue(void); + +void sub_802FF1C(void); +void sub_8030208(void); +void sub_8030258(void); +void sub_80302A8(void); +void sub_80304C8(void); +s32 sub_8030668(void); u32 CreateMakuhitaShop(u32 param_1) { @@ -110,7 +108,7 @@ u32 CreateMakuhitaShop(u32 param_1) u32 initialState; ResetUnusedInputStruct(); - sub_800641C(0, 1, 1); + sub_800641C(NULL, 1, 1); gUnknown_203B318 = MemoryAlloc(sizeof(struct unkStruct_203B318), 8); gUnknown_203B318->unk10 = -1; gUnknown_203B318->unk0 = param_1; @@ -169,7 +167,7 @@ u32 CreateMakuhitaShop(u32 param_1) gUnknown_203B318->unk66 = 0; gUnknown_203B318->unk60 = 2; gUnknown_203B318->unk62 = 8; - UpdateMakuhitaState(initialState); + MakuhitaDojo_SetState(initialState); return 1; } @@ -189,7 +187,7 @@ u32 sub_802FE58(void) case 13: return 3; default: - GotoMakuhitaFallbackState(); + MakuhitaDojo_GoToFallbackState(); break; } return 0; @@ -209,11 +207,11 @@ void DestroyMakuhitaShop(void) } } -void UpdateMakuhitaState(s32 newState) +void MakuhitaDojo_SetState(s32 newState) { gUnknown_203B318->state = newState; sub_802FF1C(); - UpdateMakuhitaDialogue(); + MakuhitaDojo_UpdateDialogue(); } void sub_802FF1C(void) @@ -237,13 +235,13 @@ void sub_802FF1C(void) sub_800641C(gUnknown_203B318->unk6C, 1, 1); } -void UpdateMakuhitaDialogue(void) +void MakuhitaDojo_UpdateDialogue(void) { struct DungeonLocation dLoc; switch (gUnknown_203B318->state) { case 0: - DrawMakuhitaMainMenu(); + MakuhitaDojo_DrawMainMenu(); sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][0], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); break; case 1: @@ -301,18 +299,20 @@ void UpdateMakuhitaDialogue(void) } } -void DrawMakuhitaMainMenu(void) { - +void MakuhitaDojo_DrawMainMenu(void) +{ s32 loopMax; gUnknown_203B318->menuAction = 2; loopMax = 0; gUnknown_203B318->unk18[loopMax].text = gMakuhitaDojoGoTrain; gUnknown_203B318->unk18[loopMax].menuAction = 2; - if (sub_80306A4()) { + + if (MakuhitaDojo_ReturnFalse()) { gUnknown_203B318->unk18[loopMax].menuAction = -1; gUnknown_203B318->menuAction = 1; } + loopMax += 1; gUnknown_203B318->unk18[loopMax].text = *gUnknown_80D4970; gUnknown_203B318->unk18[loopMax].menuAction = 3; @@ -332,13 +332,13 @@ void sub_8030208(void) switch (menuAction) { case 2: - UpdateMakuhitaState(3); + MakuhitaDojo_SetState(3); break; case 3: - UpdateMakuhitaState(12); + MakuhitaDojo_SetState(12); break; case 1: - UpdateMakuhitaState(2); + MakuhitaDojo_SetState(2); break; } } @@ -346,16 +346,16 @@ void sub_8030208(void) void sub_8030258(void) { - switch (sub_80303AC(1)) { + switch (sub_80303AC(TRUE)) { case 3: gUnknown_203B318->unk10 = sub_8030418(); sub_8030480(); - UpdateMakuhitaState(5); + MakuhitaDojo_SetState(5); break; case 2: sub_8030480(); gUnknown_203B318->unk10 = -1; - UpdateMakuhitaState(1); + MakuhitaDojo_SetState(1); break; case 0: case 1: @@ -369,7 +369,7 @@ void sub_80302A8(void) case 2: case 3: sub_801B72C(); - UpdateMakuhitaState(0xA); + MakuhitaDojo_SetState(10); break; case 0: case 1: @@ -377,16 +377,16 @@ void sub_80302A8(void) } } -void GotoMakuhitaFallbackState(void) +void MakuhitaDojo_GoToFallbackState(void) { s32 temp; if (sub_80144A4(&temp) == 0) - UpdateMakuhitaState(gUnknown_203B318->fallbackState); + MakuhitaDojo_SetState(gUnknown_203B318->fallbackState); } bool8 sub_80302E8(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) { - if (sub_80306A4()) + if (MakuhitaDojo_ReturnFalse()) return FALSE; if (gUnknown_203B31C == NULL) @@ -406,13 +406,13 @@ bool8 sub_80302E8(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) sub_800641C(gUnknown_203B31C->unk6C, 1, 1); sub_8013818(&gUnknown_203B31C->input, sub_8030668(), param_3, param_1); sub_80304C8(); - DrawDojoCourseList(); + MakuhitaDojo_DrawCourseList(); return TRUE; } -u32 sub_80303AC(u8 param_1) +u32 sub_80303AC(bool8 param_1) { - if (param_1 == 0) { + if (param_1 == FALSE) { sub_8013660(&gUnknown_203B31C->input); return 0; } @@ -427,7 +427,7 @@ u32 sub_80303AC(u8 param_1) default: if (sub_80138B8(&gUnknown_203B31C->input, 1)) { sub_80304C8(); - DrawDojoCourseList(); + MakuhitaDojo_DrawCourseList(); return 1; } else @@ -440,14 +440,15 @@ s16 sub_8030418(void) return gUnknown_203B31C->unk0[(gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C) + gUnknown_203B31C->input.menuIndex]; } +// Unused? void sub_8030444(u8 r0) { gUnknown_203B31C->input.unk22 = sub_8030668(); sub_8013984(&gUnknown_203B31C->input); sub_80304C8(); - DrawDojoCourseList(); + MakuhitaDojo_DrawCourseList(); if (r0) - AddMenuCursorSprite(&gUnknown_203B31C->input); + AddMenuCursorSprite(&gUnknown_203B31C->input); } void sub_8030480(void) @@ -539,7 +540,7 @@ void sub_80304C8(void) } #endif // NONMATCHING -void DrawDojoCourseList(void) +void MakuhitaDojo_DrawCourseList(void) { u8 dungeonIndex; s32 mazeIndex; @@ -551,8 +552,8 @@ void DrawDojoCourseList(void) sub_8008C54(gUnknown_203B31C->unk64); sub_80073B8(gUnknown_203B31C->unk64); - xxx_call_draw_string(10, 0, gMakuhitaDojoHeader,gUnknown_203B31C->unk64, 0); // Courses - sub_8012BC4(gUnknown_203B31C->unkCC[2] * 8 + 4, 0, gUnknown_203B31C->input.unk1E + 1, 2, 7, gUnknown_203B31C->unk64); + xxx_call_draw_string(10, 0, gMakuhitaDojoHeader, gUnknown_203B31C->unk64, 0); // Courses + sub_8012BC4((gUnknown_203B31C->unkCC[2] * 8) + 4, 0, gUnknown_203B31C->input.unk1E + 1, 2, 7, gUnknown_203B31C->unk64); for (index = 0; index < gUnknown_203B31C->input.unk1A; index++) { iVar6 = gUnknown_203B31C->unk0[gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C + index]; @@ -567,7 +568,7 @@ void DrawDojoCourseList(void) color = COLOR_GREEN; } sprintfStatic(buffer, gMakuhitaCoursePlaceholder, color, GetDungeonName1(dungeonIndex)); // "#c%c%s#r" - xxx_call_draw_string(0x10, y, buffer, gUnknown_203B31C->unk64, 0); + xxx_call_draw_string(16, y, buffer, gUnknown_203B31C->unk64, 0); } sub_80073E0(gUnknown_203B31C->unk64); } @@ -588,7 +589,7 @@ s32 sub_8030668(void) return counter; } -bool8 sub_80306A4(void) +bool8 MakuhitaDojo_ReturnFalse(void) { return FALSE; } \ No newline at end of file From 0290a4517232e08fea7e1edf8788c85ebe41c5c6 Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Fri, 4 Aug 2023 01:08:38 -0400 Subject: [PATCH 4/6] Forgor these two funcs --- asm/code_8098BDC.s | 12 ++++++------ data/data_8115F5C.s | 6 +++--- include/makuhita_dojo.h | 3 ++- src/makuhita_dojo.c | 4 ++-- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index d1a50d3b0..dc7a38b23 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -6044,7 +6044,7 @@ _0809BFFC: ands r4, r0 bl sub_809B294 adds r0, r4, 0 - bl CreateMakuhitaShop + bl MakuhitaDojo_New lsls r0, 24 cmp r0, 0 beq _0809C032 @@ -6068,7 +6068,7 @@ _0809C046: lsls r0, 16 asrs r0, 16 str r0, [r1] - bl DestroyMakuhitaShop + bl MakuhitaDojo_Delete b _0809C392 _0809C05E: ldr r0, [r6] @@ -6078,7 +6078,7 @@ _0809C05E: movs r1, 0x1 negs r1, r1 str r1, [r0] - bl DestroyMakuhitaShop + bl MakuhitaDojo_Delete b _0809C392 _0809C072: movs r4, 0x1 @@ -6091,7 +6091,7 @@ _0809C072: _0809C082: bl sub_809B294 adds r0, r4, 0 - bl CreateMakuhitaShop + bl MakuhitaDojo_New lsls r0, 24 cmp r0, 0 beq _0809C0A8 @@ -6125,7 +6125,7 @@ _0809C0B8: _0809C0C8: bl sub_809B294 adds r0, r4, 0 - bl CreateMakuhitaShop + bl MakuhitaDojo_New lsls r0, 24 cmp r0, 0 beq _0809C0F0 @@ -6156,7 +6156,7 @@ _0809C0FC: _0809C10C: bl sub_809B294 adds r0, r4, 0 - bl CreateMakuhitaShop + bl MakuhitaDojo_New lsls r0, 24 cmp r0, 0 beq _0809C134 diff --git a/data/data_8115F5C.s b/data/data_8115F5C.s index daf3084b8..99f5949ca 100644 --- a/data/data_8115F5C.s +++ b/data/data_8115F5C.s @@ -224,21 +224,21 @@ gUnknown_8116288: @ 8116288 gUnknown_8116298: @ 8116298 .byte 0x01, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 - .4byte DestroyMakuhitaShop + .4byte MakuhitaDojo_Delete .4byte sub_802FE58 .global gUnknown_81162A8 gUnknown_81162A8: @ 81162A8 .byte 0x01, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 - .4byte DestroyMakuhitaShop + .4byte MakuhitaDojo_Delete .4byte sub_802FE58 .global gUnknown_81162B8 gUnknown_81162B8: @ 81162B8 .byte 0x01, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 - .4byte DestroyMakuhitaShop + .4byte MakuhitaDojo_Delete .4byte sub_802FE58 .global gUnknown_81162C8 diff --git a/include/makuhita_dojo.h b/include/makuhita_dojo.h index fc295737c..4b90db13a 100644 --- a/include/makuhita_dojo.h +++ b/include/makuhita_dojo.h @@ -41,7 +41,8 @@ struct unkStruct_203B31C u8 unkCC[4]; }; -void DestroyMakuhitaShop(void); +u32 MakuhitaDojo_New(u32); +void MakuhitaDojo_Delete(void); u32 sub_802FE58(void); s16 sub_802FED0(void); diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c index e8cdef962..3b6d4b5a8 100644 --- a/src/makuhita_dojo.c +++ b/src/makuhita_dojo.c @@ -101,7 +101,7 @@ void sub_80302A8(void); void sub_80304C8(void); s32 sub_8030668(void); -u32 CreateMakuhitaShop(u32 param_1) +u32 MakuhitaDojo_New(u32 param_1) { char *monName; struct OpenedFile *faceFile; @@ -198,7 +198,7 @@ s16 sub_802FED0(void) return gUnknown_203B318->unk10; } -void DestroyMakuhitaShop(void) +void MakuhitaDojo_Delete(void) { if (gUnknown_203B318 != NULL) { CloseFile(gUnknown_203B318->faceFile); From 530c7ddb4b139fc49507db68f25d9b30ca488511 Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Fri, 4 Aug 2023 22:16:15 -0400 Subject: [PATCH 5/6] Address review with MakuhitaDojoMode Kecleon/Gulpin/Felicity/Kangaskhan all have modes and I'll add them soon --- include/makuhita_dojo.h | 19 ++++++++++--- src/makuhita_dojo.c | 60 ++++++++++++++++++++--------------------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/include/makuhita_dojo.h b/include/makuhita_dojo.h index 4b90db13a..032134f6a 100644 --- a/include/makuhita_dojo.h +++ b/include/makuhita_dojo.h @@ -10,8 +10,8 @@ // size: 0xCC struct unkStruct_203B318 { - u32 unk0; - u32 unk4; + u32 mode; // Corresponds to the enum: MakuhitaDojoMode + bool32 isAsleep; /* 0x8 */ s32 state; /* 0xC */ s32 fallbackState; s16 unk10; @@ -41,7 +41,8 @@ struct unkStruct_203B31C u8 unkCC[4]; }; -u32 MakuhitaDojo_New(u32); +// mode corresponds to the enum: MakuhitaDojoMode +u32 MakuhitaDojo_New(u32 mode); void MakuhitaDojo_Delete(void); u32 sub_802FE58(void); @@ -51,4 +52,16 @@ u32 sub_80303AC(bool8); s16 sub_8030418(void); void sub_8030480(void); +enum MakuhitaDojoMode +{ + MAKUHITA_DOJO_MODE_UNK0_AWAKE = 0, + MAKUHITA_DOJO_MODE_UNK1_AWAKE = 1, + MAKUHITA_DOJO_MODE_UNK2_AWAKE = 2, + MAKUHITA_DOJO_MODE_UNK3_AWAKE = 3, + MAKUHITA_DOJO_MODE_UNK4_ASLEEP = 4, + MAKUHITA_DOJO_MODE_UNK5_ASLEEP = 5, + MAKUHITA_DOJO_MODE_UNK6_ASLEEP = 6, + MAKUHITA_DOJO_MODE_UNK7_ASLEEP = 7, +}; + #endif // GUARD_MAKUHITA_DOJO_H \ No newline at end of file diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c index 3b6d4b5a8..64ffa4089 100644 --- a/src/makuhita_dojo.c +++ b/src/makuhita_dojo.c @@ -101,7 +101,7 @@ void sub_80302A8(void); void sub_80304C8(void); s32 sub_8030668(void); -u32 MakuhitaDojo_New(u32 param_1) +u32 MakuhitaDojo_New(u32 mode) { char *monName; struct OpenedFile *faceFile; @@ -111,45 +111,45 @@ u32 MakuhitaDojo_New(u32 param_1) sub_800641C(NULL, 1, 1); gUnknown_203B318 = MemoryAlloc(sizeof(struct unkStruct_203B318), 8); gUnknown_203B318->unk10 = -1; - gUnknown_203B318->unk0 = param_1; + gUnknown_203B318->mode = mode; - switch (param_1) { - case 0: + switch (mode) { + case MAKUHITA_DOJO_MODE_UNK0_AWAKE: initialState = 0; - gUnknown_203B318->unk4 = 0; + gUnknown_203B318->isAsleep = FALSE; break; - case 1: + case MAKUHITA_DOJO_MODE_UNK1_AWAKE: initialState = 7; - gUnknown_203B318->unk4 = 0; + gUnknown_203B318->isAsleep = FALSE; break; - case 2: + case MAKUHITA_DOJO_MODE_UNK2_AWAKE: initialState = 6; - gUnknown_203B318->unk4 = 0; + gUnknown_203B318->isAsleep = FALSE; break; - case 3: + case MAKUHITA_DOJO_MODE_UNK3_AWAKE: initialState = 8; - gUnknown_203B318->unk4 = 0; + gUnknown_203B318->isAsleep = FALSE; break; - case 4: + case MAKUHITA_DOJO_MODE_UNK4_ASLEEP: initialState = 0; - gUnknown_203B318->unk4 = 1; + gUnknown_203B318->isAsleep = TRUE; break; - case 5: + case MAKUHITA_DOJO_MODE_UNK5_ASLEEP: initialState = 7; - gUnknown_203B318->unk4 = 1; + gUnknown_203B318->isAsleep = TRUE; break; - case 6: + case MAKUHITA_DOJO_MODE_UNK6_ASLEEP: initialState = 6; - gUnknown_203B318->unk4 = 1; + gUnknown_203B318->isAsleep = TRUE; break; - case 7: + case MAKUHITA_DOJO_MODE_UNK7_ASLEEP: default: initialState = 8; - gUnknown_203B318->unk4 = 1; + gUnknown_203B318->isAsleep = TRUE; break; } - if (gUnknown_203B318->unk4 == 1) + if (gUnknown_203B318->isAsleep == TRUE) gUnknown_203B318->unk68 = NULL; else gUnknown_203B318->unk68 = &gUnknown_203B318->faceFile; @@ -242,18 +242,18 @@ void MakuhitaDojo_UpdateDialogue(void) switch (gUnknown_203B318->state) { case 0: MakuhitaDojo_DrawMainMenu(); - sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][0], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); + sub_8014248(gMakuhitaDialogue[gUnknown_203B318->isAsleep][0], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); break; case 1: - sub_8014248(gMakuhitaDialogue[gUnknown_203B318->unk4][1], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); + sub_8014248(gMakuhitaDialogue[gUnknown_203B318->isAsleep][1], 0, gUnknown_203B318->menuAction, gUnknown_203B318->unk18, NULL, 4, 0, gUnknown_203B318->unk68, 12); break; case 2: gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][2], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][2], 0, gUnknown_203B318->unk68, 0x10D); break; case 3: gUnknown_203B318->fallbackState = 4; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][3], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][3], 0, gUnknown_203B318->unk68, 0x10D); break; case 4: sub_80302E8(3, NULL, 10); @@ -263,19 +263,19 @@ void MakuhitaDojo_UpdateDialogue(void) dLoc.id = sub_80A2740(gUnknown_203B318->unk10); dLoc.floor = 1; PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, &dLoc); - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][4], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][4], 0, gUnknown_203B318->unk68, 0x10D); break; case 7: gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][6], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][6], 0, gUnknown_203B318->unk68, 0x10D); break; case 6: gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][5], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][5], 0, gUnknown_203B318->unk68, 0x10D); break; case 8: gUnknown_203B318->fallbackState = 9; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][7], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][7], 0, gUnknown_203B318->unk68, 0x10D); break; case 9: PrintColoredPokeNameToBuffer(gPlayerName, GetPlayerPokemonStruct(), COLOR_YELLOW); @@ -285,14 +285,14 @@ void MakuhitaDojo_UpdateDialogue(void) break; case 10: gUnknown_203B318->fallbackState = 13; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][8], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][8], 0, gUnknown_203B318->unk68, 0x10D); break; case 11: sub_801B60C(1, ITEM_GINSENG, 1); break; case 12: gUnknown_203B318->fallbackState = 1; - sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->unk4][9], 0, gUnknown_203B318->unk68, 0x10D); + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][9], 0, gUnknown_203B318->unk68, 0x10D); break; case 13: return; From 62c1933a3e79c3447744519a73a720dc4002ef40 Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Sat, 5 Aug 2023 00:09:13 -0400 Subject: [PATCH 6/6] Add offsets --- include/makuhita_dojo.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/makuhita_dojo.h b/include/makuhita_dojo.h index 032134f6a..455680759 100644 --- a/include/makuhita_dojo.h +++ b/include/makuhita_dojo.h @@ -10,8 +10,8 @@ // size: 0xCC struct unkStruct_203B318 { - u32 mode; // Corresponds to the enum: MakuhitaDojoMode - bool32 isAsleep; + /* 0x0 */ u32 mode; // Corresponds to the enum: MakuhitaDojoMode + /* 0x4 */ bool32 isAsleep; /* 0x8 */ s32 state; /* 0xC */ s32 fallbackState; s16 unk10;