summaryrefslogtreecommitdiff
path: root/src/item_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/item_menu.c')
-rw-r--r--src/item_menu.c237
1 files changed, 236 insertions, 1 deletions
diff --git a/src/item_menu.c b/src/item_menu.c
index bbb91296f..91853588b 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -8,6 +8,8 @@
#include "palette.h"
#include "rom4.h"
#include "sprite.h"
+#include "strings.h"
+#include "strings2.h"
#include "task.h"
#include "text.h"
#include "unknown_task.h"
@@ -22,38 +24,98 @@ struct UnknownStruct1
u8 unk3;
};
+extern u8 gUnknown_02038558;
extern s8 gUnknown_02038559;
extern u8 gUnknown_0203855A;
extern u8 gUnknown_0203855B;
extern u8 gUnknown_0203855C;
+extern u8 gUnknown_02038562;
+extern u8 gUnknown_02038564;
extern u8 gUnknown_03000700;
extern u8 gUnknown_03000701;
+extern const u8 *gUnknown_03000704;
extern struct UnknownStruct1 gUnknown_03005D10[];
extern struct ItemSlot *gUnknown_03005D24;
+extern bool8 gLinkOpen;
extern void gpu_pal_allocator_reset__manage_upper_four(void);
extern void sub_80F9020(void);
extern void sub_80F9988();
+extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16);
extern const struct CompressedSpriteSheet gUnknown_083C1CC8;
extern const struct CompressedSpriteSheet gUnknown_083C1CD0;
extern const struct CompressedSpritePalette gUnknown_083C1CD8;
+const struct BagPocket gBagPockets[NUM_BAG_POCKETS] =
+{
+ // pointer to items, capacity
+ {gSaveBlock1.bagPocket_Items, 20},
+ {gSaveBlock1.bagPocket_PokeBalls, 16},
+ {gSaveBlock1.bagPocket_TMHM, 64},
+ {gSaveBlock1.bagPocket_Berries, 46},
+ {gSaveBlock1.bagPocket_KeyItems, 20},
+};
+
+void sub_80A5B78(u8);
+void sub_80A5F14(u8);
+void sub_80A5F80(u8);
+void sub_80A5FAC(u8);
+void ItemMenu_UseInBattle(u8);
+void sub_80A7124(u8);
+void ItemMenu_Give(u8);
+void sub_80A6178(u8);
+void sub_80A69E0(u8);
+
+const struct MenuAction2 gUnknown_083C1640[] =
+{
+ {OtherText_Use, sub_80A5B78},
+ {OtherText_Toss, sub_80A5F14},
+ {gOtherText_CancelNoTerminator, sub_80A5F80},
+ {OtherText_Register, sub_80A5FAC},
+ {OtherText_Use, ItemMenu_UseInBattle},
+ {gOtherText_CancelNoTerminator, sub_80A7124},
+ {OtherText_Give2, ItemMenu_Give},
+ {OtherText_CheckTag, sub_80A6178},
+ {gOtherText_CancelWithTerminator, NULL},
+ {OtherText_Confirm, sub_80A69E0},
+};
+
+extern const u8 gUnknown_083C1690[][6];
+/*
+const u8 gUnknown_083C1690[][6] =
+{
+ {0, 1, 6, 2, 0, 0},
+ {6, 1, 8, 2, 0, 0},
+ {0, 8, 6, 2, 0, 0},
+ {7, 0, 1, 8, 6, 2},
+ {0, 8, 3, 2, 0, 0},
+};
+*/
+
void sub_80A34E8(void);
bool8 sub_80A3520(void);
void sub_80A362C(void);
void sub_80A3740(void);
+void sub_80A396C(u16 *, u8, u8, u8);
void sub_80A39B8(u16 *, u8);
+void sub_80A39E4(u16 *, u8, u8, s8);
void sub_80A3AC0(u16 *, u8);
-void sub_80A3C34();
+void sub_80A3C34(struct ItemSlot *, u32);
void sub_80A3D08(void);
+void sub_80A3D24(u8);
void sub_80A3D40(void);
void sub_80A48E8();
void ItemListMenu_InitDescription();
+void ItemListMenu_ChangeDescription();
+void sub_80A4F68(u8);
+void sub_80A50C8(u8);
void ItemListMenu_InitMenu(void);
void sub_80A740C(void);
void sub_80A751C(void);
+void sub_80A7590(void);
void sub_80A7630(void);
+void sub_80A76A0(void);
void sub_80A770C(void);
void sub_80A7828(void);
void sub_80A78B8(void);
@@ -337,3 +399,176 @@ void ClearBag(void)
ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity);
sub_80A3684();
}
+
+extern const u16 gUnknown_083C1704[];
+
+void sub_80A3740(void)
+{
+ u16 arr[2];
+
+ // TODO: This is a local array
+ memcpy(arr, gUnknown_083C1704, 4);
+ LoadPalette(&arr[1], 0xD1, sizeof(arr[1]));
+ LoadPalette(&arr[0], 0xD8, sizeof(arr[0]));
+}
+
+void sub_80A3770(void)
+{
+ if (gUnknown_03000701 == 0)
+ {
+ gUnknown_03000704 = gUnknown_083C1690[gUnknown_02038559];
+ if (gUnknown_02038559 != 3)
+ gUnknown_02038564 = 4;
+ else
+ gUnknown_02038564 = 6;
+ }
+}
+
+void sub_80A37C0(u8 taskId)
+{
+ gTasks[taskId].func = sub_80A50C8;
+ StartVerticalScrollIndicators(0);
+ StartVerticalScrollIndicators(1);
+ StartVerticalScrollIndicators(2);
+ StartVerticalScrollIndicators(3);
+}
+
+void sub_80A37F8(u8 taskId)
+{
+ u8 r5 = gUnknown_0203855A;
+
+ if (r5 < 16)
+ {
+ gUnknown_0203855A++;
+ sub_80A396C(gBGTilemapBuffers[2], r5, gUnknown_0203855A, 0x4F);
+ sub_80A39E4(gBGTilemapBuffers[2], gUnknown_02038559 + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]);
+ gUnknown_02038558 = 1;
+ sub_80A48E8(taskId, r5 / 2, gUnknown_0203855A / 2 - 1);
+ gUnknown_02038558 = 0;
+ return;
+ }
+
+ if (gLinkOpen == TRUE)
+ {
+ u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
+
+ ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562);
+ gUnknown_02038562++;
+ }
+ else
+ {
+ while (gUnknown_02038562 < 3)
+ {
+ u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
+
+ ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562);
+ gUnknown_02038562++;
+ }
+ }
+ if (gUnknown_02038562 == 3)
+ {
+ gUnknown_0203855A = 16;
+ gUnknown_0203855B = gUnknown_02038559 + 1;
+ sub_80A37C0(FindTaskIdByFunc(sub_80A4F68));
+ DestroyTask(taskId);
+ ItemListMenu_InitMenu();
+ sub_80F979C(2, 0);
+ sub_80F979C(3, 0);
+ }
+}
+
+void sub_80A3954(u16 *a)
+{
+ CpuCopy16(gUnknown_08E77004, a, 0x800);
+}
+
+void sub_80A396C(u16 *a, u8 b, u8 c, u8 d)
+{
+ u16 *dst = a + 14 + (b + 2) * 32;
+ u16 i;
+
+ while (c > b++)
+ {
+ for (i = 0; i < 15; i++)
+ dst[i] = d;
+ dst += 32;
+ }
+}
+
+void sub_80A39B8(u16 *a, u8 b)
+{
+ u8 var = b * 2;
+
+ sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2);
+}
+
+void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d)
+{
+ u16 r2 = b * 2;
+ u16 r7;
+
+ if (d == -1)
+ {
+ r7 = (b + 1) * 2;
+ if (b == 5)
+ r7 = 2;
+
+ sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2);
+ sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2);
+ }
+ else if (d == 1)
+ {
+ r7 = (b - 1) * 2;
+ if (b == 1)
+ r7 = 10;
+
+ sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2);
+ sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2);
+ }
+}
+
+void sub_80A3AC0(u16 *a, u8 b)
+{
+ u8 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (i == b)
+ a[0x125 + i] = 0x107D;
+ else
+ a[0x125 + i] = 0x107C;
+ }
+}
+
+void sub_80A3B04(u16 *a, s8 b)
+{
+ u8 taskId;
+
+ gUnknown_02038559 += b;
+ if (gUnknown_02038559 >= NUM_BAG_POCKETS)
+ gUnknown_02038559 = 0;
+ if (gUnknown_02038559 < 0)
+ gUnknown_02038559 = NUM_BAG_POCKETS - 1;
+ sub_80A76A0();
+ sub_80A7590();
+ gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots;
+ sub_80A3D24(gUnknown_02038559);
+ gUnknown_0203855A = 0;
+ sub_80A3954(a);
+ sub_80A396C(a, 0, 16, 3);
+ sub_80A39B8(a, 0);
+ gUnknown_0203855B = 6;
+ gUnknown_02038562 = 0;
+ taskId = FindTaskIdByFunc(sub_80A37F8);
+ if (taskId == 0xFF)
+ taskId = CreateTask(sub_80A37F8, 8);
+ gTasks[taskId].data[5] = b;
+}
+
+void swap32(struct ItemSlot *a, struct ItemSlot *b)
+{
+ struct ItemSlot temp = *a;
+
+ *a = *b;
+ *b = temp;
+}