more item funcs

This commit is contained in:
Seth Barberee 2026-01-19 11:19:06 -08:00
parent 74f0a49c5a
commit 2a478bc062
5 changed files with 54 additions and 69 deletions

View File

@ -4,3 +4,4 @@
.public IsItemValid
.public ITEM_DATA_TABLE_PTRS
.public ItemZInit
.public SetActiveInventory

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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]);
}