diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-17 15:11:46 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-17 15:11:46 -0500 |
commit | f6e050cf354a6ca3f5ea3a57496cc0ae2aac49dd (patch) | |
tree | ec6e828cd4852ed29f1dee0b8310fa51136a1cb0 /src | |
parent | 055e5d2bbff31a98bcdffec0d7392e7ce77bcd46 (diff) |
through sub_81081AC
Diffstat (limited to 'src')
-rw-r--r-- | src/item_menu.c | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/src/item_menu.c b/src/item_menu.c new file mode 100644 index 000000000..9128d0856 --- /dev/null +++ b/src/item_menu.c @@ -0,0 +1,281 @@ +#include "global.h" +#include "bag.h" +#include "battle_controllers.h" +#include "bg.h" +#include "help_system.h" +#include "item_menu.h" +#include "item_menu_icons.h" +#include "list_menu.h" +#include "malloc.h" +#include "new_menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "scanline_effect.h" +#include "text.h" +#include "constants/items.h" + +struct BagMenuAlloc +{ + u32 field_00; + u8 field_04; + u8 field_05_0:4; + u8 field_05_4:2; + u8 field_05_6:2; + u16 field_06; + u8 field_08; + u8 field_09; + u8 filler_0A[6]; + u8 field_10[4]; +}; + +EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; +EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; +EWRAM_DATA void * gUnknown_203AD14 = NULL; +EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; +EWRAM_DATA u8 (*gUnknown_203AD1C)[20] = NULL; + +void sub_8107F10(void); +bool8 sub_8107F3C(void); +void sub_810813C(void); +void sub_8108178(u8 taskId); +void sub_81081AC(void); +bool8 sub_81081D0(void); +bool8 sub_8108240(void); +u8 sub_8108388(u8 location); +bool8 sub_81083F4(void); +void sub_810842C(u8 a0); +void sub_81087EC(void); +void sub_8108888(void); +void sub_81088D8(void); +void sub_8108A68(void); +void sub_8108A84(void); +void sub_8108B04(void); +void sub_8108C10(void); +void sub_8108E54(void); + +void GoToBagMenu(u8 location, u8 a1, MainCallback a2) +{ + u8 i; + + sub_81081AC(); + gUnknown_203AD10 = Alloc(sizeof(struct BagMenuAlloc)); + if (gUnknown_203AD10 == NULL) + SetMainCallback2(a2); + else + { + if (location != 11) + gUnknown_203ACFC.location = location; + if (a2 != NULL) + gUnknown_203ACFC.bagCallback = a2; + gUnknown_203AD10->field_00 = 0; + gUnknown_203AD10->field_04 = 0xFF; + gUnknown_203AD10->field_05_4 = 0; + gUnknown_203AD10->field_05_6 = 0; + gUnknown_203AD10->field_08 = 0xFF; + gUnknown_203AD10->field_09 = 0xFF; + if (location == 3) + gUnknown_203AD10->field_05_0 = 1; + else if (location == 6) + gUnknown_203AD10->field_05_0 = 2; + else + gUnknown_203AD10->field_05_0 = 0; + for (i = 0; i < 4; i++) + { + gUnknown_203AD10->field_10[i] = 0; + } + if (a1 == 0 || a1 == 1 || a1 == 2) + gUnknown_203ACFC.unk6 = a1; + gTextFlags.autoScroll = FALSE; + gSpecialVar_ItemId = ITEM_NONE; + SetMainCallback2(sub_8107F10); + } +} + +void CB2_BagMenuFromStartMenu(void) +{ + GoToBagMenu(0, 3, CB2_ReturnToFieldWithOpenMenu); +} + +void sub_8107ECC(void) +{ + GoToBagMenu(5, 3, SetCB2ToReshowScreenAfterMenu2); +} + +void sub_8107EE0(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + DoScheduledBgTilemapCopiesToVram(); + UpdatePaletteFade(); +} + +void sub_8107EFC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8107F10(void) +{ + while (1) + { + if ((u8)sub_80BF72C() == TRUE) + break; + if (sub_8107F3C() == TRUE) + break; + if (MenuHelpers_LinkSomething() == TRUE) + break; + } +} + +bool8 sub_8107F3C(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(); + gPaletteFade.bufferTransferDisabled = TRUE; + 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: + if (sub_81081D0()) + { + gUnknown_203AD10->field_10[0] = 0; + gMain.state++; + } + else + { + sub_810813C(); + return TRUE; + } + break; + case 8: + if (sub_8108240() == TRUE) + gMain.state++; + break; + case 9: + sub_810B858(); + gMain.state++; + break; + case 10: + sub_8108E54(); + sub_8108A68(); + sub_8108A84(); + gMain.state++; + break; + case 11: + if (!sub_81083F4()) + { + sub_810813C(); + return TRUE; + } + gMain.state++; + break; + case 12: + sub_810842C(gUnknown_203ACFC.unk6); + gMain.state++; + break; + case 13: + if (gUnknown_203ACFC.location != 3) + sub_81087EC(); + else + sub_810B994(); + gMain.state++; + break; + case 14: + taskId = sub_8108388(gUnknown_203ACFC.location); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.unk6], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.unk6]); + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[8] = 0; + gMain.state++; + break; + case 15: + sub_80984FC(gUnknown_203ACFC.unk6); + gMain.state++; + break; + case 16: + sub_8108888(); + sub_81088D8(); + gMain.state++; + break; + case 17: + sub_80985E4(); + gMain.state++; + break; + case 18: + sub_8108C10(); + gMain.state++; + break; + case 19: + if (gUnknown_203ACFC.location == 3) + HelpSystem_SetSomeVariable2(29); + else + HelpSystem_SetSomeVariable2(9); + gPaletteFade.bufferTransferDisabled = FALSE; + gMain.state++; + break; + default: + SetVBlankCallback(sub_8107EFC); + SetMainCallback2(sub_8107EE0); + return TRUE; + } + return FALSE; +} + +void sub_810813C(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + CreateTask(sub_8108178, 0); + SetVBlankCallback(sub_8107EFC); + SetMainCallback2(sub_8107EE0); +} + +void sub_8108178(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203ACFC.bagCallback); + sub_8108B04(); + DestroyTask(taskId); + } +} + +void sub_81081AC(void) +{ + gUnknown_203AD10 = NULL; + gUnknown_203AD14 = NULL; + gUnknown_203AD18 = NULL; + gUnknown_203AD1C = NULL; +} |