through sub_81081AC

This commit is contained in:
PikalaxALT
2020-01-17 15:11:46 -05:00
parent 055e5d2bbf
commit f6e050cf35
6 changed files with 287 additions and 514 deletions
+281
View File
@@ -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;
}