mirror of
https://github.com/zeldaret/ph
synced 2026-06-26 01:34:46 -04:00
96% match ItemManager::func_ov00_020ad790
This commit is contained in:
@@ -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}
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user