progress on ActorNaviBase.cpp

This commit is contained in:
Yanis002
2025-02-08 19:30:22 +01:00
parent bd747975ff
commit c81b52be86
11 changed files with 327 additions and 20 deletions
+2 -2
View File
@@ -2421,7 +2421,7 @@ func_ov000_020b849c kind:function(arm,size=0x34) addr:0x20b849c
func_ov000_020b84d0 kind:function(arm,size=0x8) addr:0x20b84d0
func_ov000_020b84d8 kind:function(arm,size=0x54) addr:0x20b84d8
func_ov000_020b852c kind:function(arm,size=0x10) addr:0x20b852c
func_ov000_020b853c kind:function(arm,size=0x14) addr:0x20b853c
_ZN9ActorNavi19func_ov000_020b853cEv kind:function(arm,size=0x14) addr:0x20b853c
func_ov000_020b8550 kind:function(arm,size=0x48) addr:0x20b8550
func_ov000_020b8598 kind:function(arm,size=0x40) addr:0x20b8598
func_ov000_020b85d8 kind:function(thumb,size=0x28) addr:0x20b85d8
@@ -2450,7 +2450,7 @@ _ZN13ActorNaviBase8vfunc_ccEPi kind:function(arm,size=0x2cc) addr:0x20b88c4
_ZN13ActorNaviBase12GetOffsetPosEP5Vec3p kind:function(arm,size=0x1c) addr:0x20b8b90
_ZN13ActorNaviBase8vfunc_38Ev kind:function(arm,size=0x18) addr:0x20b8bac
_ZN13ActorNaviBase8vfunc_d0Ev kind:function(arm,size=0x8c) addr:0x20b8bc4
_ZN13ActorNaviBase19func_ov000_020b8c50Ev kind:function(arm,size=0x48) addr:0x20b8c50
_ZN13ActorNaviBase19func_ov000_020b8c50Ei kind:function(arm,size=0x48) addr:0x20b8c50
_ZN13ActorNaviBase19func_ov000_020b8c98Eiii kind:function(arm,size=0x9c) addr:0x20b8c98
_ZN13ActorNaviBase8vfunc_d4Ev kind:function(arm,size=0x444) addr:0x20b8d34
_ZN13ActorNaviBase8vfunc_d8Ev kind:function(arm,size=0x4) addr:0x20b9178
+2 -2
View File
@@ -2421,7 +2421,7 @@ func_ov000_020b849c kind:function(arm,size=0x34) addr:0x20b843c
func_ov000_020b84d0 kind:function(arm,size=0x8) addr:0x20b8470
func_ov000_020b84d8 kind:function(arm,size=0x54) addr:0x20b8478
func_ov000_020b852c kind:function(arm,size=0x10) addr:0x20b84cc
func_ov000_020b853c kind:function(arm,size=0x14) addr:0x20b84dc
_ZN9ActorNavi19func_ov000_020b853cEv kind:function(arm,size=0x14) addr:0x20b84dc
func_ov000_020b8550 kind:function(arm,size=0x48) addr:0x20b84f0
func_ov000_020b8598 kind:function(arm,size=0x40) addr:0x20b8538
func_ov000_020b85d8 kind:function(thumb,size=0x28) addr:0x20b8578
@@ -2450,7 +2450,7 @@ _ZN13ActorNaviBase8vfunc_ccEPi kind:function(arm,size=0x2cc) addr:0x20b8864
_ZN13ActorNaviBase12GetOffsetPosEP5Vec3p kind:function(arm,size=0x1c) addr:0x20b8b30
_ZN13ActorNaviBase8vfunc_38Ev kind:function(arm,size=0x18) addr:0x20b8b4c
_ZN13ActorNaviBase8vfunc_d0Ev kind:function(arm,size=0x8c) addr:0x20b8b64
_ZN13ActorNaviBase19func_ov000_020b8c50Ev kind:function(arm,size=0x48) addr:0x20b8bf0
_ZN13ActorNaviBase19func_ov000_020b8c50Ei kind:function(arm,size=0x48) addr:0x20b8bf0
_ZN13ActorNaviBase19func_ov000_020b8c98Eiii kind:function(arm,size=0x9c) addr:0x20b8c38
_ZN13ActorNaviBase8vfunc_d4Ev kind:function(arm,size=0x444) addr:0x20b8cd4
_ZN13ActorNaviBase8vfunc_d8Ev kind:function(arm,size=0x4) addr:0x20b9118
+7 -5
View File
@@ -7,20 +7,22 @@ public:
/* 294 */ ModelRender mUnk_294;
/* 2f0 */ void *mUnk_2f0;
/* 2f4 */ unk8 mUnk_2f4[0x40];
/* 334 */ unk32 mUnk_334;
/* 338 */ unk32 mUnk_338;
/* 33c */ unk32 mUnk_33c;
/* 334 */ Vec3p mUnk_334;
/* 340 */ unk16 mUnk_340;
/* 342 */ unk8 mUnk_342[0x2];
/* 344 */ unk32 mUnk_344;
/* 344 */ u32 mUnk_344;
/* 348 */ unk32 mUnk_348;
/* 34c */ unk8 mUnk_34c[0x68];
/* 34c */ unk8 mUnk_34c[0x38];
/* 384 */ Mat3p mUnk_384;
/* 3a8 */ unk8 mUnk_3a8[0xC];
/* 3b4 */ EquipHammer *mHammer;
/* 3b8 */ unk32 mUnk_3b8;
/* 3bc */ unk32 mUnk_3bc;
/* 3c0 */ u8 mUnk_3c0[0x8];
/* 3c8 */
void func_ov000_020b853c(void);
bool func_ov059_0219933c(u32 param1);
void func_ov059_0219a0ac();
void func_ov059_0219aa08();
+1 -1
View File
@@ -70,7 +70,7 @@ public:
/* ec */ virtual void vfunc_ec();
/* f0 */
void func_ov000_020b8c50();
void func_ov000_020b8c50(unk32);
void func_ov000_020b8c98(unk32 param1, unk32 param2, unk32 param3);
void TeleportAboveLink();
void func_ov000_020b9770(s32 param1);
+2
View File
@@ -215,6 +215,8 @@ public:
// Unknown
void func_ov00_020ae4dc(s32 param1);
void func_ov000_020c0c44(void*);
void func_ov000_020c0e5c(void*, unk32);
};
extern ItemManager *gItemManager;
+1 -1
View File
@@ -41,7 +41,7 @@ public:
/* 10 */
bool func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Vec4p *param4);
bool func_01ffbf5c(s32 param1, Vec3p *param2, Vec3p *param3, s32 length);
bool func_01ffbf5c(struct UnkStruct* param1, Vec3p *param2, Vec3p *param3, s32 length);
bool func_01ffc118(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7);
bool func_01ffd1e0(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7);
+4
View File
@@ -55,6 +55,10 @@ public:
return mState;
}
inline bool IsReleased(void) {
return mIsReleased;
}
inline unk32 GetChargeTimer(void) {
return mChargeTimer;
}
+1 -1
View File
@@ -8,7 +8,7 @@ bool ActorNaviBase::vfunc_cc(unk32 *param1) {}
void ActorNaviBase::GetOffsetPos(Vec3p *pos) {}
unk32 ActorNaviBase::vfunc_38() {}
void ActorNaviBase::vfunc_d0() {}
void ActorNaviBase::func_ov000_020b8c50() {}
void ActorNaviBase::func_ov000_020b8c50(unk32) {}
void ActorNaviBase::func_ov000_020b8c98(unk32 param1, unk32 param2, unk32 param3) {}
void ActorNaviBase::vfunc_d4() {}
void ActorNaviBase::vfunc_d8() {}
+305 -5
View File
@@ -1,17 +1,317 @@
#include "Actor/Navi/ActorNaviBase.hpp"
#include "Actor/Navi/ActorNavi.hpp"
#include "Player/PlayerControl.hpp"
#include "Player/PlayerBase.hpp"
#include "Player/LinkStateItem.hpp"
#include "Item/ItemManager.hpp"
#include "Map/MapManager.hpp"
#include "DTCM/UnkStruct_027e0fd4.hpp"
extern unk32 data_ov000_020dc7d0;
extern unk32 data_ov000_020dc7e4;
extern u32 data_ov000_020e9370[];
extern "C" void Vec3p_RotateY(u32, Vec3p*);
extern "C" void func_ov005_02102c2c(u32 *param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6, int param_7,
char param_8, char param_9, char param_10);
ARM bool ActorNavi::func_ov059_0219933c(u32 param1) {}
ARM void ActorNavi::func_ov059_0219a0ac() {}
ARM void ActorNavi::func_ov059_0219aa08() {}
ARM void ActorNavi::func_ov059_0219aba8(u32 param1) {}
ARM bool ActorNavi::func_ov059_0219af14() {}
ARM bool ActorNavi::func_ov059_0219afc4() {}
// non-matching
ARM void ActorNavi::func_ov059_0219aa08() {
int iVar1;
s64 lVar2;
u16 uVar3;
u32 uVar4;
Vec3p VStack_60;
Vec3p uStack_54;
Mat3p MStack_48;
Vec3p VStack_24;
if (this->mUnk_3c0[0] != 0) {
VStack_24.x = this->mPos.x;
VStack_24.y = this->mPos.y + 0x333; // FLOAT_TO_Q20(0.2)?
VStack_24.z = this->mPos.z;
uVar3 = this->mUnk_340 - 0x4000; // FLOAT_TO_Q20(12.0)?
Mat3p_InitYRotation(&MStack_48, SIN(uVar3), COS(uVar3));
uStack_54.x = uStack_54.y = uStack_54.z = this->mUnk_344;
this->mUnk_294.vfunc_38();
this->mUnk_294.SetTransform(&uStack_54, &MStack_48, &VStack_24);
lVar2 = 0x666 * this->mUnk_344;
uVar4 = lVar2;
this->mUnk_334.x = ROUND_Q20(uVar4) |
((this->mUnk_344 >> 0x1F) * 0x666 + (lVar2 >> 0x20) + (~0x800 < uVar4)) * 0x100000;
Mat3p_MultiplyVec(&this->mUnk_334, &this->mUnk_384, &this->mUnk_334);
Vec3p_RotateY(uVar3, &this->mUnk_334);
Vec3p_Add(&this->mUnk_334, &VStack_24, &this->mUnk_334);
VStack_60.z = this->mUnk_334.z;
VStack_60.x = this->mUnk_334.x;
lVar2 = 0x333 * this->mUnk_344;
uVar4 = lVar2;
VStack_60.y = this->mUnk_334.y + 0x800;
uVar4 = ROUND_Q20(uVar4) |
((this->mUnk_344 >> 0x1F) * 0x333 + (lVar2 >> 0x20) + (~0x800 < uVar4)) * 0x100000;
func_ov005_02102c2c(&data_ov000_020e9370[0], 0, &VStack_60, uVar4, uVar4, 0, 0x10, 0, 0, 0);
}
}
struct UnkStruct {
/* 00 */ u16 mUnk_00;
/* 02 */ unk16 mUnk_02;
/* 04 */ unk16 mUnk_04;
/* 06 */ unk16 mUnk_06;
/* 08 */ unk16 mUnk_08;
/* 09 */ unk8 mUnk_09;
/* 0a */ unk8 mUnk_0a;
/* 0b */ unk8 mUnk_0b;
/* 0c */ unk8 mUnk_0c;
/* 0d */ unk8 mUnk_0d;
/* 0e */ unk8 mUnk_0e;
/* 0f */ unk8 mUnk_0f;
/* 10 */ unk8 mUnk_10;
/* 11 */ unk8 mUnk_11;
/* 12 */ unk8 mUnk_12;
/* 13 */ unk8 mUnk_13;
/* 14 */ Vec3p mUnk_14;
/* 14 */ unk8 mUnk_20[4];
/* 24 */
};
// non-matching
ARM void ActorNavi::func_ov059_0219aba8(u32 param1) {
bool bVar1;
LinkStateItem *uVar1;
ItemManager *pIVar3;
int uVar4;
int iVar5;
int uVar6;
bool bVar7;
Vec3p local_134;
Vec3p local_128;
Vec3p local_11c;
Vec3p local_110;
Vec3p local_104;
Vec3p local_e4;
UnkStruct auStack_e0;
u16 local_bc;
unk16 local_ba;
unk16 local_b8;
unk16 local_b6;
unk16 local_b4;
unk32 local_92;
unk32 local_91;
unk32 local_90;
unk32 local_8f;
unk32 local_88;
unk32 local_87;
unk32 local_86;
unk32 local_85;
unk32 local_84;
unk32 local_83;
UnkStruct auStack_80;
u16 local_5c;
unk16 local_5a;
unk16 local_58;
unk16 local_56;
unk16 local_54;
unk32 local_32;
unk32 local_31;
unk32 local_30;
unk32 local_2f;
unk32 local_28;
unk32 local_27;
unk32 local_26;
unk32 local_25;
unk32 local_24;
unk32 local_23;
ItemManager *puVar1;
switch (param1) {
case 3:
uVar1 = GetLinkStateItem();
if (uVar1->mUnk_25[2] != 0 && uVar1->mUnk_25[3] != 0) {
break;
}
local_11c.x = data_027e0fd4->mUnk_020.pos.x;
local_11c.z = data_027e0fd4->mUnk_020.pos.z;
iVar5 = gPlayerPos.y + FLOAT_TO_Q20(0.5);
uVar4 = this->mPos.x;
uVar6 = this->mPos.z;
auStack_80.mUnk_00 = -1;
auStack_80.mUnk_02 = 0;
auStack_80.mUnk_04 = 0;
auStack_80.mUnk_06 = 0;
auStack_80.mUnk_08 = 0;
auStack_80.mUnk_09 = 0;
auStack_80.mUnk_0a = 0;
auStack_80.mUnk_0b = 0;
auStack_80.mUnk_0c = 0;
auStack_80.mUnk_0d = 0;
auStack_80.mUnk_0e = 0;
auStack_80.mUnk_0f = 0;
auStack_80.mUnk_10 = 0;
auStack_80.mUnk_11 = 0;
auStack_80.mUnk_12 = 0;
local_11c.y = iVar5;
local_110.x = uVar4;
local_110.y = iVar5;
// local_110.z = uVar6;
local_e4.x = local_11c.x;
local_e4.y = iVar5;
local_e4.z = local_11c.z;
local_5a = local_5c;
local_58 = local_5c;
local_56 = local_5c;
if (gMapManager->func_01ffbf5c(&auStack_80, &local_110, &local_11c, this->mUnk_08c.size) ? false : true) {
this->mPos = local_e4;
this->mPrevPos = local_e4;
this->mUnk_158 = local_e4;
} else {
this->mUnk_158.x = uVar4;
this->mUnk_158.y = iVar5;
this->mUnk_158.z = uVar6;
}
break;
case 4:
uVar1 = GetLinkStateItem();
if (uVar1->mUnk_25[2] != 0 && uVar1->mUnk_25[3] != 0) {
break;
}
auStack_e0.mUnk_14.x = data_027e0fd4->mUnk_020.pos.x;
auStack_e0.mUnk_14.y = gPlayerPos.y + FLOAT_TO_Q20(0.5);
auStack_e0.mUnk_14.z = data_027e0fd4->mUnk_020.pos.z;
bVar1 = gPlayerControl->UpdateAimWorld(&local_104);
bVar7 = false;
local_104.y = auStack_e0.mUnk_14.y;
auStack_80.mUnk_00 = -1;
auStack_80.mUnk_02 = 0;
auStack_80.mUnk_04 = 0;
auStack_80.mUnk_06 = 0;
auStack_80.mUnk_08 = 0;
auStack_80.mUnk_09 = 0;
auStack_80.mUnk_0a = 0;
auStack_80.mUnk_0b = 0;
auStack_80.mUnk_0c = 0;
auStack_80.mUnk_0d = 0;
auStack_80.mUnk_0e = 0;
auStack_80.mUnk_0f = 0;
auStack_80.mUnk_10 = 0;
auStack_80.mUnk_11 = 0;
auStack_80.mUnk_12 = 0;
local_ba = local_bc;
local_b8 = local_bc;
local_b6 = local_bc;
if (bVar1) {
local_128 = auStack_e0.mUnk_14;
// local_134.x = local_104.x;
// local_134.y = auStack_e0.mUnk_14.y;
// local_134.z = local_104.z;
if (!gMapManager->func_01ffbf5c(&auStack_e0, &local_134, &local_128, this->mUnk_08c.size)) {
bVar7 = true;
}
}
if (!bVar7) {
this->mPos = auStack_e0.mUnk_14;
this->mPrevPos = auStack_e0.mUnk_14;
this->mUnk_158 = auStack_e0.mUnk_14;
}
break;
default:
this->func_ov000_020b853c();
break;
}
pIVar3 = gItemManager;
switch (param1) {
case 3:
pIVar3->func_ov00_020ad538(data_ov000_020dc7d0);
pIVar3->func_ov000_020c0c44(&this->mUnk_2f0);
pIVar3->func_ov000_020c0e5c(&this->mUnk_2f0, 0);
break;
case 4:
this->mUnk_348 = 0;
pIVar3->func_ov00_020ad538(data_ov000_020dc7e4);
pIVar3->func_ov000_020c0c44(&this->mUnk_2f0);
pIVar3->func_ov000_020c0e5c(&this->mUnk_2f0, 1);
break;
default:
break;
}
}
ARM bool ActorNavi::func_ov059_0219af14() {
int iVar1;
if (this->mUnk_3c0[2] != 0) {
return false;
}
iVar1 = this->mUnk_130;
switch (this->mUnk_130) {
case 3:
if (this->mUnk_348 > 0) {
this->mVel.x = 0;
this->mVel.y = 0;
this->mVel.z = 0;
this->mUnk_348--;
return true;
}
break;
case 4:
if (this->mHammer->IsReleased()) {
this->mVel.y = this->mUnk_158.y - this->mPos.y;
return true;
} else {
this->func_ov000_020b8c50(0x3000);
this->mVel.y = this->mUnk_158.y - this->mPos.y;
return true;
}
default:
break;
}
return false;
}
ARM bool ActorNavi::func_ov059_0219afc4() {
this->mUnk_3c0[2] = 0;
this->func_ov059_0219933c(0);
switch (this->mUnk_130) {
case 3:
this->mUnk_158.y = gPlayerPos.y + 0x1666;
return true;
case 4:
return true;
default:
break;
}
return false;
}
ARM void ActorNavi::func_ov059_0219b020() {
if (gItemManager->GetEquippedFairy() != FairyId_Courage) {
ItemManager* itemMgr = gItemManager;
+1 -2
View File
@@ -8,7 +8,6 @@
#include "Player/PlayerLink.hpp"
extern "C" void ApproachAngle_thunk(s16 *src, s16 dst, u32 param3);
extern "C" void func_ov000_020b853c(ActorNavi *);
struct EquipHammer_UnkStruct {
/* 00 */ unk8 mUnk_00[0x20];
@@ -243,5 +242,5 @@ ARM EquipHammer *GetEquipHammer() {
}
ARM void LinkStateItem::StopUsingHammer() {
func_ov000_020b853c(gItemManager->GetFairy(FairyId_Courage));
gItemManager->GetFairy(FairyId_Courage)->func_ov000_020b853c();
}
+1 -1
View File
@@ -1,6 +1,6 @@
#include "Map/MapManager.hpp"
bool MapManager::func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Vec4p *param4) {}
bool MapManager::func_01ffbf5c(s32 param1, Vec3p *param2, Vec3p *param3, s32 length) {}
bool MapManager::func_01ffbf5c(struct UnkStruct* param1, Vec3p *param2, Vec3p *param3, s32 length) {}
bool MapManager::func_01ffc118(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7) {}
bool MapManager::func_01ffd1e0(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7) {}