summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-07-08 18:06:19 -0500
committercamthesaxman <cameronghall@cox.net>2017-07-08 18:06:19 -0500
commite41832e3c7afd0072216aaaf08b9e56c7bb42413 (patch)
tree33cfbd76cf1871d54c76c192e2be1586486e072a /src
parent9a57e785576c658980e7cac5d3531181ccc64d42 (diff)
decompile RemoveEmptyItemSlots - sub_80A444C
Diffstat (limited to 'src')
-rw-r--r--src/item.c2
-rw-r--r--src/item_menu.c481
2 files changed, 463 insertions, 20 deletions
diff --git a/src/item.c b/src/item.c
index 33aa87768..6070a0329 100644
--- a/src/item.c
+++ b/src/item.c
@@ -129,6 +129,8 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count)
return TRUE;
}
+// This function matches if gBagPockets is declared non-const,
+// but it should be fixed anyway.
#ifdef NONMATCHING
bool8 AddBagItem(u16 itemId, u16 count)
{
diff --git a/src/item_menu.c b/src/item_menu.c
index 91853588b..575dbbfab 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "data2.h"
#include "decompress.h"
#include "graphics.h"
#include "item.h"
@@ -6,10 +7,14 @@
#include "menu.h"
#include "menu_helpers.h"
#include "palette.h"
+#include "party_menu.h"
#include "rom4.h"
+#include "songs.h"
+#include "sound.h"
#include "sprite.h"
#include "strings.h"
#include "strings2.h"
+#include "string_util.h"
#include "task.h"
#include "text.h"
#include "unknown_task.h"
@@ -24,8 +29,9 @@ struct UnknownStruct1
u8 unk3;
};
+extern u8 gUnknown_02038540[];
extern u8 gUnknown_02038558;
-extern s8 gUnknown_02038559;
+extern s8 gUnknown_02038559; // selected pocket
extern u8 gUnknown_0203855A;
extern u8 gUnknown_0203855B;
extern u8 gUnknown_0203855C;
@@ -35,7 +41,7 @@ extern u8 gUnknown_03000700;
extern u8 gUnknown_03000701;
extern const u8 *gUnknown_03000704;
extern struct UnknownStruct1 gUnknown_03005D10[];
-extern struct ItemSlot *gUnknown_03005D24;
+extern struct ItemSlot *gUnknown_03005D24; // selected pocket item slots
extern bool8 gLinkOpen;
extern void gpu_pal_allocator_reset__manage_upper_four(void);
@@ -101,10 +107,11 @@ 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(struct ItemSlot *, u32);
+void SortItemSlots(struct BagPocket);
void sub_80A3D08(void);
void sub_80A3D24(u8);
void sub_80A3D40(void);
+void sub_80A40D0(void);
void sub_80A48E8();
void ItemListMenu_InitDescription();
void ItemListMenu_ChangeDescription();
@@ -113,8 +120,10 @@ void sub_80A50C8(u8);
void ItemListMenu_InitMenu(void);
void sub_80A740C(void);
void sub_80A751C(void);
+void sub_80A7528();
void sub_80A7590(void);
void sub_80A7630(void);
+void sub_80A763C(void);
void sub_80A76A0(void);
void sub_80A770C(void);
void sub_80A7828(void);
@@ -227,9 +236,8 @@ bool8 sub_80A317C(void)
sub_80A39B8(gBGTilemapBuffers[2], gUnknown_02038559 + 1);
sub_80A3AC0(gBGTilemapBuffers[2], gUnknown_02038559);
sub_80A3D08();
- // What is this?
- sub_80A3C34(gBagPockets[2].itemSlots, *(u32 *)&gBagPockets[2].capacity);
- sub_80A3C34(gBagPockets[3].itemSlots, *(u32 *)&gBagPockets[3].capacity);
+ SortItemSlots(gBagPockets[2]);
+ SortItemSlots(gBagPockets[3]);
sub_80A3D40();
gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots;
sub_80A362C();
@@ -405,7 +413,7 @@ 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]));
@@ -436,7 +444,7 @@ void sub_80A37C0(u8 taskId)
void sub_80A37F8(u8 taskId)
{
u8 r5 = gUnknown_0203855A;
-
+
if (r5 < 16)
{
gUnknown_0203855A++;
@@ -447,11 +455,11 @@ void sub_80A37F8(u8 taskId)
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++;
}
@@ -460,7 +468,7 @@ void sub_80A37F8(u8 taskId)
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++;
}
@@ -486,7 +494,7 @@ 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++)
@@ -498,7 +506,7 @@ void sub_80A396C(u16 *a, u8 b, u8 c, u8 d)
void sub_80A39B8(u16 *a, u8 b)
{
u8 var = b * 2;
-
+
sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2);
}
@@ -506,13 +514,13 @@ 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);
}
@@ -521,7 +529,7 @@ void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d)
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);
}
@@ -530,7 +538,7 @@ void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d)
void sub_80A3AC0(u16 *a, u8 b)
{
u8 i;
-
+
for (i = 0; i < 5; i++)
{
if (i == b)
@@ -543,7 +551,7 @@ void sub_80A3AC0(u16 *a, u8 b)
void sub_80A3B04(u16 *a, s8 b)
{
u8 taskId;
-
+
gUnknown_02038559 += b;
if (gUnknown_02038559 >= NUM_BAG_POCKETS)
gUnknown_02038559 = 0;
@@ -565,10 +573,443 @@ void sub_80A3B04(u16 *a, s8 b)
gTasks[taskId].data[5] = b;
}
-void swap32(struct ItemSlot *a, struct ItemSlot *b)
+static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b)
{
struct ItemSlot temp = *a;
-
+
*a = *b;
*b = temp;
}
+
+void RemoveEmptyItemSlots(struct BagPocket pocket)
+{
+ u16 i;
+ u16 j;
+
+ for (i = 0; i < pocket.capacity - 1; i++)
+ {
+ for (j = i + 1; j < pocket.capacity; j++)
+ {
+ if (pocket.itemSlots[i].quantity == 0)
+ SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]);
+ }
+ }
+}
+
+void SortItemSlots(struct BagPocket pocket)
+{
+ u16 i;
+ u16 j;
+
+ for (i = 0; i < pocket.capacity; i++)
+ {
+ for (j = i + 1; j < pocket.capacity; j++)
+ {
+ if (pocket.itemSlots[i].quantity != 0 && pocket.itemSlots[j].quantity != 0
+ && pocket.itemSlots[i].itemId > pocket.itemSlots[j].itemId)
+ SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]);
+ }
+ }
+}
+
+void sub_80A3CA8(u8 pocketNum)
+{
+ u16 i;
+
+ gUnknown_03005D10[pocketNum].unk2 = 0;
+ for (i = 0; i < gBagPockets[pocketNum].capacity; i++)
+ {
+ if (gBagPockets[pocketNum].itemSlots[i].quantity != 0)
+ gUnknown_03005D10[pocketNum].unk2++;
+ }
+ RemoveEmptyItemSlots(gBagPockets[pocketNum]);
+}
+
+void sub_80A3D08(void)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_BAG_POCKETS; i++)
+ sub_80A3CA8(i);
+}
+
+void sub_80A3D24(u8 pocketNum)
+{
+ if (gUnknown_03005D10[pocketNum].unk2 >= 7)
+ gUnknown_03005D10[pocketNum].unk3 = 7;
+ else
+ gUnknown_03005D10[pocketNum].unk3 = gUnknown_03005D10[pocketNum].unk2;
+}
+
+void sub_80A3D40(void)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_BAG_POCKETS; i++)
+ sub_80A3D24(i);
+}
+
+void sub_80A3D5C(u8 taskId)
+{
+ u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
+
+ gUnknown_03005D24[val].quantity -= gTasks[taskId].data[1];
+ if (gUnknown_03005D24[val].quantity == 0)
+ {
+ if (gSaveBlock1.registeredItem == gUnknown_03005D24[val].itemId)
+ {
+ sub_80A40D0();
+ gSaveBlock1.registeredItem = 0;
+ }
+ gUnknown_03005D24[val].itemId = 0;
+ if (gUnknown_03005D10[gUnknown_02038559].unk1 + 7 == gUnknown_03005D10[gUnknown_02038559].unk2
+ && gUnknown_03005D10[gUnknown_02038559].unk1 != 0)
+ gUnknown_03005D10[gUnknown_02038559].unk1--;
+ sub_80A3CA8(gUnknown_02038559);
+ }
+ sub_80A3D24(gUnknown_02038559);
+}
+
+void sub_80A3E0C(void)
+{
+ u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
+
+ if (gUnknown_03005D24[val].quantity == 0)
+ {
+ gUnknown_03005D24[val].itemId = 0;
+ if (gUnknown_03005D10[gUnknown_02038559].unk1 + 7 == gUnknown_03005D10[gUnknown_02038559].unk2
+ && gUnknown_03005D10[gUnknown_02038559].unk1 != 0)
+ gUnknown_03005D10[gUnknown_02038559].unk1--;
+ sub_80A3CA8(gUnknown_02038559);
+ }
+ sub_80A3D24(gUnknown_02038559);
+}
+
+void nullsub_16(void)
+{
+}
+
+void sub_80A3E70(u8 a, u8 b)
+{
+ struct ItemSlot temp = gUnknown_03005D24[a];
+
+ gUnknown_03005D24[a] = gUnknown_03005D24[b];
+ gUnknown_03005D24[b] = temp;
+}
+
+void sub_80A3E90(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ nullsub_16();
+ sub_80A3E70(
+ gTasks[taskId].data[10] - 1,
+ gUnknown_03005D10[gUnknown_02038559].unk0 + gUnknown_03005D10[gUnknown_02038559].unk1);
+ gTasks[taskId].data[10] = 0;
+ sub_80A763C();
+ sub_80A7528(0);
+ ItemListMenu_InitMenu();
+}
+
+void sub_80A3EF4(u8 taskId)
+{
+ u8 r2;
+
+ PlaySE(SE_SELECT);
+ nullsub_16();
+ r2 = gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1;
+ gTasks[taskId].data[10] = 0;
+ if (r2 < 8)
+ sub_80A48E8(taskId, r2);
+ sub_80A7528(0);
+}
+
+void sub_80A3F50(u8 taskId)
+{
+ gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1;
+ sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0);
+ sub_80A7528(1);
+}
+
+void sub_80A3FA0(u16 *a, u8 b, u8 c, u8 d, u8 e, u16 f)
+{
+ s16 i;
+ s16 j;
+
+ for (i = c; i < c + e; i++)
+ {
+ for (j = b; j < b + d; j++)
+ {
+ u32 index = j + i * 32;
+
+ a[index] = f;
+ }
+ }
+}
+
+void sub_80A4008(u16 *a, u8 b, u8 c, u8 d, u8 e)
+{
+ sub_80A3FA0(a, b, c, d, e, 1);
+}
+
+void sub_80A4030(u32 a)
+{
+ u16 *ptr1 = gBGTilemapBuffers[2] + 0x5A;
+
+ ptr1 += a * 64;
+ ptr1[0] = 0x5A;
+ ptr1[1] = 0x5B;
+ ptr1[2] = 0x5C;
+ ptr1[32] = 0x6A;
+ ptr1[33] = 0x6B;
+ ptr1[34] = 0x6C;
+}
+
+void sub_80A405C(u8 a)
+{
+ u16 i;
+ u16 *ptr;
+
+ ptr = gBGTilemapBuffers[2] + 0x5A;
+ for (i = 0; i < 16; i++)
+ {
+ ptr[0] = 0x4F;
+ ptr[1] = 0x4F;
+ ptr[2] = 0x4F;
+ ptr += 32;
+ }
+
+ ptr = gBGTilemapBuffers[2] + 0x5A + a * 64;
+ ptr[0] = 0x5A;
+ ptr[1] = 0x5B;
+ ptr[2] = 0x5C;
+ ptr[32] = 0x6A;
+ ptr[33] = 0x6B;
+ ptr[34] = 0x6C;
+}
+
+void sub_80A40AC(u8 a)
+{
+ u16 *ptr = gBGTilemapBuffers[2] + 0x5A;
+
+ ptr += a * 64;
+ ptr[0] = 0x4F;
+ ptr[1] = 0x4F;
+ ptr[2] = 0x4F;
+ ptr[32] = 0x4F;
+ ptr[33] = 0x4F;
+ ptr[34] = 0x4F;
+}
+
+void sub_80A40D0(void)
+{
+ u8 i;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (gUnknown_03005D10[gUnknown_02038559].unk1 + i == gUnknown_03005D10[gUnknown_02038559].unk2)
+ break;
+ if (gUnknown_03005D24[gUnknown_03005D10[gUnknown_02038559].unk1 + i].itemId == gSaveBlock1.registeredItem)
+ {
+ sub_80A40AC(i);
+ break;
+ }
+ }
+}
+
+void sub_80A413C(void)
+{
+ sub_80A40D0();
+ sub_80A405C(gUnknown_03005D10[gUnknown_02038559].unk0);
+}
+
+void sub_80A4164(u8 *a, u16 b, int c, u8 d)
+{
+ *a++ = CHAR_MULT_SIGN;
+ a[0] = EXT_CTRL_CODE_BEGIN;
+ a[1] = 0x14;
+ a[2] = 6;
+ a += 3;
+ ConvertIntToDecimalStringN(a, b, c, d);
+}
+
+void sub_80A418C(u16 a, int b, u8 c, u8 d, u8 e)
+{
+ sub_80A4164(gStringVar1, a, b, e);
+ MenuPrint(gStringVar1, c, d);
+}
+
+void sub_80A41D4(void)
+{
+ sub_80A763C();
+}
+
+void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e)
+{
+ a[0] = EXT_CTRL_CODE_BEGIN;
+ a[1] = 0x13;
+ a[2] = 8;
+ a += 3;
+ a = ConvertIntToDecimalStringN(a, b, STR_CONV_MODE_LEADING_ZEROS, 2);
+ a[0] = EXT_CTRL_CODE_BEGIN;
+ a[1] = 0x13;
+ a[2] = 0x18;
+ a += 3;
+ a = sub_8072C74(a, c, 0x78 - (e + 1) * 6, 0);
+ *a++ = CHAR_MULT_SIGN;
+ sub_8072C14(a, d, 0x78, 1);
+}
+
+u8 *sub_80A425C(u8 taskId, u8 *text, u8 c)
+{
+ if (gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1 == c)
+ {
+ text[0] = EXT_CTRL_CODE_BEGIN;
+ text[1] = 1;
+ text[2] = 2;
+ text += 3;
+ }
+ return text;
+}
+
+bool8 sub_80A42B0(u8 a, int b)
+{
+ u8 r5;
+ u16 *ptr;
+ u8 *r8 = gUnknown_02038540;
+
+ if (gUnknown_03005D10[gUnknown_02038559].unk1 + a > gUnknown_03005D10[gUnknown_02038559].unk2)
+ return TRUE;
+ if (gUnknown_03005D10[gUnknown_02038559].unk1 + a == gUnknown_03005D10[gUnknown_02038559].unk2)
+ {
+ if (gUnknown_03000701 == 5)
+ return TRUE;
+ r5 = a * 2 + 2;
+ sub_8072C74(gStringVar1, gOtherText_CloseBag, 0x78, 0);
+ MenuPrint(gStringVar1, 14, r5);
+ ptr = gBGTilemapBuffers[2] + 14 + r5 * 32;
+ ptr[0] = 0x4F;
+ ptr[1] = 0x4F;
+ ptr[32] = 0x4F;
+ ptr[33] = 0x4F;
+ if (a == 7)
+ return TRUE;
+ if ((b == 1 && r8[2] != 0) || b == 2)
+ MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 13);
+ else
+ MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 17);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_80A4380(u16 a, u8 b, int c, int d)
+{
+ while (b <= c)
+ {
+ u8 r4;
+ u8 r5;
+ u8 *text;
+
+ if (sub_80A42B0(b, d) == TRUE)
+ break;
+ r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b;
+ r5 = b * 2 + 2;
+ text = gStringVar1;
+ text = sub_80A425C(a, text, b);
+ text = sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x66, 0);
+ *text++ = CHAR_MULT_SIGN;
+ sub_8072C14(text, gUnknown_03005D24[r4].quantity, 0x78, 1);
+ MenuPrint(gStringVar1, 14, r5);
+ b++;
+ }
+}
+
+void sub_80A444C(u16 a, u8 b, int c, int d)
+{
+ while (b <= c)
+ {
+ u8 r4;
+ u8 r5;
+ u8 *text;
+
+ if (sub_80A42B0(b, d) == TRUE)
+ break;
+ r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b;
+ r5 = b * 2 + 2;
+ text = gStringVar1;
+ text = sub_80A425C(a, text, b);
+#if ENGLISH
+ sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x60, 0);
+#else
+ sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x63, 0);
+#endif
+ MenuPrint(gStringVar1, 14, r5);
+ if (gUnknown_02038558 != 0)
+ {
+ if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem)
+ sub_80A4030(b);
+ }
+ else
+ {
+ if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem)
+ sub_80A405C(b);
+ else
+ sub_80A40AC(b);
+ }
+ b++;
+ }
+}
+
+/*
+void sub_80A4548(u16 a, u8 b, int c, int d)
+{
+ while (b <= c)
+ {
+ u8 r4;
+ u8 sp10;
+ u32 r5;
+ u8 *text;
+
+ if (sub_80A42B0(b, d) == TRUE)
+ break;
+ r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b;
+ sp10 = b * 2 + 2;
+ r5 = sp10 * 32 + 14;
+ text = gStringVar1;
+ text = sub_80A425C(a, text, b);
+ if (gUnknown_03005D24[r4].itemId < 0x153)
+ {
+ const u8 *r2;
+
+ gBGTilemapBuffers[2][r5 + 0] = 0x59;
+ gBGTilemapBuffers[2][r5 + 1] = 0x4F;
+ gBGTilemapBuffers[2][r5 + 32] = 0x69;
+ gBGTilemapBuffers[2][r5 + 33] = 0x4F;
+ r2 = gMoveNames[ItemIdToBattleMoveId(gUnknown_03005D24[r4].itemId)];
+ sub_80A41E0(text, gUnknown_03005D24[r4].itemId - 288, r2, gUnknown_03005D24[r4].quantity, 2);
+ }
+ else
+ {
+ const u8 *moveName;
+
+ gBGTilemapBuffers[2][r5 + 0] = 0x105D;
+ gBGTilemapBuffers[2][r5 + 1] = 0x105E;
+ gBGTilemapBuffers[2][r5 + 32] = 0x106D;
+ gBGTilemapBuffers[2][r5 + 33] = 0x106E;
+ text[0] = EXT_CTRL_CODE_BEGIN;
+ text[1] = 0x13;
+ text[2] = 0x11;
+ text += 3;
+ text = ConvertIntToDecimalString(text, gUnknown_03005D24[r4].itemId);
+ text[0] = EXT_CTRL_CODE_BEGIN;
+ text[1] = 0x13;
+ text[2] = 0x18;
+ text += 3;
+ moveName = gMoveNames[ItemIdToBattleMoveId(gUnknown_03005D24[r4].itemId)];
+ sub_8072C74(text, moveName, 0x78, 0);
+ }
+ MenuPrint(gStringVar1, 14, sp10);
+ b++;
+ }
+}
+*/ \ No newline at end of file