diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-09-28 12:33:01 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-09-28 12:33:01 -0400 |
commit | db3d5c90433a94747c23e48cf85badfc5286b07f (patch) | |
tree | 41cc0e3434015001f9b8a858399459c7a400a731 /src | |
parent | 3ab2de40cf164a86af27eff7a46215d3d927f47f (diff) |
Start berry_pouch decomp
Diffstat (limited to 'src')
-rw-r--r-- | src/berry_pouch.c | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/src/berry_pouch.c b/src/berry_pouch.c new file mode 100644 index 000000000..c9894923c --- /dev/null +++ b/src/berry_pouch.c @@ -0,0 +1,233 @@ +#include "global.h" +#include "malloc.h" +#include "bg.h" +#include "palette.h" +#include "text.h" +#include "berry_pouch.h" +#include "item_menu.h" +#include "menu_helpers.h" +#include "new_menu_helpers.h" +#include "scanline_effect.h" +#include "item_menu_icons.h" +#include "list_menu.h" +#include "constants/items.h" + +struct BerryPouchStruct_203F36C +{ + u32 unk_000; + u8 filler_004[2]; + u8 unk_006; + u8 filler_007[2]; + u8 unk_009; + u8 filler_00a[2]; + u8 filler_00c[0x800]; + u16 unk_80C[4]; +}; + +struct BerryPouchStruct_203F370 +{ + void (*savedCallback)(void); + u8 unk_04; + u8 unk_05; + u8 filler_06[2]; + u16 unk_08; + u16 unk_0A; +}; + +EWRAM_DATA struct BerryPouchStruct_203F36C *gUnknown_203F36C = NULL; +EWRAM_DATA struct BerryPouchStruct_203F370 gUnknown_203F370 = {}; + +void sub_813CE30(void); +bool8 sub_813CE5C(void); +void sub_813D00C(void); +void sub_813D048(u8 taskId); +void sub_813D07C(void); +bool8 sub_813D0E4(void); +bool8 sub_813D1C0(void); +void sub_813D204(void); +void sub_813D5BC(void); +void sub_813D6A4(void); +void sub_813D6F4(void); +void sub_813D754(void); +void sub_813D7CC(void); +void sub_813D8AC(void); +void sub_813DA68(u8 taskId); +void sub_813E910(void); +void sub_813EC08(void); + +void InitBerryPouch(u8 a0, void (*savedCallback)(void), u8 a2) +{ + u8 i; + + gUnknown_203F36C = Alloc(sizeof(struct BerryPouchStruct_203F36C)); + if (gUnknown_203F36C == NULL) + { + SetMainCallback2(savedCallback); + } + else + { + if (a0 != 6) + gUnknown_203F370.unk_04 = a0; + if (a2 != 0xFF) + gUnknown_203F370.unk_05 = a2; + if (savedCallback != NULL) + gUnknown_203F370.savedCallback = savedCallback; + gUnknown_203F36C->unk_000 = 0; + gUnknown_203F36C->unk_009 = 0; + gUnknown_203F36C->unk_006 = 0xFF; + for (i = 0; i < 4; i++) + gUnknown_203F36C->unk_80C[i] = 0; + gTextFlags.autoScroll = FALSE; + gSpecialVar_ItemId = ITEM_NONE; + SetMainCallback2(sub_813CE30); + } +} + +void sub_813CE00(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + DoScheduledBgTilemapCopiesToVram(); + UpdatePaletteFade(); +} + +void sub_813CE1C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_813CE30(void) +{ + while (1) + { + if (sub_80BF72C() == TRUE) + break; + if (sub_813CE5C() == TRUE) + break; + if (MenuHelpers_LinkSomething() == TRUE) + break; + } +} + +bool8 sub_813CE5C(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + ClearScheduledBgCopiesToVram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + ResetPaletteFade(); + gMain.state++; + break; + case 4: + ResetSpriteData(); + gMain.state++; + break; + case 5: + ResetItemMenuIconState(); + gMain.state++; + break; + case 6: + if (!MenuHelpers_LinkSomething()) + ResetTasks(); + gMain.state++; + break; + case 7: + sub_813D07C(); + gUnknown_203F36C->unk_80C[0] = 0; + gMain.state++; + break; + case 8: + if (sub_813D0E4()) + gMain.state++; + break; + case 9: + sub_813E910(); + gMain.state++; + break; + case 10: + sub_813D8AC(); + sub_813D6F4(); + sub_813D754(); + gMain.state++; + break; + case 11: + if (!sub_813D1C0()) + { + sub_813D00C(); + return TRUE; + } + gMain.state++; + break; + case 12: + sub_813D204(); + gMain.state++; + break; + case 13: + sub_813D6A4(); + gMain.state++; + break; + case 14: + taskId = CreateTask(sub_813DA68, 0); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + gTasks[taskId].data[8] = 0; + gMain.state++; + break; + case 15: + sub_813EC08(); + gMain.state++; + break; + case 16: + sub_813D5BC(); + gMain.state++; + break; + case 17: + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + gMain.state++; + break; + case 18: + BeginNormalPaletteFade(0xFFFFFFFF, -2, 16, 0, RGB_BLACK); + gMain.state++; + break; + default: + SetVBlankCallback(sub_813CE1C); + SetMainCallback2(sub_813CE00); + return TRUE; + } + + return FALSE; +} + +void sub_813D00C(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + CreateTask(sub_813D048, 0); + SetVBlankCallback(sub_813CE1C); + SetMainCallback2(sub_813CE00); +} + +void sub_813D048(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203F370.savedCallback); + sub_813D7CC(); + DestroyTask(taskId); + } +} |