mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-25 23:35:08 -04:00
d_npc OK
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user