From 81c5e92ebc5d43c30ac81b52a2c81c1b4b8f5d69 Mon Sep 17 00:00:00 2001 From: Aetias Date: Tue, 30 Apr 2024 18:15:26 +0200 Subject: [PATCH] Decomp `ItemManager::func_ov00_020ae4dc` --- asm/ov00/Item/ItemManager.s | 17 ----------------- asm/ov29.inc | 2 +- asm/ov29.s | 2 +- include/Item/ItemManager.hpp | 5 +++-- src/00_Core/Item/ItemManager.cpp | 11 +++++++++++ 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/asm/ov00/Item/ItemManager.s b/asm/ov00/Item/ItemManager.s index e63e6ce9..e8e5132b 100644 --- a/asm/ov00/Item/ItemManager.s +++ b/asm/ov00/Item/ItemManager.s @@ -3,23 +3,6 @@ .text - .global _ZN11ItemManager18func_ov00_020ae4dcEj - arm_func_start _ZN11ItemManager18func_ov00_020ae4dcEj -_ZN11ItemManager18func_ov00_020ae4dcEj: ; 0x020ae4dc - ldrh r3, [r0, #0xba] - add r2, r3, r1 - cmp r2, #9 - movgt r1, #9 - strgth r1, [r0, #0xba] - bxgt lr - rsb r1, r1, #0 - cmp r3, r1 - movlt r1, #0 - strlth r1, [r0, #0xba] - strgeh r2, [r0, #0xba] - bx lr - arm_func_end _ZN11ItemManager18func_ov00_020ae4dcEj - .global _ZN11ItemManager9SetPotionEjh arm_func_start _ZN11ItemManager9SetPotionEjh _ZN11ItemManager9SetPotionEjh: ; 0x020ae50c diff --git a/asm/ov29.inc b/asm/ov29.inc index c2e7da92..36a8a66f 100644 --- a/asm/ov29.inc +++ b/asm/ov29.inc @@ -10,7 +10,7 @@ .extern _ZN10MapManager18func_ov00_02083938Ei .extern _ZN10MapManager18func_ov00_020846a4Ev .extern _ZN10MapManager18func_ov00_02084d24Ecci -.extern _ZN11ItemManager18func_ov00_020ae4dcEj +.extern _ZN11ItemManager18func_ov00_020ae4dcEi .extern _ZN12ActorManager12FilterActorsEP15ActorFilterBaseP9ActorList .extern _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j .extern _ZN12ActorManager18func_ov00_020c3b2cEPi diff --git a/asm/ov29.s b/asm/ov29.s index cea23880..81c19ba6 100644 --- a/asm/ov29.s +++ b/asm/ov29.s @@ -755,7 +755,7 @@ _0216df70: ldr r0, _0216e008 ; =gItemManager mvn r1, #0 ldr r0, [r0] - bl _ZN11ItemManager18func_ov00_020ae4dcEj + bl _ZN11ItemManager18func_ov00_020ae4dcEi add r0, r6, r4 add r1, r7, r5 ldr r3, _0216e000 ; =data_027e0fc8 diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index bdb75c62..caaab162 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -20,6 +20,7 @@ extern "C" { #define MAX_HOURGLASS_SECONDS 1500 // 25 minutes #define MAX_AMMO_UPGRADE 2 +#define MAX_UNK_0BA 9 typedef s32 FairyId; enum FairyId_ { @@ -205,7 +206,7 @@ private: /* 0b4 */ u16 mQuiverSize; /* 0b6 */ u16 mBombBagSize; /* 0b8 */ u16 mBombchuBagSize; - /* 0ba */ unk16 mUnk_0ba; // only between 0 and 9 + /* 0ba */ u16 mUnk_0ba; // only between 0 and 9 /* 0bc */ Potion mPotions[2]; /* 0be */ unk8 mUnk_0be[2]; // padding? /* 0c0 */ ItemModel *mItemModels[ItemModelId_COUNT]; @@ -323,7 +324,7 @@ public: void GiveKeys(u32 amount); // Unknown - void func_ov00_020ae4dc(unk32 param1); // sets mUnk_0ba + void func_ov00_020ae4dc(s32 param1); void func_ov00_020ae648(unk32 param1, unk32 param2, unk32 param3); }; diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index 7b7db21f..617ec311 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -842,3 +842,14 @@ THUMB void ItemManager::UpgradeBombchuBag() { if (mBombchuBagSize < MAX_AMMO_UPGRADE) mBombchuBagSize += 1; (*mAmmo)[ItemFlag_BombchuBag] = this->GetMaxAmmo(ItemFlag_BombchuBag); } + +ARM void ItemManager::func_ov00_020ae4dc(s32 param1) { + s32 newValue = mUnk_0ba + param1; + if (newValue > MAX_UNK_0BA) { + mUnk_0ba = MAX_UNK_0BA; + } else if (mUnk_0ba < -param1) { + mUnk_0ba = 0; + } else { + mUnk_0ba = newValue; + } +}