This commit is contained in:
LagoLunatic
2023-11-11 02:08:52 -05:00
parent 0a2500257b
commit d7aba8e7df
4 changed files with 252 additions and 54 deletions
+1 -1
View File
@@ -470,7 +470,7 @@ config.libs = [
Object(NonMatching, "d/d_minigame_terminater.cpp"),
Object(NonMatching, "d/d_msg.cpp"),
Object(NonMatching, "d/d_name.cpp"),
Object(NonMatching, "d/d_npc.cpp"),
Object(Matching, "d/d_npc.cpp"),
Object(NonMatching, "d/d_operate_wind.cpp"),
Object(Matching, "d/d_metronome.cpp"),
Object(Matching, "d/d_ovlp_fade.cpp"),
+27 -7
View File
@@ -55,11 +55,11 @@ class dNpc_JntCtrl_c {
// /* 0x18 */ s16 mMaxHeadRot;
// /* 0x1A */ s16 field_0x1A;
// /* 0x1C */ s16 mMaxSpineRot;
/* 0x1E */ s16 field_0x1E;
/* 0x20 */ s16 field_0x20;
/* 0x22 */ s16 field_0x22;
/* 0x24 */ s16 field_0x24;
/* 0x26 */ u8 pad_0x26[0x32 - 0x26];
/* 0x1E */ s16 field_0x1E[2][2];
/* 0x26 */ u8 pad_0x26[0x2C - 0x26];
/* 0x2C */ s16 field_0x2C;
/* 0x2E */ s16 field_0x2E;
/* 0x30 */ s16 field_0x30;
/* 0x32 */ s16 field_0x32;
public:
@@ -68,14 +68,34 @@ public:
field_0x0B = 0;
}
void clrTrn() {}
void getBackboneJntNum() {}
void getBackbone_x() {}
void getBackbone_y() {}
void getHeadJntNum() {}
void getHead_x() {}
void getHead_y() {}
void offBackBoneLock() {}
void offHeadLock() {}
void onBackBoneLock() {}
void onHeadLock() {}
void setBackBone_x(s16) {}
void setBackBone_y(s16) {}
void setBackboneJntNum(s8) {}
void setHeadJntNum(s8) {}
void setHead_x(s16) {}
void setHead_y(s16) {}
void setTrn() {}
void trnChk() {}
bool angCalcS(s16*, s16, s16, s16);
void limitter(s16*, s16, s16);
bool follow(s16*, s16, s16, int);
void move(s16, int);
bool move(s16, int);
void lookAtTarget(s16*, cXyz*, cXyz, s16, s16, bool);
void setParam(s16, s16, s16, s16, s16, s16, s16, s16, s16);
s32 chkLim(s16, int, int);
int chkLim(s16, int, int);
void turn_fromBackbone2Head(s16, s16*, s16*, bool);
void turn_fromHead2Backbone(s16, s16*, s16*);
s16 follow_current(s16*, s16);
+211 -36
View File
@@ -16,6 +16,7 @@
static Vec dummy_2100 = {1.0f, 1.0f, 1.0f};
static Vec dummy_2080 = {1.0f, 1.0f, 1.0f};
/* 8021A7B4-8021A858 .text angCalcS__14dNpc_JntCtrl_cFPssss */
bool dNpc_JntCtrl_c::angCalcS(s16* out, s16 targetY, s16 speed, s16 maxVel) {
s16 diff = *out - targetY;
int origDiff = diff;
@@ -30,6 +31,7 @@ bool dNpc_JntCtrl_c::angCalcS(s16* out, s16 targetY, s16 speed, s16 maxVel) {
return (s16)targetY - *out == 0;
}
/* 8021A858-8021A884 .text limitter__14dNpc_JntCtrl_cFPsss */
void dNpc_JntCtrl_c::limitter(s16* targetDiff, s16 maxDiff, s16 minDiff) {
if(*targetDiff > maxDiff) {
*targetDiff = maxDiff;
@@ -61,15 +63,71 @@ bool dNpc_JntCtrl_c::follow(s16* outY, s16 targetY, s16 maxVel, int param_4) {
}
/* 8021A97C-8021AABC .text move__14dNpc_JntCtrl_cFsi */
void dNpc_JntCtrl_c::move(short, int) {
/* Nonmatching */
bool dNpc_JntCtrl_c::move(s16 param_1, int param_2) {
s16 angle;
s32 angleL;
s16 angles[2];
int r25;
int i;
for (i = 0; i < 2; i++) {
if ((i == 0 && field_0x0B == 1) || (i == 1 && field_0x0C == 1)) {
angle = 0;
} else {
angle = param_1;
}
limitter(&angle, mMaxAngles[i][param_2], mMinAngles[i][param_2]);
param_1 -= (int)angle;
angles[i] = angle;
angleL = mAngles[i][param_2];
cLib_addCalcAngleL(&angleL, angle, 4, field_0x1E[i][param_2], 1);
mAngles[i][param_2] = angleL;
}
for (i = 0, r25 = 0; i < 2; i++) {
if (cLib_distanceAngleS(angles[i], mAngles[i][param_2]) <= field_0x1E[i][param_2]/2) {
r25++;
}
}
return r25 == i;
}
/* 8021AABC-8021AC6C .text lookAtTarget__14dNpc_JntCtrl_cFPsP4cXyz4cXyzssb */
void dNpc_JntCtrl_c::lookAtTarget(short*, cXyz*, cXyz, short, short, bool) {
/* Nonmatching */
void dNpc_JntCtrl_c::lookAtTarget(s16* outY, cXyz* param_2, cXyz param_3, s16 param_4, s16 maxVel, bool param_6) {
s16 deltaY;
s32 maxY;
s32 minY;
s16 r23;
s16 targetY;
if (param_2) {
cXyz temp;
temp.x = param_2->x - param_3.x;
temp.y = param_2->y - param_3.y;
temp.z = param_2->z - param_3.z;
f32 temp2 = sqrtf(temp.x * temp.x + temp.z * temp.z);
targetY = cM_atan2s(temp.x, temp.z);
r23 = cM_atan2s(temp.y, temp2);
} else {
targetY = param_4;
r23 = 0;
}
deltaY = targetY - (s32)*outY;
maxY = mMaxAngles[1][1];
maxY += mMaxAngles[0][1];
minY = mMinAngles[1][1];
minY += mMinAngles[0][1];
bool r3 = move(deltaY, 1);
if ((field_0x0A || ((deltaY >= maxY || deltaY <= minY) && r3)) && !param_6) {
field_0x0A = follow(outY, targetY, maxVel, 1);
}
move(r23, 0);
}
/* 8021AC6C-8021ACA8 .text setParam__14dNpc_JntCtrl_cFsssssssss */
void dNpc_JntCtrl_c::setParam(s16 param_1, s16 maxSpineRot, s16 param_3, s16 minSpineRot, s16 param_5, s16 maxHeadRot, s16 param_7, s16 minHeadRot, s16 param_9) {
mMaxAngles[1][0] = param_1;
mMaxAngles[1][1] = maxSpineRot;
@@ -79,12 +137,13 @@ void dNpc_JntCtrl_c::setParam(s16 param_1, s16 maxSpineRot, s16 param_3, s16 min
mMaxAngles[0][1] = maxHeadRot;
mMinAngles[0][0] = param_7;
mMinAngles[0][1] = minHeadRot;
field_0x22 = param_9;
field_0x24 = param_9;
field_0x1E = param_9;
field_0x20 = param_9;
field_0x1E[1][0] = param_9;
field_0x1E[1][1] = param_9;
field_0x1E[0][0] = param_9;
field_0x1E[0][1] = param_9;
}
/* 8021ACA8-8021ACBC .text setInfDrct__14dNpc_PathRun_cFP5dPath */
bool dNpc_PathRun_c::setInfDrct(dPath* pPath) {
mPath = pPath;
mCurrPointIndex = 0;
@@ -92,6 +151,7 @@ bool dNpc_PathRun_c::setInfDrct(dPath* pPath) {
return true;
}
/* 8021ACBC-8021AD1C .text setInf__14dNpc_PathRun_cFUcScUc */
bool dNpc_PathRun_c::setInf(u8 pathIdx, s8 roomNo, u8 forwards) {
bool setPath = false;
@@ -107,6 +167,7 @@ bool dNpc_PathRun_c::setInf(u8 pathIdx, s8 roomNo, u8 forwards) {
return setPath;
}
/* 8021AD1C-8021AD58 .text nextPath__14dNpc_PathRun_cFSc */
dPath* dNpc_PathRun_c::nextPath(s8 roomNo) {
dPath* pPath = 0;
@@ -117,6 +178,7 @@ dPath* dNpc_PathRun_c::nextPath(s8 roomNo) {
return pPath;
}
/* 8021AD58-8021ADD0 .text getPoint__14dNpc_PathRun_cFUc */
cXyz dNpc_PathRun_c::getPoint(u8 pointIdx) {
cXyz point(0.0f, 0.0f, 0.0f);
@@ -160,6 +222,7 @@ bool dNpc_PathRun_c::chkPointPass(cXyz currPos, bool goingForwards) {
return passed;
}
/* 8021AFA8-8021AFEC .text incIdx__14dNpc_PathRun_cFv */
bool dNpc_PathRun_c::incIdx() {
bool ret = true;
@@ -174,6 +237,7 @@ bool dNpc_PathRun_c::incIdx() {
return ret;
}
/* 8021AFEC-8021B030 .text incIdxLoop__14dNpc_PathRun_cFv */
bool dNpc_PathRun_c::incIdxLoop() {
bool ret = true;
@@ -188,6 +252,7 @@ bool dNpc_PathRun_c::incIdxLoop() {
return ret;
}
/* 8021B030-8021B0AC .text incIdxAuto__14dNpc_PathRun_cFv */
bool dNpc_PathRun_c::incIdxAuto() {
bool hitEnd = true;
@@ -210,6 +275,7 @@ bool dNpc_PathRun_c::incIdxAuto() {
return hitEnd;
}
/* 8021B0AC-8021B0F0 .text decIdx__14dNpc_PathRun_cFv */
bool dNpc_PathRun_c::decIdx() {
bool ret = true;
@@ -337,6 +403,7 @@ u8 dNpc_PathRun_c::pointArg(u8 idx) {
return arg;
}
/* 8021B384-8021B514 .text setNearPathIndx__14dNpc_PathRun_cFP4cXyzf */
bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, f32 param_2) {
bool set = false;
if(mPath != 0) {
@@ -346,7 +413,7 @@ bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, f32 param_2) {
cXyz point = getPoint(i);
cXyz diff = (*param_1 - point);
f32 xz_mag = diff.getMagXZ();
f32 xz_mag = diff.abs2XZ();
f32 y_mag = param_2 * (diff.y * diff.y);
f32 dist = sqrtf(y_mag + xz_mag);
@@ -363,6 +430,7 @@ bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, f32 param_2) {
return set;
}
/* 8021B514-8021B670 .text setNearPathIndxMk__14dNpc_PathRun_cFP4cXyz */
f32 dNpc_PathRun_c::setNearPathIndxMk(cXyz* param_1) {
f32 max_dist;
if(mPath != 0) {
@@ -371,8 +439,7 @@ f32 dNpc_PathRun_c::setNearPathIndxMk(cXyz* param_1) {
for(int i = 0; i < maxPoint(); i++) {
cXyz point = getPoint(i);
cXyz diff = (*param_1 - point);
f32 temp = diff.getSquareMag();
f32 dist = sqrtf(temp);
f32 dist = diff.abs();
if(max_dist > dist) {
max_dist = dist;
pointIdx = i;
@@ -385,6 +452,7 @@ f32 dNpc_PathRun_c::setNearPathIndxMk(cXyz* param_1) {
return max_dist;
}
/* 8021B670-8021B818 .text setNearPathIndxMk2__14dNpc_PathRun_cFP4cXyzUcUc */
bool dNpc_PathRun_c::setNearPathIndxMk2(cXyz* param_1, u8 param_2, u8 param_3) {
u8 pointIdx;
bool set = false;
@@ -394,8 +462,7 @@ bool dNpc_PathRun_c::setNearPathIndxMk2(cXyz* param_1, u8 param_2, u8 param_3) {
for(int i = 0; i < maxPoint(); i++) {
cXyz point = getPoint(i);
cXyz diff = (*param_1 - point);
f32 temp = diff.getSquareMag();
f32 dist = sqrtf(temp);
f32 dist = diff.abs();
s32 idx = absIdx(param_2, i);
if(idx <= param_3 && param_2 != i && max_dist > dist) {
max_dist = dist;
@@ -410,6 +477,7 @@ bool dNpc_PathRun_c::setNearPathIndxMk2(cXyz* param_1, u8 param_2, u8 param_3) {
return set;
}
/* 8021B818-8021B95C .text chkInside__14dNpc_PathRun_cFP4cXyz */
bool dNpc_PathRun_c::chkInside(cXyz* param_1) {
cXyz point, point2, point3;
@@ -478,18 +546,19 @@ bool dNpc_setAnmIDRes(mDoExt_McaMorf* pMorf, int loopMode, float morf, float spe
return ret;
}
/* 8021BABC-8021BBA8 .text dNpc_setAnmFNDirect__FP14mDoExt_McaMorfiffPcPcPCc */
bool dNpc_setAnmFNDirect(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, char* animFilename, char* soundFilename, const char* arcName) {
bool ret = false;
if(pMorf != 0 && animFilename != 0 && arcName != 0) {
void* pAnimRes = dComIfG_getObjectRes(arcName, animFilename);
J3DAnmTransform* pAnimRes = (J3DAnmTransform*)dComIfG_getObjectRes(arcName, animFilename);
void* pSoundAnimRes = 0;
if(soundFilename != 0) {
pSoundAnimRes = dComIfG_getObjectRes(arcName, soundFilename);
}
pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes);
pMorf->setAnm(pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes);
ret = true;
}
@@ -539,7 +608,8 @@ cXyz dNpc_playerEyePos(f32 param_1) {
return out;
}
void dNpc_calc_DisXZ_AngY(cXyz param_1, cXyz param_2, float* param_3, short* param_4) {
/* 8021BDE8-8021BEC4 .text dNpc_calc_DisXZ_AngY__F4cXyz4cXyzPfPs */
void dNpc_calc_DisXZ_AngY(cXyz param_1, cXyz param_2, float* param_3, s16* param_4) {
cXyz diff;
diff.x = param_2.x - param_1.x;
diff.z = param_2.z - param_1.z;
@@ -626,8 +696,9 @@ bool dNpc_setAnm_2(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int
return true;
}
/* 8021C238-8021C2E8 .text swing_vertical_init__14dNpc_HeadAnm_cFsssi */
void dNpc_HeadAnm_c::swing_vertical_init(s16 param_1, s16 param_2, s16 param_3, int param_4) {
if(param_4 == 0 || mFunc != &swing_horizone) {
if(param_4 == 0 || mFunc != &swing_vertical) {
field_0x1C = 0;
field_0x20 = param_1;
field_0x1E = param_2;
@@ -638,9 +709,18 @@ void dNpc_HeadAnm_c::swing_vertical_init(s16 param_1, s16 param_2, s16 param_3,
/* 8021C2E8-8021C3C8 .text swing_vertical__14dNpc_HeadAnm_cFv */
void dNpc_HeadAnm_c::swing_vertical() {
/* Nonmatching */
s16 temp2 = field_0x1C;
field_0x1C += field_0x1E;
s16 temp = cM_ssin(field_0x1C) * field_0x14;
cLib_addCalcAngleS(&field_0x00, temp, 4, 0x1000, 0x100);
cLib_addCalcAngleS(&field_0x02, 0, 4, 0x1000, 0x100);
if (temp2 < 0 && field_0x1C >= 0 && --field_0x20 <= 0) {
mFunc = NULL;
}
}
/* 8021C3C8-8021C478 .text swing_horizone_init__14dNpc_HeadAnm_cFsssi */
void dNpc_HeadAnm_c::swing_horizone_init(s16 param_1, s16 param_2, s16 param_3, int param_4) {
if(param_4 == 0 || mFunc != &swing_vertical) {
field_0x1C = 0;
@@ -653,7 +733,15 @@ void dNpc_HeadAnm_c::swing_horizone_init(s16 param_1, s16 param_2, s16 param_3,
/* 8021C478-8021C55C .text swing_horizone__14dNpc_HeadAnm_cFv */
void dNpc_HeadAnm_c::swing_horizone() {
/* Nonmatching */
s16 temp2 = field_0x1C;
field_0x1C += field_0x1E;
s16 temp = cM_ssin(field_0x1C) * field_0x18;
cLib_addCalcAngleS(&field_0x00, 0, 4, 0x1000, 0x100);
cLib_addCalcAngleS(&field_0x02, temp, 4, 0x1000, 0x100);
if (temp2 < 0 && field_0x1C >= 0 && --field_0x20 <= 0) {
mFunc = NULL;
}
}
void dNpc_HeadAnm_c::move() {
@@ -667,13 +755,13 @@ void dNpc_HeadAnm_c::move() {
}
/* 8021C5D8-8021C620 .text chkLim__14dNpc_JntCtrl_cFsii */
s32 dNpc_JntCtrl_c::chkLim(s16 param_1, int param_2, int param_3) {
param_1 = cLib_maxLimit(param_1, mMaxAngles[param_2][param_3]);
param_1 = cLib_minLimit(param_1, mMinAngles[param_2][param_3]);
return param_1;
int dNpc_JntCtrl_c::chkLim(s16 angle, int param_2, int param_3) {
angle = cLib_maxLimit(angle, mMaxAngles[param_2][param_3]);
angle = cLib_minLimit(angle, mMinAngles[param_2][param_3]);
return angle;
}
/* 8021C620-8021C6D8 .text turn_fromBackbone2Head__14dNpc_JntCtrl_cFsPsPsb */
void dNpc_JntCtrl_c::turn_fromBackbone2Head(s16 param_1, s16* param_2, s16* param_3, bool param_4) {
*param_3 = 0;
if(field_0x0C == 0) {
@@ -718,33 +806,120 @@ s16 dNpc_JntCtrl_c::follow_current(s16* orig, s16 diff) {
}
/* 8021C7D0-8021CAB8 .text lookAtTarget_2__14dNpc_JntCtrl_cFPsP4cXyz4cXyzssb */
void dNpc_JntCtrl_c::lookAtTarget_2(short*, cXyz*, cXyz, short, short, bool) {
/* Nonmatching */
void dNpc_JntCtrl_c::lookAtTarget_2(s16* r26, cXyz* r29, cXyz r24, s16 r7, s16 r27, bool r28) {
s16 targetY;
s16 targetX;
s32 r1_10;
s32 temp6;
s16 temp;
s16 temp2;
s32 temp4;
s32 r1_0C;
s16 r1_08[2];
s16 deltaY;
s32 temp10;
s32 temp11;
s32 temp5;
int temp9;
s32 temp7;
if (r29) {
targetY = cLib_targetAngleY(&r24, r29);
targetX = cLib_targetAngleX(&r24, r29);
} else {
targetY = r7;
targetX = 0;
}
deltaY = targetY - *r26;
if (0 <= field_0x32) {
if (deltaY >= field_0x32 || field_0x32 == 0) {
turn_fromHead2Backbone(deltaY, &r1_08[1], &r1_08[0]);
} else {
turn_fromBackbone2Head(deltaY, &r1_08[1], &r1_08[0], 0 <= field_0x32);
}
} else {
if (deltaY <= field_0x32 || field_0x32 == 0) {
turn_fromHead2Backbone(deltaY, &r1_08[1], &r1_08[0]);
} else {
turn_fromBackbone2Head(deltaY, &r1_08[1], &r1_08[0], 0 <= field_0x32);
}
}
field_0x2E = r1_08[1];
field_0x32 = r1_08[0];
temp10 = field_0x2E;
temp11 = field_0x32;
r1_10 = mAngles[0][1];
r1_0C = mAngles[1][1];
cLib_addCalcAngleL(&r1_10, temp10, 4, field_0x1E[0][0], 4);
cLib_addCalcAngleL(&r1_0C, temp11, 4, field_0x1E[0][0], 4);
mAngles[0][1] = r1_10;
mAngles[1][1] = r1_0C;
if (field_0x0A && !r28) {
temp = *r26;
cLib_addCalcAngleS(r26, targetY, 4, r27, 0x100);
temp2 = *r26 - temp;
field_0x0A = temp2 != 0;
if (field_0x0C == 0) {
temp2 = follow_current(&mAngles[1][1], temp2);
}
if (field_0x0B == 0) {
follow_current(&mAngles[0][1], temp2);
}
} else {
temp4 = field_0x2E + field_0x32;
if (deltaY >= 0) {
field_0x0A = deltaY > temp4;
} else {
field_0x0A = deltaY < temp4;
}
}
temp5 = targetX;
temp5 = chkLim(temp5, 0, 0);
targetX = targetX - (int)temp5;
temp9 = chkLim(targetX, 1, 0);
field_0x2C = temp5;
field_0x30 = temp9;
targetX = field_0x30;
temp7 = field_0x2C;
temp6 = field_0x30;
r1_10 = mAngles[0][0];
r1_0C = mAngles[1][0];
cLib_addCalcAngleL(&r1_10, temp7, 4, field_0x1E[0][0], 4);
cLib_addCalcAngleL(&r1_0C, temp6, 4, field_0x1E[0][0], 4);
mAngles[0][0] = r1_10;
mAngles[1][0] = r1_0C;
}
bool dNpc_chkAttn(fopAc_ac_c* i_this, cXyz destPos, float param_3, float param_4, float param_5, bool param_6) {
/* 8021CAB8-8021CC4C .text dNpc_chkAttn__FP10fopAc_ac_c4cXyzfffb */
bool dNpc_chkAttn(fopAc_ac_c* i_this, cXyz destPos, f32 param_3, f32 param_4, f32 param_5, bool param_6) {
s16 angle = cLib_targetAngleY(&i_this->current.pos, &destPos);
f32 dist = sqrtf((i_this->current.pos - destPos).getMagXZ()); //this is gross but I haven't found a better way (temp destroys stack)
f32 dist = (i_this->current.pos - destPos).absXZ();
f32 temp = param_3;
s16 angle_diff = angle - i_this->current.angle.y;
if(param_5 > 359.0f) {
param_5 = 359.0f;
}
if (param_5 < 0.0f) {
param_5 = 0.0f;
}
param_5 = cLib_maxLimit(param_5, 359.0f);
param_5 = cLib_minLimit(param_5, 0.0f);
if(param_6) {
param_3 += param_4;
temp += param_4;
}
bool ret = false;
if(dist <= param_3 && abs(angle_diff) <= cM_deg2s(param_5)) {
if(dist <= temp && abs(angle_diff) <= cM_deg2s(param_5)) {
ret = true;
}
return ret;
}
static void dummyfunc(int i_pathInf) {
JUT_ASSERT(0, i_pathInf != 0);
}
dCcD_SrcCyl dNpc_cyl_src = {
// dCcD_SrcGObjInf
{
+13 -10
View File
@@ -291,6 +291,7 @@ void dNpc_EventCut_c::cutMoveToActorStart() {
}
}
/* 8021D730-8021D9DC .text cutMoveToActorProc__15dNpc_EventCut_cFv */
void dNpc_EventCut_c::cutMoveToActorProc() {
if(mSetId != 0) {
mTargetActorPos.set(0.0f, 0.0f, 0.0f);
@@ -324,9 +325,7 @@ void dNpc_EventCut_c::cutMoveToActorProc() {
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
cXyz diff = temp - mPos;
f32 tempf = diff.getSquareMag();
f32 dist = sqrtf(tempf);
f32 dist = (temp - mpActor->current.pos).absXZ();
cLib_addCalc2(&mpActor->current.pos.x, temp.x, 0.1f, mSpeed);
cLib_addCalc2(&mpActor->current.pos.z, temp.z, 0.1f, mSpeed);
@@ -360,15 +359,13 @@ fopAc_ac_c* dNpc_EventCut_c::findActorCallBack(fopAc_ac_c* pActor, void* pData)
}
else {
if(obj->mProcName == fopAcM_GetProfName(pActor) && obj->mSubtype == pActor->mSubtype) {
f32 mag = sqrtf(cut->mTargetActorPos.getSquareMag());
if(mag == 0.0f) {
if(cut->mTargetActorPos.abs() == 0.0f) {
cut->mTargetActorPos = pActor->current.pos;
cut->mpTargetActor = pActor;
}
else {
f32 mag1 = sqrtf((cut->mTargetActorPos - cut->mpActor->current.pos).getSquareMag());
f32 mag2 = sqrtf((pActor->current.pos - cut->mpActor->current.pos).getSquareMag());
f32 mag1 = (cut->mTargetActorPos - cut->mpActor->current.pos).abs();
f32 mag2 = (pActor->current.pos - cut->mpActor->current.pos).abs();
if(mag2 < mag1) {
cut->mTargetActorPos = pActor->current.pos;
cut->mpTargetActor = pActor;
@@ -519,17 +516,23 @@ void dNpc_EventCut_c::cutMoveToPosStart() {
}
}
/* 8021E168-8021E338 .text cutMoveToPosProc__15dNpc_EventCut_cFv */
void dNpc_EventCut_c::cutMoveToPosProc() {
s16 angle = cLib_targetAngleY(&mpActor->current.pos, &mPos);
cXyz temp(pDelDistance * cM_ssin(angle), mPos.y, pDelDistance * cM_scos(angle));
cXyz temp;
temp.x = mPos.x;
temp.y = mPos.y;
temp.z = mPos.z;
temp.x -= pDelDistance * cM_ssin(angle);
temp.z -= pDelDistance * cM_scos(angle);
if(mSpeed == 0.0f) {
mpActor->current.pos = temp;
dComIfGp_evmng_cutEnd(mEvtStaffId);
}
f32 dist = sqrtf((temp - mpActor->current.pos).getMagXZ());
f32 dist = sqrtf((temp - mpActor->current.pos).abs2XZ());
cLib_addCalc2(&mpActor->current.pos.x, temp.x, 0.1f, mSpeed);
cLib_addCalc2(&mpActor->current.pos.z, temp.z, 0.1f, mSpeed);