summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-01-18 12:59:26 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2020-01-18 12:59:26 -0500
commit24e199fdfdce8e17f65578b7446c2a8368b3a0be (patch)
tree5e4aa6f443d6cbd8ea9dacc48ad4fdb0e29e5bd5
parentdfcfe6d8e1942349adfefc8e79255dcd8befca0a (diff)
through sub_81090DC
-rw-r--r--asm/item_menu.s416
-rw-r--r--include/item_menu.h2
-rw-r--r--src/item_menu.c140
3 files changed, 137 insertions, 421 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 2444ffeb0..60bbe8635 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -5,422 +5,6 @@
.text
- thumb_func_start sub_8108DC8
-sub_8108DC8: @ 8108DC8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, r5, 3
- ldr r0, _08108E3C @ =gBagPockets
- adds r4, r1, r0
- ldr r0, [r4]
- ldrb r1, [r4, 0x4]
- bl BagPocketCompaction
- ldr r3, _08108E40 @ =gUnknown_203AD10
- ldr r0, [r3]
- adds r0, 0xA
- adds r0, r5
- movs r1, 0
- strb r1, [r0]
- movs r2, 0
- ldrb r0, [r4, 0x4]
- cmp r2, r0
- bcs _08108E1C
- ldr r0, [r4]
- ldrh r0, [r0]
- cmp r0, 0
- beq _08108E1C
-_08108DF8:
- ldr r0, [r3]
- adds r0, 0xA
- adds r0, r5
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldrb r0, [r4, 0x4]
- cmp r2, r0
- bcs _08108E1C
- ldr r0, [r4]
- lsls r1, r2, 2
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _08108DF8
-_08108E1C:
- ldr r0, _08108E40 @ =gUnknown_203AD10
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xA
- adds r0, r5
- ldrb r0, [r0]
- adds r2, r0, 0x1
- cmp r2, 0x6
- ble _08108E44
- adds r0, r1, 0
- adds r0, 0xD
- adds r0, r5
- movs r1, 0x6
- strb r1, [r0]
- b _08108E4C
- .align 2, 0
-_08108E3C: .4byte gBagPockets
-_08108E40: .4byte gUnknown_203AD10
-_08108E44:
- adds r0, r1, 0
- adds r0, 0xD
- adds r0, r5
- strb r2, [r0]
-_08108E4C:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8108DC8
-
- thumb_func_start sub_8108E54
-sub_8108E54: @ 8108E54
- push {r4,lr}
- movs r4, 0
-_08108E58:
- adds r0, r4, 0
- bl sub_8108DC8
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _08108E58
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8108E54
-
- thumb_func_start DisplayItemMessageInBag
-DisplayItemMessageInBag: @ 8108E70
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x10
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- mov r9, r3
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, _08108EDC @ =gTasks+0x8
- adds r4, r0
- movs r0, 0x5
- bl sub_810BA70
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- bl GetTextSpeedSetting
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r4, 0x14]
- str r6, [sp]
- str r0, [sp, 0x4]
- mov r0, r8
- str r0, [sp, 0x8]
- mov r0, r9
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r2, 0x6D
- movs r3, 0xD
- bl DisplayMessageAndContinueTask
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08108EDC: .4byte gTasks+0x8
- thumb_func_end DisplayItemMessageInBag
-
- thumb_func_start ItemMenu_SetExitCallback
-ItemMenu_SetExitCallback: @ 8108EE0
- ldr r1, _08108EE8 @ =gUnknown_203AD10
- ldr r1, [r1]
- str r0, [r1]
- bx lr
- .align 2, 0
-_08108EE8: .4byte gUnknown_203AD10
- thumb_func_end ItemMenu_SetExitCallback
-
- thumb_func_start sub_8108EEC
-sub_8108EEC: @ 8108EEC
- lsls r0, 24
- ldr r1, _08108F08 @ =gUnknown_203ACFC
- lsrs r0, 23
- adds r2, r1, 0
- adds r2, 0xE
- adds r2, r0, r2
- adds r1, 0x8
- adds r0, r1
- ldrb r0, [r0]
- ldrb r2, [r2]
- adds r0, r2
- lsls r0, 24
- lsrs r0, 24
- bx lr
- .align 2, 0
-_08108F08: .4byte gUnknown_203ACFC
- thumb_func_end sub_8108EEC
-
- thumb_func_start sub_8108F0C
-sub_8108F0C: @ 8108F0C
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _08108F78 @ =gTasks+0x8
- adds r7, r0, r1
- ldr r0, _08108F7C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08108F2C
- b _081090C6
-_08108F2C:
- ldr r0, _08108F80 @ =sub_8108CFC
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08108F3C
- b _081090C6
-_08108F3C:
- bl sub_80BF72C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08108F4A
- b _081090C6
-_08108F4A:
- ldr r4, _08108F84 @ =gUnknown_203ACFC
- ldrb r1, [r4, 0x6]
- adds r0, r6, 0
- bl sub_8109168
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08108F8C
- cmp r0, 0x2
- beq _08108F94
- ldr r0, _08108F88 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08108FE4
- adds r5, r4, 0
- ldrb r0, [r5, 0x4]
- cmp r0, 0
- bne _08108FE4
- b _08108FA0
- .align 2, 0
-_08108F78: .4byte gTasks+0x8
-_08108F7C: .4byte gPaletteFade
-_08108F80: .4byte sub_8108CFC
-_08108F84: .4byte gUnknown_203ACFC
-_08108F88: .4byte gMain
-_08108F8C:
- movs r1, 0x1
- negs r1, r1
- adds r0, r6, 0
- b _08108F98
-_08108F94:
- adds r0, r6, 0
- movs r1, 0x1
-_08108F98:
- movs r2, 0
- bl sub_81091D0
- b _081090C6
-_08108FA0:
- ldrb r0, [r7]
- mov r4, sp
- adds r4, 0x2
- mov r1, sp
- adds r2, r4, 0
- bl ListMenuGetScrollAndRow
- mov r0, sp
- ldrh r1, [r0]
- ldrh r0, [r4]
- adds r1, r0
- ldr r0, _08108FE0 @ =gUnknown_203AD10
- ldr r0, [r0]
- adds r0, 0xA
- ldrh r5, [r5, 0x6]
- adds r0, r5
- ldrb r0, [r0]
- cmp r1, r0
- beq _08108FE4
- movs r0, 0x5
- bl PlaySE
- mov r0, sp
- ldrh r1, [r4]
- ldrh r0, [r0]
- adds r1, r0
- lsls r1, 16
- asrs r1, 16
- adds r0, r6, 0
- bl sub_81093B8
- b _081090C6
- .align 2, 0
-_08108FE0: .4byte gUnknown_203AD10
-_08108FE4:
- ldrb r0, [r7]
- bl ListMenu_ProcessInput
- adds r4, r0, 0
- ldrb r0, [r7]
- ldr r5, _08109014 @ =gUnknown_203ACFC
- ldrh r2, [r5, 0x6]
- lsls r2, 1
- adds r1, r5, 0
- adds r1, 0xE
- adds r1, r2, r1
- adds r3, r5, 0
- adds r3, 0x8
- adds r2, r3
- bl ListMenuGetScrollAndRow
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _08109018
- adds r0, 0x1
- cmp r4, r0
- bne _08109044
- b _081090C6
- .align 2, 0
-_08109014: .4byte gUnknown_203ACFC
-_08109018:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _08109038 @ =gSpecialVar_ItemId
- movs r0, 0
- strh r0, [r1]
- bl sub_8108CB4
- ldr r1, _0810903C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08109040 @ =ItemMenu_StartFadeToExitCallback
- b _081090C4
- .align 2, 0
-_08109038: .4byte gSpecialVar_ItemId
-_0810903C: .4byte gTasks
-_08109040: .4byte ItemMenu_StartFadeToExitCallback
-_08109044:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08109074 @ =gUnknown_203AD10
- ldr r0, [r0]
- adds r0, 0xA
- ldrh r1, [r5, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- cmp r4, r0
- bne _08109084
- ldr r1, _08109078 @ =gSpecialVar_ItemId
- movs r0, 0
- strh r0, [r1]
- bl sub_8108CB4
- ldr r1, _0810907C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _08109080 @ =ItemMenu_StartFadeToExitCallback
- b _081090C4
- .align 2, 0
-_08109074: .4byte gUnknown_203AD10
-_08109078: .4byte gSpecialVar_ItemId
-_0810907C: .4byte gTasks
-_08109080: .4byte ItemMenu_StartFadeToExitCallback
-_08109084:
- bl sub_8108978
- ldrb r0, [r7]
- movs r1, 0x2
- bl bag_menu_print_cursor_
- strh r4, [r7, 0x2]
- ldrb r0, [r5, 0x6]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- adds r1, r4, 0
- bl BagGetQuantityByPocketPosition
- strh r0, [r7, 0x4]
- ldrb r0, [r5, 0x6]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl BagGetItemIdByPocketPosition
- ldr r1, _081090D0 @ =gSpecialVar_ItemId
- strh r0, [r1]
- ldr r1, _081090D4 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _081090D8 @ =sub_81090DC
-_081090C4:
- str r1, [r0]
-_081090C6:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081090D0: .4byte gSpecialVar_ItemId
-_081090D4: .4byte gTasks
-_081090D8: .4byte sub_81090DC
- thumb_func_end sub_8108F0C
-
- thumb_func_start sub_81090DC
-sub_81090DC: @ 81090DC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- bl sub_8109140
- ldr r1, _08109104 @ =gUnknown_8452F34
- ldr r0, _08109108 @ =gUnknown_203ACFC
- ldrb r0, [r0, 0x4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08109104: .4byte gUnknown_8452F34
-_08109108: .4byte gUnknown_203ACFC
- thumb_func_end sub_81090DC
-
thumb_func_start sub_810910C
sub_810910C: @ 810910C
push {r4,lr}
diff --git a/include/item_menu.h b/include/item_menu.h
index e7337ffc4..43159401a 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -34,7 +34,7 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_);
void ItemMenu_StartFadeToExitCallback(u8 taskId);
void sub_8108CB4(void);
void ItemMenu_SetExitCallback(void (*)(void));
-void DisplayItemMessageInBag(u8 taskId, u8 bgId, const u8 * string, TaskFunc followUpFunc);
+void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc);
void sub_810A1F8(u8 taskId);
void sub_8107ECC(void);
void sub_810AF74(void);
diff --git a/src/item_menu.c b/src/item_menu.c
index 5c09791ae..7b42ddaae 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -22,7 +22,7 @@
struct BagMenuAlloc
{
- MainCallback field_00;
+ MainCallback exitCB;
u8 field_04;
u8 field_05_0:4;
u8 itemMenuIcon:2;
@@ -68,12 +68,26 @@ void sub_8108CFC(u8 taskId);
void sub_8108C10(void);
void sub_8108E54(void);
void sub_8108F0C(u8 taskId);
+void sub_81090DC(u8 taskId);
+void sub_8109140(u8 a0);
+u8 sub_8109168(u8 taskId, u8 pocketId);
+void sub_81091D0(u8 taskId, s16 itemIndex, u8 a2);
+void sub_81093B8(u8 taskId, s16 itemIndex);
+void sub_8109BB8(u8 taskId);
void Task_ItemMenuAction_Use(u8 taskId);
void Task_ItemMenuAction_Toss(u8 taskId);
void Task_ItemMenuAction_ToggleSelect(u8 taskId);
void Task_ItemMenuAction_Give(u8 taskId);
void Task_ItemMenuAction_Cancel(u8 taskId);
+void sub_8109DB0(u8 taskId);
+void sub_8109EA8(u8 taskId);
void sub_810A324(u8 taskId);
+void sub_810A370(u8 taskId);
+void sub_810A468(u8 taskId);
+void sub_810A568(u8 taskId);
+void sub_810A720(u8 taskId);
+void sub_810A940(u8 taskId);
+void sub_810AB40(u8 taskId);
bool8 sub_810ADAC(void);
void sub_810AF9C(u8 taskId);
void sub_810B1D4(u8 taskId);
@@ -137,6 +151,7 @@ const struct MenuAction gUnknown_8452EB8[] = {
[ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}}
};
+extern const TaskFunc gUnknown_8452F34[];
extern const u8 gUnknown_8452F60[];
extern const u8 gUnknown_8452F66[];
extern const struct ScrollArrowsTemplate gUnknown_8452F6C;
@@ -156,7 +171,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2)
gUnknown_203ACFC.location = location;
if (a2 != NULL)
gUnknown_203ACFC.bagCallback = a2;
- gUnknown_203AD10->field_00 = NULL;
+ gUnknown_203AD10->exitCB = NULL;
gUnknown_203AD10->field_04 = 0xFF;
gUnknown_203AD10->itemMenuIcon = 0;
gUnknown_203AD10->field_05_6 = 0;
@@ -739,8 +754,8 @@ void sub_8108B8C(u8 taskId)
if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE)
{
DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]);
- if (gUnknown_203AD10->field_00 != NULL)
- SetMainCallback2(gUnknown_203AD10->field_00);
+ if (gUnknown_203AD10->exitCB != NULL)
+ SetMainCallback2(gUnknown_203AD10->exitCB);
else
SetMainCallback2(gUnknown_203ACFC.bagCallback);
sub_8108978();
@@ -826,3 +841,120 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_)
itemSlots[to] = firstSlot;
}
}
+
+void sub_8108DC8(u8 pocketId)
+{
+ u16 i;
+ struct BagPocket * pocket = &gBagPockets[pocketId];
+ BagPocketCompaction(pocket->itemSlots, pocket->capacity);
+ gUnknown_203AD10->nItems[pocketId] = 0;
+ for (i = 0; i < pocket->capacity; i++)
+ {
+ if (pocket->itemSlots[i].itemId == ITEM_NONE)
+ break;
+ gUnknown_203AD10->nItems[pocketId]++;
+ }
+ if (gUnknown_203AD10->nItems[pocketId] + 1 > 6)
+ gUnknown_203AD10->maxShowed[pocketId] = 6;
+ else
+ gUnknown_203AD10->maxShowed[pocketId] = gUnknown_203AD10->nItems[pocketId] + 1;
+}
+
+void sub_8108E54(void)
+{
+ u8 i;
+ for (i = 0; i < 3; i++)
+ sub_8108DC8(i);
+}
+
+void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc)
+{
+ s16 *data = gTasks[taskId].data;
+ data[10] = sub_810BA70(5);
+ FillWindowPixelBuffer(data[10], PIXEL_FILL(1));
+ DisplayMessageAndContinueTask(taskId, data[10], 0x06D, 0x0D, fontId, GetTextSpeedSetting(), string, followUpFunc);
+ ScheduleBgCopyTilemapToVram(0);
+}
+
+void ItemMenu_SetExitCallback(MainCallback cb)
+{
+ gUnknown_203AD10->exitCB = cb;
+}
+
+u8 sub_8108EEC(u8 a0)
+{
+ return gUnknown_203ACFC.cursorPos[a0] + gUnknown_203ACFC.itemsAbove[a0];
+}
+
+void sub_8108F0C(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 cursorPos;
+ u16 itemsAbove;
+ s32 input;
+
+ if (gPaletteFade.active)
+ return;
+ if (FuncIsActiveTask(sub_8108CFC) == TRUE)
+ return;
+ if ((u8)sub_80BF72C() == TRUE)
+ return;
+ switch (sub_8109168(taskId, gUnknown_203ACFC.pocket))
+ {
+ case 1:
+ sub_81091D0(taskId, -1, 0);
+ return;
+ case 2:
+ sub_81091D0(taskId, 1, 0);
+ return;
+ default:
+ if (JOY_NEW(SELECT_BUTTON) && gUnknown_203ACFC.location == 0)
+ {
+ ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove);
+ if (cursorPos + itemsAbove != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket])
+ {
+ PlaySE(SE_SELECT);
+ sub_81093B8(taskId, cursorPos + itemsAbove);
+ return;
+ }
+ }
+ break;
+ }
+ input = ListMenu_ProcessInput(data[0]);
+ ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]);
+ switch (input)
+ {
+ case -1:
+ return;
+ case -2:
+ PlaySE(SE_SELECT);
+ gSpecialVar_ItemId = ITEM_NONE;
+ sub_8108CB4();
+ gTasks[taskId].func = ItemMenu_StartFadeToExitCallback;
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ if (input == gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket])
+ {
+ gSpecialVar_ItemId = ITEM_NONE;
+ sub_8108CB4();
+ gTasks[taskId].func = ItemMenu_StartFadeToExitCallback;
+ }
+ else
+ {
+ sub_8108978();
+ bag_menu_print_cursor_(data[0], 2);
+ data[1] = input;
+ data[2] = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, input);
+ gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, input);
+ gTasks[taskId].func = sub_81090DC;
+ }
+ break;
+ }
+}
+
+void sub_81090DC(u8 taskId)
+{
+ sub_8109140(1);
+ gUnknown_8452F34[gUnknown_203ACFC.location](taskId);
+}