diff options
Diffstat (limited to 'src/kecleon_items.c')
-rw-r--r-- | src/kecleon_items.c | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/src/kecleon_items.c b/src/kecleon_items.c new file mode 100644 index 0000000..a3d0fd0 --- /dev/null +++ b/src/kecleon_items.c @@ -0,0 +1,193 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "constants/species.h" +#include "input.h" +#include "kecleon_items.h" + +extern struct unkStruct_203B210 *gUnknown_203B210; +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; +extern struct unkData gUnknown_80DB840; +extern struct unkData gUnknown_80DB870; +extern struct unkData gUnknown_80DB888; +extern struct unkData gUnknown_80DB858; + +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); +void UpdateKecleonStoreState(u32); + +extern void sub_8019730(); +extern void sub_80199CC(); +extern void sub_8019B08(); +extern void sub_8019BBC(); +extern void sub_8019C78(); +extern void sub_8019850(); +extern void sub_80198E8(); +extern void sub_8019944(); +extern void sub_8019D30(); +extern void sub_8019D4C(); +extern void sub_8019D68(); +extern void sub_8018D30(); +extern void sub_8018E88(); +extern void sub_8006518(struct unkData *); +extern void sub_800641C(struct unkData *, u32, u32); + +u32 DisplayKeckleonDialogueSprite(u32 param_1) +{ + char *monName; + struct OpenedFile *faceFile; + + gUnknown_203B210 = MemoryAlloc(0x148,8); + gUnknown_203B210->unk28 = 0; + gUnknown_203B210->unk2C = 0; + gUnknown_203B210->unk30 = 0; + gUnknown_203B210->unk0 = param_1; + switch(param_1) + { + case 0: + gUnknown_203B210->unk4 = 1; + gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + case 1: + gUnknown_203B210->unk4 = 1; + gUnknown_203B210->unkE4 = 0; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + case 2: + gUnknown_203B210->unk4 = 0; + gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + case 3: + gUnknown_203B210->unk4 = 0; + gUnknown_203B210->unkE4 = 0; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + default: + break; + } + faceFile = GetDialogueSpriteDataPtr(SPECIES_KECLEON); + gUnknown_203B210->unkD4 = faceFile; + gUnknown_203B210->unkD8 = faceFile->data; + gUnknown_203B210->unkE0 = 0; + gUnknown_203B210->unkE1 = 0; + gUnknown_203B210->unkE2 = 0; + gUnknown_203B210->unkDC = 2; + gUnknown_203B210->unkDE = 8; + UpdateKecleonStoreState(0); + return 1; +} + +u32 sub_8018C04(void) +{ + switch(gUnknown_203B210->currState) { + case 0: + case 1: + sub_8019730(); + break; + case 0x12: + case 0x13: + sub_80199CC(); + break; + case 0x1a: + case 0x1b: + sub_8019B08(); + break; + case 0x14: + sub_8019BBC(); + break; + case 0x1c: + sub_8019C78(); + break; + case 0x16: + sub_8019850(); + break; + case 0x1e: + sub_80198E8(); + break; + case 0x1f: + sub_8019944(); + break; + case 0x15: + sub_8019D30(); + break; + case 0x1d: + sub_8019D4C(); + break; + case 4: + return 3; + default: + sub_8019D68(); + break; + } + return 0; +} + +void sub_8018CF0(void) +{ + if(gUnknown_203B210 != NULL) + { + CloseFile(gUnknown_203B210->unkD4); + MemoryFree(gUnknown_203B210); + gUnknown_203B210 = NULL; + } +} + +void UpdateKecleonStoreState(u32 newState) +{ + gUnknown_203B210->currState = newState; + sub_8018D30(); + sub_8018E88(); +} + +void sub_8018D30(void) +{ + s32 iVar3; + sub_8006518(gUnknown_203B210->unkE8); + switch(gUnknown_203B210->currState) + { + case 0x12: + case 0x13: + gUnknown_203B210->unkE8[0] = gUnknown_80DB840; + gUnknown_203B210->unkE8[2] = gUnknown_80DB840; + gUnknown_203B210->unkE8[0] = gUnknown_80DB870; + gUnknown_203B210->unkE8[1] = gUnknown_80DB888; + break; + case 0x1A: + case 0x1B: + gUnknown_203B210->unkE8[0] = gUnknown_80DB840; + gUnknown_203B210->unkE8[1] = gUnknown_80DB840; + gUnknown_203B210->unkE8[2] = gUnknown_80DB840; + gUnknown_203B210->unkE8[1] = gUnknown_80DB888; + break; + case 0x14: + case 0x1C: + gUnknown_203B210->unkE8[2] = gUnknown_80DB858; + break; + default: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + for(iVar3 = 0; iVar3 < 4; iVar3++) + gUnknown_203B210->unkE8[iVar3] = gUnknown_80DB840; + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B210->unkE8, 1, 1); +} |