From 530d75f1e6bc2c8405f2c23a68220d413cea7704 Mon Sep 17 00:00:00 2001 From: Zur3l <90565581+Zur3l@users.noreply.github.com> Date: Sat, 11 Jul 2026 15:59:54 -0400 Subject: [PATCH] Decomp BulkItemToItem Thanks @SethBarberee --- .../{main_0200CAFC.inc => main_0200D0A0.inc} | 54 ++++++++---------- asm/{main_0200CAFC.s => main_0200D0A0.s} | 55 +------------------ include/item_util_4.h | 1 + main.lsf | 2 +- src/item_util_4.c | 28 ++++++++++ 5 files changed, 55 insertions(+), 85 deletions(-) rename asm/include/{main_0200CAFC.inc => main_0200D0A0.inc} (87%) rename asm/{main_0200CAFC.s => main_0200D0A0.s} (96%) diff --git a/asm/include/main_0200CAFC.inc b/asm/include/main_0200D0A0.inc similarity index 87% rename from asm/include/main_0200CAFC.inc rename to asm/include/main_0200D0A0.inc index 030ae894..09eb40dc 100644 --- a/asm/include/main_0200CAFC.inc +++ b/asm/include/main_0200D0A0.inc @@ -1,4 +1,28 @@ #pragma once +.public AVAILABLE_ITEMS_IN_GROUP_TABLE +.public BAG_ITEMS_PTR_MIRROR +.public BitstreamDebug +.public CopyBitsFrom +.public CopyBitsTo +.public GetDungeonGroup +.public GetExclusiveItemType +.public GetItemActionName +.public GetItemBuyPrice +.public GetItemCategory +.public GetItemName +.public GetItemPaletteId +.public GetItemSellPrice +.public ITEM_TABLES_PTRS_1 +.public InitBitstreamForRead +.public InitBitstreamForWrite +.public InitItem +.public IsShoppableItem +.public IsThrownItem +.public MONEY_QUANTITY_TABLE +.public MemAlloc +.public MemFree +.public MoneyQuantityToString__02023B30 +.public MultiplyByFixedPoint .public _02094D0C .public _02094D20 .public _02097F34 @@ -13,36 +37,6 @@ .public _02097FB8 .public _02097FC4 .public _02097FE4 -.public _020A18BC -.public AVAILABLE_ITEMS_IN_GROUP_TABLE -.public BAG_ITEMS_PTR_MIRROR -.public BitstreamDebug -.public CopyBitsFrom -.public CopyBitsTo -.public GetDungeonGroup -.public GetExclusiveItemType -.public GetItemActionName -.public GetItemBuyPrice -.public GetItemCategory -.public GetItemMoveId -.public GetItemName -.public GetItemPaletteId -.public GetItemSellPrice -.public GetThrownItemQuantityLimit -.public InitBitstreamForRead -.public InitBitstreamForWrite -.public InitItem -.public IsAuraBow -.public IsItemValid -.public IsShoppableItem -.public IsThrownItem -.public ITEM_TABLES_PTRS_1 -.public MemAlloc -.public MemFree -.public MONEY_QUANTITY_TABLE -.public MoneyQuantityToString__02023B30 -.public MultiplyByFixedPoint -.public RandRangeSafe .public strcpy .public strncpy .public sub_0200EB64 diff --git a/asm/main_0200CAFC.s b/asm/main_0200D0A0.s similarity index 96% rename from asm/main_0200CAFC.s rename to asm/main_0200D0A0.s index fc9a3f72..5e94a91b 100644 --- a/asm/main_0200CAFC.s +++ b/asm/main_0200D0A0.s @@ -1,61 +1,8 @@ .include "asm/macros.inc" - .include "main_0200CAFC.inc" + .include "main_0200D0A0.inc" .text - arm_func_start BulkItemToItem -BulkItemToItem: ; 0x0200CFF0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - ldrsh r1, [r4] - mov r5, r0 - cmp r1, #0 - beq _0200D098 - mov r0, #1 - strb r0, [r5] - ldrsh r1, [r4] - mov r0, #0 - strh r1, [r5, #4] - strb r0, [r5, #1] - ldrsh r0, [r5, #4] - bl IsThrownItem - cmp r0, #0 - ldrneh r0, [r4, #2] - strneh r0, [r5, #2] - ldmneia sp!, {r3, r4, r5, pc} - ldrsh r0, [r5, #4] - bl GetItemCategory - cmp r0, #0xe - bgt _0200D078 - subs r1, r0, #6 - addpl pc, pc, r1, lsl #2 - b _0200D08C -_0200D054: ; jump table - b _0200D080 ; case 0 - b _0200D08C ; case 1 - b _0200D08C ; case 2 - b _0200D08C ; case 3 - b _0200D08C ; case 4 - b _0200D08C ; case 5 - b _0200D080 ; case 6 - b _0200D080 ; case 7 - b _0200D080 ; case 8 -_0200D078: - cmp r0, #0xbb - bne _0200D08C -_0200D080: - ldrh r0, [r4, #2] - strh r0, [r5, #2] - ldmia sp!, {r3, r4, r5, pc} -_0200D08C: - mov r0, #0 - strh r0, [r5, #2] - ldmia sp!, {r3, r4, r5, pc} -_0200D098: - bl ItemZInit - ldmia sp!, {r3, r4, r5, pc} - arm_func_end BulkItemToItem - arm_func_start ItemToBulkItem ItemToBulkItem: ; 0x0200D0A0 ldrb r2, [r1] diff --git a/include/item_util_4.h b/include/item_util_4.h index 6cd20d75..0fa56022 100644 --- a/include/item_util_4.h +++ b/include/item_util_4.h @@ -14,6 +14,7 @@ void InitItem(struct item* item, s16 id, s16 quantity, bool8 isSticky); void InitStandardItem(struct item* item, s16 id, bool8 isSticky); void sub_0200CF6C(struct item* item, s16 id, s16 quantity, bool8 isSticky); void InitBulkItem(struct bulk_item* item, s16 id); +void BulkItemToItem(struct item* item, struct bulk_item* bulk_item); #endif //PMDSKY_ITEM_UTIL_4_H diff --git a/main.lsf b/main.lsf index a2a23264..90b8ad7b 100644 --- a/main.lsf +++ b/main.lsf @@ -58,7 +58,7 @@ Static main Object asm/main_0200C5B4.o Object src/item_util.o Object src/item_util_4.o - Object asm/main_0200CAFC.o + Object asm/main_0200D0A0.o Object src/item_util_1.o Object asm/main_0200EB30.o Object src/main_0200ECFC.o diff --git a/src/item_util_4.c b/src/item_util_4.c index f5cc8200..b57525ea 100644 --- a/src/item_util_4.c +++ b/src/item_util_4.c @@ -6,6 +6,7 @@ extern s16 RandRangeSafe(s32, s32); extern s16 _020A18BC[10]; +extern void ItemZInit(); BOOL IsLosableItem(struct item* item) { @@ -161,3 +162,30 @@ void InitBulkItem(struct bulk_item* item, s16 id) { item->quantity = 0; } } + +void BulkItemToItem(struct item* item, struct bulk_item* bulk_item) +{ + if (bulk_item->id != 0) { + item->flags = ITEM_FLAG_EXISTS; + item->id = bulk_item->id; + item->held_by = 0; + if (IsThrownItem(item->id)) { + item->quantity = bulk_item->quantity; + return; + } + + switch(GetItemCategory(item->id)) { + case CATEGORY_POKE: + case CATEGORY_TREASURE_BOXES_1: + case CATEGORY_TREASURE_BOXES_2: + case CATEGORY_TREASURE_BOXES_3: + case 0xBB: + item->quantity = bulk_item->quantity; + return; + default: + item->quantity = 0; + } + } else { + ItemZInit(); + } +}