summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-09-28 20:27:41 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-09-28 20:27:41 -0400
commit0993cb64f7c3a4ff8827da72acc76afccca682e6 (patch)
tree31c5ec828d3c96b5cbca6849e5af35993c1325d0 /src
parentb6c7c6523fedb21e5928fbaf8e01747f4283cfc1 (diff)
Berry_pouch through sub_813D5BC
Diffstat (limited to 'src')
-rw-r--r--src/berry_pouch.c162
1 files changed, 161 insertions, 1 deletions
diff --git a/src/berry_pouch.c b/src/berry_pouch.c
index fb69600fc..c8d6b508c 100644
--- a/src/berry_pouch.c
+++ b/src/berry_pouch.c
@@ -13,14 +13,22 @@
#include "item_menu_icons.h"
#include "list_menu.h"
#include "graphics.h"
+#include "berry.h"
+#include "item.h"
+#include "strings.h"
+#include "string_util.h"
+#include "sound.h"
+#include "menu_indicators.h"
#include "constants/items.h"
+#include "constants/songs.h"
struct BerryPouchStruct_203F36C
{
u32 unk_000;
u8 filler_004[2];
u8 unk_006;
- u8 filler_007[2];
+ u8 unk_007;
+ u8 unk_008;
u8 unk_009;
u8 filler_00a[2];
u8 unk_00C[BG_SCREEN_SIZE];
@@ -39,6 +47,8 @@ struct BerryPouchStruct_203F370
EWRAM_DATA struct BerryPouchStruct_203F36C *gUnknown_203F36C = NULL;
EWRAM_DATA struct BerryPouchStruct_203F370 gUnknown_203F370 = {};
+EWRAM_DATA struct ListMenuItem *gUnknown_203F37C = NULL;
+EWRAM_DATA u8 *gUnknown_203F380 = NULL;
void sub_813CE30(void);
bool8 sub_813CE5C(void);
@@ -48,6 +58,11 @@ void sub_813D07C(void);
bool8 sub_813D0E4(void);
bool8 sub_813D1C0(void);
void sub_813D204(void);
+void sub_813D31C(u8 * dest, u16 itemId);
+void sub_813D3C0(s32 itemIndex, bool8 onInit, struct ListMenu *list);
+void sub_813D430(u8 windowId, s32 itemId, u8 y);
+void sub_813D4D0(u8 y, u8 colorIdx);
+void sub_813D538(s32 itemIndex);
void sub_813D5BC(void);
void sub_813D6A4(void);
void sub_813D6F4(void);
@@ -55,7 +70,9 @@ void sub_813D754(void);
void sub_813D7CC(void);
void sub_813D8AC(void);
void sub_813DA68(u8 taskId);
+void sub_813EC28(void);
void sub_813E910(void);
+void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx);
void sub_813EC08(void);
static const struct BgTemplate gUnknown_846434C[] = {
@@ -86,6 +103,8 @@ static const struct BgTemplate gUnknown_846434C[] = {
}
};
+extern const u8 gUnknown_84643B4[];
+
extern const struct CompressedSpriteSheet gUnknown_84644A8;
extern const struct CompressedSpritePalette gUnknown_84644B0;
@@ -315,3 +334,144 @@ bool8 sub_813D0E4(void)
return FALSE;
}
+
+bool8 sub_813D1C0(void)
+{
+ gUnknown_203F37C = Alloc(NUM_BERRIES * sizeof(struct ListMenuItem));
+ if (gUnknown_203F37C == NULL)
+ return FALSE;
+ gUnknown_203F380 = Alloc(gUnknown_203F36C->unk_007 * 27);
+ if (gUnknown_203F380 == NULL)
+ return FALSE;
+ return TRUE;
+}
+
+void sub_813D204(void)
+{
+ u16 i;
+ struct BagPocket *pocket = &gBagPockets[POCKET_BERRY_POUCH - 1];
+ for (i = 0; i < gUnknown_203F36C->unk_007; i++)
+ {
+ sub_813D31C(&gUnknown_203F380[i * 27], pocket->itemSlots[i].itemId);
+ gUnknown_203F37C[i].label = &gUnknown_203F380[i * 27];
+ gUnknown_203F37C[i].index = i;
+ }
+ gUnknown_203F37C[i].label = gText_Close;
+ gUnknown_203F37C[i].index = i;
+ gMultiuseListMenuTemplate.items = gUnknown_203F37C;
+ if (gUnknown_203F370.unk_04 != 5)
+ gMultiuseListMenuTemplate.totalItems = gUnknown_203F36C->unk_007 + 1;
+ else
+ gMultiuseListMenuTemplate.totalItems = gUnknown_203F36C->unk_007;
+ gMultiuseListMenuTemplate.windowId = 0;
+ gMultiuseListMenuTemplate.header_X = 0;
+ gMultiuseListMenuTemplate.item_X = 9;
+ gMultiuseListMenuTemplate.cursor_X = 1;
+ gMultiuseListMenuTemplate.lettersSpacing = 0;
+ gMultiuseListMenuTemplate.itemVerticalPadding = 2;
+ gMultiuseListMenuTemplate.upText_Y = 2;
+ gMultiuseListMenuTemplate.maxShowed = gUnknown_203F36C->unk_008;
+ gMultiuseListMenuTemplate.fontId = 2;
+ gMultiuseListMenuTemplate.cursorPal = 2;
+ gMultiuseListMenuTemplate.fillValue = 0;
+ gMultiuseListMenuTemplate.cursorShadowPal = 3;
+ gMultiuseListMenuTemplate.moveCursorFunc = sub_813D3C0;
+ gMultiuseListMenuTemplate.itemPrintFunc = sub_813D430;
+ gMultiuseListMenuTemplate.cursorKind = 0;
+ gMultiuseListMenuTemplate.scrollMultiple = 0;
+}
+
+void sub_813D31C(u8 * dest, u16 itemId)
+{
+ StringCopy(gStringVar4, gText_FontSize0);
+ StringAppend(gStringVar4, gOtherText_UnkF9_08_Clear_01);
+ ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringAppend(gStringVar4, gStringVar1);
+ CopyItemName(itemId, gStringVar1);
+ StringAppend(gStringVar4, gUnknown_84643B4);
+ StringAppend(gStringVar4, gText_FontSize2);
+ StringAppend(gStringVar4, gStringVar1);
+ StringCopy(dest, gStringVar4);
+}
+
+void sub_813D39C(s16 a0, u8 *dest)
+{
+ StringCopy(dest, &gUnknown_203F380[a0 * 27]);
+}
+
+void sub_813D3C0(s32 itemIndex, bool8 onInit, struct ListMenu *list)
+{
+ if (onInit != TRUE)
+ {
+ PlaySE(SE_W287B);
+ sub_813EC28();
+ }
+ DestroyItemMenuIcon(gUnknown_203F36C->unk_009 ^ 1);
+ if (gUnknown_203F36C->unk_007 != itemIndex)
+ sub_80989A0(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIndex), gUnknown_203F36C->unk_009);
+ else
+ sub_80989A0(ITEM_N_A, gUnknown_203F36C->unk_009);
+ gUnknown_203F36C->unk_009 ^= 1;
+ sub_813D538(itemIndex);
+}
+
+void sub_813D430(u8 windowId, s32 itemId, u8 y)
+{
+ u16 unused;
+ u16 itemQuantity;
+ if (itemId != -2 && gUnknown_203F36C->unk_007 != itemId)
+ {
+ unused = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemId);
+ itemQuantity = BagGetQuantityByPocketPosition(POCKET_BERRY_POUCH, itemId);
+ ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
+ sub_813E9A0(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1);
+ }
+}
+
+void sub_813D4B0(u8 taskId, u8 colorIdx)
+{
+ sub_813D4D0(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx);
+}
+
+void sub_813D4D0(u8 y, u8 colorIdx)
+{
+ u8 width;
+ u8 height;
+ if (colorIdx == 0xFF)
+ {
+ width = GetMenuCursorDimensionByFont(2, 0);
+ height = GetMenuCursorDimensionByFont(2, 1);
+ FillWindowPixelRect(0, 0, 1, y, width, height);
+ CopyWindowToVram(0, 2);
+ }
+ else
+ {
+ sub_813E9A0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx);
+ }
+}
+
+void sub_813D538(s32 itemIdx)
+{
+ const u8 *str;
+ if (itemIdx != gUnknown_203F36C->unk_007)
+ str = ItemId_GetDescription(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIdx));
+ else
+ str = gUnknown_8416716;
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ sub_813E9A0(1, 2, str, 0, 2, 2, 0, 0, 0);
+}
+
+void sub_813D594(s32 pal)
+{
+ SetBgRectPal(1, 0, 16, 30, 4, pal + 1);
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+void sub_813D5BC(void)
+{
+ if (gUnknown_203F370.unk_04 != 5)
+ gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008 + 1, 110, 110, &gUnknown_203F370.unk_0A);
+ else
+ gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008, 110, 110, &gUnknown_203F370.unk_0A);
+}