96% match ItemManager::func_ov00_020ad790

This commit is contained in:
Aetias
2024-02-17 13:41:27 +01:00
parent ac858cb5da
commit 4ab8f04b33
5 changed files with 129 additions and 100 deletions
+1 -98
View File
@@ -3,103 +3,6 @@
.text
.global _ZN11ItemManager18func_ov00_020ad790Ej
arm_func_start _ZN11ItemManager18func_ov00_020ad790Ej
_ZN11ItemManager18func_ov00_020ad790Ej: ; 0x020ad790
stmdb sp!, {r4, r5, r6, lr}
ldr r2, _020ad8c4 ; =data_027e0d38
mov r6, r0
ldr r0, [r2]
mov r5, r1
bl func_ov00_02078b40
cmp r0, #2
bne _020ad7c0
ldr r0, _020ad8c8 ; =data_027e10a4
ldr r0, [r0]
bl func_ov15_02136670
ldmia sp!, {r4, r5, r6, pc}
_020ad7c0:
ldr r0, _020ad8c4 ; =data_027e0d38
ldr r0, [r0]
ldr r0, [r0, #0x14]
cmp r0, #1
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
ldr r0, _020ad8cc ; =gOverlayManager
ldr r1, _020ad8d0 ; =0x0000001d
ldr r0, [r0, #0x18]
cmp r0, r1
bne _020ad800
ldr r0, _020ad8d4 ; =data_ov29_0217a4ac
ldrb r0, [r0, #0x54]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r4, r5, r6, pc}
_020ad800:
ldr r0, _020ad8d8 ; =data_027e0e60
ldr r4, [r6, #8]
ldr r0, [r0]
bl func_ov00_020849f8
cmp r0, #0
moveq r2, #1
ldr r1, [r6]
mvn r0, #0
movne r2, #0
cmp r1, r0
beq _020ad874
cmp r2, #0
bne _020ad840
sub r0, r1, #9
cmp r0, #1
bhi _020ad874
_020ad840:
ldr r0, _020ad8dc ; =data_027e0fc8
ldr r0, [r0]
cmp r0, #0
beq _020ad860
mov r1, r5
bl func_ov00_020bbd80
cmp r0, #0
beq _020ad874
_020ad860:
ldr r1, [r6]
mov r0, r6
bl _ZN11ItemManager7HasItemEj
cmp r0, #0
ldrne r4, [r6]
_020ad874:
mvn r0, #0
cmp r4, r0
beq _020ad8bc
ldrh r0, [r6, #0x20]
cmp r0, #0
beq _020ad89c
cmp r5, #0
moveq r0, #1
movne r0, #0
ldmia sp!, {r4, r5, r6, pc}
_020ad89c:
mov r0, r6
mov r1, r4
bl _ZN11ItemManager12GetEquipItemEj
ldr r2, [r0]
mov r1, r5
ldr r2, [r2, #0x14]
blx r2
ldmia sp!, {r4, r5, r6, pc}
_020ad8bc:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
arm_func_end _ZN11ItemManager18func_ov00_020ad790Ej
_020ad8c4: .word data_027e0d38
_020ad8c8: .word data_027e10a4
_020ad8cc: .word gOverlayManager
_020ad8d0: .word 0x0000001d
_020ad8d4: .word data_ov29_0217a4ac
_020ad8d8: .word data_027e0e60
_020ad8dc: .word data_027e0fc8
.global _ZNK11ItemManager19GetEquippedShipPartEj
thumb_func_start _ZNK11ItemManager19GetEquippedShipPartEj
_ZNK11ItemManager19GetEquippedShipPartEj: ; 0x020ad8e0
@@ -1625,7 +1528,7 @@ _ZN11ItemManager17EquipPreviousItemEv: ; 0x020ae3c0
bx ip
.align 2, 0
arm_func_end _ZN11ItemManager17EquipPreviousItemEv
_020ae3cc: .word _ZN11ItemManager15SetEquippedItemEj
_020ae3cc: .word _ZN11ItemManager15SetEquippedItemEj - 1
.global _ZN11ItemManager13ForceEquipItemEj
thumb_func_start _ZN11ItemManager13ForceEquipItemEj
@@ -0,0 +1,85 @@
stmdb sp!, {r4, r5, r6, lr}
lda r2, data_027e0d38
mov r6, r0
ldr r0, [r2]
mov r5, r1
bl func_ov00_02078b40
cmp r0, #2
bne _020ad7c0
lda r0, data_027e10a4
ldr r0, [r0]
bl func_ov15_02136670
ldmia sp!, {r4, r5, r6, pc}
_020ad7c0:
lda r0, data_027e0d38
ldr r0, [r0]
ldr r0, [r0, #0x14]
cmp r0, #1
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, pc}
lda r0, gOverlayManager
ldconst r1, #0x1d
ldr r0, [r0, #0x18]
cmp r0, r1
bne _020ad800
lda r0, data_ov29_0217a4ac
ldrb r0, [r0, #0x54]
cmp r0, #0
movne r0, #0
ldmneia sp!, {r4, r5, r6, pc}
_020ad800:
lda r0, data_027e0e60
ldr r4, [r6, #8]
ldr r0, [r0]
bl func_ov00_020849f8
cmp r0, #0
moveq r2, #1
ldr r1, [r6]
mvn r0, #0
movne r2, #0
cmp r1, r0
beq _020ad874
cmp r2, #0
bne _020ad840
sub r0, r1, #9
cmp r0, #1
bhi _020ad874
_020ad840:
lda r0, data_027e0fc8
ldr r0, [r0]
cmp r0, #0
beq _020ad860
mov r1, r5
bl func_ov00_020bbd80
cmp r0, #0
beq _020ad874
_020ad860:
ldr r1, [r6]
mov r0, r6
bl _ZN11ItemManager7HasItemEj
cmp r0, #0
ldrne r4, [r6]
_020ad874:
mvn r0, #0
cmp r4, r0
beq _020ad8bc
ldrh r0, [r6, #0x20]
cmp r0, #0
beq _020ad89c
cmp r5, #0
moveq r0, #1
movne r0, #0
ldmia sp!, {r4, r5, r6, pc}
_020ad89c:
mov r0, r6
mov r1, r4
bl _ZN11ItemManager12GetEquipItemEj
ldr r2, [r0]
mov r1, r5
ldr r2, [r2, #0x14]
blx r2
ldmia sp!, {r4, r5, r6, pc}
_020ad8bc:
mov r0, #0
ldmia sp!, {r4, r5, r6, pc}
+1 -1
View File
@@ -254,7 +254,7 @@ public:
bool EquipItem_vfunc_3c(Vec4p *param1, ItemFlag equipId);
void EquipItem_vfunc_2c(ItemFlag equipId);
EquipItem* GetEquipItem(ItemFlag equipId);
unk32 func_ov00_020ad790(unk32 param1);
bool func_ov00_020ad790(unk32 param1);
bool SetEquippedItem(ItemFlag equipId);
void EquipPreviousItem();
void ForceEquipItem(ItemFlag equipId);
+1 -1
View File
@@ -88,9 +88,9 @@ enum OverlayIndex_ {
};
class OverlayManager {
public:
OverlayId mLoadedOverlays[OverlayIndex_COUNT];
public:
void Unload(OverlayIndex index);
void Load(OverlayIndex index, OverlayId id);
void LoadIfNotLoaded(OverlayIndex index, OverlayId id);
+41
View File
@@ -263,3 +263,44 @@ ARM void ItemManager::GiveAmmo(ItemFlag equipId, u16 amount) {
if ((*this->mAmmo)[equipId] <= this->GetMaxAmmo(equipId)) return;
(*this->mAmmo)[equipId] = this->GetMaxAmmo(equipId);
}
extern "C" unk32 func_ov00_02078b40(UnkStruct_027e0d38 *param1);
extern void *data_027e10a4;
extern "C" bool func_ov15_02136670(void *param1);
extern unk8 data_ov29_0217a4ac[];
extern void *data_027e0e60;
extern "C" bool func_ov00_020849f8(void *param1);
extern unk32 data_027e0fc8;
extern "C" bool func_ov00_020bbd80(unk32 param1, unk32 param2);
extern "C" void _ZN11ItemManager12GetEquipItemEj();
ARM NONMATCH bool ItemManager::func_ov00_020ad790(unk32 param1) {
#ifndef NONMATCHING
#include "../asm/ov00/ItemManager/ItemManager_func_ov00_020ad790.inc"
#else
unk32 unk1 = func_ov00_02078b40(data_027e0d38);
if (unk1 == 2) return func_ov15_02136670(data_027e10a4);
if (data_027e0d38->mUnk_14 == 1) return false;
// NONMATCH: OverlayId_29 should be in constant pool
if (gOverlayManager.mLoadedOverlays[OverlayIndex_6] == OverlayId_29 && data_ov29_0217a4ac[0x54] != 0) {
return false;
}
ItemFlag equipId = this->mForcedItem;
bool unk2 = !func_ov00_020849f8(data_027e0e60);
if (
this->mEquippedItem != ItemFlag_None &&
(unk2 || this->mEquippedItem - 9 <= 1) &&
(data_027e0fc8 == 0 || func_ov00_020bbd80(data_027e0fc8, param1)) &&
this->HasItem(this->mEquippedItem)
) {
equipId = this->mEquippedItem;
}
if (equipId != ItemFlag_None) {
if (this->mEquipLoadTimer != 0) return param1 == 0;
return this->GetEquipItem(equipId)->IsUsable(param1);
}
return false;
#endif
}