diff options
author | camthesaxman <cameronghall@cox.net> | 2017-07-08 21:59:22 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-07-08 21:59:22 -0500 |
commit | 42aaa52c94aa59cb62f2f598af5dd25ae9d8537e (patch) | |
tree | 594c230d9bae3b143476fdd970db84d6e8f9678b | |
parent | fb441feac3d9515bdfc93a2ead6c1d16c73f3a06 (diff) |
decompile sub_80A46FC - ItemListMenu_InitDescription
-rw-r--r-- | asm/item_menu.s | 342 | ||||
-rw-r--r-- | src/item_menu.c | 147 |
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); +} |