decompiled up to sub_81AC10C
This commit is contained in:
283
src/item_menu.c
283
src/item_menu.c
@@ -39,7 +39,8 @@ struct unkBagStruct {
|
||||
void* unk0;
|
||||
u8 unk4[0x800];
|
||||
u8 unk804;
|
||||
u8 filler4[11];
|
||||
u8 filler4;
|
||||
u8 unk806[10];
|
||||
u8 unk810[10];
|
||||
u8 unk81A;
|
||||
u8 unk81B:4;
|
||||
@@ -92,6 +93,8 @@ extern u8 GetMenuCursorDimensionByFont(u8, u8);
|
||||
extern u8 AddScrollIndicatorArrowPair(void*, void*);
|
||||
extern void sub_80D6FB4(struct BagPocket*);
|
||||
extern void sub_80D6F64(struct BagPocket*);
|
||||
extern u8 GetLRKeysState(void);
|
||||
extern void sub_81AC23C(u8);
|
||||
|
||||
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
|
||||
void CB2_Bag(void);
|
||||
@@ -101,7 +104,7 @@ bool8 load_bag_menu_graphics(void);
|
||||
void setup_bag_menu_textboxes(void);
|
||||
void allocate_bag_item_list_buffers(void);
|
||||
void load_bag_item_list_buffers(u8);
|
||||
void bag_menu_print_pocket_names(u8*, u8);
|
||||
void bag_menu_print_pocket_names(u8*, u8*);
|
||||
void bag_menu_copy_pocket_name_to_window(u8);
|
||||
void bag_menu_draw_pocket_indicator_square(u8, u8);
|
||||
void AddBagVisualObject(u8);
|
||||
@@ -129,9 +132,13 @@ void set_callback3_to_bag(u8);
|
||||
void sub_81ABC54(u8, s16);
|
||||
u8 bag_menu_add_window(u8);
|
||||
u8 GetSwitchBagPocketDirection(void);
|
||||
void SwitchBagPocket(u8, s8, u8);
|
||||
void SwitchBagPocket(u8, s16, u16);
|
||||
bool8 sub_81AC2C0(void);
|
||||
void bag_menu_swap_items(u8);
|
||||
void SetBagVisualPocketId(u8, u8);
|
||||
void RemoveBagObject(u8);
|
||||
void AddSwitchPocketRotatingBallObject(s16);
|
||||
void sub_81AC10C(u8);
|
||||
|
||||
extern u8 *gPocketNamesStringsTable[];
|
||||
extern struct BgTemplate gUnknown_08613F90[];
|
||||
@@ -842,3 +849,273 @@ void set_callback3_to_bag(u8 taskId)
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
gTasks[taskId].func = Task_BagMenu;
|
||||
}
|
||||
|
||||
u8 GetSwitchBagPocketDirection(void)
|
||||
{
|
||||
u8 LRKeys;
|
||||
if (gUnknown_0203CE54->unk81B != 0)
|
||||
return 0;
|
||||
LRKeys = GetLRKeysState();
|
||||
if ((gMain.newKeys & DPAD_LEFT) || LRKeys == 1)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
return 1;
|
||||
}
|
||||
if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == 2)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
|
||||
{
|
||||
if (deltaBagPocketId == 1 && *bagPocketId == 4)
|
||||
*bagPocketId = 0;
|
||||
else if (deltaBagPocketId == -1 && *bagPocketId == 0)
|
||||
{
|
||||
*bagPocketId = 4;
|
||||
}
|
||||
else
|
||||
*bagPocketId += deltaBagPocketId;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||
{
|
||||
s16* data = gTasks[taskId].data;
|
||||
u8 pocketId;
|
||||
|
||||
|
||||
data[13] = 0;
|
||||
data[12] = 0;
|
||||
data[11] = deltaBagPocketId;
|
||||
if (a3 == 0)
|
||||
{
|
||||
ClearWindowTilemap(0);
|
||||
ClearWindowTilemap(1);
|
||||
sub_81AE6C8(data[0], &gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
gSprites[gUnknown_0203CE54->unk806[gUnknown_0203CE54->unk81B_1 ^ 1]].invisible = 1;
|
||||
sub_81AB824();
|
||||
}
|
||||
pocketId = gUnknown_0203CE58.pocket;
|
||||
ChangeBagPocketId(&pocketId, deltaBagPocketId);
|
||||
if (deltaBagPocketId == 1)
|
||||
{
|
||||
bag_menu_print_pocket_names(gPocketNamesStringsTable[gUnknown_0203CE58.pocket], gPocketNamesStringsTable[pocketId]);
|
||||
bag_menu_copy_pocket_name_to_window(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
bag_menu_print_pocket_names(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gUnknown_0203CE58.pocket]);
|
||||
bag_menu_copy_pocket_name_to_window(8);
|
||||
}
|
||||
bag_menu_draw_pocket_indicator_square(gUnknown_0203CE58.pocket, 0);
|
||||
bag_menu_draw_pocket_indicator_square(pocketId, 1);
|
||||
FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16);
|
||||
schedule_bg_copy_tilemap_to_vram(2);
|
||||
SetBagVisualPocketId(pocketId, 1);
|
||||
RemoveBagObject(1);
|
||||
AddSwitchPocketRotatingBallObject(deltaBagPocketId);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func);
|
||||
}
|
||||
#else
|
||||
__attribute__((naked))
|
||||
void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
|
||||
{
|
||||
asm(".syntax unified\n\
|
||||
push {r4-r6,lr}\n\
|
||||
sub sp, 0xC\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r6, r0, 24\n\
|
||||
lsls r1, 16\n\
|
||||
lsrs r5, r1, 16\n\
|
||||
lsls r2, 16\n\
|
||||
lsls r0, r6, 2\n\
|
||||
adds r0, r6\n\
|
||||
lsls r0, 3\n\
|
||||
ldr r1, =gTasks + 0x8\n\
|
||||
adds r4, r0, r1\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r4, 0x1A]\n\
|
||||
strh r0, [r4, 0x18]\n\
|
||||
strh r5, [r4, 0x16]\n\
|
||||
cmp r2, 0\n\
|
||||
bne _081AC026\n\
|
||||
movs r0, 0\n\
|
||||
bl ClearWindowTilemap\n\
|
||||
movs r0, 0x1\n\
|
||||
bl ClearWindowTilemap\n\
|
||||
ldrb r0, [r4]\n\
|
||||
ldr r3, =gUnknown_0203CE58\n\
|
||||
ldrb r2, [r3, 0x5]\n\
|
||||
lsls r2, 1\n\
|
||||
adds r1, r3, 0\n\
|
||||
adds r1, 0x12\n\
|
||||
adds r1, r2, r1\n\
|
||||
adds r3, 0x8\n\
|
||||
adds r2, r3\n\
|
||||
bl sub_81AE6C8\n\
|
||||
movs r0, 0\n\
|
||||
bl schedule_bg_copy_tilemap_to_vram\n\
|
||||
ldr r3, =gSprites\n\
|
||||
ldr r0, =gUnknown_0203CE54\n\
|
||||
ldr r2, [r0]\n\
|
||||
ldr r1, =0x0000081b\n\
|
||||
adds r0, r2, r1\n\
|
||||
ldrb r1, [r0]\n\
|
||||
lsls r1, 26\n\
|
||||
lsrs r1, 30\n\
|
||||
movs r0, 0x1\n\
|
||||
eors r0, r1\n\
|
||||
adds r2, r0\n\
|
||||
ldr r0, =0x00000806\n\
|
||||
adds r2, r0\n\
|
||||
ldrb r1, [r2]\n\
|
||||
lsls r0, r1, 4\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 2\n\
|
||||
adds r0, r3\n\
|
||||
adds r0, 0x3E\n\
|
||||
ldrb r1, [r0]\n\
|
||||
movs r2, 0x4\n\
|
||||
orrs r1, r2\n\
|
||||
strb r1, [r0]\n\
|
||||
bl sub_81AB824\n\
|
||||
_081AC026:\n\
|
||||
ldr r4, =gUnknown_0203CE58\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
add r0, sp, 0x8\n\
|
||||
strb r1, [r0]\n\
|
||||
lsls r1, r5, 24\n\
|
||||
asrs r1, 24\n\
|
||||
bl ChangeBagPocketId\n\
|
||||
lsls r0, r5, 16\n\
|
||||
asrs r1, r0, 16\n\
|
||||
adds r5, r0, 0\n\
|
||||
cmp r1, 0x1\n\
|
||||
bne _081AC07C\n\
|
||||
ldr r2, =gPocketNamesStringsTable\n\
|
||||
ldrb r0, [r4, 0x5]\n\
|
||||
lsls r0, 2\n\
|
||||
adds r0, r2\n\
|
||||
ldr r0, [r0]\n\
|
||||
add r1, sp, 0x8\n\
|
||||
ldrb r1, [r1]\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r2\n\
|
||||
ldr r1, [r1]\n\
|
||||
bl bag_menu_print_pocket_names\n\
|
||||
movs r0, 0\n\
|
||||
bl bag_menu_copy_pocket_name_to_window\n\
|
||||
b _081AC09A\n\
|
||||
.pool\n\
|
||||
_081AC07C:\n\
|
||||
ldr r2, =gPocketNamesStringsTable\n\
|
||||
add r0, sp, 0x8\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 2\n\
|
||||
adds r0, r2\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldrb r1, [r4, 0x5]\n\
|
||||
lsls r1, 2\n\
|
||||
adds r1, r2\n\
|
||||
ldr r1, [r1]\n\
|
||||
bl bag_menu_print_pocket_names\n\
|
||||
movs r0, 0x8\n\
|
||||
bl bag_menu_copy_pocket_name_to_window\n\
|
||||
_081AC09A:\n\
|
||||
ldr r0, =gUnknown_0203CE58\n\
|
||||
ldrb r0, [r0, 0x5]\n\
|
||||
movs r1, 0\n\
|
||||
bl bag_menu_draw_pocket_indicator_square\n\
|
||||
add r0, sp, 0x8\n\
|
||||
ldrb r0, [r0]\n\
|
||||
movs r1, 0x1\n\
|
||||
bl bag_menu_draw_pocket_indicator_square\n\
|
||||
movs r0, 0xF\n\
|
||||
str r0, [sp]\n\
|
||||
movs r0, 0x10\n\
|
||||
str r0, [sp, 0x4]\n\
|
||||
movs r0, 0x2\n\
|
||||
movs r1, 0xB\n\
|
||||
movs r2, 0xE\n\
|
||||
movs r3, 0x2\n\
|
||||
bl FillBgTilemapBufferRect_Palette0\n\
|
||||
movs r0, 0x2\n\
|
||||
bl schedule_bg_copy_tilemap_to_vram\n\
|
||||
add r0, sp, 0x8\n\
|
||||
ldrb r0, [r0]\n\
|
||||
movs r1, 0x1\n\
|
||||
bl SetBagVisualPocketId\n\
|
||||
movs r0, 0x1\n\
|
||||
bl RemoveBagObject\n\
|
||||
asrs r0, r5, 16\n\
|
||||
bl AddSwitchPocketRotatingBallObject\n\
|
||||
ldr r1, =sub_81AC10C\n\
|
||||
ldr r2, =gTasks\n\
|
||||
lsls r0, r6, 2\n\
|
||||
adds r0, r6\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r2\n\
|
||||
ldr r2, [r0]\n\
|
||||
adds r0, r6, 0\n\
|
||||
bl SetTaskFuncWithFollowupFunc\n\
|
||||
add sp, 0xC\n\
|
||||
pop {r4-r6}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n\
|
||||
.syntax divided\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_81AC10C(u8 taskId)
|
||||
{
|
||||
s16* data = gTasks[taskId].data;
|
||||
|
||||
if (!sub_81221AC() && !IsWallysBag())
|
||||
{
|
||||
switch (GetSwitchBagPocketDirection())
|
||||
{
|
||||
case 1:
|
||||
ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
SwitchBagPocket(taskId, -1, 1);
|
||||
return;
|
||||
case 2:
|
||||
ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
SwitchBagPocket(taskId, 1, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
switch (data[13])
|
||||
{
|
||||
case 0:
|
||||
sub_81AC23C(data[12]);
|
||||
if (!(++data[12] & 1))
|
||||
{
|
||||
if (data[11] == 1)
|
||||
bag_menu_copy_pocket_name_to_window(data[12] >> 1);
|
||||
else
|
||||
bag_menu_copy_pocket_name_to_window(8 - (data[12] >> 1));
|
||||
}
|
||||
if (data[12] == 16)
|
||||
data[13]++;
|
||||
break;
|
||||
case 1:
|
||||
ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]);
|
||||
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
|
||||
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.unk12[gUnknown_0203CE58.pocket], gUnknown_0203CE58.unk8[gUnknown_0203CE58.pocket]);
|
||||
PutWindowTilemap(1);
|
||||
PutWindowTilemap(2);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
bag_menu_add_pocket_scroll_arrow_indicators_maybe();
|
||||
bag_menu_add_list_scroll_arrow_indicators_maybe();
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user