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/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/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 3bc460d39..455680759 100644 --- a/include/makuhita_dojo.h +++ b/include/makuhita_dojo.h @@ -1,8 +1,17 @@ +#ifndef GUARD_MAKUHITA_DOJO_H +#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 { - u32 unk0; - u32 unk4; + /* 0x0 */ u32 mode; // Corresponds to the enum: MakuhitaDojoMode + /* 0x4 */ bool32 isAsleep; /* 0x8 */ s32 state; /* 0xC */ s32 fallbackState; s16 unk10; @@ -21,3 +30,38 @@ 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]; +}; + +// mode corresponds to the enum: MakuhitaDojoMode +u32 MakuhitaDojo_New(u32 mode); +void MakuhitaDojo_Delete(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); + +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/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..cdfc9cede 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -142,8 +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); src/wonder_mail_6.o(.text); @@ -417,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..64ffa4089 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,163 @@ 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"; -extern void sub_8030208(); -extern void sub_8030258(); -extern void sub_80302A8(); -extern void GotoMakuhitaFallbackState(); -extern void UpdateMakuhitaDialogue(); +static const u8 makuhita_dojo_fill2[] = "pksdir0"; -void UpdateMakuhitaState(s32); -void sub_802FF1C(); +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 +}; -u32 CreateMakuhitaShop(u32 param_1) +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_803053C(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 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 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 MakuhitaDojo_New(u32 mode) { - 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(NULL, 1, 1); + gUnknown_203B318 = MemoryAlloc(sizeof(struct unkStruct_203B318), 8); + gUnknown_203B318->unk10 = -1; + gUnknown_203B318->mode = mode; - 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 (mode) { + case MAKUHITA_DOJO_MODE_UNK0_AWAKE: + initialState = 0; + gUnknown_203B318->isAsleep = FALSE; + break; + case MAKUHITA_DOJO_MODE_UNK1_AWAKE: + initialState = 7; + gUnknown_203B318->isAsleep = FALSE; + break; + case MAKUHITA_DOJO_MODE_UNK2_AWAKE: + initialState = 6; + gUnknown_203B318->isAsleep = FALSE; + break; + case MAKUHITA_DOJO_MODE_UNK3_AWAKE: + initialState = 8; + gUnknown_203B318->isAsleep = FALSE; + break; + case MAKUHITA_DOJO_MODE_UNK4_ASLEEP: + initialState = 0; + gUnknown_203B318->isAsleep = TRUE; + break; + case MAKUHITA_DOJO_MODE_UNK5_ASLEEP: + initialState = 7; + gUnknown_203B318->isAsleep = TRUE; + break; + case MAKUHITA_DOJO_MODE_UNK6_ASLEEP: + initialState = 6; + gUnknown_203B318->isAsleep = TRUE; + break; + case MAKUHITA_DOJO_MODE_UNK7_ASLEEP: + default: + initialState = 8; + gUnknown_203B318->isAsleep = TRUE; + break; + } - if (gUnknown_203B318->unk4 == 1) - gUnknown_203B318->unk68 = NULL; - else - gUnknown_203B318->unk68 = &gUnknown_203B318->faceFile; + if (gUnknown_203B318->isAsleep == TRUE) + 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; + MakuhitaDojo_SetState(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: + MakuhitaDojo_GoToFallbackState(); + break; + } + return 0; } s16 sub_802FED0(void) @@ -138,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); @@ -147,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) @@ -174,3 +234,362 @@ void sub_802FF1C(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B318->unk6C, 1, 1); } + +void MakuhitaDojo_UpdateDialogue(void) +{ + struct DungeonLocation dLoc; + + switch (gUnknown_203B318->state) { + case 0: + MakuhitaDojo_DrawMainMenu(); + 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->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->isAsleep][2], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 3: + gUnknown_203B318->fallbackState = 4; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][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->isAsleep][4], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 7: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][6], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 6: + gUnknown_203B318->fallbackState = 13; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][5], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 8: + gUnknown_203B318->fallbackState = 9; + sub_80141B4(gMakuhitaDialogue[gUnknown_203B318->isAsleep][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->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->isAsleep][9], 0, gUnknown_203B318->unk68, 0x10D); + break; + case 13: + return; + } +} + +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 (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; + 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: + MakuhitaDojo_SetState(3); + break; + case 3: + MakuhitaDojo_SetState(12); + break; + case 1: + MakuhitaDojo_SetState(2); + break; + } + } +} + +void sub_8030258(void) +{ + switch (sub_80303AC(TRUE)) { + case 3: + gUnknown_203B318->unk10 = sub_8030418(); + sub_8030480(); + MakuhitaDojo_SetState(5); + break; + case 2: + sub_8030480(); + gUnknown_203B318->unk10 = -1; + MakuhitaDojo_SetState(1); + break; + case 0: + case 1: + break; + } +} + +void sub_80302A8(void) +{ + switch (sub_801B6AC()) { + case 2: + case 3: + sub_801B72C(); + MakuhitaDojo_SetState(10); + break; + case 0: + case 1: + break; + } +} + +void MakuhitaDojo_GoToFallbackState(void) +{ + s32 temp; + if (sub_80144A4(&temp) == 0) + MakuhitaDojo_SetState(gUnknown_203B318->fallbackState); +} + +bool8 sub_80302E8(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) +{ + if (MakuhitaDojo_ReturnFalse()) + 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(); + MakuhitaDojo_DrawCourseList(); + return TRUE; +} + +u32 sub_80303AC(bool8 param_1) +{ + if (param_1 == FALSE) { + 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(); + MakuhitaDojo_DrawCourseList(); + 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]; +} + +// Unused? +void sub_8030444(u8 r0) +{ + gUnknown_203B31C->input.unk22 = sub_8030668(); + sub_8013984(&gUnknown_203B31C->input); + sub_80304C8(); + MakuhitaDojo_DrawCourseList(); + 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 MakuhitaDojo_DrawCourseList(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(16, 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 MakuhitaDojo_ReturnFalse(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 485e945e8..000000000 --- a/src/makuhita_dojo_1.c +++ /dev/null @@ -1,351 +0,0 @@ -#include "global.h" -#include "constants/colors.h" -#include "constants/dungeon.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" - -// 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; - -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 u8 gMakuhitaDojoGoTrain[]; -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 s32 sub_80144A4(s32 *); -void UpdateMakuhitaState(s32); -extern u32 sub_801B6AC(void); -extern void sub_801B72C(void); -extern s16 sub_8030418(void); -extern u32 sub_80303AC(u8); -extern void sub_8030480(void); - - -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(int param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) -{ - if (sub_80306A4()) - return 0; - - 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 1; -} - -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; - } -} - -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"); -} - -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; -}