diff options
Diffstat (limited to 'src/code_801C620.c')
-rw-r--r-- | src/code_801C620.c | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/src/code_801C620.c b/src/code_801C620.c new file mode 100644 index 0000000..66269c9 --- /dev/null +++ b/src/code_801C620.c @@ -0,0 +1,197 @@ +#include "global.h" +#include "input.h" +#include "memory.h" + +struct unkData +{ + u8 unk0[24]; +}; + + +struct subStruct_203B240 +{ + char * unk0; + char * unk4; +}; + +struct unkStruct_203B240 +{ + s32 unk0; + u8 unk4; + u8 fill5[3]; + s32 unk8; + s32 unkC; + struct subStruct_203B240 *unk10[2]; + u8 fill14[0x20 - 0x18]; + u32 unk20; + u32 unk24; + struct unkData unk28[4]; + u32 unk88; +}; + +extern struct unkStruct_203B240 *gUnknown_203B240; +extern char gUnknown_80DBE2C[]; // $i0 +extern char gUnknown_80DBE30[]; // $m0 +extern u8 gUnknown_202DE58[0x58]; +extern u8 gAvailablePokemonNames[0x58]; + + +extern void ResetSprites(u32); +extern void sub_801317C(u32 *); +extern void sub_80140B4(struct unkData *); +extern void sub_800641C(struct unkData *,u32, u32); + + +extern void sub_8014FF0(u32, u32, char *, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void xxx_call_draw_string(u32, u32, char *, u32, u32); +extern void sub_80073E0(u32); +extern u32 sub_8097DF0(char *, struct subStruct_203B240 **); +extern u32 sub_8012A64(u32 *, u32); +extern void sub_8013F84(); +extern void PlayMenuSoundEffect(u32); +extern char * GetIQSkillName(u8 r0); +extern char * GetIQSkillDescription(u8 r0); + +void sub_801C6D0(s32); +void sub_801C7D4(); +void sub_801C6E4(); +void sub_801C848(); + +u32 sub_801C620(u8 param_1) +{ + ResetSprites(1); + gUnknown_203B240 = MemoryAlloc(0x94,8); + gUnknown_203B240->unk4 = param_1; + sub_801317C(&gUnknown_203B240->unk88); + gUnknown_203B240->unk24 = 0; + sub_80140B4(gUnknown_203B240->unk28); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B240->unk28,1,1); + sub_801C6D0(0); + return 1; +} + +u32 sub_801C674(void) +{ + switch(gUnknown_203B240->unk0) + { + case 0: + sub_801C7D4(); + break; + case 1: + sub_801C848(); + break; + case 3: + return 3; + case 2: + default: + return 2; + } + return 0; +} + +void sub_801C6B4(void) +{ + if(gUnknown_203B240 != NULL) + { + MemoryFree(gUnknown_203B240); + gUnknown_203B240 = NULL; + } +} + +void sub_801C6D0(s32 unk0) +{ + gUnknown_203B240->unk0 = unk0; + sub_801C6E4(); +} + +void sub_801C6E4(void) +{ + char *skillName; + struct subStruct_203B240 *preload; + + switch(gUnknown_203B240->unk0) + { + case 0: + sub_8008C54(gUnknown_203B240->unk24); + sub_80073B8(gUnknown_203B240->unk24); + skillName = GetIQSkillName(gUnknown_203B240->unk4); + strcpy(gUnknown_202DE58,skillName); + sub_8014FF0(16,0,gUnknown_80DBE2C,0,0); // $i0 + xxx_call_draw_string(8,16,GetIQSkillDescription(gUnknown_203B240->unk4),gUnknown_203B240->unk24,0); + sub_80073E0(gUnknown_203B240->unk24); + gUnknown_203B240->unkC = sub_8097DF0(GetIQSkillDescription(gUnknown_203B240->unk4),gUnknown_203B240->unk10); + gUnknown_203B240->unk20 = 0; + break; + case 1: + sub_8008C54(gUnknown_203B240->unk24); + sub_80073B8(gUnknown_203B240->unk24); + preload = gUnknown_203B240->unk10[gUnknown_203B240->unk8]; + strcpy(gAvailablePokemonNames,preload->unk0); + sub_8014FF0(16,0,gUnknown_80DBE30,gUnknown_203B240->unk24,0); // $m0 + sub_8014FF0(4,16,gUnknown_203B240->unk10[gUnknown_203B240->unk8]->unk4, gUnknown_203B240->unk24,0); + sub_80073E0(gUnknown_203B240->unk24); + break; + case 2: + case 3: + break; + } +} + +void sub_801C7D4(void) +{ + + if (gUnknown_203B240->unkC != 0) { + if ((gUnknown_203B240->unk20 & 8) != 0) { + sub_8013F84(); + } + gUnknown_203B240->unk20++; + } + switch(sub_8012A64(&gUnknown_203B240->unk88,gUnknown_203B240->unk24)) + { + case 1: + PlayMenuSoundEffect(0); + if (gUnknown_203B240->unkC != 0) { + gUnknown_203B240->unk8 = 0; + sub_801C6D0(1); + } + else { + sub_801C6D0(3); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801C6D0(2); + break; + } +} + +void sub_801C848(void) +{ + + if (gUnknown_203B240->unk8 < (gUnknown_203B240->unkC - 1)) { + if ((gUnknown_203B240->unk20 & 8) != 0) { + sub_8013F84(); + } + gUnknown_203B240->unk20++; + } + switch(sub_8012A64(&gUnknown_203B240->unk88,gUnknown_203B240->unk24)) + { + case 1: + PlayMenuSoundEffect(0); + gUnknown_203B240->unk8++; + if (gUnknown_203B240->unk8 < gUnknown_203B240->unkC) { + sub_801C6D0(1); + } + else { + sub_801C6D0(0); + } + break; + case 2: + PlayMenuSoundEffect(1); + sub_801C6D0(2); + break; + } +} |