Files
tww/src/d/d_a_npc_mk_static.cpp
T
2026-05-28 13:49:11 -04:00

347 lines
11 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_npc_mk_static.cpp
//
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_mk_static.h"
#include "dolphin/types.h"
/* 800CB5CC-800CB778 .text aroundWalk__17daNpc_Mk_Static_cFP10fopAc_ac_cP10fopAc_ac_cUc */
void daNpc_Mk_Static_c::aroundWalk(fopAc_ac_c* param_1, fopAc_ac_c* param_2, u8 param_3) {
s16 local_58;
dNpc_calc_DisXZ_AngY(param_1->current.pos, param_2->current.pos, NULL, &local_58);
if (param_3) {
local_58 += 0x3000;
cLib_addCalcAngleS(&param_1->current.angle.y, local_58, 2, 0x800, 0x400);
} else {
cXyz local_44 = param_1->current.pos - param_2->current.pos;
f32 fVar2 = local_44.absXZ();
if (fVar2 > 150.0f) {
local_58 += 0x3400;
} else if (fVar2 < 120.0f) {
local_58 += 0x4000;
} else {
local_58 += 0x3a00;
}
cLib_addCalcAngleS(&param_1->current.angle.y, local_58, 8, 0x800, 0x200);
}
}
/* 800CB778-800CB88C .text turnPath__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_cUc */
u32 daNpc_Mk_Static_c::turnPath(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2, u8 options) {
cXyz local_2c = param_2->getPoint(param_2->getIdx());
s16 local_48;
dNpc_calc_DisXZ_AngY(param_1->current.pos, local_2c, NULL, &local_48);
if (options & 2) {
cLib_addCalcAngleS(&param_1->current.angle.y, local_48, 2, 0x2000, 0x400);
} else {
cLib_addCalcAngleS(&param_1->current.angle.y, local_48, 8, 0x800, 0x200);
}
f32 cosine = cM_scos(param_1->current.angle.y - local_48);
if (cosine < 0.0f) {
m4 = cosine + 1.0f;
}
return 0;
}
/* 800CB88C-800CB934 .text chkPath__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_cUc */
BOOL daNpc_Mk_Static_c::chkPath(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2, u8 options) {
bool bVar2 = param_2->chkPointPass(param_1->current.pos, (options & 1) != 1);
if (bVar2) {
if (options & 1) {
param_2->decIdxLoop();
} else {
param_2->incIdxLoop();
}
mPointIndex2 = mPointIndex1;
mPointIndex1 = param_2->getIdx();
return TRUE;
} else {
return FALSE;
}
}
/* 800CB934-800CB990 .text walkPath__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_cUc */
BOOL daNpc_Mk_Static_c::walkPath(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2, u8 options) {
BOOL result = chkPath(param_1, param_2, options);
turnPath(param_1, param_2, options);
return result;
}
/* 800CB990-800CBA18 .text getSpeedF__17daNpc_Mk_Static_cFff */
f32 daNpc_Mk_Static_c::getSpeedF(f32 param_1, f32 param_2) {
f32 fVar2;
if (!md) {
fVar2 = param_1;
} else if (m8 >= (ma >> 1)) {
fVar2 = param_2;
} else {
f32 f4 = (2.0f / ma);
fVar2 = m8 * (f4 * (param_2 - param_1)) + param_1;
}
f32 result = fVar2 * m4;
m4 = 1.0f;
return result;
}
/* 800CBA18-800CBA3C .text init__17daNpc_Mk_Static_cFUcUs */
void daNpc_Mk_Static_c::init(u8 param_1, u16 param_2) {
m0 = 0;
me = param_1;
m8 = param_2;
ma = param_2;
md = false;
m4 = 1.0f;
}
/* 800CBA3C-800CBBC4 .text goFarLink_3__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_c */
u8 daNpc_Mk_Static_c::goFarLink_3(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2) {
daPy_lk_c* link_actor = daPy_getPlayerLinkActorClass();
dNpc_PathRun_c dStack_74;
dStack_74.setInfDrct(param_2->getPath());
if (mPointIndex2 == mPointIndex1) {
return m0;
}
cXyz local_60 = dStack_74.getPoint(mPointIndex2);
cXyz local_6c = dStack_74.getPoint(mPointIndex1);
s16 sVar4 = cLib_targetAngleY(&param_1->current.pos, &link_actor->current.pos);
s16 sVar5 = cLib_targetAngleY(&local_60, &local_6c);
cM3dGLin unusedLine;
if ((m0 == 1 || m0 == 2) && abs(sVar5 - sVar4) < 0x1800) {
cXyz output1;
f32 output2;
if (cM3d_Len2dSqPntAndSegLine(link_actor->current.pos.x, link_actor->current.pos.z, local_60.x, local_60.z, local_6c.x, local_6c.z, &output1.x, &output1.z, &output2)) {
if (output2 < 10000.0f) {
if (m0 == 1) {
return 2;
} else {
return 1;
}
}
}
}
return m0;
}
/* 800CBBC4-800CBE7C .text goFarLink_2__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_c */
u8 daNpc_Mk_Static_c::goFarLink_2(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2) {
daPy_lk_c *link_actor = daPy_getPlayerLinkActorClass();
cXyz local_8c;
cXyz local_80;
cXyz local_74;
dNpc_PathRun_c dStack_94;
dStack_94.setInfDrct(param_2->getPath());
dStack_94.setIdx(mPointIndex2);
local_8c = dStack_94.getPoint(dStack_94.getIdx());
dStack_94.incIdxLoop();
local_80 = dStack_94.getPoint(dStack_94.getIdx());
dStack_94.decIdxLoop();
dStack_94.decIdxLoop();
local_74 = dStack_94.getPoint(dStack_94.getIdx());
s16 sVar5 = cLib_targetAngleY(&local_8c, &link_actor->current.pos);
s16 sVar6 = cLib_targetAngleY(&local_8c, &local_80);
s16 sVar7 = cLib_targetAngleY(&local_8c, &local_74);
cM3dGLin unusedLine;
cXyz output1;
float output2;
int iVar1 = sVar6 - sVar5;
if (abs(iVar1) < 0x1800) {
if (cM3d_Len2dSqPntAndSegLine(link_actor->current.pos.x, link_actor->current.pos.z, local_8c.x,local_8c.z, local_80.x, local_80.z, &output1.x, &output1.z, &output2)) {
if (output2 < 10000.0f) {
return 2;
}
}
}
int iVar2 = sVar7 - sVar5;
if (abs(iVar2) < 0x1800) {
if (cM3d_Len2dSqPntAndSegLine(link_actor->current.pos.x, link_actor->current.pos.z, local_8c.x, local_8c.z, local_74.x, local_74.z, &output1.x, &output1.z, &output2)) {
if (output2 < 10000.0f) {
return 1;
}
}
}
if (dStack_94.setNearPathIndxMk2(&link_actor->current.pos, mPointIndex2, 5)) {
int index_diff = dStack_94.getIdx() - mPointIndex2;
if ((index_diff > 0) == (abs(index_diff) <= 5)) {
return 2;
} else {
return 1;
}
} else if (abs(iVar1) >= abs(iVar2)) {
return 1;
} else {
return 2;
}
}
/* 800CBE7C-800CBEE0 .text runaway_com2__17daNpc_Mk_Static_cFP14dNpc_PathRun_cUc */
void daNpc_Mk_Static_c::runaway_com2(dNpc_PathRun_c* param_1, u8 param_2) {
param_1->setIdx(mPointIndex2);
if (param_2 == 1) {
param_1->incIdxLoop();
} else {
param_1->decIdxLoop();
}
mPointIndex1 = param_1->getIdx();
}
/* 800CBEE0-800CC374 .text runAwayProc__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_cP8dCcD_CylPs */
u8 daNpc_Mk_Static_c::runAwayProc(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2, dCcD_Cyl* param_3, s16* param_4) {
daPy_lk_c *link_actor = daPy_getPlayerLinkActorClass();
if (param_3->GetCoHitAc() == link_actor) {
*param_4 = cLib_targetAngleY(fopAcM_GetPosition_p(link_actor), &param_1->current.pos);
return 4;
}
if (me != 0) {
me --;
}
switch (m0) {
case 0: {
f32 dVar8 = param_2->setNearPathIndxMk(&param_1->current.pos);
mPointIndex1 = param_2->getIdx();
mPointIndex2 = mPointIndex1;
if (dVar8 >= 50.0f) {
return 5;
} else {
return 3;
}
}
case 5: {
cXyz local_44 = param_2->getPoint(mPointIndex1);
if ((local_44 - param_1->current.pos).absXZ() < 20.0f) {
return 3;
}
turnPath(param_1, param_2, 2);
break;
}
case 3: {
f32 temp = (link_actor->current.pos - param_1->current.pos).absXZ();
if (temp < 800.0f) {
me = 10;
u8 uVar6 = goFarLink_2(param_1, param_2);
runaway_com2(param_2, uVar6);
return uVar6;
}
if (m8 + 3 < ma) {
m8 += 3;
}
break;
}
case 1:
case 2:
f32 fVar9 = (link_actor->current.pos - param_1->current.pos).absXZ();
if (walkPath(param_1, param_2, (m0 == 1) ? (u8)2 : (u8)3)) {
if (fVar9 > 900.0f) {
return 3;
} else {
u8 uVar6 = goFarLink_2(param_1, param_2);
if (uVar6 != m0) {
runaway_com2(param_2, uVar6);
}
return uVar6;
}
}
if (me == 0) {
me = 10;
u8 uVar6 = goFarLink_3(param_1, param_2);
if (uVar6 != m0) {
mPointIndex2 = mPointIndex1;
runaway_com2(param_2, uVar6);
}
return uVar6;
} else if (md) {
if (m8 >= 1) {
m8 --;
}
if (fVar9 > 400.0f) {
md = false;
}
} else {
if (fVar9 < 200.0f) {
md = true;
}
}
break;
}
return m0;
}
/* 800CC374-800CC400 .text chkGameSet__17daNpc_Mk_Static_cFv */
bool daNpc_Mk_Static_c::chkGameSet() {
if (dComIfGs_isTmpBit(dSv_event_tmp_flag_c::UNK_0020) && dComIfGs_isTmpBit(dSv_event_tmp_flag_c::UNK_0010) && dComIfGs_isTmpBit(dSv_event_tmp_flag_c::UNK_0008) && dComIfGs_isTmpBit(dSv_event_tmp_flag_c::UNK_0004)) {
return true;
} else {
return false;
}
}
/* 800CC400-800CC664 .text setRndPathPos__17daNpc_Mk_Static_cFP10fopAc_ac_cP14dNpc_PathRun_c */
void daNpc_Mk_Static_c::setRndPathPos(fopAc_ac_c* param_1, dNpc_PathRun_c* param_2) {
dBgS_GndChk local_90;
if (param_2->isPath()) {
param_1->current.pos = param_2->getPoint((int) cM_rndF((int) param_2->maxPoint()));
local_90.OffWall();
cXyz pos(
param_1->current.pos.x,
param_1->current.pos.y + 200.0f,
param_1->current.pos.z
);
local_90.m_pos = pos;
param_1->current.pos.y = dComIfG_Bgsp()->GroundCross(&local_90);
param_1->old.pos = param_1->current.pos;
}
}
/* 800CC664-800CC734 .text chkPointPass__17daNpc_Mk_Static_cFP4cXyzP4cXyzP4cXyz */
bool daNpc_Mk_Static_c::chkPointPass(cXyz* param_1, cXyz* param_2, cXyz* param_3) {
if (param_1->x == param_2->x && param_1->z == param_2->z) {
return true;
} else if (param_3->x == param_2->x && param_3->z == param_2->z) {
return true;
} else if (cM_scos(cLib_targetAngleY(param_1, param_2) - cLib_targetAngleY(param_3, param_2)) < 0.0f) {
return true;
} else {
return false;
}
}