From 2a478bc0622dea3fb21471818944ff63eb42f571 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 19 Jan 2026 11:19:06 -0800 Subject: [PATCH] more item funcs --- asm/include/main_0200EB30.inc | 1 + asm/main_0200EB30.s | 62 ----------------------------------- include/item.h | 17 +++++++--- include/main_0200ECFC.h | 9 +++++ src/main_0200ECFC.c | 34 +++++++++++++++++-- 5 files changed, 54 insertions(+), 69 deletions(-) diff --git a/asm/include/main_0200EB30.inc b/asm/include/main_0200EB30.inc index 9f841db6..66b2ee7a 100644 --- a/asm/include/main_0200EB30.inc +++ b/asm/include/main_0200EB30.inc @@ -4,3 +4,4 @@ .public IsItemValid .public ITEM_DATA_TABLE_PTRS .public ItemZInit +.public SetActiveInventory diff --git a/asm/main_0200EB30.s b/asm/main_0200EB30.s index 20a93ca9..c29d9994 100644 --- a/asm/main_0200EB30.s +++ b/asm/main_0200EB30.s @@ -110,65 +110,3 @@ _0200EC00: .align 2, 0 _0200EC44: .word BAG_ITEMS_PTR_MIRROR arm_func_end AllInventoriesZInit - - arm_func_start SpecialEpisodeInventoryZInit -SpecialEpisodeInventoryZInit: ; 0x0200EC48 - stmdb sp!, {r4, r5, r6, lr} - ldr r5, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR - mov r6, #0 - mov r4, #6 -_0200EC58: - ldr r0, [r5] - add r0, r0, #0x12c - mla r0, r6, r4, r0 - bl ItemZInit - add r6, r6, #1 - cmp r6, #0x32 - blt _0200EC58 - ldr r0, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1000 - str r1, [r0, #0x398] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0200EC8C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SpecialEpisodeInventoryZInit - - arm_func_start RescueInventoryZInit -RescueInventoryZInit: ; 0x0200EC90 - stmdb sp!, {r4, r5, r6, lr} - ldr r5, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR - mov r6, #0 - mov r4, #6 -_0200ECA0: - ldr r0, [r5] - add r0, r0, #0x258 - mla r0, r6, r4, r0 - bl ItemZInit - add r6, r6, #1 - cmp r6, #0x32 - blt _0200ECA0 - ldr r0, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x1000 - str r1, [r0, #0x39c] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0200ECD4: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RescueInventoryZInit - - arm_func_start SetActiveInventory -SetActiveInventory: ; 0x0200ECD8 - ldr r2, _0200ECF8 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x12c - ldr r3, [r2] - strb r0, [r3, #0x388] - ldr r2, [r2] - mla r1, r0, r1, r2 - str r1, [r2, #0x384] - bx lr - .align 2, 0 -_0200ECF8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetActiveInventory diff --git a/include/item.h b/include/item.h index 95fccfb9..e26d20a4 100644 --- a/include/item.h +++ b/include/item.h @@ -1634,15 +1634,24 @@ struct item_volatile { }; struct bag_items_inner { - /* 0x0 */ struct item bag_items[INVENTORY_SIZE]; + /* 0x0 */ struct item bag_items[INVENTORY_SIZE - 2]; + // NOTE: I don't know why we have to do the subtraction - Seth }; +#define MAIN_INVENTORY_INDEX 0 +#define SPECIAL_EPISODE_INVENTORY_INDEX 1 +#define RESCUE_INVENTORY_INDEX 2 + struct bag_items { - u8 fill0[0x384]; + // Indexes: + // 0x0 - Main, default + // 0x1 - Special Episode + // 0x2 - Rescue + /* 0x0 */ struct bag_items_inner inventories[3]; /* 0x384 */ struct bag_items_inner *bag_items; - u8 unk388; + /* 0x388 */ u8 active_inventory_idx; u8 fill2[0x1009]; - u32 maybeMoney[]; // Unknown size, but indexed with an u8 + u32 maybeMoney[3]; // indexed with an u8, uses same indexes as Inventory }; struct bulk_item diff --git a/include/main_0200ECFC.h b/include/main_0200ECFC.h index 6571e6af..23ac225c 100644 --- a/include/main_0200ECFC.h +++ b/include/main_0200ECFC.h @@ -1,6 +1,15 @@ #ifndef PMDSKY_MAIN_0200ECFC_H #define PMDSKY_MAIN_0200ECFC_H +// Init the special episode inventory and money the player is carrying +void SpecialEpisodeInventoryZInit(void); + +// Init the rescue inventory and money the player is carrying +void RescueInventoryZInit(void); + +// Set the active inventory to the current index +void SetActiveInventory(s8 index); + // Gets the amount of money the player is carrying. // return: value u32 GetMoneyCarried(void); diff --git a/src/main_0200ECFC.c b/src/main_0200ECFC.c index 1a8392c6..523839fd 100644 --- a/src/main_0200ECFC.c +++ b/src/main_0200ECFC.c @@ -3,9 +3,37 @@ extern struct bag_items* BAG_ITEMS_PTR_MIRROR; +extern void ItemZInit(struct item *item); + +void SpecialEpisodeInventoryZInit(void) +{ + for(s32 index = 0; index < INVENTORY_SIZE - 2; index++) + { + ItemZInit(&BAG_ITEMS_PTR_MIRROR->inventories[SPECIAL_EPISODE_INVENTORY_INDEX].bag_items[index]); + } + BAG_ITEMS_PTR_MIRROR->maybeMoney[SPECIAL_EPISODE_INVENTORY_INDEX] = 0; +} + + +void RescueInventoryZInit(void) +{ + for(s32 index = 0; index < INVENTORY_SIZE - 2; index++) + { + ItemZInit(&BAG_ITEMS_PTR_MIRROR->inventories[RESCUE_INVENTORY_INDEX].bag_items[index]); + } + BAG_ITEMS_PTR_MIRROR->maybeMoney[RESCUE_INVENTORY_INDEX] = 0; +} + + +void SetActiveInventory(s8 index) +{ + BAG_ITEMS_PTR_MIRROR->active_inventory_idx = index; + BAG_ITEMS_PTR_MIRROR->bag_items = &BAG_ITEMS_PTR_MIRROR->inventories[index]; +} + u32 GetMoneyCarried(void) { - int tmp = BAG_ITEMS_PTR_MIRROR->unk388; + int tmp = BAG_ITEMS_PTR_MIRROR->active_inventory_idx; return BAG_ITEMS_PTR_MIRROR->maybeMoney[tmp]; } @@ -20,11 +48,11 @@ void SetMoneyCarried(s32 amount) var_r0 = 0; } - BAG_ITEMS_PTR_MIRROR->maybeMoney[BAG_ITEMS_PTR_MIRROR->unk388] = var_r0; + BAG_ITEMS_PTR_MIRROR->maybeMoney[BAG_ITEMS_PTR_MIRROR->active_inventory_idx] = var_r0; } void AddMoneyCarried(s32 amount) { - SetMoneyCarried(amount + BAG_ITEMS_PTR_MIRROR->maybeMoney[BAG_ITEMS_PTR_MIRROR->unk388]); + SetMoneyCarried(amount + BAG_ITEMS_PTR_MIRROR->maybeMoney[BAG_ITEMS_PTR_MIRROR->active_inventory_idx]); }