summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/item_menu.s342
-rw-r--r--src/item_menu.c147
2 files changed, 118 insertions, 371 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 65ccab22c..7a9799fec 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -6,348 +6,6 @@
.text
- thumb_func_start sub_80A46FC
-sub_80A46FC: @ 80A46FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- str r2, [sp, 0x8]
- str r3, [sp, 0xC]
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x4]
- lsls r1, 24
- lsrs r6, r1, 24
- ldr r0, _080A4724 @ =gBGTilemapBuffers + 0x1000
- mov r10, r0
- ldr r1, _080A4728 @ =gStringVar2
- mov r9, r1
- ldr r0, _080A472C @ =gUnknown_03005D24
- mov r8, r0
- b _080A47B4
- .align 2, 0
-_080A4724: .4byte gBGTilemapBuffers + 0x1000
-_080A4728: .4byte gStringVar2
-_080A472C: .4byte gUnknown_03005D24
-_080A4730:
- ldr r1, _080A47DC @ =gUnknown_03005D10
- ldr r0, _080A47E0 @ =gUnknown_02038559
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x1]
- adds r4, r6, r4
- lsls r4, 24
- lsrs r4, 24
- lsls r5, r6, 25
- movs r1, 0x80
- lsls r1, 18
- adds r5, r1
- lsrs r5, 24
- lsls r0, r5, 5
- adds r0, 0xE
- lsls r1, r0, 1
- add r1, r10
- movs r2, 0x59
- strh r2, [r1]
- adds r0, 0x20
- lsls r0, 1
- add r0, r10
- movs r1, 0x69
- strh r1, [r0]
- ldr r7, _080A47E4 @ =gStringVar1
- ldr r1, [sp, 0x4]
- lsls r0, r1, 24
- lsrs r0, 24
- adds r1, r7, 0
- adds r2, r6, 0
- bl sub_80A425C
- adds r7, r0, 0
- mov r1, r8
- ldr r0, [r1]
- lsls r4, 2
- adds r0, r4, r0
- ldrh r0, [r0]
- mov r1, r9
- bl CopyItemName
- mov r1, r8
- ldr r0, [r1]
- adds r4, r0
- ldrh r1, [r4]
- subs r1, 0x84
- lsls r1, 16
- lsrs r1, 16
- ldrh r3, [r4, 0x2]
- movs r0, 0x3
- str r0, [sp]
- adds r0, r7, 0
- mov r2, r9
- bl sub_80A41E0
- ldr r0, _080A47E4 @ =gStringVar1
- movs r1, 0xE
- adds r2, r5, 0
- bl MenuPrint
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_080A47B4:
- ldr r0, [sp, 0x8]
- cmp r6, r0
- bgt _080A47CA
- adds r0, r6, 0
- ldr r1, [sp, 0xC]
- bl sub_80A42B0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080A4730
-_080A47CA:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080A47DC: .4byte gUnknown_03005D10
-_080A47E0: .4byte gUnknown_02038559
-_080A47E4: .4byte gStringVar1
- thumb_func_end sub_80A46FC
-
- thumb_func_start sub_80A47E8
-sub_80A47E8: @ 80A47E8
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _080A4808 @ =gUnknown_02038559
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x4
- bhi _080A4852
- lsls r0, 2
- ldr r1, _080A480C @ =_080A4810
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080A4808: .4byte gUnknown_02038559
-_080A480C: .4byte _080A4810
- .align 2, 0
-_080A4810:
- .4byte _080A4824
- .4byte _080A4824
- .4byte _080A483C
- .4byte _080A4848
- .4byte _080A4830
-_080A4824:
- adds r0, r2, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_80A4380
- b _080A4852
-_080A4830:
- adds r0, r2, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_80A444C
- b _080A4852
-_080A483C:
- adds r0, r2, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_80A4548
- b _080A4852
-_080A4848:
- adds r0, r2, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_80A46FC
-_080A4852:
- ldr r1, _080A4870 @ =gUnknown_03005D10
- ldr r0, _080A4874 @ =gUnknown_02038559
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080A4878
- movs r0, 0
- movs r1, 0
- bl sub_80F979C
- b _080A4880
- .align 2, 0
-_080A4870: .4byte gUnknown_03005D10
-_080A4874: .4byte gUnknown_02038559
-_080A4878:
- movs r0, 0
- movs r1, 0x1
- bl sub_80F979C
-_080A4880:
- ldr r0, _080A48A4 @ =gUnknown_03000701
- ldrb r0, [r0]
- cmp r0, 0x5
- beq _080A48B0
- ldr r1, _080A48A8 @ =gUnknown_03005D10
- ldr r0, _080A48AC @ =gUnknown_02038559
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x1]
- adds r1, 0x8
- ldrb r0, [r0, 0x2]
- adds r0, 0x1
- cmp r1, r0
- blt _080A48C6
- b _080A48D8
- .align 2, 0
-_080A48A4: .4byte gUnknown_03000701
-_080A48A8: .4byte gUnknown_03005D10
-_080A48AC: .4byte gUnknown_02038559
-_080A48B0:
- ldr r2, _080A48D0 @ =gUnknown_03005D10
- ldr r0, _080A48D4 @ =gUnknown_02038559
- movs r1, 0
- ldrsb r1, [r0, r1]
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x1]
- adds r0, 0x8
- ldrb r1, [r1, 0x2]
- cmp r0, r1
- bge _080A48D8
-_080A48C6:
- movs r0, 0x1
- movs r1, 0
- bl sub_80F979C
- b _080A48E0
- .align 2, 0
-_080A48D0: .4byte gUnknown_03005D10
-_080A48D4: .4byte gUnknown_02038559
-_080A48D8:
- movs r0, 0x1
- movs r1, 0x1
- bl sub_80F979C
-_080A48E0:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80A47E8
-
- thumb_func_start sub_80A48E8
-sub_80A48E8: @ 80A48E8
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- movs r3, 0
- bl sub_80A47E8
- pop {r0}
- bx r0
- thumb_func_end sub_80A48E8
-
- thumb_func_start sub_80A48F8
-sub_80A48F8: @ 80A48F8
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- movs r2, 0x5
- movs r3, 0x2
- bl sub_80A47E8
- pop {r0}
- bx r0
- thumb_func_end sub_80A48F8
-
- thumb_func_start ItemListMenu_InitDescription
-ItemListMenu_InitDescription: @ 80A490C
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r1, _080A4960 @ =gUnknown_03005D10
- ldr r0, _080A4964 @ =gUnknown_02038559
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x1]
- ldrb r2, [r0]
- adds r1, r2
- ldrb r0, [r0, 0x2]
- cmp r1, r0
- bne _080A4974
- ldr r0, _080A4968 @ =gOtherText_ReturnTo
- movs r4, 0x1
- str r4, [sp]
- movs r1, 0x4
- movs r2, 0x68
- movs r3, 0x68
- bl sub_8072A18
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080A496C @ =gUnknown_0840E740
- ldr r0, _080A4970 @ =gUnknown_03000701
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- str r4, [sp]
- movs r1, 0x4
- movs r2, 0x78
- movs r3, 0x68
- bl sub_8072A18
- adds r0, r5, r0
- b _080A4988
- .align 2, 0
-_080A4960: .4byte gUnknown_03005D10
-_080A4964: .4byte gUnknown_02038559
-_080A4968: .4byte gOtherText_ReturnTo
-_080A496C: .4byte gUnknown_0840E740
-_080A4970: .4byte gUnknown_03000701
-_080A4974:
- adds r0, r3, 0
- bl ItemId_GetDescription
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0x68
- movs r3, 0x68
- bl sub_8072A18
-_080A4988:
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bhi _080A49A4
- lsls r1, r5, 25
- movs r0, 0xD0
- lsls r0, 20
- adds r1, r0
- lsrs r1, 24
- movs r0, 0
- movs r2, 0xD
- movs r3, 0x14
- bl MenuZeroFillWindowRect
-_080A49A4:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end ItemListMenu_InitDescription
-
thumb_func_start ItemListMenu_ChangeDescription
ItemListMenu_ChangeDescription: @ 80A49AC
push {r4,r5,lr}
diff --git a/src/item_menu.c b/src/item_menu.c
index 741cc147d..3e7a4629f 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -112,8 +112,8 @@ void sub_80A3D08(void);
void sub_80A3D24(u8);
void sub_80A3D40(void);
void sub_80A40D0(void);
-void sub_80A48E8();
-void ItemListMenu_InitDescription();
+void sub_80A48E8(u16, int, int);
+void ItemListMenu_InitDescription(s16);
void ItemListMenu_ChangeDescription();
void sub_80A4F68(u8);
void sub_80A50C8(u8);
@@ -246,7 +246,7 @@ bool8 sub_80A317C(void)
case 12:
sub_80A48E8(0xFFFF, 0, 7);
val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0;
- ItemListMenu_InitDescription((s16)gUnknown_03005D24[val].itemId);
+ ItemListMenu_InitDescription(gUnknown_03005D24[val].itemId);
ItemListMenu_InitMenu();
gUnknown_0203855B = gUnknown_02038559 + 1;
gUnknown_0203855C = 0;
@@ -719,7 +719,7 @@ void sub_80A3EF4(u8 taskId)
r2 = gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1;
gTasks[taskId].data[10] = 0;
if (r2 < 8)
- sub_80A48E8(taskId, r2);
+ sub_80A48E8(taskId, r2, r2);
sub_80A7528(0);
}
@@ -902,42 +902,45 @@ bool8 sub_80A42B0(u8 a, int b)
return FALSE;
}
-void sub_80A4380(u16 a, u8 b, int c, int d)
+void sub_80A4380(u16 a, int b, int c, int d)
{
- while (b <= c)
+ u8 i;
+
+ for (i = b; i <= c; i++)
{
u8 r4;
u8 r5;
u8 *text;
- if (sub_80A42B0(b, d) == TRUE)
+ if (sub_80A42B0(i, d) == TRUE)
break;
- r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b;
- r5 = b * 2 + 2;
+ r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i;
+ r5 = i * 2 + 2;
text = gStringVar1;
- text = sub_80A425C(a, text, b);
+ text = sub_80A425C(a, text, i);
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)
+void sub_80A444C(u16 a, int b, int c, int d)
{
- while (b <= c)
+ u8 i;
+
+ for (i = b; i <= c; i++)
{
u8 r4;
u8 r5;
u8 *text;
- if (sub_80A42B0(b, d) == TRUE)
+ if (sub_80A42B0(i, d) == TRUE)
break;
- r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b;
- r5 = b * 2 + 2;
+ r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i;
+ r5 = i * 2 + 2;
text = gStringVar1;
- text = sub_80A425C(a, text, b);
+ text = sub_80A425C(a, text, i);
#if ENGLISH
sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x60, 0);
#else
@@ -947,37 +950,38 @@ void sub_80A444C(u16 a, u8 b, int c, int d)
if (gUnknown_02038558 != 0)
{
if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem)
- sub_80A4030(b);
+ sub_80A4030(i);
}
else
{
if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem)
- sub_80A405C(b);
+ sub_80A405C(i);
else
- sub_80A40AC(b);
+ sub_80A40AC(i);
}
- b++;
}
}
// more gBGTilemapBuffers shenanigans
#ifdef NONMATCHING
-void sub_80A4548(u16 a, u8 b, int c, int d)
+void sub_80A4548(u16 a, int b, int c, int d)
{
- while (b <= c)
+ u8 i;
+
+ for (i = b; i <= c; i++)
{
u8 r4;
u8 sp10;
u32 r5;
u8 *text;
- if (sub_80A42B0(b, d) == TRUE)
+ if (sub_80A42B0(i, d) == TRUE)
break;
- r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b;
- sp10 = b * 2 + 2;
+ r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i;
+ sp10 = i * 2 + 2;
r5 = sp10 * 32 + 14;
text = gStringVar1;
- text = sub_80A425C(a, text, b);
+ text = sub_80A425C(a, text, i);
if (gUnknown_03005D24[r4].itemId < 0x153)
{
const u8 *r2;
@@ -1010,12 +1014,11 @@ void sub_80A4548(u16 a, u8 b, int c, int d)
sub_8072C74(text, moveName, 0x78, 0);
}
MenuPrint(gStringVar1, 14, sp10);
- b++;
}
}
#else
__attribute__((naked))
-void sub_80A4548(u16 a, u8 b, int c, int d)
+void sub_80A4548(u16 a, int b, int c, int d)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -1226,3 +1229,89 @@ _080A46F8: .4byte gStringVar1\n\
.syntax divided\n");
}
#endif
+
+void sub_80A46FC(u16 a, int b, int c, int d)
+{
+ u8 i;
+
+ for (i = b; i <= c; i++)
+ {
+ u8 r4;
+ u8 r5;
+ u8 *text;
+ register int var asm("r0");
+
+ if (sub_80A42B0(i, d) == TRUE)
+ break;
+ r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i;
+ r5 = i * 2 + 2;
+
+ var = 14 + r5 * 32;
+ gBGTilemapBuffers[2][var] = 0x59;
+ var += 32;
+ gBGTilemapBuffers[2][var] = 0x69;
+
+ text = gStringVar1;
+ text = sub_80A425C(a, text, i);
+ CopyItemName(gUnknown_03005D24[r4].itemId, gStringVar2);
+ sub_80A41E0(text, gUnknown_03005D24[r4].itemId - 0x84, gStringVar2, gUnknown_03005D24[r4].quantity, 3);
+ MenuPrint(gStringVar1, 14, r5);
+ }
+}
+
+void sub_80A47E8(u16 a, int b, int c, int d)
+{
+ switch (gUnknown_02038559)
+ {
+ case 0:
+ case 1:
+ sub_80A4380(a, b, c, d);
+ break;
+ case 4:
+ sub_80A444C(a, b, c, d);
+ break;
+ case 2:
+ sub_80A4548(a, b, c, d);
+ break;
+ case 3:
+ sub_80A46FC(a, b, c, d);
+ break;
+ }
+ if (gUnknown_03005D10[gUnknown_02038559].unk1 != 0)
+ sub_80F979C(0, 0);
+ else
+ sub_80F979C(0, 1);
+ if ((gUnknown_03000701 != 5 && gUnknown_03005D10[gUnknown_02038559].unk1 + 8 < gUnknown_03005D10[gUnknown_02038559].unk2 + 1)
+ || (gUnknown_03000701 == 5 && gUnknown_03005D10[gUnknown_02038559].unk1 + 8 < gUnknown_03005D10[gUnknown_02038559].unk2))
+ sub_80F979C(1, 0);
+ else
+ sub_80F979C(1, 1);
+}
+
+void sub_80A48E8(u16 a, int b, int c)
+{
+ sub_80A47E8(a, b, c, 0);
+}
+
+void sub_80A48F8(u16 a)
+{
+ sub_80A47E8(a, 0, 5, 2);
+}
+
+void ItemListMenu_InitDescription(s16 itemId)
+{
+ u8 r5;
+
+ if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2)
+ {
+ r5 = sub_8072A18(gOtherText_ReturnTo, 4, 0x68, 0x68, 1);
+ r5 += sub_8072A18(gUnknown_0840E740[gUnknown_03000701].text, 4, 0x78, 0x68, 1);
+ }
+ else
+ {
+ r5 = sub_8072A18(ItemId_GetDescription(itemId), 4, 0x68, 0x68, 1);
+ }
+
+ if (r5 < 3)
+ MenuZeroFillWindowRect(0, 13 + r5 * 2, 13, 20);
+}