diff options
-rw-r--r-- | asm/item_pc.s | 360 | ||||
-rw-r--r-- | data/data_83FECCC.s | 8 | ||||
-rw-r--r-- | include/item.h | 1 | ||||
-rw-r--r-- | include/menu.h | 1 | ||||
-rw-r--r-- | include/strings.h | 6 | ||||
-rw-r--r-- | src/item_pc.c | 124 |
6 files changed, 136 insertions, 364 deletions
diff --git a/asm/item_pc.s b/asm/item_pc.s index dadc7ff92..49de9cebb 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -5,366 +5,6 @@ .text - thumb_func_start sub_810E274 -sub_810E274: @ 810E274 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0810E340 @ =gTasks+0x8 - mov r9, r0 - adds r6, r4, r0 - movs r0, 0x4 - bl sub_810EA9C - movs r0, 0 - bl sub_810EAB4 - mov r8, r0 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r5, 0x3 - str r5, [sp, 0x4] - ldr r0, _0810E344 @ =gUnknown_8453F74 - str r0, [sp, 0x8] - movs r0, 0x4 - movs r1, 0x2 - movs r2, 0x8 - movs r3, 0x2 - bl PrintTextArray - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - str r5, [sp, 0x4] - movs r5, 0 - str r5, [sp, 0x8] - movs r0, 0x4 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl ProgramAndPlaceMenuCursorOnWindow - ldrh r0, [r6, 0x2] - bl ItemPc_GetItemIdBySlotId - lsls r0, 16 - lsrs r0, 16 - ldr r1, _0810E348 @ =gStringVar1 - bl CopyItemName - ldr r6, _0810E34C @ =gStringVar4 - ldr r1, _0810E350 @ =gUnknown_84162FF - adds r0, r6, 0 - bl StringExpandPlaceholders - movs r0, 0x2 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - str r5, [sp, 0xC] - str r0, [sp, 0x10] - mov r0, r8 - movs r1, 0x2 - adds r2, r6, 0 - movs r3, 0 - bl sub_810EA34 - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x8 - negs r0, r0 - add r9, r0 - add r4, r9 - ldr r0, _0810E354 @ =sub_810E358 - str r0, [r4] - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810E340: .4byte gTasks+0x8 -_0810E344: .4byte gUnknown_8453F74 -_0810E348: .4byte gStringVar1 -_0810E34C: .4byte gStringVar4 -_0810E350: .4byte gUnknown_84162FF -_0810E354: .4byte sub_810E358 - thumb_func_end sub_810E274 - - thumb_func_start sub_810E358 -sub_810E358: @ 810E358 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - bl ProcessMenuInputNoWrapAround - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _0810E39A - adds r0, 0x1 - cmp r4, r0 - bne _0810E384 - movs r0, 0x5 - bl PlaySE - adds r0, r5, 0 - bl sub_810E8A0 - b _0810E39A -_0810E384: - movs r0, 0x5 - bl PlaySE - ldr r0, _0810E3A0 @ =gUnknown_8453F74 - lsls r1, r4, 3 - adds r0, 0x4 - adds r1, r0 - ldr r1, [r1] - adds r0, r6, 0 - bl _call_via_r1 -_0810E39A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810E3A0: .4byte gUnknown_8453F74 - thumb_func_end sub_810E358 - - thumb_func_start sub_810E3A4 -sub_810E3A4: @ 810E3A4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r6, r0, 3 - ldr r7, _0810E3F0 @ =gTasks+0x8 - adds r4, r6, r7 - movs r0, 0x4 - movs r1, 0 - bl sub_810F4D8 - movs r0, 0 - bl sub_810EAF0 - movs r0, 0x4 - bl ClearWindowTilemap - movs r0, 0x1 - strh r0, [r4, 0x10] - ldrh r0, [r4, 0x2] - bl ItemPc_GetItemQuantityBySlotId - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _0810E3F4 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - adds r0, r5, 0 - bl sub_810E418 - b _0810E40E - .align 2, 0 -_0810E3F0: .4byte gTasks+0x8 -_0810E3F4: - movs r0, 0 - bl PutWindowTilemap - ldrh r0, [r4, 0x2] - bl sub_810E5E0 - bl sub_810DB98 - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0810E414 @ =sub_810E6D8 - str r1, [r0] -_0810E40E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810E414: .4byte sub_810E6D8 - thumb_func_end sub_810E3A4 - - thumb_func_start sub_810E418 -sub_810E418: @ 810E418 - push {r4-r7,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r6, r1, 3 - ldr r7, _0810E49C @ =gTasks+0x8 - adds r5, r6, r7 - ldrh r0, [r5, 0x2] - bl ItemPc_GetItemIdBySlotId - lsls r0, 16 - lsrs r4, r0, 16 - ldrh r1, [r5, 0x10] - adds r0, r4, 0 - bl AddBagItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810E4B8 - ldr r3, _0810E4A0 @ =0x0000ffff - movs r0, 0x1D - movs r1, 0 - adds r2, r4, 0 - bl sub_80A2294 - ldr r1, _0810E4A4 @ =gStringVar1 - adds r0, r4, 0 - bl CopyItemName - ldr r0, _0810E4A8 @ =gStringVar2 - movs r2, 0x10 - ldrsh r1, [r5, r2] - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r4, _0810E4AC @ =gStringVar4 - ldr r1, _0810E4B0 @ =gUnknown_84177C5 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0x2 - bl sub_810EAB4 - lsls r0, 24 - lsrs r1, r0, 24 - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r1, 0 - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0 - bl AddTextPrinterParameterized - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0810E4B4 @ =sub_810E4F4 - b _0810E4E0 - .align 2, 0 -_0810E49C: .4byte gTasks+0x8 -_0810E4A0: .4byte 0x0000ffff -_0810E4A4: .4byte gStringVar1 -_0810E4A8: .4byte gStringVar2 -_0810E4AC: .4byte gStringVar4 -_0810E4B0: .4byte gUnknown_84177C5 -_0810E4B4: .4byte sub_810E4F4 -_0810E4B8: - movs r0, 0x2 - bl sub_810EAB4 - lsls r0, 24 - lsrs r1, r0, 24 - ldr r2, _0810E4EC @ =gUnknown_841778A - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r1, 0 - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0810E4F0 @ =sub_810E548 -_0810E4E0: - str r1, [r0] - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810E4EC: .4byte gUnknown_841778A -_0810E4F0: .4byte sub_810E548 - thumb_func_end sub_810E418 - - thumb_func_start sub_810E4F4 -sub_810E4F4: @ 810E4F4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0810E540 @ =gTasks+0x8 - adds r5, r0, r1 - ldr r0, _0810E544 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0810E51A - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0810E53A -_0810E51A: - movs r0, 0x5 - bl PlaySE - ldrh r0, [r5, 0x2] - bl ItemPc_GetItemIdBySlotId - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r5, 0x10] - bl sub_809A460 - bl sub_809A4E8 - adds r0, r4, 0 - bl sub_810E578 -_0810E53A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810E540: .4byte gTasks+0x8 -_0810E544: .4byte gMain - thumb_func_end sub_810E4F4 - - thumb_func_start sub_810E548 -sub_810E548: @ 810E548 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0810E574 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0810E562 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0810E56E -_0810E562: - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_810E578 -_0810E56E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810E574: .4byte gMain - thumb_func_end sub_810E548 - thumb_func_start sub_810E578 sub_810E578: @ 810E578 push {r4-r6,lr} diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index 33feb4cee..6a38913d5 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -1272,7 +1272,10 @@ gUnknown_841786B:: @ 841786B .incbin "baserom.gba", 0x41786B, 0x3C gUnknown_84178A7:: @ 84178A7 - .incbin "baserom.gba", 0x4178A7, 0x17 + .incbin "baserom.gba", 0x4178A7, 0xE + +gUnknown_84178B5:: + .incbin "baserom.gba", 0x4178B5, 0x9 gUnknown_84178BE:: @ 84178BE .incbin "baserom.gba", 0x4178BE, 0x12 @@ -3071,9 +3074,6 @@ gUnknown_8453094:: @ 8453094 .section .rodata.8453F6C // item_pc.o -gUnknown_8453F74:: @ 8453F74 - .incbin "baserom.gba", 0x453F74, 0x18 - gUnknown_8453F8C:: @ 8453F8C .incbin "baserom.gba", 0x453F8C, 0xC diff --git a/include/item.h b/include/item.h index 9d67bec66..08133ef31 100644 --- a/include/item.h +++ b/include/item.h @@ -74,5 +74,6 @@ void sub_809A584(struct ItemSlot * slots, u8 capacity); u16 GetBagItemId(u16 *); void sub_809A4E8(void); +void sub_809A460(u16 itemId, u16 quantity); #endif // ITEM_H diff --git a/include/menu.h b/include/menu.h index 08112c891..74c4025b8 100644 --- a/include/menu.h +++ b/include/menu.h @@ -50,5 +50,6 @@ void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_st bool8 IsBlendTaskActive(void); void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8); void sub_810F260(u8 windowId, u8 a1); +void PrintTextArray(u8, u8, u8, u8, u8, u8, const struct MenuAction *); #endif // GUARD_MENU_H diff --git a/include/strings.h b/include/strings.h index 822bd4783..e9a6be2bd 100644 --- a/include/strings.h +++ b/include/strings.h @@ -149,9 +149,15 @@ extern const u8 gString_Someone[]; extern const u8 gString_Help[]; extern const u8 gString_HelpSystem_ClearTo8[]; +extern const u8 gOtherText_Give[]; +extern const u8 gFameCheckerText_Cancel[]; +extern const u8 gUnknown_84162FF[]; extern const u8 gUnknown_841633F[]; extern const u8 gUnknown_8416655[]; +extern const u8 gUnknown_841778A[]; +extern const u8 gUnknown_84177C5[]; extern const u8 gUnknown_84178A7[]; +extern const u8 gUnknown_84178B5[]; extern const u8 gUnknown_84178BE[]; #endif //GUARD_STRINGS_H diff --git a/src/item_pc.c b/src/item_pc.c index 7a3fbd7af..753463761 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -9,6 +9,7 @@ #include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" +#include "item_use.h" #include "main.h" #include "malloc.h" #include "menu.h" @@ -82,8 +83,21 @@ void sub_810E0B4(u8 taskId); void sub_810E160(u8 taskId, u32 pos); void sub_810E200(u8 taskId, u32 pos); void sub_810E274(u8 taskId); +void sub_810E358(u8 taskId); +void sub_810E3A4(u8 taskId); +void sub_810E418(u8 taskId); +void sub_810E4F4(u8 taskId); +void sub_810E548(u8 taskId); +void sub_810E578(u8 taskId); +void sub_810E5E0(u16 itemId); +void sub_810E6D8(u8 taskId); +void sub_810E79C(u8 taskId); +void sub_810E8A0(u8 taskId); void sub_810E8F0(void); void sub_810EA34(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); +void sub_810EA9C(u8 windowId); +u8 sub_810EAB4(u8 idx); +void sub_810EAF0(u8 idx); const struct BgTemplate gUnknown_8453F6C[2] = { { @@ -99,6 +113,12 @@ const struct BgTemplate gUnknown_8453F6C[2] = { } }; +const struct MenuAction gUnknown_8453F74[] = { + {gUnknown_84178B5, {.void_u8 = sub_810E3A4}}, + {gOtherText_Give, {.void_u8 = sub_810E79C}}, + {gFameCheckerText_Cancel, {.void_u8 = sub_810E8A0}} +}; + void sub_810D3F4(u8 a0, MainCallback callback) { u8 i; @@ -723,3 +743,107 @@ void sub_810E200(u8 taskId, u32 pos) sub_8098660(1); gTasks[taskId].func = sub_810DEA0; } + +void sub_810E274(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 windowId; + + sub_810EA9C(4); + windowId = sub_810EAB4(0); + PrintTextArray(4, 2, 8, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, gUnknown_8453F74); + ProgramAndPlaceMenuCursorOnWindow(4, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, 3, 0); + CopyItemName(ItemPc_GetItemIdBySlotId(data[1]), gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_84162FF); + sub_810EA34(windowId, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + schedule_bg_copy_tilemap_to_vram(0); + gTasks[taskId].func = sub_810E358; +} + +void sub_810E358(u8 taskId) +{ + s8 input = ProcessMenuInputNoWrapAround(); + switch (input) + { + case -1: + PlaySE(SE_SELECT); + sub_810E8A0(taskId); + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + gUnknown_8453F74[input].func.void_u8(taskId); + } +} + +void sub_810E3A4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + sub_810F4D8(4, 0); + sub_810EAF0(0); + ClearWindowTilemap(4); + data[8] = 1; + if (ItemPc_GetItemQuantityBySlotId(data[1]) == 1) + { + PutWindowTilemap(0); + schedule_bg_copy_tilemap_to_vram(0); + sub_810E418(taskId); + } + else + { + PutWindowTilemap(0); + sub_810E5E0(data[1]); + sub_810DB98(); + gTasks[taskId].func = sub_810E6D8; + } +} + +void sub_810E418(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u16 itemId = ItemPc_GetItemIdBySlotId(data[1]); + u8 windowId; + + if (AddBagItem(itemId, data[8]) == TRUE) + { + sub_80A2294(29, 0, itemId, 0xFFFF); + CopyItemName(itemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gUnknown_84177C5); + windowId = sub_810EAB4(2); + AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 2, 0, NULL); + gTasks[taskId].func = sub_810E4F4; + } + else + { + windowId = sub_810EAB4(2); + AddTextPrinterParameterized(windowId, 2, gUnknown_841778A, 0, 2, 0, NULL); + gTasks[taskId].func = sub_810E548; + } +} + +void sub_810E4F4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u16 itemId; + + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + itemId = ItemPc_GetItemIdBySlotId(data[1]); + sub_809A460(itemId, data[8]); + sub_809A4E8(); + sub_810E578(taskId); + } +} + +void sub_810E548(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810E578(taskId); + } +} |