From f3d0b29b42954abe62eaf0a13259f3ebc6d8aa9c Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 18 Feb 2024 13:24:49 +0100 Subject: [PATCH] Decomp `ItemManager::RemoveItem` --- asm/include/ov49.inc | 2 +- asm/ov00/ItemManager/ItemManager.s | 30 ------------------------------ asm/ov49.s | 2 +- include/ItemManager.hpp | 2 +- include/global.h | 3 ++- src/ItemManager.cpp | 7 +++++++ 6 files changed, 12 insertions(+), 34 deletions(-) diff --git a/asm/include/ov49.inc b/asm/include/ov49.inc index b6c93084..0c9bcd8d 100644 --- a/asm/include/ov49.inc +++ b/asm/include/ov49.inc @@ -85,7 +85,7 @@ .extern data_027e0fc8 .extern func_01fffcd8 .extern _ZNK11ItemManager7HasItemEj -.extern _ZN11ItemManager10RemoveItemEj +.extern _ZN11ItemManager10RemoveItemEi .extern func_ov00_020d7ad4 .extern func_ov00_020c5a24 .extern _ZN11ItemManager10GiveRupeesEjj diff --git a/asm/ov00/ItemManager/ItemManager.s b/asm/ov00/ItemManager/ItemManager.s index f3585aa3..60053bd6 100644 --- a/asm/ov00/ItemManager/ItemManager.s +++ b/asm/ov00/ItemManager/ItemManager.s @@ -3,36 +3,6 @@ .text - .global _ZN11ItemManager10RemoveItemEj - thumb_func_start _ZN11ItemManager10RemoveItemEj -_ZN11ItemManager10RemoveItemEj: ; 0x020adb00 - push {r3, r4, r5, r6} - mov r2, #0x4a - lsl r2, r2, #2 - add r4, r0, r2 - lsr r2, r1, #5 - mov r5, #0x1f - lsl r3, r2, #2 - mov r6, #1 - and r5, r1 - ldr r2, [r4, r3] - lsl r6, r5 - bic r2, r6 - str r2, [r4, r3] - cmp r1, #0 - blt _020adb2c - cmp r1, #0xb - bgt _020adb2c - add r0, #0xb0 - ldr r2, [r0] - mov r3, #0 - lsl r0, r1, #1 - strh r3, [r2, r0] -_020adb2c: - pop {r3, r4, r5, r6} - bx lr - thumb_func_end _ZN11ItemManager10RemoveItemEj - .global _ZN11ItemManager15LoadFanfareItemEj thumb_func_start _ZN11ItemManager15LoadFanfareItemEj _ZN11ItemManager15LoadFanfareItemEj: ; 0x020adb30 diff --git a/asm/ov49.s b/asm/ov49.s index 5aceaf16..59eb8f3a 100644 --- a/asm/ov49.s +++ b/asm/ov49.s @@ -862,7 +862,7 @@ func_ov49_02196008: ; 0x02196008 ldr r0, _021960f0 ; =gItemManager mov r1, #1 ldr r0, [r0] - blx _ZN11ItemManager10RemoveItemEj + blx _ZN11ItemManager10RemoveItemEi ldrb r0, [r4, #0x5c9] add r0, r0, #1 strb r0, [r4, #0x5c9] diff --git a/include/ItemManager.hpp b/include/ItemManager.hpp index 07f726a4..4d213684 100644 --- a/include/ItemManager.hpp +++ b/include/ItemManager.hpp @@ -305,7 +305,7 @@ public: // Item bool HasItem(ItemFlag item) const; void AddItem(ItemFlag item); - void RemoveItem(ItemFlag item); + void RemoveItem(s32 item); void GiveItem(ItemId id, unk32 param2, unk32 param3); void GiveEquipItem(ItemFlag item, u16 ammo); diff --git a/include/global.h b/include/global.h index 28d2c481..53232a65 100644 --- a/include/global.h +++ b/include/global.h @@ -4,7 +4,8 @@ #define NULL 0 #define GET_FLAG(arr, pos) (((1 << ((pos) & 0x1f)) & (arr)[(pos) >> 5]) != 0) -#define SET_FLAG(arr, pos) ((arr)[(pos) >> 5] |= 1 << ((pos) & 0x1f)) +#define SET_FLAG(arr, pos) ((arr)[((u32(pos))) >> 5] |= 1 << ((pos) & 0x1f)) +#define RESET_FLAG(arr, pos) ((arr)[((u32)(pos)) >> 5] &= ~(1 << ((pos) & 0x1f))) #ifdef NONMATCHING #define NONMATCH diff --git a/src/ItemManager.cpp b/src/ItemManager.cpp index 32d4fd0c..1513158e 100644 --- a/src/ItemManager.cpp +++ b/src/ItemManager.cpp @@ -373,3 +373,10 @@ ARM bool ItemManager::IsTreasureSalvaged(u32 index) const { THUMB void ItemManager::SetTreasureSalvaged(u32 index) { SET_FLAG(&this->mSalvagedTreasureFlags, index); } + +THUMB void ItemManager::RemoveItem(s32 item) { + RESET_FLAG(this->mItemFlags.flags, item); + if (item >= ItemFlag_EQUIP_START && item <= ItemFlag_EQUIP_END) { + (*this->mAmmo)[item] = 0; + } +}