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] 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)