From 3a25fcc17dbb9548c979980f4a94fcc32251dfb3 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sat, 17 Feb 2024 00:53:22 +0100 Subject: [PATCH] Decomp `ItemManager::GiveAmmo` --- asm/include/ov14.inc | 3 ++- asm/include/ov31.inc | 7 ++++--- asm/ov00/ItemManager/ItemManager.s | 26 -------------------------- asm/ov00/include/ov00_020b4940.inc | 3 ++- asm/ov00/ov00_020b4940.s | 2 +- asm/ov14.s | 2 +- asm/ov31.s | 6 +++--- src/ItemManager.cpp | 6 ++++++ 8 files changed, 19 insertions(+), 36 deletions(-) diff --git a/asm/include/ov14.inc b/asm/include/ov14.inc index e25978ef..3da6df10 100644 --- a/asm/include/ov14.inc +++ b/asm/include/ov14.inc @@ -2016,7 +2016,7 @@ .extern func_ov00_020c2d54 .extern func_ov00_020c22b8 .extern func_ov00_020cfbf0 -.extern _ZN11ItemManager8GiveAmmoEjj +.extern _ZN11ItemManager8GiveAmmoEjt .extern func_ov00_020d7ad4 .extern func_ov00_020c2c0c .extern func_ov00_020c2d54 @@ -7950,3 +7950,4 @@ .extern func_ov00_0208ba50 .extern func_ov00_0208c38c .extern func_ov00_0208c39c +.extern _ZN11ItemManager8GiveAmmoEjt diff --git a/asm/include/ov31.inc b/asm/include/ov31.inc index bcfc1b68..b85ebec6 100644 --- a/asm/include/ov31.inc +++ b/asm/include/ov31.inc @@ -285,15 +285,15 @@ .extern func_ov00_0209779c .extern func_ov00_0209779c .extern data_027e0f74 -.extern _ZN11ItemManager8GiveAmmoEjj +.extern _ZN11ItemManager8GiveAmmoEjt .extern gItemManager .extern func_ov00_0209779c .extern data_027e0f74 -.extern _ZN11ItemManager8GiveAmmoEjj +.extern _ZN11ItemManager8GiveAmmoEjt .extern gItemManager .extern func_ov00_0209779c .extern data_027e0f74 -.extern _ZN11ItemManager8GiveAmmoEjj +.extern _ZN11ItemManager8GiveAmmoEjt .extern gItemManager .extern func_ov00_0209779c .extern data_027e0f74 @@ -1481,3 +1481,4 @@ .extern func_ov14_021448f4 .extern func_ov14_021458cc .extern func_ov14_02145900 +.extern _ZN11ItemManager8GiveAmmoEjt diff --git a/asm/ov00/ItemManager/ItemManager.s b/asm/ov00/ItemManager/ItemManager.s index 127dcfe6..485c7470 100644 --- a/asm/ov00/ItemManager/ItemManager.s +++ b/asm/ov00/ItemManager/ItemManager.s @@ -3,32 +3,6 @@ .text - .global _ZN11ItemManager8GiveAmmoEjj - arm_func_start _ZN11ItemManager8GiveAmmoEjj -_ZN11ItemManager8GiveAmmoEjj: ; 0x020ad73c - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - ldr lr, [r5, #0xb0] - mov ip, r4, lsl #0x1 - ldrh r3, [lr, ip] - add r2, r3, r2 - strh r2, [lr, ip] - blx _ZNK11ItemManager10GetMaxAmmoEj - ldr r2, [r5, #0xb0] - mov r1, r4, lsl #0x1 - ldrh r1, [r2, r1] - cmp r1, r0 - ldmlsia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, r4 - blx _ZNK11ItemManager10GetMaxAmmoEj - ldr r2, [r5, #0xb0] - mov r1, r4, lsl #0x1 - strh r0, [r2, r1] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end _ZN11ItemManager8GiveAmmoEjj - .global _ZN11ItemManager18func_ov00_020ad790Ej arm_func_start _ZN11ItemManager18func_ov00_020ad790Ej _ZN11ItemManager18func_ov00_020ad790Ej: ; 0x020ad790 diff --git a/asm/ov00/include/ov00_020b4940.inc b/asm/ov00/include/ov00_020b4940.inc index 04a65b93..0326f1ad 100644 --- a/asm/ov00/include/ov00_020b4940.inc +++ b/asm/ov00/include/ov00_020b4940.inc @@ -729,7 +729,7 @@ .extern data_02050f54 .extern _ZNK11ItemManager7GetAmmoEj .extern gItemManager -.extern _ZN11ItemManager8GiveAmmoEjj +.extern _ZN11ItemManager8GiveAmmoEjt .extern gItemManager .extern func_ov00_02093a1c .extern data_027e0f6c @@ -1071,3 +1071,4 @@ .extern func_ov04_0210bc28 .extern func_ov04_0210bc94 .extern func_ov04_021079dc +.extern _ZN11ItemManager8GiveAmmoEjt diff --git a/asm/ov00/ov00_020b4940.s b/asm/ov00/ov00_020b4940.s index 09dca188..f3aa03c4 100644 --- a/asm/ov00/ov00_020b4940.s +++ b/asm/ov00/ov00_020b4940.s @@ -12942,7 +12942,7 @@ func_ov00_020beb5c: ; 0x020beb5c mov r1, r0 mov r0, r4 mov r2, r5 - bl _ZN11ItemManager8GiveAmmoEjj + bl _ZN11ItemManager8GiveAmmoEjt ldmia sp!, {r3, r4, r5, pc} .align 2, 0 arm_func_end func_ov00_020beb5c diff --git a/asm/ov14.s b/asm/ov14.s index d4473a09..c0ca280f 100644 --- a/asm/ov14.s +++ b/asm/ov14.s @@ -26658,7 +26658,7 @@ _021351c4: mov r1, r0 ldr r2, [r5, #0x158] mov r0, r6 - bl _ZN11ItemManager8GiveAmmoEjj + bl _ZN11ItemManager8GiveAmmoEjt _021351ec: ldr r0, _02135360 ; =data_ov00_020eec9c mov r1, #0x100 diff --git a/asm/ov31.s b/asm/ov31.s index 5ebc9faf..15c99550 100644 --- a/asm/ov31.s +++ b/asm/ov31.s @@ -5339,7 +5339,7 @@ func_ov31_0217fe00: ; 0x0217fe00 ldr r0, [r1] mov r1, #5 mov r2, #0xa - bl _ZN11ItemManager8GiveAmmoEjj + bl _ZN11ItemManager8GiveAmmoEjt mov r0, r4 bl func_ov31_0217fd54 ldmia sp!, {r4, pc} @@ -5373,7 +5373,7 @@ func_ov31_0217fe58: ; 0x0217fe58 ldr r0, [r1] mov r1, #4 mov r2, #0xa - bl _ZN11ItemManager8GiveAmmoEjj + bl _ZN11ItemManager8GiveAmmoEjt mov r0, r4 bl func_ov31_0217fd54 ldmia sp!, {r4, pc} @@ -5407,7 +5407,7 @@ func_ov31_0217feb0: ; 0x0217feb0 ldr r0, [r1] mov r1, #7 mov r2, #0xa - bl _ZN11ItemManager8GiveAmmoEjj + bl _ZN11ItemManager8GiveAmmoEjt mov r0, r4 bl func_ov31_0217fd54 ldmia sp!, {r4, pc} diff --git a/src/ItemManager.cpp b/src/ItemManager.cpp index 33be3fc0..a946c3f7 100644 --- a/src/ItemManager.cpp +++ b/src/ItemManager.cpp @@ -267,3 +267,9 @@ u16 ItemManager::GetAmmo(ItemFlag equipId) const { return (*this->mAmmo)[equipId]; } #pragma interworking off + +void ItemManager::GiveAmmo(ItemFlag equipId, u16 amount) { + (*this->mAmmo)[equipId] += amount; + if ((*this->mAmmo)[equipId] <= this->GetMaxAmmo(equipId)) return; + (*this->mAmmo)[equipId] = this->GetMaxAmmo(equipId); +}