mirror of
https://github.com/pret/pmd-red.git
synced 2025-02-26 08:05:36 +00:00
Split makuhita_dojo.c
This commit is contained in:
parent
fe77b633a7
commit
551d8eb2fd
@ -24,5 +24,8 @@ struct unkStruct_203B230
|
||||
u32 sub_801B3C0(Item *);
|
||||
u32 sub_801B410(void);
|
||||
void sub_801B450(void);
|
||||
u32 sub_801B60C(u32, u8, u8);
|
||||
u32 sub_801B6AC(void);
|
||||
void sub_801B72C(void);
|
||||
|
||||
#endif // GUARD_CODE_801B3C0_H
|
@ -12,7 +12,10 @@ struct MissionText
|
||||
};
|
||||
|
||||
const u8 *GetCurrentMissionText(s16);
|
||||
// TODO: this should probably be bool8 but can't get a match just yet
|
||||
bool32 IsMazeCompleted(s16);
|
||||
|
||||
bool8 sub_8097504(s16);
|
||||
const u8 *sub_80975DC(u32);
|
||||
|
||||
// These two are definitely bool8 but can't get them to match with it yet
|
||||
|
@ -43,5 +43,6 @@ u32 GetMaxItemsAllowed(u8 dungeon);
|
||||
s8 GetRescuesAllowed(u8 dungeon);
|
||||
bool8 HasCheckpoint(u8 dungeon);
|
||||
s32 GetDungeonFloorCount(u8 dungeon);
|
||||
void PrintYellowDungeonNametoBuffer(u8 *, DungeonLocation *);
|
||||
|
||||
#endif //GUARD_DUNGEON_H
|
||||
|
@ -1,14 +1,24 @@
|
||||
#ifndef GUARD_MAKUHITA_DOJO_H
|
||||
#define GUARD_MAKUHITA_DOJO_H
|
||||
#ifndef GUARD_MAKUHITA_DOJO1_H
|
||||
#define GUARD_MAKUHITA_DOJO1_H
|
||||
|
||||
#include "constants/dungeon.h"
|
||||
#include "file_system.h"
|
||||
#include "input.h"
|
||||
#include "menu.h"
|
||||
#include "text.h"
|
||||
|
||||
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,
|
||||
};
|
||||
|
||||
// size: 0xCC
|
||||
struct unkStruct_203B318
|
||||
typedef struct MakuhitaDojoWork1
|
||||
{
|
||||
/* 0x0 */ u32 mode; // Corresponds to the enum: MakuhitaDojoMode
|
||||
/* 0x4 */ bool32 isAsleep;
|
||||
@ -28,40 +38,12 @@ struct unkStruct_203B318
|
||||
u8 unk67;
|
||||
OpenedFile** unk68;
|
||||
UnkTextStruct2 unk6C[4];
|
||||
};
|
||||
} MakuhitaDojoWork1;
|
||||
|
||||
// size: 0xD0
|
||||
struct unkStruct_203B31C
|
||||
{
|
||||
s16 unk0[NUM_DUNGEON_MAZE];
|
||||
/* 0x30 */ MenuInputStruct input;
|
||||
u32 unk64;
|
||||
UnkTextStruct2 *unk68;
|
||||
UnkTextStruct2 unk6C[4];
|
||||
u8 unkCC[4];
|
||||
};
|
||||
|
||||
// mode corresponds to the enum: MakuhitaDojoMode
|
||||
u32 MakuhitaDojo_New(u32 mode);
|
||||
void MakuhitaDojo_Delete(void);
|
||||
bool8 MakuhitaDojo_New(u32);
|
||||
|
||||
u32 sub_802FE58(void);
|
||||
s16 sub_802FED0(void);
|
||||
bool8 sub_80302E8(s32, 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
|
||||
#endif // GUARD_MAKUHITA_DOJO1_H
|
26
include/makuhita_dojo2.h
Normal file
26
include/makuhita_dojo2.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef GUARD_MAKUHITA_DOJO2_H
|
||||
#define GUARD_MAKUHITA_DOJO2_H
|
||||
|
||||
#include "constants/dungeon.h"
|
||||
#include "input.h"
|
||||
#include "text.h"
|
||||
|
||||
// size: 0xD0
|
||||
typedef struct MakuhitaDojoWork2
|
||||
{
|
||||
s16 unk0[NUM_DUNGEON_MAZE];
|
||||
/* 0x30 */ MenuInputStruct input;
|
||||
u32 unk64;
|
||||
UnkTextStruct2 *unk68;
|
||||
UnkTextStruct2 unk6C[4];
|
||||
u8 unkCC[4];
|
||||
} MakuhitaDojoWork2;
|
||||
|
||||
bool8 MakuhitaDojo_ReturnFalse(void);
|
||||
|
||||
bool8 sub_80302E8(s32, UnkTextStruct2_sub *, u32);
|
||||
u32 sub_80303AC(bool8);
|
||||
s16 sub_8030418(void);
|
||||
void sub_8030480(void);
|
||||
|
||||
#endif // GUARD_MAKUHITA_DOJO2_H
|
@ -126,7 +126,8 @@ SECTIONS {
|
||||
src/wonder_mail_3_mid.o(.text);
|
||||
asm/wonder_mail_3_mid.o(.text);
|
||||
src/wonder_mail_3_1.o(.text);
|
||||
src/makuhita_dojo.o(.text);
|
||||
src/makuhita_dojo1.o(.text);
|
||||
src/makuhita_dojo2.o(.text);
|
||||
src/wonder_mail_4.o(.text);
|
||||
src/wonder_mail_5.o(.text);
|
||||
src/wonder_mail_6.o(.text);
|
||||
@ -396,7 +397,8 @@ SECTIONS {
|
||||
src/mailbox.o(.rodata);
|
||||
src/pelipper_board.o(.rodata);
|
||||
src/wonder_mail_3_mid.o(.rodata);
|
||||
src/makuhita_dojo.o(.rodata);
|
||||
src/makuhita_dojo1.o(.rodata);
|
||||
src/makuhita_dojo2.o(.rodata);
|
||||
src/wonder_mail_4.o(.rodata);
|
||||
src/wonder_mail_5.o(.rodata);
|
||||
src/wonder_mail_6.o(.rodata);
|
||||
|
@ -7,7 +7,6 @@
|
||||
#include "items.h"
|
||||
#include "memory.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
#include "menu_input.h"
|
||||
#include "kecleon_bros.h"
|
||||
#include "sprite.h"
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "code_800D090.h"
|
||||
#include "menu_input.h"
|
||||
#include "wonder_mail.h"
|
||||
#include "dungeon.h"
|
||||
|
||||
extern s16 gUnknown_80E80E0[];
|
||||
extern s16 gUnknown_80E8126[];
|
||||
@ -74,7 +75,6 @@ extern PokemonStruct1 *sub_808D378(void);
|
||||
|
||||
s32 sub_8016028(void);
|
||||
extern void PrintDungeonLocationtoBuffer(u8 *, void *);
|
||||
extern void PrintYellowDungeonNametoBuffer(u8 *, void *);
|
||||
extern u8 sub_803C1D0(WonderMailSub *, u8);
|
||||
extern u8 *sub_803C1F0(u8);
|
||||
void sub_803D414(u8 *, WonderMail *);
|
||||
@ -86,9 +86,9 @@ void sub_803B6B0(s32 x, s32 y, u8 index, u32 param_4)
|
||||
|
||||
void CreateRescueTitle(unkStruct_802C39C *param_1)
|
||||
{
|
||||
char buf_1 [200];
|
||||
char buf_2 [20];
|
||||
char buf_3 [100];
|
||||
u8 buf_1[200];
|
||||
u8 buf_2[20];
|
||||
u8 buf_3[100];
|
||||
u8 *monName;
|
||||
u8 uVar1;
|
||||
|
||||
@ -107,7 +107,7 @@ void CreateRescueTitle(unkStruct_802C39C *param_1)
|
||||
xxx_call_draw_string(0x15,param_1->y,gMedichamMission,param_1->unk0[0],0);
|
||||
break;
|
||||
case 7:
|
||||
PrintYellowDungeonNametoBuffer(buf_1, param_1->unk8);
|
||||
PrintYellowDungeonNametoBuffer(buf_1, ¶m_1->unk8->dungeon);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 12:
|
||||
|
@ -2,9 +2,10 @@
|
||||
#include "code_80130A8.h"
|
||||
#include "code_8092334.h"
|
||||
#include "code_809447C.h"
|
||||
#include "dungeon.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "items.h"
|
||||
#include "moves.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "text_util.h"
|
||||
#include "text2.h"
|
||||
|
||||
@ -39,7 +40,6 @@ extern u8 *gUnknown_8113870[];
|
||||
extern struct unkStruct_8113080 gUnknown_8113080[];
|
||||
|
||||
extern void xxx_format_string(const char *, u8 *, void *, u32);
|
||||
void PrintYellowDungeonNametoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
|
||||
extern s32 sub_8008ED0(u8 *);
|
||||
|
||||
void sub_809447C(struct unkStruct_8094924 *r0, u8 *r1)
|
||||
|
@ -346,7 +346,7 @@ bool8 sub_8097504(s16 mazeIndex)
|
||||
#ifndef NONMATCHING
|
||||
register s32 mazeIndex_s32_1 asm("r1");
|
||||
#else
|
||||
s32 mazeIndex_s32_1;
|
||||
s32 mazeIndex_s32_1;
|
||||
#endif
|
||||
s32 uVar3;
|
||||
|
||||
|
@ -1,40 +0,0 @@
|
||||
static const UnkTextStruct2 gUnknown_80E0760 = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x03,
|
||||
0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
NULL
|
||||
};
|
||||
|
||||
ALIGNED(4) static 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.");
|
||||
ALIGNED(4) static const u8 gMakuhitaDojoGoTrain[] = "Go Train";
|
||||
ALIGNED(4) static const u8 sFill2[] = "pksdir0";
|
||||
|
||||
// TODO: SPLIT MAKUHITA
|
||||
|
||||
const UnkTextStruct2 gUnknown_80E07EC = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x03,
|
||||
0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
0x00, 0x00,
|
||||
NULL
|
||||
};
|
||||
|
||||
const UnkTextStruct2 gUnknown_80E0804 = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x06,
|
||||
0x02, 0x02,
|
||||
0x0E, 0x0E,
|
||||
0x0E, 0x00,
|
||||
NULL
|
||||
};
|
||||
|
||||
ALIGNED(4) static const u8 gMakuhitaDojoHeader[] = "Courses";
|
||||
ALIGNED(4) static const u8 gUnknown_80E0824[] = _("{STAR_BULLET}");
|
||||
ALIGNED(4) static const u8 gMakuhitaCoursePlaceholder[] = _("{COLOR_2}%c%s{END_COLOR_TEXT_2}");
|
||||
ALIGNED(4) static const u8 sFill3[] = "pksdir0";
|
15
src/data/makuhita_dojo1.h
Normal file
15
src/data/makuhita_dojo1.h
Normal file
@ -0,0 +1,15 @@
|
||||
static const UnkTextStruct2 sUnknown_80E0760 = {
|
||||
0, 0, 0, 0,
|
||||
3,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
NULL
|
||||
};
|
||||
|
||||
ALIGNED(4) static const u8 sReceivedBonslyDoll[] = _(
|
||||
"{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.");
|
||||
ALIGNED(4) static const u8 sGoTrain[] = "Go Train";
|
||||
ALIGNED(4) static const u8 sFill[] = "pksdir0";
|
22
src/data/makuhita_dojo2.h
Normal file
22
src/data/makuhita_dojo2.h
Normal file
@ -0,0 +1,22 @@
|
||||
const UnkTextStruct2 sUnknown_80E07EC = {
|
||||
0, 0, 0, 0,
|
||||
3,
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
NULL
|
||||
};
|
||||
|
||||
const UnkTextStruct2 sUnknown_80E0804 = {
|
||||
0, 0, 0, 0,
|
||||
6,
|
||||
2, 2,
|
||||
14, 14,
|
||||
14, 0,
|
||||
NULL
|
||||
};
|
||||
|
||||
ALIGNED(4) static const u8 sCourses[] = "Courses";
|
||||
ALIGNED(4) static const u8 sStarBullet[] = _("{STAR_BULLET}");
|
||||
ALIGNED(4) static const u8 sFmtColor[] = _("{COLOR_2}%c%s{END_COLOR_TEXT_2}");
|
||||
ALIGNED(4) static const u8 sFill[] = "pksdir0";
|
@ -1,547 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "code_800D090.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_80130A8.h"
|
||||
#include "code_80A26CC.h"
|
||||
#include "constants/colors.h"
|
||||
#include "constants/input.h"
|
||||
#include "dungeon.h"
|
||||
#include "makuhita_dojo.h"
|
||||
#include "memory.h"
|
||||
#include "menu_input.h"
|
||||
#include "pokemon.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
|
||||
extern u8 gUnknown_202E1C8[];
|
||||
extern u8 gUnknown_202E5D8[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gPlayerName[];
|
||||
|
||||
extern struct unkStruct_203B31C *gUnknown_203B31C;
|
||||
extern struct unkStruct_203B318 *gUnknown_203B318;
|
||||
|
||||
extern const u8 *gMakuhitaDialogue[2][10];
|
||||
extern u8 *gUnknown_80D4934[];
|
||||
extern u8 *gUnknown_80D4970[];
|
||||
|
||||
#include "data/makuhita_dojo.h"
|
||||
|
||||
extern u32 sub_80095E4(s16, u32);
|
||||
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 PokemonStruct1 *GetPlayerPokemonStruct(void);
|
||||
extern bool8 IsMazeCompleted(s32);
|
||||
extern void PrintColoredPokeNameToBuffer(u8 *, PokemonStruct1 *, s32);
|
||||
extern void PrintYellowDungeonNametoBuffer(u8 *, 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;
|
||||
OpenedFile *faceFile;
|
||||
u32 initialState;
|
||||
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(NULL, TRUE, TRUE);
|
||||
gUnknown_203B318 = MemoryAlloc(sizeof(struct unkStruct_203B318), 8);
|
||||
gUnknown_203B318->unk10 = -1;
|
||||
gUnknown_203B318->mode = mode;
|
||||
|
||||
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->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);
|
||||
|
||||
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 TRUE;
|
||||
}
|
||||
|
||||
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:
|
||||
MakuhitaDojo_GoToFallbackState();
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s16 sub_802FED0(void)
|
||||
{
|
||||
return gUnknown_203B318->unk10;
|
||||
}
|
||||
|
||||
void MakuhitaDojo_Delete(void)
|
||||
{
|
||||
if (gUnknown_203B318 != NULL) {
|
||||
CloseFile(gUnknown_203B318->faceFile);
|
||||
MemoryFree(gUnknown_203B318);
|
||||
gUnknown_203B318 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void MakuhitaDojo_SetState(s32 newState)
|
||||
{
|
||||
gUnknown_203B318->state = newState;
|
||||
sub_802FF1C();
|
||||
MakuhitaDojo_UpdateDialogue();
|
||||
}
|
||||
|
||||
void sub_802FF1C(void)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
sub_8006518(gUnknown_203B318->unk6C);
|
||||
|
||||
switch (gUnknown_203B318->state) {
|
||||
case 0:
|
||||
case 4:
|
||||
case 13:
|
||||
for(index = 0; index < 4; index++)
|
||||
gUnknown_203B318->unk6C[index] = gUnknown_80E0760;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(gUnknown_203B318->unk6C, TRUE, TRUE);
|
||||
}
|
||||
|
||||
void MakuhitaDojo_UpdateDialogue(void)
|
||||
{
|
||||
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, 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, TRUE, TRUE);
|
||||
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, TRUE, TRUE);
|
||||
MemoryFree(gUnknown_203B31C);
|
||||
gUnknown_203B31C = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING // https://decomp.me/scratch/lM7lE
|
||||
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, TRUE, TRUE);
|
||||
}
|
||||
#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;
|
||||
}
|
325
src/makuhita_dojo1.c
Normal file
325
src/makuhita_dojo1.c
Normal file
@ -0,0 +1,325 @@
|
||||
#include "global.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_80130A8.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "code_80A26CC.h"
|
||||
#include "constants/colors.h"
|
||||
#include "dungeon.h"
|
||||
#include "makuhita_dojo1.h"
|
||||
#include "makuhita_dojo2.h"
|
||||
#include "memory.h"
|
||||
#include "pokemon.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
|
||||
extern u8 gAvailablePokemonNames[]; // 202DF98
|
||||
extern u8 gUnknown_202E1C8[];
|
||||
extern u8 gPlayerName[]; // 202E2B8
|
||||
extern u8 gUnknown_202E5D8[];
|
||||
|
||||
static EWRAM_DATA_2 MakuhitaDojoWork1 *sMakuhitaDojoWork1 = {0};
|
||||
|
||||
// data_80D47B8.s
|
||||
extern const u8 *gUnknown_80D4934[];
|
||||
extern const u8 *gUnknown_80D4970[];
|
||||
// data_80D47B8.s
|
||||
extern const u8 *gMakuhitaDialogue[2][10]; // 80D9FC8
|
||||
|
||||
#include "data/makuhita_dojo1.h" // 80E0760
|
||||
|
||||
// pokemon.s
|
||||
extern PokemonStruct1 *GetPlayerPokemonStruct(void);
|
||||
|
||||
static void MakuhitaDojo_DrawMainMenu(void);
|
||||
static void MakuhitaDojo_GoToFallbackState(void);
|
||||
static void MakuhitaDojo_SetState(s32);
|
||||
static void MakuhitaDojo_UpdateDialogue(void);
|
||||
|
||||
static void sub_802FF1C(void);
|
||||
static void sub_8030208(void);
|
||||
static void sub_8030258(void);
|
||||
static void sub_80302A8(void);
|
||||
|
||||
bool8 MakuhitaDojo_New(u32 mode)
|
||||
{
|
||||
u8 *monName;
|
||||
OpenedFile *faceFile;
|
||||
u32 initialState;
|
||||
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(NULL, TRUE, TRUE);
|
||||
|
||||
sMakuhitaDojoWork1 = MemoryAlloc(sizeof(MakuhitaDojoWork1), 8);
|
||||
sMakuhitaDojoWork1->unk10 = -1;
|
||||
sMakuhitaDojoWork1->mode = mode;
|
||||
|
||||
switch (mode) {
|
||||
case MAKUHITA_DOJO_MODE_UNK0_AWAKE:
|
||||
initialState = 0;
|
||||
sMakuhitaDojoWork1->isAsleep = FALSE;
|
||||
break;
|
||||
case MAKUHITA_DOJO_MODE_UNK1_AWAKE:
|
||||
initialState = 7;
|
||||
sMakuhitaDojoWork1->isAsleep = FALSE;
|
||||
break;
|
||||
case MAKUHITA_DOJO_MODE_UNK2_AWAKE:
|
||||
initialState = 6;
|
||||
sMakuhitaDojoWork1->isAsleep = FALSE;
|
||||
break;
|
||||
case MAKUHITA_DOJO_MODE_UNK3_AWAKE:
|
||||
initialState = 8;
|
||||
sMakuhitaDojoWork1->isAsleep = FALSE;
|
||||
break;
|
||||
case MAKUHITA_DOJO_MODE_UNK4_ASLEEP:
|
||||
initialState = 0;
|
||||
sMakuhitaDojoWork1->isAsleep = TRUE;
|
||||
break;
|
||||
case MAKUHITA_DOJO_MODE_UNK5_ASLEEP:
|
||||
initialState = 7;
|
||||
sMakuhitaDojoWork1->isAsleep = TRUE;
|
||||
break;
|
||||
case MAKUHITA_DOJO_MODE_UNK6_ASLEEP:
|
||||
initialState = 6;
|
||||
sMakuhitaDojoWork1->isAsleep = TRUE;
|
||||
break;
|
||||
case MAKUHITA_DOJO_MODE_UNK7_ASLEEP:
|
||||
default:
|
||||
initialState = 8;
|
||||
sMakuhitaDojoWork1->isAsleep = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sMakuhitaDojoWork1->isAsleep == TRUE)
|
||||
sMakuhitaDojoWork1->unk68 = NULL;
|
||||
else
|
||||
sMakuhitaDojoWork1->unk68 = &sMakuhitaDojoWork1->faceFile;
|
||||
|
||||
CopyYellowMonsterNametoBuffer(gUnknown_202E5D8, MONSTER_MAKUHITA);
|
||||
CopyYellowMonsterNametoBuffer(gUnknown_202E1C8, MONSTER_MAKUHITA);
|
||||
monName = GetMonSpecies(MONSTER_MAKUHITA);
|
||||
strcpy(gUnknown_202E1C8 - 0x50, monName);
|
||||
|
||||
faceFile = GetDialogueSpriteDataPtr(MONSTER_MAKUHITA);
|
||||
sMakuhitaDojoWork1->faceFile = faceFile;
|
||||
sMakuhitaDojoWork1->faceData = faceFile->data;
|
||||
sMakuhitaDojoWork1->unk64 = 0;
|
||||
sMakuhitaDojoWork1->unk65 = 0;
|
||||
sMakuhitaDojoWork1->unk66 = 0;
|
||||
sMakuhitaDojoWork1->unk60 = 2;
|
||||
sMakuhitaDojoWork1->unk62 = 8;
|
||||
MakuhitaDojo_SetState(initialState);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 sub_802FE58(void)
|
||||
{
|
||||
switch (sMakuhitaDojoWork1->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)
|
||||
{
|
||||
return sMakuhitaDojoWork1->unk10;
|
||||
}
|
||||
|
||||
void MakuhitaDojo_Delete(void)
|
||||
{
|
||||
if (sMakuhitaDojoWork1 != NULL) {
|
||||
CloseFile(sMakuhitaDojoWork1->faceFile);
|
||||
MemoryFree(sMakuhitaDojoWork1);
|
||||
sMakuhitaDojoWork1 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void MakuhitaDojo_SetState(s32 newState)
|
||||
{
|
||||
sMakuhitaDojoWork1->state = newState;
|
||||
sub_802FF1C();
|
||||
MakuhitaDojo_UpdateDialogue();
|
||||
}
|
||||
|
||||
static void sub_802FF1C(void)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
sub_8006518(sMakuhitaDojoWork1->unk6C);
|
||||
|
||||
switch (sMakuhitaDojoWork1->state) {
|
||||
case 0:
|
||||
case 4:
|
||||
case 13:
|
||||
for(index = 0; index < 4; index++)
|
||||
sMakuhitaDojoWork1->unk6C[index] = sUnknown_80E0760;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(sMakuhitaDojoWork1->unk6C, TRUE, TRUE);
|
||||
}
|
||||
|
||||
static void MakuhitaDojo_UpdateDialogue(void)
|
||||
{
|
||||
DungeonLocation dLoc;
|
||||
|
||||
switch (sMakuhitaDojoWork1->state) {
|
||||
case 0:
|
||||
MakuhitaDojo_DrawMainMenu();
|
||||
sub_8014248(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][0], 0, sMakuhitaDojoWork1->menuAction, sMakuhitaDojoWork1->unk18, NULL, 4, 0, sMakuhitaDojoWork1->unk68, 12);
|
||||
break;
|
||||
case 1:
|
||||
sub_8014248(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][1], 0, sMakuhitaDojoWork1->menuAction, sMakuhitaDojoWork1->unk18, NULL, 4, 0, sMakuhitaDojoWork1->unk68, 12);
|
||||
break;
|
||||
case 2:
|
||||
sMakuhitaDojoWork1->fallbackState = 13;
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][2], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 3:
|
||||
sMakuhitaDojoWork1->fallbackState = 4;
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][3], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 4:
|
||||
sub_80302E8(3, NULL, 10);
|
||||
break;
|
||||
case 5:
|
||||
sMakuhitaDojoWork1->fallbackState = 13;
|
||||
dLoc.id = sub_80A2740(sMakuhitaDojoWork1->unk10);
|
||||
dLoc.floor = 1;
|
||||
PrintYellowDungeonNametoBuffer(gAvailablePokemonNames, &dLoc);
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][4], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 7:
|
||||
sMakuhitaDojoWork1->fallbackState = 13;
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][6], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 6:
|
||||
sMakuhitaDojoWork1->fallbackState = 13;
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][5], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 8:
|
||||
sMakuhitaDojoWork1->fallbackState = 9;
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][7], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 9:
|
||||
PrintColoredPokeNameToBuffer(gPlayerName, GetPlayerPokemonStruct(), COLOR_YELLOW);
|
||||
sMakuhitaDojoWork1->fallbackState = 11;
|
||||
PlaySound(203);
|
||||
sub_80141B4(sReceivedBonslyDoll, 0, 0, 0x101);
|
||||
break;
|
||||
case 10:
|
||||
sMakuhitaDojoWork1->fallbackState = 13;
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][8], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 11:
|
||||
sub_801B60C(1, ITEM_GINSENG, 1);
|
||||
break;
|
||||
case 12:
|
||||
sMakuhitaDojoWork1->fallbackState = 1;
|
||||
sub_80141B4(gMakuhitaDialogue[sMakuhitaDojoWork1->isAsleep][9], 0, sMakuhitaDojoWork1->unk68, 0x10D);
|
||||
break;
|
||||
case 13:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void MakuhitaDojo_DrawMainMenu(void)
|
||||
{
|
||||
s32 loopMax;
|
||||
|
||||
sMakuhitaDojoWork1->menuAction = 2;
|
||||
loopMax = 0;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].text = sGoTrain;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].menuAction = 2;
|
||||
|
||||
if (MakuhitaDojo_ReturnFalse()) {
|
||||
sMakuhitaDojoWork1->unk18[loopMax].menuAction = -1;
|
||||
sMakuhitaDojoWork1->menuAction = 1;
|
||||
}
|
||||
|
||||
loopMax += 1;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].text = *gUnknown_80D4970;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].menuAction = 3;
|
||||
loopMax += 1;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].text = *gUnknown_80D4934;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].menuAction = 1;
|
||||
loopMax += 1;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].text = NULL;
|
||||
sMakuhitaDojoWork1->unk18[loopMax].menuAction = 1;
|
||||
}
|
||||
|
||||
static void sub_8030208(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
if (sub_80144A4(&menuAction) == 0) {
|
||||
sMakuhitaDojoWork1->menuAction = menuAction;
|
||||
|
||||
switch (menuAction) {
|
||||
case 2:
|
||||
MakuhitaDojo_SetState(3);
|
||||
break;
|
||||
case 3:
|
||||
MakuhitaDojo_SetState(12);
|
||||
break;
|
||||
case 1:
|
||||
MakuhitaDojo_SetState(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8030258(void)
|
||||
{
|
||||
switch (sub_80303AC(TRUE)) {
|
||||
case 3:
|
||||
sMakuhitaDojoWork1->unk10 = sub_8030418();
|
||||
sub_8030480();
|
||||
MakuhitaDojo_SetState(5);
|
||||
break;
|
||||
case 2:
|
||||
sub_8030480();
|
||||
sMakuhitaDojoWork1->unk10 = -1;
|
||||
MakuhitaDojo_SetState(1);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80302A8(void)
|
||||
{
|
||||
switch (sub_801B6AC()) {
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801B72C();
|
||||
MakuhitaDojo_SetState(10);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void MakuhitaDojo_GoToFallbackState(void)
|
||||
{
|
||||
s32 temp;
|
||||
if (sub_80144A4(&temp) == 0)
|
||||
MakuhitaDojo_SetState(sMakuhitaDojoWork1->fallbackState);
|
||||
}
|
231
src/makuhita_dojo2.c
Normal file
231
src/makuhita_dojo2.c
Normal file
@ -0,0 +1,231 @@
|
||||
#include "global.h"
|
||||
#include "code_800D090.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "code_80972F4.h"
|
||||
#include "code_80A26CC.h"
|
||||
#include "constants/colors.h"
|
||||
#include "constants/input.h"
|
||||
#include "dungeon.h"
|
||||
#include "makuhita_dojo2.h"
|
||||
#include "memory.h"
|
||||
#include "menu_input.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
|
||||
static EWRAM_DATA_2 MakuhitaDojoWork2 *sMakuhitaDojoWork2 = {0};
|
||||
|
||||
#include "data/makuhita_dojo2.h" // 80E07EC
|
||||
|
||||
static void MakuhitaDojo_DrawCourseList(void);
|
||||
|
||||
static void sub_80304C8(void);
|
||||
static s32 sub_8030668(void);
|
||||
|
||||
bool8 sub_80302E8(s32 param_1, UnkTextStruct2_sub *param_2, u32 param_3)
|
||||
{
|
||||
if (MakuhitaDojo_ReturnFalse())
|
||||
return FALSE;
|
||||
|
||||
if (sMakuhitaDojoWork2 == NULL)
|
||||
sMakuhitaDojoWork2 = MemoryAlloc(sizeof(MakuhitaDojoWork2), 8);
|
||||
|
||||
sMakuhitaDojoWork2->unk64 = param_1;
|
||||
sMakuhitaDojoWork2->unk68 = &sMakuhitaDojoWork2->unk6C[param_1];
|
||||
sub_8006518(sMakuhitaDojoWork2->unk6C);
|
||||
sMakuhitaDojoWork2->unk6C[sMakuhitaDojoWork2->unk64] = sUnknown_80E0804;
|
||||
sMakuhitaDojoWork2->unk68->unk14 = sMakuhitaDojoWork2->unkCC;
|
||||
|
||||
if (param_2 != NULL)
|
||||
sMakuhitaDojoWork2->unk6C[sMakuhitaDojoWork2->unk64].unk8 = *param_2;
|
||||
|
||||
sub_8012D08(sMakuhitaDojoWork2->unk68, param_3);
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(sMakuhitaDojoWork2->unk6C, TRUE, TRUE);
|
||||
sub_8013818(&sMakuhitaDojoWork2->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(&sMakuhitaDojoWork2->input);
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (GetKeyPress(&sMakuhitaDojoWork2->input)) {
|
||||
case INPUT_B_BUTTON:
|
||||
PlayMenuSoundEffect(1);
|
||||
return 2;
|
||||
case INPUT_A_BUTTON:
|
||||
PlayMenuSoundEffect(0);
|
||||
return 3;
|
||||
default:
|
||||
if (sub_80138B8(&sMakuhitaDojoWork2->input, 1)) {
|
||||
sub_80304C8();
|
||||
MakuhitaDojo_DrawCourseList();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
s16 sub_8030418(void)
|
||||
{
|
||||
return sMakuhitaDojoWork2->unk0[(sMakuhitaDojoWork2->input.unk1E * sMakuhitaDojoWork2->input.unk1C) + sMakuhitaDojoWork2->input.menuIndex];
|
||||
}
|
||||
|
||||
UNUSED static void sub_8030444(bool8 a0)
|
||||
{
|
||||
sMakuhitaDojoWork2->input.unk22 = sub_8030668();
|
||||
sub_8013984(&sMakuhitaDojoWork2->input);
|
||||
sub_80304C8();
|
||||
MakuhitaDojo_DrawCourseList();
|
||||
if (a0)
|
||||
AddMenuCursorSprite(&sMakuhitaDojoWork2->input);
|
||||
}
|
||||
|
||||
void sub_8030480(void)
|
||||
{
|
||||
if (sMakuhitaDojoWork2 != NULL) {
|
||||
sMakuhitaDojoWork2->unk6C[sMakuhitaDojoWork2->unk64] = sUnknown_80E07EC;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(sMakuhitaDojoWork2->unk6C, TRUE, TRUE);
|
||||
MemoryFree(sMakuhitaDojoWork2);
|
||||
sMakuhitaDojoWork2 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING // https://decomp.me/scratch/lM7lE
|
||||
static void sub_80304C8(void)
|
||||
{
|
||||
s16 test;
|
||||
|
||||
sMakuhitaDojoWork2->unkCC[0] = 1;
|
||||
sMakuhitaDojoWork2->unkCC[1] = 0;
|
||||
sMakuhitaDojoWork2->unkCC[2] = 8;
|
||||
sMakuhitaDojoWork2->unkCC[3] = 0;
|
||||
|
||||
test = sub_80095E4(sMakuhitaDojoWork2->input.unk1A, 12) + 2;
|
||||
sMakuhitaDojoWork2->unk6C[sMakuhitaDojoWork2->unk64].unkE = test;
|
||||
sMakuhitaDojoWork2->unk6C[sMakuhitaDojoWork2->unk64].unk10 = test + 2;
|
||||
ResetUnusedInputStruct();
|
||||
sub_800641C(sMakuhitaDojoWork2->unk6C, TRUE, TRUE);
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static 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 sMakuhitaDojoWork2");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
static void MakuhitaDojo_DrawCourseList(void)
|
||||
{
|
||||
u8 dungeonIndex;
|
||||
s32 mazeIndex;
|
||||
s32 y;
|
||||
s32 iVar6;
|
||||
u32 color;
|
||||
s32 i;
|
||||
u8 buffer[256];
|
||||
|
||||
sub_8008C54(sMakuhitaDojoWork2->unk64);
|
||||
sub_80073B8(sMakuhitaDojoWork2->unk64);
|
||||
xxx_call_draw_string(10, 0, sCourses, sMakuhitaDojoWork2->unk64, 0);
|
||||
sub_8012BC4((sMakuhitaDojoWork2->unkCC[2] * 8) + 4, 0, sMakuhitaDojoWork2->input.unk1E + 1, 2, 7, sMakuhitaDojoWork2->unk64);
|
||||
|
||||
for (i = 0; i < sMakuhitaDojoWork2->input.unk1A; i++) {
|
||||
iVar6 = sMakuhitaDojoWork2->unk0[sMakuhitaDojoWork2->input.unk1E * sMakuhitaDojoWork2->input.unk1C + i];
|
||||
dungeonIndex = sub_80A2740(iVar6);
|
||||
|
||||
mazeIndex = sub_80A2668(iVar6);
|
||||
|
||||
y = sub_8013800(&sMakuhitaDojoWork2->input, i);
|
||||
color = COLOR_WHITE_2; // COLOR_WHITE again?
|
||||
if ((bool8)IsMazeCompleted(mazeIndex)) {
|
||||
xxx_call_draw_string(8, y, sStarBullet, sMakuhitaDojoWork2->unk64, 0);
|
||||
color = COLOR_GREEN;
|
||||
}
|
||||
sprintfStatic(buffer, sFmtColor, color, GetDungeonName1(dungeonIndex));
|
||||
xxx_call_draw_string(16, y, buffer, sMakuhitaDojoWork2->unk64, 0);
|
||||
}
|
||||
sub_80073E0(sMakuhitaDojoWork2->unk64);
|
||||
}
|
||||
|
||||
static s32 sub_8030668(void)
|
||||
{
|
||||
s32 i;
|
||||
s32 counter;
|
||||
|
||||
counter = 0;
|
||||
|
||||
for (i = 0; i < NUM_DUNGEON_MAZE; i++) {
|
||||
if (sub_8097504(i)) {
|
||||
sMakuhitaDojoWork2->unk0[counter] = sub_80A26CC(i);
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
return counter;
|
||||
}
|
||||
|
||||
bool8 MakuhitaDojo_ReturnFalse(void)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
@ -13,6 +13,7 @@
|
||||
#include "code_80130A8.h"
|
||||
#include "code_80118A4.h"
|
||||
#include "wonder_mail_3.h"
|
||||
#include "code_801B3C0.h"
|
||||
|
||||
extern unkStruct_803B344 *sub_803B344(u8);
|
||||
|
||||
@ -96,8 +97,6 @@ extern void sub_802F184(void);
|
||||
extern void sub_802F1E8(void);
|
||||
extern void sub_802F004();
|
||||
extern void sub_802F088();
|
||||
extern void sub_801B72C(void);
|
||||
extern u32 sub_801B6AC(void);
|
||||
extern void sub_802F108(void);
|
||||
extern void sub_803B35C(WonderMail*, unkStruct_802C39C *);
|
||||
extern void sub_802DE84(unkStruct_802C39C *);
|
||||
@ -115,7 +114,6 @@ extern void sub_802F6FC(void);
|
||||
extern void ProceedToNextRewardSceneState(void);
|
||||
extern void sub_802F300(void);
|
||||
extern s32 sub_808D544(u32);
|
||||
extern u32 sub_801B60C(u32, u8, u8);
|
||||
void HandleMissionReward(void);
|
||||
const u8 *sub_80974A0(s16 index);
|
||||
|
||||
|
@ -329,11 +329,8 @@ gUnknown_203B310: /* 203B310 */
|
||||
gUnknown_203B314: /* 203B314 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_203B318: /* 203B318 */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_203B31C: /* 203B31C */
|
||||
.space 0x4
|
||||
.include "src/makuhita_dojo1.o"
|
||||
.include "src/makuhita_dojo2.o"
|
||||
|
||||
gUnknown_203B320: /* 203B320 */
|
||||
.space 0x4
|
||||
|
Loading…
x
Reference in New Issue
Block a user