diff --git a/asm/ov00/Item/ItemManager.s b/asm/ov00/Item/ItemManager.s index 9ddbf7e2..d93b94e6 100644 --- a/asm/ov00/Item/ItemManager.s +++ b/asm/ov00/Item/ItemManager.s @@ -3,37 +3,6 @@ .text - .global _ZN11ItemManager13ForceEquipItemEi - thumb_func_start _ZN11ItemManager13ForceEquipItemEi -_ZN11ItemManager13ForceEquipItemEi: ; 0x020ae3d0 - push {r3, r4, r5, r6, r7, lr} - mov r4, #0 - add r6, r0, #0 - add r7, r1, #0 - add r5, r4, #0 -_020ae3da: - cmp r4, r7 - beq _020ae3ee - add r0, r6, #0 - add r0, #0xac - ldr r0, [r0] - mov r1, #0 - ldr r0, [r0, r5] - ldr r2, [r0] - ldr r2, [r2, #0x28] - blx r2 -_020ae3ee: - add r4, r4, #1 - add r5, r5, #4 - cmp r4, #0xb - blt _020ae3da - str r7, [r6, #8] - mov r0, #1 - strh r0, [r6, #0x20] - pop {r3, r4, r5, r6, r7, pc} - .align 2, 0 - thumb_func_end _ZN11ItemManager13ForceEquipItemEi - .global _ZN11ItemManager20ClearForcedEquipItemEv thumb_func_start _ZN11ItemManager20ClearForcedEquipItemEv _ZN11ItemManager20ClearForcedEquipItemEv: ; 0x020ae400 diff --git a/asm/ov42.inc b/asm/ov42.inc index 63708d77..c91bb449 100644 --- a/asm/ov42.inc +++ b/asm/ov42.inc @@ -1,6 +1,6 @@ #pragma once .extern _ZN10MapManager18func_ov00_02083918EiPi -.extern _ZN11ItemManager13ForceEquipItemEi +.extern _ZN11ItemManager14ForceEquipItemEi .extern _ZN11ItemManager20ClearForcedEquipItemEv .extern _ZN12ActorManager8GetActorEP8ActorRef .extern _ZN14AdventureFlags3GetEj diff --git a/asm/ov42.s b/asm/ov42.s index ff2f3570..4b73f54e 100644 --- a/asm/ov42.s +++ b/asm/ov42.s @@ -326,7 +326,7 @@ _02189918: ldr r0, _02189afc ; =gItemManager mov r1, #5 ldr r0, [r0] - blx _ZN11ItemManager13ForceEquipItemEi + blx _ZN11ItemManager14ForceEquipItemEi ldr r1, _02189b00 ; =data_027e0fc8 mov r0, r7 ldr r4, [r1] diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index b283c01a..82c30210 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -807,3 +807,12 @@ ARM bool ItemManager::SetEquippedItem(ItemFlag equipId) { ARM void ItemManager::EquipPreviousItem() { this->SetEquippedItem(mPrevEquippedItem); } + +THUMB void ItemManager::ForceEquipItem(ItemFlag equipId) { + for (ItemFlag i = ItemFlag_EQUIP_START; i < ItemFlag_EQUIP_END; ++i) { + if (i == equipId) continue; + (*mEquipItems)[i - ItemFlag_EQUIP_START]->UpdateInUse(0); + } + mForcedItem = equipId; + mEquipLoadTimer = 1; +}