summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-09-28 21:35:20 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-09-28 21:35:20 -0400
commitb843b5529227e301895920b56585cf9ec69c9b53 (patch)
tree56db43924785f76a8547eb6594687c4536ebb4a0 /src
parent0993cb64f7c3a4ff8827da72acc76afccca682e6 (diff)
berry_pouch through sub_813D940
Diffstat (limited to 'src')
-rw-r--r--src/berry_pouch.c152
1 files changed, 149 insertions, 3 deletions
diff --git a/src/berry_pouch.c b/src/berry_pouch.c
index c8d6b508c..48baac93a 100644
--- a/src/berry_pouch.c
+++ b/src/berry_pouch.c
@@ -24,8 +24,8 @@
struct BerryPouchStruct_203F36C
{
- u32 unk_000;
- u8 filler_004[2];
+ void (*unk_000)(void);
+ u16 unk_004;
u8 unk_006;
u8 unk_007;
u8 unk_008;
@@ -68,11 +68,13 @@ void sub_813D6A4(void);
void sub_813D6F4(void);
void sub_813D754(void);
void sub_813D7CC(void);
+void sub_813D844(u8 taskId);
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);
+u8 sub_813EA08(u8);
void sub_813EC08(void);
static const struct BgTemplate gUnknown_846434C[] = {
@@ -125,7 +127,7 @@ void InitBerryPouch(u8 a0, void (*savedCallback)(void), u8 a2)
gUnknown_203F370.unk_05 = a2;
if (savedCallback != NULL)
gUnknown_203F370.savedCallback = savedCallback;
- gUnknown_203F36C->unk_000 = 0;
+ gUnknown_203F36C->unk_000 = NULL;
gUnknown_203F36C->unk_009 = 0;
gUnknown_203F36C->unk_006 = 0xFF;
for (i = 0; i < 4; i++)
@@ -475,3 +477,147 @@ void sub_813D5BC(void)
else
gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008, 110, 110, &gUnknown_203F370.unk_0A);
}
+
+void sub_813D614(void)
+{
+ gUnknown_203F36C->unk_004 = 1;
+ gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &gUnknown_203F36C->unk_004);
+}
+
+void sub_813D64C(void)
+{
+ gUnknown_203F36C->unk_004 = 1;
+ gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 152, 72, 104, 2, 110, 110, &gUnknown_203F36C->unk_004);
+}
+
+void sub_813D684(void)
+{
+ if (gUnknown_203F36C->unk_006 != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(gUnknown_203F36C->unk_006);
+ gUnknown_203F36C->unk_006 = 0xFF;
+ }
+}
+
+void sub_813D6A4(void)
+{
+ u32 slack = 72 - GetStringWidth(1, gUnknown_841670A, 0);
+ sub_813E9A0(2, 1, gUnknown_841670A, slack / 2, 1, 0, 0, 0, 0);
+}
+
+void sub_813D6E4(void)
+{
+ gUnknown_203F370.unk_08 = 0;
+ gUnknown_203F370.unk_0A = 0;
+}
+
+void sub_813D6F4(void)
+{
+ s32 r2;
+ if (gUnknown_203F370.unk_04 != 5)
+ r2 = gUnknown_203F36C->unk_007 + 1;
+ else
+ r2 = gUnknown_203F36C->unk_007;
+ if (gUnknown_203F370.unk_0A != 0 && gUnknown_203F370.unk_0A + gUnknown_203F36C->unk_008 > r2)
+ gUnknown_203F370.unk_0A = r2 - gUnknown_203F36C->unk_008;
+ if (gUnknown_203F370.unk_0A + gUnknown_203F370.unk_08 >= r2)
+ {
+ if (r2 == 0 || r2 == 1)
+ gUnknown_203F370.unk_08 = 0;
+ else
+ gUnknown_203F370.unk_08 = r2 - 1;
+ }
+}
+
+void sub_813D754(void)
+{
+ u8 lim;
+ u8 i;
+ if (gUnknown_203F370.unk_04 != 5)
+ lim = gUnknown_203F36C->unk_007 + 1;
+ else
+ lim = gUnknown_203F36C->unk_007;
+ if (gUnknown_203F370.unk_08 > 4)
+ {
+ for (i = 0; i <= gUnknown_203F370.unk_08 - 4; gUnknown_203F370.unk_08--, gUnknown_203F370.unk_0A++, i++)
+ {
+ if (gUnknown_203F370.unk_0A + gUnknown_203F36C->unk_008 == lim)
+ break;
+ }
+ }
+}
+
+void sub_813D7CC(void)
+{
+ if (gUnknown_203F36C != NULL)
+ Free(gUnknown_203F36C);
+ if (gUnknown_203F37C != NULL)
+ Free(gUnknown_203F37C);
+ if (gUnknown_203F380 != NULL)
+ Free(gUnknown_203F380);
+ FreeAllWindowBuffers();
+}
+
+void BerryPouch_StartFadeToExitCallback(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = sub_813D844;
+}
+
+void sub_813D844(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ if (!gPaletteFade.active)
+ {
+ DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08);
+ if (gUnknown_203F36C->unk_000 != NULL)
+ SetMainCallback2(gUnknown_203F36C->unk_000);
+ else
+ SetMainCallback2(gUnknown_203F370.savedCallback);
+ sub_813D684();
+ sub_813D7CC();
+ DestroyTask(taskId);
+ }
+}
+
+void sub_813D8AC(void)
+{
+ u16 i;
+ u32 r2;
+ struct BagPocket *pocket = &gBagPockets[POCKET_BERRY_POUCH - 1];
+ SortAndCompactBagPocket(pocket);
+ gUnknown_203F36C->unk_007 = 0;
+ for (i = 0; i < pocket->capacity; i++)
+ {
+ if (pocket->itemSlots[i].itemId == ITEM_NONE)
+ break;
+ gUnknown_203F36C->unk_007++;
+ }
+ if (gUnknown_203F370.unk_04 != 5)
+ r2 = gUnknown_203F36C->unk_007 + 1;
+ else
+ r2 = gUnknown_203F36C->unk_007;
+ if (r2 > 7)
+ gUnknown_203F36C->unk_008 = 7;
+ else
+ gUnknown_203F36C->unk_008 = r2;
+}
+
+void BerryPouch_SetExitCallback(void (*callback)(void))
+{
+ gUnknown_203F36C->unk_000 = callback;
+}
+
+void sub_813D940(u8 taskId, const u8 * str)
+{
+ s16 * data = gTasks[taskId].data;
+ u8 windowId = sub_813EA08(8);
+ u8 windowId2;
+ sub_813D39C(data[1], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, str);
+ sub_813E9A0(windowId, 2, gStringVar4, 0, 2, 1, 2, 0, 1);
+ windowId2 = sub_813EA08(0);
+ ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3);
+ StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
+ sub_813E9A0(windowId2, 0, gStringVar4, 4, 10, 1, 0, 0, 1);
+}