From ad07843f2dc3df3db53490018eb978ef270062d9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 4 Dec 2017 23:09:44 +0100 Subject: start working on use pokeblock --- src/use_pokeblock.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/use_pokeblock.c (limited to 'src/use_pokeblock.c') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c new file mode 100644 index 000000000..7057b0528 --- /dev/null +++ b/src/use_pokeblock.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "main.h" +#include "pokeblock.h" +#include "malloc.h" + +struct UsePokeblockSubStruct +{ + void *field_0; + void (*callback)(void); + struct Pokeblock *pokeblock; +}; + +struct UsePokeblockStruct1 +{ + u8 field_0[0x7FD0]; + struct UsePokeblockSubStruct info; +}; + +extern struct UsePokeblockStruct1 *gUnknown_0203BCAC; +extern struct UsePokeblockSubStruct *gUnknown_0203BC90; + +// this file's functions +void sub_816636C(void *arg0); +void sub_8166380(void); +void sub_816631C(void); + +void sub_8166204(struct Pokeblock *pokeblock, void (*callback)(void)) +{ + gUnknown_0203BCAC = AllocZeroed(0x806C); + gUnknown_0203BC90 = &gUnknown_0203BCAC->info; + gUnknown_0203BC90->pokeblock = pokeblock; + gUnknown_0203BC90->callback = callback; + sub_816636C(sub_8166380); + SetMainCallback2(sub_816631C); +} -- cgit v1.2.3 From 6561b62986a003e83811abfc85bf07ebc6f3a1ae Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 9 Dec 2017 21:23:40 +0100 Subject: start pokeblock feed --- src/use_pokeblock.c | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 192 insertions(+), 6 deletions(-) (limited to 'src/use_pokeblock.c') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 7057b0528..64d1cb4a5 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -2,29 +2,69 @@ #include "main.h" #include "pokeblock.h" #include "malloc.h" +#include "palette.h" +#include "pokenav.h" +#include "unknown_task.h" +#include "text.h" +#include "bg.h" +#include "window.h" +#include "text_window.h" struct UsePokeblockSubStruct { - void *field_0; + void (*field_0)(void); void (*callback)(void); struct Pokeblock *pokeblock; + struct Pokemon *pokemon; + u8 stringBuffer[0x40]; + u8 field_50; + u8 field_51; + u8 field_52; + u8 field_53; + u8 field_54; + u8 field_55; + u8 field_56; + u8 field_57[5]; + u8 field_5c[5]; + u8 field_61[5]; + s16 field_66[5]; }; -struct UsePokeblockStruct1 +struct UsePokeblockStruct { - u8 field_0[0x7FD0]; + u8 field_0[0x7C58]; + u8 field_7C58[0x378]; struct UsePokeblockSubStruct info; }; -extern struct UsePokeblockStruct1 *gUnknown_0203BCAC; +extern struct UsePokeblockStruct *gUnknown_0203BCAC; extern struct UsePokeblockSubStruct *gUnknown_0203BC90; +extern struct Pokeblock *gUnknown_0203BC98; +extern void (*gUnknown_0203BC94)(void); +extern u8 gPokeblockMonId; + +extern u16 gKeyRepeatStartDelay; // this file's functions -void sub_816636C(void *arg0); +void sub_816636C(void (*func)(void)); void sub_8166380(void); void sub_816631C(void); +void sub_81662C0(void); +void sub_8166564(void); +void sub_8166304(void); +void sub_81668F8(void); +void sub_8167420(void); +void sub_8167760(void); +u8 sub_81672E4(u8 arg0); +bool8 sub_8168328(void); +bool8 sub_8167930(void); +void sub_8167608(u8 arg0); +void sub_8167BA0(u16 arg0, u8 copyToVramMode); + +extern const struct BgTemplate gUnknown_085DFCCC[4]; +extern const struct WindowTemplate gUnknown_085DFCDC[]; -void sub_8166204(struct Pokeblock *pokeblock, void (*callback)(void)) +void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { gUnknown_0203BCAC = AllocZeroed(0x806C); gUnknown_0203BC90 = &gUnknown_0203BCAC->info; @@ -33,3 +73,149 @@ void sub_8166204(struct Pokeblock *pokeblock, void (*callback)(void)) sub_816636C(sub_8166380); SetMainCallback2(sub_816631C); } + +void CB2_ReturnAndChooseMonToGivePokeblock(void) +{ + gUnknown_0203BCAC = AllocZeroed(0x806C); + gUnknown_0203BC90 = &gUnknown_0203BCAC->info; + gUnknown_0203BC90->pokeblock = gUnknown_0203BC98; + gUnknown_0203BC90->callback = gUnknown_0203BC94; + gPokeblockMonId = sub_81672E4(gPokeblockMonId); + gUnknown_0203BC90->field_56 = gPokeblockMonId < 4 ? 0 : 1; + sub_816636C(sub_8166380); + SetMainCallback2(sub_81662C0); +} + +void sub_81662C0(void) +{ + gUnknown_0203BC90->field_0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + if (gUnknown_0203BC90->field_0 == sub_8166564) + { + gUnknown_0203BC90->field_50 = 0; + SetMainCallback2(sub_8166304); + } +} + +void sub_8166304(void) +{ + sub_81668F8(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_816631C(void) +{ + gUnknown_0203BC90->field_0(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +void sub_8166340(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_81D2108(gUnknown_0203BCAC->field_7C58); + sub_80BA0A8(); +} + +void sub_816636C(void (*func)(void)) +{ + gUnknown_0203BC90->field_0 = func; + gUnknown_0203BC90->field_50 = 0; +} + +void sub_8166380(void) +{ + switch (gUnknown_0203BC90->field_50) + { + case 0: + gUnknown_0203BCAC->field_0[0x7B10] = 0xFF; + sub_81D1ED4(gUnknown_0203BCAC->field_7C58); + gUnknown_0203BC90->field_50++; + break; + case 1: + ResetSpriteData(); + FreeAllSpritePalettes(); + gUnknown_0203BC90->field_50++; + break; + case 2: + SetVBlankCallback(NULL); + CpuFill32(0, (void*)(VRAM), VRAM_SIZE); + gUnknown_0203BC90->field_50++; + break; + case 3: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_085DFCCC, ARRAY_COUNT(gUnknown_085DFCCC)); + InitWindows(gUnknown_085DFCDC); + DeactivateAllTextPrinters(); + sub_809882C(0, 0x97, 0xE0); + gUnknown_0203BC90->field_50++; + break; + case 4: + gUnknown_0203BC90->field_50++; + break; + case 5: + if (!sub_8168328()) + { + gUnknown_0203BC90->field_50++; + } + break; + case 6: + gKeyRepeatStartDelay = 20; + sub_8167420(); + gUnknown_0203BC90->field_50++; + break; + case 7: + if (!sub_8167930()) + { + gUnknown_0203BC90->field_50++; + } + break; + case 8: + sub_8167608(0); + sub_8167760(); + gUnknown_0203BC90->field_50++; + break; + case 9: + if (!sub_81D312C(&gUnknown_0203BCAC->field_0[0x7B0E])) + { + gUnknown_0203BC90->field_50++; + } + break; + case 10: + gUnknown_0203BC90->field_50++; + break; + case 11: + sub_81D2754(gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_0[0x7C6C]); + sub_81D20AC(gUnknown_0203BCAC->field_7C58); + gUnknown_0203BC90->field_50++; + break; + case 12: + if (!sub_81D20BC(gUnknown_0203BCAC->field_7C58)) + { + sub_81D1F84(gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_7C58[0x14], &gUnknown_0203BCAC->field_7C58[0x14]); + gUnknown_0203BC90->field_50++; + } + break; + case 13: + sub_81D2230(gUnknown_0203BCAC->field_7C58); + gUnknown_0203BC90->field_50++; + break; + case 14: + PutWindowTilemap(0); + PutWindowTilemap(1); + sub_8167BA0(0, 1); + gUnknown_0203BC90->field_50++; + break; + case 15: + sub_816636C(sub_8166564); + break; + } +} -- cgit v1.2.3 From 37ae6a7758d0f16394f31c367f5c1eb86d34327f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 10 Dec 2017 16:38:27 +0100 Subject: move more pokeblock data to C and label --- src/use_pokeblock.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/use_pokeblock.c') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 64d1cb4a5..1a210b101 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -37,12 +37,6 @@ struct UsePokeblockStruct struct UsePokeblockSubStruct info; }; -extern struct UsePokeblockStruct *gUnknown_0203BCAC; -extern struct UsePokeblockSubStruct *gUnknown_0203BC90; -extern struct Pokeblock *gUnknown_0203BC98; -extern void (*gUnknown_0203BC94)(void); -extern u8 gPokeblockMonId; - extern u16 gKeyRepeatStartDelay; // this file's functions @@ -64,6 +58,17 @@ void sub_8167BA0(u16 arg0, u8 copyToVramMode); extern const struct BgTemplate gUnknown_085DFCCC[4]; extern const struct WindowTemplate gUnknown_085DFCDC[]; +// ram variables +EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL; +EWRAM_DATA void (*gUnknown_0203BC94)(void) = NULL; +EWRAM_DATA struct Pokeblock *gUnknown_0203BC98 = NULL; +EWRAM_DATA u8 gPokeblockMonId = 0; +EWRAM_DATA s16 gPokeblockGain = 0; +EWRAM_DATA void *gUnknown_0203BCA0 = NULL; +EWRAM_DATA void *gUnknown_0203BCA4 = NULL; +EWRAM_DATA void *gUnknown_0203BCA8 = NULL; +EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; + void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { gUnknown_0203BCAC = AllocZeroed(0x806C); -- cgit v1.2.3 From b4d10ab7aba76bf9ab16f07cc9409083388c603d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 10 Dec 2017 19:02:51 +0100 Subject: split pokeblock files --- src/use_pokeblock.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/use_pokeblock.c') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 1a210b101..12f475c93 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -69,6 +69,10 @@ EWRAM_DATA void *gUnknown_0203BCA4 = NULL; EWRAM_DATA void *gUnknown_0203BCA8 = NULL; EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; +// const rom data +// todo: make it static once the file is decompiled + +// code void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { gUnknown_0203BCAC = AllocZeroed(0x806C); -- cgit v1.2.3