diff options
Diffstat (limited to 'src/makuhita_dojo.c')
-rw-r--r-- | src/makuhita_dojo.c | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c new file mode 100644 index 0000000..6061531 --- /dev/null +++ b/src/makuhita_dojo.c @@ -0,0 +1,184 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "input.h" +#include "constants/species.h" + +struct unkData +{ + u8 unk0[24]; +}; + +struct unkStruct_203B318 +{ + // size: 0xcc + u32 unk0; + u32 unk4; + s32 unk8; + u8 fillC[0x10 - 0xC]; + s16 unk10; + u8 fill[0x58 - 0x12]; + struct OpenedFile *faceFile; + u8 *faceData; + u16 unk60; + u16 unk62; + u8 unk64; + u8 unk65; + u8 unk66; + u8 unk67; + struct OpenedFile** unk68; + struct unkData unk6C[4]; +}; + +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; +extern struct unkStruct_203B318 *gUnknown_203B318; +extern struct unkData gUnknown_80E0760; + +extern void sub_800641C(struct unkData *, u32, u32); +extern void sub_8006518(struct unkData *); +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); + +extern void sub_8030208(); +extern void sub_8030258(); +extern void sub_80302A8(); +extern void sub_80302C4(); +extern void UpdateMakuhitaDialogue(); + +void sub_802FF04(s32); +void sub_802FF1C(); + +u32 CreateMakuhitaShop(u32 param_1) +{ + char *monName; + struct OpenedFile *faceFile; + u32 initialState; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B318 = MemoryAlloc(0xcc,8); + gUnknown_203B318->unk10 = -1; + gUnknown_203B318->unk0 = param_1; + switch(param_1) { + case 0: + initialState = 0; + gUnknown_203B318->unk4 = 0; + break; + case 1: + initialState = 7; + gUnknown_203B318->unk4 = 0; + break; + case 2: + initialState = 6; + gUnknown_203B318->unk4 = 0; + break; + case 3: + initialState = 8; + gUnknown_203B318->unk4 = 0; + break; + case 4: + initialState = 0; + gUnknown_203B318->unk4 = 1; + break; + case 5: + initialState = 7; + gUnknown_203B318->unk4 = 1; + break; + case 6: + initialState = 6; + gUnknown_203B318->unk4 = 1; + break; + case 7: + default: + initialState = 8; + gUnknown_203B318->unk4 = 1; + break; + } + if (gUnknown_203B318->unk4 == 1) { + gUnknown_203B318->unk68 = NULL; + } + else { + gUnknown_203B318->unk68 = &gUnknown_203B318->faceFile; + } + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8,SPECIES_MAKUHITA); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8,SPECIES_MAKUHITA); + monName = GetMonSpecies(SPECIES_MAKUHITA); + strcpy(gUnknown_202E1C8 - 0x50, monName); + faceFile = GetDialogueSpriteDataPtr(SPECIES_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; + sub_802FF04(initialState); + return 1; +} + +u32 sub_802FE58(void) +{ + + switch(gUnknown_203B318->unk8) { + case 0: + case 1: + sub_8030208(); + break; + case 4: + sub_8030258(); + break; + case 11: + sub_80302A8(); + break; + case 13: + return 3; + default: + sub_80302C4(); + break; + } + return 0; +} + +s16 sub_802FED0(void) +{ + return gUnknown_203B318->unk10; +} + +void sub_802FEE0(void) +{ + if(gUnknown_203B318 != NULL) + { + CloseFile(gUnknown_203B318->faceFile); + MemoryFree(gUnknown_203B318); + gUnknown_203B318 = NULL; + } +} + +void sub_802FF04(s32 newState) +{ + gUnknown_203B318->unk8 = newState; + sub_802FF1C(); + UpdateMakuhitaDialogue(); +} + +void sub_802FF1C(void) +{ + s32 iVar3; + sub_8006518(gUnknown_203B318->unk6C); + switch(gUnknown_203B318->unk8) + { + case 0: + case 4: + case 13: + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B318->unk6C[iVar3] = gUnknown_80E0760; + } + break; + default: + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B318->unk6C, 1, 1); +} |