mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
more item funcs
This commit is contained in:
parent
74f0a49c5a
commit
2a478bc062
|
|
@ -4,3 +4,4 @@
|
|||
.public IsItemValid
|
||||
.public ITEM_DATA_TABLE_PTRS
|
||||
.public ItemZInit
|
||||
.public SetActiveInventory
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user