diff --git a/asm/main_0200EB30.s b/asm/main_0200EB30.s index c29d9994..cb8afea3 100644 --- a/asm/main_0200EB30.s +++ b/asm/main_0200EB30.s @@ -68,45 +68,3 @@ _0200EBB8: _0200EBC8: .word BABY_EXCLUSIVE_ITEM_PAIRS arm_func_end ReturnEggExclusiveItem - arm_func_start SetActiveInventoryToMain -SetActiveInventoryToMain: ; 0x0200EBCC - ldr ip, _0200EBD8 ; =SetActiveInventory - mov r0, #0 - bx ip - .align 2, 0 -_0200EBD8: .word SetActiveInventory - arm_func_end SetActiveInventoryToMain - - arm_func_start AllInventoriesZInit -AllInventoriesZInit: ; 0x0200EBDC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, #0 - ldr r6, _0200EC44 ; =BAG_ITEMS_PTR_MIRROR - mov r7, sl - mov fp, sl - mov r4, #6 - mov r5, #0x12c -_0200EBF8: - mul sb, sl, r5 - mov r8, fp -_0200EC00: - ldr r0, [r6] - add r0, r0, sb - mla r0, r8, r4, r0 - bl ItemZInit - add r8, r8, #1 - cmp r8, #0x32 - blt _0200EC00 - ldr r0, [r6] - add r0, r0, sl, lsl #2 - add r0, r0, #0x1000 - add sl, sl, #1 - str r7, [r0, #0x394] - cmp sl, #3 - blt _0200EBF8 - mov r0, r7 - bl SetActiveInventory - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0200EC44: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AllInventoriesZInit diff --git a/include/item.h b/include/item.h index e26d20a4..506230d5 100644 --- a/include/item.h +++ b/include/item.h @@ -1641,17 +1641,18 @@ struct bag_items_inner { #define MAIN_INVENTORY_INDEX 0 #define SPECIAL_EPISODE_INVENTORY_INDEX 1 #define RESCUE_INVENTORY_INDEX 2 +#define NUM_INVENTORIES 3 struct bag_items { // Indexes: // 0x0 - Main, default // 0x1 - Special Episode // 0x2 - Rescue - /* 0x0 */ struct bag_items_inner inventories[3]; + /* 0x0 */ struct bag_items_inner inventories[NUM_INVENTORIES]; /* 0x384 */ struct bag_items_inner *bag_items; /* 0x388 */ u8 active_inventory_idx; u8 fill2[0x1009]; - u32 maybeMoney[3]; // indexed with an u8, uses same indexes as Inventory + u32 maybeMoney[NUM_INVENTORIES]; // 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 23ac225c..c8b13078 100644 --- a/include/main_0200ECFC.h +++ b/include/main_0200ECFC.h @@ -1,6 +1,12 @@ #ifndef PMDSKY_MAIN_0200ECFC_H #define PMDSKY_MAIN_0200ECFC_H +// Set the active inventory to the main inventory +void SetActiveInventoryToMain(void); + +// Init all inventories, all money the player is carrying, and set default active inventory +void AllInventoriesZInit(void); + // Init the special episode inventory and money the player is carrying void SpecialEpisodeInventoryZInit(void); diff --git a/src/main_0200ECFC.c b/src/main_0200ECFC.c index 523839fd..0ea62cf1 100644 --- a/src/main_0200ECFC.c +++ b/src/main_0200ECFC.c @@ -5,9 +5,28 @@ extern struct bag_items* BAG_ITEMS_PTR_MIRROR; extern void ItemZInit(struct item *item); +void SetActiveInventoryToMain(void) +{ + SetActiveInventory(MAIN_INVENTORY_INDEX); +} + +void AllInventoriesZInit(void) +{ + for(int inventory_index = MAIN_INVENTORY_INDEX; inventory_index < NUM_INVENTORIES; inventory_index++) + { + for(int bag_index = 0; bag_index < INVENTORY_SIZE - 2; bag_index++) + { + ItemZInit(&BAG_ITEMS_PTR_MIRROR->inventories[inventory_index].bag_items[bag_index]); + } + BAG_ITEMS_PTR_MIRROR->maybeMoney[inventory_index] = 0; + } + + SetActiveInventory(MAIN_INVENTORY_INDEX); +} + void SpecialEpisodeInventoryZInit(void) { - for(s32 index = 0; index < INVENTORY_SIZE - 2; index++) + for(int index = 0; index < INVENTORY_SIZE - 2; index++) { ItemZInit(&BAG_ITEMS_PTR_MIRROR->inventories[SPECIAL_EPISODE_INVENTORY_INDEX].bag_items[index]); } @@ -17,7 +36,7 @@ void SpecialEpisodeInventoryZInit(void) void RescueInventoryZInit(void) { - for(s32 index = 0; index < INVENTORY_SIZE - 2; index++) + for(int index = 0; index < INVENTORY_SIZE - 2; index++) { ItemZInit(&BAG_ITEMS_PTR_MIRROR->inventories[RESCUE_INVENTORY_INDEX].bag_items[index]); }