summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-05-31 05:18:54 -0700
committerGitHub <noreply@github.com>2025-05-31 15:18:54 +0300
commit7b550fafb5ea4f64225bd4c281cb50214dcb6833 (patch)
treed4efa72ba15ff71a96e8396586ba3472ba87f6b7 /src
parent4c4370b03caf504926a444e4fc68f3a8ba07bba8 (diff)
d_a_npc cleanup (#2466)
* d_a_npc first cleanup pass * more d_a_npc cleanup
Diffstat (limited to 'src')
-rw-r--r--src/d/actor/d_a_npc.cpp3760
-rw-r--r--src/d/actor/d_a_npc2.cpp677
-rw-r--r--src/d/actor/d_a_npc3.cpp301
-rw-r--r--src/d/actor/d_a_npc4.cpp2304
-rw-r--r--src/d/actor/d_a_npc_fairy_seirei.cpp6
-rw-r--r--src/d/actor/d_a_npc_hanjo.cpp2
-rw-r--r--src/d/actor/d_a_npc_uri.cpp16
-rw-r--r--src/d/actor/d_a_npc_zra.cpp6
-rw-r--r--src/d/d_shop_system.cpp12
9 files changed, 3844 insertions, 3240 deletions
diff --git a/src/d/actor/d_a_npc.cpp b/src/d/actor/d_a_npc.cpp
index aea7716bea..a8550feba9 100644
--- a/src/d/actor/d_a_npc.cpp
+++ b/src/d/actor/d_a_npc.cpp
@@ -1,22 +1,139 @@
-//
-// Generated By: dol2asm
-// Translation Unit: d/actor/d_a_npc
-//
-
#include "d/actor/d_a_npc.h"
-#include "SSystem/SComponent/c_math.h"
+#include "d/actor/d_a_npc_tk.h"
+#include "d/actor/d_a_tag_evtarea.h"
#include "d/d_k_wmark.h"
#include "d/d_msg_object.h"
-#include "dol2asm.h"
+#include "SSystem/SComponent/c_math.h"
+#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "f_op/f_op_kankyo_mng.h"
#include "m_Do/m_Do_lib.h"
-#include "d/actor/d_a_npc_tk.h"
-#include "d/actor/d_a_tag_evtarea.h"
-#include "JSystem/J3DGraphBase/J3DMaterial.h"
-static s32 daBaseNpc_chkPnt(cXyz param_0, dPnt* param_1, u16 param_2, u16 param_3, int param_4,
- int param_5);
-static u16 daNpcF_putNurbs(dPnt* param_0, int param_1, int param_2, dPnt* param_3, int param_4);
+#ifdef DEBUG
+void daNpcT_cmnListenPropertyEvent(char* param_0, int* param_1, daNpcT_HIOParam* param_2) {
+ sprintf(&param_0[*param_1], "%.3ff,\t// 注目オフセット\n", param_2->unk0);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 重力\n", param_2->unk4);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// スケ−ル\n", param_2->unk8);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// リアル影サイズ\n", param_2->unkC);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 体重\n", param_2->unk10);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 高さ\n", param_2->unk14);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// ひざ丈\n", param_2->unk18);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 幅\n", param_2->unk1C);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 腰のX角上限\n", param_2->unk20);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 腰のX角下限\n", param_2->unk24);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 腰のY角上限\n", param_2->unk28);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 腰のY角下限\n", param_2->unk2C);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 頭のX角上限\n", param_2->unk30);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 頭のX角下限\n", param_2->unk34);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 頭のY角上限\n", param_2->unk38);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 頭のY角下限\n", param_2->unk3C);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 首の移動割合\n", param_2->unk40);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 補間フレ−ム\n", param_2->unk44);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// 会話距離\n", param_2->unk48);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// 会話角度\n", param_2->unk4A);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// 注目距離\n", param_2->unk4C);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// 注目角度\n", param_2->unk4E);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 視界\n", param_2->unk50);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// サ−チ距離\n", param_2->unk54);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// サ−チ高さ\n", param_2->unk58);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// サ−チ低さ\n", param_2->unk5C);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// ?\n", param_2->unk60);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// ?\n", param_2->unk62);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// 表情\n", param_2->unk64);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// 動作\n", param_2->unk66);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// 注視モ−ド\n", param_2->unk68);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// デバグモ−ドON\n", param_2->unk6A);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%d, \t// デバグ情報ON\n", param_2->unk6B);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 表情補間フレ−ム\n", param_2->unk6C);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 箱最小x\n", param_2->unk70);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 箱最小y\n", param_2->unk74);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 箱最小z\n", param_2->unk78);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 箱最大x\n", param_2->unk7C);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 箱最大y\n", param_2->unk80);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 箱最大z\n", param_2->unk84);
+ *param_1 = strlen(param_0);
+
+ sprintf(&param_0[*param_1], "%.3ff,\t// 箱オフセット\n", param_2->unk88);
+ *param_1 = strlen(param_0);
+}
+#endif
/* 801456D4-801456E0 140014 000C+00 1/1 0/0 159/159 .text initialize__18daNpcT_ActorMngr_cFv */
void daNpcT_ActorMngr_c::initialize() {
@@ -25,8 +142,8 @@ void daNpcT_ActorMngr_c::initialize() {
/* 801456E0-801456FC 140020 001C+00 1/1 0/0 160/160 .text
* entry__18daNpcT_ActorMngr_cFP10fopAc_ac_c */
-void daNpcT_ActorMngr_c::entry(fopAc_ac_c* actor) {
- mActorID = fopAcM_GetID(actor);
+void daNpcT_ActorMngr_c::entry(fopAc_ac_c* i_actor) {
+ mActorID = fopAcM_GetID(i_actor);
}
/* 801456FC-80145708 14003C 000C+00 1/1 0/0 382/382 .text remove__18daNpcT_ActorMngr_cFv
@@ -58,13 +175,13 @@ void daNpcT_MatAnm_c::initialize() {
}
/* 80145788-80145898 1400C8 0110+00 1/0 0/0 0/0 .text calc__15daNpcT_MatAnm_cCFP11J3DMaterial */
-void daNpcT_MatAnm_c::calc(J3DMaterial* param_0) const {
- J3DMaterialAnm::calc(param_0);
+void daNpcT_MatAnm_c::calc(J3DMaterial* i_material) const {
+ J3DMaterialAnm::calc(i_material);
for (u32 i = 0; i < 8; i++) {
if (getTexMtxAnm(i).getAnmFlag()) {
J3DTexMtxInfo* curr_mtx_info =
- &param_0->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo();
+ &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo();
if (mEyeMoveFlg != 0) {
curr_mtx_info->mSRT.mTranslationX = mNowOffsetX;
@@ -98,8 +215,10 @@ void daNpcT_MotionSeqMngr_c::initialize() {
}
/* 801458C0-80145A24 140200 0164+00 2/2 0/0 2/2 .text play__22daNpcT_MotionSeqMngr_cFUsPiPf */
-int daNpcT_MotionSeqMngr_c::play(u16 i_loopNo, int* o_anmIdx, f32* o_morf) {
+int daNpcT_MotionSeqMngr_c::play(u16 i_loopNo, int* o_motionNo_p, f32* o_morfFrm_p) {
int ret = 0;
+ JUT_ASSERT(471, 0 != o_motionNo_p);
+ JUT_ASSERT(472, 0 != o_morfFrm_p);
if (mPrevStepNo == mStepNo && mStepNo < mStepNum) {
if ((&mpSeqData[mNo * mStepNum])[mStepNo].mAnmIdx != -1) {
@@ -115,11 +234,11 @@ int daNpcT_MotionSeqMngr_c::play(u16 i_loopNo, int* o_anmIdx, f32* o_morf) {
if (mPrevStepNo != mStepNo && mStepNo < mStepNum) {
if ((&mpSeqData[mNo * mStepNum])[mStepNo].mAnmIdx != -1) {
- *o_anmIdx = (&mpSeqData[mNo * mStepNum])[mStepNo].mAnmIdx;
- *o_morf = (&mpSeqData[mNo * mStepNum])[mStepNo].mMorf;
+ *o_motionNo_p = (&mpSeqData[mNo * mStepNum])[mStepNo].mAnmIdx;
+ *o_morfFrm_p = (&mpSeqData[mNo * mStepNum])[mStepNo].mMorf;
if (mPrevStepNo == -1 && -1.0f < mInitialMorf) {
- *o_morf = mInitialMorf;
+ *o_morfFrm_p = mInitialMorf;
}
ret = 1;
} else {
@@ -131,7 +250,6 @@ int daNpcT_MotionSeqMngr_c::play(u16 i_loopNo, int* o_anmIdx, f32* o_morf) {
return ret;
}
-
/* 80145A24-80145A38 140364 0014+00 0/0 0/0 43/43 .text
* checkEndSequence__22daNpcT_MotionSeqMngr_cFv */
s32 daNpcT_MotionSeqMngr_c::checkEndSequence() {
@@ -139,197 +257,201 @@ s32 daNpcT_MotionSeqMngr_c::checkEndSequence() {
}
/* 80145A38-80145A78 140378 0040+00 2/2 0/0 0/0 .text daNpcT_addIdx__FiiRUsi */
-static int daNpcT_addIdx(int i_delta, int i_num, u16& i_idx, int i_closed) {
- int end = 0;
+static BOOL daNpcT_addIdx(int i_step, int i_num, u16& i_idx, BOOL i_closed) {
+ BOOL rt = FALSE;
int new_idx = i_idx;
- new_idx += i_delta;
+ new_idx += i_step;
if (i_num <= new_idx) {
if (i_closed) {
new_idx %= i_num;
} else {
- new_idx = i_num + -1;
- end = 1;
+ new_idx = i_num - 1;
+ rt = TRUE;
}
}
i_idx = new_idx;
- return end;
+ return rt;
}
/* 80145A78-80145AC4 1403B8 004C+00 2/2 0/0 0/0 .text daNpcT_subIdx__FiiRUsi */
-static int daNpcT_subIdx(int i_delta, int i_num, u16& i_idx, int i_closed) {
- int end = 0;
+static BOOL daNpcT_subIdx(int i_step, int i_num, u16& i_idx, BOOL i_closed) {
+ BOOL rt = FALSE;
int new_idx = i_idx;
- new_idx -= i_delta;
+ new_idx -= i_step;
if (0 > new_idx) {
if (i_closed) {
new_idx = (i_num + new_idx % i_num) % i_num;
} else {
new_idx = 0;
- end = 1;
+ rt = TRUE;
}
}
i_idx = new_idx;
- return end;
+ return rt;
}
/* 80145AC4-80145B20 140404 005C+00 5/5 0/0 0/0 .text daNpcT_incIdx__FiRUsii */
-static int daNpcT_incIdx(int i_num, u16& i_idx, int i_closed, int i_direction) {
+static int daNpcT_incIdx(int i_num, u16& i_idx, BOOL i_closed, int i_direction) {
return i_direction ? daNpcT_subIdx(1, i_num, i_idx, i_closed) :
daNpcT_addIdx(1, i_num, i_idx, i_closed);
}
/* 80145B20-80145B7C 140460 005C+00 3/3 0/0 0/0 .text daNpcT_decIdx__FiRUsii */
-static int daNpcT_decIdx(int i_num, u16& i_idx, int i_closed, int i_direction) {
+static int daNpcT_decIdx(int i_num, u16& i_idx, BOOL i_closed, int i_direction) {
return i_direction ? daNpcT_addIdx(1, i_num, i_idx, i_closed) :
daNpcT_subIdx(1, i_num, i_idx, i_closed);
}
/* 80145B7C-80145C40 1404BC 00C4+00 1/1 0/0 0/0 .text
* hermite__13daNpcT_Path_cFR4cXyzR4cXyzR4cXyzR4cXyzR16daNpcT_Hermite_cR4cXyz */
-void daNpcT_Path_c::hermite(cXyz& param_0, cXyz& param_1, cXyz& param_2, cXyz& param_3,
- daNpcT_Hermite_c& param_4, cXyz& param_5) {
- param_5.x = param_0.x * param_4.field_0x04 + param_2.x * param_4.field_0x08 +
- param_1.x * param_4.field_0x0c + param_3.x * param_4.field_0x10;
+void daNpcT_Path_c::hermite(cXyz& i_start, cXyz& i_startTan, cXyz& i_end, cXyz& i_endTan,
+ daNpcT_Hermite_c& i_hermite, cXyz& o_result) {
+ o_result.x = i_start.x * i_hermite.GetH00() + i_end.x * i_hermite.GetH01() +
+ i_startTan.x * i_hermite.GetH10() + i_endTan.x * i_hermite.GetH11();
- param_5.y = param_0.y * param_4.field_0x04 + param_2.y * param_4.field_0x08 +
- param_1.y * param_4.field_0x0c + param_3.y * param_4.field_0x10;
+ o_result.y = i_start.y * i_hermite.GetH00() + i_end.y * i_hermite.GetH01() +
+ i_startTan.y * i_hermite.GetH10() + i_endTan.y * i_hermite.GetH11();
- param_5.z = param_0.z * param_4.field_0x04 + param_2.z * param_4.field_0x08 +
- param_1.z * param_4.field_0x0c + param_3.z * param_4.field_0x10;
+ o_result.z = i_start.z * i_hermite.GetH00() + i_end.z * i_hermite.GetH01() +
+ i_startTan.z * i_hermite.GetH10() + i_endTan.z * i_hermite.GetH11();
}
/* 80145C40-80145C74 140580 0034+00 0/0 0/0 44/44 .text initialize__13daNpcT_Path_cFv */
void daNpcT_Path_c::initialize() {
- mpRoomPath = 0;
+ mPathInfo = NULL;
- mPosition.x = 0.0f;
- mPosition.y = 0.0f;
- mPosition.z = 0.0f;
+ mPosition.setall(0.0f);
field_0x10 = 0.0f;
field_0x14 = 0.0f;
field_0x18 = 0.0f;
mIdx = 0;
mDirection = 0;
- mIsClosed = 0;
+ mIsClosed = FALSE;
}
/* 80145C74-80145D2C 1405B4 00B8+00 0/0 0/0 18/18 .text setPathInfo__13daNpcT_Path_cFUcScUc */
int daNpcT_Path_c::setPathInfo(u8 i_pathIdx, s8 i_roomNo, u8 i_direction) {
- mpRoomPath = 0;
+ mPathInfo = NULL;
mIdx = 0;
mDirection = i_direction;
if (i_pathIdx != 0xFF) {
- mpRoomPath = dPath_GetRoomPath(i_pathIdx, i_roomNo);
- if (!mpRoomPath) {
+ mPathInfo = dPath_GetRoomPath(i_pathIdx, i_roomNo);
+ if (mPathInfo == NULL) {
return 0;
}
- mIsClosed = dPath_ChkClose(mpRoomPath);
+ mIsClosed = dPath_ChkClose(mPathInfo);
u16 idx;
mPosition = getPntPos(idx = getIdx());
}
+
return 1;
}
/* 80145D2C-80145DA0 14066C 0074+00 0/0 0/0 1/1 .text setNextPathInfo__13daNpcT_Path_cFScUc */
-int daNpcT_Path_c::setNextPathInfo(s8 param_0, u8 i_direction) {
+int daNpcT_Path_c::setNextPathInfo(s8 i_roomNo, u8 i_direction) {
mIdx = 0;
mDirection = i_direction;
- u16 next_id = mpRoomPath->m_nextID;
+ u16 next_id = mPathInfo->m_nextID;
if (next_id != 0xFFFF) {
- mpRoomPath = dPath_GetRoomPath(next_id, param_0);
- if (!mpRoomPath) {
+ mPathInfo = dPath_GetRoomPath(next_id, i_roomNo);
+ if (mPathInfo == NULL) {
return 0;
}
- mIsClosed = mpRoomPath->m_closed & 1;
+ mIsClosed = dPath_ChkClose(mPathInfo);
}
+
return 1;
}
/* 80145DA0-80145DD0 1406E0 0030+00 0/0 0/0 1/1 .text reverse__13daNpcT_Path_cFv */
void daNpcT_Path_c::reverse() {
if (mDirection == 1) {
- mDirection = 0;
- field_0x1E = 1;
- return;
+ offReverse();
+ } else {
+ onReverse();
}
- mDirection = 1;
- field_0x1E = 1;
}
/* 80145DD0-80145E38 140710 0068+00 2/2 0/0 8/8 .text setNextIdx__13daNpcT_Path_cFi */
-int daNpcT_Path_c::setNextIdx(int param_0) {
+int daNpcT_Path_c::setNextIdx(int i_idx) {
int numPnts = getNumPnts();
- if (chkClose() != 0 && numPnts == param_0) {
- return daNpcT_incIdx(param_0, mIdx, 1, mDirection);
+ if (chkClose() && numPnts == i_idx) {
+ return daNpcT_incIdx(i_idx, mIdx, TRUE, mDirection);
+ } else {
+ return daNpcT_incIdx(i_idx, mIdx, FALSE, mDirection);
}
-
- return daNpcT_incIdx(param_0, mIdx, 0, mDirection);
}
/* 80145E38-80145FB4 140778 017C+00 0/0 0/0 1/1 .text getDstPos__13daNpcT_Path_cF4cXyzP4cXyzi */
-int daNpcT_Path_c::getDstPos(cXyz param_0, cXyz* param_1, int i_idx) {
+int daNpcT_Path_c::getDstPos(cXyz i_pnt, cXyz* o_pos_p, int i_idx) {
if (i_idx == mIdx) {
- *param_1 = getPntPos(getIdx() - 1);
+ *o_pos_p = getPntPos(getIdx() - 1);
return 1;
}
while (true) {
- if (!chkPassed1(param_0, i_idx)) {
+ if (!chkPassed1(i_pnt, i_idx)) {
break;
}
+
field_0x1E = 1;
+
if (setNextIdx(i_idx)) {
mIdx = i_idx;
- *param_1 = getPntPos(getIdx() - 1);
+ *o_pos_p = getPntPos(getIdx() - 1);
return 1;
}
}
+
int i_idx2;
- *param_1 = getPntPos(i_idx2 = getIdx());
+ *o_pos_p = getPntPos(i_idx2 = getIdx());
return 0;
}
/* 80145FB4-80146188 1408F4 01D4+00 0/0 0/0 10/10 .text getDstPosH__13daNpcT_Path_cF4cXyzP4cXyzii
*/
-int daNpcT_Path_c::getDstPosH(cXyz param_0, cXyz* param_1, int i_idx, int param_3) {
+int daNpcT_Path_c::getDstPosH(cXyz i_pnt, cXyz* o_pos_p, int i_idx, int param_3) {
if (i_idx == mIdx) {
- *param_1 = getPntPos(getIdx() - 1);
+ *o_pos_p = getPntPos(getIdx() - 1);
return 1;
}
while (true) {
- if (!chkPassed1(param_0, i_idx)) {
+ if (!chkPassed1(i_pnt, i_idx)) {
break;
}
+
field_0x1E = 1;
+
if (setNextIdx(i_idx)) {
mIdx = i_idx;
- *param_1 = getPntPos(getIdx() - 1);
+ *o_pos_p = getPntPos(getIdx() - 1);
return 1;
}
}
while (true) {
if (field_0x1E < param_3) {
- if (chkPassed2(param_0, param_1, i_idx, param_3)) {
+ if (chkPassed2(i_pnt, o_pos_p, i_idx, param_3)) {
field_0x1E++;
continue;
}
} else {
int i_idx2;
- *param_1 = getPntPos(i_idx2 = getIdx());
+ *o_pos_p = getPntPos(i_idx2 = getIdx());
}
+
return 0;
}
}
@@ -341,26 +463,44 @@ int daNpcT_Path_c::chkPassed1(cXyz i_pnt, int i_num) {
cXyz prev_pos, cur_pos, next_pos;
cXyz sp5C;
- u16 cur_idx = getIdx() & 0xFFFF;
+ u16 cur_idx = getIdx();
u16 prev_idx, next_idx;
prev_idx = next_idx = cur_idx;
if (chkClose() && i_num == getNumPnts()) {
- daNpcT_decIdx(getNumPnts(), prev_idx, 1, chkReverse());
- daNpcT_incIdx(getNumPnts(), next_idx, 1, chkReverse());
+ daNpcT_decIdx(getNumPnts(), prev_idx, TRUE, chkReverse());
+ daNpcT_incIdx(getNumPnts(), next_idx, TRUE, chkReverse());
} else {
- daNpcT_decIdx(i_num, prev_idx, 0, chkReverse());
- daNpcT_incIdx(i_num, next_idx, 0, chkReverse());
+ daNpcT_decIdx(i_num, prev_idx, FALSE, chkReverse());
+ daNpcT_incIdx(i_num, next_idx, FALSE, chkReverse());
+ }
+
+ if (!chkClose()) {
+ if (chkReverse()) {
+ if (cur_idx < next_idx || prev_idx < cur_idx) {
+ JUT_ASSERT(964, 0);
+ }
+ } else {
+ if (cur_idx < prev_idx || next_idx < cur_idx) {
+ JUT_ASSERT(971, 0);
+ }
+ }
+ }
+
+ if (prev_idx == cur_idx && cur_idx == next_idx) {
+ JUT_ASSERT(978, 0);
}
prev_pos = getPntPos(prev_idx);
cur_pos = getPntPos(cur_idx);
next_pos = getPntPos(next_idx);
+ s16 var_r29;
if (prev_idx == cur_idx) {
sp5C.set(0.0f, 0.0f, 100.0f);
- mDoMtx_stack_c::YrotS(cLib_targetAngleY(&next_pos, &cur_pos));
+ var_r29 = cLib_targetAngleY(&next_pos, &cur_pos);
+ mDoMtx_stack_c::YrotS(var_r29);
mDoMtx_stack_c::multVec(&sp5C, &sp5C);
prev_pos = sp5C + cur_pos;
}
@@ -368,7 +508,8 @@ int daNpcT_Path_c::chkPassed1(cXyz i_pnt, int i_num) {
if (cur_idx == next_idx) {
sp5C.set(0.0f, 0.0f, 100.0f);
- mDoMtx_stack_c::YrotS(cLib_targetAngleY(&prev_pos, &cur_pos));
+ var_r29 = cLib_targetAngleY(&prev_pos, &cur_pos);
+ mDoMtx_stack_c::YrotS(var_r29);
mDoMtx_stack_c::multVec(&sp5C, &sp5C);
next_pos = sp5C + cur_pos;
}
@@ -379,8 +520,9 @@ int daNpcT_Path_c::chkPassed1(cXyz i_pnt, int i_num) {
cM3d_Len2dSqPntAndSegLine(cur_pos.x, cur_pos.z, prev_pos.x, prev_pos.z,
next_pos.x, next_pos.z, &proj_cur_x, &proj_cur_z, &spC))
{
- if (0x4000 < (u16)abs((s16)(cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z) -
- cM_atan2s(proj_cur_x - proj_pnt_x, proj_cur_z - proj_pnt_z))))
+ var_r29 = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z);
+ var_r29 = var_r29 - cM_atan2s(proj_cur_x - proj_pnt_x, proj_cur_z - proj_pnt_z);
+ if (0x4000 < (u16)abs(var_r29))
{
return 1;
}
@@ -389,89 +531,112 @@ int daNpcT_Path_c::chkPassed1(cXyz i_pnt, int i_num) {
return 0;
}
-/* ############################################################################################## */
/* 803B36A8-803B36B4 0107C8 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
+static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 801464D8-8014698C 140E18 04B4+00 1/1 0/0 0/0 .text chkPassed2__13daNpcT_Path_cF4cXyzP4cXyzii */
-// NONMATCHING
-int daNpcT_Path_c::chkPassed2(cXyz param_1, cXyz* param_2, int param_3, int param_4) {
+int daNpcT_Path_c::chkPassed2(cXyz i_pnt, cXyz* param_2, int i_num, int param_4) {
cXyz cStack_80;
- cXyz local_8c;
- cXyz local_98;
- cXyz cStack_a4;
- cXyz cStack_b0;
- cXyz cStack_bc;
- u16 idx = getIdx();
- u16 local_140;
- u16 local_142;
- u16 local_144;
- local_144 = idx;
- local_142 = idx;
- if (chkClose() && getNumPnts() == param_3) {
- daNpcT_decIdx(getNumPnts(), local_142, 1, chkReverse());
- daNpcT_incIdx(getNumPnts(), local_144, 1, chkReverse());
+ cXyz prev_pos;
+ cXyz cur_pos;
+ cXyz next_pos;
+ cXyz h_startTan;
+ cXyz h_endTan;
+
+ u16 cur_idx = (u16)getIdx();
+ u16 sp10;
+ u16 prev_idx;
+ u16 next_idx;
+ prev_idx = next_idx = cur_idx;
+
+ if (chkClose() && getNumPnts() == i_num) {
+ daNpcT_decIdx(getNumPnts(), prev_idx, TRUE, chkReverse());
+ daNpcT_incIdx(getNumPnts(), next_idx, TRUE, chkReverse());
} else {
- daNpcT_decIdx(param_3, local_142, 0, chkReverse());
- daNpcT_incIdx(param_3, local_144, 0, chkReverse());
+ daNpcT_decIdx(i_num, prev_idx, FALSE, chkReverse());
+ daNpcT_incIdx(i_num, next_idx, FALSE, chkReverse());
}
- local_140 = local_142;
- if (chkClose() && getNumPnts() == param_3) {
- daNpcT_decIdx(getNumPnts(), local_140, 1, chkReverse());
+
+ sp10 = prev_idx;
+
+ if (chkClose() && getNumPnts() == i_num) {
+ daNpcT_decIdx(getNumPnts(), sp10, TRUE, chkReverse());
} else {
- daNpcT_decIdx(param_3, local_140, 0, chkReverse());
+ daNpcT_decIdx(i_num, sp10, FALSE, chkReverse());
}
- cStack_80 = getPntPos(local_140);
- local_8c = getPntPos(local_142);
- local_98 = getPntPos(idx);
- cStack_a4 = getPntPos(local_144);
- if (local_142 == (u16)(idx & 0xffff)) {
- cStack_b0 = cStack_a4 - local_8c;
+ if (!chkClose()) {
+ if (chkReverse()) {
+ if (cur_idx < next_idx || prev_idx < cur_idx || sp10 < prev_idx) {
+ JUT_ASSERT(1082, 0);
+ }
+ } else {
+ if (prev_idx < sp10 || cur_idx < prev_idx || next_idx < cur_idx) {
+ JUT_ASSERT(1090, 0);
+ }
+ }
+ }
+
+ if (sp10 == prev_idx && prev_idx == cur_idx && cur_idx == next_idx) {
+ JUT_ASSERT(1098, 0);
+ }
+
+ cStack_80 = getPntPos(sp10);
+ prev_pos = getPntPos(prev_idx);
+ cur_pos = getPntPos(cur_idx);
+ next_pos = getPntPos(next_idx);
+
+ if (prev_idx == cur_idx) {
+ h_startTan = next_pos - prev_pos;
} else {
- cStack_b0 = local_98 - local_8c;
+ h_startTan = cur_pos - prev_pos;
}
- if (local_144 == (u16)(idx & 0xffff)) {
- cStack_bc = cStack_a4 - local_8c;
+
+ if (next_idx == cur_idx) {
+ h_endTan = next_pos - prev_pos;
} else {
- cStack_bc = cStack_a4 - local_98;
- }
- daNpcT_Hermite_c adStack_70;
- cXyz auStack_d4;
- adStack_70.Set(field_0x1E * (1.0f / param_4));
- hermite(local_8c, cStack_b0, local_98, cStack_bc, adStack_70,
- auStack_d4);
- param_2->x = auStack_d4.x;
- param_2->y = auStack_d4.y;
- param_2->z = auStack_d4.z;
- f32 local_12c;
- f32 local_130;
- f32 local_134;
- f32 local_138;
+ h_endTan = next_pos - cur_pos;
+ }
+
+ daNpcT_Hermite_c h;
+ cXyz hermite_result;
+
+ f32 var_f31 = 1.0f / param_4;
+ f32 var_f30 = field_0x1E * var_f31;
+
+ h.Set(var_f30);
+ hermite(prev_pos, h_startTan, cur_pos, h_endTan, h, hermite_result);
+
+ param_2->x = hermite_result.x;
+ param_2->y = hermite_result.y;
+ param_2->z = hermite_result.z;
+
+ f32 proj_pnt_x;
+ f32 proj_cur_x;
+ f32 proj_pnt_z;
+ f32 proj_cur_z;
f32 auStack_13c;
- if (cM3d_Len2dSqPntAndSegLine(param_1.x, param_1.z, local_8c.x, local_8c.z, local_98.x,
- local_98.z, &local_12c, &local_134, &auStack_13c) &&
- cM3d_Len2dSqPntAndSegLine(param_2->x, param_2->z, local_8c.x, local_8c.z, local_98.x,
- local_98.z, &local_130, &local_138, &auStack_13c))
+ if (cM3d_Len2dSqPntAndSegLine(i_pnt.x, i_pnt.z, prev_pos.x, prev_pos.z, cur_pos.x,
+ cur_pos.z, &proj_pnt_x, &proj_pnt_z, &auStack_13c) &&
+ cM3d_Len2dSqPntAndSegLine(param_2->x, param_2->z, prev_pos.x, prev_pos.z, cur_pos.x,
+ cur_pos.z, &proj_cur_x, &proj_cur_z, &auStack_13c))
{
- s16 sVar10 = cM_atan2s(local_98.x - local_8c.x,
- local_98.z - local_8c.z);
- s16 sVar11 = cM_atan2s(local_130 - local_12c,
- local_138 - local_134);
- s16 diff = sVar10 - sVar11;
- u16 uVar4 = abs(diff);
- if (uVar4 > 0x4000) {
+ s16 var_r28 = cM_atan2s(cur_pos.x - prev_pos.x, cur_pos.z - prev_pos.z);
+ var_r28 = var_r28 - cM_atan2s(proj_cur_x - proj_pnt_x, proj_cur_z - proj_pnt_z);
+
+ if ((u16)abs(var_r28) > 0x4000) {
return 1;
}
}
+
return 0;
}
/* 8014698C-80146C98 1412CC 030C+00 1/1 0/0 0/0 .text
* daNpcT_chkPassed__F4cXyzP4dPntUsUsiiP4cXyzPiPi */
-static BOOL daNpcT_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, int i_closed,
+static BOOL daNpcT_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_closed,
int param_5, cXyz* o_proj, int* o_prevIdx, int* o_nextIdx) {
u16 prev_idx = i_idx;
u16 next_idx = i_idx;
@@ -494,6 +659,8 @@ static BOOL daNpcT_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, i
angle = cM_atan2s(cur_pnt.x - prev_pnt.x, cur_pnt.z - prev_pnt.z);
} else if (i_idx < next_idx) {
angle = cM_atan2s(next_pnt.x - cur_pnt.x, next_pnt.z - cur_pnt.z);
+ } else {
+ JUT_ASSERT(1470, 0);
}
mDoMtx_stack_c::transS(next_pnt);
@@ -564,6 +731,9 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
mDoMtx_stack_c::multVecZero(&mJntPos[0]);
mHeadPos.setall(0.0f);
mDoMtx_stack_c::multVec(&mHeadPos, &mHeadPos);
+
+ JUT_ASSERT(1620, 0 != i_eyeOffset_p);
+
mEyePos.set(i_eyeOffset_p->x, i_eyeOffset_p->y, i_eyeOffset_p->z);
mDoMtx_stack_c::multVec(&mEyePos, &mEyePos);
field_0x150.x = cLib_targetAngleX(&mJntPos[0], &mEyePos);
@@ -598,12 +768,10 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
case LOOK_NONE:
mAttnPosP = NULL;
break;
-
case LOOK_PLAYER:
mAttnPosP = &daPy_getPlayerActorClass()->attention_info.position;
mAttnPos = *mAttnPosP;
break;
-
case LOOK_ACTOR: {
fopAc_ac_c* actor = mActrMngr.getActorP();
if (actor != NULL) {
@@ -615,13 +783,11 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
}
break;
}
-
case LOOK_POS:
if (mAttnPosP != NULL) {
mAttnPos = *mAttnPosP;
}
break;
-
case LOOK_CAMERA: {
camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
if (camera != NULL) {
@@ -630,7 +796,6 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
}
break;
}
-
case LOOK_MODE_5:
if (mAttnPosP != NULL) {
mMinRad[2].y = 0.0f;
@@ -640,7 +805,6 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
mAttnPos = *mAttnPosP;
}
break;
-
case LOOK_MODE_6:
if (mAttnPosP != NULL) {
mMinRad[2].y = 0.0f;
@@ -650,32 +814,33 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
mAttnPos = *mAttnPosP;
}
break;
-
case LOOK_MODE_7:
case LOOK_MODE_8: {
if (cLib_calcTimer(&mTimer) == 0) {
field_0x13c ^= 1;
mTimer = getTime();
}
+
int angle_y_offset;
if (field_0x13c != 0) {
angle_y_offset = cM_deg2s(-110.0f);
} else {
angle_y_offset = cM_deg2s(110.0f);
}
+
angle.y = angle_y_offset;
angle.y += static_cast<daNpcT_c*>(i_actor)->mCurAngle.y;
vec3.set(0.0f, mJntPos[0].y, 1000.0f);
if (mMode == 8) {
vec3.y = i_actor->current.pos.y;
}
+
mDoMtx_stack_c::YrotS(angle.y);
mDoMtx_stack_c::multVec(&vec3, &mAttnPos);
mAttnPos += i_actor->current.pos;
mAttnPosP = &mAttnPos;
break;
}
-
default:
mAttnPosP = NULL;
break;
@@ -725,6 +890,7 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
angle.set(getJntRadX2S(i), getJntRadY2S(i), 0);
mDoMtx_stack_c::ZXYrotS(angle);
mDoMtx_stack_c::inverse();
+
if (i != 0) {
vec3 = field_0x54[i - 1] - field_0x54[i];
mDoMtx_stack_c::multVec(&vec3, &vec3);
@@ -746,21 +912,22 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e
}
/* 80147858-80147C38 142198 03E0+00 1/1 0/0 0/0 .text calc__15daNpcT_JntAnm_cFf */
-// NONMATCHING float loads out of order
void daNpcT_JntAnm_c::calc(f32 param_0) {
cXyz vec1, vec2;
cXyz vec3 = field_0x24;
s16 angle = cLib_targetAngleY(&mPos, &field_0x120);
vec1.set(0.0f, 0.0f, 1000.0f);
+
mDoMtx_stack_c::YrotS(angle);
mDoMtx_stack_c::multVec(&vec1, &vec1);
vec1 += mPos;
for (int i = 0; i < 3; i++) {
if (i != 1) {
- s16 angle1 = cLib_targetAngleY(&mJntPos[i], &vec1);
- s16 angle2 = cLib_targetAngleY(&mJntPos[i], &vec3);
- mRad[i].y = cM_s2rad((s16)(angle1 - angle2));
+ s16 var_r27 = cLib_targetAngleY(&mJntPos[i], &vec1);
+ var_r27 = var_r27 - cLib_targetAngleY(&mJntPos[i], &vec3);
+
+ mRad[i].y = cM_s2rad(var_r27);
if (mMaxRad[i].y < mRad[i].y) {
mRad[i].y = mMaxRad[i].y;
}
@@ -793,9 +960,10 @@ void daNpcT_JntAnm_c::calc(f32 param_0) {
for (int i = 0; i < 3; i++) {
if (i != 1) {
- s16 angle1 = -cLib_targetAngleX(&mJntPos[i], &field_0x120);
- s16 angle2 = -cLib_targetAngleX(&mJntPos[i], &field_0x24);
- mRad[i].x = cM_s2rad((s16)(angle1 - angle2));
+ s16 var_r26 = -cLib_targetAngleX(&mJntPos[i], &field_0x120);
+ var_r26 = var_r26 - (s16)-cLib_targetAngleX(&mJntPos[i], &field_0x24);
+
+ mRad[i].x = cM_s2rad(var_r26);
if (mMaxRad[i].x < mRad[i].x) {
mRad[i].x = mMaxRad[i].x;
}
@@ -834,9 +1002,10 @@ void daNpcT_JntAnm_c::calcJntRad(f32 param_0, f32 param_1, f32 param_2) {
for (int i = 0; i < 3; i++) {
if (param_0 < 1.0f && mDirectFlag == 0) {
- cLib_addCalc2(&field_0xe4[i].x, mRad[i].x, param_0, 3.1415927f);
- cLib_addCalc2(&field_0xe4[i].y, mRad[i].y, param_0, 3.1415927f);
- cLib_addCalc2(&field_0xe4[i].z, mRad[i].z, param_0, 3.1415927f);
+ cLib_addCalc2(&field_0xe4[i].x, mRad[i].x, param_0, M_PI);
+ cLib_addCalc2(&field_0xe4[i].y, mRad[i].y, param_0, M_PI);
+ cLib_addCalc2(&field_0xe4[i].z, mRad[i].z, param_0, M_PI);
+
if (0.0f < param_2 && 0.0f < mRad[i].y && mRad[i].y - field_0xe4[i].y < 0.0f) {
field_0xe4[i].y = mRad[i].y;
}
@@ -892,86 +1061,56 @@ void daNpcT_DmgStagger_c::calc(BOOL param_0) {
/* 803B36D8-803B371C 0107F8 0044+00 0/0 0/0 54/54 .data mCcDCyl__8daNpcT_c */
dCcD_SrcCyl daNpcT_c::mCcDCyl = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
+ daNpcT_c::mCcDObjData,
{
{0.0f, 0.0f, 0.0f}, // mCenter
- 0.0f, // mRadius
- 0.0f // mHeight
- } // mCyl
+ 0.0f, // mRadius
+ 0.0f // mHeight
+ } // mCyl
};
/* 803B371C-803B375C 01083C 0040+00 0/0 0/0 3/3 .data mCcDSph__8daNpcT_c */
dCcD_SrcSph daNpcT_c::mCcDSph = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
+ daNpcT_c::mCcDObjData,
{
{{0.0f, 0.0f, 0.0f}, 0.0f} // mSph
- } // mSphAttr
+ } // mSphAttr
};
/* 803B375C-803B37A0 01087C 0044+00 0/0 0/0 1/1 .data mCcDCyl__11daBaseNpc_c */
dCcD_SrcCyl daBaseNpc_c::mCcDCyl = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
+ daBaseNpc_c::mCcDObj,
{
{0.0f, 0.0f, 0.0f}, // mCenter
- 0.0f, // mRadius
- 0.0f // mHeight
- } // mCyl
+ 0.0f, // mRadius
+ 0.0f // mHeight
+ } // mCyl
};
/* 803B37A0-803B37E0 0108C0 0040+00 0/0 0/0 1/1 .data mCcDSph__11daBaseNpc_c */
dCcD_SrcSph daBaseNpc_c::mCcDSph = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
+ daBaseNpc_c::mCcDObj,
{
{{0.0f, 0.0f, 0.0f}, 0.0f} // mSph
- } // mSphAttr
+ } // mSphAttr
};
/* 803B37E0-803B3824 010900 0044+00 0/0 0/0 36/36 .data mCcDCyl__8daNpcF_c */
dCcD_SrcCyl daNpcF_c::mCcDCyl = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
+ daNpcF_c::mCcDObjInfo,
{
{0.0f, 0.0f, 0.0f}, // mCenter
- 0.0f, // mRadius
- 0.0f // mHeight
- } // mCyl
+ 0.0f, // mRadius
+ 0.0f // mHeight
+ } // mCyl
};
/* 803B3824-803B3864 010944 0040+00 0/0 0/0 2/2 .data mCcDSph__8daNpcF_c */
dCcD_SrcSph daNpcF_c::mCcDSph = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
+ daNpcF_c::mCcDObjInfo,
{
{{0.0f, 0.0f, 0.0f}, 0.0f} // mSph
- } // mSphAttr
+ } // mSphAttr
};
/* 80147FA4-80147FD4 1428E4 0030+00 0/0 0/0 53/53 .text
@@ -986,6 +1125,7 @@ void daNpcT_c::tgHitCallBack(fopAc_ac_c* i_actor1, dCcD_GObjInf* i_obj1, fopAc_a
cut_type = daPy_py_c::CUT_TYPE_NM_VERTICAL;
}
}
+
static_cast<daNpcT_c*>(i_actor1)->setCutType(cut_type);
}
@@ -1011,95 +1151,94 @@ void* daNpcT_c::srchActor(void* actor, void* param_1) {
}
/* 80148058-80148094 142998 003C+00 1/1 0/0 7/7 .text getTrnsfrmAnmP__8daNpcT_cFPCci */
-J3DAnmTransform* daNpcT_c::getTrnsfrmAnmP(char const* arcName, int fileIdx) {
- return (J3DAnmTransform*)dComIfG_getObjectRes(arcName, fileIdx);
+J3DAnmTransform* daNpcT_c::getTrnsfrmAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTransform*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 80148094-801480D0 1429D4 003C+00 1/1 0/0 11/11 .text getTrnsfrmKeyAnmP__8daNpcT_cFPCci
*/
-J3DAnmTransformKey* daNpcT_c::getTrnsfrmKeyAnmP(char const* arcName, int fileIdx) {
- return (J3DAnmTransformKey*)dComIfG_getObjectRes(arcName, fileIdx);
+J3DAnmTransformKey* daNpcT_c::getTrnsfrmKeyAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTransformKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 801480D0-8014810C 142A10 003C+00 1/1 0/0 1/1 .text getTexPtrnAnmP__8daNpcT_cFPCci */
-J3DAnmTexPattern* daNpcT_c::getTexPtrnAnmP(char const* arcName, int fileIdx) {
- return (J3DAnmTexPattern*)dComIfG_getObjectRes(arcName, fileIdx);
+J3DAnmTexPattern* daNpcT_c::getTexPtrnAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTexPattern*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 8014810C-80148148 142A4C 003C+00 1/1 0/0 7/7 .text getTexSRTKeyAnmP__8daNpcT_cFPCci */
-J3DAnmTextureSRTKey* daNpcT_c::getTexSRTKeyAnmP(char const* arcName, int fileIdx) {
- return (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(arcName, fileIdx);
+J3DAnmTextureSRTKey* daNpcT_c::getTexSRTKeyAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 80148148-80148184 142A88 003C+00 0/0 0/0 9/9 .text getTevRegKeyAnmP__8daNpcT_cFPCci */
-J3DAnmTevRegKey* daNpcT_c::getTevRegKeyAnmP(char const* arcName, int fileIdx) {
- return (J3DAnmTevRegKey*)dComIfG_getObjectRes(arcName, fileIdx);
+J3DAnmTevRegKey* daNpcT_c::getTevRegKeyAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmTevRegKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 80148184-801481C0 142AC4 003C+00 0/0 0/0 2/2 .text getColorAnmP__8daNpcT_cFPCci */
-J3DAnmColor* daNpcT_c::getColorAnmP(char const* arcName, int fileIdx) {
- return (J3DAnmColor*)dComIfG_getObjectRes(arcName, fileIdx);
+J3DAnmColor* daNpcT_c::getColorAnmP(char const* i_arcName, int i_resIdx) {
+ return (J3DAnmColor*)dComIfG_getObjectRes(i_arcName, i_resIdx);
}
/* 801481C0-80148204 142B00 0044+00 1/1 0/0 0/0 .text setBckAnm__8daNpcT_cFP15J3DAnmTransformfiiib
*/
-int daNpcT_c::setBckAnm(J3DAnmTransform* bck, f32 rate, int attr, int startF, int endF,
- bool modify) {
- return mBckAnm.init(bck, TRUE, attr, rate, startF, endF, modify);
+int daNpcT_c::setBckAnm(J3DAnmTransform* i_bck, f32 i_speed, int i_mode, int i_start, int i_end,
+ bool i_modify) {
+ return mBckAnm.init(i_bck, TRUE, i_mode, i_speed, i_start, i_end, i_modify);
}
/* 80148204-801482F8 142B44 00F4+00 1/1 0/0 1/1 .text
* setMcaMorfAnm__8daNpcT_cFP18J3DAnmTransformKeyffiii */
-int daNpcT_c::setMcaMorfAnm(J3DAnmTransformKey* bck, f32 rate, f32 morf, int mode, int startF,
- int endF) {
- f32 start = startF;
- f32 end = endF;
+int daNpcT_c::setMcaMorfAnm(J3DAnmTransformKey* i_bck, f32 i_speed, f32 i_morf, int i_mode, int i_start,
+ int i_end) {
+ f32 start = i_start;
+ f32 end = i_end;
- mpMorf[0]->setAnm(bck, mode, morf, rate, start, end);
+ mpMorf[0]->setAnm(i_bck, i_mode, i_morf, i_speed, start, end);
if (mpMorf[1] != NULL) {
- mpMorf[1]->setAnm(bck, mode, morf, rate, start, end);
+ mpMorf[1]->setAnm(i_bck, i_mode, i_morf, i_speed, start, end);
}
return 1;
}
-
/* 801482F8-80148338 142C38 0040+00 1/1 0/0 1/1 .text
* setBtpAnm__8daNpcT_cFP16J3DAnmTexPatternP12J3DModelDatafi */
-int daNpcT_c::setBtpAnm(J3DAnmTexPattern* btp, J3DModelData* modelData, f32 rate, int attr) {
- return mBtpAnm.init(modelData, btp, 1, attr, rate, 0, -1);
+int daNpcT_c::setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_speed, int i_mode) {
+ return mBtpAnm.init(i_modelData, i_btp, TRUE, i_mode, i_speed, 0, -1);
}
/* 80148338-80148378 142C78 0040+00 1/1 0/0 6/6 .text
* setBtkAnm__8daNpcT_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi */
-int daNpcT_c::setBtkAnm(J3DAnmTextureSRTKey* btk, J3DModelData* modelData, f32 rate, int attr) {
- return mBtkAnm.init(modelData, btk, 1, attr, rate, 0, -1);
+int daNpcT_c::setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_speed, int i_mode) {
+ return mBtkAnm.init(i_modelData, i_btk, TRUE, i_mode, i_speed, 0, -1);
}
/* 80148378-801483B8 142CB8 0040+00 0/0 0/0 9/9 .text
* setBrkAnm__8daNpcT_cFP15J3DAnmTevRegKeyP12J3DModelDatafi */
-int daNpcT_c::setBrkAnm(J3DAnmTevRegKey* brk, J3DModelData* modelData, f32 rate, int attr) {
- return mBrkAnm.init(modelData, brk, 1, attr, rate, 0, -1);
+int daNpcT_c::setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 i_speed, int i_mode) {
+ return mBrkAnm.init(i_modelData, i_brk, TRUE, i_mode, i_speed, 0, -1);
}
/* 801483B8-801483F8 142CF8 0040+00 0/0 0/0 2/2 .text
* setBpkAnm__8daNpcT_cFP11J3DAnmColorP12J3DModelDatafi */
-int daNpcT_c::setBpkAnm(J3DAnmColor* bpk, J3DModelData* modelData, f32 rate, int attr) {
- return mBpkAnm.init(modelData, bpk, 1, attr, rate, 0, -1);
+int daNpcT_c::setBpkAnm(J3DAnmColor* i_bpk, J3DModelData* i_modelData, f32 i_speed, int i_mode) {
+ return mBpkAnm.init(i_modelData, i_bpk, TRUE, i_mode, i_speed, 0, -1);
}
/* 801483F8-801484AC 142D38 00B4+00 0/0 0/0 58/58 .text loadRes__8daNpcT_cFPCScPPCc */
-int daNpcT_c::loadRes(s8 const* resNoList, char const** resNameList) {
+int daNpcT_c::loadRes(s8 const* i_resNoList, char const** i_resNameList) {
for (int resLoad_cnt = 0, i = 0; i < 10; i++) {
- if (resNoList[i] == -1) {
+ if (i_resNoList[i] == -1) {
if (i != resLoad_cnt) {
break;
}
return cPhs_COMPLEATE_e;
}
- int phase_state = dComIfG_resLoad(&mPhase[i], resNameList[resNoList[i]]);
+ int phase_state = dComIfG_resLoad(&mPhase[i], i_resNameList[i_resNoList[i]]);
if (phase_state == cPhs_COMPLEATE_e) {
resLoad_cnt++;
}
@@ -1113,26 +1252,28 @@ int daNpcT_c::loadRes(s8 const* resNoList, char const** resNameList) {
}
/* 801484AC-8014852C 142DEC 0080+00 0/0 0/0 58/58 .text deleteRes__8daNpcT_cFPCScPPCc */
-void daNpcT_c::deleteRes(s8 const* resNoList, char const** resNameList) {
- for (int i = 0; i < 10 && resNoList[i] != -1; i++) {
- dComIfG_resDelete(&mPhase[i], resNameList[resNoList[i]]);
+void daNpcT_c::deleteRes(s8 const* i_resNoList, char const** i_resNameList) {
+ for (int i = 0; i < 10 && i_resNoList[i] != -1; i++) {
+ dComIfG_resDelete(&mPhase[i], i_resNameList[i_resNoList[i]]);
}
}
/* 8014852C-8014886C 142E6C 0340+00 0/0 0/0 59/59 .text execute__8daNpcT_cFv */
int daNpcT_c::execute() {
setParam();
+
if (!evtProc()) {
action();
}
beforeMove();
fopAcM_posMoveF(this, mCcStts.GetCCMoveP());
+
mAcch.CrrPos(dComIfG_Bgsp());
mGndChk = mAcch.m_gnd;
mGroundAngle = fopAcM_getPolygonAngle(mGndChk, current.angle.y);
mGroundH = mAcch.GetGroundH();
- if (mGroundH != -1.0e9f) {
+ if (mGroundH != -1000000000.0f) {
mPolSound = dKy_pol_sound_get(&mAcch.m_gnd);
mReverb = dComIfGp_getReverb(mCcStts.GetRoomId());
@@ -1142,7 +1283,8 @@ int daNpcT_c::execute() {
}
afterMoved();
- if (mGroundH != -1.0e9f) {
+
+ if (mGroundH != -1000000000.0f) {
setEnvTevColor();
setRoomNo();
}
@@ -1161,12 +1303,14 @@ int daNpcT_c::execute() {
ctrlSubFaceMotion(0);
ctrlMotion();
setAttnPos();
+
cLib_chaseF(&field_0xdfc, 0.0f, 1.0f);
+
twilight();
setCollision();
if (!field_0xe2c) {
- if ((field_0xe33 && dComIfGp_getEvent().isOrderOK()) || dComIfGp_event_runCheck() == 0) {
+ if ((field_0xe33 && dComIfGp_getEvent().isOrderOK()) || dComIfGp_event_runCheck() == FALSE) {
evtOrder();
}
}
@@ -1231,7 +1375,7 @@ int daNpcT_c::draw(BOOL param_0, BOOL i_setEffMtx, f32 param_2, GXColorS10* i_co
if (i_drawGhost) {
drawGhost();
- } else if (mTwilight != 0) {
+ } else if (mTwilight) {
g_env_light.settingTevStruct(4, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(model, &tevStr);
dComIfGd_setListDark();
@@ -1259,8 +1403,8 @@ int daNpcT_c::draw(BOOL param_0, BOOL i_setEffMtx, f32 param_2, GXColorS10* i_co
mBpkAnm.remove(modelData);
}
- if (i_noShadow == 0) {
- if (i_simpleShadow == 0) {
+ if (!i_noShadow) {
+ if (!i_simpleShadow) {
mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, &current.pos, param_2, param_4,
current.pos.y, mGroundH, mGndChk, &tevStr, 0,
1.0f, dDlst_shadowControl_c::getSimpleTex());
@@ -1274,7 +1418,6 @@ int daNpcT_c::draw(BOOL param_0, BOOL i_setEffMtx, f32 param_2, GXColorS10* i_co
return 1;
}
-
/* 80148C70-80148CCC 1435B0 005C+00 1/1 0/0 58/58 .text setEnvTevColor__8daNpcT_cFv */
void daNpcT_c::setEnvTevColor() {
tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mGndChk);
@@ -1292,37 +1435,34 @@ void daNpcT_c::setRoomNo() {
/* 80148D10-80148DD0 143650 00C0+00 1/1 0/0 0/0 .text checkEndAnm__8daNpcT_cFf */
int daNpcT_c::checkEndAnm(f32 i_speed) {
switch (mpMorf[0]->getPlayMode()) {
- case 2:
+ case J3DFrameCtrl::EMode_LOOP:
return mpMorf[0]->isLoop();
- case 0:
- case 1:
- return mpMorf[0]->isStop() && cM3d_IsZero(mpMorf[0]->getPlaySpeed()) &&
- !cM3d_IsZero(i_speed);
- case 3:
- case 4:
+ case J3DFrameCtrl::EMode_NONE:
+ case J3DFrameCtrl::EMode_RESET:
+ return mpMorf[0]->isStop() && cM3d_IsZero(mpMorf[0]->getPlaySpeed()) && !cM3d_IsZero(i_speed);
+ case J3DFrameCtrl::EMode_REVERSE:
+ case J3DFrameCtrl::EMode_LOOP_REVERSE:
break;
}
return 0;
}
-
/* 80148DD0-80148E4C 143710 007C+00 1/1 0/0 0/0 .text checkEndAnm__8daNpcT_cFP12J3DFrameCtrlf */
int daNpcT_c::checkEndAnm(J3DFrameCtrl* i_anm, f32 i_speed) {
switch (i_anm->getAttribute()) {
- case 2:
+ case J3DFrameCtrl::EMode_LOOP:
return i_anm->checkState(2);
- case 0:
- case 1:
+ case J3DFrameCtrl::EMode_NONE:
+ case J3DFrameCtrl::EMode_RESET:
return (i_anm->checkState(1) && i_anm->getRate() == 0.0f) && i_speed != 0.0f;
- case 3:
+ case J3DFrameCtrl::EMode_REVERSE:
break;
}
return 0;
}
-
/* 80148E4C-801490D4 14378C 0288+00 1/1 0/0 0/0 .text playAllAnm__8daNpcT_cFv */
void daNpcT_c::playAllAnm() {
if (!(mAnmFlags & ANM_FLAG_4000)) {
@@ -1429,17 +1569,18 @@ void daNpcT_c::playAllAnm() {
| ANM_PAUSE_BTP | ANM_FLAG_4000);
}
-
/* 801490D4-80149190 143A14 00BC+00 1/0 1/0 55/0 .text ctrlBtk__8daNpcT_cFv */
BOOL daNpcT_c::ctrlBtk() {
if (mpMatAnm[0] != NULL) {
if (field_0xe29 != 0 && mBtkAnm.getBtkAnm() != NULL) {
mpMatAnm[0]->setNowOffsetX(field_0xde4 * cM_ssin(mJntAnm.getEyeAngleY()));
mpMatAnm[0]->setNowOffsetY(field_0xde0 * cM_ssin(mJntAnm.getEyeAngleX()));
+
if (field_0xe2a != 0) {
mpMatAnm[0]->setMorfFrm(field_0xe2a);
field_0xe2a = 0;
}
+
mpMatAnm[0]->onEyeMoveFlg();
return TRUE;
}
@@ -1448,6 +1589,7 @@ BOOL daNpcT_c::ctrlBtk() {
mpMatAnm[0]->setMorfFrm(field_0xe2a);
field_0xe2a = 0;
}
+
mpMatAnm[0]->offEyeMoveFlg();
}
@@ -1467,7 +1609,7 @@ void daNpcT_c::setMtx() {
model->setUserArea((u32)this);
mpMorf[0]->onMorfNone();
- if (cM3d_IsZero(field_0xdfc) != 0) {
+ if (cM3d_IsZero(field_0xdfc) != FALSE) {
mpMorf[0]->offMorfNone();
}
@@ -1480,13 +1622,13 @@ void daNpcT_c::setMtx() {
/* 8014924C-80149300 143B8C 00B4+00 1/1 0/0 0/0 .text ctrlFaceMotion__8daNpcT_cFv */
void daNpcT_c::ctrlFaceMotion() {
- int anmIdx;
- f32 morf;
+ int motionNo;
+ f32 morfFrm;
- if (mFaceMotionSeqMngr.play(mBckLoops, &anmIdx, &morf)) {
- setFaceMotionAnm(anmIdx, true);
+ if (mFaceMotionSeqMngr.play(mBckLoops, &motionNo, &morfFrm)) {
+ setFaceMotionAnm(motionNo, true);
- if (morf < 0.0f) {
+ if (morfFrm < 0.0f) {
mpMorf[0]->setMorf(field_0xa80);
field_0xdfc = field_0xa80;
@@ -1494,11 +1636,11 @@ void daNpcT_c::ctrlFaceMotion() {
mpMorf[1]->setMorf(field_0xa80);
}
} else {
- mpMorf[0]->setMorf(morf);
- field_0xdfc = morf;
+ mpMorf[0]->setMorf(morfFrm);
+ field_0xdfc = morfFrm;
if (mpMorf[1]) {
- mpMorf[1]->setMorf(morf);
+ mpMorf[1]->setMorf(morfFrm);
}
}
}
@@ -1506,18 +1648,18 @@ void daNpcT_c::ctrlFaceMotion() {
/* 80149300-801493B8 143C40 00B8+00 1/1 0/0 0/0 .text ctrlMotion__8daNpcT_cFv */
void daNpcT_c::ctrlMotion() {
- int anmIdx;
+ int motionNo;
BOOL restart;
- f32 morf;
+ f32 morfFrm;
- if (mMotionSeqMngr.play(mMorfLoops, &anmIdx, &morf)) {
+ if (mMotionSeqMngr.play(mMorfLoops, &motionNo, &morfFrm)) {
restart = FALSE;
- if (morf < -1.0f) {
+ if (morfFrm < -1.0f) {
restart = TRUE;
}
- setMotionAnm(anmIdx, morf < 0.0f ? mMorfFrames : morf, restart);
+ setMotionAnm(motionNo, morfFrm < 0.0f ? mMorfFrames : morfFrm, restart);
field_0xdfc = 0.0f;
@@ -1534,25 +1676,22 @@ void daNpcT_c::ctrlMotion() {
}
/* 801493B8-8014951C 143CF8 0164+00 1/1 0/0 2/2 .text ctrlMsgAnm__8daNpcT_cFPiPiP10fopAc_ac_ci */
-int daNpcT_c::ctrlMsgAnm(int* param_0, int* param_1, fopAc_ac_c* param_2, int param_3) {
- *param_0 = -1;
- *param_1 = -1;
+int daNpcT_c::ctrlMsgAnm(int* o_faceAnmAttr_p, int* o_anmAttr_p, fopAc_ac_c* i_talkPartner_p, int param_3) {
+ *o_faceAnmAttr_p = -1;
+ *o_anmAttr_p = -1;
if (param_3 != 0 || eventInfo.checkCommandTalk() || mStaffId != -1) {
- fopAc_ac_c* talk_partner = dComIfGp_event_getTalkPartner();
- dMsgObject_c* talk_partner_conv = (dMsgObject_c*)talk_partner;
-
- if (talk_partner == param_2) {
- msg_class* conv_actor = talk_partner_conv->getActor();
- u16 actor_command = conv_actor->mode;
-
- if (actor_command == 2 || actor_command == 3) {
- mMsgId = -1;
- } else if (actor_command == 6) {
- if (conv_actor->msg_idx != mMsgId) {
- *param_0 = dComIfGp_getMesgFaceAnimeAttrInfo();
- *param_1 = dComIfGp_getMesgAnimeAttrInfo();
- mMsgId = conv_actor->msg_idx;
+ if (dComIfGp_event_getTalkPartner() == i_talkPartner_p) {
+ msg_class* msg_p = dMsgObject_c::getActor();
+ JUT_ASSERT(3147, 0 != msg_p);
+
+ if (msg_p->mode == 2 || msg_p->mode == 3) {
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
+ } else if (msg_p->mode == 6) {
+ if (msg_p->msg_idx != mMsgId) {
+ *o_faceAnmAttr_p = dComIfGp_getMesgFaceAnimeAttrInfo();
+ *o_anmAttr_p = dComIfGp_getMesgAnimeAttrInfo();
+ mMsgId = msg_p->msg_idx;
}
if (dMsgObject_c::isMouthCheck()) {
@@ -1566,10 +1705,10 @@ int daNpcT_c::ctrlMsgAnm(int* param_0, int* param_1, fopAc_ac_c* param_2, int pa
if (mAnmFlags & ANM_FLAG_4000) {
mAnmFlags &= ~ANM_FLAG_4000;
}
- mMsgId = -1;
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
}
} else {
- mMsgId = -1;
+ mMsgId = fpcM_ERROR_PROCESS_ID_e;
if (field_0xdb4) {
field_0xdb4 = 1;
}
@@ -1591,8 +1730,7 @@ int daNpcT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
csXyz angle;
mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no));
- if (joint_no == getBackboneJointNo() || joint_no == getNeckJointNo()
- || joint_no == getHeadJointNo()) {
+ if (joint_no == getBackboneJointNo() || joint_no == getNeckJointNo() || joint_no == getHeadJointNo()) {
Mtx joint_mtx;
MTXCopy(mDoMtx_stack_c::get(), joint_mtx);
pos.set(joint_mtx[0][3], joint_mtx[1][3], joint_mtx[2][3]);
@@ -1656,7 +1794,7 @@ int daNpcT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
BOOL daNpcT_c::evtProc() {
BOOL ret = FALSE;
- if (dComIfGp_event_runCheck() != FALSE) {
+ if (dComIfGp_event_runCheck() != 0) {
if (eventInfo.checkCommandTalk()) {
if (!checkChangeEvt()) {
evtTalk();
@@ -1670,10 +1808,10 @@ BOOL daNpcT_c::evtProc() {
}
} else {
if (!strcmp(dComIfGp_getEventManager().getRunEventName(), "DEFAULT_GETITEM")
- && mItemId != fpcM_ERROR_PROCESS_ID_e) {
+ && mItemPartnerId != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setTalkPartner(NULL);
- dComIfGp_event_setItemPartnerId(mItemId);
- mItemId = fpcM_ERROR_PROCESS_ID_e;
+ dComIfGp_event_setItemPartnerId(mItemPartnerId);
+ mItemPartnerId = fpcM_ERROR_PROCESS_ID_e;
}
ret = evtCutProc();
}
@@ -1689,12 +1827,12 @@ BOOL daNpcT_c::evtProc() {
setAfterTalkMotion();
}
field_0xe26 = true;
-
} else {
if (mStaffId != -1) {
mMode = MODE_INIT;
mStaffId = -1;
}
+
field_0xdb4 = 0;
field_0xe26 = true;
}
@@ -1770,16 +1908,17 @@ void daNpcT_c::setFootPrtcl(cXyz* param_0, f32 param_1, f32 param_2) {
switch (foot_l_att) {
case 3:
break;
- case 0xd:
+ case 13:
dkWmark_c::setFootMark(&foot_l_pos, mCurAngle.y, 3);
break;
}
}
+
if (mFootROnGround == 0 && cross2 == 1) {
switch (foot_r_att) {
case 3:
break;
- case 0xd:
+ case 13:
dkWmark_c::setFootMark(&foot_r_pos, mCurAngle.y, 3);
break;
}
@@ -1811,11 +1950,10 @@ void daNpcT_c::evtOrder() {
eventInfo.setArchiveName(mpArcNames[mpEvtData[mEvtNo].num]);
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
}
- mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEvtData[mEvtNo].eventName, 0xff);
- fopAcM_orderOtherEventId(this, mEvtId, 0xff, 0xffff, 40, 1);
- } else if ((!mTwilight || daPy_py_c::checkNowWolfEyeUp())
- && ((attention_info.flags & 8) || (attention_info.flags & 2)))
- {
+
+ mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEvtData[mEvtNo].eventName, 0xFF);
+ fopAcM_orderOtherEventId(this, mEvtId, 0xFF, 0xFFFF, 40, 1);
+ } else if ((!mTwilight || daPy_py_c::checkNowWolfEyeUp()) && ((attention_info.flags & 8) || (attention_info.flags & 2))) {
eventInfo.onCondition(dEvtCnd_CANTALK_e);
if (chkXYItems()) {
eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
@@ -1833,9 +1971,10 @@ void daNpcT_c::evtChange() {
eventInfo.setArchiveName(mpArcNames[mpEvtData[mEvtNo].num]);
dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
}
- mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEvtData[mEvtNo].eventName, 0xff);
+
+ mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEvtData[mEvtNo].eventName, 0xFF);
dComIfGp_getEvent().reset(this);
- fopAcM_orderChangeEventId(this, mEvtId, 1, 0xffff);
+ fopAcM_orderChangeEventId(this, mEvtId, 1, 0xFFFF);
}
}
@@ -1972,7 +2111,9 @@ bool daNpcT_c::setMotionAnm(int i_idx, f32 i_morf, BOOL i_restart) {
void daNpcT_c::setPos(cXyz i_pos) {
i_pos.y += 300.0f;
mGndChk.SetPos(&i_pos);
+
i_pos.y = dComIfG_Bgsp().GroundCross(&mGndChk);
+ JUT_ASSERT(3922, -(1000000000.0f) != i_pos.y)
current.pos = i_pos;
old.pos = current.pos;
@@ -1998,18 +2139,16 @@ void daNpcT_c::setAngle(s16 i_angle) {
/* 8014AA40-8014AAD0 145380 0090+00 0/0 0/0 33/33 .text hitChk__8daNpcT_cFP12dCcD_GObjInfUl */
fopAc_ac_c* daNpcT_c::hitChk(dCcD_GObjInf* i_objInf, u32 param_1) {
- dCcD_Stts* stts = (dCcD_Stts*)i_objInf->GetStts();
- stts->Move();
+ ((dCcD_Stts*)i_objInf->GetStts())->Move();
if (mDamageTimer == 0) {
- fopAc_ac_c* hitAc = i_objInf->GetTgHitAc();
-
- if (hitAc != NULL) {
- if (fopAcM_GetName(hitAc) == PROC_NPC_TK && param_1 & 1) {
- ((daNPC_TK_c*)hitAc)->setBump();
- return hitAc;
+ fopAc_ac_c* hit_actor_p = i_objInf->GetTgHitAc();
+ if (hit_actor_p != NULL) {
+ if (fopAcM_GetName(hit_actor_p) == PROC_NPC_TK && (param_1 & 1)) {
+ ((daNPC_TK_c*)hit_actor_p)->setBump();
+ return hit_actor_p;
}
- return hitAc;
+ return hit_actor_p;
}
}
@@ -2019,12 +2158,14 @@ fopAc_ac_c* daNpcT_c::hitChk(dCcD_GObjInf* i_objInf, u32 param_1) {
/* 8014AAD0-8014ABD0 145410 0100+00 0/0 0/0 27/27 .text setDamage__8daNpcT_cFiii */
void daNpcT_c::setDamage(int param_0, int i_faceMotion, int i_motion) {
mDamageTimerStart = 8;
- if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT || mCutType == daPy_py_c::CUT_TYPE_TURN_LEFT
- || mCutType == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT
- || mCutType == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT)
+ if (mCutType == daPy_py_c::CUT_TYPE_TURN_RIGHT ||
+ mCutType == daPy_py_c::CUT_TYPE_TURN_LEFT ||
+ mCutType == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT ||
+ mCutType == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT)
{
mDamageTimerStart = 20;
}
+
mDamageTimer = mDamageTimerStart;
if (i_faceMotion > -1) {
@@ -2073,6 +2214,7 @@ BOOL daNpcT_c::chkPointInArea(cXyz i_pos, cXyz i_center, f32 i_boundXZ, f32 i_bo
max_y = i_boundY2;
}
f32 range_y = fabsf(max_y - min_y);
+
bounds.set(i_boundXZ, range_y, i_boundXZ);
center = i_center;
center.y += min_y;
@@ -2123,18 +2265,10 @@ BOOL daNpcT_c::chkFindActor(fopAc_ac_c* i_actor, BOOL i_release, s16 i_angleY) {
}
/* 8014B024-8014B0C8 145964 00A4+00 1/1 0/0 0/0 .text chkWolfAction__8daNpcT_cFv */
-// NONMATCHING regswap
BOOL daNpcT_c::chkWolfAction() {
if (daPy_py_c::checkNowWolf()) {
- bool ret = false;
- if (!daPy_getPlayerActorClass()->checkWolfWait()
- && !dComIfGp_checkPlayerStatus0(0, 0x8000000)
- && !daPy_getPlayerActorClass()->checkWolfRSit())
- {
- ret = true;
- }
-
- return ret;
+ return (!daPy_getPlayerActorClass()->checkWolfWait() && !dComIfGp_checkPlayerStatus0(0, 0x8000000)) &&
+ !daPy_getPlayerActorClass()->checkWolfRSit();
}
return FALSE;
@@ -2184,6 +2318,7 @@ BOOL daNpcT_c::srchPlayerActor() {
mPlayerActorMngr.entry(daPy_getPlayerActorClass());
}
}
+
return mPlayerActorMngr.getActorP() != NULL;
}
@@ -2198,6 +2333,7 @@ cXyz daNpcT_c::getAttnPos(fopAc_ac_c* i_actor) {
attn_pos.y = i_actor->attention_info.position.y;
}
}
+
return attn_pos;
}
@@ -2259,7 +2395,6 @@ BOOL daNpcT_c::step(s16 i_angle, int i_faceMotion, int i_motion, int i_turnCount
shape_angle.y = current.angle.y;
mStepMode++;
}
-
} else if (mStepMode == 1) {
if (turn(mTargetAngle, i_turnCount, i_turnDirection)) {
current.angle.y = mCurAngle.y;
@@ -2323,9 +2458,10 @@ int daNpcT_c::getActorDistance(fopAc_ac_c* i_actor, int i_distIndex1, int i_dist
}
/* 8014BBF0-8014BC78 146530 0088+00 0/0 1/1 180/180 .text initTalk__8daNpcT_cFiPP10fopAc_ac_c */
-BOOL daNpcT_c::initTalk(int i_flowID, fopAc_ac_c** param_1) {
- mFlow.init(this, i_flowID, 0, param_1);
+BOOL daNpcT_c::initTalk(int i_flowID, fopAc_ac_c** i_partnerList_p) {
+ mFlow.init(this, i_flowID, 0, i_partnerList_p);
mPlayerAngle = fopAcM_searchPlayerAngleY(this);
+
if (checkStep()) {
mStepMode = 0;
}
@@ -2337,14 +2473,14 @@ BOOL daNpcT_c::initTalk(int i_flowID, fopAc_ac_c** param_1) {
/* 8014BC78-8014BE2C 1465B8 01B4+00 0/0 0/0 169/169 .text talkProc__8daNpcT_cFPiiPP10fopAc_ac_ci
*/
-BOOL daNpcT_c::talkProc(int* param_0, BOOL param_1, fopAc_ac_c** param_2, BOOL param_3) {
+BOOL daNpcT_c::talkProc(int* param_0, BOOL param_1, fopAc_ac_c** i_partnerList_p, BOOL param_3) {
BOOL ret = FALSE;
if (dMsgObject_isMsgSendControl()) {
if (param_1) {
dMsgObject_offMsgSendControl();
}
- } else if (mFlow.doFlow(this, param_2, 0)) {
+ } else if (mFlow.doFlow(this, i_partnerList_p, 0)) {
ret = TRUE;
} else {
if (mFlow.getMsg() != NULL) {
@@ -2383,12 +2519,14 @@ BOOL daNpcT_c::talkProc(int* param_0, BOOL param_1, fopAc_ac_c** param_2, BOOL p
}
/* 8014BE2C-8014BEE4 14676C 00B8+00 0/0 0/0 25/25 .text getNearestActorP__8daNpcT_cFs */
-fopAc_ac_c* daNpcT_c::getNearestActorP(s16 i_procName) {
+fopAc_ac_c* daNpcT_c::getNearestActorP(s16 i_srchActorName) {
fopAc_ac_c* actor = NULL;
f32 minDistance = 1000000000.0f;
+
mFindCount = 0;
- mSrchName = i_procName;
+ mSrchName = i_srchActorName;
fpcM_Search(srchActor, this);
+
for (s32 i = 0; i < mFindCount; i++) {
f32 dist = fopAcM_searchActorDistance(this, mFindActorPtrs[i]);
if (dist < minDistance) {
@@ -2396,20 +2534,21 @@ fopAc_ac_c* daNpcT_c::getNearestActorP(s16 i_procName) {
actor = mFindActorPtrs[i];
}
}
+
return actor;
}
-
/* 8014BEE4-8014BFB0 146824 00CC+00 0/0 0/0 12/12 .text getEvtAreaTagP__8daNpcT_cFii */
-// NONMATCHING regswap
fopAc_ac_c* daNpcT_c::getEvtAreaTagP(int i_type, int i_no) {
+ int var_r29 = 0;
+ f32 var_f31 = 1000000000.0f;
+
mFindCount = 0;
mSrchName = PROC_TAG_EVTAREA;
fpcM_Search(srchActor, this);
for (int i = 0; i < mFindCount; i++) {
- daTag_EvtArea_c* evt_area = static_cast<daTag_EvtArea_c*>(mFindActorPtrs[i]);
- if (evt_area->getType() == i_type && evt_area->getNo() == i_no) {
+ if (((daTag_EvtArea_c*)(mFindActorPtrs[i]))->getType() == i_type && ((daTag_EvtArea_c*)(mFindActorPtrs[i]))->getNo() == i_no) {
return mFindActorPtrs[i];
}
}
@@ -2424,7 +2563,7 @@ fopAc_ac_c* daNpcT_c::getShopItemTagP() {
fpcM_Search(srchActor, this);
for (s32 i = 0; i < mFindCount; i++) {
- if ((fopAcM_GetParam(mFindActorPtrs[i]) & 0xf0000000) == 0xf0000000) {
+ if ((fopAcM_GetParam(mFindActorPtrs[i]) & 0xF0000000) == 0xF0000000) {
return mFindActorPtrs[i];
}
}
@@ -2434,8 +2573,6 @@ fopAc_ac_c* daNpcT_c::getShopItemTagP() {
/* 8014C030-8014C200 146970 01D0+00 1/1 0/0 0/0 .text setHitodamaPrtcl__8daNpcT_cFv */
void daNpcT_c::setHitodamaPrtcl() {
- static const u16 id[2] = {0x8497, 0x8498};
-
cXyz pos;
field_0xe18 = (u16)(field_0xe1a * 2);
field_0xe00.x = cM_ssin(field_0xe1a) * 8.0f;
@@ -2443,16 +2580,19 @@ void daNpcT_c::setHitodamaPrtcl() {
field_0xe00.z = field_0xe00.x * -cM_ssin(shape_angle.y);
field_0xe00.x = field_0xe00.x * cM_scos(shape_angle.y);
field_0xe1a += 0x400;
+
pos.x = eyePos.x + field_0xe00.x + field_0xe0c.x;
pos.y = eyePos.y + field_0xe00.y + field_0xe0c.y;
pos.z = eyePos.z + field_0xe00.z + field_0xe0c.z;
for (int i = 0; i < 2; i++) {
+ static const u16 id[2] = {0x8497, 0x8498};
mHitodamaPrtclKey[i] = dComIfGp_particle_set(mHitodamaPrtclKey[i], id[i], &pos,
&mCurAngle, NULL);
+
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHitodamaPrtclKey[i]);
if (emitter != NULL) {
- u8 alpha = dComIfGs_wolfeye_effect_check() == FALSE ? 0xff : 0;
+ u8 alpha = dComIfGs_wolfeye_effect_check() == FALSE ? 0xFF : 0;
emitter->setGlobalTranslation(pos.x, pos.y, pos.z);
emitter->setGlobalAlpha(alpha);
}
@@ -2478,11 +2618,12 @@ bool daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32
mDoMtx_stack_c::copy(fopAcM_GetMtx(i_ActorP));
mDoMtx_stack_c::transM(0.0f, param_7, 0.0f);
- cMtx_multVecArray((MtxP)&mDoMtx_stack_c::now, pos_array, pos_array, 8);
+ cMtx_multVecArray(mDoMtx_stack_c::get(), pos_array, pos_array, 8);
if (param_8) {
return false;
}
+
for (int i = 0; i < 8; i++) {
mDoLib_project(&pos_array[i], &proj);
if (0.0f < proj.x && proj.x < 608.0f && 0.0f < proj.y && proj.y < 448.0f) {
@@ -2497,7 +2638,6 @@ bool daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32
return false;
}
-
/* 8014C384-8014C500 146CC4 017C+00 1/1 0/0 3/3 .text daNpcT_chkPointInArea__F4cXyz4cXyz4cXyzsi */
BOOL daNpcT_chkPointInArea(cXyz i_pos, cXyz i_center, cXyz i_bounds, s16 i_angle,
BOOL i_checkHeight) {
@@ -2536,42 +2676,47 @@ BOOL daNpcT_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz* o_spawn
BOOL ret = FALSE;
dStage_roomDt_c* room_dt = dComIfGp_roomControl_getStatusRoomDt(i_roomNo);
stage_actor_data_class* entry = room_dt->getPlayer()->m_entries;
+
for (int i = 0; i < room_dt->getPlayerNum(); entry++, i++) {
- if (param_0 == (entry->base.angle.z & 0xff)) {
+ if (param_0 == (entry->base.angle.z & 0xFF)) {
*o_spawnPos = entry->base.position;
*o_angle = entry->base.angle;
ret = TRUE;
break;
}
}
+
return ret;
}
/* 8014C5E0-8014C700 146F20 0120+00 0/0 0/0 5/5 .text daNpcT_chkDoBtnIsSpeak__FP10fopAc_ac_c */
-BOOL daNpcT_chkDoBtnIsSpeak(fopAc_ac_c* i_ActorP) {
- BOOL ret = 0;
+BOOL daNpcT_chkDoBtnIsSpeak(fopAc_ac_c* i_actor_p) {
+ BOOL ret = FALSE;
+
+ if (dComIfGp_getDoStatus() == 28) {
+ if (daPy_getPlayerActorClass()->checkPriActorOwn(i_actor_p)) {
+ JUT_ASSERT(4965, 0 != dComIfGp_getAttention());
- if (dComIfGp_getDoStatus() == 0x1c) {
- if (daPy_getPlayerActorClass()->checkPriActorOwn(i_ActorP)) {
for (int i = 0; i < dComIfGp_getAttention().GetActionCount(); i++) {
- if (dComIfGp_getAttention().ActionTarget(i) == i_ActorP &&
- dComIfGp_getAttention().getActionBtnB() &&
+ if (dComIfGp_getAttention().ActionTarget(i) == i_actor_p &&
+ dComIfGp_getAttention().getActionBtnB() != NULL &&
dComIfGp_getAttention().getActionBtnB()->mType == 3)
{
- ret = 1;
- };
+ ret = TRUE;
+ }
}
for (int i = 0; i < dComIfGp_getAttention().GetLockonCount(); i++) {
- if (dComIfGp_getAttention().LockonTarget(i) == i_ActorP &&
- dComIfGp_getAttention().getActionBtnB() &&
+ if (dComIfGp_getAttention().LockonTarget(i) == i_actor_p &&
+ dComIfGp_getAttention().getActionBtnB() != NULL &&
dComIfGp_getAttention().getActionBtnB()->mType == 1)
{
- ret = 1;
- };
+ ret = TRUE;
+ }
}
}
}
+
return ret;
}
@@ -2584,25 +2729,30 @@ int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pn
proj.setall(0.0f);
int prev_idx = 0;
int next_idx = 0;
+
u16 idx = i_pntData[i].field_0x0;
if (i_pntData[i].field_0x0 < 0) {
idx = i_path->m_num;
}
+
while (idx < i_path->m_num) {
- if (!daNpcT_chkPassed(param_1[i]->current.pos, (dPnt*)i_path->m_points, idx,
- i_path->m_num, i_path->m_closed & 1, 0,
+ if (!daNpcT_chkPassed(param_1[i]->current.pos, i_path->m_points, idx,
+ i_path->m_num, dPath_ChkClose(i_path), 0,
&proj, &prev_idx, &next_idx)) {
break;
}
- if (daNpcT_incIdx(i_path->m_num, idx, i_path->m_closed & 1, 0)) {
+
+ if (daNpcT_incIdx(i_path->m_num, idx, dPath_ChkClose(i_path), 0)) {
idx = i_path->m_num;
}
}
+
if (idx != i_path->m_num) {
i_pntData[i].field_0x0 = idx;
} else {
i_pntData[i].field_0x0 = -1;
}
+
i_pntData[i].field_0x4 = prev_idx;
}
@@ -2614,6 +2764,7 @@ int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pn
if (i == j) {
continue;
}
+
if (i_pntData[j].field_0x0 < 0) {
count++;
} else if (i_pntData[i].field_0x0 == i_pntData[j].field_0x0) {
@@ -2646,6 +2797,7 @@ int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pn
count++;
}
}
+
param_4[i] = count;
}
}
@@ -2660,33 +2812,33 @@ u8 daNpcT_getDistTableIdx(int param_0, int param_1) {
}
/* 8014CA2C-8014CA6C 14736C 0040+00 0/0 0/0 25/25 .text daNpcT_onEvtBit__FUl */
-void daNpcT_onEvtBit(u32 i_idx) {
- dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[i_idx]);
+void daNpcT_onEvtBit(u32 i_no) {
+ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[i_no]);
}
/* 8014CA6C-8014CAAC 1473AC 0040+00 0/0 0/0 1/1 .text daNpcT_offEvtBit__FUl */
-void daNpcT_offEvtBit(u32 i_idx) {
- dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[i_idx]);
+void daNpcT_offEvtBit(u32 i_no) {
+ dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[i_no]);
}
/* 8014CAAC-8014CAEC 1473EC 0040+00 0/0 0/0 155/155 .text daNpcT_chkEvtBit__FUl */
-BOOL daNpcT_chkEvtBit(u32 i_idx) {
- return dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[i_idx]);
+BOOL daNpcT_chkEvtBit(u32 i_no) {
+ return dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[i_no]);
}
/* 8014CAEC-8014CB2C 14742C 0040+00 0/0 0/0 26/26 .text daNpcT_onTmpBit__FUl */
-void daNpcT_onTmpBit(u32 i_idx) {
- dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_idx]);
+void daNpcT_onTmpBit(u32 i_no) {
+ dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]);
}
/* 8014CB2C-8014CB6C 14746C 0040+00 0/0 0/0 78/78 .text daNpcT_offTmpBit__FUl */
-void daNpcT_offTmpBit(u32 i_idx) {
- dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_idx]);
+void daNpcT_offTmpBit(u32 i_no) {
+ dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]);
}
/* 8014CB6C-8014CBAC 1474AC 0040+00 0/0 0/0 38/38 .text daNpcT_chkTmpBit__FUl */
-BOOL daNpcT_chkTmpBit(u32 i_idx) {
- return dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_idx]);
+BOOL daNpcT_chkTmpBit(u32 i_no) {
+ return dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]);
}
/* 80392680-803926B0 01ECE0 0030+00 1/1 0/0 4/4 .rodata mCcDObjData__8daNpcT_c */
@@ -2697,2838 +2849,8 @@ const dCcD_SrcGObjInf daNpcT_c::mCcDObjData = {
{0},
};
-/**
- * From here to `__dt__18daBaseNpc_acMngr_cFv` is supposed to be d_a_npc2.cpp
- * according to the debug rom OSPanic reports
- */
-
-/* 8014D538-8014D584 147E78 004C+00 2/2 0/0 0/0 .text daBaseNpc_addIdx__FiiPUsi */
-static int daBaseNpc_addIdx(int param_0, int param_1, u16* param_2, int param_3) {
- int tmp = *param_2;
- int ret;
-
- ret = 0;
- tmp += param_0;
-
- if (param_1 <= tmp) {
- if (param_3 != 0) {
- tmp -= param_1 * (tmp / param_1);
- } else {
- tmp = param_1 != 0 ? param_1 - 1 : 0;
- ret = 1;
- }
- }
-
- *param_2 = (u16)tmp;
- return ret;
-}
-
-/* 8014D584-8014D5C4 147EC4 0040+00 2/2 0/0 0/0 .text daBaseNpc_subIdx__FiiPUsi */
-static int daBaseNpc_subIdx(int param_0, int param_1, u16* param_2, int param_3) {
- int tmp = *param_2;
- int ret;
-
- ret = 0;
- tmp -= param_0;
-
- if (tmp <= 0) {
- if (param_3 != 0) {
- tmp += param_1 * (tmp / param_1 + 1);
- } else {
- tmp = 0;
- ret = 1;
- }
- }
-
- *param_2 = (u16)tmp;
- return ret;
-}
-
-/* 8014D5C4-8014D620 147F04 005C+00 2/2 0/0 0/0 .text daBaseNpc_incIdx__FiPUsii */
-static void daBaseNpc_incIdx(int i_pathNo, u16* i_pathIdx, int i_pathClosed, int i_pathDirection) {
- if (i_pathDirection < 0) {
- daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
- } else {
- daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
- ;
- }
-}
-
-/* 8014D620-8014D67C 147F60 005C+00 1/1 0/0 0/0 .text daBaseNpc_decIdx__FiPUsii */
-static void daBaseNpc_decIdx(int i_pathNo, u16* i_pathIdx, int i_pathClosed, int i_pathDirection) {
- if (i_pathDirection < 0) {
- daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
- } else {
- daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
- ;
- }
-}
-
-/* 8014D67C-8014D804 147FBC 0188+00 1/1 0/0 0/0 .text daNpcBase_BBasis__FiiiPi */
-static void daNpcBase_BBasis(int param_0, int param_1, int param_2, int* param_3) {
- // NONMATCHING
-}
-
-/* 8014D804-8014D81C 148144 0018+00 0/0 0/0 1/1 .text __ct__18daBaseNpc_acMngr_cFv */
-daBaseNpc_acMngr_c::daBaseNpc_acMngr_c() {
- // NONMATCHING
-}
-
-/* 8014D81C-8014D838 14815C 001C+00 0/0 0/0 9/9 .text entry__18daBaseNpc_acMngr_cFP10fopAc_ac_c */
-void daBaseNpc_acMngr_c::entry(fopAc_ac_c* i_ActorP) {
- mActorId = fopAcM_GetID(i_ActorP);
-}
-
-/* 8014D838-8014D884 148178 004C+00 0/0 0/0 6/6 .text getActor__18daBaseNpc_acMngr_cFv */
-fopAc_ac_c* daBaseNpc_acMngr_c::getActor() {
- fopAc_ac_c* ret = NULL;
- if (fopAcM_SearchByID(mActorId, &ret) && ret != NULL) {
- return ret;
- }
- return NULL;
-}
-
-/* 8014D884-8014D998 1481C4 0114+00 1/0 0/0 0/0 .text calc__18daBaseNpc_matAnm_cCFP11J3DMaterial
- */
-void daBaseNpc_matAnm_c::calc(J3DMaterial* param_0) const {
- // NONMATCHING
-}
-
-/* 8014D998-8014D9A8 1482D8 0010+00 0/0 0/0 1/1 .text __ct__16daBaseNpc_path_cFv */
-daBaseNpc_path_c::daBaseNpc_path_c() {
- // NONMATCHING
-}
-
-/* 8014D9A8-8014D9BC 1482E8 0014+00 1/1 0/0 4/4 .text isPath__16daBaseNpc_path_cFv */
-BOOL daBaseNpc_path_c::isPath() {
- return mpRoomPath != 0;
-}
-
-/* 8014D9BC-8014DA48 1482FC 008C+00 0/0 0/0 1/1 .text setPathInfo__16daBaseNpc_path_cFUcScSc */
-static asm int daBaseNpc_putNurbs(dPnt* param_0, int param_1, int param_2, dPnt* param_3,
- int param_4);
-
-int daBaseNpc_path_c::setPathInfo(u8 i_pathIdx, s8 i_roomNo, s8 i_direction) {
- dPath* room_path;
-
- mpRoomPath = 0;
- mIdx = 0;
- mDirection = i_direction;
-
- if (i_pathIdx != 0xFF) {
- mpRoomPath = dPath_GetRoomPath(i_pathIdx, i_roomNo);
- room_path = mpRoomPath;
- if (!room_path) {
- return 0;
- }
- int isClosed = dPath_ChkClose(room_path);
- field_0xa0e = daBaseNpc_putNurbs((dPnt*)room_path->m_points, room_path->m_num, 0xA0,
- (dPnt*)field_0xc, isClosed);
- }
- return isPath();
-}
-
-/* 8014DA48-8014DA64 148388 001C+00 0/0 0/0 1/1 .text reverseDir__16daBaseNpc_path_cFv */
-void daBaseNpc_path_c::reverseDir() {
- s8 tmp_direction;
- mDirection > 0 ? tmp_direction = -1 : tmp_direction = 1;
- mDirection = tmp_direction;
-}
-
-/* 8014DA64-8014DAC4 1483A4 0060+00 0/0 0/0 3/3 .text chkPnt__16daBaseNpc_path_cF4cXyz */
-s32 daBaseNpc_path_c::chkPnt(cXyz i_pos) {
- return daBaseNpc_chkPnt(i_pos, (dPnt*)mpRoomPath->m_points, mIdx, mpRoomPath->m_num,
- dPath_ChkClose(mpRoomPath), mDirection);
-}
-
-/* 8014DAC4-8014DB04 148404 0040+00 0/0 0/0 3/3 .text setNextPnt__16daBaseNpc_path_cFv */
-void daBaseNpc_path_c::setNextPnt() {
- daBaseNpc_incIdx(mpRoomPath->m_num, &mIdx, dPath_ChkClose(mpRoomPath), mDirection);
-}
-
-/* 8014DB04-8014DB0C 148444 0008+00 0/0 0/0 3/3 .text getIdx__16daBaseNpc_path_cFv */
-u16 daBaseNpc_path_c::getIdx() {
- return mIdx;
-}
-
-/* 8014DB0C-8014DB14 -00001 0008+00 0/0 0/0 0/0 .text setIdx__16daBaseNpc_path_cFUs */
-void daBaseNpc_path_c::setIdx(u16 i_idx) {
- mIdx = i_idx;
-}
-
-/* 8014DB14-8014DB40 148454 002C+00 0/0 0/0 4/4 .text getPntPos__16daBaseNpc_path_cFUs */
-Vec daBaseNpc_path_c::getPntPos(u16 i_idx) {
- return mpRoomPath->m_points[i_idx].m_position;
-}
-
-/* 8014DB40-8014DBB4 148480 0074+00 1/1 0/0 0/0 .text limitter__18daBaseNpc_lookat_cFsPsss */
-void daBaseNpc_lookat_c::limitter(s16 param_1, s16* param_2, s16 param_3, s16 param_4) {
- int tmp = param_1;
- int tmp2 = tmp + *param_2;
-
- if (param_3 < tmp2) {
- if (tmp < param_3) {
- *param_2 -= tmp2 - param_3;
- } else {
- *param_2 = 0;
- }
- }
-
- tmp += *param_2;
-
- if (tmp >= (s16)param_4) {
- return;
- }
-
- if (param_4 < param_1) {
- *param_2 -= (int)(tmp - param_4);
- return;
- }
-
- *param_2 = 0;
-}
-
-/* ############################################################################################## */
-/* 80453490-80453494 001A90 0004+00 2/2 0/0 0/0 .sdata2 @8404 */
-SECTION_SDATA2 static f32 lit_8404 = 0.25f;
-
-/* 80453494-80453498 001A94 0004+00 1/1 0/0 0/0 .sdata2 @8405 */
-SECTION_SDATA2 static f32 lit_8405 = 4.0f / 5.0f;
-
-/* 8014DBB4-8014E634 1484F4 0A80+00 0/0 0/0 1/1 .text
- * calc__18daBaseNpc_lookat_cFP10fopAc_ac_cPA4_fs */
-void daBaseNpc_lookat_c::calc(fopAc_ac_c* param_0, f32 (*param_1)[4], s16 param_2) {
- // NONMATCHING
-}
-
-/* 8014E634-8014E658 148F74 0024+00 0/0 0/0 1/1 .text setMaxJntLmt__18daBaseNpc_lookat_cF5csXyzi
- */
-void daBaseNpc_lookat_c::setMaxJntLmt(csXyz i_pos, int i_modifier) {
- mMaxJntLmt[i_modifier].x = i_pos.x;
- mMaxJntLmt[i_modifier].y = i_pos.y;
- mMaxJntLmt[i_modifier].z = i_pos.z;
-}
-
-/* 8014E658-8014E67C 148F98 0024+00 0/0 0/0 1/1 .text setMinJntLmt__18daBaseNpc_lookat_cF5csXyzi
- */
-void daBaseNpc_lookat_c::setMinJntLmt(csXyz i_pos, int i_modifier) {
- mMinJntLmt[i_modifier].x = i_pos.x;
- mMinJntLmt[i_modifier].y = i_pos.y;
- mMinJntLmt[i_modifier].z = i_pos.z;
-}
-
-/* 8014E67C-8014E6A0 148FBC 0024+00 0/0 0/0 1/1 .text setJntPos__18daBaseNpc_lookat_cF4cXyzi */
-void daBaseNpc_lookat_c::setJntPos(cXyz i_pos, int i_modifier) {
- mJntPos[i_modifier].x = i_pos.x;
- mJntPos[i_modifier].y = i_pos.y;
- mJntPos[i_modifier].z = i_pos.z;
-}
-
-/* 8014E6A0-8014E6AC 148FE0 000C+00 0/0 0/0 1/1 .text setAttnPos__18daBaseNpc_lookat_cFP4cXyz */
-int daBaseNpc_lookat_c::setAttnPos(cXyz* i_pos) {
- mpAttnPos = i_pos;
- return 1;
-}
-
-/* 8014E6AC-8014E6C8 148FEC 001C+00 0/0 0/0 1/1 .text getRot__18daBaseNpc_lookat_cFi */
-csXyz daBaseNpc_lookat_c::getRot(int param_0) {
- return mRotation[param_0];
-}
-
-/* 8014E6C8-8014E89C 149008 01D4+00 1/1 0/0 0/0 .text __ct__11daBaseNpc_cFv */
-daBaseNpc_c::daBaseNpc_c() {
- // NONMATCHING
-}
-
-/* 8014E89C-8014EAD0 1491DC 0234+00 2/1 0/0 2/2 .text __dt__11daBaseNpc_cFv */
-daBaseNpc_c::~daBaseNpc_c() {
- // NONMATCHING
-}
-
-/* 8014EAD0-8014EC50 149410 0180+00 2/0 0/0 2/0 .text execute__11daBaseNpc_cFv */
-void daBaseNpc_c::execute() {
- // NONMATCHING
-}
-
-/* 8014EC50-8014EE3C 149590 01EC+00 2/0 0/0 2/0 .text draw__11daBaseNpc_cFf */
-void daBaseNpc_c::draw(f32 param_0) {
- // NONMATCHING
-}
+#include "d/actor/d_a_npc2.cpp"
-/* 8014EE3C-8014EE44 14977C 0008+00 2/0 0/0 1/0 .text getResName__11daBaseNpc_cFv */
-bool daBaseNpc_c::getResName() {
- return false;
-}
-
-/* 8014EE44-8014EE80 149784 003C+00 0/0 0/0 2/2 .text getTrnsfrmKeyAnmP__11daBaseNpc_cFPci */
-J3DAnmTransform* daBaseNpc_c::getTrnsfrmKeyAnmP(char* param_0, int param_1) {
- return (J3DAnmTransform*)dComIfG_getObjectRes(param_0, param_1);
-}
-
-/* 8014EE80-8014EEE4 1497C0 0064+00 0/0 0/0 1/1 .text
- * setMcaMorfAnm__11daBaseNpc_cFP18J3DAnmTransformKeyffiii */
-void daBaseNpc_c::setMcaMorfAnm(J3DAnmTransformKey* param_0, f32 param_1, f32 param_2,
- int param_3, int param_4, int param_5) {
- // NONMATCHING
-}
-
-/* 8014EEE4-8014EF28 149824 0044+00 0/0 0/0 1/1 .text
- * setBckAnm__11daBaseNpc_cFP15J3DAnmTransformfiiib */
-void daBaseNpc_c::setBckAnm(J3DAnmTransform* param_0, f32 param_1, int param_2, int param_3,
- int param_4, bool param_5) {
- mBckAnm.init(param_0, 1, param_2, param_1, param_3, param_4, param_5);
-}
-
-/* 8014EF28-8014EF64 149868 003C+00 0/0 0/0 1/1 .text getTexPtrnAnmP__11daBaseNpc_cFPci
- */
-J3DAnmTransform* daBaseNpc_c::getTexPtrnAnmP(char* param_0, int param_1) {
- return (J3DAnmTransform*)dComIfG_getObjectRes(param_0, param_1);
-}
-
-/* 8014EF64-8014EFA4 1498A4 0040+00 0/0 0/0 1/1 .text
- * setBtpAnm__11daBaseNpc_cFP16J3DAnmTexPatternP12J3DModelDatafi */
-void daBaseNpc_c::setBtpAnm(J3DAnmTexPattern* param_0, J3DModelData* param_1, f32 param_2,
- int param_3) {
- mBtpAnm.init(&param_1->getMaterialTable(), param_0, 1, param_3, param_2, 0, -1);
-}
-
-/* 8014EFA4-8014EFF0 1498E4 004C+00 2/0 0/0 2/0 .text attnSttsOn__11daBaseNpc_cFii */
-void daBaseNpc_c::attnSttsOn(int param_0, int param_1) {
- u32 tmp;
-
- if (dComIfGp_getLinkPlayer()->checkWolf()) {
- if (param_1 != 0) {
- tmp = 10;
- } else {
- tmp = 1;
- }
- } else if (param_0 != 0) {
- tmp = 10;
- } else {
- tmp = 1;
- }
-
- attention_info.flags = tmp;
-}
-
-/* 8014EFF0-8014EFF4 149930 0004+00 2/0 0/0 1/0 .text setParam__11daBaseNpc_cFv */
-void daBaseNpc_c::setParam() {
- /* empty function */
-}
-
-/* 8014EFF4-8014F09C 149934 00A8+00 0/0 0/0 1/1 .text orderEvent__11daBaseNpc_cFiPc */
-void daBaseNpc_c::orderEvent(int param_0, char* i_evtName) {
- if (i_evtName) {
- mEvtIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, -1);
- fopAcM_orderOtherEventId(this, mEvtIdx, -1, -1, 0, 1);
- } else {
- if ((mUnk >= 0 && attention_info.flags == 10) && (eventInfo.mCondition |= 1, param_0 != 0))
- {
- fopAcM_orderSpeakEvent(this, 0, 0);
- }
- }
-}
-/* 8014F09C-8014F0A0 1499DC 0004+00 2/0 0/0 1/0 .text mainProc__11daBaseNpc_cFv */
-void daBaseNpc_c::mainProc() {
- /* empty function */
-}
-
-/* 8014F0A0-8014F0FC 1499E0 005C+00 1/1 0/0 2/2 .text setEnvTevColor__11daBaseNpc_cFv */
-void daBaseNpc_c::setEnvTevColor() {
- tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mBgSPolyInfo);
- tevStr.room_no = dComIfG_Bgsp().GetRoomId(mBgSPolyInfo);
-}
-
-/* 8014F0FC-8014F140 149A3C 0044+00 1/1 0/0 2/2 .text setRoomNo__11daBaseNpc_cFv */
-void daBaseNpc_c::setRoomNo() {
- s32 room_id = dComIfG_Bgsp().GetRoomId(mBgSPolyInfo);
- current.roomNo = room_id;
- mRoomId = room_id;
-}
-
-/* 8014F140-8014F148 149A80 0008+00 2/0 0/0 2/0 .text btkCtrl__11daBaseNpc_cFv */
-bool daBaseNpc_c::btkCtrl() {
- return false;
-}
-
-/* 8014F148-8014F1C8 149A88 0080+00 1/1 0/0 0/0 .text checkEndAnm__11daBaseNpc_cFf */
-int daBaseNpc_c::checkEndAnm(f32 param_0) {
- switch (mpMorf[0]->getPlayMode()) {
- case 2:
- return mpMorf[0]->isLoop();
- case 0:
- case 1:
- return mpMorf[0]->isStop() && param_0 != mpMorf[0]->getPlaySpeed();
- case 3:
- break;
- }
-
- return 0;
-}
-
-/* 8014F1C8-8014F228 149B08 0060+00 1/1 0/0 0/0 .text checkEndAnm__11daBaseNpc_cFP12J3DFrameCtrl
- */
-int daBaseNpc_c::checkEndAnm(J3DFrameCtrl* param_0) {
- switch (param_0->getAttribute()) {
- case 2:
- return param_0->checkState(2);
- case 0:
- case 1:
- bool rv = true;
- if (((param_0->checkState(1) == 0) && (param_0->getRate() != 0.0f))) {
- rv = false;
- }
- return rv;
- break;
- case 3:
- break;
- }
-
- return 0;
-}
-
-
-/* 8014F228-8014F38C 149B68 0164+00 2/0 0/0 2/0 .text allAnmPlay__11daBaseNpc_cFv */
-void daBaseNpc_c::allAnmPlay() {
- // NONMATCHING
-}
-
-/* 8014F38C-8014F390 149CCC 0004+00 2/0 0/0 1/0 .text adjustShapeAngle__11daBaseNpc_cFv
- */
-void daBaseNpc_c::adjustShapeAngle() {
- /* empty function */
-}
-
-/* 8014F390-8014F4A0 149CD0 0110+00 2/0 0/0 1/0 .text setMtx__11daBaseNpc_cFi */
-void daBaseNpc_c::setMtx(int param_0) {
- J3DModel* model = mpMorf[0]->getModel();
- ;
- J3DModelData* modelData = model->getModelData();
-
- mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::ZXYrotM(field_0x91a);
- mDoMtx_stack_c::scaleM(scale);
-
- model->setBaseTRMtx(mDoMtx_stack_c::get());
-
- if (param_0) {
- model->setUserArea((u32)this);
- } else {
- model->setUserArea(0);
- }
-
- if ((field_0x840 & 0x10) && field_0x83c) {
- u16 tmp = 0;
-
- while (field_0x83c[tmp] != 0xffff) {
- mBckAnm.entryJoint(modelData, field_0x83c[tmp], mBckAnm.getFrame());
- tmp++;
- }
-
- mpMorf[0]->modelCalc();
-
- u16 tmp2 = 0;
-
- while (field_0x83c[tmp2] != 0xffff) {
- mBckAnm.removeJoint(modelData, field_0x83c[tmp2]);
- tmp2++;
- }
-
- } else {
- mpMorf[0]->modelCalc();
- }
-}
-
-/* 8014F4A0-8014F4A4 149DE0 0004+00 2/0 0/0 1/0 .text setCollisions__11daBaseNpc_cFv */
-void daBaseNpc_c::setCollisions() {
- /* empty function */
-}
-
-/* 8014F4A4-8014F4A8 149DE4 0004+00 2/0 0/0 1/0 .text setAttnPos__11daBaseNpc_cFv */
-void daBaseNpc_c::setAttnPos() {
- /* empty function */
-}
-
-/* 8014F4A8-8014F4AC 149DE8 0004+00 2/0 0/0 1/0 .text drawOtherMdls__11daBaseNpc_cFv */
-void daBaseNpc_c::drawOtherMdls() {
- /* empty function */
-}
-
-/* 8014F4AC-8014F4B4 149DEC 0008+00 2/0 0/0 1/0 .text dbgDraw__11daBaseNpc_cFv */
-bool daBaseNpc_c::dbgDraw() {
- return true;
-}
-
-/* 8014F4B4-8014F4F8 149DF4 0044+00 0/0 0/0 1/1 .text __ct__23daBaseNpc_moveBgActor_cFv
- */
-// this probably has a more correct solution
-daBaseNpc_moveBgActor_c::daBaseNpc_moveBgActor_c() {
- field_0xa14 = 0;
-}
-/* 8014F4F8-8014F518 149E38 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */
-static void CheckCreateHeap(fopAc_ac_c* i_bgActor) {
- ((daBaseNpc_moveBgActor_c*)i_bgActor)->MoveBGCreateHeap();
-}
-
-/* ############################################################################################## */
-/* 80450FE0-80450FE4 0004E0 0004+00 2/2 0/0 0/0 .sbss m_name__23daBaseNpc_moveBgActor_c
- */
-u8 daBaseNpc_moveBgActor_c::m_name[4];
-
-/* 80450FE4-80450FE8 0004E4 0004+00 2/2 0/0 0/0 .sbss m_dzb_id__23daBaseNpc_moveBgActor_c
- */
-u8 daBaseNpc_moveBgActor_c::m_dzb_id[4];
-
-/* 80450FE8-80450FEC 0004E8 0004+00 2/2 0/0 0/0 .sbss m_set_func__23daBaseNpc_moveBgActor_c */
-u8 daBaseNpc_moveBgActor_c::m_set_func[4];
-
-/* 8014F518-8014F60C 149E58 00F4+00 1/1 0/0 0/0 .text
- * MoveBGCreateHeap__23daBaseNpc_moveBgActor_cFv */
-void daBaseNpc_moveBgActor_c::MoveBGCreateHeap() {
- // NONMATCHING
-}
-
-/* 8014F60C-8014F6FC 149F4C 00F0+00 0/0 0/0 1/1 .text
- * MoveBGCreate__23daBaseNpc_moveBgActor_cFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUl
- */
-void daBaseNpc_moveBgActor_c::MoveBGCreate(char const* param_0, int param_1,
- void (*param_2)(dBgW*, void*, cBgS_PolyInfo const&,
- bool, cXyz*, csXyz*, csXyz*),
- u32 param_3) {
- // NONMATCHING
-}
-
-/* 8014F6FC-8014F770 14A03C 0074+00 0/0 0/0 1/1 .text MoveBGDelete__23daBaseNpc_moveBgActor_cFv */
-void daBaseNpc_moveBgActor_c::MoveBGDelete() {
- // NONMATCHING
-}
-
-/* 8014F770-8014F81C 14A0B0 00AC+00 0/0 0/0 2/2 .text MoveBGExecute__23daBaseNpc_moveBgActor_cFv
- */
-void daBaseNpc_moveBgActor_c::MoveBGExecute() {
- // NONMATCHING
-}
-
-/* 8014F81C-8014F8C4 14A15C 00A8+00 1/1 0/0 0/0 .text
- * daBaseNpc_PntVsLineSegmentLengthSquare2D__FffffffPfPfPf */
-static void daBaseNpc_PntVsLineSegmentLengthSquare2D(f32 param_0, f32 param_1, f32 param_2,
- f32 param_3, f32 param_4, f32 param_5,
- f32* param_6, f32* param_7, f32* param_8) {
- // NONMATCHING
-}
-
-/* 8014F8C4-8014FB28 14A204 0264+00 1/1 0/0 0/0 .text daBaseNpc_putNurbs__FP4dPntiiP4dPnti */
-static int daBaseNpc_putNurbs(dPnt* param_0, int param_1, int param_2, dPnt* param_3,
- int param_4) {
- // NONMATCHING
-}
-
-/* 8014FB28-80150230 14A468 0708+00 1/1 0/0 0/0 .text daBaseNpc_chkPnt__F4cXyzP4dPntUsUsii */
-static s32 daBaseNpc_chkPnt(cXyz param_0, dPnt* param_1, u16 param_2, u16 param_3, int param_4,
- int param_5) {
- // NONMATCHING
-}
-
-/* 80150230-801502EC 14AB70 00BC+00 1/1 0/0 0/0 .text daBaseNpc_getGroundAngle__FP13cBgS_PolyInfos
- */
-static void daBaseNpc_getGroundAngle(cBgS_PolyInfo* param_0, s16 param_1) {
- // NONMATCHING
-}
-
-/* 801502EC-801503BC 14AC2C 00D0+00 1/0 0/0 0/0 .text __dt__18daBaseNpc_lookat_cFv */
-daBaseNpc_lookat_c::~daBaseNpc_lookat_c() {
- // NONMATCHING
-}
-
-/* 801503BC-801503C4 14ACFC 0008+00 1/0 0/0 0/0 .text CreateHeap__23daBaseNpc_moveBgActor_cFv */
-bool daBaseNpc_moveBgActor_c::CreateHeap() {
- return true;
-}
-
-/* 801503C4-801503CC 14AD04 0008+00 1/0 0/0 0/0 .text Create__23daBaseNpc_moveBgActor_cFv
- */
-bool daBaseNpc_moveBgActor_c::Create() {
- return true;
-}
-
-/* 801503CC-801503D4 14AD0C 0008+00 1/0 0/0 0/0 .text Delete__23daBaseNpc_moveBgActor_cFv
- */
-bool daBaseNpc_moveBgActor_c::Delete() {
- return true;
-}
-
-/* 801503D4-801503DC 14AD14 0008+00 1/0 0/0 0/0 .text Execute__23daBaseNpc_moveBgActor_cFPPA3_A4_f
- */
-bool daBaseNpc_moveBgActor_c::Execute(f32 (**param_0)[3][4]) {
- return true;
-}
-
-/* 801503DC-801503E4 14AD1C 0008+00 1/0 0/0 0/0 .text Draw__23daBaseNpc_moveBgActor_cFv
- */
-bool daBaseNpc_moveBgActor_c::Draw() {
- return true;
-}
-
-/* 801503E4-801503EC 14AD24 0008+00 1/0 0/0 0/0 .text IsDelete__23daBaseNpc_moveBgActor_cFv */
-bool daBaseNpc_moveBgActor_c::IsDelete() {
- return true;
-}
-
-/* 801503EC-801503F4 14AD2C 0008+00 1/0 0/0 0/0 .text ToFore__23daBaseNpc_moveBgActor_cFv
- */
-bool daBaseNpc_moveBgActor_c::ToFore() {
- return true;
-}
-
-/* 801503F4-801503FC 14AD34 0008+00 1/0 0/0 0/0 .text ToBack__23daBaseNpc_moveBgActor_cFv
- */
-bool daBaseNpc_moveBgActor_c::ToBack() {
- return true;
-}
-
-/* 801503FC-80150444 14AD3C 0048+00 1/0 0/0 0/0 .text __dt__16daBaseNpc_path_cFv */
-daBaseNpc_path_c::~daBaseNpc_path_c() {
- // NONMATCHING
-}
-
-/* 80150444-80150524 14AD84 00E0+00 1/0 0/0 0/0 .text __dt__18daBaseNpc_matAnm_cFv */
-daBaseNpc_matAnm_c::~daBaseNpc_matAnm_c() {
- // NONMATCHING
-}
-
-/* 80150524-8015056C 14AE64 0048+00 1/0 0/0 0/0 .text __dt__18daBaseNpc_acMngr_cFv */
-daBaseNpc_acMngr_c::~daBaseNpc_acMngr_c() {
- // NONMATCHING
-}
-
-/**
- * From here until end? is supposed to be d_a_npc4.cpp
- * according to debug rom OSPanic reports
- */
-
-/* 8015056C-801505AC 14AEAC 0040+00 2/2 0/0 0/0 .text daNpcF_addIdx__FiiRUsi */
-static BOOL daNpcF_addIdx(int i_step, int i_num, u16& i_idx, BOOL i_isClosed) {
- int ret = false;
- int new_idx = i_idx;
- new_idx += i_step;
-
- if (i_num <= new_idx) {
- if (i_isClosed) {
- new_idx %= i_num;
- } else {
- new_idx = i_num - 1;
- ret = true;
- }
- }
-
- i_idx = new_idx;
- return ret;
-}
-
-/* 801505AC-801505F8 14AEEC 004C+00 2/2 0/0 0/0 .text daNpcF_subIdx__FiiRUsi */
-static BOOL daNpcF_subIdx(int i_step, int i_num, u16& i_idx, BOOL i_isClosed) {
- BOOL ret = false;
- int new_idx = i_idx;
- new_idx -= i_step;
-
- if (0 > new_idx) {
- if (i_isClosed) {
- new_idx = (i_num + (new_idx % i_num)) % i_num;
- } else {
- new_idx = 0;
- ret = true;
- }
- }
-
- i_idx = new_idx;
- return ret;
-}
-
-/* 801505F8-80150654 14AF38 005C+00 4/4 0/0 0/0 .text daNpcF_incIdx__FiRUsii */
-static BOOL daNpcF_incIdx(int i_num, u16& i_idx, int i_isClosed, BOOL i_reverse) {
- return i_reverse ? daNpcF_subIdx(1, i_num, i_idx, i_isClosed) :
- daNpcF_addIdx(1, i_num, i_idx, i_isClosed);
-}
-
-/* 80150654-801506B0 14AF94 005C+00 3/3 0/0 0/0 .text daNpcF_decIdx__FiRUsii */
-static BOOL daNpcF_decIdx(int i_num, u16& i_idx, int i_isClosed, BOOL i_reverse) {
- return i_reverse ? daNpcF_addIdx(1, i_num, i_idx, i_isClosed) :
- daNpcF_subIdx(1, i_num, i_idx, i_isClosed);
-}
-
-/* 801506B0-801506BC 14AFF0 000C+00 0/0 0/0 130/130 .text initialize__18daNpcF_ActorMngr_cFv */
-void daNpcF_ActorMngr_c::initialize() {
- mActorID = fpcM_ERROR_PROCESS_ID_e;
-}
-
-/* 801506BC-801506D8 14AFFC 001C+00 1/1 0/0 130/130 .text
- * entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c */
-void daNpcF_ActorMngr_c::entry(fopAc_ac_c* i_actor) {
- mActorID = fopAcM_GetID(i_actor);
-}
-
-/* 801506D8-801506E0 -00001 0008+00 0/0 0/0 0/0 .text entry__18daNpcF_ActorMngr_cFUi */
-void daNpcF_ActorMngr_c::entry(fpc_ProcID i_actorID) {
- mActorID = i_actorID;
-}
-
-/* 801506E0-801506EC 14B020 000C+00 2/2 0/0 55/55 .text remove__18daNpcF_ActorMngr_cFv */
-void daNpcF_ActorMngr_c::remove() {
- mActorID = fpcM_ERROR_PROCESS_ID_e;
-}
-
-/* 801506EC-80150738 14B02C 004C+00 1/1 0/0 135/135 .text getActorP__18daNpcF_ActorMngr_cFv */
-fopAc_ac_c* daNpcF_ActorMngr_c::getActorP() {
- fopAc_ac_c* actor = NULL;
-
- if (fopAcM_SearchByID(mActorID, &actor) == 1 && actor != NULL) {
- return actor;
- }
-
- return NULL;
-}
-
-/* 80150738-8015075C 14B078 0024+00 0/0 0/0 48/48 .text initialize__15daNpcF_MatAnm_cFv
- */
-void daNpcF_MatAnm_c::initialize() {
- field_0xF4 = 0.0f;
- field_0xF8 = 0.0f;
- mNowOffsetX = 0.0f;
- mNowOffsetY = 0.0f;
- mEyeMoveFlag = 0;
- field_0x105 = 0;
-}
-
-/* 8015075C-80150870 14B09C 0114+00 1/0 0/0 0/0 .text calc__15daNpcF_MatAnm_cCFP11J3DMaterial */
-void daNpcF_MatAnm_c::calc(J3DMaterial* param_0) const {
- J3DMaterialAnm::calc(param_0);
-
- for (u32 i = 0; i < 8; i++) {
- if (J3DMaterialAnm::getTexMtxAnm(i).getAnmFlag()) {
- J3DTexMtxInfo* curr_mtx_info =
- &param_0->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo();
-
- if (field_0x105 != 0) {
- f32 tmp8 = 1.0f / (field_0x105 + 1);
- f32 tmp9 = (1.0f - tmp8);
- f32 tmp10 = field_0xF4 * (1.0f - tmp8);
-
- curr_mtx_info->mSRT.mTranslationX =
- tmp10 + curr_mtx_info->mSRT.mTranslationX * tmp8;
- curr_mtx_info->mSRT.mTranslationY =
- field_0xF8 * tmp9 + curr_mtx_info->mSRT.mTranslationY * tmp8;
-
- } else {
- if (mEyeMoveFlag != 0) {
- curr_mtx_info->mSRT.mTranslationX = mNowOffsetX;
- curr_mtx_info->mSRT.mTranslationY = mNowOffsetY;
- }
- }
-
- field_0xF4 = curr_mtx_info->mSRT.mTranslationX;
- field_0xF8 = curr_mtx_info->mSRT.mTranslationY;
- }
- }
-}
-
-/* 80150870-80150900 14B1B0 0090+00 2/2 0/0 8/8 .text initialize__16daNpcF_SPCurve_cFP5dPathi */
-void daNpcF_SPCurve_c::initialize(dPath* i_path, int i_isReversed) {
- mNurbs = 0;
- field_0x02 = 0;
- mIsReversed = i_isReversed;
- mIsClosed = false;
-
- for (int i = 0; i < 96; i++) {
- mPoints[i].m_position.x = 1.0f;
- mPoints[i].m_position.y = 1.0f;
- mPoints[i].m_position.z = 1.0f;
- }
-
- if (i_path) {
- mIsClosed = dPath_ChkClose(i_path);
- mNurbs = daNpcF_putNurbs((dPnt*)i_path->m_points, i_path->m_num, 0x60, (dPnt*)mPoints, mIsClosed);
- }
-}
-
-/* 80150900-8015095C 14B240 005C+00 0/0 0/0 20/20 .text initialize__13daNpcF_Path_cFv */
-void daNpcF_Path_c::initialize() {
- mIdx = 0;
- mIsReversed = false;
- mIsClosed = false;
- mpRoomPath = NULL;
-
- mSPCurve.initialize(NULL, false);
-
- mRange = 0.0f;
- mPosDst = 0.0f;
- field_0x10 = 0.0f;
-}
-
-/* 8015095C-80150A24 14B29C 00C8+00 0/0 0/0 12/12 .text setPathInfo__13daNpcF_Path_cFUcScUc */
-int daNpcF_Path_c::setPathInfo(u8 param_0, s8 param_1, u8 i_isReversed) {
- mpRoomPath = 0;
- mIdx = 0;
- mIsReversed = i_isReversed;
-
- if (param_0 != 0xFF) {
- mpRoomPath = dPath_GetRoomPath(param_0, param_1);
- if (!mpRoomPath) {
- return 0;
- }
- mSPCurve.initialize(mpRoomPath, mIsReversed);
- mIsClosed = dPath_ChkClose(mpRoomPath);
- mPosition = getPntPos(getIdx());
- }
- return 1;
-}
-
-/* 80150A24-80150A7C 14B364 0058+00 1/1 0/0 1/1 .text chkPassed__13daNpcF_Path_cF4cXyz */
-BOOL daNpcF_Path_c::chkPassed(cXyz i_pos) {
- return daNpcF_chkPassed(i_pos, (dPnt*)mpRoomPath->m_points, mIdx, mpRoomPath->m_num,
- mIsClosed, mIsReversed);
-}
-
-/* 80150A7C-80150BBC 14B3BC 0140+00 0/0 0/0 4/4 .text chkPassedDst__13daNpcF_Path_cF4cXyz
- */
-BOOL daNpcF_Path_c::chkPassedDst(cXyz i_pos) {
- return mPosDst + field_0x10 <= (mPosition - i_pos).abs();
-}
-
-/* 80150BBC-80150BE0 14B4FC 0024+00 0/0 0/0 8/8 .text reverse__13daNpcF_Path_cFv */
-void daNpcF_Path_c::reverse() {
- if (mIsReversed == true) {
- mIsReversed = false;
- } else {
- mIsReversed = true;
- }
-}
-
-/* 80150BE0-80150C18 14B520 0038+00 2/2 0/0 6/6 .text setNextIdx__13daNpcF_Path_cFv */
-BOOL daNpcF_Path_c::setNextIdx() {
- return daNpcF_incIdx(mpRoomPath->m_num, mIdx, chkClose(), mIsReversed);
-}
-
-/* 80150C18-80150C60 14B558 0048+00 0/0 0/0 9/9 .text getNextIdx__13daNpcF_Path_cFv */
-int daNpcF_Path_c::getNextIdx() {
- u16 ret = mIdx;
-
- daNpcF_incIdx(mpRoomPath->m_num, ret, chkClose(), mIsReversed);
- return ret;
-}
-
-/* 80150C60-80150CA8 14B5A0 0048+00 0/0 0/0 3/3 .text getBeforeIdx__13daNpcF_Path_cFv */
-int daNpcF_Path_c::getBeforeIdx() {
- u16 ret = mIdx;
-
- daNpcF_decIdx(mpRoomPath->m_num, ret, chkClose(), mIsReversed);
- return ret;
-}
-
-/* 80150CA8-80150D44 14B5E8 009C+00 0/0 0/0 1/1 .text getBeforePos__13daNpcF_Path_cFR4cXyz */
-BOOL daNpcF_Path_c::getBeforePos(cXyz& param_0) {
- u16 idx = mIdx;
-
- BOOL ret = daNpcF_decIdx(mpRoomPath->m_num, idx, chkClose(), mIsReversed);
-
- param_0 = getPntPos(idx);
- return ret;
-}
-
-/* 80150D44-80150DE0 14B684 009C+00 0/0 0/0 1/1 .text getNextPos__13daNpcF_Path_cFR4cXyz
- */
-BOOL daNpcF_Path_c::getNextPos(cXyz& param_0) {
- u16 idx = mIdx;
-
- BOOL ret = daNpcF_incIdx(mpRoomPath->m_num, idx, chkClose(), mIsReversed);
-
- param_0 = getPntPos(idx);
- return ret;
-}
-
-/* 80150DE0-80150EB4 14B720 00D4+00 0/0 0/0 16/16 .text getDstPos__13daNpcF_Path_cF4cXyzR4cXyz */
-int daNpcF_Path_c::getDstPos(cXyz i_pos1, cXyz& o_pos2) {
- BOOL ret = false;
-
- while (!ret) {
- o_pos2 = getPntPos(getIdx());
-
- if (!chkPassed(i_pos1)) {
- break;
- };
-
- if (setNextIdx()) {
- ret = true;
- }
- }
- return ret;
-}
-
-/* 80150EB4-80151038 14B7F4 0184+00 0/0 0/0 2/2 .text setNextIdxDst__13daNpcF_Path_cF4cXyz */
-void daNpcF_Path_c::setNextIdxDst(cXyz i_pos) {
- if (!setNextIdx()) {
- mPosDst = (i_pos - getPntPos(getIdx())).abs();
- mPosition = i_pos;
- }
-}
-
-/* 80151038-801510B8 14B978 0080+00 0/0 0/0 72/72 .text initialize__15daNpcF_Lookat_cFv
- */
-void daNpcF_Lookat_c::initialize() {
- for (int i = 0; i < 4; i++) {
- mJointPos[i].setall(0.0f);
- mAngularMoveDis[i].setall(0);
- mMinAngle[i].setall(0);
- mMaxAngle[i].setall(0);
- mRotAngle[i].setall(0);
- field_0x94[i] = false;
- }
- mAttnPos = NULL;
-}
+#include "d/actor/d_a_npc3.cpp"
-/* 801510B8-80151350 14B9F8 0298+00 0/0 0/0 34/34 .text
- * setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz */
-void daNpcF_Lookat_c::setParam(f32 param_0, f32 param_1, f32 param_2, f32 param_3, f32 param_4,
- f32 param_5, f32 param_6, f32 param_7, f32 param_8, f32 param_9,
- f32 param_10, f32 param_11, s16 i_rotAngle, cXyz* i_jointPos) {
- static cXyz vec(0.0f, 0.0f, 32.0f);
-
- mJointPos[0] = i_jointPos[0];
- mMinAngle[0].x = cM_deg2s(-param_1) - 0x4000;
- mMinAngle[0].y = cM_deg2s(param_2);
- mMinAngle[0].z = 0;
- mMaxAngle[0].x = cM_deg2s(-param_0) - 0x4000;
- mMaxAngle[0].y = cM_deg2s(param_3);
- mMaxAngle[0].z = 0;
-
- mJointPos[1] = i_jointPos[1];
- mMinAngle[1].set(-0x4000, 0, 0);
- mMaxAngle[1].set(-0x4000, 0, 0);
-
- mJointPos[2] = i_jointPos[2];
- mMinAngle[2].x = cM_deg2s(-param_9);
- mMinAngle[2].y = cM_deg2s(param_10);
- mMinAngle[2].z = 0;
- mMaxAngle[2].x = cM_deg2s(-param_8);
- mMaxAngle[2].y = cM_deg2s(param_11);
- mMaxAngle[2].z = 0;
-
- mDoMtx_stack_c::transS(mJointPos[2]);
- mDoMtx_stack_c::YrotM(i_rotAngle);
- mDoMtx_stack_c::multVec(&vec, &mJointPos[3]);
-
- mMinAngle[3].set(0, 0, 0);
- mMaxAngle[3].set(0, 0, 0);
-}
-
-
-/* 80151350-801515D4 14BC90 0284+00 0/0 0/0 34/34 .text
- * calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii */
-// NONMATCHING instruction out of order
-void daNpcF_Lookat_c::calc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, csXyz** o_lookatAngle,
- BOOL i_snap, int i_axis, BOOL i_debug) {
- cXyz local_a4[4];
- csXyz local_bc[4];
- cXyz local_c8;
- f32 local_d8[4];
- f32 local_e8;
- f32 angY;
-
- if (mAttnPos) {
- initCalc(i_actor, i_baseTransformMtx, local_a4, local_bc, local_d8, local_c8, i_debug);
-
- for (int i = 2; i >= -1; i--) {
- update(local_a4, local_bc, local_d8);
- if (0 <= i) {
- calcMoveDisAngle(i, local_a4, local_bc, local_c8, i_axis, i_debug);
- }
- }
- setRotAngle();
-
- } else {
- clrRotAngle();
- }
-
- int i, j;
- for (i = 2, j = 1; i >= 0; i--, j++) {
- if (i_snap) {
- *(o_lookatAngle[i]) = mRotAngle[i];
- } else {
- local_e8 = (f32)o_lookatAngle[i]->x;
- cLib_addCalc2(&local_e8, (f32)mRotAngle[i].x, 0.25f, (f32)(0x800 / j));
- o_lookatAngle[i]->x = (s16)local_e8;
-
- local_e8 = (f32)o_lookatAngle[i]->y;
- angY = (f32)mRotAngle[i].y;
- cLib_addCalc2(&local_e8, angY, 0.25f, (f32)(0x800 / j));
- if (i_axis > 0 && angY - local_e8 < 0.0f) {
- local_e8 = angY;
- }
- if (i_axis < 0 && 0.0f < angY - local_e8) {
- local_e8 = angY;
- }
- o_lookatAngle[i]->y = (s16)local_e8;
-
- o_lookatAngle[i]->z = 0;
- }
- }
-}
-
-/* 801515D4-80151648 14BF14 0074+00 1/1 0/0 0/0 .text adjustMoveDisAngle__15daNpcF_Lookat_cFRssss
- */
-// NONMATCHING regalloc
-void daNpcF_Lookat_c::adjustMoveDisAngle(s16& delta, s16 angle, s16 min, s16 max) {
- int newAngle = angle + delta;
- if (max < newAngle) {
- if (angle < max) {
- delta -= (newAngle - max);
- } else {
- delta = 0;
- }
- }
-
- newAngle = angle + delta;
- if (newAngle < min) {
- if (min < angle) {
- delta -= (newAngle - min);
- } else {
- delta = 0;
- }
- }
-}
-
-/* 80151648-80151A54 14BF88 040C+00 1/1 0/0 0/0 .text
- * initCalc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fP4cXyzP5csXyzPfR4cXyzi */
-void daNpcF_Lookat_c::initCalc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, cXyz* param_2,
- csXyz* param_3, f32* param_4, cXyz& param_5, int i_debug) {
- Mtx mtx;
- cXyz local_90;
- cMtx_copy(i_baseTransformMtx, mtx);
- mtx[0][3] = 0.0f;
- mtx[1][3] = 0.0f;
- mtx[2][3] = 0.0f;
- mDoMtx_stack_c::copy(mtx);
- mDoMtx_stack_c::inverse();
- cMtx_copy(mDoMtx_stack_c::get(), mtx);
- mDoMtx_stack_c::transS(i_actor->current.pos);
- mDoMtx_stack_c::concat(mtx);
- for (int i = 0; i < 4; i++) {
- local_90 = mJointPos[i] - i_actor->current.pos;
- mDoMtx_stack_c::multVec(&local_90, &param_2[i]);
- }
- local_90 = *mAttnPos - i_actor->current.pos;
- mDoMtx_stack_c::multVec(&local_90, &param_5);
- for (int i = 0; i < 3; i++) {
- cXyz* vec = &param_2[i];
- local_90 = vec[1] - vec[0];
- param_4[i] = local_90.abs();
- param_3[i].setall(0);
- param_3[i].x = -cM_atan2s(local_90.y, local_90.absXZ());
- if (fabsf(cM_ssin(param_3[i].x)) < 0.63f) {
- param_3[i].y = cM_atan2s(local_90.x, local_90.z);
- } else {
- param_3[i].y = 0;
- }
- }
-}
-
-/* 80151A54-80151B68 14C394 0114+00 1/1 0/0 0/0 .text update__15daNpcF_Lookat_cFP4cXyzP5csXyzPf */
-void daNpcF_Lookat_c::update(cXyz* param_0, csXyz* param_1, f32* param_2) {
- csXyz ang = csXyz::Zero;
- cXyz vec;
- Mtx mtx;
- cXyz* pparam0i;
- for (int i = 0; i < 3; i++) {
- mDoMtx_stack_c::XYZrotS(param_1[i]);
- cMtx_copy(mDoMtx_stack_c::get(), mtx);
- pparam0i = &param_0[i];
- mDoMtx_stack_c::transS(pparam0i[0]);
- ang.x += mAngularMoveDis[i].x;
- ang.y += mAngularMoveDis[i].y;
- mDoMtx_stack_c::ZXYrotM(ang);
- mDoMtx_stack_c::concat(mtx);
- vec.set(0.0f, 0.0f, param_2[i]);
- mDoMtx_stack_c::multVec(&vec, &pparam0i[1]);
- }
-}
-
-/* 80151B68-80151F54 14C4A8 03EC+00 1/1 0/0 0/0 .text
- * calcMoveDisAngle__15daNpcF_Lookat_cFiP4cXyzP5csXyz4cXyzii */
-void daNpcF_Lookat_c::calcMoveDisAngle(int i_no, cXyz* param_1, csXyz* param_2, cXyz param_3,
- int i_axis, int i_debug) {
- if (i_axis == 0) {
- field_0x94[i_no] = false;
- }
-
- if (!field_0x94[i_no]) {
- cXyz vec1 = param_3 - param_1[i_no];
- if (!vec1.isZero()) {
- vec1.normalize();
- cXyz vec2 = param_1[3] - param_1[i_no];
- if (!vec2.isZero()) {
- vec2.normalize();
- s16 ivar3 = -cM_atan2s(vec1.y, vec1.absXZ());
- s16 ivar4 = cM_atan2s(vec1.x, vec1.z);
- s16 ivar5 = -cM_atan2s(vec2.y, vec2.absXZ());
- s16 ivar6 = cM_atan2s(vec2.x, vec2.z);
- mAngularMoveDis[i_no].x += (s16)(ivar3 - ivar5);
- mAngularMoveDis[i_no].y += (s16)(ivar4 - ivar6);
- }
- }
- }
-
- adjustMoveDisAngle(mAngularMoveDis[i_no].x, param_2[i_no].x,
- mMinAngle[i_no].x, mMaxAngle[i_no].x);
- adjustMoveDisAngle(mAngularMoveDis[i_no].y, param_2[i_no].y,
- mMinAngle[i_no].y, mMaxAngle[i_no].y);
-
- if (i_axis < 0 && mAngularMoveDis[i_no].y > 0) {
- field_0x94[i_no] = false;
- }
- if (i_axis > 0 && mAngularMoveDis[i_no].y < 0) {
- field_0x94[i_no] = false;
- }
-}
-
-/* 80151F54-80151FE0 14C894 008C+00 1/1 0/0 0/0 .text setRotAngle__15daNpcF_Lookat_cFv */
-void daNpcF_Lookat_c::setRotAngle() {
- int ang_x = 0;
- int ang_y = 0;
- for (int i = 0; i < 4; i++) {
- ang_x += mAngularMoveDis[i].x;
- ang_x = cLib_minMaxLimit(ang_x, -0x8000, 0x7fff);
- ang_y += mAngularMoveDis[i].y;
- ang_y = cLib_minMaxLimit(ang_y, -0x8000, 0x7fff);
-
- mRotAngle[i].x = ang_x;
- mRotAngle[i].y = ang_y;
- mRotAngle[i].z = 0;
- }
-}
-
-/* 80151FE0-80152014 14C920 0034+00 1/1 0/0 0/0 .text clrRotAngle__15daNpcF_Lookat_cFv */
-void daNpcF_Lookat_c::clrRotAngle() {
- for (int i = 0; i < 4; i++) {
- mRotAngle[i].x = 0;
- mRotAngle[i].y = 0;
- mRotAngle[i].z = 0;
- }
-}
-
-/* 80152014-801522AC 14C954 0298+00 0/0 0/0 38/38 .text execute__8daNpcF_cFv */
-BOOL daNpcF_c::execute() {
- setParam();
- if (main()) {
- fopAcM_posMoveF(this, mCcStts.GetCCMoveP());
- mAcch.CrrPos(dComIfG_Bgsp());
- mGndChk = mAcch.m_gnd;
- mGroundH = mAcch.GetGroundH();
- if (mGroundH != -1e+9f) {
- field_0x998 = daNpcF_getGroundAngle(&mGndChk, mCurAngle.y);
- setEnvTevColor();
- setRoomNo();
- mPolySound = dKy_pol_sound_get(&mAcch.m_gnd);
- mReverb = dComIfGp_getReverb(mCcStts.GetRoomId());
- if (mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > mGroundH) {
- mPolySound = dKy_pol_sound_get(&mAcch.m_wtr);
- }
- }
- }
- playAllAnm();
- adjustShapeAngle();
- setAttnPos();
- cLib_chaseF(&mExpressionMorf, 0.0f, 1.0f);
- setCollisions();
- if (mTwilight) {
- attention_info.flags |= 0x400000;
- attention_info.flags |= 0x800000;
- setHitodamaPrtcl();
- }
- mOldAngle = mCurAngle;
- mCutType = 0;
- mOrderSpeakEvt = false;
- mOrderNewEvt = false;
- field_0x9eb = false;
- field_0x9ef = 0;
- field_0x9f3 = 0;
- for (int i = 0; i < 5; i++) {
- if ((mAttnChangeTimer == 0 || mAttnIdx != i) && mAttnActorTimer[i] != 0 &&
- cLib_calcTimer(&mAttnActorTimer[i]) == 0)
- {
- mAttnActor[i].remove();
- }
- }
- if (mDamageTimer != 0) {
- cLib_calcTimer(&mDamageTimer);
- }
- return true;
-}
-
-/* 801522AC-80152614 14CBEC 0368+00 0/0 0/0 33/33 .text draw__8daNpcF_cFiifP11_GXColorS10i */
-int daNpcF_c::draw(BOOL i_isTest, BOOL param_1, f32 i_shadowDepth, _GXColorS10* i_fogColor,
- BOOL i_hideDamage) {
- f32 damage_ratio, frame;
- J3DModel* model = mpMorf->getModel();
- J3DModelData* modelData = model->getModelData();
- field_0x9f3 = 1;
-
- if (!checkHide()) {
- if (!i_hideDamage && mDamageTimer != 0 && mTotalDamageTimer != 0) {
- damage_ratio = (f32)mDamageTimer / (f32)mTotalDamageTimer;
- } else {
- damage_ratio = 0.0f;
- }
-
- if (cM3d_IsZero_inverted(damage_ratio)) {
- tevStr.TevColor.r = (s16)(damage_ratio * 20.0f);
- tevStr.TevColor.g = 0;
- } else if (i_isTest) {
- tevStr.TevColor.g = 20;
- tevStr.TevColor.r = 0;
- } else if (i_fogColor != NULL) {
- tevStr.TevColor.r = i_fogColor->r;
- tevStr.TevColor.g = i_fogColor->g;
- tevStr.TevColor.b = i_fogColor->b;
- tevStr.TevColor.a = i_fogColor->a;
- } else {
- tevStr.TevColor.g = 0;
- tevStr.TevColor.r = 0;
- }
-
- if (mTwilight) {
- g_env_light.settingTevStruct(4, &current.pos, &tevStr);
- } else {
- g_env_light.settingTevStruct(0, &current.pos, &tevStr);
- }
- g_env_light.setLightTevColorType_MAJI(model->getModelData(), &tevStr);
-
- if (!drawDbgInfo()) {
- if (mAnmFlags & ANM_PLAY_BTP) {
- mBtpAnm.entry(&modelData->getMaterialTable(), (s16)mBtpAnm.getFrame());
- }
- if (mAnmFlags & ANM_PLAY_BTK) {
- frame = mBtkAnm.getFrame();
- mBtkAnm.entry(&modelData->getMaterialTable(), frame);
- }
- if (mAnmFlags & ANM_PLAY_BRK) {
- frame = mBrkAnm.getFrame();
- mBrkAnm.entry(&modelData->getMaterialTable(), frame);
- }
-
- if (param_1) {
- fopAcM_setEffectMtx(this, modelData);
- }
-
- if (mTwilight) {
- dComIfGd_setListDark();
- mpMorf->entryDL();
- dComIfGd_setList();
- } else {
- mpMorf->entryDL();
- }
-
- if (mAnmFlags & ANM_PLAY_BTP) {
- mBtpAnm.remove(modelData);
- }
- if (mAnmFlags & ANM_PLAY_BTK) {
- mBtkAnm.remove(modelData);
- }
- if (mAnmFlags & ANM_PLAY_BRK) {
- mBrkAnm.remove(modelData);
- }
-
- mShadowKey = dComIfGd_setShadow(mShadowKey, true, model, &current.pos, i_shadowDepth,
- 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0,
- 1.0f, dDlst_shadowControl_c::getSimpleTex());
-
- drawOtherMdls();
- }
- }
- return 1;
-}
-
-/* 80152614-80152654 14CF54 0040+00 0/0 0/0 13/13 .text
- * tgHitCallBack__8daNpcF_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
-void daNpcF_c::tgHitCallBack(fopAc_ac_c* i_this, dCcD_GObjInf* param_1, fopAc_ac_c* i_actor,
- dCcD_GObjInf* param_3) {
- if (i_actor != NULL && fopAcM_GetProfName(i_actor) == PROC_ALINK) {
- if (daPy_getPlayerActorClass() == i_actor) {
- u8 cut_type = static_cast<daPy_py_c*>(i_actor)->getCutType();
- static_cast<daNpcF_c*>(i_this)->setCutType(cut_type);
- } else {
- static_cast<daNpcF_c*>(i_this)->setCutType(daPy_py_c::CUT_TYPE_NM_VERTICAL);
- }
- }
-}
-
-/* 804257E8-80425978 052508 0190+00 4/4 0/0 0/0 .bss mFindActorPList__8daNpcF_c */
-fopAc_ac_c* daNpcF_c::mFindActorPList[100];
-
-/* 80450FF0-80450FF4 0004F0 0004+00 4/4 0/0 0/0 .sbss mFindCount__8daNpcF_c */
-s32 daNpcF_c::mFindCount;
-
-/* 80152654-801526E8 14CF94 0094+00 0/0 0/0 12/12 .text srchAttnActor1__8daNpcF_cFPvPv */
-void* daNpcF_c::srchAttnActor1(void* i_proc, void* param_1) {
- if (mFindCount < 100 && fopAcM_IsActor(i_proc)
- && (fopAcM_GetName(i_proc) == PROC_NI || fopAcM_GetName(i_proc) == PROC_COW
- || fopAcM_GetName(i_proc) == PROC_NPC_NE || fopAcM_GetName(i_proc) == PROC_DO
- || fopAcM_GetName(i_proc) == PROC_SQ || fopAcM_GetName(i_proc) == PROC_BD))
- {
- mFindActorPList[mFindCount] = static_cast<fopAc_ac_c*>(i_proc);
- mFindCount++;
- }
- return NULL;
-}
-
-/* 80450FF4-80450FF8 0004F4 0002+02 2/2 0/0 0/0 .sbss mSrchActorName__8daNpcF_c */
-s16 daNpcF_c::mSrchActorName;
-
-/* 801526E8-8015276C 14D028 0084+00 1/1 0/0 0/0 .text srchActor__8daNpcF_cFPvPv */
-void* daNpcF_c::srchActor(void* i_proc, void* i_this) {
- if (mFindCount < 100 && fopAc_IsActor(i_proc) && i_proc != i_this
- && mSrchActorName == fopAcM_GetName(i_proc))
- {
- mFindActorPList[mFindCount] = static_cast<fopAc_ac_c*>(i_proc);
- mFindCount++;
- }
- return NULL;
-}
-
-/* 8015276C-801527FC 14D0AC 0090+00 2/0 0/0 40/9 .text setMtx__8daNpcF_cFv */
-void daNpcF_c::setMtx() {
- J3DModel* model = mpMorf->getModel();
- mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::ZXYrotM(mCurAngle);
- mDoMtx_stack_c::scaleM(scale);
- model->setBaseTRMtx(mDoMtx_stack_c::get());
- model->setUserArea((u32)this);
- if (mAnmFlags & 0x100) {
- mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame());
- mpMorf->modelCalc();
- } else {
- mpMorf->modelCalc();
- }
-}
-
-/* 801527FC-801528C8 14D13C 00CC+00 2/0 0/0 38/0 .text setMtx2__8daNpcF_cFv */
-void daNpcF_c::setMtx2() {
- J3DModel* model = mpMorf->getModel();
- mDoMtx_stack_c::transS(current.pos);
- mDoMtx_stack_c::ZXYrotM(mCurAngle);
- mDoMtx_stack_c::scaleM(scale);
- model->setBaseTRMtx(mDoMtx_stack_c::get());
- model->setUserArea((u32)this);
- if (cM3d_IsZero_inverted(mExpressionMorf)) {
- mpMorf->onMorfNone();
- } else {
- mpMorf->offMorfNone();
- }
- if (mAnmFlags & 0x100) {
- mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame());
- mpMorf->modelCalc();
- } else {
- mpMorf->modelCalc();
- }
-}
-
-/* 801528C8-80152B2C 14D208 0264+00 0/0 0/0 76/76 .text initialize__8daNpcF_cFv */
-void daNpcF_c::initialize() {
- field_0x824.remove();
- for (int i = 0; i < 5; i++) {
- mAttnActor[i].remove();
- }
- for (int i = 0; i < 3; i++) {
- mLookatPos[i].setall(0.0f);
- }
- mLookPos.setall(0.0f);
- field_0x884.setall(0.0f);
- field_0x890.setall(0.0f);
- field_0x89c.setall(0.0f);
- field_0x8a8.setall(0.0f);
- mHeadPos.setall(0.0f);
- mCurAngle.setall(0);
- mOldAngle.setall(0);
- mEyeAngle.setall(0);
- mHeadAngle.setall(0);
- for (int i = 0; i < 3; i++) {
- field_0x908[i].setall(0);
- mLookatAngle[i].setall(0);
- }
- mStaffID = -1;
- mCutType = 0;
- mAttnIdx = 0;
- mAttnChangeTimer = 0;
- for (int i = 0; i < 5; i++) {
- mAttnActorTimer[i] = 0;
- }
- mMsgTimer = 0;
- mDamageTimer = 0;
- mTotalDamageTimer = 0;
- field_0x95c = 0;
- mEventTimer = 0;
- mBtpTimer = 0;
- mTurnAmount = 0;
- mTurnMode = 0;
- mTurnStepNum = 0.0f;
- mExpressionMorfOverride = 0.0f;
- mMotionMorfOverride = 0.0f;
- mGroundH = 0.0f;
- for (int i = 0; i < 3; i++) {
- field_0x984[i] = 0.0f;
- }
- field_0x990 = 0;
- field_0x992 = 0;
- mTurnStartAngle = 0;
- mTurnTargetAngle = 0;
- field_0x998 = 0;
- mAnmFlags = 0;
- mShadowKey = 0;
- field_0x9a4 = -1;
- mHitodamaParticleKey[0] = -1;
- mHitodamaParticleKey[1] = -1;
- mEventIdx = -1;
- mExpressionPhase = 0;
- mExpressionPrevPhase = 0;
- mMotionPhase = 0;
- mMotionPrevPhase = 0;
- mExpression = -1;
- mMotion = -1;
- mMotionLoops = 0;
- mExpressionLoops = 0;
- mOrderEvtNo = 0;
- mOrderSpeakEvt = false;
- field_0x9ea = false;
- field_0x9eb = false;
- field_0x9ec = false;
- mOrderNewEvt = false;
- field_0x9ee = false;
- field_0x9ef = 0;
- mIsDamaged = false;
- field_0x9f1 = 0;
- mHide = false;
- field_0x9f3 = 0;
- field_0x9f5 = 1;
- field_0x9f6 = 1;
- field_0x9d2 = cM_rndF(0x10000);
-}
-
-/* 80152B2C-80152B68 14D46C 003C+00 0/0 0/0 69/69 .text getTrnsfrmKeyAnmP__8daNpcF_cFPci
- */
-J3DAnmTransformKey* daNpcF_c::getTrnsfrmKeyAnmP(char* arcName, int fileIdx) {
- return (J3DAnmTransformKey*)dComIfG_getObjectRes(arcName, fileIdx);
-}
-
-/* 80152B68-80152BA4 14D4A8 003C+00 0/0 0/0 31/31 .text getTexPtrnAnmP__8daNpcF_cFPci */
-J3DAnmTexPattern* daNpcF_c::getTexPtrnAnmP(char* arcName, int fileIdx) {
- return (J3DAnmTexPattern*)dComIfG_getObjectRes(arcName, fileIdx);
-}
-
-/* 80152BA4-80152BE0 14D4E4 003C+00 0/0 0/0 50/50 .text getTexSRTKeyAnmP__8daNpcF_cFPci
- */
-J3DAnmTextureSRTKey* daNpcF_c::getTexSRTKeyAnmP(char* arcName, int fileIdx) {
- return (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(arcName, fileIdx);
-}
-
-/* 80152BE0-80152C1C 14D520 003C+00 0/0 0/0 2/2 .text getTevRegKeyAnmP__8daNpcF_cFPci */
-J3DAnmTevRegKey* daNpcF_c::getTevRegKeyAnmP(char* arcName, int fileIdx) {
- return (J3DAnmTevRegKey*)dComIfG_getObjectRes(arcName, fileIdx);
-}
-
-/* 80152C1C-80152C80 14D55C 0064+00 0/0 0/0 38/38 .text
- * setMcaMorfAnm__8daNpcF_cFP18J3DAnmTransformKeyffiii */
-BOOL daNpcF_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf, int i_attr,
- int i_start, int i_end) {
- mpMorf->setAnm(i_anm, i_attr, i_morf, i_rate, (f32)i_start, (f32)i_end);
- return true;
-}
-
-/* 80152C80-80152CC4 14D5C0 0044+00 0/0 0/0 25/25 .text
- * setBckAnm__8daNpcF_cFP15J3DAnmTransformfiiib */
-BOOL daNpcF_c::setBckAnm(J3DAnmTransform* i_bck, f32 i_rate, int i_attr, int i_start, int i_end,
- bool i_modify) {
- return mBckAnm.init(i_bck, true, i_attr, i_rate, (s16)i_start, (s16)i_end, i_modify);
-}
-
-/* 80152CC4-80152D04 14D604 0040+00 0/0 0/0 32/32 .text
- * setBtpAnm__8daNpcF_cFP16J3DAnmTexPatternP12J3DModelDatafi */
-BOOL daNpcF_c::setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_rate,
- int i_attr) {
- return mBtpAnm.init(i_modelData, i_btp, true, i_attr, i_rate, 0, -1);
-}
-
-/* 80152D04-80152D44 14D644 0040+00 0/0 0/0 26/26 .text
- * setBtkAnm__8daNpcF_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi */
-BOOL daNpcF_c::setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_rate,
- int i_attr) {
- return mBtkAnm.init(i_modelData, i_btk, true, i_attr, i_rate, 0, -1);
-}
-
-/* 80152D44-80152D84 14D684 0040+00 0/0 0/0 2/2 .text
- * setBrkAnm__8daNpcF_cFP15J3DAnmTevRegKeyP12J3DModelDatafi */
-BOOL daNpcF_c::setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 i_rate,
- int i_attr) {
- return mBrkAnm.init(i_modelData, i_brk, true, i_attr, i_rate, 0, -1);
-}
-
-/* 80152D84-80152DE0 14D6C4 005C+00 1/1 0/0 40/40 .text setEnvTevColor__8daNpcF_cFv */
-void daNpcF_c::setEnvTevColor() {
- tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mGndChk);
- tevStr.room_no = dComIfG_Bgsp().GetRoomId(mGndChk);
-}
-
-/* 80152DE0-80152E24 14D720 0044+00 1/1 0/0 40/40 .text setRoomNo__8daNpcF_cFv */
-void daNpcF_c::setRoomNo() {
- int room_id = dComIfG_Bgsp().GetRoomId(mGndChk);
- fopAcM_SetRoomNo(this, room_id);
- mCcStts.SetRoomId(room_id);
-}
-
-/* 80152E24-80152EC4 14D764 00A0+00 1/1 0/0 0/0 .text chkEndAnm__8daNpcF_cFf */
-BOOL daNpcF_c::chkEndAnm(f32 param_0) {
- switch (mpMorf->getPlayMode()) {
- case 2:
- return mpMorf->isLoop();
- case 0:
- case 1:
- return mpMorf->isStop() && mpMorf->getPlaySpeed() == 0.0f && param_0 != 0.0f;
- case 3:
- default:
- return false;
- }
-}
-
-/* 80152EC4-80152F40 14D804 007C+00 1/1 0/0 0/0 .text chkEndAnm__8daNpcF_cFP12J3DFrameCtrlf */
-/**
- * Check whether an animation has ended or looped.
- * @param frameCtrl The frame controller for the animation.
- * @param prevRate The previous rate of animation.
- * @return `true` if the animation has just stopped or just looped, `false` otherwise. Returns
- * `false` if the animation is two-way (attribute 3 or 4).
- */
-BOOL daNpcF_c::chkEndAnm(J3DFrameCtrl* frameCtrl, f32 prevRate) {
- switch (frameCtrl->getAttribute()) {
- case 2:
- return frameCtrl->checkState(2);
- case 0:
- case 1:
- return frameCtrl->checkState(1) && frameCtrl->getRate() == 0.0f && prevRate != 0.0f;
- case 3:
- default:
- return false;
- }
-}
-
-/* 80152F40-80153150 14D880 0210+00 1/1 0/0 2/2 .text playAllAnm__8daNpcF_cFv */
-BOOL daNpcF_c::playAllAnm() {
- f32 rate;
- if (!(mAnmFlags & ANM_PAUSE_EXPRESSION)) {
- if (mAnmFlags & ANM_PLAY_BCK) {
- rate = mBckAnm.getPlaySpeed();
- if (mAnmFlags & ANM_PAUSE_BCK) {
- mBckAnm.setPlaySpeed(0.0f);
- }
- mBckAnm.play();
- if (chkEndAnm(mBckAnm.getFrameCtrl(), rate)) {
- mExpressionLoops++;
- }
- mBckAnm.setPlaySpeed(rate);
- }
- if (mAnmFlags & ANM_PLAY_BTP) {
- rate = mBtpAnm.getPlaySpeed();
- if (mAnmFlags & ANM_PAUSE_BTP) {
- mBtpAnm.setPlaySpeed(0.0f);
- }
- mBtpAnm.play();
- mBtpAnm.setPlaySpeed(rate);
- if (mAnmFlags & ANM_FLAG_800) {
- if (chkEndAnm(mBtpAnm.getFrameCtrl(), rate)) {
- mBtpTimer = cLib_getRndValue(90, 90);
- mBtpAnm.setPlaySpeed(0.0f);
- }
- } else {
- mBtpTimer = 0;
- }
- if (cLib_calcTimer(&mBtpTimer) == 0) {
- mBtpAnm.setPlaySpeed(1.0f);
- }
- }
- }
- if (mAnmFlags & ANM_PLAY_MORF) {
- rate = mpMorf->getPlaySpeed();
- if (mAnmFlags & ANM_PAUSE_MORF) {
- mpMorf->setPlaySpeed(0.0f);
- mpMorf->play(mPolySound, mReverb);
- mpMorf->setPlaySpeed(rate);
- } else {
- mpMorf->play(mPolySound, mReverb);
- if (chkEndAnm(rate)) {
- mMotionLoops++;
- }
- }
- }
- if (mAnmFlags & ANM_PLAY_BTK) {
- rate = mBtkAnm.getPlaySpeed();
- if (mAnmFlags & ANM_PAUSE_BTK) {
- mBtkAnm.setPlaySpeed(0.0f);
- }
- if (!ctrlBtk()) {
- mBtkAnm.play();
- }
- mBtkAnm.setPlaySpeed(rate);
- }
- if (mAnmFlags & ANM_PLAY_BRK) {
- rate = mBrkAnm.getPlaySpeed();
- if (mAnmFlags & ANM_PAUSE_BRK) {
- mBrkAnm.setPlaySpeed(0.0f);
- }
- mBrkAnm.play();
- mBrkAnm.setPlaySpeed(rate);
- }
- mAnmFlags &= ~ANM_PAUSE_ALL;
- return true;
-}
-
-/* 80153150-80153264 14DA90 0114+00 0/0 0/0 25/25 .text
- * playExpressionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData */
-/**
- * Set the expression animation.
- * @param anm The animation data, a two-dimensional array of data pointers, indexed first by
- * the expression index and second by the expression phase. Each piece of data consists of
- * an animation index for that phase of the expression, the number of interpolation frames, and
- * the number of loops before moving on to the next phase (or 0 for the last phase).
- */
-// NONMATCHING regalloc
-void daNpcF_c::playExpressionAnm(daNpcF_c::daNpcF_anmPlayData*** anm) {
- daNpcF_anmPlayData* playData = NULL;
- if (anm[mExpression] != NULL) {
- playData = anm[mExpression][mExpressionPhase];
- }
- if (playData != NULL) {
- if (mExpressionPrevPhase == mExpressionPhase && playData->numLoops > 0 &&
- playData->numLoops <= mExpressionLoops)
- {
- mExpressionPhase++;
- playData = anm[mExpression][mExpressionPhase];
- }
- if (playData != NULL && mExpressionPrevPhase != mExpressionPhase) {
- setExpressionAnm(playData->idx, true);
- f32 morf = playData->morf;
- if (mExpressionPhase == 0 && 0.0f <= mExpressionMorfOverride) {
- morf = mExpressionMorfOverride;
- }
- mExpressionMorf = morf;
- mpMorf->setMorf(morf);
- }
- }
- mExpressionPrevPhase = mExpressionPhase;
-}
-
-/* 80153264-8015337C 14DBA4 0118+00 0/0 0/0 37/37 .text
- * playMotionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData */
-/**
- * Set the motion animation.
- * @param anm The animation data, a two-dimensional array of data pointers, indexed first by
- * the motion index and second by the motion phase. Each piece of data consists of
- * an animation index for that phase of the motion, the number of interpolation frames, and the
- * number of loops before moving on to the next phase (or 0 for the last phase).
- */
-// NONMATCHING regalloc
-void daNpcF_c::playMotionAnm(daNpcF_c::daNpcF_anmPlayData*** anm) {
- daNpcF_anmPlayData* playData = NULL;
- if (anm[mMotion] != NULL) {
- playData = anm[mMotion][mMotionPhase];
- }
- if (playData != NULL) {
- if (mMotionPrevPhase == mMotionPhase && playData->numLoops > 0 &&
- playData->numLoops <= mMotionLoops)
- {
- mMotionPhase++;
- playData = anm[mMotion][mMotionPhase];
- }
- if (playData != NULL && mMotionPrevPhase != mMotionPhase) {
- setMotionAnm(playData->idx, 0.0f);
- f32 morf = playData->morf;
- if (mMotionPhase == 0 && 0.0f <= mMotionMorfOverride) {
- morf = mMotionMorfOverride;
- }
- mExpressionMorf = 0.0f;
- mpMorf->setMorf(morf);
- }
- }
- mMotionPrevPhase = mMotionPhase;
-}
-
-/* 8015337C-80153578 14DCBC 01FC+00 0/0 0/0 34/34 .text setLookatMtx__8daNpcF_cFiPif */
-/**
- * Compute the animation matrix for the backbone, neck, or head joint.
- * This matrix is applied to the matrix in `mDoMtx_stack_c::now`.
- * @param i_jointNo The index of the joint in question.
- * @param i_jointList An array of the three indices of the joints for the backbone, neck, and head.
- * @param i_neckHeadAngleRatio The ratio between the neck angle and the head angle.
- */
-void daNpcF_c::setLookatMtx(int i_jointNo, int* i_jointList, f32 i_neckHeadAngleRatio) {
- cXyz pos;
- Mtx baseMtx, invParentMtx;
-
- if (i_jointList[0] == i_jointNo || i_jointList[1] == i_jointNo || i_jointList[2] == i_jointNo) {
- mLookatAngle[1].x = (s16)((f32)mLookatAngle[2].x * i_neckHeadAngleRatio);
- mLookatAngle[1].y = (s16)((f32)mLookatAngle[2].y * i_neckHeadAngleRatio);
- mLookatAngle[1].z = (s16)((f32)mLookatAngle[2].z * i_neckHeadAngleRatio);
-
- MTXCopy(mDoMtx_stack_c::get(), baseMtx);
- pos.set(baseMtx[0][3], baseMtx[1][3], baseMtx[2][3]);
- baseMtx[0][3] = baseMtx[1][3] = baseMtx[2][3] = 0.0f;
-
- mDoMtx_stack_c::ZXYrotS(mCurAngle);
- if (i_jointList[0] != i_jointNo) {
- if (i_jointList[1] == i_jointNo) {
- mDoMtx_stack_c::ZXYrotM(mLookatAngle[0]);
- } else if (i_jointList[2] == i_jointNo) {
- mDoMtx_stack_c::ZXYrotM(mLookatAngle[1]);
- }
- }
- mDoMtx_stack_c::inverse();
- MTXCopy(mDoMtx_stack_c::get(), invParentMtx);
-
- mDoMtx_stack_c::transS(pos);
- mDoMtx_stack_c::XYZrotM(mCurAngle);
- if (i_jointList[0] == i_jointNo) {
- mDoMtx_stack_c::ZXYrotM(mLookatAngle[0]);
- } else if (i_jointList[1] == i_jointNo) {
- mDoMtx_stack_c::ZXYrotM(mLookatAngle[1]);
- } else if (i_jointList[2] == i_jointNo) {
- mDoMtx_stack_c::ZXYrotM(mLookatAngle[2]);
- }
- mDoMtx_stack_c::concat(invParentMtx);
- mDoMtx_stack_c::concat(baseMtx);
- }
-}
-
-/* 80153578-80153658 14DEB8 00E0+00 0/0 0/0 13/13 .text hitChk2__8daNpcF_cFP8dCcD_Cylii
- */
-BOOL daNpcF_c::hitChk2(dCcD_Cyl* i_ccCyl, BOOL param_1, BOOL param_2) {
- static_cast<dCcD_Stts*>(i_ccCyl->GetStts())->Move();
- if (mDamageTimer == 0 && i_ccCyl->ChkTgHit()) {
- fopAc_ac_c* hit_actor = i_ccCyl->GetTgHitAc();
- if (hit_actor != NULL) {
- field_0x990 = fopAcM_searchActorAngleY(this, hit_actor) - mCurAngle.y;
- if (fopAcM_GetName(hit_actor) == PROC_NPC_TK) {
- if (param_1) {
- static_cast<daNPC_TK_c*>(hit_actor)->setBump();
- return true;
- } else {
- return false;
- }
- } else {
- if (param_2) {
- return true;
- } else {
- return false;
- }
- }
- }
- }
- i_ccCyl->ClrTgHit();
- return false;
-}
-
-/* 80153658-80153718 14DF98 00C0+00 0/0 0/0 12/12 .text setDamage__8daNpcF_cFiii */
-void daNpcF_c::setDamage(int i_timer, int i_expression, int i_motion) {
- if (i_expression >= 0) {
- setExpression(i_expression, 0.0f);
- }
- if (i_motion >= 0) {
- setMotion(i_motion, 0.0f, true);
- }
- field_0x984[0] = 8192.0f;
- field_0x984[2] = 12743.0f;
- field_0x992 = 0x4000;
- mTotalDamageTimer = i_timer;
- mDamageTimer = mTotalDamageTimer;
- speed.setall(0.0f);
- speedF = 0.0f;
- mIsDamaged = true;
-}
-
-/* 80153718-8015387C 14E058 0164+00 0/0 0/0 81/81 .text ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci
- */
-int daNpcF_c::ctrlMsgAnm(int& o_expression, int& o_motion, fopAc_ac_c* param_2, BOOL param_3) {
- o_expression = -1;
- o_motion = -1;
- if (param_3 || eventInfo.checkCommandTalk() || mStaffID != -1) {
- fopAc_ac_c* talkPartner = dComIfGp_event_getTalkPartner();
- if (talkPartner == param_2) {
- msg_class* actor = dMsgObject_c::getActor();
- if (actor->mode == dEvtCmd_INDEMO_e
- || actor->mode == dEvtCmd_INDOOR_e)
- {
- field_0x9a4 = -1;
- } else if (actor->mode == dEvtCmd_INCATCH_e) {
- if (actor->msg_idx != field_0x9a4) {
- o_expression = dComIfGp_getMesgFaceAnimeAttrInfo();
- o_motion = dComIfGp_getMesgAnimeAttrInfo();
- field_0x9a4 = actor->msg_idx;
- }
- if (dMsgObject_c::isMouthCheck()) {
- mAnmFlags &= ~ANM_PAUSE_EXPRESSION;
- } else {
- mAnmFlags |= ANM_PAUSE_EXPRESSION;
- }
- mMsgTimer = 20;
- } else {
- if (mAnmFlags & ANM_PAUSE_EXPRESSION) {
- mAnmFlags &= ~ANM_PAUSE_EXPRESSION;
- }
- field_0x9a4 = -1;
- }
- } else {
- field_0x9a4 = -1;
- if (mMsgTimer != 0) {
- mMsgTimer = 1;
- }
- }
- }
- if (!param_3) {
- cLib_calcTimer(&mMsgTimer);
- }
- return mMsgTimer;
-}
-
-/* 8015387C-80153954 14E1BC 00D8+00 0/0 0/0 45/45 .text orderEvent__8daNpcF_cFiPcUsUsUcUs
- */
-void daNpcF_c::orderEvent(int i_speak, char* i_evtName, u16 param_2, u16 i_priority, u8 i_mapToolID,
- u16 i_flag) {
- if (i_evtName != NULL) {
- mEventIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, 0xff);
- fopAcM_orderOtherEventId(this, mEventIdx, i_mapToolID, param_2, i_priority, i_flag);
- } else if (!mTwilight || daPy_py_c::checkNowWolfEyeUp()) {
- if ((attention_info.flags & 8) || (attention_info.flags & 2)) {
- eventInfo.onCondition(dEvtCnd_CANTALK_e);
- if (i_speak) {
- fopAcM_orderSpeakEvent(this, 0, 0);
- }
- }
- }
-}
-
-/* 80153954-801539F0 14E294 009C+00 0/0 0/0 31/31 .text changeEvent__8daNpcF_cFPcPcUsUs
- */
-void daNpcF_c::changeEvent(char* i_arcName, char* i_evtName, u16 param_2, u16 param_3) {
- if (i_arcName != NULL) {
- eventInfo.setArchiveName(i_arcName);
- dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
- }
- mEventIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, 0xff);
- dComIfGp_getEvent().reset(this);
- fopAcM_orderChangeEventId(this, mEventIdx, param_2, param_3);
-}
-
-/* 801539F0-80153A78 14E330 0088+00 0/0 0/0 21/21 .text chkActorInSight__8daNpcF_cFP10fopAc_ac_cf
- */
-BOOL daNpcF_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_fovY) {
- s16 tmp = mHeadAngle.y;
- s16 angle = fopAcM_searchActorAngleY(this, i_actor) - tmp;
- s16 abs_angle = abs(angle);
- return i_fovY == 180.0f || abs_angle < cM_deg2s(i_fovY);
-}
-
-/* 80153A78-80153BDC 14E3B8 0164+00 1/1 0/0 0/0 .text
- * chkActorInArea__8daNpcF_cFP10fopAc_ac_c4cXyz4cXyzs */
-/**
- * Check whether an actor is in an elliptic cylinder region.
- * @param i_actor The actor to check.
- * @param i_center The center of the cylinder.
- * @param i_bounds The dimensions of the bounding box.
- * @param i_angleY The angle to align the axis of the ellipse.
- * @return Whether the actor's position vector lies in the elliptic cylinder.
- */
-BOOL daNpcF_c::chkActorInArea(fopAc_ac_c* i_actor, cXyz i_center, cXyz i_bounds, s16 i_angleY) {
- cXyz delta, relPos;
- BOOL ret = false;
-
- mDoMtx_stack_c::YrotS(-i_angleY);
- mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z);
- mDoMtx_stack_c::multVec(&i_actor->current.pos, &relPos);
- f32 boundX = fabsf(i_bounds.x);
- f32 boundZ = fabsf(i_bounds.z);
- f32 posX = fabsf(relPos.x);
- f32 posZ = fabsf(relPos.z);
- delta = i_center - i_actor->current.pos;
-
- if ((posX * posX) / (boundX * boundX) + (posZ * posZ) / (boundZ * boundZ) <= 1.0f
- && -i_bounds.y < delta.y && delta.y < i_bounds.y)
- {
- ret = true;
- }
-
- return ret;
-}
-
-/* 80153BDC-80153D1C 14E51C 0140+00 0/0 0/0 25/25 .text
- * chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci */
-/**
- * Check whether an actor lies within another actor's region of attention.
- * @param i_actorCheck The actor to check.
- * @param i_actorAttn The actor whose attention region we are using.
- * @param i_distIndex An index into the distance table to determine the attention region.
- * @return Whether `actorCheck` is within the region of attention of `actorAttn`.
- */
-BOOL daNpcF_c::chkActorInAttnArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorAttn,
- int i_distIndex) {
- BOOL ret = false;
- f32 neg_lower_y = dComIfGp_getAttention().getDistTable(i_distIndex).mLowerY * -1.0f;
- f32 neg_upper_y = dComIfGp_getAttention().getDistTable(i_distIndex).mUpperY * -1.0f;
- cXyz center = i_actorAttn->current.pos;
- cXyz bounds;
- bounds.x = dComIfGp_getAttention().getDistTable(i_distIndex).mDistMax;
- bounds.y = (fabsf(neg_lower_y) + fabsf(neg_upper_y)) / 2.0f;
- bounds.z = dComIfGp_getAttention().getDistTable(i_distIndex).mDistMax;
- center.y = bounds.y + (center.y + neg_upper_y);
- if (chkActorInArea(i_actorCheck, center, bounds, i_actorAttn->shape_angle.y)) {
- ret = true;
- }
- return ret;
-}
-
-/* 80153D1C-80153D84 14E65C 0068+00 0/0 0/0 118/118 .text initTalk__8daNpcF_cFiPP10fopAc_ac_c */
-BOOL daNpcF_c::initTalk(int i_flowID, fopAc_ac_c** param_1) {
- mFlow.init(this, i_flowID, 0, param_1);
- f32 tmp = 0.0f;
- speedF = tmp;
- speed.set(tmp, tmp, tmp);
- mOrderSpeakEvt = false;
- field_0x9ec = false;
- return true;
-}
-
-/* 80153D84-80153EF4 14E6C4 0170+00 0/0 0/0 119/119 .text talkProc__8daNpcF_cFPiiPP10fopAc_ac_c */
-BOOL daNpcF_c::talkProc(int* param_0, BOOL param_1, fopAc_ac_c** i_actorP) {
- BOOL ret = false;
- int i1, motion, expression, i2;
- motion = -1;
- expression = -1;
- if (dMsgObject_c::isMsgSendControl()) {
- if (param_1) {
- dMsgObject_c::offMsgSendControl();
- }
- } else if (mFlow.doFlow(this, i_actorP, 0)) {
- ret = true;
- } else {
- if (mFlow.getMsg() != NULL && (mFlow.getMsg()->mode == 2 || mFlow.getMsg()->mode == 6)
- && param_0 != NULL) {
- for (int i = 0; param_0[i] > 0; i++) {
- if (param_0[i] == mFlow.getMsgNo()) {
- ret = true;
- break;
- }
- }
- }
- if (mFlow.checkEventRender(&i1, &motion, &expression, &i2)) {
- if (expression != -1) {
- setExpression(expression, -1.0f);
- }
- if (motion != -1) {
- setMotion(motion, -1.0f, false);
- }
- }
- }
- return ret;
-}
-
-/* 80153EF4-801540A4 14E834 01B0+00 1/1 0/0 55/55 .text turn__8daNpcF_cFsfi */
-BOOL daNpcF_c::turn(s16 i_targetAngle, f32 i_rate, int i_direction) {
- int target_angle = i_targetAngle;
- if (mTurnAmount == 0) {
- mTurnStepNum = fabsf(cM_sht2d((s16)(current.angle.y - target_angle)));
- mTurnStepNum = (mTurnStepNum / 180.0f) * i_rate;
- mTurnStepNum = (int)mTurnStepNum + 1;
- if (mTurnStepNum < 8.0f) {
- mTurnStepNum = 8.0f;
- }
- mTurnStartAngle = current.angle.y;
- }
-
- s16 turn_start_angle = mTurnStartAngle;
- if (i_direction == 0) {
- i_direction = (s16)(target_angle - turn_start_angle) >= 0 ? 1 : -1;
- }
-
- u16 angle_diff = target_angle - turn_start_angle;
- int signed_angle_diff = angle_diff;
- if (i_direction < 0) {
- signed_angle_diff = -(u16)(0xffff - angle_diff);
- }
-
- int turn_angle = (int)(signed_angle_diff * cM_ssin(mTurnAmount));
- mTurnAmount = (int)((f32)mTurnAmount + (f32)0x4000 / mTurnStepNum);
- if ((u16)mTurnAmount >= 0x4000) {
- current.angle.y = i_targetAngle;
- mTurnAmount = 0x4000;
- } else {
- current.angle.y = mTurnStartAngle + turn_angle;
- }
-
- return current.angle.y - (s16)i_targetAngle == 0;
-}
-
-/* 801540A4-80154250 14E9E4 01AC+00 0/0 0/0 58/58 .text step__8daNpcF_cFsiii */
-BOOL daNpcF_c::step(s16 i_targetAngle, int i_expression, int i_motion, int i_rate) {
- if (mTurnMode == 0) {
- if ((int)fabsf(cM_sht2d((s16)(i_targetAngle - mCurAngle.y))) > 40) {
- if (i_expression >= 0) {
- setExpression(i_expression, -1.0f);
- }
- if (i_motion >= 0) {
- setMotion(i_motion, -1.0f, false);
- }
- }
-
- mTurnTargetAngle = i_targetAngle;
- mTurnAmount = 0;
- if (mCurAngle.y == mTurnTargetAngle) {
- mTurnMode++;
- }
-
- current.angle.y = mCurAngle.y;
- shape_angle.y = current.angle.y;
- mTurnMode++;
- } else if (mTurnMode == 1) {
- if (turn(mTurnTargetAngle, i_rate, 0)) {
- shape_angle.y = current.angle.y;
- mCurAngle.y = current.angle.y;
- mOldAngle.y = current.angle.y;
- mTurnMode++;
- } else {
- shape_angle.y = current.angle.y;
- mCurAngle.y = current.angle.y;
- }
- }
-
- return mTurnMode > 1;
-}
-
-/* 80154250-80154278 14EB90 0028+00 0/0 0/0 81/81 .text setAngle__8daNpcF_cFs */
-void daNpcF_c::setAngle(s16 i_angle) {
- current.angle.y = i_angle;
- shape_angle.y = current.angle.y;
- mCurAngle.y = current.angle.y;
- mOldAngle.y = mCurAngle.y;
- old.angle.y = current.angle.y;
-}
-
-/* 80154278-801542A0 14EBB8 0028+00 0/0 0/0 36/36 .text getDistTableIdx__8daNpcF_cFii */
-u8 daNpcF_getDistTableIdx(int param_0, int param_1); // fwd dec to get a match
-
-u8 daNpcF_c::getDistTableIdx(int param_0, int param_1) {
- return daNpcF_getDistTableIdx(param_0, param_1);
-}
-
-/* 801542A0-8015436C 14EBE0 00CC+00 0/0 0/0 6/6 .text getEvtAreaTagP__8daNpcF_cFii */
-// NONMATCHING regalloc
-fopAc_ac_c* daNpcF_c::getEvtAreaTagP(int i_type, int i_no) {
- mFindCount = 0;
- mSrchActorName = PROC_TAG_EVTAREA;
- fpcM_Search(this->srchActor, this);
-
- for (int i = 0; i < mFindCount; i++) {
- daTag_EvtArea_c* evt_area = static_cast<daTag_EvtArea_c*>(mFindActorPList[i]);
- if (i_type == evt_area->getType() && i_no == evt_area->getNo()) {
- return evt_area;
- }
- }
-
- return NULL;
-}
-
-/* 8015436C-80154730 14ECAC 03C4+00 0/0 0/0 12/12 .text getAttnActorP__8daNpcF_cFiPFPvPv_Pvffffsii
- */
-// NONMATCHING regalloc
-fopAc_ac_c* daNpcF_c::getAttnActorP(BOOL i_playerAttn, fpcLyIt_JudgeFunc i_searchFunc, f32 i_radius,
- f32 i_offsetY1, f32 i_offsetY2, f32 i_fovY, s16 i_sightAngle,
- int param_7, BOOL param_8) {
- fopAc_ac_c* actor = NULL;
- int rnd = 450 + (int)((cM_rnd() - 0.5f) * 450.0f);
- int rnd2 = param_7 + (int)((cM_rnd() - 0.5f) * param_7);
- int r28 = 0;
- f32 minDistance = 1000000000.0f;
- if (mAttnChangeTimer != 0) {
- daPy_py_c* player = daPy_getPlayerActorClass();
- fopAcM_SearchByID(player->getGrabActorID(), &actor);
- if (mAttnActor[mAttnIdx].getActorP() != actor) {
- cLib_calcTimer(&mAttnChangeTimer);
- }
- actor = mAttnActor[mAttnIdx].getActorP();
- }
- if (actor == NULL) {
- mAttnChangeTimer = 0;
- if (i_playerAttn) {
- i_radius = fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass());
- }
- mFindCount = 0;
- fpcEx_Search(i_searchFunc, this);
- for (int i = 0; i < mFindCount; i++) {
- if (chkPointInArea(getAttentionPos(mFindActorPList[i]), attention_info.position,
- i_radius, i_offsetY1, i_offsetY2, 0) &&
- chkActorInSight2(mFindActorPList[i], i_fovY, i_sightAngle))
- {
- int j;
- for (j = 0; j < 5; j++) {
- // !@Bug I think mAttnActorTimer index should be j
- if (mFindActorPList[i] == mAttnActor[j].getActorP() && mAttnActorTimer[i] != 0)
- {
- break;
- }
- }
-
- if (j == 5) {
- f32 dist2 = fopAcM_searchActorDistanceXZ(this, mFindActorPList[i]);
- if (dist2 < minDistance) {
- actor = mFindActorPList[i];
- minDistance = dist2;
- }
- }
- }
- }
-
- if (actor == NULL && i_playerAttn) {
- daPy_py_c* player = daPy_getPlayerActorClass();
- fopAcM_SearchByID(player->getGrabActorID(), &actor);
- r28 = 1;
- }
- if (actor != NULL) {
- int minInd, j;
- int dist3 = 900;
- minInd = 0;
- for (j = 0; j < 5; j++) {
- if (mAttnActorTimer[j] < dist3) {
- dist3 = mAttnActorTimer[j];
- minInd = j;
- }
- }
- mAttnActor[minInd].entry(actor);
- if (param_8) {
- mAttnActorTimer[minInd] = r28 == 1 ? 0 : rnd;
- } else {
- mAttnActorTimer[minInd] = 0;
- }
-
- mAttnChangeTimer = (r28 != 1) ? rnd2 : 30;
- mAttnIdx = minInd;
- }
- }
- if (actor == NULL) {
- mAttnChangeTimer = 0;
- }
- return actor;
-}
-
-/* 80154730-80154834 14F070 0104+00 2/2 0/0 0/0 .text chkActorInSight2__8daNpcF_cFP10fopAc_ac_cfs
- */
-BOOL daNpcF_c::chkActorInSight2(fopAc_ac_c* i_actor, f32 i_fovY, s16 i_sightAngle) {
- if (i_fovY < 180.0f) {
- s16 fov_y = cM_deg2s(i_fovY);
- cXyz actor_attn_pos = getAttentionPos(i_actor);
- cSGlobe globe(attention_info.position - actor_attn_pos);
- cSAngle s_ang_diff = cSAngle(globe.U().Inv()) - i_sightAngle;
- s16 ang_diff = s_ang_diff.Val();
- if (ang_diff < 0) {
- ang_diff = -ang_diff;
- }
- return ang_diff <= fov_y;
- } else {
- return true;
- }
-}
-
-/* 80154834-801548F4 14F174 00C0+00 2/2 0/0 0/0 .text chkPointInArea__8daNpcF_cF4cXyz4cXyzfffs */
-BOOL daNpcF_c::chkPointInArea(cXyz i_point, cXyz param_1, f32 i_radius, f32 i_offsetY1,
- f32 i_offsetY2, s16 i_angleY) {
- cXyz bounds, center;
-
- f32 lower = i_offsetY2;
- f32 upper = i_offsetY1;
-
- if (i_offsetY1 < i_offsetY2) {
- lower = i_offsetY1;
- upper = i_offsetY2;
- }
-
- bounds.set(i_radius, fabsf(upper - lower) / 2.0f, i_radius);
-
- center = param_1;
- center.y += lower;
- center.y += bounds.y;
-
- return chkPointInArea(i_point, center, bounds, i_angleY);
-}
-
-/* 801548F4-8015496C 14F234 0078+00 1/1 0/0 0/0 .text chkPointInArea__8daNpcF_cF4cXyz4cXyz4cXyzs
- */
-BOOL daNpcF_c::chkPointInArea(cXyz i_point, cXyz i_center, cXyz i_bounds, s16 i_angleY) {
- return daNpcF_chkPointInArea(i_point, i_center, i_bounds, i_angleY);
-}
-
-/* 8015496C-801549E0 14F2AC 0074+00 3/3 0/0 0/0 .text getAttentionPos__8daNpcF_cFP10fopAc_ac_c */
-cXyz daNpcF_c::getAttentionPos(fopAc_ac_c* i_ActorP) {
- cXyz pos = i_ActorP->attention_info.position;
-
- if (fopAcM_GetName(i_ActorP) == PROC_ALINK) {
- pos.y -= daPy_py_c::getAttentionOffsetY();
- }
-
- return pos;
-}
-
-/* 801549E0-80154BD8 14F320 01F8+00 0/0 0/0 18/18 .text chkFindPlayer2__8daNpcF_cFis */
-BOOL daNpcF_c::chkFindPlayer2(BOOL i_hasAttn, s16 i_angle) {
- cXyz attn_pos = getAttentionPos(daPy_getPlayerActorClass());
- int attn_no = i_hasAttn == false ? attention_info.distances[fopAc_attn_SPEAK_e]
- : attention_info.distances[fopAc_attn_TALK_e];
- f32 fvar2 = i_hasAttn == false ? dAttention_c::getDistTable(attn_no).mDistMax
- : dAttention_c::getDistTable(attn_no).mDistMaxRelease;
- f32 fvar3 = dAttention_c::getDistTable(attn_no).mLowerY * -1.0f;
- f32 fvar4 = dAttention_c::getDistTable(attn_no).mUpperY * -1.0f;
- u32 uvar7 = dAttention_c::getDistTable(attn_no).mAngleSelect;
- f32 fvar5 = 180.0f;
- if (uvar7 & 8) {
- fvar5 = 30.0f;
- } else if (uvar7 & 0x10) {
- fvar5 = 45.0f;
- } else if (uvar7 & 0x20) {
- fvar5 = 60.0f;
- } else if (uvar7 & 0x40) {
- fvar5 = 90.0f;
- } else if (uvar7 & 0x80) {
- fvar5 = 110.0f;
- } else if (uvar7 & 0x100) {
- fvar5 = 135.0f;
- }
- if (chkPointInArea(attn_pos, attention_info.position, fvar2, fvar3, fvar4, 0)
- && chkActorInSight2(daPy_getPlayerActorClass(), fvar5, i_angle)) {
- return true;
- }
- return false;
-}
-
-/* 80154BD8-80154DA8 14F518 01D0+00 1/1 0/0 0/0 .text setHitodamaPrtcl__8daNpcF_cFv */
-void daNpcF_c::setHitodamaPrtcl() {
- cXyz pos;
-
- field_0x9d0 = (u16)(field_0x9d2 * 2);
- field_0x9b8.x = cM_ssin(field_0x9d2) * 8.0f;
- field_0x9b8.y = cM_ssin(field_0x9d0) * 4.0f;
- field_0x9b8.z = field_0x9b8.x * -cM_ssin(shape_angle.y);
-
- field_0x9b8.x *= cM_scos(shape_angle.y);
- field_0x9d2 += 0x400;
- pos.x = eyePos.x + field_0x9b8.x + field_0x9c4.x;
- pos.y = eyePos.y + field_0x9b8.y + field_0x9c4.y;
- pos.z = eyePos.z + field_0x9b8.z + field_0x9c4.z;
-
- for (int i = 0; i < 2; i++) {
- static u16 id[2] = {0x8497, 0x8498};
- mHitodamaParticleKey[i] =
- dComIfGp_particle_set(mHitodamaParticleKey[i], id[i], &pos, &mCurAngle, NULL);
- JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHitodamaParticleKey[i]);
- if (emitter != NULL) {
- u8 alpha;
- if (dComIfGs_wolfeye_effect_check() == 0) {
- alpha = 0xff;
- } else {
- alpha = 0;
- }
- emitter->setGlobalTranslation(pos.x, pos.y, pos.z);
- emitter->setGlobalAlpha(alpha);
- }
- }
-}
-
-/* 80154DA8-80154E54 14F6E8 00AC+00 1/1 0/0 1/1 .text
- * daNpcF_pntVsLineSegmentLengthSquare2D__FffffffPfPfPf */
-BOOL daNpcF_pntVsLineSegmentLengthSquare2D(f32 i_pntX, f32 i_pntZ, f32 i_startX, f32 i_startZ,
- f32 i_endX, f32 i_endZ, f32* o_projX, f32* o_projZ,
- f32* o_dist2) {
- BOOL ret = false;
- f32 len2;
- f32 line_x = i_endX - i_startX;
- f32 line_z = i_endZ - i_startZ;
- len2 = line_x * line_x + line_z * line_z;
-
- if (0.0f == len2) {
- *o_dist2 = 0.0f;
- return false;
- }
-
- f32 prm = (line_x * (i_pntX - i_startX) + line_z * (i_pntZ - i_startZ)) / len2;
-
- if (0.0f <= prm && prm <= 1.0f) {
- ret = true;
- }
-
- *o_projX = i_startX + line_x * prm;
- *o_projZ = i_startZ + line_z * prm;
- //!@bug The last `o_projX` should be `o_projZ`
- *o_dist2 = (*o_projX - i_pntX) * (*o_projX - i_pntX)
- + (*o_projZ - i_pntZ) * (*o_projX - i_pntZ);
- return ret;
-}
-
-/* 80154E54-80154E5C 14F794 0008+00 1/1 0/0 0/0 .text daNpcF_putNurbs__FP4dPntiiP4dPnti
- */
-static u16 daNpcF_putNurbs(dPnt* param_0, int param_1, int param_2, dPnt* param_3, int param_4) {
- return false;
-}
-
-/* 80154E5C-8015556C 14F79C 0710+00 1/1 0/0 1/1 .text daNpcF_chkPassed__F4cXyzP4dPntUsUsii */
-BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_isClosed,
- BOOL i_isReversed) {
- cXyz prev_pos, cur_pos, next_pos, pos;
- u16 prev_idx = i_idx;
- u16 next_idx = i_idx;
- daNpcF_incIdx(i_num, next_idx, i_isClosed, false);
- daNpcF_decIdx(i_num, prev_idx, i_isClosed, false);
-
- prev_pos.set(i_points[prev_idx].m_position.x,
- i_points[prev_idx].m_position.y,
- i_points[prev_idx].m_position.z);
- cur_pos.set(i_points[i_idx].m_position.x,
- i_points[i_idx].m_position.y,
- i_points[i_idx].m_position.z);
- next_pos.set(i_points[next_idx].m_position.x,
- i_points[next_idx].m_position.y,
- i_points[next_idx].m_position.z);
-
- f32 dist;
- s16 angle;
- if (prev_idx != i_idx || next_idx != i_idx) {
- if (prev_idx < i_idx && i_idx < next_idx) {
- dist = (next_pos - prev_pos).absXZ();
- angle = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z);
- pos = prev_pos;
- prev_pos.x = pos.x + dist * -1.0f * cM_ssin(angle);
- prev_pos.z = pos.z + dist * -1.0f * cM_scos(angle);
- next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle);
- next_pos.z = pos.z + dist * 2.0f * cM_scos(angle);
- } else if (prev_idx < i_idx) {
- dist = (cur_pos - prev_pos).absXZ();
- angle = cM_atan2s(cur_pos.x - prev_pos.x, cur_pos.z - prev_pos.z);
- pos = cur_pos;
- prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle);
- prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle);
- next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle);
- next_pos.z = pos.z + dist * 2.0f * cM_scos(angle);
- } else if (i_idx < next_idx) {
- dist = (next_pos - cur_pos).absXZ();
- angle = cM_atan2s(next_pos.x - cur_pos.x, next_pos.z - cur_pos.z);
- pos = cur_pos;
- prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle);
- prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle);
- next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle);
- next_pos.z = pos.z + dist * 2.0f * cM_scos(angle);
- }
-
- f32 proj_x, proj_z, proj2_x, proj2_z;
- daNpcF_pntVsLineSegmentLengthSquare2D(i_pos.x, i_pos.z, prev_pos.x, prev_pos.z,
- next_pos.x, next_pos.z, &proj_x, &proj_z, &dist);
- if (cM3d_IsZero(dist)) {
- return false;
- } else {
- daNpcF_pntVsLineSegmentLengthSquare2D(cur_pos.x, cur_pos.z, prev_pos.x, prev_pos.z,
- next_pos.x, next_pos.z, &proj2_x, &proj2_z, &dist);
- s16 angle2;
- if (i_isReversed) {
- angle2 = cM_atan2s(prev_pos.x - next_pos.x, prev_pos.z - next_pos.z);
- } else {
- angle2 = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z);
- }
- u16 angle_diff = abs((s16)(angle2 - cM_atan2s(proj2_x - proj_x, proj2_z - proj_z)));
- return angle_diff > 0x4000;
- }
- } else {
- return false;
- }
-}
-
-/* 8015556C-80155634 14FEAC 00C8+00 1/1 0/0 8/8 .text daNpcF_getGroundAngle__FP13cBgS_PolyInfos */
-s16 daNpcF_getGroundAngle(cBgS_PolyInfo* param_0, s16 param_1) {
- cM3dGPla tmp;
-
- if (dComIfG_Bgsp().ChkPolySafe(*param_0)) {
- if (!dComIfG_Bgsp().GetTriPla(*param_0, &tmp) || !cBgW_CheckBGround(tmp.mNormal.y)) {
- return 0;
- } else {
- return fopAcM_getPolygonAngle(&tmp, param_1);
- }
- } else {
- return 0;
- }
-}
-
-/* 80155634-80155674 14FF74 0040+00 0/0 0/0 69/69 .text daNpcF_chkEvtBit__FUl */
-BOOL daNpcF_chkEvtBit(u32 i_idx) {
- return dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[i_idx]);
-}
-
-/* 80155674-801556B4 14FFB4 0040+00 0/0 0/0 13/13 .text daNpcF_onEvtBit__FUl */
-void daNpcF_onEvtBit(u32 i_idx) {
- dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[i_idx]);
-}
-
-/* 801556B4-801556F4 14FFF4 0040+00 0/0 0/0 6/6 .text daNpcF_chkTmpBit__FUl */
-BOOL daNpcF_chkTmpBit(u32 i_idx) {
- return dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_idx]);
-}
-
-/* 801556F4-80155734 150034 0040+00 0/0 0/0 6/6 .text daNpcF_onTmpBit__FUl */
-void daNpcF_onTmpBit(u32 i_idx) {
- dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_idx]);
-}
-
-/* 80155734-80155774 150074 0040+00 1/1 0/0 36/36 .text daNpcF_offTmpBit__FUl */
-void daNpcF_offTmpBit(u32 i_idx) {
- dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_idx]);
-}
-
-/* 80155774-80155854 1500B4 00E0+00 0/0 2/2 5/5 .text
- * daNpcF_getPlayerInfoFromPlayerList__FiiR4cXyzR5csXyz */
-int daNpcF_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz& param_2, csXyz& param_3) {
- int rv = 0;
-
- dStage_roomDt_c* roomP = dComIfGp_roomControl_getStatusRoomDt(i_roomNo);
- stage_actor_data_class* entries = roomP->getPlayer()->m_entries;
-
- for (int i = 0; i < roomP->getPlayerNum(); entries++, i++) {
- if (param_0 == (u8)entries->base.angle.z) {
- param_2 = entries->base.position;
- param_3 = entries->base.angle;
- rv = 1;
- break;
- }
- }
-
- return rv;
-}
-
-/* 80155854-80155968 150194 0114+00 0/0 0/0 1/1 .text daNpcF_chkDoBtnEqSpeak__FP10fopAc_ac_c */
-bool daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_ActorP) {
- bool ret = 0;
-
- if (daPy_getPlayerActorClass()->checkPriActorOwn(i_ActorP)) {
- for (int i = 0; i < dComIfGp_getAttention().GetActionCount(); i++) {
- if (dComIfGp_getAttention().ActionTarget(i) == i_ActorP &&
- dComIfGp_getAttention().getActionBtnB() &&
- dComIfGp_getAttention().getActionBtnB()->mType == 3)
- {
- ret = 1;
- };
- }
-
- for (int i = 0; i < dComIfGp_getAttention().GetLockonCount(); i++) {
- if (dComIfGp_getAttention().LockonTarget(i) == i_ActorP &&
- dComIfGp_getAttention().getActionBtnB() &&
- dComIfGp_getAttention().getActionBtnB()->mType == 1)
- {
- ret = 1;
- };
- }
- }
- return ret;
-}
-
-/* 80155968-80155AD4 1502A8 016C+00 1/1 0/0 2/2 .text daNpcF_chkPointInArea__F4cXyz4cXyz4cXyzs */
-BOOL daNpcF_chkPointInArea(cXyz i_point, cXyz i_center, cXyz i_bounds, s16 i_angleY) {
- cXyz delta_aligned;
-
- mDoMtx_stack_c::YrotS(-i_angleY);
- mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z);
- mDoMtx_stack_c::multVec(&i_point, &delta_aligned);
-
- f32 bound_x = fabsf(i_bounds.x);
- f32 bound_z = fabsf(i_bounds.z);
- f32 delta_x = fabsf(delta_aligned.x);
- f32 delta_z = fabsf(delta_aligned.z);
-
- cXyz delta = i_center - i_point;
-
- if (delta.y <= -i_bounds.y || i_bounds.y <= delta.y) {
- return FALSE;
- } else {
- f32 tmp_float1 = (delta_x * delta_x) / (bound_x * bound_x);
- f32 tmp_float2 = (delta_z * delta_z) / (bound_z * bound_z);
- f32 tmp_float3 = tmp_float1 + tmp_float2;
- return tmp_float3 <= 1.0f;
- }
-}
-
-/* 80155AD4-80155AE8 150414 0014+00 1/1 0/0 1/1 .text daNpcF_getDistTableIdx__Fii */
-u8 daNpcF_getDistTableIdx(int param_0, int param_1) {
- return param_0 + param_1 * 0x14 + 0x5e;
-}
-
-/* 80155AE8-80155B54 150428 006C+00 0/0 0/0 6/6 .text daNpcF_clearMessageTmpBit__Fv */
-void daNpcF_clearMessageTmpBit() {
- daNpcF_offTmpBit(0xb);
- daNpcF_offTmpBit(0xc);
- daNpcF_offTmpBit(0xd);
- daNpcF_offTmpBit(0xe);
- daNpcF_offTmpBit(0xf);
- daNpcF_offTmpBit(0x33);
- daNpcF_offTmpBit(0x34);
- daNpcF_offTmpBit(0x35);
- daNpcF_offTmpBit(0x36);
- daNpcF_offTmpBit(0x37);
-}
-
-/* 80155B54-80155BB4 150494 0060+00 1/0 0/0 0/0 .text __dt__20daNpcF_MoveBgActor_cFv */
-daNpcF_MoveBgActor_c::~daNpcF_MoveBgActor_c() {
- /* empty function */
-}
-
-/* 80155BB8-80155BBC 1504F8 0004+00 2/0 0/0 0/0 .text setAttnPos__8daNpcF_cFv */
-void daNpcF_c::setAttnPos() {
- /* empty function */
-}
-
-/* 80155BC0-80155BC8 150500 0008+00 2/0 0/0 0/0 .text main__8daNpcF_cFv */
-BOOL daNpcF_c::main() {
- return true;
-}
-
-/* 80155BC8-80155BCC 150508 0004+00 2/0 0/0 0/0 .text setParam__8daNpcF_cFv */
-void daNpcF_c::setParam() {
- /* empty function */
-}
-
-/* 80155BD0-80155BD8 150510 0008+00 2/0 0/0 0/0 .text drawDbgInfo__8daNpcF_cFv */
-BOOL daNpcF_c::drawDbgInfo() {
- return true;
-}
-
-/* 80155BD8-80155BE0 150518 0008+00 2/0 0/0 0/0 .text ctrlBtk__8daNpcF_cFv */
-BOOL daNpcF_c::ctrlBtk() {
- return false;
-}
-
-/* 80155BE0-80155BE8 150520 0008+00 2/0 0/0 0/0 .text setExpressionAnm__8daNpcF_cFib */
-bool daNpcF_c::setExpressionAnm(int param_0, bool param_1) {
- return true;
-}
-
-/* 80155BE8-80155BEC 150528 0004+00 2/0 0/0 0/0 .text setMotionAnm__8daNpcF_cFif */
-void daNpcF_c::setMotionAnm(int param_0, f32 param_1) {
- /* empty function */
-}
-
-/* 80155BEC-80155BF0 15052C 0004+00 2/0 0/0 0/0 .text setMotion__8daNpcF_cFifi */
-void daNpcF_c::setMotion(int param_0, f32 param_1, int param_2) {
- /* empty function */
-}
-
-/* 80155BF0-80155BF4 150530 0004+00 2/0 0/0 0/0 .text setExpression__8daNpcF_cFif */
-void daNpcF_c::setExpression(int param_0, f32 param_1) {
- /* empty function */
-}
-
-/* 80155E88-80155E90 1507C8 0008+00 1/0 0/0 0/0 .text CreateHeap__20daNpcF_MoveBgActor_cFv */
-bool daNpcF_MoveBgActor_c::CreateHeap() {
- return true;
-}
-
-/* 80155E90-80155E98 1507D0 0008+00 1/0 0/0 0/0 .text Create__20daNpcF_MoveBgActor_cFv */
-bool daNpcF_MoveBgActor_c::Create() {
- return true;
-}
-
-/* 80155E98-80155EA0 1507D8 0008+00 1/0 0/0 0/0 .text Delete__20daNpcF_MoveBgActor_cFv */
-bool daNpcF_MoveBgActor_c::Delete() {
- return true;
-}
-
-/* 80155EA0-80155EA8 1507E0 0008+00 1/0 0/0 0/0 .text Execute__20daNpcF_MoveBgActor_cFPPA3_A4_f */
-bool daNpcF_MoveBgActor_c::Execute(f32 (**param_0)[3][4]) {
- return true;
-}
-
-/* 80155EA8-80155EB0 1507E8 0008+00 1/0 0/0 0/0 .text Draw__20daNpcF_MoveBgActor_cFv */
-bool daNpcF_MoveBgActor_c::Draw() {
- return true;
-}
-
-/* 80155EB0-80155EB8 1507F0 0008+00 1/0 0/0 0/0 .text IsDelete__20daNpcF_MoveBgActor_cFv
- */
-bool daNpcF_MoveBgActor_c::IsDelete() {
- return true;
-}
-
-/* 80155EB8-80155EC0 1507F8 0008+00 1/0 0/0 0/0 .text ToFore__20daNpcF_MoveBgActor_cFv */
-bool daNpcF_MoveBgActor_c::ToFore() {
- return true;
-}
-
-/* 80155EC0-80155EC8 150800 0008+00 1/0 0/0 0/0 .text ToBack__20daNpcF_MoveBgActor_cFv */
-bool daNpcF_MoveBgActor_c::ToBack() {
- return true;
-}
-
-/* 80155EC8-80155ED0 150808 0008+00 2/0 0/0 0/0 .text setExpressionBtp__8daNpcF_cFi */
-bool daNpcF_c::setExpressionBtp(int param_0) {
- return true;
-}
-
-/* 80155ED0-80155FB0 150810 00E0+00 1/0 0/0 0/0 .text __dt__15daNpcF_MatAnm_cFv */
-daNpcF_MatAnm_c::~daNpcF_MatAnm_c() {
- /* empty function */
-}
-
-/* 80155FB0-80156010 1508F0 0060+00 1/0 0/0 0/0 .text __dt__23daBaseNpc_moveBgActor_cFv
- */
-daBaseNpc_moveBgActor_c::~daBaseNpc_moveBgActor_c() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 803926B0-803926E0 01ED10 0030+00 0/0 0/0 0/0 .rodata mCcDObj__11daBaseNpc_c */
-#pragma push
-#pragma force_active on
-SECTION_RODATA u8 const daBaseNpc_c::mCcDObj[48] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x803926B0, &daBaseNpc_c::mCcDObj);
-#pragma pop
-
-/* 803926E0-80392710 01ED40 0030+00 0/0 0/0 0/0 .rodata mCcDObjInfo__8daNpcF_c */
-#pragma push
-#pragma force_active on
-SECTION_RODATA u8 const daNpcF_c::mCcDObjInfo[48] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x803926E0, &daNpcF_c::mCcDObjInfo);
-#pragma pop
-
-/* 80392720-80392725 01ED80 0005+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392720 = ".bck";
-#pragma pop
-
-/* 80392725-8039272A 01ED85 0005+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392725 = ".btp";
-#pragma pop
-
-/* 8039272A-8039272F 01ED8A 0005+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039272A = ".btk";
-#pragma pop
-
-/* 8039272F-8039274A 01ED8F 001B+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039272F = "%.3ff,\t// 注目オフセット\n";
-#pragma pop
-
-/* 8039274A-8039275B 01EDAA 0011+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039274A = "%.3ff,\t// 重力\n";
-#pragma pop
-
-/* 8039275B-80392770 01EDBB 0015+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039275B = "%.3ff,\t// スケ−ル\n";
-#pragma pop
-
-/* 80392770-8039278B 01EDD0 001B+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392770 = "%.3ff,\t// リアル影サイズ\n";
-#pragma pop
-
-/* 8039278B-8039279C 01EDEB 0011+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039278B = "%.3ff,\t// 体重\n";
-#pragma pop
-
-/* 8039279C-803927AD 01EDFC 0011+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039279C = "%.3ff,\t// 高さ\n";
-#pragma pop
-
-/* 803927AD-803927C0 01EE0D 0013+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803927AD = "%.3ff,\t// ひざ丈\n";
-#pragma pop
-
-/* 803927C0-803927CF 01EE20 000F+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803927C0 = "%.3ff,\t// 幅\n";
-#pragma pop
-
-/* 803927CF-803927E8 01EE2F 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803927CF = "%.3ff,\t// 腰のX角上限\n";
-#pragma pop
-
-/* 803927E8-80392801 01EE48 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803927E8 = "%.3ff,\t// 腰のX角下限\n";
-#pragma pop
-
-/* 80392801-8039281A 01EE61 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392801 = "%.3ff,\t// 腰のY角上限\n";
-#pragma pop
-
-/* 8039281A-80392833 01EE7A 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039281A = "%.3ff,\t// 腰のY角下限\n";
-#pragma pop
-
-/* 80392833-8039284C 01EE93 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392833 = "%.3ff,\t// 頭のX角上限\n";
-#pragma pop
-
-/* 8039284C-80392865 01EEAC 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039284C = "%.3ff,\t// 頭のX角下限\n";
-#pragma pop
-
-/* 80392865-8039287E 01EEC5 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392865 = "%.3ff,\t// 頭のY角上限\n";
-#pragma pop
-
-/* 8039287E-80392897 01EEDE 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039287E = "%.3ff,\t// 頭のY角下限\n";
-#pragma pop
-
-/* 80392897-803928B0 01EEF7 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392897 = "%.3ff,\t// 首の回転比率\n";
-#pragma pop
-
-/* 803928B0-803928C9 01EF10 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803928B0 = "%.3ff,\t// 補間フレ−ム\n";
-#pragma pop
-
-/* 803928C9-803928DE 01EF29 0015+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803928C9 = "%d, \t// 会話距離\n";
-#pragma pop
-
-/* 803928DE-803928F3 01EF3E 0015+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803928DE = "%d, \t// 会話角度\n";
-#pragma pop
-
-/* 803928F3-80392908 01EF53 0015+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803928F3 = "%d, \t// 注目距離\n";
-#pragma pop
-
-/* 80392908-8039291D 01EF68 0015+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392908 = "%d, \t// 注目角度\n";
-#pragma pop
-
-/* 8039291D-8039292E 01EF7D 0011+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039291D = "%.3ff,\t// 視界\n";
-#pragma pop
-
-/* 8039292E-80392945 01EF8E 0017+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039292E = "%.3ff,\t// サ−チ距離\n";
-#pragma pop
-
-/* 80392945-8039295C 01EFA5 0017+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392945 = "%.3ff,\t// サ−チ高さ\n";
-#pragma pop
-
-/* 8039295C-80392973 01EFBC 0017+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_8039295C = "%.3ff,\t// サ−チ低さ\n";
-#pragma pop
-
-/* 80392973-80392988 01EFD3 0015+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392973 = "%d, \t// 注目時間\n";
-#pragma pop
-
-/* 80392988-803929A1 01EFE8 0019+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80392988 = "%d, \t// ダメ−ジ期間\n";
-#pragma pop
-
-/* 803929A1-803929B2 01F001 0011+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-// MWCC ignores mapping of some japanese characters using the
-// byte 0x5C (ASCII '\'). This is why this string is hex-encoded.
-SECTION_DEAD static char const* const stringBase_803929A1 =
- "\x25\x64\x2C\x20\x20\x20\x09\x2F\x2F\x20\x20\x95\x5C\x8F\xEE\x0A";
-#pragma pop
-
-/* 803929B2-803929C3 01F012 0011+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803929B2 = "%d, \t// 動作\n";
-#pragma pop
-
-/* 803929C3-803929DA 01F023 0017+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803929C3 = "%d, \t// 注視モ−ド\n";
-#pragma pop
-
-/* 803929DA-803929F7 01F03A 001D+00 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803929DA = "%d, \t// デバグモ−ドON\n";
-#pragma pop
-
-/* 803929F7-80392A18 01F057 001B+06 0/0 0/0 0/0 .rodata None */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_803929F7 = "%d, \t// デバグ情報ON\n";
-#pragma pop
-
-/* 80450FF8-80451000 0004F8 0008+00 0/0 1/1 0/0 .sbss None */
-extern u8 data_80450FF8[8];
-u8 data_80450FF8[8];
-
-/* 80392710-80392710 01ED70 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+#include "d/actor/d_a_npc4.cpp"
diff --git a/src/d/actor/d_a_npc2.cpp b/src/d/actor/d_a_npc2.cpp
new file mode 100644
index 0000000000..556625e862
--- /dev/null
+++ b/src/d/actor/d_a_npc2.cpp
@@ -0,0 +1,677 @@
+#include "d/actor/d_a_npc.h"
+
+static s32 daBaseNpc_chkPnt(cXyz param_0, dPnt* param_1, u16 param_2, u16 param_3, int param_4, int param_5);
+static u16 daBaseNpc_putNurbs(dPnt* i_CPnts, int i_CPntNum, int i_maxPntNum, dPnt* o_curve_p, BOOL i_isClosed);
+static s16 daBaseNpc_getGroundAngle(cBgS_PolyInfo* param_0, s16 param_1);
+
+/* 8014D538-8014D584 147E78 004C+00 2/2 0/0 0/0 .text daBaseNpc_addIdx__FiiPUsi */
+static int daBaseNpc_addIdx(int i_step, int i_num, u16* i_idx, BOOL i_closed) {
+ BOOL new_idx = *i_idx;
+ BOOL ret;
+
+ ret = FALSE;
+ new_idx += i_step;
+
+ if (i_num <= new_idx) {
+ if (i_closed) {
+ new_idx -= i_num * (new_idx / i_num);
+ } else {
+ new_idx = i_num != 0 ? i_num - 1 : 0;
+ ret = TRUE;
+ }
+ }
+
+ *i_idx = (u16)new_idx;
+ return ret;
+}
+
+/* 8014D584-8014D5C4 147EC4 0040+00 2/2 0/0 0/0 .text daBaseNpc_subIdx__FiiPUsi */
+static BOOL daBaseNpc_subIdx(int i_step, int i_num, u16* i_idx, BOOL i_closed) {
+ int new_idx = *i_idx;
+ BOOL ret;
+
+ ret = FALSE;
+ new_idx -= i_step;
+
+ if (new_idx <= 0) {
+ if (i_closed) {
+ new_idx += i_num * (new_idx / i_num + 1);
+ } else {
+ new_idx = 0;
+ ret = TRUE;
+ }
+ }
+
+ *i_idx = (u16)new_idx;
+ return ret;
+}
+
+/* 8014D5C4-8014D620 147F04 005C+00 2/2 0/0 0/0 .text daBaseNpc_incIdx__FiPUsii */
+static void daBaseNpc_incIdx(int i_pathNo, u16* i_pathIdx, BOOL i_pathClosed, int i_pathDirection) {
+ if (i_pathDirection < 0) {
+ daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
+ } else {
+ daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
+ }
+}
+
+/* 8014D620-8014D67C 147F60 005C+00 1/1 0/0 0/0 .text daBaseNpc_decIdx__FiPUsii */
+static void daBaseNpc_decIdx(int i_pathNo, u16* i_pathIdx, BOOL i_pathClosed, int i_pathDirection) {
+ if (i_pathDirection < 0) {
+ daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
+ } else {
+ daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed);
+ }
+}
+
+/* 8014D67C-8014D804 147FBC 0188+00 1/1 0/0 0/0 .text daNpcBase_BBasis__FiiiPi */
+static f32 daNpcBase_BBasis(int i_deg, int i_pntNo, int i_knotNo, int* i_knotVector_p) {
+ f32 basis;
+
+ if (i_deg != 0) {
+ f32 var_f31 = (f32)(i_knotVector_p[i_pntNo + i_deg + 1] - i_knotVector_p[i_pntNo + 1]);
+ if (var_f31 != 0.0f) {
+ var_f31 = ((f32)(i_knotVector_p[i_pntNo + i_deg + 1] - i_knotNo) / var_f31) * daNpcBase_BBasis(i_deg - 1, i_pntNo + 1, i_knotNo, i_knotVector_p);
+ }
+
+ f32 var_f30 = (f32)(i_knotVector_p[i_pntNo + i_deg] - i_knotVector_p[i_pntNo]);
+ if (var_f30 != 0.0f) {
+ var_f30 = ((f32)(i_knotNo - i_knotVector_p[i_pntNo]) / var_f30) * daNpcBase_BBasis(i_deg - 1, i_pntNo, i_knotNo, i_knotVector_p);
+ }
+
+ basis = var_f31 + var_f30;
+ } else if (i_knotVector_p[i_pntNo] <= i_knotNo && i_knotNo <= i_knotVector_p[i_pntNo + 1]) {
+ basis = 1.0f;
+ } else {
+ basis = 0.0f;
+ }
+
+ return basis;
+}
+
+/* 8014D804-8014D81C 148144 0018+00 0/0 0/0 1/1 .text __ct__18daBaseNpc_acMngr_cFv */
+daBaseNpc_acMngr_c::daBaseNpc_acMngr_c() {
+ mActorId = fpcM_ERROR_PROCESS_ID_e;
+}
+
+/* 8014D81C-8014D838 14815C 001C+00 0/0 0/0 9/9 .text entry__18daBaseNpc_acMngr_cFP10fopAc_ac_c */
+void daBaseNpc_acMngr_c::entry(fopAc_ac_c* i_ActorP) {
+ mActorId = fopAcM_GetID(i_ActorP);
+}
+
+/* 8014D838-8014D884 148178 004C+00 0/0 0/0 6/6 .text getActor__18daBaseNpc_acMngr_cFv */
+fopAc_ac_c* daBaseNpc_acMngr_c::getActor() {
+ fopAc_ac_c* ret = NULL;
+ if (fopAcM_SearchByID(mActorId, &ret) && ret != NULL) {
+ return ret;
+ }
+
+ return NULL;
+}
+
+/* 8014D884-8014D998 1481C4 0114+00 1/0 0/0 0/0 .text calc__18daBaseNpc_matAnm_cCFP11J3DMaterial
+ */
+void daBaseNpc_matAnm_c::calc(J3DMaterial* i_material) const {
+ J3DMaterialAnm::calc(i_material);
+
+ for (u32 i = 0; i < 8; i++) {
+ if (getTexMtxAnm(i).getAnmFlag()) {
+ J3DTexMtxInfo* curr_mtx_info =
+ &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo();
+
+ if (mMorfFrm != 0) {
+ f32 var_f31 = 1.0f / (mMorfFrm + 1);
+ curr_mtx_info->mSRT.mTranslationX = field_0xF4 * (1.0f - var_f31) + curr_mtx_info->mSRT.mTranslationX * var_f31;
+ curr_mtx_info->mSRT.mTranslationY = field_0xF8 * (1.0f - var_f31) + curr_mtx_info->mSRT.mTranslationY * var_f31;
+ } else if (mEyeMoveFlg != 0) {
+ curr_mtx_info->mSRT.mTranslationX = mNowOffsetX;
+ curr_mtx_info->mSRT.mTranslationY = mNowOffsetY;
+ }
+
+ field_0xF4 = curr_mtx_info->mSRT.mTranslationX;
+ field_0xF8 = curr_mtx_info->mSRT.mTranslationY;
+ }
+ }
+}
+
+/* 8014D998-8014D9A8 1482D8 0010+00 0/0 0/0 1/1 .text __ct__16daBaseNpc_path_cFv */
+daBaseNpc_path_c::daBaseNpc_path_c() {}
+
+/* 8014D9A8-8014D9BC 1482E8 0014+00 1/1 0/0 4/4 .text isPath__16daBaseNpc_path_cFv */
+BOOL daBaseNpc_path_c::isPath() {
+ return mPathInfo != NULL;
+}
+
+/* 8014D9BC-8014DA48 1482FC 008C+00 0/0 0/0 1/1 .text setPathInfo__16daBaseNpc_path_cFUcScSc */
+int daBaseNpc_path_c::setPathInfo(u8 i_pathIdx, s8 i_roomNo, s8 i_direction) {
+ mPathInfo = NULL;
+ mIdx = 0;
+ mDirection = i_direction;
+
+ if (i_pathIdx != 0xFF) {
+ mPathInfo = dPath_GetRoomPath(i_pathIdx, i_roomNo);
+ if (mPathInfo == NULL) {
+ return 0;
+ }
+
+ mCurvePntNum = daBaseNpc_putNurbs(mPathInfo->m_points, mPathInfo->m_num, 160,
+ mCurvePnts, dPath_ChkClose(mPathInfo));
+ }
+
+ return isPath();
+}
+
+/* 8014DA48-8014DA64 148388 001C+00 0/0 0/0 1/1 .text reverseDir__16daBaseNpc_path_cFv */
+void daBaseNpc_path_c::reverseDir() {
+ s8 direction;
+ if (mDirection > 0) {
+ direction = -1;
+ } else {
+ direction = 1;
+ }
+
+ mDirection = direction;
+}
+
+/* 8014DA64-8014DAC4 1483A4 0060+00 0/0 0/0 3/3 .text chkPnt__16daBaseNpc_path_cF4cXyz */
+s32 daBaseNpc_path_c::chkPnt(cXyz i_pos) {
+ return daBaseNpc_chkPnt(i_pos, mPathInfo->m_points, mIdx, mPathInfo->m_num,
+ dPath_ChkClose(mPathInfo), mDirection);
+}
+
+/* 8014DAC4-8014DB04 148404 0040+00 0/0 0/0 3/3 .text setNextPnt__16daBaseNpc_path_cFv */
+void daBaseNpc_path_c::setNextPnt() {
+ daBaseNpc_incIdx(mPathInfo->m_num, &mIdx, dPath_ChkClose(mPathInfo), mDirection);
+}
+
+/* 8014DB04-8014DB0C 148444 0008+00 0/0 0/0 3/3 .text getIdx__16daBaseNpc_path_cFv */
+u16 daBaseNpc_path_c::getIdx() {
+ return mIdx;
+}
+
+/* 8014DB0C-8014DB14 -00001 0008+00 0/0 0/0 0/0 .text setIdx__16daBaseNpc_path_cFUs */
+void daBaseNpc_path_c::setIdx(u16 i_idx) {
+ mIdx = i_idx;
+}
+
+/* 8014DB14-8014DB40 148454 002C+00 0/0 0/0 4/4 .text getPntPos__16daBaseNpc_path_cFUs */
+Vec daBaseNpc_path_c::getPntPos(u16 iIdx) {
+ JUT_ASSERT(676, 0 <= iIdx && iIdx < mPathInfo->m_num);
+ return mPathInfo->m_points[iIdx].m_position;
+}
+
+/* 8014DB40-8014DBB4 148480 0074+00 1/1 0/0 0/0 .text limitter__18daBaseNpc_lookat_cFsPsss */
+void daBaseNpc_lookat_c::limitter(s16 i_value, s16* o_value_p, s16 i_max, s16 i_min) {
+ int tmp = i_value;
+ int tmp2 = tmp + *o_value_p;
+
+ if (i_max < tmp2) {
+ if (tmp < i_max) {
+ *o_value_p -= tmp2 - i_max;
+ } else {
+ *o_value_p = 0;
+ }
+ }
+
+ tmp += *o_value_p;
+
+ if (tmp >= (s16)i_min) {
+ return;
+ }
+
+ if (i_min < i_value) {
+ *o_value_p -= (int)(tmp - i_min);
+ return;
+ }
+
+ *o_value_p = 0;
+}
+
+/* 8014DBB4-8014E634 1484F4 0A80+00 0/0 0/0 1/1 .text
+ * calc__18daBaseNpc_lookat_cFP10fopAc_ac_cPA4_fs */
+// regalloc, equivalent ?
+void daBaseNpc_lookat_c::calc(fopAc_ac_c* param_0, Mtx param_1, s16 param_2) {
+ if (mpAttnPos == NULL) {
+ for (int i = 0; i < 4; i++) {
+ f32 sp28 = mRot[i].x;
+ f32 sp24 = mRot[i].y;
+ f32 sp20 = mRot[i].z;
+
+ cLib_addCalc2(&sp28, 0.0f, 0.25f, 0x800 / (i + 1));
+ cLib_addCalc2(&sp24, 0.0f, 0.25f, 0x800 / (i + 1));
+ cLib_addCalc2(&sp20, 0.0f, 0.25f, 0x800 / (i + 1));
+
+ mRot[i].set(sp28, sp24, sp20);
+ }
+ return;
+ }
+
+ cXyz sp140[4];
+ Mtx sp110;
+ Mtx spE0;
+ csXyz spC8[4];
+ f32 spB8[4];
+ cXyz spAC;
+
+ cMtx_copy(param_1, sp110);
+ sp110[0][3] = sp110[1][3] = sp110[2][3] = 0.0f;
+
+ mDoMtx_stack_c::copy(sp110);
+ mDoMtx_stack_c::inverse();
+ cMtx_copy(mDoMtx_stack_c::get(), sp110);
+ mDoMtx_stack_c::transS(param_0->current.pos);
+ mDoMtx_stack_c::concat(sp110);
+
+ for (int i = 0; i < 4; i++) {
+ spAC = mJntPos[i] - param_0->current.pos;
+ mDoMtx_stack_c::multVec(&spAC, &sp140[i]);
+ }
+
+ cXyz spA0(*mpAttnPos);
+ spAC = spA0 - param_0->current.pos;
+ mDoMtx_stack_c::multVec(&spAC, &spA0);
+
+ for (int i = 0; i < 3; i++) {
+ spAC = sp140[i + 1] - sp140[i];
+
+ spC8[i].set(0, 0, 0);
+ spC8[i].x = -cM_atan2s(spAC.y, spAC.absXZ());
+
+ if (fabsf(cM_ssin(spC8[i].x)) < 0.8f) {
+ spC8[i].y = cM_atan2s(spAC.x, spAC.z);
+ } else {
+ spC8[i].y = 0;
+ }
+
+ spB8[i] = spAC.abs();
+ }
+
+ csXyz sp2C;
+ cXyz sp94;
+ cXyz sp88;
+
+ for (int i = 2; i >= -1; i--) {
+ sp2C = csXyz::Zero;
+ for (int j = 0; j < 3; j++) {
+ mDoMtx_stack_c::XYZrotS(spC8[j]);
+ cMtx_copy(mDoMtx_stack_c::get(), spE0);
+ mDoMtx_stack_c::transS(sp140[j]);
+
+ sp2C.x += field_0x64[j].x;
+ sp2C.y += field_0x64[j].y;
+
+ mDoMtx_stack_c::ZXYrotM(sp2C);
+ mDoMtx_stack_c::concat(spE0);
+ spAC.set(0.0f, 0.0f, spB8[j]);
+ mDoMtx_stack_c::multVec(&spAC, &sp140[j + 1]);
+ }
+
+ if (i == -1) {
+ break;
+ }
+
+ if (param_2 == 0) {
+ field_0x94[i] = 0;
+ }
+
+ if (field_0x94[i] == 0) {
+ sp94 = spA0 - sp140[i];
+ if (!sp94.isZero()) {
+ sp94.normalize();
+ sp88 = sp140[3] - sp140[i];
+
+ if (!sp88.isZero()) {
+ sp88.normalize();
+ s16 sp16, sp14, sp12, sp10;
+ sp16 = -cM_atan2s(sp94.y, sp94.absXZ());
+ sp12 = cM_atan2s(sp94.x, sp94.z);
+ sp14 = -cM_atan2s(sp88.y, sp88.absXZ());
+ sp10 = cM_atan2s(sp88.x, sp88.z);
+
+ s16 spE = sp16 - sp14;
+ s16 spC = sp12 - sp10;
+ field_0x64[i].x += spE;
+ field_0x64[i].y += spC;
+
+ limitter(spC8[i].x, &field_0x64[i].x, mMaxJntLmt[i].x, mMinJntLmt[i].x);
+ limitter(spC8[i].y, &field_0x64[i].y, mMaxJntLmt[i].y, mMinJntLmt[i].y);
+ }
+ }
+ }
+
+ if ((param_2 > 0 && field_0x64[i].y < 0) || (param_2 < 0 && field_0x64[i].y > 0)) {
+ field_0x94[i] = 1;
+ }
+ }
+
+ sp2C = csXyz::Zero;
+ for (int i = 0; i < 4; i++) {
+ sp2C += field_0x64[i];
+ mRot[i] = sp2C;
+ }
+}
+
+/* 8014E634-8014E658 148F74 0024+00 0/0 0/0 1/1 .text setMaxJntLmt__18daBaseNpc_lookat_cF5csXyzi
+ */
+void daBaseNpc_lookat_c::setMaxJntLmt(csXyz i_max, int i_no) {
+ mMaxJntLmt[i_no] = i_max;
+}
+
+/* 8014E658-8014E67C 148F98 0024+00 0/0 0/0 1/1 .text setMinJntLmt__18daBaseNpc_lookat_cF5csXyzi
+ */
+void daBaseNpc_lookat_c::setMinJntLmt(csXyz i_min, int i_no) {
+ mMinJntLmt[i_no] = i_min;
+}
+
+/* 8014E67C-8014E6A0 148FBC 0024+00 0/0 0/0 1/1 .text setJntPos__18daBaseNpc_lookat_cF4cXyzi */
+void daBaseNpc_lookat_c::setJntPos(cXyz i_pos, int i_no) {
+ mJntPos[i_no] = i_pos;
+}
+
+/* 8014E6A0-8014E6AC 148FE0 000C+00 0/0 0/0 1/1 .text setAttnPos__18daBaseNpc_lookat_cFP4cXyz */
+int daBaseNpc_lookat_c::setAttnPos(cXyz* i_pos) {
+ mpAttnPos = i_pos;
+ return 1;
+}
+
+/* 8014E6AC-8014E6C8 148FEC 001C+00 0/0 0/0 1/1 .text getRot__18daBaseNpc_lookat_cFi */
+csXyz daBaseNpc_lookat_c::getRot(int i_no) {
+ return mRot[i_no];
+}
+
+/* 8014E6C8-8014E89C 149008 01D4+00 1/1 0/0 0/0 .text __ct__11daBaseNpc_cFv */
+daBaseNpc_c::daBaseNpc_c() {}
+
+/* 8014E89C-8014EAD0 1491DC 0234+00 2/1 0/0 2/2 .text __dt__11daBaseNpc_cFv */
+daBaseNpc_c::~daBaseNpc_c() {}
+
+/* 8014EAD0-8014EC50 149410 0180+00 2/0 0/0 2/0 .text execute__11daBaseNpc_cFv */
+int daBaseNpc_c::execute() {
+ setParam();
+ mainProc();
+
+ fopAcM_posMoveF(this, mCcStts.GetCCMoveP());
+ mAcch.CrrPos(dComIfG_Bgsp());
+ field_0x9d4 = mAcch.m_gnd;
+
+ mGroundY = mAcch.GetGroundH();
+ if (mGroundY != -1000000000.0f) {
+ field_0x918 = daBaseNpc_getGroundAngle(&field_0x9d4, field_0x91a.y);
+ setEnvTevColor();
+ setRoomNo();
+ }
+
+ allAnmPlay();
+ adjustShapeAngle();
+ setMtx(0);
+ setCollisions();
+ setAttnPos();
+ return 1;
+}
+
+/* 8014EC50-8014EE3C 149590 01EC+00 2/0 0/0 2/0 .text draw__11daBaseNpc_cFf */
+int daBaseNpc_c::draw(f32 param_0) {
+ J3DModel* model_p = mpModelMorf->getModel();
+ J3DModelData* modelData_p = model_p->getModelData();
+
+ if (dKy_darkworld_check()) {
+ g_env_light.settingTevStruct(4, &current.pos, &tevStr);
+ } else {
+ g_env_light.settingTevStruct(0, &current.pos, &tevStr);
+ }
+
+ g_env_light.setLightTevColorType_MAJI(model_p, &tevStr);
+
+ if (!dbgDraw()) {
+ return 1;
+ }
+
+ if (cLib_checkBit<u16>(field_0x840, 0x40)) {
+ mBtp.entry(modelData_p);
+ }
+
+ if (cLib_checkBit<u16>(field_0x840, 0x80)) {
+ mBtk.entry(modelData_p);
+ }
+
+ if (dKy_darkworld_check()) {
+ dComIfGd_setListDark();
+ mpModelMorf->entryDL();
+ dComIfGd_setList();
+ } else {
+ mpModelMorf->entryDL();
+ }
+
+ if (cLib_checkBit<u16>(field_0x840, 0x40)) {
+ mBtp.remove(modelData_p);
+ }
+
+ if (cLib_checkBit<u16>(field_0x840, 0x80)) {
+ mBtk.remove(modelData_p);
+ }
+
+ mShadowId = dComIfGd_setShadow(mShadowId, 1, model_p, &current.pos, param_0, 20.0f, current.pos.y, mGroundY, field_0x9d4, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
+ drawOtherMdls();
+ return 1;
+}
+
+/* 8014EE3C-8014EE44 14977C 0008+00 2/0 0/0 1/0 .text getResName__11daBaseNpc_cFv */
+const char* daBaseNpc_c::getResName() {
+ return NULL;
+}
+
+/* 8014EE44-8014EE80 149784 003C+00 0/0 0/0 2/2 .text getTrnsfrmKeyAnmP__11daBaseNpc_cFPci */
+J3DAnmTransform* daBaseNpc_c::getTrnsfrmKeyAnmP(char* i_arcName, int i_resIdx) {
+ return (J3DAnmTransform*)dComIfG_getObjectRes(i_arcName, i_resIdx);
+}
+
+/* 8014EE80-8014EEE4 1497C0 0064+00 0/0 0/0 1/1 .text
+ * setMcaMorfAnm__11daBaseNpc_cFP18J3DAnmTransformKeyffiii */
+int daBaseNpc_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_speed, f32 i_morf,
+ int i_mode, int i_start, int i_end) {
+ mpModelMorf->setAnm(i_anm, i_mode, i_morf, i_speed, i_start, i_end);
+ return 1;
+}
+
+/* 8014EEE4-8014EF28 149824 0044+00 0/0 0/0 1/1 .text
+ * setBckAnm__11daBaseNpc_cFP15J3DAnmTransformfiiib */
+void daBaseNpc_c::setBckAnm(J3DAnmTransform* i_anm, f32 i_speed, int i_mode, int i_start,
+ int i_end, bool i_modify) {
+ mBck.init(i_anm, TRUE, i_mode, i_speed, i_start, i_end, i_modify);
+}
+
+/* 8014EF28-8014EF64 149868 003C+00 0/0 0/0 1/1 .text getTexPtrnAnmP__11daBaseNpc_cFPci
+ */
+J3DAnmTransform* daBaseNpc_c::getTexPtrnAnmP(char* i_arcName, int i_resIdx) {
+ return (J3DAnmTransform*)dComIfG_getObjectRes(i_arcName, i_resIdx);
+}
+
+/* 8014EF64-8014EFA4 1498A4 0040+00 0/0 0/0 1/1 .text
+ * setBtpAnm__11daBaseNpc_cFP16J3DAnmTexPatternP12J3DModelDatafi */
+void daBaseNpc_c::setBtpAnm(J3DAnmTexPattern* i_anm, J3DModelData* i_modelData, f32 i_speed,
+ int i_mode) {
+ mBtp.init(i_modelData, i_anm, TRUE, i_mode, i_speed, 0, -1);
+}
+
+/* 8014EFA4-8014EFF0 1498E4 004C+00 2/0 0/0 2/0 .text attnSttsOn__11daBaseNpc_cFii */
+void daBaseNpc_c::attnSttsOn(int param_0, int param_1) {
+ u32 attn_flags;
+
+ if (dComIfGp_getLinkPlayer()->checkWolf()) {
+ if (param_1 != 0) {
+ attn_flags = 10;
+ } else {
+ attn_flags = 1;
+ }
+ } else if (param_0 != 0) {
+ attn_flags = 10;
+ } else {
+ attn_flags = 1;
+ }
+
+ attention_info.flags = attn_flags;
+}
+
+/* 8014EFF0-8014EFF4 149930 0004+00 2/0 0/0 1/0 .text setParam__11daBaseNpc_cFv */
+void daBaseNpc_c::setParam() {}
+
+/* 8014EFF4-8014F09C 149934 00A8+00 0/0 0/0 1/1 .text orderEvent__11daBaseNpc_cFiPc */
+void daBaseNpc_c::orderEvent(int param_0, char* i_evtName) {
+ if (i_evtName != NULL) {
+ mEvtIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, -1);
+ fopAcM_orderOtherEventId(this, mEvtIdx, 0xFF, 0xFFFF, 0, 1);
+ } else if (field_0x848 >= 0 && attention_info.flags == 10) {
+ eventInfo.onCondition(1);
+ if (param_0 != 0) {
+ fopAcM_orderSpeakEvent(this, 0, 0);
+ }
+ }
+}
+
+/* 8014F09C-8014F0A0 1499DC 0004+00 2/0 0/0 1/0 .text mainProc__11daBaseNpc_cFv */
+void daBaseNpc_c::mainProc() {}
+
+/* 8014F0A0-8014F0FC 1499E0 005C+00 1/1 0/0 2/2 .text setEnvTevColor__11daBaseNpc_cFv */
+void daBaseNpc_c::setEnvTevColor() {
+ tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(field_0x9d4);
+ tevStr.room_no = dComIfG_Bgsp().GetRoomId(field_0x9d4);
+}
+
+/* 8014F0FC-8014F140 149A3C 0044+00 1/1 0/0 2/2 .text setRoomNo__11daBaseNpc_cFv */
+void daBaseNpc_c::setRoomNo() {
+ s32 room_id = dComIfG_Bgsp().GetRoomId(field_0x9d4);
+ fopAcM_SetRoomNo(this, room_id);
+ mCcStts.SetRoomId(room_id);
+}
+
+/* 8014F140-8014F148 149A80 0008+00 2/0 0/0 2/0 .text btkCtrl__11daBaseNpc_cFv */
+BOOL daBaseNpc_c::btkCtrl() {
+ return false;
+}
+
+/* 8014F148-8014F1C8 149A88 0080+00 1/1 0/0 0/0 .text checkEndAnm__11daBaseNpc_cFf */
+int daBaseNpc_c::checkEndAnm(f32 param_0) {
+ switch (mpModelMorf->getPlayMode()) {
+ case J3DFrameCtrl::EMode_LOOP:
+ return mpModelMorf->isLoop();
+ case J3DFrameCtrl::EMode_NONE:
+ case J3DFrameCtrl::EMode_RESET:
+ return mpModelMorf->isStop() && param_0 != mpModelMorf->getPlaySpeed();
+ case J3DFrameCtrl::EMode_REVERSE:
+ break;
+ }
+
+ return 0;
+}
+
+/* 8014F1C8-8014F228 149B08 0060+00 1/1 0/0 0/0 .text checkEndAnm__11daBaseNpc_cFP12J3DFrameCtrl
+ */
+int daBaseNpc_c::checkEndAnm(J3DFrameCtrl* i_framectrl) {
+ switch (i_framectrl->getAttribute()) {
+ case J3DFrameCtrl::EMode_LOOP:
+ return i_framectrl->checkState(2);
+ case J3DFrameCtrl::EMode_NONE:
+ case J3DFrameCtrl::EMode_RESET:
+ return i_framectrl->checkState(1) || i_framectrl->getRate() == 0.0f;
+ case J3DFrameCtrl::EMode_REVERSE:
+ break;
+ }
+
+ return 0;
+}
+
+/* 8014F228-8014F38C 149B68 0164+00 2/0 0/0 2/0 .text allAnmPlay__11daBaseNpc_cFv */
+void daBaseNpc_c::allAnmPlay() {
+ if (cLib_checkBit<u16>(field_0x840, 0x10) && !cLib_checkBit<u16>(field_0x840, 1)) {
+ f32 temp_f31 = mpModelMorf->getPlaySpeed();
+ mpModelMorf->play(0, 0);
+
+ if (checkEndAnm(temp_f31)) {
+ field_0x842++;
+ }
+ }
+
+ if (cLib_checkBit<u16>(field_0x840, 0x80) && !cLib_checkBit<u16>(field_0x840, 8) && !btkCtrl()) {
+ mBtk.play();
+ }
+
+ if (!cLib_checkBit<u16>(field_0x840, 0x100)) {
+ if (cLib_checkBit<u16>(field_0x840, 0x20) && !cLib_checkBit<u16>(field_0x840, 2)) {
+ mBck.play();
+ }
+
+ if (cLib_checkBit<u16>(field_0x840, 0x40) && !cLib_checkBit<u16>(field_0x840, 4)) {
+ mBtp.getFrame();
+ mBtp.play();
+
+ if (mBtp.getFrameCtrl()->getAttribute() == 2) {
+ if (checkEndAnm(mBtp.getFrameCtrl())) {
+ field_0x838 = cLib_getRndValue<int>(60, 100);
+ mBtp.setPlaySpeed(0.0f);
+ }
+ } else {
+ field_0x838 = 0;
+ }
+
+ if (cLib_calcTimer<s16>(&field_0x838) == 0) {
+ mBtp.setPlaySpeed(1.0f);
+ }
+ }
+ }
+
+ cLib_offBit<u16>(field_0x840, 0x10F);
+}
+
+/* 8014F38C-8014F390 149CCC 0004+00 2/0 0/0 1/0 .text adjustShapeAngle__11daBaseNpc_cFv
+ */
+void daBaseNpc_c::adjustShapeAngle() {}
+
+/* 8014F390-8014F4A0 149CD0 0110+00 2/0 0/0 1/0 .text setMtx__11daBaseNpc_cFi */
+void daBaseNpc_c::setMtx(int param_0) {
+ J3DModel* model = mpModelMorf->getModel();
+ J3DModelData* modelData = model->getModelData();
+
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(field_0x91a);
+ mDoMtx_stack_c::scaleM(scale);
+
+ model->setBaseTRMtx(mDoMtx_stack_c::get());
+
+ if (param_0) {
+ model->setUserArea((u32)this);
+ } else {
+ model->setUserArea(0);
+ }
+
+ if ((field_0x840 & 0x10) && field_0x83c) {
+ u16 tmp = 0;
+ while (field_0x83c[tmp] != 0xFFFF) {
+ mBck.entryJoint(modelData, field_0x83c[tmp], mBck.getFrame());
+ tmp++;
+ }
+
+ mpModelMorf->modelCalc();
+
+ u16 tmp2 = 0;
+ while (field_0x83c[tmp2] != 0xFFFF) {
+ mBck.removeJoint(modelData, field_0x83c[tmp2]);
+ tmp2++;
+ }
+ } else {
+ mpModelMorf->modelCalc();
+ }
+}
+
+/* 8014F4A0-8014F4A4 149DE0 0004+00 2/0 0/0 1/0 .text setCollisions__11daBaseNpc_cFv */
+void daBaseNpc_c::setCollisions() {}
+
+/* 8014F4A4-8014F4A8 149DE4 0004+00 2/0 0/0 1/0 .text setAttnPos__11daBaseNpc_cFv */
+void daBaseNpc_c::setAttnPos() {}
+
+/* 8014F4A8-8014F4AC 149DE8 0004+00 2/0 0/0 1/0 .text drawOtherMdls__11daBaseNpc_cFv */
+void daBaseNpc_c::drawOtherMdls() {}
+
+/* 8014F4AC-8014F4B4 149DEC 0008+00 2/0 0/0 1/0 .text dbgDraw__11daBaseNpc_cFv */
+bool daBaseNpc_c::dbgDraw() {
+ return true;
+}
diff --git a/src/d/actor/d_a_npc3.cpp b/src/d/actor/d_a_npc3.cpp
new file mode 100644
index 0000000000..b89b652ab4
--- /dev/null
+++ b/src/d/actor/d_a_npc3.cpp
@@ -0,0 +1,301 @@
+#include "d/actor/d_a_npc.h"
+#include "d/d_bg_w.h"
+
+static void daBaseNpc_incIdx(int i_pathNo, u16* i_pathIdx, int i_pathClosed, int i_pathDirection);
+static void daBaseNpc_decIdx(int i_pathNo, u16* i_pathIdx, int i_pathClosed, int i_pathDirection);
+static f32 daNpcBase_BBasis(int i_deg, int i_pntNo, int i_knotNo, int* i_knotVector_p);
+
+/* 8014F4B4-8014F4F8 149DF4 0044+00 0/0 0/0 1/1 .text __ct__23daBaseNpc_moveBgActor_cFv
+ */
+daBaseNpc_moveBgActor_c::daBaseNpc_moveBgActor_c() {
+ mpBgw = 0;
+}
+
+/* 8014F4F8-8014F518 149E38 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */
+static int CheckCreateHeap(fopAc_ac_c* i_this) {
+ return ((daBaseNpc_moveBgActor_c*)i_this)->MoveBGCreateHeap();
+}
+
+/* 80450FE0-80450FE4 0004E0 0004+00 2/2 0/0 0/0 .sbss m_name__23daBaseNpc_moveBgActor_c
+ */
+const char* daBaseNpc_moveBgActor_c::m_name;
+
+/* 80450FE4-80450FE8 0004E4 0004+00 2/2 0/0 0/0 .sbss m_dzb_id__23daBaseNpc_moveBgActor_c
+ */
+int daBaseNpc_moveBgActor_c::m_dzb_id;
+
+/* 80450FE8-80450FEC 0004E8 0004+00 2/2 0/0 0/0 .sbss m_set_func__23daBaseNpc_moveBgActor_c */
+MoveBGActor_SetFunc daBaseNpc_moveBgActor_c::m_set_func;
+
+/* 8014F518-8014F60C 149E58 00F4+00 1/1 0/0 0/0 .text
+ * MoveBGCreateHeap__23daBaseNpc_moveBgActor_cFv */
+int daBaseNpc_moveBgActor_c::MoveBGCreateHeap() {
+ if (!CreateHeap()) {
+ return 0;
+ }
+
+ if (m_dzb_id == -1) {
+ mpBgw = NULL;
+ return 1;
+ }
+
+ mpBgw = new dBgW();
+
+ if (mpBgw != NULL && !mpBgw->Set((cBgD_t*)dComIfG_getObjectRes(m_name, m_dzb_id), 1, &mBgMtx)) {
+ if (m_set_func != NULL) {
+ mpBgw->SetCrrFunc(m_set_func);
+ }
+ } else {
+ mpBgw = NULL;
+ return 0;
+ }
+
+ return 1;
+}
+
+/* 8014F60C-8014F6FC 149F4C 00F0+00 0/0 0/0 1/1 .text
+ * MoveBGCreate__23daBaseNpc_moveBgActor_cFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUl
+ */
+int daBaseNpc_moveBgActor_c::MoveBGCreate(char const* i_arcName, int i_dzbId, MoveBGActor_SetFunc i_setFunc,
+ u32 i_heapSize) {
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::scaleM(scale);
+ MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
+
+ m_name = i_arcName;
+ m_dzb_id = i_dzbId;
+ m_set_func = i_setFunc;
+
+ if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, i_heapSize)) {
+ return cPhs_ERROR_e;
+ }
+
+#ifdef DEBUG
+ if (mpBgw != NULL && mpBgw->ChkUsed() && mDoCPd_c::isConnect(PAD_3)) {
+ JUT_WARN(2019, "%s", "dBgS_MoveBgActor::MoveBGCreate() Don't Regist CreateHeap\n");
+ }
+#endif
+
+ if (mpBgw != NULL && dComIfG_Bgsp().Regist(mpBgw, this)) {
+ return cPhs_ERROR_e;
+ }
+
+ // return Create() ? cPhs_COMPLEATE_e : cPhs_ERROR_e; // using enums here changes code gen
+ return Create() ? 4 : 5;
+}
+
+/* 8014F6FC-8014F770 14A03C 0074+00 0/0 0/0 1/1 .text MoveBGDelete__23daBaseNpc_moveBgActor_cFv */
+int daBaseNpc_moveBgActor_c::MoveBGDelete() {
+ int rt = Delete();
+ if (mpBgw != NULL && mpBgw->ChkUsed() && dComIfG_Bgsp().Release(mpBgw)) {
+ OS_REPORT("Release Error\n");
+ }
+
+ return rt;
+}
+
+/* 8014F770-8014F81C 14A0B0 00AC+00 0/0 0/0 2/2 .text MoveBGExecute__23daBaseNpc_moveBgActor_cFv
+ */
+int daBaseNpc_moveBgActor_c::MoveBGExecute() {
+ Mtx* sp8 = NULL;
+ int rt = Execute(&sp8);
+
+ if (sp8 == NULL) {
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::scaleM(scale);
+ MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
+ } else {
+ MTXCopy(*sp8, mBgMtx);
+ }
+
+ if (mpBgw != NULL) {
+ mpBgw->Move();
+ }
+
+ return rt;
+}
+
+/* 8014F81C-8014F8C4 14A15C 00A8+00 1/1 0/0 0/0 .text
+ * daBaseNpc_PntVsLineSegmentLengthSquare2D__FffffffPfPfPf */
+static int daBaseNpc_PntVsLineSegmentLengthSquare2D(f32 param_0, f32 param_1, f32 param_2,
+ f32 param_3, f32 param_4, f32 param_5,
+ f32* param_6, f32* param_7, f32* param_8) {
+ int var_r31 = 0;
+
+ f32 temp_f31 = param_4 - param_2;
+ f32 temp_f30 = param_5 - param_3;
+ f32 temp_f28 = (temp_f31 * temp_f31) + (temp_f30 * temp_f30);
+ if (temp_f28 == 0.0f) {
+ *param_8 = 0.0f;
+ return 0;
+ }
+
+ f32 temp_f29 = ((temp_f31 * (param_0 - param_2)) + (temp_f30 * (param_1 - param_3))) / temp_f28;
+ if (0.0f <= temp_f29 && temp_f29 <= 1.0f) {
+ var_r31 = 1;
+ }
+
+ *param_6 = param_2 + (temp_f31 * temp_f29);
+ *param_7 = param_3 + (temp_f30 * temp_f29);
+ *param_8 = ((*param_6 - param_0) * (*param_6 - param_0)) + ((*param_7 - param_1) * (*param_7 - param_1));
+ return var_r31;
+}
+
+/* 8014F8C4-8014FB28 14A204 0264+00 1/1 0/0 0/0 .text daBaseNpc_putNurbs__FP4dPntiiP4dPnti */
+static u16 daBaseNpc_putNurbs(dPnt* i_CPnts, int i_CPntNum, int i_maxPntNum, dPnt* o_curve_p, BOOL i_isClosed) {
+ int knotVector[daBaseNpc_path_c::MAXNUMCONTROLPNT_e + 4];
+ int weights[daBaseNpc_path_c::MAXNUMCONTROLPNT_e];
+
+ int i;
+ int aDeg = 2; // curve degree
+ int aMaxNumCPnt; // max control points
+ if (i_isClosed) {
+ aMaxNumCPnt = i_CPntNum + 1;
+ } else {
+ aMaxNumCPnt = i_CPntNum;
+ }
+
+ JUT_ASSERT(2190, aDeg < aMaxNumCPnt && aMaxNumCPnt < daBaseNpc_path_c::MAXNUMCONTROLPNT_e);
+ JUT_ASSERT(2191, aDeg == 2 || aDeg == 3);
+
+ // create knot vector
+ for (i = 0; i < aDeg + aMaxNumCPnt + 1; i++) {
+ if (aMaxNumCPnt < i) {
+ knotVector[i] = knotVector[i - 1];
+ } else if (aDeg < i) {
+ knotVector[i] = knotVector[i - 1] + 10;
+ } else {
+ knotVector[i] = 0;
+ }
+ }
+
+ // initialize weights
+ for (i = 0; i < aMaxNumCPnt; i++) {
+ weights[i] = 1;
+ }
+
+ int cur_knot;
+ u16 out_pnt_no;
+ for (out_pnt_no = 0, cur_knot = knotVector[aDeg]; cur_knot < knotVector[aDeg + aMaxNumCPnt]; cur_knot += 2, out_pnt_no++) {
+ if (i_maxPntNum <= out_pnt_no) {
+ break;
+ }
+
+ o_curve_p[out_pnt_no].m_position.x = 0.0f;
+ o_curve_p[out_pnt_no].m_position.z = 0.0f;
+
+ f32 total_weight = 0.0f;
+ for (i = 0; i < aMaxNumCPnt; i++) {
+ f32 basis = daNpcBase_BBasis(aDeg, i, cur_knot, knotVector);
+ if (i == i_CPntNum) {
+ o_curve_p[out_pnt_no].m_position.x += i_CPnts[0].m_position.x * basis;
+ o_curve_p[out_pnt_no].m_position.z += i_CPnts[0].m_position.z * basis;
+ } else {
+ o_curve_p[out_pnt_no].m_position.x += i_CPnts[i].m_position.x * basis;
+ o_curve_p[out_pnt_no].m_position.z += i_CPnts[i].m_position.z * basis;
+ }
+
+ total_weight += basis * weights[i];
+ }
+
+ o_curve_p[out_pnt_no].m_position.x /= total_weight;
+ o_curve_p[out_pnt_no].m_position.z /= total_weight;
+ }
+
+ // add final point for open curves
+ if (!i_isClosed) {
+ o_curve_p[out_pnt_no].m_position.x = i_CPnts[i_CPntNum - 1].m_position.x;
+ o_curve_p[out_pnt_no].m_position.z = i_CPnts[i_CPntNum - 1].m_position.z;
+ out_pnt_no++;
+ }
+
+ return out_pnt_no;
+}
+
+/* 8014FB28-80150230 14A468 0708+00 1/1 0/0 0/0 .text daBaseNpc_chkPnt__F4cXyzP4dPntUsUsii */
+static s32 daBaseNpc_chkPnt(cXyz param_0, dPnt* param_1, u16 param_2, u16 param_3, int param_4,
+ int param_5) {
+ u16 sp12, sp10;
+ sp10 = param_2;
+ sp12 = param_2;
+ daBaseNpc_incIdx(param_3, &sp10, param_4, 1);
+ daBaseNpc_decIdx(param_3, &sp12, param_4, 1);
+
+ cXyz sp70;
+ cXyz sp64(param_1[sp12].m_position.x, param_1[sp12].m_position.y, param_1[sp12].m_position.z);
+ cXyz sp58(param_1[param_2].m_position.x, param_1[param_2].m_position.y, param_1[param_2].m_position.z);
+ cXyz sp4C(param_1[sp10].m_position.x, param_1[sp10].m_position.y, param_1[sp10].m_position.z);
+
+ f32 sp24;
+ if (sp12 == param_2 && param_2 == sp10) {
+ JUT_ASSERT(2288, 0);
+ } else if (sp12 < param_2 && param_2 < sp10) {
+ sp24 = (sp4C - sp64).absXZ();
+ s16 temp_r31 = cM_atan2s(sp4C.x - sp64.x, sp4C.z - sp64.z);
+
+ sp70 = sp64;
+ sp64.x = sp70.x + (-1.0f * sp24 * cM_ssin(temp_r31));
+ sp64.z = sp70.z + (-1.0f * sp24 * cM_scos(temp_r31));
+ sp4C.x = sp70.x + (2.0f * sp24 * cM_ssin(temp_r31));
+ sp4C.z = sp70.z + (2.0f * sp24 * cM_scos(temp_r31));
+ } else if (sp12 < param_2) {
+ sp24 = (sp58 - sp64).absXZ();
+ s16 temp_r31_2 = cM_atan2s(sp58.x - sp64.x, sp58.z - sp64.z);
+
+ sp70 = sp58;
+ sp64.x = sp70.x + (-2.0f * sp24 * cM_ssin(temp_r31_2));
+ sp64.z = sp70.z + (-2.0f * sp24 * cM_scos(temp_r31_2));
+ sp4C.x = sp70.x + (2.0f * sp24 * cM_ssin(temp_r31_2));
+ sp4C.z = sp70.z + (2.0f * sp24 * cM_scos(temp_r31_2));
+ } else if (param_2 < sp10) {
+ sp24 = (sp4C - sp58).absXZ();
+ s16 temp_r31_3 = cM_atan2s(sp4C.x - sp58.x, sp4C.z - sp58.z);
+
+ sp70 = sp58;
+ sp64.x = sp70.x + (-2.0f * sp24 * cM_ssin(temp_r31_3));
+ sp64.z = sp70.z + (-2.0f * sp24 * cM_scos(temp_r31_3));
+ sp4C.x = sp70.x + (2.0f * sp24 * cM_ssin(temp_r31_3));
+ sp4C.z = sp70.z + (2.0f * sp24 * cM_scos(temp_r31_3));
+ } else {
+ JUT_ASSERT(2322, 0);
+ }
+
+ f32 sp20;
+ f32 sp1C;
+ f32 sp18;
+ f32 sp14;
+
+ daBaseNpc_PntVsLineSegmentLengthSquare2D(param_0.x, param_0.z, sp64.x, sp64.z, sp4C.x, sp4C.z, &sp20, &sp1C, &sp24);
+
+ if (cM3d_IsZero(sp24)) {
+ return 0;
+ }
+
+ daBaseNpc_PntVsLineSegmentLengthSquare2D(sp58.x, sp58.z, sp64.x, sp64.z, sp4C.x, sp4C.z, &sp18, &sp14, &sp24);
+
+ s16 var_r31;
+ if (param_5 < 0) {
+ var_r31 = cM_atan2s(sp64.x - sp4C.x, sp64.z - sp4C.z);
+ } else {
+ var_r31 = cM_atan2s(sp4C.x - sp64.x, sp4C.z - sp64.z);
+ }
+
+ return 0x4000 - (u16)abs((s16)(var_r31 - cM_atan2s(sp18 - sp20, sp14 - sp1C))) < 0;
+}
+
+/* 80150230-801502EC 14AB70 00BC+00 1/1 0/0 0/0 .text daBaseNpc_getGroundAngle__FP13cBgS_PolyInfos
+ */
+static s16 daBaseNpc_getGroundAngle(cBgS_PolyInfo* param_0, s16 param_1) {
+ if (dComIfG_Bgsp().ChkPolySafe(*param_0)) {
+ cM3dGPla spC;
+ if (!dComIfG_Bgsp().GetTriPla(*param_0, &spC) || !cBgW_CheckBGround(spC.mNormal.y)) {
+ return 0;
+ }
+
+ return fopAcM_getPolygonAngle(&spC, param_1);
+ }
+
+ return 0;
+}
diff --git a/src/d/actor/d_a_npc4.cpp b/src/d/actor/d_a_npc4.cpp
new file mode 100644
index 0000000000..6786d1f37a
--- /dev/null
+++ b/src/d/actor/d_a_npc4.cpp
@@ -0,0 +1,2304 @@
+#include "d/actor/d_a_npc.h"
+#include "d/actor/d_a_npc_tk.h"
+#include "d/d_msg_object.h"
+#include "d/actor/d_a_tag_evtarea.h"
+#include "dol2asm.h"
+
+static u16 daNpcF_putNurbs(dPnt* param_0, int param_1, int param_2, dPnt* param_3, int param_4);
+u8 daNpcF_getDistTableIdx(int param_0, int param_1);
+
+/* 8015056C-801505AC 14AEAC 0040+00 2/2 0/0 0/0 .text daNpcF_addIdx__FiiRUsi */
+static BOOL daNpcF_addIdx(int i_step, int i_num, u16& i_idx, BOOL i_isClosed) {
+ int ret = false;
+ int new_idx = i_idx;
+ new_idx += i_step;
+
+ if (i_num <= new_idx) {
+ if (i_isClosed) {
+ new_idx %= i_num;
+ } else {
+ new_idx = i_num - 1;
+ ret = true;
+ }
+ }
+
+ i_idx = new_idx;
+ return ret;
+}
+
+/* 801505AC-801505F8 14AEEC 004C+00 2/2 0/0 0/0 .text daNpcF_subIdx__FiiRUsi */
+static BOOL daNpcF_subIdx(int i_step, int i_num, u16& i_idx, BOOL i_isClosed) {
+ BOOL ret = false;
+ int new_idx = i_idx;
+ new_idx -= i_step;
+
+ if (0 > new_idx) {
+ if (i_isClosed) {
+ new_idx = (i_num + (new_idx % i_num)) % i_num;
+ } else {
+ new_idx = 0;
+ ret = true;
+ }
+ }
+
+ i_idx = new_idx;
+ return ret;
+}
+
+/* 801505F8-80150654 14AF38 005C+00 4/4 0/0 0/0 .text daNpcF_incIdx__FiRUsii */
+static BOOL daNpcF_incIdx(int i_num, u16& i_idx, BOOL i_isClosed, int i_reverse) {
+ return i_reverse ? daNpcF_subIdx(1, i_num, i_idx, i_isClosed) :
+ daNpcF_addIdx(1, i_num, i_idx, i_isClosed);
+}
+
+/* 80150654-801506B0 14AF94 005C+00 3/3 0/0 0/0 .text daNpcF_decIdx__FiRUsii */
+static BOOL daNpcF_decIdx(int i_num, u16& i_idx, BOOL i_isClosed, int i_reverse) {
+ return i_reverse ? daNpcF_addIdx(1, i_num, i_idx, i_isClosed) :
+ daNpcF_subIdx(1, i_num, i_idx, i_isClosed);
+}
+
+/* 801506B0-801506BC 14AFF0 000C+00 0/0 0/0 130/130 .text initialize__18daNpcF_ActorMngr_cFv */
+void daNpcF_ActorMngr_c::initialize() {
+ mActorID = fpcM_ERROR_PROCESS_ID_e;
+}
+
+/* 801506BC-801506D8 14AFFC 001C+00 1/1 0/0 130/130 .text
+ * entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c */
+void daNpcF_ActorMngr_c::entry(fopAc_ac_c* i_actor) {
+ mActorID = fopAcM_GetID(i_actor);
+}
+
+/* 801506D8-801506E0 -00001 0008+00 0/0 0/0 0/0 .text entry__18daNpcF_ActorMngr_cFUi */
+void daNpcF_ActorMngr_c::entry(fpc_ProcID i_actorID) {
+ mActorID = i_actorID;
+}
+
+/* 801506E0-801506EC 14B020 000C+00 2/2 0/0 55/55 .text remove__18daNpcF_ActorMngr_cFv */
+void daNpcF_ActorMngr_c::remove() {
+ mActorID = fpcM_ERROR_PROCESS_ID_e;
+}
+
+/* 801506EC-80150738 14B02C 004C+00 1/1 0/0 135/135 .text getActorP__18daNpcF_ActorMngr_cFv */
+fopAc_ac_c* daNpcF_ActorMngr_c::getActorP() {
+ fopAc_ac_c* actor = NULL;
+
+ if (fopAcM_SearchByID(mActorID, &actor) == 1 && actor != NULL) {
+ return actor;
+ }
+
+ return NULL;
+}
+
+/* 80150738-8015075C 14B078 0024+00 0/0 0/0 48/48 .text initialize__15daNpcF_MatAnm_cFv
+ */
+void daNpcF_MatAnm_c::initialize() {
+ field_0xF4 = 0.0f;
+ field_0xF8 = 0.0f;
+ mNowOffsetX = 0.0f;
+ mNowOffsetY = 0.0f;
+ mEyeMoveFlag = 0;
+ field_0x105 = 0;
+}
+
+/* 8015075C-80150870 14B09C 0114+00 1/0 0/0 0/0 .text calc__15daNpcF_MatAnm_cCFP11J3DMaterial */
+void daNpcF_MatAnm_c::calc(J3DMaterial* i_material) const {
+ J3DMaterialAnm::calc(i_material);
+
+ for (u32 i = 0; i < 8; i++) {
+ if (J3DMaterialAnm::getTexMtxAnm(i).getAnmFlag()) {
+ J3DTexMtxInfo* curr_mtx_info =
+ &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo();
+
+ if (field_0x105 != 0) {
+ f32 tmp8 = 1.0f / (field_0x105 + 1);
+ f32 tmp9 = (1.0f - tmp8);
+ f32 tmp10 = field_0xF4 * (1.0f - tmp8);
+
+ curr_mtx_info->mSRT.mTranslationX =
+ tmp10 + curr_mtx_info->mSRT.mTranslationX * tmp8;
+ curr_mtx_info->mSRT.mTranslationY =
+ field_0xF8 * tmp9 + curr_mtx_info->mSRT.mTranslationY * tmp8;
+
+ } else {
+ if (mEyeMoveFlag != 0) {
+ curr_mtx_info->mSRT.mTranslationX = mNowOffsetX;
+ curr_mtx_info->mSRT.mTranslationY = mNowOffsetY;
+ }
+ }
+
+ field_0xF4 = curr_mtx_info->mSRT.mTranslationX;
+ field_0xF8 = curr_mtx_info->mSRT.mTranslationY;
+ }
+ }
+}
+
+/* 80150870-80150900 14B1B0 0090+00 2/2 0/0 8/8 .text initialize__16daNpcF_SPCurve_cFP5dPathi */
+void daNpcF_SPCurve_c::initialize(dPath* i_path, int i_isReversed) {
+ mNurbs = 0;
+ field_0x02 = 0;
+ mIsReversed = i_isReversed;
+ mIsClosed = false;
+
+ for (int i = 0; i < 96; i++) {
+ mPoints[i].m_position.x = 0.0f;
+ mPoints[i].m_position.y = 0.0f;
+ mPoints[i].m_position.z = 0.0f;
+ }
+
+ if (i_path) {
+ mIsClosed = dPath_ChkClose(i_path);
+ mNurbs = daNpcF_putNurbs(i_path->m_points, i_path->m_num, 96, mPoints, mIsClosed);
+ }
+}
+
+/* 80150900-8015095C 14B240 005C+00 0/0 0/0 20/20 .text initialize__13daNpcF_Path_cFv */
+void daNpcF_Path_c::initialize() {
+ mIdx = 0;
+ mIsReversed = false;
+ mIsClosed = false;
+ mPathInfo = NULL;
+
+ mSPCurve.initialize(NULL, false);
+
+ mRange = 0.0f;
+ mPosDst = 0.0f;
+ field_0x10 = 0.0f;
+}
+
+/* 8015095C-80150A24 14B29C 00C8+00 0/0 0/0 12/12 .text setPathInfo__13daNpcF_Path_cFUcScUc */
+int daNpcF_Path_c::setPathInfo(u8 i_pathNo, s8 i_roomNo, u8 i_isReversed) {
+ mPathInfo = NULL;
+ mIdx = 0;
+ mIsReversed = i_isReversed;
+
+ if (i_pathNo != 0xFF) {
+ mPathInfo = dPath_GetRoomPath(i_pathNo, i_roomNo);
+ if (mPathInfo == NULL) {
+ return 0;
+ }
+
+ mSPCurve.initialize(mPathInfo, mIsReversed);
+ mIsClosed = dPath_ChkClose(mPathInfo);
+ mPosition = getPntPos(getIdx());
+ }
+
+ return 1;
+}
+
+/* 80150A24-80150A7C 14B364 0058+00 1/1 0/0 1/1 .text chkPassed__13daNpcF_Path_cF4cXyz */
+BOOL daNpcF_Path_c::chkPassed(cXyz i_pos) {
+ return daNpcF_chkPassed(i_pos, (dPnt*)mPathInfo->m_points, mIdx, mPathInfo->m_num,
+ mIsClosed, mIsReversed);
+}
+
+/* 80150A7C-80150BBC 14B3BC 0140+00 0/0 0/0 4/4 .text chkPassedDst__13daNpcF_Path_cF4cXyz
+ */
+BOOL daNpcF_Path_c::chkPassedDst(cXyz i_pos) {
+ return mPosDst + field_0x10 <= (mPosition - i_pos).abs();
+}
+
+/* 80150BBC-80150BE0 14B4FC 0024+00 0/0 0/0 8/8 .text reverse__13daNpcF_Path_cFv */
+void daNpcF_Path_c::reverse() {
+ if (chkReverse()) {
+ offReverse();
+ } else {
+ onReverse();
+ }
+}
+
+/* 80150BE0-80150C18 14B520 0038+00 2/2 0/0 6/6 .text setNextIdx__13daNpcF_Path_cFv */
+BOOL daNpcF_Path_c::setNextIdx() {
+ return daNpcF_incIdx(mPathInfo->m_num, mIdx, chkClose(), mIsReversed);
+}
+
+/* 80150C18-80150C60 14B558 0048+00 0/0 0/0 9/9 .text getNextIdx__13daNpcF_Path_cFv */
+int daNpcF_Path_c::getNextIdx() {
+ u16 ret = mIdx;
+ daNpcF_incIdx(mPathInfo->m_num, ret, chkClose(), mIsReversed);
+ return ret;
+}
+
+/* 80150C60-80150CA8 14B5A0 0048+00 0/0 0/0 3/3 .text getBeforeIdx__13daNpcF_Path_cFv */
+int daNpcF_Path_c::getBeforeIdx() {
+ u16 ret = mIdx;
+ daNpcF_decIdx(mPathInfo->m_num, ret, chkClose(), mIsReversed);
+ return ret;
+}
+
+/* 80150CA8-80150D44 14B5E8 009C+00 0/0 0/0 1/1 .text getBeforePos__13daNpcF_Path_cFR4cXyz */
+BOOL daNpcF_Path_c::getBeforePos(cXyz& o_pos) {
+ u16 idx = mIdx;
+ BOOL ret = daNpcF_decIdx(mPathInfo->m_num, idx, chkClose(), mIsReversed);
+
+ o_pos = getPntPos(idx);
+ return ret;
+}
+
+/* 80150D44-80150DE0 14B684 009C+00 0/0 0/0 1/1 .text getNextPos__13daNpcF_Path_cFR4cXyz
+ */
+BOOL daNpcF_Path_c::getNextPos(cXyz& o_pos) {
+ u16 idx = mIdx;
+
+ BOOL ret = daNpcF_incIdx(mPathInfo->m_num, idx, chkClose(), mIsReversed);
+
+ o_pos = getPntPos(idx);
+ return ret;
+}
+
+/* 80150DE0-80150EB4 14B720 00D4+00 0/0 0/0 16/16 .text getDstPos__13daNpcF_Path_cF4cXyzR4cXyz */
+int daNpcF_Path_c::getDstPos(cXyz i_pos1, cXyz& o_pos2) {
+ BOOL ret = false;
+
+ while (!ret) {
+ o_pos2 = getPntPos(getIdx());
+
+ if (!chkPassed(i_pos1)) {
+ break;
+ }
+
+ if (setNextIdx()) {
+ ret = true;
+ }
+ }
+
+ return ret;
+}
+
+/* 80150EB4-80151038 14B7F4 0184+00 0/0 0/0 2/2 .text setNextIdxDst__13daNpcF_Path_cF4cXyz */
+void daNpcF_Path_c::setNextIdxDst(cXyz i_pos) {
+ if (!setNextIdx()) {
+ mPosDst = (i_pos - getPntPos(getIdx())).abs();
+ mPosition = i_pos;
+ }
+}
+
+/* 80151038-801510B8 14B978 0080+00 0/0 0/0 72/72 .text initialize__15daNpcF_Lookat_cFv
+ */
+void daNpcF_Lookat_c::initialize() {
+ for (int i = 0; i < 4; i++) {
+ mJointPos[i].setall(0.0f);
+ mAngularMoveDis[i].setall(0);
+ mMinAngle[i].setall(0);
+ mMaxAngle[i].setall(0);
+ mRotAngle[i].setall(0);
+ field_0x94[i] = false;
+ }
+
+ mAttnPos_p = NULL;
+}
+
+/* 801510B8-80151350 14B9F8 0298+00 0/0 0/0 34/34 .text
+ * setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz */
+void daNpcF_Lookat_c::setParam(f32 param_0, f32 param_1, f32 param_2, f32 param_3, f32 param_4,
+ f32 param_5, f32 param_6, f32 param_7, f32 param_8, f32 param_9,
+ f32 param_10, f32 param_11, s16 i_rotAngle, cXyz* i_jointPos) {
+ static cXyz vec(0.0f, 0.0f, 32.0f);
+
+ mJointPos[0] = i_jointPos[0];
+ mMinAngle[0].x = cM_deg2s(-param_1) - 0x4000;
+ mMinAngle[0].y = cM_deg2s(param_2);
+ mMinAngle[0].z = 0;
+ mMaxAngle[0].x = cM_deg2s(-param_0) - 0x4000;
+ mMaxAngle[0].y = cM_deg2s(param_3);
+ mMaxAngle[0].z = 0;
+
+ mJointPos[1] = i_jointPos[1];
+ mMinAngle[1].set(-0x4000, 0, 0);
+ mMaxAngle[1].set(-0x4000, 0, 0);
+
+ mJointPos[2] = i_jointPos[2];
+ mMinAngle[2].x = cM_deg2s(-param_9);
+ mMinAngle[2].y = cM_deg2s(param_10);
+ mMinAngle[2].z = 0;
+ mMaxAngle[2].x = cM_deg2s(-param_8);
+ mMaxAngle[2].y = cM_deg2s(param_11);
+ mMaxAngle[2].z = 0;
+
+ mDoMtx_stack_c::transS(mJointPos[2]);
+ mDoMtx_stack_c::YrotM(i_rotAngle);
+ mDoMtx_stack_c::multVec(&vec, &mJointPos[3]);
+
+ mMinAngle[3].set(0, 0, 0);
+ mMaxAngle[3].set(0, 0, 0);
+}
+
+/* 80151350-801515D4 14BC90 0284+00 0/0 0/0 34/34 .text
+ * calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii */
+void daNpcF_Lookat_c::calc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, csXyz** o_lookatAngle,
+ BOOL i_snap, int i_axis, BOOL i_debug) {
+ cXyz sp68[4];
+ csXyz sp50[4];
+ cXyz sp40;
+ f32 sp30[4];
+ f32 sp1C;
+ f32 angY;
+
+ if (mAttnPos_p != NULL) {
+ initCalc(i_actor, i_baseTransformMtx, sp68, sp50, sp30, sp40, i_debug);
+
+ for (int i = 2; i >= -1; i--) {
+ update(sp68, sp50, sp30);
+ if (i >= 0) {
+ calcMoveDisAngle(i, sp68, sp50, sp40, i_axis, i_debug);
+ }
+ }
+
+ setRotAngle();
+ } else {
+ clrRotAngle();
+ }
+
+ int i, j;
+ for (i = 2, j = 1; i >= 0; i--, j++) {
+ if (i_snap) {
+ *(o_lookatAngle[i]) = mRotAngle[i];
+ } else {
+ sp1C = o_lookatAngle[i]->x;
+ angY = mRotAngle[i].x;
+ cLib_addCalc2(&sp1C, angY, 0.25f, (f32)(0x800 / j));
+ o_lookatAngle[i]->x = sp1C;
+
+ f32 var_f30 = mRotAngle[i].y - o_lookatAngle[i]->y;
+ sp1C = o_lookatAngle[i]->y;
+ angY = mRotAngle[i].y;
+ cLib_addCalc2(&sp1C, angY, 0.25f, (f32)(0x800 / j));
+
+ if (i_debug) {
+ OS_REPORT("|%d| a:%f(%d), b:%f(%d), axis:%d\n", i, sp1C, o_lookatAngle[i]->y, angY, mRotAngle[i].y, i_snap);
+ }
+
+ if (i_axis > 0 && angY - sp1C < 0.0f) {
+ sp1C = angY;
+ }
+ if (i_axis < 0 && 0.0f < angY - sp1C) {
+ sp1C = angY;
+ }
+ o_lookatAngle[i]->y = (s16)sp1C;
+
+ o_lookatAngle[i]->z = 0;
+ }
+ }
+
+ if (i_debug) {
+ OS_REPORT("\n");
+ }
+}
+
+/* 801515D4-80151648 14BF14 0074+00 1/1 0/0 0/0 .text adjustMoveDisAngle__15daNpcF_Lookat_cFRssss
+ */
+// NONMATCHING - regalloc, matches debug
+void daNpcF_Lookat_c::adjustMoveDisAngle(s16& delta, s16 angle, s16 min, s16 max) {
+ int newAngle = 0;
+
+ newAngle = angle + delta;
+ if (max < newAngle) {
+ if (angle < max) {
+ delta -= (newAngle - max);
+ } else {
+ delta = 0;
+ }
+ }
+
+ newAngle = angle + delta;
+ if (newAngle < min) {
+ if (min < angle) {
+ delta -= (newAngle - min);
+ } else {
+ delta = 0;
+ }
+ }
+}
+
+/* 80151648-80151A54 14BF88 040C+00 1/1 0/0 0/0 .text
+ * initCalc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fP4cXyzP5csXyzPfR4cXyzi */
+void daNpcF_Lookat_c::initCalc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, cXyz* param_2,
+ csXyz* param_3, f32* param_4, cXyz& param_5, int i_debug) {
+ Mtx mtx;
+ cXyz local_90;
+ cMtx_copy(i_baseTransformMtx, mtx);
+ mtx[0][3] = 0.0f;
+ mtx[1][3] = 0.0f;
+ mtx[2][3] = 0.0f;
+
+ mDoMtx_stack_c::copy(mtx);
+ mDoMtx_stack_c::inverse();
+ cMtx_copy(mDoMtx_stack_c::get(), mtx);
+ mDoMtx_stack_c::transS(i_actor->current.pos);
+ mDoMtx_stack_c::concat(mtx);
+
+ for (int i = 0; i < 4; i++) {
+ local_90 = mJointPos[i] - i_actor->current.pos;
+ mDoMtx_stack_c::multVec(&local_90, &param_2[i]);
+ }
+
+ JUT_ASSERT(1244, 0 != mAttnPos_p);
+
+ local_90 = *mAttnPos_p - i_actor->current.pos;
+ mDoMtx_stack_c::multVec(&local_90, &param_5);
+
+ for (int i = 0; i < 3; i++) {
+ cXyz* vec = &param_2[i];
+ local_90 = vec[1] - vec[0];
+ param_4[i] = local_90.abs();
+ param_3[i].setall(0);
+ param_3[i].x = -cM_atan2s(local_90.y, local_90.absXZ());
+
+ #ifdef DEBUG
+ if (i_debug) {
+ f32 var_f31 = fabsf(cM_ssin(param_3[i].x));
+ OS_REPORT(">>>>>>>%d: sin(%d):%f\n", i, abs(param_3[i].x), var_f31);
+ }
+ #endif
+
+ if (fabsf(cM_ssin(param_3[i].x)) < 0.63f) {
+ param_3[i].y = cM_atan2s(local_90.x, local_90.z);
+ } else {
+ param_3[i].y = 0;
+ }
+ }
+}
+
+/* 80151A54-80151B68 14C394 0114+00 1/1 0/0 0/0 .text update__15daNpcF_Lookat_cFP4cXyzP5csXyzPf */
+void daNpcF_Lookat_c::update(cXyz* param_0, csXyz* param_1, f32* param_2) {
+ csXyz ang = csXyz::Zero;
+ cXyz vec;
+ Mtx mtx;
+ cXyz* pparam0i;
+
+ for (int i = 0; i < 3; i++) {
+ mDoMtx_stack_c::XYZrotS(param_1[i]);
+ cMtx_copy(mDoMtx_stack_c::get(), mtx);
+ pparam0i = &param_0[i];
+ mDoMtx_stack_c::transS(pparam0i[0]);
+
+ ang.x += mAngularMoveDis[i].x;
+ ang.y += mAngularMoveDis[i].y;
+ mDoMtx_stack_c::ZXYrotM(ang);
+ mDoMtx_stack_c::concat(mtx);
+
+ vec.set(0.0f, 0.0f, param_2[i]);
+ mDoMtx_stack_c::multVec(&vec, &pparam0i[1]);
+ }
+}
+
+/* 80151B68-80151F54 14C4A8 03EC+00 1/1 0/0 0/0 .text
+ * calcMoveDisAngle__15daNpcF_Lookat_cFiP4cXyzP5csXyz4cXyzii */
+void daNpcF_Lookat_c::calcMoveDisAngle(int i_no, cXyz* param_1, csXyz* param_2, cXyz param_3,
+ int i_axis, int i_debug) {
+ if (i_axis == 0) {
+ field_0x94[i_no] = false;
+ }
+
+ if (!field_0x94[i_no]) {
+ cXyz vec1 = param_3 - param_1[i_no];
+ if (!vec1.isZero()) {
+ vec1.normalize();
+ cXyz vec2 = param_1[3] - param_1[i_no];
+ if (!vec2.isZero()) {
+ vec2.normalize();
+ s16 ivar3 = -cM_atan2s(vec1.y, vec1.absXZ());
+ s16 ivar4 = cM_atan2s(vec1.x, vec1.z);
+ s16 ivar5 = -cM_atan2s(vec2.y, vec2.absXZ());
+ s16 ivar6 = cM_atan2s(vec2.x, vec2.z);
+ mAngularMoveDis[i_no].x += (s16)(ivar3 - ivar5);
+ mAngularMoveDis[i_no].y += (s16)(ivar4 - ivar6);
+ }
+ }
+ }
+
+ adjustMoveDisAngle(mAngularMoveDis[i_no].x, param_2[i_no].x,
+ mMinAngle[i_no].x, mMaxAngle[i_no].x);
+ adjustMoveDisAngle(mAngularMoveDis[i_no].y, param_2[i_no].y,
+ mMinAngle[i_no].y, mMaxAngle[i_no].y);
+
+ if (i_axis < 0 && mAngularMoveDis[i_no].y > 0) {
+ field_0x94[i_no] = false;
+ }
+ if (i_axis > 0 && mAngularMoveDis[i_no].y < 0) {
+ field_0x94[i_no] = false;
+ }
+}
+
+/* 80151F54-80151FE0 14C894 008C+00 1/1 0/0 0/0 .text setRotAngle__15daNpcF_Lookat_cFv */
+void daNpcF_Lookat_c::setRotAngle() {
+ int ang_x = 0;
+ int ang_y = 0;
+ for (int i = 0; i < 4; i++) {
+ ang_x += mAngularMoveDis[i].x;
+ ang_x = cLib_minMaxLimit(ang_x, -0x8000, 0x7fff);
+ ang_y += mAngularMoveDis[i].y;
+ ang_y = cLib_minMaxLimit(ang_y, -0x8000, 0x7fff);
+
+ mRotAngle[i].x = ang_x;
+ mRotAngle[i].y = ang_y;
+ mRotAngle[i].z = 0;
+ }
+}
+
+/* 80151FE0-80152014 14C920 0034+00 1/1 0/0 0/0 .text clrRotAngle__15daNpcF_Lookat_cFv */
+void daNpcF_Lookat_c::clrRotAngle() {
+ for (int i = 0; i < 4; i++) {
+ mRotAngle[i].x = 0;
+ mRotAngle[i].y = 0;
+ mRotAngle[i].z = 0;
+ }
+}
+
+/* 80152014-801522AC 14C954 0298+00 0/0 0/0 38/38 .text execute__8daNpcF_cFv */
+BOOL daNpcF_c::execute() {
+ setParam();
+
+ if (main()) {
+ fopAcM_posMoveF(this, mCcStts.GetCCMoveP());
+ mAcch.CrrPos(dComIfG_Bgsp());
+ mGndChk = mAcch.m_gnd;
+ mGroundH = mAcch.GetGroundH();
+ if (mGroundH != -1000000000.0f) {
+ field_0x998 = daNpcF_getGroundAngle(&mGndChk, mCurAngle.y);
+ setEnvTevColor();
+ setRoomNo();
+ mPolySound = dKy_pol_sound_get(&mAcch.m_gnd);
+ mReverb = dComIfGp_getReverb(mCcStts.GetRoomId());
+ if (mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > mGroundH) {
+ mPolySound = dKy_pol_sound_get(&mAcch.m_wtr);
+ }
+ }
+ }
+
+ playAllAnm();
+ adjustShapeAngle();
+ setAttnPos();
+
+ cLib_chaseF(&mExpressionMorf, 0.0f, 1.0f);
+ setCollisions();
+
+ if (mTwilight) {
+ attention_info.flags |= 0x400000;
+ attention_info.flags |= 0x800000;
+ setHitodamaPrtcl();
+ }
+
+ mOldAngle = mCurAngle;
+ mCutType = 0;
+ mOrderSpeakEvt = false;
+ mOrderNewEvt = false;
+ field_0x9eb = false;
+ field_0x9ef = 0;
+ field_0x9f3 = 0;
+
+ for (int i = 0; i < 5; i++) {
+ if ((mAttnChangeTimer == 0 || mAttnIdx != i) && mAttnActorTimer[i] != 0 &&
+ cLib_calcTimer(&mAttnActorTimer[i]) == 0)
+ {
+ mAttnActor[i].remove();
+ }
+ }
+
+ if (mDamageTimer != 0) {
+ cLib_calcTimer(&mDamageTimer);
+ }
+
+ return true;
+}
+
+/* 801522AC-80152614 14CBEC 0368+00 0/0 0/0 33/33 .text draw__8daNpcF_cFiifP11_GXColorS10i */
+int daNpcF_c::draw(BOOL i_isTest, BOOL param_1, f32 i_shadowDepth, _GXColorS10* i_fogColor,
+ BOOL i_hideDamage) {
+ f32 damage_ratio, frame;
+ J3DModel* model = mpMorf->getModel();
+ J3DModelData* modelData = model->getModelData();
+ field_0x9f3 = 1;
+
+ if (!checkHide()) {
+ if (!i_hideDamage && mDamageTimer != 0 && mTotalDamageTimer != 0) {
+ damage_ratio = (f32)mDamageTimer / (f32)mTotalDamageTimer;
+ } else {
+ damage_ratio = 0.0f;
+ }
+
+ if (cM3d_IsZero_inverted(damage_ratio)) {
+ tevStr.TevColor.r = (s16)(damage_ratio * 20.0f);
+ tevStr.TevColor.g = 0;
+ } else if (i_isTest) {
+ tevStr.TevColor.g = 20;
+ tevStr.TevColor.r = 0;
+ } else if (i_fogColor != NULL) {
+ tevStr.TevColor.r = i_fogColor->r;
+ tevStr.TevColor.g = i_fogColor->g;
+ tevStr.TevColor.b = i_fogColor->b;
+ tevStr.TevColor.a = i_fogColor->a;
+ } else {
+ tevStr.TevColor.g = 0;
+ tevStr.TevColor.r = 0;
+ }
+
+ if (mTwilight) {
+ g_env_light.settingTevStruct(4, &current.pos, &tevStr);
+ } else {
+ g_env_light.settingTevStruct(0, &current.pos, &tevStr);
+ }
+ g_env_light.setLightTevColorType_MAJI(model->getModelData(), &tevStr);
+
+ if (!drawDbgInfo()) {
+ if (mAnmFlags & ANM_PLAY_BTP) {
+ mBtpAnm.entry(&modelData->getMaterialTable(), (s16)mBtpAnm.getFrame());
+ }
+ if (mAnmFlags & ANM_PLAY_BTK) {
+ frame = mBtkAnm.getFrame();
+ mBtkAnm.entry(&modelData->getMaterialTable(), frame);
+ }
+ if (mAnmFlags & ANM_PLAY_BRK) {
+ frame = mBrkAnm.getFrame();
+ mBrkAnm.entry(&modelData->getMaterialTable(), frame);
+ }
+
+ if (param_1) {
+ fopAcM_setEffectMtx(this, modelData);
+ }
+
+ if (mTwilight) {
+ dComIfGd_setListDark();
+ mpMorf->entryDL();
+ dComIfGd_setList();
+ } else {
+ mpMorf->entryDL();
+ }
+
+ if (mAnmFlags & ANM_PLAY_BTP) {
+ mBtpAnm.remove(modelData);
+ }
+ if (mAnmFlags & ANM_PLAY_BTK) {
+ mBtkAnm.remove(modelData);
+ }
+ if (mAnmFlags & ANM_PLAY_BRK) {
+ mBrkAnm.remove(modelData);
+ }
+
+ mShadowKey = dComIfGd_setShadow(mShadowKey, true, model, &current.pos, i_shadowDepth,
+ 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0,
+ 1.0f, dDlst_shadowControl_c::getSimpleTex());
+
+ drawOtherMdls();
+ }
+ }
+
+ return 1;
+}
+
+/* 80152614-80152654 14CF54 0040+00 0/0 0/0 13/13 .text
+ * tgHitCallBack__8daNpcF_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
+void daNpcF_c::tgHitCallBack(fopAc_ac_c* i_this, dCcD_GObjInf* param_1, fopAc_ac_c* i_actor,
+ dCcD_GObjInf* param_3) {
+ if (i_actor != NULL && fopAcM_GetProfName(i_actor) == PROC_ALINK) {
+ if (daPy_getPlayerActorClass() == i_actor) {
+ u8 cut_type = static_cast<daPy_py_c*>(i_actor)->getCutType();
+ static_cast<daNpcF_c*>(i_this)->setCutType(cut_type);
+ } else {
+ static_cast<daNpcF_c*>(i_this)->setCutType(daPy_py_c::CUT_TYPE_NM_VERTICAL);
+ }
+ }
+}
+
+/* 804257E8-80425978 052508 0190+00 4/4 0/0 0/0 .bss mFindActorPList__8daNpcF_c */
+fopAc_ac_c* daNpcF_c::mFindActorPList[100];
+
+/* 80450FF0-80450FF4 0004F0 0004+00 4/4 0/0 0/0 .sbss mFindCount__8daNpcF_c */
+s32 daNpcF_c::mFindCount;
+
+/* 80152654-801526E8 14CF94 0094+00 0/0 0/0 12/12 .text srchAttnActor1__8daNpcF_cFPvPv */
+void* daNpcF_c::srchAttnActor1(void* i_proc, void* param_1) {
+ if (mFindCount < 100 && fopAcM_IsActor(i_proc)
+ && (fopAcM_GetName(i_proc) == PROC_NI || fopAcM_GetName(i_proc) == PROC_COW
+ || fopAcM_GetName(i_proc) == PROC_NPC_NE || fopAcM_GetName(i_proc) == PROC_DO
+ || fopAcM_GetName(i_proc) == PROC_SQ || fopAcM_GetName(i_proc) == PROC_BD))
+ {
+ mFindActorPList[mFindCount] = static_cast<fopAc_ac_c*>(i_proc);
+ mFindCount++;
+ }
+ return NULL;
+}
+
+/* 80450FF4-80450FF8 0004F4 0002+02 2/2 0/0 0/0 .sbss mSrchActorName__8daNpcF_c */
+s16 daNpcF_c::mSrchActorName;
+
+/* 801526E8-8015276C 14D028 0084+00 1/1 0/0 0/0 .text srchActor__8daNpcF_cFPvPv */
+void* daNpcF_c::srchActor(void* i_proc, void* i_this) {
+ if (mFindCount < 100 && fopAc_IsActor(i_proc) && i_proc != i_this
+ && mSrchActorName == fopAcM_GetName(i_proc))
+ {
+ mFindActorPList[mFindCount] = static_cast<fopAc_ac_c*>(i_proc);
+ mFindCount++;
+ }
+
+ return NULL;
+}
+
+/* 8015276C-801527FC 14D0AC 0090+00 2/0 0/0 40/9 .text setMtx__8daNpcF_cFv */
+void daNpcF_c::setMtx() {
+ J3DModel* model = mpMorf->getModel();
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(mCurAngle);
+ mDoMtx_stack_c::scaleM(scale);
+ model->setBaseTRMtx(mDoMtx_stack_c::get());
+ model->setUserArea((u32)this);
+
+ if (mAnmFlags & 0x100) {
+ mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame());
+ mpMorf->modelCalc();
+ } else {
+ mpMorf->modelCalc();
+ }
+}
+
+/* 801527FC-801528C8 14D13C 00CC+00 2/0 0/0 38/0 .text setMtx2__8daNpcF_cFv */
+void daNpcF_c::setMtx2() {
+ J3DModel* model = mpMorf->getModel();
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(mCurAngle);
+ mDoMtx_stack_c::scaleM(scale);
+ model->setBaseTRMtx(mDoMtx_stack_c::get());
+ model->setUserArea((u32)this);
+
+ if (cM3d_IsZero_inverted(mExpressionMorf)) {
+ mpMorf->onMorfNone();
+ } else {
+ mpMorf->offMorfNone();
+ }
+
+ if (mAnmFlags & 0x100) {
+ mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame());
+ mpMorf->modelCalc();
+ } else {
+ mpMorf->modelCalc();
+ }
+}
+
+/* 801528C8-80152B2C 14D208 0264+00 0/0 0/0 76/76 .text initialize__8daNpcF_cFv */
+void daNpcF_c::initialize() {
+ field_0x824.remove();
+
+ for (int i = 0; i < 5; i++) {
+ mAttnActor[i].remove();
+ }
+
+ for (int i = 0; i < 3; i++) {
+ mLookatPos[i].setall(0.0f);
+ }
+
+ mLookPos.setall(0.0f);
+ field_0x884.setall(0.0f);
+ field_0x890.setall(0.0f);
+ field_0x89c.setall(0.0f);
+ field_0x8a8.setall(0.0f);
+ mHeadPos.setall(0.0f);
+ mCurAngle.setall(0);
+ mOldAngle.setall(0);
+ mEyeAngle.setall(0);
+ mHeadAngle.setall(0);
+
+ for (int i = 0; i < 3; i++) {
+ field_0x908[i].setall(0);
+ mLookatAngle[i].setall(0);
+ }
+
+ mStaffID = -1;
+ mCutType = 0;
+ mAttnIdx = 0;
+ mAttnChangeTimer = 0;
+
+ for (int i = 0; i < 5; i++) {
+ mAttnActorTimer[i] = 0;
+ }
+
+ mMsgTimer = 0;
+ mDamageTimer = 0;
+ mTotalDamageTimer = 0;
+ field_0x95c = 0;
+ mEventTimer = 0;
+ mBtpTimer = 0;
+ mTurnAmount = 0;
+ mTurnMode = 0;
+ mTurnStepNum = 0.0f;
+ mExpressionMorfOverride = 0.0f;
+ mMotionMorfOverride = 0.0f;
+ mGroundH = 0.0f;
+
+ for (int i = 0; i < 3; i++) {
+ field_0x984[i] = 0.0f;
+ }
+
+ field_0x990 = 0;
+ field_0x992 = 0;
+ mTurnStartAngle = 0;
+ mTurnTargetAngle = 0;
+ field_0x998 = 0;
+ mAnmFlags = 0;
+ mShadowKey = 0;
+ field_0x9a4 = -1;
+ mHitodamaParticleKey[0] = -1;
+ mHitodamaParticleKey[1] = -1;
+ mEventIdx = -1;
+ mExpressionPhase = 0;
+ mExpressionPrevPhase = 0;
+ mMotionPhase = 0;
+ mMotionPrevPhase = 0;
+ mExpression = -1;
+ mMotion = -1;
+ mMotionLoops = 0;
+ mExpressionLoops = 0;
+ mOrderEvtNo = 0;
+ mOrderSpeakEvt = false;
+ field_0x9ea = false;
+ field_0x9eb = false;
+ field_0x9ec = false;
+ mOrderNewEvt = false;
+ field_0x9ee = false;
+ field_0x9ef = 0;
+ mIsDamaged = false;
+ field_0x9f1 = 0;
+ mHide = false;
+ field_0x9f3 = 0;
+ field_0x9f5 = 1;
+ field_0x9f6 = 1;
+ field_0x9d2 = cM_rndF(0x10000);
+}
+
+/* 80152B2C-80152B68 14D46C 003C+00 0/0 0/0 69/69 .text getTrnsfrmKeyAnmP__8daNpcF_cFPci
+ */
+J3DAnmTransformKey* daNpcF_c::getTrnsfrmKeyAnmP(char* i_arcName, int i_resIdx) {
+ return (J3DAnmTransformKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
+}
+
+/* 80152B68-80152BA4 14D4A8 003C+00 0/0 0/0 31/31 .text getTexPtrnAnmP__8daNpcF_cFPci */
+J3DAnmTexPattern* daNpcF_c::getTexPtrnAnmP(char* i_arcName, int i_resIdx) {
+ return (J3DAnmTexPattern*)dComIfG_getObjectRes(i_arcName, i_resIdx);
+}
+
+/* 80152BA4-80152BE0 14D4E4 003C+00 0/0 0/0 50/50 .text getTexSRTKeyAnmP__8daNpcF_cFPci
+ */
+J3DAnmTextureSRTKey* daNpcF_c::getTexSRTKeyAnmP(char* i_arcName, int i_resIdx) {
+ return (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
+}
+
+/* 80152BE0-80152C1C 14D520 003C+00 0/0 0/0 2/2 .text getTevRegKeyAnmP__8daNpcF_cFPci */
+J3DAnmTevRegKey* daNpcF_c::getTevRegKeyAnmP(char* i_arcName, int i_resIdx) {
+ return (J3DAnmTevRegKey*)dComIfG_getObjectRes(i_arcName, i_resIdx);
+}
+
+/* 80152C1C-80152C80 14D55C 0064+00 0/0 0/0 38/38 .text
+ * setMcaMorfAnm__8daNpcF_cFP18J3DAnmTransformKeyffiii */
+BOOL daNpcF_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_speed, f32 i_morf, int i_mode,
+ int i_start, int i_end) {
+ mpMorf->setAnm(i_anm, i_mode, i_morf, i_speed, (f32)i_start, (f32)i_end);
+ return true;
+}
+
+/* 80152C80-80152CC4 14D5C0 0044+00 0/0 0/0 25/25 .text
+ * setBckAnm__8daNpcF_cFP15J3DAnmTransformfiiib */
+BOOL daNpcF_c::setBckAnm(J3DAnmTransform* i_bck, f32 i_speed, int i_mode, int i_start, int i_end,
+ bool i_modify) {
+ return mBckAnm.init(i_bck, true, i_mode, i_speed, (s16)i_start, (s16)i_end, i_modify);
+}
+
+/* 80152CC4-80152D04 14D604 0040+00 0/0 0/0 32/32 .text
+ * setBtpAnm__8daNpcF_cFP16J3DAnmTexPatternP12J3DModelDatafi */
+BOOL daNpcF_c::setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_speed,
+ int i_mode) {
+ return mBtpAnm.init(i_modelData, i_btp, true, i_mode, i_speed, 0, -1);
+}
+
+/* 80152D04-80152D44 14D644 0040+00 0/0 0/0 26/26 .text
+ * setBtkAnm__8daNpcF_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi */
+BOOL daNpcF_c::setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_speed,
+ int i_mode) {
+ return mBtkAnm.init(i_modelData, i_btk, true, i_mode, i_speed, 0, -1);
+}
+
+/* 80152D44-80152D84 14D684 0040+00 0/0 0/0 2/2 .text
+ * setBrkAnm__8daNpcF_cFP15J3DAnmTevRegKeyP12J3DModelDatafi */
+BOOL daNpcF_c::setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 i_speed,
+ int i_mode) {
+ return mBrkAnm.init(i_modelData, i_brk, true, i_mode, i_speed, 0, -1);
+}
+
+/* 80152D84-80152DE0 14D6C4 005C+00 1/1 0/0 40/40 .text setEnvTevColor__8daNpcF_cFv */
+void daNpcF_c::setEnvTevColor() {
+ tevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mGndChk);
+ tevStr.room_no = dComIfG_Bgsp().GetRoomId(mGndChk);
+}
+
+/* 80152DE0-80152E24 14D720 0044+00 1/1 0/0 40/40 .text setRoomNo__8daNpcF_cFv */
+void daNpcF_c::setRoomNo() {
+ int room_id = dComIfG_Bgsp().GetRoomId(mGndChk);
+ fopAcM_SetRoomNo(this, room_id);
+ mCcStts.SetRoomId(room_id);
+}
+
+/* 80152E24-80152EC4 14D764 00A0+00 1/1 0/0 0/0 .text chkEndAnm__8daNpcF_cFf */
+BOOL daNpcF_c::chkEndAnm(f32 param_0) {
+ switch (mpMorf->getPlayMode()) {
+ case J3DFrameCtrl::EMode_LOOP:
+ return mpMorf->isLoop();
+ case J3DFrameCtrl::EMode_NONE:
+ case J3DFrameCtrl::EMode_RESET:
+ return mpMorf->isStop() && mpMorf->getPlaySpeed() == 0.0f && param_0 != 0.0f;
+ case J3DFrameCtrl::EMode_REVERSE:
+ default:
+ return false;
+ }
+}
+
+/* 80152EC4-80152F40 14D804 007C+00 1/1 0/0 0/0 .text chkEndAnm__8daNpcF_cFP12J3DFrameCtrlf */
+/**
+ * Check whether an animation has ended or looped.
+ * @param frameCtrl The frame controller for the animation.
+ * @param prevRate The previous rate of animation.
+ * @return `true` if the animation has just stopped or just looped, `false` otherwise. Returns
+ * `false` if the animation is two-way (attribute 3 or 4).
+ */
+BOOL daNpcF_c::chkEndAnm(J3DFrameCtrl* frameCtrl, f32 prevRate) {
+ switch (frameCtrl->getAttribute()) {
+ case J3DFrameCtrl::EMode_LOOP:
+ return frameCtrl->checkState(2);
+ case J3DFrameCtrl::EMode_NONE:
+ case J3DFrameCtrl::EMode_RESET:
+ return frameCtrl->checkState(1) && frameCtrl->getRate() == 0.0f && prevRate != 0.0f;
+ case J3DFrameCtrl::EMode_REVERSE:
+ default:
+ return false;
+ }
+}
+
+/* 80152F40-80153150 14D880 0210+00 1/1 0/0 2/2 .text playAllAnm__8daNpcF_cFv */
+BOOL daNpcF_c::playAllAnm() {
+ f32 rate;
+ if (!(mAnmFlags & ANM_PAUSE_EXPRESSION)) {
+ if (mAnmFlags & ANM_PLAY_BCK) {
+ rate = mBckAnm.getPlaySpeed();
+ if (mAnmFlags & ANM_PAUSE_BCK) {
+ mBckAnm.setPlaySpeed(0.0f);
+ }
+
+ mBckAnm.play();
+
+ if (chkEndAnm(mBckAnm.getFrameCtrl(), rate)) {
+ mExpressionLoops++;
+ }
+
+ mBckAnm.setPlaySpeed(rate);
+ }
+
+ if (mAnmFlags & ANM_PLAY_BTP) {
+ rate = mBtpAnm.getPlaySpeed();
+ if (mAnmFlags & ANM_PAUSE_BTP) {
+ mBtpAnm.setPlaySpeed(0.0f);
+ }
+
+ mBtpAnm.play();
+ mBtpAnm.setPlaySpeed(rate);
+
+ if (mAnmFlags & ANM_FLAG_800) {
+ if (chkEndAnm(mBtpAnm.getFrameCtrl(), rate)) {
+ mBtpTimer = cLib_getRndValue(90, 90);
+ mBtpAnm.setPlaySpeed(0.0f);
+ }
+ } else {
+ mBtpTimer = 0;
+ }
+
+ if (cLib_calcTimer(&mBtpTimer) == 0) {
+ mBtpAnm.setPlaySpeed(1.0f);
+ }
+ }
+ }
+
+ if (mAnmFlags & ANM_PLAY_MORF) {
+ rate = mpMorf->getPlaySpeed();
+ if (mAnmFlags & ANM_PAUSE_MORF) {
+ mpMorf->setPlaySpeed(0.0f);
+ mpMorf->play(mPolySound, mReverb);
+ mpMorf->setPlaySpeed(rate);
+ } else {
+ mpMorf->play(mPolySound, mReverb);
+ if (chkEndAnm(rate)) {
+ mMotionLoops++;
+ }
+ }
+ }
+
+ if (mAnmFlags & ANM_PLAY_BTK) {
+ rate = mBtkAnm.getPlaySpeed();
+ if (mAnmFlags & ANM_PAUSE_BTK) {
+ mBtkAnm.setPlaySpeed(0.0f);
+ }
+ if (!ctrlBtk()) {
+ mBtkAnm.play();
+ }
+ mBtkAnm.setPlaySpeed(rate);
+ }
+
+ if (mAnmFlags & ANM_PLAY_BRK) {
+ rate = mBrkAnm.getPlaySpeed();
+ if (mAnmFlags & ANM_PAUSE_BRK) {
+ mBrkAnm.setPlaySpeed(0.0f);
+ }
+ mBrkAnm.play();
+ mBrkAnm.setPlaySpeed(rate);
+ }
+
+ mAnmFlags &= ~ANM_PAUSE_ALL;
+ return true;
+}
+
+/* 80153150-80153264 14DA90 0114+00 0/0 0/0 25/25 .text
+ * playExpressionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData */
+/**
+ * Set the expression animation.
+ * @param anm The animation data, a two-dimensional array of data pointers, indexed first by
+ * the expression index and second by the expression phase. Each piece of data consists of
+ * an animation index for that phase of the expression, the number of interpolation frames, and
+ * the number of loops before moving on to the next phase (or 0 for the last phase).
+ */
+// NONMATCHING - regalloc, matches debug
+void daNpcF_c::playExpressionAnm(daNpcF_c::daNpcF_anmPlayData*** anm) {
+ daNpcF_anmPlayData* playData = NULL;
+ f32 morf;
+
+ if (anm[mExpression] != NULL) {
+ playData = anm[mExpression][mExpressionPhase];
+ }
+
+ if (playData != NULL) {
+ if (mExpressionPrevPhase == mExpressionPhase && playData->numLoops > 0 &&
+ playData->numLoops <= mExpressionLoops)
+ {
+ mExpressionPhase++;
+ playData = anm[mExpression][mExpressionPhase];
+ }
+
+ if (playData != NULL && mExpressionPrevPhase != mExpressionPhase) {
+ setExpressionAnm(playData->idx, true);
+ morf = playData->morf;
+ if (mExpressionPhase == 0 && 0.0f <= mExpressionMorfOverride) {
+ morf = mExpressionMorfOverride;
+ }
+ mExpressionMorf = morf;
+ mpMorf->setMorf(morf);
+ }
+ }
+
+ mExpressionPrevPhase = mExpressionPhase;
+}
+
+/* 80153264-8015337C 14DBA4 0118+00 0/0 0/0 37/37 .text
+ * playMotionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData */
+/**
+ * Set the motion animation.
+ * @param anm The animation data, a two-dimensional array of data pointers, indexed first by
+ * the motion index and second by the motion phase. Each piece of data consists of
+ * an animation index for that phase of the motion, the number of interpolation frames, and the
+ * number of loops before moving on to the next phase (or 0 for the last phase).
+ */
+// NONMATCHING - regalloc, matches debug
+void daNpcF_c::playMotionAnm(daNpcF_c::daNpcF_anmPlayData*** anm) {
+ daNpcF_anmPlayData* playData = NULL;
+ f32 morf;
+
+ if (anm[mMotion] != NULL) {
+ playData = anm[mMotion][mMotionPhase];
+ }
+
+ if (playData != NULL) {
+ if (mMotionPrevPhase == mMotionPhase && playData->numLoops > 0 &&
+ playData->numLoops <= mMotionLoops)
+ {
+ mMotionPhase++;
+ playData = anm[mMotion][mMotionPhase];
+ }
+
+ if (playData != NULL && mMotionPrevPhase != mMotionPhase) {
+ setMotionAnm(playData->idx, 0.0f);
+ morf = playData->morf;
+ if (mMotionPhase == 0 && 0.0f <= mMotionMorfOverride) {
+ morf = mMotionMorfOverride;
+ }
+ mExpressionMorf = 0.0f;
+ mpMorf->setMorf(morf);
+ }
+ }
+
+ mMotionPrevPhase = mMotionPhase;
+}
+
+/* 8015337C-80153578 14DCBC 01FC+00 0/0 0/0 34/34 .text setLookatMtx__8daNpcF_cFiPif */
+/**
+ * Compute the animation matrix for the backbone, neck, or head joint.
+ * This matrix is applied to the matrix in `mDoMtx_stack_c::now`.
+ * @param i_jointNo The index of the joint in question.
+ * @param i_jointList An array of the three indices of the joints for the backbone, neck, and head.
+ * @param i_neckHeadAngleRatio The ratio between the neck angle and the head angle.
+ */
+void daNpcF_c::setLookatMtx(int i_jointNo, int* i_jointList, f32 i_neckHeadAngleRatio) {
+ cXyz pos;
+ Mtx baseMtx, invParentMtx;
+
+ if (i_jointList[0] == i_jointNo || i_jointList[1] == i_jointNo || i_jointList[2] == i_jointNo) {
+ mLookatAngle[1].x = (s16)((f32)mLookatAngle[2].x * i_neckHeadAngleRatio);
+ mLookatAngle[1].y = (s16)((f32)mLookatAngle[2].y * i_neckHeadAngleRatio);
+ mLookatAngle[1].z = (s16)((f32)mLookatAngle[2].z * i_neckHeadAngleRatio);
+
+ MTXCopy(mDoMtx_stack_c::get(), baseMtx);
+ pos.set(baseMtx[0][3], baseMtx[1][3], baseMtx[2][3]);
+ baseMtx[0][3] = baseMtx[1][3] = baseMtx[2][3] = 0.0f;
+
+ mDoMtx_stack_c::ZXYrotS(mCurAngle);
+ if (i_jointList[0] != i_jointNo) {
+ if (i_jointList[1] == i_jointNo) {
+ mDoMtx_stack_c::ZXYrotM(mLookatAngle[0]);
+ } else if (i_jointList[2] == i_jointNo) {
+ mDoMtx_stack_c::ZXYrotM(mLookatAngle[1]);
+ }
+ }
+ mDoMtx_stack_c::inverse();
+ MTXCopy(mDoMtx_stack_c::get(), invParentMtx);
+
+ mDoMtx_stack_c::transS(pos);
+ mDoMtx_stack_c::XYZrotM(mCurAngle);
+ if (i_jointList[0] == i_jointNo) {
+ mDoMtx_stack_c::ZXYrotM(mLookatAngle[0]);
+ } else if (i_jointList[1] == i_jointNo) {
+ mDoMtx_stack_c::ZXYrotM(mLookatAngle[1]);
+ } else if (i_jointList[2] == i_jointNo) {
+ mDoMtx_stack_c::ZXYrotM(mLookatAngle[2]);
+ }
+ mDoMtx_stack_c::concat(invParentMtx);
+ mDoMtx_stack_c::concat(baseMtx);
+ }
+}
+
+/* 80153578-80153658 14DEB8 00E0+00 0/0 0/0 13/13 .text hitChk2__8daNpcF_cFP8dCcD_Cylii
+ */
+BOOL daNpcF_c::hitChk2(dCcD_Cyl* i_ccCyl, BOOL param_1, BOOL param_2) {
+ static_cast<dCcD_Stts*>(i_ccCyl->GetStts())->Move();
+
+ if (mDamageTimer == 0 && i_ccCyl->ChkTgHit()) {
+ fopAc_ac_c* hit_actor = i_ccCyl->GetTgHitAc();
+ if (hit_actor != NULL) {
+ field_0x990 = fopAcM_searchActorAngleY(this, hit_actor) - mCurAngle.y;
+ if (fopAcM_GetName(hit_actor) == PROC_NPC_TK) {
+ if (param_1) {
+ static_cast<daNPC_TK_c*>(hit_actor)->setBump();
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ if (param_2) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+ }
+
+ i_ccCyl->ClrTgHit();
+ return false;
+}
+
+/* 80153658-80153718 14DF98 00C0+00 0/0 0/0 12/12 .text setDamage__8daNpcF_cFiii */
+void daNpcF_c::setDamage(int i_timer, int i_expression, int i_motion) {
+ if (i_expression >= 0) {
+ setExpression(i_expression, 0.0f);
+ }
+ if (i_motion >= 0) {
+ setMotion(i_motion, 0.0f, true);
+ }
+
+ field_0x984[0] = 8192.0f;
+ field_0x984[2] = 12743.0f;
+ field_0x992 = 0x4000;
+ mTotalDamageTimer = i_timer;
+ mDamageTimer = mTotalDamageTimer;
+ speed.setall(0.0f);
+ speedF = 0.0f;
+ mIsDamaged = true;
+}
+
+/* 80153718-8015387C 14E058 0164+00 0/0 0/0 81/81 .text ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci
+ */
+int daNpcF_c::ctrlMsgAnm(int& o_expression, int& o_motion, fopAc_ac_c* param_2, BOOL param_3) {
+ o_expression = -1;
+ o_motion = -1;
+
+ if (param_3 || eventInfo.checkCommandTalk() || mStaffID != -1) {
+ fopAc_ac_c* talkPartner = dComIfGp_event_getTalkPartner();
+ if (talkPartner == param_2) {
+ msg_class* msg_p = dMsgObject_c::getActor();
+ JUT_ASSERT(2780, 0 != msg_p);
+
+ if (msg_p->mode == 2 || msg_p->mode == 3) {
+ field_0x9a4 = -1;
+ } else if (msg_p->mode == dEvtCmd_INCATCH_e) {
+ if (msg_p->msg_idx != field_0x9a4) {
+ o_expression = dComIfGp_getMesgFaceAnimeAttrInfo();
+ o_motion = dComIfGp_getMesgAnimeAttrInfo();
+ field_0x9a4 = msg_p->msg_idx;
+ }
+
+ if (dMsgObject_c::isMouthCheck()) {
+ mAnmFlags &= ~ANM_PAUSE_EXPRESSION;
+ } else {
+ mAnmFlags |= ANM_PAUSE_EXPRESSION;
+ }
+ mMsgTimer = 20;
+ } else {
+ if (mAnmFlags & ANM_PAUSE_EXPRESSION) {
+ mAnmFlags &= ~ANM_PAUSE_EXPRESSION;
+ }
+ field_0x9a4 = -1;
+ }
+ } else {
+ field_0x9a4 = -1;
+ if (mMsgTimer != 0) {
+ mMsgTimer = 1;
+ }
+ }
+ }
+
+ if (!param_3) {
+ cLib_calcTimer(&mMsgTimer);
+ }
+
+ return mMsgTimer;
+}
+
+/* 8015387C-80153954 14E1BC 00D8+00 0/0 0/0 45/45 .text orderEvent__8daNpcF_cFiPcUsUsUcUs
+ */
+void daNpcF_c::orderEvent(int i_speak, char* i_evtName, u16 param_2, u16 i_priority, u8 i_mapToolID,
+ u16 i_flag) {
+ if (i_evtName != NULL) {
+ mEventIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, 0xff);
+ fopAcM_orderOtherEventId(this, mEventIdx, i_mapToolID, param_2, i_priority, i_flag);
+ } else if (!mTwilight || daPy_py_c::checkNowWolfEyeUp()) {
+ if ((attention_info.flags & 8) || (attention_info.flags & 2)) {
+ eventInfo.onCondition(dEvtCnd_CANTALK_e);
+ if (i_speak) {
+ fopAcM_orderSpeakEvent(this, 0, 0);
+ }
+ }
+ }
+}
+
+/* 80153954-801539F0 14E294 009C+00 0/0 0/0 31/31 .text changeEvent__8daNpcF_cFPcPcUsUs
+ */
+void daNpcF_c::changeEvent(char* i_arcName, char* i_evtName, u16 param_2, u16 param_3) {
+ if (i_arcName != NULL) {
+ eventInfo.setArchiveName(i_arcName);
+ dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName());
+ }
+
+ JUT_ASSERT(2887, 0 != i_evtName);
+
+ mEventIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, 0xFF);
+ dComIfGp_getEvent().reset(this);
+ fopAcM_orderChangeEventId(this, mEventIdx, param_2, param_3);
+}
+
+/* 801539F0-80153A78 14E330 0088+00 0/0 0/0 21/21 .text chkActorInSight__8daNpcF_cFP10fopAc_ac_cf
+ */
+BOOL daNpcF_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_fovY) {
+ s16 tmp = mHeadAngle.y;
+ s16 angle = fopAcM_searchActorAngleY(this, i_actor) - tmp;
+ s16 abs_angle = abs(angle);
+ return i_fovY == 180.0f || abs_angle < cM_deg2s(i_fovY);
+}
+
+/* 80153A78-80153BDC 14E3B8 0164+00 1/1 0/0 0/0 .text
+ * chkActorInArea__8daNpcF_cFP10fopAc_ac_c4cXyz4cXyzs */
+/**
+ * Check whether an actor is in an elliptic cylinder region.
+ * @param i_actor The actor to check.
+ * @param i_center The center of the cylinder.
+ * @param i_bounds The dimensions of the bounding box.
+ * @param i_angleY The angle to align the axis of the ellipse.
+ * @return Whether the actor's position vector lies in the elliptic cylinder.
+ */
+BOOL daNpcF_c::chkActorInArea(fopAc_ac_c* i_actor, cXyz i_center, cXyz i_bounds, s16 i_angleY) {
+ cXyz delta, relPos;
+ BOOL ret = false;
+
+ mDoMtx_stack_c::YrotS(-i_angleY);
+ mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z);
+ mDoMtx_stack_c::multVec(&i_actor->current.pos, &relPos);
+ f32 boundX = fabsf(i_bounds.x);
+ f32 boundZ = fabsf(i_bounds.z);
+ f32 posX = fabsf(relPos.x);
+ f32 posZ = fabsf(relPos.z);
+ delta = i_center - i_actor->current.pos;
+
+ if ((posX * posX) / (boundX * boundX) + (posZ * posZ) / (boundZ * boundZ) <= 1.0f
+ && -i_bounds.y < delta.y && delta.y < i_bounds.y)
+ {
+ ret = true;
+ }
+
+ return ret;
+}
+
+/* 80153BDC-80153D1C 14E51C 0140+00 0/0 0/0 25/25 .text
+ * chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci */
+/**
+ * Check whether an actor lies within another actor's region of attention.
+ * @param i_actorCheck The actor to check.
+ * @param i_actorAttn The actor whose attention region we are using.
+ * @param i_distIndex An index into the distance table to determine the attention region.
+ * @return Whether `actorCheck` is within the region of attention of `actorAttn`.
+ */
+BOOL daNpcF_c::chkActorInAttnArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorAttn,
+ int i_distIndex) {
+ BOOL ret = false;
+ f32 neg_lower_y = dComIfGp_getAttention().getDistTable(i_distIndex).mLowerY * -1.0f;
+ f32 neg_upper_y = dComIfGp_getAttention().getDistTable(i_distIndex).mUpperY * -1.0f;
+ cXyz center = i_actorAttn->current.pos;
+ cXyz bounds;
+
+ bounds.x = dComIfGp_getAttention().getDistTable(i_distIndex).mDistMax;
+ bounds.y = (fabsf(neg_lower_y) + fabsf(neg_upper_y)) / 2.0f;
+ bounds.z = dComIfGp_getAttention().getDistTable(i_distIndex).mDistMax;
+ center.y = bounds.y + (center.y + neg_upper_y);
+
+ if (chkActorInArea(i_actorCheck, center, bounds, i_actorAttn->shape_angle.y)) {
+ ret = true;
+ }
+
+ return ret;
+}
+
+/* 80153D1C-80153D84 14E65C 0068+00 0/0 0/0 118/118 .text initTalk__8daNpcF_cFiPP10fopAc_ac_c */
+BOOL daNpcF_c::initTalk(int i_flowID, fopAc_ac_c** param_1) {
+ mFlow.init(this, i_flowID, 0, param_1);
+ f32 tmp = 0.0f;
+ speedF = tmp;
+ speed.set(tmp, tmp, tmp);
+ mOrderSpeakEvt = false;
+ field_0x9ec = false;
+ return true;
+}
+
+/* 80153D84-80153EF4 14E6C4 0170+00 0/0 0/0 119/119 .text talkProc__8daNpcF_cFPiiPP10fopAc_ac_c */
+BOOL daNpcF_c::talkProc(int* param_0, BOOL param_1, fopAc_ac_c** i_talkPartners_p) {
+ BOOL ret = false;
+ int i1, motion, expression, i2;
+ motion = -1;
+ expression = -1;
+
+ if (dMsgObject_c::isMsgSendControl()) {
+ if (param_1) {
+ dMsgObject_c::offMsgSendControl();
+ }
+ } else if (mFlow.doFlow(this, i_talkPartners_p, 0)) {
+ ret = true;
+ } else {
+ if (mFlow.getMsg() != NULL && (mFlow.getMsg()->mode == 2 || mFlow.getMsg()->mode == 6) && param_0 != NULL) {
+ for (int i = 0; param_0[i] > 0; i++) {
+ if (param_0[i] == mFlow.getMsgNo()) {
+ ret = true;
+ break;
+ }
+ }
+ }
+
+ if (mFlow.checkEventRender(&i1, &motion, &expression, &i2)) {
+ if (expression != -1) {
+ setExpression(expression, -1.0f);
+ }
+ if (motion != -1) {
+ setMotion(motion, -1.0f, false);
+ }
+ }
+ }
+
+ return ret;
+}
+
+/* 80153EF4-801540A4 14E834 01B0+00 1/1 0/0 55/55 .text turn__8daNpcF_cFsfi */
+BOOL daNpcF_c::turn(s16 i_targetAngle, f32 i_rate, int i_direction) {
+ int target_angle = i_targetAngle;
+ if (mTurnAmount == 0) {
+ mTurnStepNum = fabsf(cM_sht2d((s16)(current.angle.y - target_angle)));
+ mTurnStepNum = (mTurnStepNum / 180.0f) * i_rate;
+ mTurnStepNum = (int)mTurnStepNum + 1;
+ if (mTurnStepNum < 8.0f) {
+ mTurnStepNum = 8.0f;
+ }
+ mTurnStartAngle = current.angle.y;
+ }
+
+ s16 turn_start_angle = mTurnStartAngle;
+ if (i_direction == 0) {
+ i_direction = (s16)(target_angle - turn_start_angle) >= 0 ? 1 : -1;
+ }
+
+ u16 angle_diff = target_angle - turn_start_angle;
+ int signed_angle_diff = angle_diff;
+ if (i_direction < 0) {
+ signed_angle_diff = -(u16)(0xffff - angle_diff);
+ }
+
+ int turn_angle = (int)(signed_angle_diff * cM_ssin(mTurnAmount));
+ mTurnAmount = (int)((f32)mTurnAmount + (f32)0x4000 / mTurnStepNum);
+ if ((u16)mTurnAmount >= 0x4000) {
+ current.angle.y = i_targetAngle;
+ mTurnAmount = 0x4000;
+ } else {
+ current.angle.y = mTurnStartAngle + turn_angle;
+ }
+
+ return current.angle.y - (s16)i_targetAngle == 0;
+}
+
+/* 801540A4-80154250 14E9E4 01AC+00 0/0 0/0 58/58 .text step__8daNpcF_cFsiii */
+BOOL daNpcF_c::step(s16 i_targetAngle, int i_expression, int i_motion, int i_rate) {
+ if (mTurnMode == 0) {
+ if ((int)fabsf(cM_sht2d((s16)(i_targetAngle - mCurAngle.y))) > 40) {
+ if (i_expression >= 0) {
+ setExpression(i_expression, -1.0f);
+ }
+ if (i_motion >= 0) {
+ setMotion(i_motion, -1.0f, false);
+ }
+ }
+
+ mTurnTargetAngle = i_targetAngle;
+ mTurnAmount = 0;
+ if (mCurAngle.y == mTurnTargetAngle) {
+ mTurnMode++;
+ }
+
+ current.angle.y = mCurAngle.y;
+ shape_angle.y = current.angle.y;
+ mTurnMode++;
+ } else if (mTurnMode == 1) {
+ if (turn(mTurnTargetAngle, i_rate, 0)) {
+ shape_angle.y = current.angle.y;
+ mCurAngle.y = current.angle.y;
+ mOldAngle.y = current.angle.y;
+ mTurnMode++;
+ } else {
+ shape_angle.y = current.angle.y;
+ mCurAngle.y = current.angle.y;
+ }
+ }
+
+ return mTurnMode > 1;
+}
+
+/* 80154250-80154278 14EB90 0028+00 0/0 0/0 81/81 .text setAngle__8daNpcF_cFs */
+void daNpcF_c::setAngle(s16 i_angle) {
+ current.angle.y = i_angle;
+ shape_angle.y = current.angle.y;
+ mCurAngle.y = current.angle.y;
+ mOldAngle.y = mCurAngle.y;
+ old.angle.y = current.angle.y;
+}
+
+/* 80154278-801542A0 14EBB8 0028+00 0/0 0/0 36/36 .text getDistTableIdx__8daNpcF_cFii */
+u8 daNpcF_c::getDistTableIdx(int param_0, int param_1) {
+ return daNpcF_getDistTableIdx(param_0, param_1);
+}
+
+/* 801542A0-8015436C 14EBE0 00CC+00 0/0 0/0 6/6 .text getEvtAreaTagP__8daNpcF_cFii */
+// NONMATCHING regalloc
+fopAc_ac_c* daNpcF_c::getEvtAreaTagP(int i_type, int i_no) {
+ mFindCount = 0;
+ mSrchActorName = PROC_TAG_EVTAREA;
+ fpcM_Search(this->srchActor, this);
+
+ for (int i = 0; i < mFindCount; i++) {
+ daTag_EvtArea_c* evt_area = static_cast<daTag_EvtArea_c*>(mFindActorPList[i]);
+ if (i_type == evt_area->getType() && i_no == evt_area->getNo()) {
+ return evt_area;
+ }
+ }
+
+ return NULL;
+}
+
+/* 8015436C-80154730 14ECAC 03C4+00 0/0 0/0 12/12 .text getAttnActorP__8daNpcF_cFiPFPvPv_Pvffffsii
+ */
+fopAc_ac_c* daNpcF_c::getAttnActorP(BOOL i_playerAttn, fpcLyIt_JudgeFunc i_searchFunc, f32 i_radius,
+ f32 i_offsetY1, f32 i_offsetY2, f32 i_fovY, s16 i_sightAngle,
+ int param_7, BOOL param_8) {
+ fopAc_ac_c* actor = NULL;
+ int sp40 = 450 + (int)((cM_rnd() - 0.5f) * 450.0f);
+ int sp3C = param_7 + (int)((cM_rnd() - 0.5f) * param_7);
+ int sp38 = 0;
+ int sp34;
+
+ f32 minDistance = 1000000000.0f;
+ f32 var_f30 = i_radius;
+
+ if (mAttnChangeTimer != 0) {
+ fopAcM_SearchByID(daPy_getPlayerActorClass()->getGrabActorID(), &actor);
+ if (mAttnActor[mAttnIdx].getActorP() != actor) {
+ cLib_calcTimer(&mAttnChangeTimer);
+ }
+
+ actor = mAttnActor[mAttnIdx].getActorP();
+ }
+
+ if (actor == NULL) {
+ mAttnChangeTimer = 0;
+
+ if (i_playerAttn) {
+ var_f30 = fopAcM_searchPlayerDistanceXZ(this);
+ }
+
+ mFindCount = 0;
+ fpcM_Search(i_searchFunc, this);
+
+ int i, j;
+ for (i = 0; i < mFindCount; i++) {
+ BOOL sp30 = chkPointInArea(getAttentionPos(mFindActorPList[i]), attention_info.position,
+ var_f30, i_offsetY1, i_offsetY2, 0);
+ if (sp30 && chkActorInSight2(mFindActorPList[i], i_fovY, i_sightAngle)) {
+ for (j = 0; j < 5; j++) {
+ // !@Bug I think mAttnActorTimer index should be j
+ if (mFindActorPList[i] == mAttnActor[j].getActorP() && mAttnActorTimer[i] != 0)
+ {
+ break;
+ }
+ }
+
+ if (j == 5) {
+ f32 dist2 = fopAcM_searchActorDistanceXZ(this, mFindActorPList[i]);
+ if (dist2 < minDistance) {
+ actor = mFindActorPList[i];
+ minDistance = dist2;
+ }
+ }
+ }
+ }
+
+ if (actor == NULL && i_playerAttn) {
+ fopAcM_SearchByID(daPy_getPlayerActorClass()->getGrabActorID(), &actor);
+ sp38 = 1;
+ }
+
+ if (actor != NULL) {
+ sp34 = 900;
+ i = 0;
+
+ for (j = 0; j < 5; j++) {
+ if (mAttnActorTimer[j] < sp34) {
+ sp34 = mAttnActorTimer[j];
+ i = j;
+ }
+ }
+
+ mAttnActor[i].entry(actor);
+
+ if (param_8) {
+ mAttnActorTimer[i] = sp38 == 1 ? 0 : sp40;
+ } else {
+ mAttnActorTimer[i] = 0;
+ }
+
+ mAttnChangeTimer = sp38 == 1 ? 30 : sp3C;
+ mAttnIdx = i;
+ }
+ }
+
+ if (actor == NULL) {
+ mAttnChangeTimer = 0;
+ }
+
+ return actor;
+}
+
+/* 80154730-80154834 14F070 0104+00 2/2 0/0 0/0 .text chkActorInSight2__8daNpcF_cFP10fopAc_ac_cfs
+ */
+BOOL daNpcF_c::chkActorInSight2(fopAc_ac_c* i_actor, f32 i_fovY, s16 i_sightAngle) {
+ if (i_fovY < 180.0f) {
+ s16 fov_y = cM_deg2s(i_fovY);
+ cXyz actor_attn_pos = getAttentionPos(i_actor);
+ cSGlobe globe(attention_info.position - actor_attn_pos);
+ cSAngle s_ang_diff = cSAngle(globe.U().Inv()) - i_sightAngle;
+ s16 ang_diff = s_ang_diff.Val();
+ if (ang_diff < 0) {
+ ang_diff = -ang_diff;
+ }
+ return ang_diff <= fov_y;
+ } else {
+ return true;
+ }
+}
+
+/* 80154834-801548F4 14F174 00C0+00 2/2 0/0 0/0 .text chkPointInArea__8daNpcF_cF4cXyz4cXyzfffs */
+BOOL daNpcF_c::chkPointInArea(cXyz i_point, cXyz param_1, f32 i_radius, f32 i_offsetY1,
+ f32 i_offsetY2, s16 i_angleY) {
+ cXyz bounds, center;
+
+ f32 lower = i_offsetY2;
+ f32 upper = i_offsetY1;
+
+ if (i_offsetY1 < i_offsetY2) {
+ lower = i_offsetY1;
+ upper = i_offsetY2;
+ }
+
+ bounds.set(i_radius, fabsf(upper - lower) / 2.0f, i_radius);
+
+ center = param_1;
+ center.y += lower;
+ center.y += bounds.y;
+
+ return chkPointInArea(i_point, center, bounds, i_angleY);
+}
+
+/* 801548F4-8015496C 14F234 0078+00 1/1 0/0 0/0 .text chkPointInArea__8daNpcF_cF4cXyz4cXyz4cXyzs
+ */
+BOOL daNpcF_c::chkPointInArea(cXyz i_point, cXyz i_center, cXyz i_bounds, s16 i_angleY) {
+ return daNpcF_chkPointInArea(i_point, i_center, i_bounds, i_angleY);
+}
+
+/* 8015496C-801549E0 14F2AC 0074+00 3/3 0/0 0/0 .text getAttentionPos__8daNpcF_cFP10fopAc_ac_c */
+cXyz daNpcF_c::getAttentionPos(fopAc_ac_c* i_actor_p) {
+ cXyz pos = i_actor_p->attention_info.position;
+
+ if (fopAcM_GetName(i_actor_p) == PROC_ALINK) {
+ pos.y -= daPy_py_c::getAttentionOffsetY();
+ }
+
+ return pos;
+}
+
+/* 801549E0-80154BD8 14F320 01F8+00 0/0 0/0 18/18 .text chkFindPlayer2__8daNpcF_cFis */
+BOOL daNpcF_c::chkFindPlayer2(BOOL i_hasAttn, s16 i_angle) {
+ BOOL sp20;
+
+ cXyz attn_pos = getAttentionPos(daPy_getPlayerActorClass());
+ int attn_no = i_hasAttn == false ? attention_info.distances[fopAc_attn_SPEAK_e]
+ : attention_info.distances[fopAc_attn_TALK_e];
+ f32 dist_max = i_hasAttn == false ? dComIfGp_getAttention().getDistTable(attn_no).mDistMax
+ : dComIfGp_getAttention().getDistTable(attn_no).mDistMaxRelease;
+ f32 lower_y = dComIfGp_getAttention().getDistTable(attn_no).mLowerY * -1.0f;
+ f32 upper_y = dComIfGp_getAttention().getDistTable(attn_no).mUpperY * -1.0f;
+ u32 angle_select = dComIfGp_getAttention().getDistTable(attn_no).mAngleSelect;
+
+ f32 fovy = 180.0f;
+ if (angle_select & 8) {
+ fovy = 30.0f;
+ } else if (angle_select & 0x10) {
+ fovy = 45.0f;
+ } else if (angle_select & 0x20) {
+ fovy = 60.0f;
+ } else if (angle_select & 0x40) {
+ fovy = 90.0f;
+ } else if (angle_select & 0x80) {
+ fovy = 110.0f;
+ } else if (angle_select & 0x100) {
+ fovy = 135.0f;
+ }
+
+ sp20 = chkPointInArea(attn_pos, attention_info.position, dist_max, lower_y, upper_y, 0);
+ if (sp20 && chkActorInSight2(daPy_getPlayerActorClass(), fovy, i_angle)) {
+ return true;
+ }
+
+ return false;
+}
+
+/* 80154BD8-80154DA8 14F518 01D0+00 1/1 0/0 0/0 .text setHitodamaPrtcl__8daNpcF_cFv */
+void daNpcF_c::setHitodamaPrtcl() {
+ JPABaseEmitter* emitter = NULL;
+ cXyz pos;
+
+ field_0x9d0 = (u16)(field_0x9d2 * 2);
+ field_0x9b8.x = cM_ssin(field_0x9d2) * 8.0f;
+ field_0x9b8.y = cM_ssin(field_0x9d0) * 4.0f;
+ field_0x9b8.z = field_0x9b8.x * -cM_ssin(shape_angle.y);
+
+ field_0x9b8.x *= cM_scos(shape_angle.y);
+ field_0x9d2 += (s16)0x400;
+
+ pos.x = eyePos.x + field_0x9b8.x + field_0x9c4.x;
+ pos.y = eyePos.y + field_0x9b8.y + field_0x9c4.y;
+ pos.z = eyePos.z + field_0x9b8.z + field_0x9c4.z;
+
+ for (int i = 0; i < 2; i++) {
+ static const u16 id[2] = {0x8497, 0x8498};
+ mHitodamaParticleKey[i] = dComIfGp_particle_set(mHitodamaParticleKey[i], id[i], &pos, &mCurAngle, NULL);
+
+ emitter = dComIfGp_particle_getEmitter(mHitodamaParticleKey[i]);
+ if (emitter != NULL) {
+ u8 alpha = dComIfGs_wolfeye_effect_check() == 0 ? 0xFF : 0;
+ emitter->setGlobalTranslation(pos.x, pos.y, pos.z);
+ emitter->setGlobalAlpha(alpha);
+ }
+ }
+}
+
+/* 80154DA8-80154E54 14F6E8 00AC+00 1/1 0/0 1/1 .text
+ * daNpcF_pntVsLineSegmentLengthSquare2D__FffffffPfPfPf */
+BOOL daNpcF_pntVsLineSegmentLengthSquare2D(f32 i_pntX, f32 i_pntZ, f32 i_startX, f32 i_startZ,
+ f32 i_endX, f32 i_endZ, f32* o_projX, f32* o_projZ,
+ f32* o_dist2) {
+ BOOL ret = false;
+ f32 len2;
+ f32 line_x = i_endX - i_startX;
+ f32 line_z = i_endZ - i_startZ;
+ len2 = line_x * line_x + line_z * line_z;
+
+ if (0.0f == len2) {
+ *o_dist2 = 0.0f;
+ return false;
+ }
+
+ f32 prm = (line_x * (i_pntX - i_startX) + line_z * (i_pntZ - i_startZ)) / len2;
+
+ if (0.0f <= prm && prm <= 1.0f) {
+ ret = true;
+ }
+
+ *o_projX = i_startX + line_x * prm;
+ *o_projZ = i_startZ + line_z * prm;
+ //!@bug The last `o_projX` should be `o_projZ`
+ *o_dist2 = (*o_projX - i_pntX) * (*o_projX - i_pntX)
+ + (*o_projZ - i_pntZ) * (*o_projX - i_pntZ);
+ return ret;
+}
+
+/* 80154E54-80154E5C 14F794 0008+00 1/1 0/0 0/0 .text daNpcF_putNurbs__FP4dPntiiP4dPnti
+ */
+static u16 daNpcF_putNurbs(dPnt* param_0, int param_1, int param_2, dPnt* param_3, int param_4) {
+ return 0;
+}
+
+/* 80154E5C-8015556C 14F79C 0710+00 1/1 0/0 1/1 .text daNpcF_chkPassed__F4cXyzP4dPntUsUsii */
+BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_isClosed,
+ BOOL i_isReversed) {
+ cXyz prev_pos, cur_pos, next_pos, pos;
+ u16 prev_idx = i_idx;
+ u16 next_idx = i_idx;
+ daNpcF_incIdx(i_num, next_idx, i_isClosed, false);
+ daNpcF_decIdx(i_num, prev_idx, i_isClosed, false);
+
+ prev_pos.set(i_points[prev_idx].m_position.x,
+ i_points[prev_idx].m_position.y,
+ i_points[prev_idx].m_position.z);
+ cur_pos.set(i_points[i_idx].m_position.x,
+ i_points[i_idx].m_position.y,
+ i_points[i_idx].m_position.z);
+ next_pos.set(i_points[next_idx].m_position.x,
+ i_points[next_idx].m_position.y,
+ i_points[next_idx].m_position.z);
+
+ f32 dist;
+ s16 angle;
+ if (prev_idx != i_idx || next_idx != i_idx) {
+ if (prev_idx < i_idx && i_idx < next_idx) {
+ dist = (next_pos - prev_pos).absXZ();
+ angle = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z);
+ pos = prev_pos;
+ prev_pos.x = pos.x + dist * -1.0f * cM_ssin(angle);
+ prev_pos.z = pos.z + dist * -1.0f * cM_scos(angle);
+ next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle);
+ next_pos.z = pos.z + dist * 2.0f * cM_scos(angle);
+ } else if (prev_idx < i_idx) {
+ dist = (cur_pos - prev_pos).absXZ();
+ angle = cM_atan2s(cur_pos.x - prev_pos.x, cur_pos.z - prev_pos.z);
+ pos = cur_pos;
+ prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle);
+ prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle);
+ next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle);
+ next_pos.z = pos.z + dist * 2.0f * cM_scos(angle);
+ } else if (i_idx < next_idx) {
+ dist = (next_pos - cur_pos).absXZ();
+ angle = cM_atan2s(next_pos.x - cur_pos.x, next_pos.z - cur_pos.z);
+ pos = cur_pos;
+ prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle);
+ prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle);
+ next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle);
+ next_pos.z = pos.z + dist * 2.0f * cM_scos(angle);
+ }
+
+ f32 proj_x, proj_z, proj2_x, proj2_z;
+ daNpcF_pntVsLineSegmentLengthSquare2D(i_pos.x, i_pos.z, prev_pos.x, prev_pos.z,
+ next_pos.x, next_pos.z, &proj_x, &proj_z, &dist);
+ if (cM3d_IsZero(dist)) {
+ return false;
+ } else {
+ daNpcF_pntVsLineSegmentLengthSquare2D(cur_pos.x, cur_pos.z, prev_pos.x, prev_pos.z,
+ next_pos.x, next_pos.z, &proj2_x, &proj2_z, &dist);
+ s16 angle2;
+ if (i_isReversed) {
+ angle2 = cM_atan2s(prev_pos.x - next_pos.x, prev_pos.z - next_pos.z);
+ } else {
+ angle2 = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z);
+ }
+ u16 angle_diff = abs((s16)(angle2 - cM_atan2s(proj2_x - proj_x, proj2_z - proj_z)));
+ return angle_diff > 0x4000;
+ }
+ } else {
+ return false;
+ }
+}
+
+/* 8015556C-80155634 14FEAC 00C8+00 1/1 0/0 8/8 .text daNpcF_getGroundAngle__FP13cBgS_PolyInfos */
+s16 daNpcF_getGroundAngle(cBgS_PolyInfo* param_0, s16 param_1) {
+ cM3dGPla plane;
+
+ if (dComIfG_Bgsp().ChkPolySafe(*param_0)) {
+ if (!dComIfG_Bgsp().GetTriPla(*param_0, &plane) || !cBgW_CheckBGround(plane.mNormal.y)) {
+ return 0;
+ } else {
+ return fopAcM_getPolygonAngle(&plane, param_1);
+ }
+ } else {
+ return 0;
+ }
+}
+
+/* 80155634-80155674 14FF74 0040+00 0/0 0/0 69/69 .text daNpcF_chkEvtBit__FUl */
+BOOL daNpcF_chkEvtBit(u32 i_no) {
+ return dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[i_no]);
+}
+
+/* 80155674-801556B4 14FFB4 0040+00 0/0 0/0 13/13 .text daNpcF_onEvtBit__FUl */
+void daNpcF_onEvtBit(u32 i_no) {
+ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[i_no]);
+}
+
+/* 801556B4-801556F4 14FFF4 0040+00 0/0 0/0 6/6 .text daNpcF_chkTmpBit__FUl */
+BOOL daNpcF_chkTmpBit(u32 i_no) {
+ return dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]);
+}
+
+/* 801556F4-80155734 150034 0040+00 0/0 0/0 6/6 .text daNpcF_onTmpBit__FUl */
+void daNpcF_onTmpBit(u32 i_no) {
+ dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]);
+}
+
+/* 80155734-80155774 150074 0040+00 1/1 0/0 36/36 .text daNpcF_offTmpBit__FUl */
+void daNpcF_offTmpBit(u32 i_no) {
+ dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]);
+}
+
+/* 80155774-80155854 1500B4 00E0+00 0/0 2/2 5/5 .text
+ * daNpcF_getPlayerInfoFromPlayerList__FiiR4cXyzR5csXyz */
+int daNpcF_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz& param_2, csXyz& param_3) {
+ int rv = 0;
+
+ dStage_roomDt_c* room_p = dComIfGp_roomControl_getStatusRoomDt(i_roomNo);
+ stage_actor_data_class* entries = room_p->getPlayer()->m_entries;
+
+ for (int i = 0; i < room_p->getPlayerNum(); entries++, i++) {
+ if (param_0 == (u8)entries->base.angle.z) {
+ param_2 = entries->base.position;
+ param_3 = entries->base.angle;
+ rv = 1;
+ break;
+ }
+ }
+
+ return rv;
+}
+
+/* 80155854-80155968 150194 0114+00 0/0 0/0 1/1 .text daNpcF_chkDoBtnEqSpeak__FP10fopAc_ac_c */
+bool daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p) {
+ bool ret = FALSE;
+
+ if (daPy_getPlayerActorClass()->checkPriActorOwn(i_actor_p)) {
+ for (int i = 0; i < dComIfGp_getAttention().GetActionCount(); i++) {
+ if (dComIfGp_getAttention().ActionTarget(i) == i_actor_p &&
+ dComIfGp_getAttention().getActionBtnB() &&
+ dComIfGp_getAttention().getActionBtnB()->mType == 3)
+ {
+ ret = TRUE;
+ }
+ }
+
+ for (int i = 0; i < dComIfGp_getAttention().GetLockonCount(); i++) {
+ if (dComIfGp_getAttention().LockonTarget(i) == i_actor_p &&
+ dComIfGp_getAttention().getActionBtnB() &&
+ dComIfGp_getAttention().getActionBtnB()->mType == 1)
+ {
+ ret = TRUE;
+ }
+ }
+ }
+
+ return ret;
+}
+
+/* 80155968-80155AD4 1502A8 016C+00 1/1 0/0 2/2 .text daNpcF_chkPointInArea__F4cXyz4cXyz4cXyzs */
+BOOL daNpcF_chkPointInArea(cXyz i_point, cXyz i_center, cXyz i_bounds, s16 i_angleY) {
+ cXyz delta_aligned;
+
+ mDoMtx_stack_c::YrotS(-i_angleY);
+ mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z);
+ mDoMtx_stack_c::multVec(&i_point, &delta_aligned);
+
+ f32 bound_x = fabsf(i_bounds.x);
+ f32 bound_z = fabsf(i_bounds.z);
+ f32 delta_x = fabsf(delta_aligned.x);
+ f32 delta_z = fabsf(delta_aligned.z);
+
+ cXyz delta = i_center - i_point;
+
+ if (delta.y <= -i_bounds.y || i_bounds.y <= delta.y) {
+ return FALSE;
+ } else {
+ f32 tmp_float1 = (delta_x * delta_x) / (bound_x * bound_x);
+ f32 tmp_float2 = (delta_z * delta_z) / (bound_z * bound_z);
+ f32 tmp_float3 = tmp_float1 + tmp_float2;
+ return tmp_float3 <= 1.0f;
+ }
+}
+
+/* 80155AD4-80155AE8 150414 0014+00 1/1 0/0 1/1 .text daNpcF_getDistTableIdx__Fii */
+u8 daNpcF_getDistTableIdx(int param_0, int param_1) {
+ return param_0 + param_1 * 0x14 + 0x5e;
+}
+
+/* 80155AE8-80155B54 150428 006C+00 0/0 0/0 6/6 .text daNpcF_clearMessageTmpBit__Fv */
+void daNpcF_clearMessageTmpBit() {
+ daNpcF_offTmpBit(0xb);
+ daNpcF_offTmpBit(0xc);
+ daNpcF_offTmpBit(0xd);
+ daNpcF_offTmpBit(0xe);
+ daNpcF_offTmpBit(0xf);
+ daNpcF_offTmpBit(0x33);
+ daNpcF_offTmpBit(0x34);
+ daNpcF_offTmpBit(0x35);
+ daNpcF_offTmpBit(0x36);
+ daNpcF_offTmpBit(0x37);
+}
+
+/* 80155B54-80155BB4 150494 0060+00 1/0 0/0 0/0 .text __dt__20daNpcF_MoveBgActor_cFv */
+daNpcF_MoveBgActor_c::~daNpcF_MoveBgActor_c() {}
+
+/* 80155BB8-80155BBC 1504F8 0004+00 2/0 0/0 0/0 .text setAttnPos__8daNpcF_cFv */
+void daNpcF_c::setAttnPos() {}
+
+/* 80155BC0-80155BC8 150500 0008+00 2/0 0/0 0/0 .text main__8daNpcF_cFv */
+BOOL daNpcF_c::main() {
+ return true;
+}
+
+/* 80155BC8-80155BCC 150508 0004+00 2/0 0/0 0/0 .text setParam__8daNpcF_cFv */
+void daNpcF_c::setParam() {}
+
+/* 80155BD0-80155BD8 150510 0008+00 2/0 0/0 0/0 .text drawDbgInfo__8daNpcF_cFv */
+BOOL daNpcF_c::drawDbgInfo() {
+ return true;
+}
+
+/* 80155BD8-80155BE0 150518 0008+00 2/0 0/0 0/0 .text ctrlBtk__8daNpcF_cFv */
+BOOL daNpcF_c::ctrlBtk() {
+ return false;
+}
+
+/* 80155BE0-80155BE8 150520 0008+00 2/0 0/0 0/0 .text setExpressionAnm__8daNpcF_cFib */
+bool daNpcF_c::setExpressionAnm(int param_0, bool param_1) {
+ return true;
+}
+
+/* 80155BE8-80155BEC 150528 0004+00 2/0 0/0 0/0 .text setMotionAnm__8daNpcF_cFif */
+void daNpcF_c::setMotionAnm(int param_0, f32 param_1) {}
+
+/* 80155BEC-80155BF0 15052C 0004+00 2/0 0/0 0/0 .text setMotion__8daNpcF_cFifi */
+void daNpcF_c::setMotion(int param_0, f32 param_1, int param_2) {}
+
+/* 80155BF0-80155BF4 150530 0004+00 2/0 0/0 0/0 .text setExpression__8daNpcF_cFif */
+void daNpcF_c::setExpression(int param_0, f32 param_1) {}
+
+/* 80155E88-80155E90 1507C8 0008+00 1/0 0/0 0/0 .text CreateHeap__20daNpcF_MoveBgActor_cFv */
+bool daNpcF_MoveBgActor_c::CreateHeap() {
+ return true;
+}
+
+/* 80155E90-80155E98 1507D0 0008+00 1/0 0/0 0/0 .text Create__20daNpcF_MoveBgActor_cFv */
+bool daNpcF_MoveBgActor_c::Create() {
+ return true;
+}
+
+/* 80155E98-80155EA0 1507D8 0008+00 1/0 0/0 0/0 .text Delete__20daNpcF_MoveBgActor_cFv */
+bool daNpcF_MoveBgActor_c::Delete() {
+ return true;
+}
+
+/* 80155EA0-80155EA8 1507E0 0008+00 1/0 0/0 0/0 .text Execute__20daNpcF_MoveBgActor_cFPPA3_A4_f */
+bool daNpcF_MoveBgActor_c::Execute(f32 (**param_0)[3][4]) {
+ return true;
+}
+
+/* 80155EA8-80155EB0 1507E8 0008+00 1/0 0/0 0/0 .text Draw__20daNpcF_MoveBgActor_cFv */
+bool daNpcF_MoveBgActor_c::Draw() {
+ return true;
+}
+
+/* 80155EB0-80155EB8 1507F0 0008+00 1/0 0/0 0/0 .text IsDelete__20daNpcF_MoveBgActor_cFv
+ */
+bool daNpcF_MoveBgActor_c::IsDelete() {
+ return true;
+}
+
+/* 80155EB8-80155EC0 1507F8 0008+00 1/0 0/0 0/0 .text ToFore__20daNpcF_MoveBgActor_cFv */
+bool daNpcF_MoveBgActor_c::ToFore() {
+ return true;
+}
+
+/* 80155EC0-80155EC8 150800 0008+00 1/0 0/0 0/0 .text ToBack__20daNpcF_MoveBgActor_cFv */
+bool daNpcF_MoveBgActor_c::ToBack() {
+ return true;
+}
+
+/* 80155EC8-80155ED0 150808 0008+00 2/0 0/0 0/0 .text setExpressionBtp__8daNpcF_cFi */
+bool daNpcF_c::setExpressionBtp(int param_0) {
+ return true;
+}
+
+/* 80155ED0-80155FB0 150810 00E0+00 1/0 0/0 0/0 .text __dt__15daNpcF_MatAnm_cFv */
+daNpcF_MatAnm_c::~daNpcF_MatAnm_c() {}
+
+/* 80155FB0-80156010 1508F0 0060+00 1/0 0/0 0/0 .text __dt__23daBaseNpc_moveBgActor_cFv
+ */
+daBaseNpc_moveBgActor_c::~daBaseNpc_moveBgActor_c() {}
+
+/* 803926B0-803926E0 01ED10 0030+00 0/0 0/0 0/0 .rodata mCcDObj__11daBaseNpc_c */
+dCcD_SrcGObjInf const daBaseNpc_c::mCcDObj = {
+ {0, {{0, 0, 0}, {0x0, 0x0}, {0x79}}},
+ {dCcD_SE_NONE, 0, 0, 0, 0},
+ {dCcD_SE_NONE, 0, 0, 0, 0},
+ {0}
+};
+
+/* 803926E0-80392710 01ED40 0030+00 0/0 0/0 0/0 .rodata mCcDObjInfo__8daNpcF_c */
+dCcD_SrcGObjInf const daNpcF_c::mCcDObjInfo = {
+ {0, {{0, 0, 0}, {0x0, 0x0}, {0x79}}},
+ {dCcD_SE_NONE, 0, 0, 0, 0},
+ {dCcD_SE_NONE, 0, 0, 0, 0},
+ {0}
+};
+
+/* 80392720-80392725 01ED80 0005+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392720 = ".bck";
+#pragma pop
+
+/* 80392725-8039272A 01ED85 0005+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392725 = ".btp";
+#pragma pop
+
+/* 8039272A-8039272F 01ED8A 0005+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039272A = ".btk";
+#pragma pop
+
+/* 8039272F-8039274A 01ED8F 001B+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039272F = "%.3ff,\t// 注目オフセット\n";
+#pragma pop
+
+/* 8039274A-8039275B 01EDAA 0011+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039274A = "%.3ff,\t// 重力\n";
+#pragma pop
+
+/* 8039275B-80392770 01EDBB 0015+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039275B = "%.3ff,\t// スケ−ル\n";
+#pragma pop
+
+/* 80392770-8039278B 01EDD0 001B+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392770 = "%.3ff,\t// リアル影サイズ\n";
+#pragma pop
+
+/* 8039278B-8039279C 01EDEB 0011+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039278B = "%.3ff,\t// 体重\n";
+#pragma pop
+
+/* 8039279C-803927AD 01EDFC 0011+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039279C = "%.3ff,\t// 高さ\n";
+#pragma pop
+
+/* 803927AD-803927C0 01EE0D 0013+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803927AD = "%.3ff,\t// ひざ丈\n";
+#pragma pop
+
+/* 803927C0-803927CF 01EE20 000F+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803927C0 = "%.3ff,\t// 幅\n";
+#pragma pop
+
+/* 803927CF-803927E8 01EE2F 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803927CF = "%.3ff,\t// 腰のX角上限\n";
+#pragma pop
+
+/* 803927E8-80392801 01EE48 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803927E8 = "%.3ff,\t// 腰のX角下限\n";
+#pragma pop
+
+/* 80392801-8039281A 01EE61 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392801 = "%.3ff,\t// 腰のY角上限\n";
+#pragma pop
+
+/* 8039281A-80392833 01EE7A 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039281A = "%.3ff,\t// 腰のY角下限\n";
+#pragma pop
+
+/* 80392833-8039284C 01EE93 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392833 = "%.3ff,\t// 頭のX角上限\n";
+#pragma pop
+
+/* 8039284C-80392865 01EEAC 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039284C = "%.3ff,\t// 頭のX角下限\n";
+#pragma pop
+
+/* 80392865-8039287E 01EEC5 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392865 = "%.3ff,\t// 頭のY角上限\n";
+#pragma pop
+
+/* 8039287E-80392897 01EEDE 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039287E = "%.3ff,\t// 頭のY角下限\n";
+#pragma pop
+
+/* 80392897-803928B0 01EEF7 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392897 = "%.3ff,\t// 首の回転比率\n";
+#pragma pop
+
+/* 803928B0-803928C9 01EF10 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803928B0 = "%.3ff,\t// 補間フレ−ム\n";
+#pragma pop
+
+/* 803928C9-803928DE 01EF29 0015+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803928C9 = "%d, \t// 会話距離\n";
+#pragma pop
+
+/* 803928DE-803928F3 01EF3E 0015+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803928DE = "%d, \t// 会話角度\n";
+#pragma pop
+
+/* 803928F3-80392908 01EF53 0015+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803928F3 = "%d, \t// 注目距離\n";
+#pragma pop
+
+/* 80392908-8039291D 01EF68 0015+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392908 = "%d, \t// 注目角度\n";
+#pragma pop
+
+/* 8039291D-8039292E 01EF7D 0011+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039291D = "%.3ff,\t// 視界\n";
+#pragma pop
+
+/* 8039292E-80392945 01EF8E 0017+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039292E = "%.3ff,\t// サ−チ距離\n";
+#pragma pop
+
+/* 80392945-8039295C 01EFA5 0017+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392945 = "%.3ff,\t// サ−チ高さ\n";
+#pragma pop
+
+/* 8039295C-80392973 01EFBC 0017+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_8039295C = "%.3ff,\t// サ−チ低さ\n";
+#pragma pop
+
+/* 80392973-80392988 01EFD3 0015+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392973 = "%d, \t// 注目時間\n";
+#pragma pop
+
+/* 80392988-803929A1 01EFE8 0019+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_80392988 = "%d, \t// ダメ−ジ期間\n";
+#pragma pop
+
+/* 803929A1-803929B2 01F001 0011+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+// MWCC ignores mapping of some japanese characters using the
+// byte 0x5C (ASCII '\'). This is why this string is hex-encoded.
+SECTION_DEAD static char const* const stringBase_803929A1 =
+ "\x25\x64\x2C\x20\x20\x20\x09\x2F\x2F\x20\x20\x95\x5C\x8F\xEE\x0A";
+#pragma pop
+
+/* 803929B2-803929C3 01F012 0011+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803929B2 = "%d, \t// 動作\n";
+#pragma pop
+
+/* 803929C3-803929DA 01F023 0017+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803929C3 = "%d, \t// 注視モ−ド\n";
+#pragma pop
+
+/* 803929DA-803929F7 01F03A 001D+00 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803929DA = "%d, \t// デバグモ−ドON\n";
+#pragma pop
+
+/* 803929F7-80392A18 01F057 001B+06 0/0 0/0 0/0 .rodata None */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803929F7 = "%d, \t// デバグ情報ON\n";
+#pragma pop
diff --git a/src/d/actor/d_a_npc_fairy_seirei.cpp b/src/d/actor/d_a_npc_fairy_seirei.cpp
index fa2033b30c..06349e39a7 100644
--- a/src/d/actor/d_a_npc_fairy_seirei.cpp
+++ b/src/d/actor/d_a_npc_fairy_seirei.cpp
@@ -372,11 +372,11 @@ int daNpc_FairySeirei_c::talk(int param_0) {
}
int itemNo;
if ((int)mFlow.getEventId(&itemNo) == 1) {
- if (mItemId == -1) {
- mItemId = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, -1, NULL,
+ if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
+ mItemPartnerId = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, -1, NULL,
NULL);
}
- if (fopAcM_IsExecuting(mItemId)) {
+ if (fopAcM_IsExecuting(mItemPartnerId)) {
mTalking = TRUE;
evtChange();
}
diff --git a/src/d/actor/d_a_npc_hanjo.cpp b/src/d/actor/d_a_npc_hanjo.cpp
index da90ca61f3..5c2ea3abff 100644
--- a/src/d/actor/d_a_npc_hanjo.cpp
+++ b/src/d/actor/d_a_npc_hanjo.cpp
@@ -1306,7 +1306,7 @@ int daNpc_Hanjo_c::cutPursuitBee(int param_1) {
break;
case 3:
mJntAnm.lookNone(0);
- if (field_0x10e8.getDstPosH(current.pos, &cStack_6c, field_0x10e8.mpRoomPath->m_num, 4)) {
+ if (field_0x10e8.getDstPosH(current.pos, &cStack_6c, field_0x10e8.mPathInfo->m_num, 4)) {
rv = 1;
break;
}
diff --git a/src/d/actor/d_a_npc_uri.cpp b/src/d/actor/d_a_npc_uri.cpp
index c7acfb3120..af8c132716 100644
--- a/src/d/actor/d_a_npc_uri.cpp
+++ b/src/d/actor/d_a_npc_uri.cpp
@@ -443,7 +443,7 @@ void daNpc_Uri_c::reset() {
cStack_44 = mPath.getPntPos(1);
setPos(acStack_38);
cStack_a0.y = cLib_targetAngleY(&acStack_38, &cStack_44);
- mPath.setNextIdx(mPath.mpRoomPath->m_num);
+ mPath.setNextIdx(mPath.mPathInfo->m_num);
}
if (daNpcT_chkEvtBit(0x20) != 0 || daNpcT_chkEvtBit(0x1e) != 0 ||
daNpcT_chkEvtBit(0x92) != 0)
@@ -955,7 +955,7 @@ int daNpc_Uri_c::getTutorialCond(cXyz param_1) {
cXyz local_50;
cXyz cStack_5c;
- local_44 = mPath.getPntPos(mPath.mpRoomPath->m_num - 1);
+ local_44 = mPath.getPntPos(mPath.mPathInfo->m_num - 1);
if (local_44.absXZ(param_1) < daNpc_Uri_Param_c::m.field_0x98) {
return 9;
}
@@ -1137,7 +1137,7 @@ int daNpc_Uri_c::cutEndCarryTutorial(int param_1) {
break;
case 2:
initTalk(19, NULL);
- mItemId = -1;
+ mItemPartnerId = fpcM_ERROR_PROCESS_ID_e;
}
}
@@ -1154,11 +1154,11 @@ int daNpc_Uri_c::cutEndCarryTutorial(int param_1) {
if (talkProc(NULL, 0, NULL, 0) && mFlow.checkEndFlow() &&
(s32)mFlow.getEventId(&local_48) == 1)
{
- if (mItemId == fpcM_ERROR_PROCESS_ID_e) {
- mItemId =
+ if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
+ mItemPartnerId =
fopAcM_createItemForPresentDemo(&current.pos, local_48, 0, -1, -1, NULL, NULL);
}
- if (fopAcM_IsExecuting(mItemId)) {
+ if (fopAcM_IsExecuting(mItemPartnerId)) {
daNpcT_offTmpBit(7);
daNpcT_offTmpBit(10);
daNpcT_offTmpBit(0x20);
@@ -1385,7 +1385,7 @@ int daNpc_Uri_c::krun(void* param_0) {
mJntAnm.lookNone(0);
if (field_0xfec == 0) {
cXyz cStack_58;
- int iVar2 = mPath.getDstPosH(current.pos, &cStack_58, mPath.mpRoomPath->m_num, 4);
+ int iVar2 = mPath.getDstPosH(current.pos, &cStack_58, mPath.mPathInfo->m_num, 4);
calcSpeedAndAngle(cStack_58, iVar2, 6, 0x800);
if (iVar2 != 0 && cM3d_IsZero(speedF)) {
@@ -1616,7 +1616,7 @@ int daNpc_Uri_c::walk(void* param_0) {
}
if (!mStagger.checkStagger()) {
cXyz cStack_84;
- int iVar2 = mPath.getDstPosH(current.pos, &cStack_84, mPath.mpRoomPath->m_num, 4);
+ int iVar2 = mPath.getDstPosH(current.pos, &cStack_84, mPath.mPathInfo->m_num, 4);
if (iVar2) {
bVar = TRUE;
}
diff --git a/src/d/actor/d_a_npc_zra.cpp b/src/d/actor/d_a_npc_zra.cpp
index 6190f4b358..e3fe783d98 100644
--- a/src/d/actor/d_a_npc_zra.cpp
+++ b/src/d/actor/d_a_npc_zra.cpp
@@ -219,8 +219,8 @@ BOOL daNpc_zrA_Path_c::getDstPosDstXZ(cXyz i_pos, cXyz& o_pnt) {
/* 80B78CA0-80B78CFC 000880 005C+00 1/1 0/0 0/0 .text chkPassedChase__16daNpc_zrA_Path_cFUs4cXyz
*/
BOOL daNpc_zrA_Path_c::chkPassedChase(u16 i_idx, cXyz i_pos) {
- return daNpcF_chkPassed(i_pos, (dPnt*)mpRoomPath->m_points, i_idx,
- mpRoomPath->m_num, mIsClosed, mIsReversed);
+ return daNpcF_chkPassed(i_pos, (dPnt*)mPathInfo->m_points, i_idx,
+ mPathInfo->m_num, mIsClosed, mIsReversed);
}
/* 80B78CFC-80B78E08 0008DC 010C+00 1/1 0/0 0/0 .text
@@ -253,7 +253,7 @@ int daNpc_zrA_Path_c::getDstPosChase(u16 i_idx, cXyz i_pos, cXyz& o_pnt) {
/* 80B78E08-80B7956C 0009E8 0764+00 1/1 0/0 0/0 .text chkPassDst__16daNpc_zrA_Path_cFUs4cXyz */
f32 daNpc_zrA_Path_c::chkPassDst(u16 i_idx, cXyz i_pos) {
u16 prev_idx, next_idx;
- dPnt* points = mpRoomPath->m_points;
+ dPnt* points = mPathInfo->m_points;
u16 idx = mIdx;
u8 reversed = mIsReversed;
mIdx = i_idx;
diff --git a/src/d/d_shop_system.cpp b/src/d/d_shop_system.cpp
index b90f77f7ab..9d077d142b 100644
--- a/src/d/d_shop_system.cpp
+++ b/src/d/d_shop_system.cpp
@@ -940,12 +940,12 @@ int dShopSystem_c::seq_start(fopAc_ac_c* actor, dMsgFlow_c* i_flow) {
if (i_flow->doFlow(actor, NULL, 0)) {
int itemNo;
if (mFlow.getEventId(&itemNo) == 1) {
- if (mItemId == -1) {
- mItemId = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1,
+ if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
+ mItemPartnerId = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1,
-1, NULL, NULL);
}
- if (fpcEx_IsExist(mItemId)) {
+ if (fpcEx_IsExist(mItemPartnerId)) {
mEvtNo = 1;
evtChange();
return 1;
@@ -1244,12 +1244,12 @@ int dShopSystem_c::seq_decide_yes(fopAc_ac_c* actor, dMsgFlow_c* i_flow) {
int itemNo;
if (mFlow.getEventId(&itemNo) == 1) {
if (i_flow->doFlow(actor, NULL, 0)) {
- if (mItemId == -1) {
- mItemId =
+ if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
+ mItemPartnerId =
fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, -1, NULL, NULL);
}
- if (fpcEx_IsExist(mItemId)) {
+ if (fpcEx_IsExist(mItemPartnerId)) {
offFlag(8);
setSoldOutItemHide();
mEvtNo = 1;