// // 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/d_k_wmark.h" #include "d/d_msg_object.h" #include "dol2asm.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); /* 801456D4-801456E0 140014 000C+00 1/1 0/0 159/159 .text initialize__18daNpcT_ActorMngr_cFv */ void daNpcT_ActorMngr_c::initialize() { mActorID = fpcM_ERROR_PROCESS_ID_e; } /* 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); } /* 801456FC-80145708 14003C 000C+00 1/1 0/0 382/382 .text remove__18daNpcT_ActorMngr_cFv */ void daNpcT_ActorMngr_c::remove() { mActorID = fpcM_ERROR_PROCESS_ID_e; } /* 80145708-80145764 140048 005C+00 2/2 1/1 233/233 .text getActorP__18daNpcT_ActorMngr_cFv */ fopAc_ac_c* daNpcT_ActorMngr_c::getActorP() { fopAc_ac_c* actor = NULL; if (fopAcM_SearchByID(mActorID, &actor) == 1 && actor != NULL && fopAcM_IsActor(actor)) { return actor; } return NULL; } /* 80145764-80145788 1400A4 0024+00 0/0 0/0 103/103 .text initialize__15daNpcT_MatAnm_cFv */ void daNpcT_MatAnm_c::initialize() { field_0xF4 = 0.0f; field_0xF8 = 0.0f; mNowOffsetX = 0.0f; mNowOffsetY = 0.0f; mEyeMoveFlg = 0; mMorfFrm = 0; } /* 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); for (u32 i = 0; i < 8; i++) { if (getTexMtxAnm(i).getAnmFlag()) { J3DTexMtxInfo* curr_mtx_info = ¶m_0->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo(); if (mEyeMoveFlg != 0) { curr_mtx_info->mSRT.mTranslationX = mNowOffsetX; curr_mtx_info->mSRT.mTranslationY = mNowOffsetY; } if (mMorfFrm != 0) { f32 tmp8 = 1.0f / (mMorfFrm + 1); curr_mtx_info->mSRT.mTranslationX = field_0xF4 * (1.0f - tmp8) + curr_mtx_info->mSRT.mTranslationX * tmp8; curr_mtx_info->mSRT.mTranslationY = field_0xF8 * (1.0f - tmp8) + curr_mtx_info->mSRT.mTranslationY * tmp8; } field_0xF4 = curr_mtx_info->mSRT.mTranslationX; field_0xF8 = curr_mtx_info->mSRT.mTranslationY; } } } /* 80145898-801458C0 1401D8 0028+00 4/4 0/0 533/533 .text initialize__22daNpcT_MotionSeqMngr_cFv */ void daNpcT_MotionSeqMngr_c::initialize() { mNo = 0; mOffset = 0; mStepNo = 0; mPrevStepNo = -1; mInitialMorf = -1.0f; mEndSequence = false; } /* 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 ret = 0; if (mPrevStepNo == mStepNo && mStepNo < mStepNum) { if ((&mpSeqData[mNo * mStepNum])[mStepNo].mAnmIdx != -1) { if ((&mpSeqData[mNo * mStepNum])[mStepNo].mLoopCount > 0 && (&mpSeqData[mNo * mStepNum])[mStepNo].mLoopCount <= i_loopNo) { mStepNo++; } else if ((&mpSeqData[mNo * mStepNum])[mStepNo].mLoopCount == 0 && i_loopNo != 0) { mEndSequence = true; } } } 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; if (mPrevStepNo == -1 && -1.0f < mInitialMorf) { *o_morf = mInitialMorf; } ret = 1; } else { mEndSequence = true; } } mPrevStepNo = mStepNo; return ret; } /* 80145A24-80145A38 140364 0014+00 0/0 0/0 43/43 .text * checkEndSequence__22daNpcT_MotionSeqMngr_cFv */ s32 daNpcT_MotionSeqMngr_c::checkEndSequence() { return mEndSequence == true; } /* 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; int new_idx = i_idx; new_idx += i_delta; if (i_num <= new_idx) { if (i_closed) { new_idx %= i_num; } else { new_idx = i_num + -1; end = 1; } } i_idx = new_idx; return end; } /* 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; int new_idx = i_idx; new_idx -= i_delta; if (0 > new_idx) { if (i_closed) { new_idx = (i_num + new_idx % i_num) % i_num; } else { new_idx = 0; end = 1; } } i_idx = new_idx; return end; } /* 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) { 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) { 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; 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; 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; } /* 80145C40-80145C74 140580 0034+00 0/0 0/0 44/44 .text initialize__13daNpcT_Path_cFv */ void daNpcT_Path_c::initialize() { mpRoomPath = 0; mPosition.x = 0.0f; mPosition.y = 0.0f; mPosition.z = 0.0f; field_0x10 = 0.0f; field_0x14 = 0.0f; field_0x18 = 0.0f; mIdx = 0; mDirection = 0; mIsClosed = 0; } /* 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; mIdx = 0; mDirection = i_direction; if (i_pathIdx != 0xFF) { mpRoomPath = dPath_GetRoomPath(i_pathIdx, i_roomNo); if (!mpRoomPath) { return 0; } mIsClosed = dPath_ChkClose(mpRoomPath); 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) { mIdx = 0; mDirection = i_direction; u16 next_id = mpRoomPath->m_nextID; if (next_id != 0xFFFF) { mpRoomPath = dPath_GetRoomPath(next_id, param_0); if (!mpRoomPath) { return 0; } mIsClosed = mpRoomPath->m_closed & 1; } 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; } 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) { u16 numPnts = getNumPnts(); if (chkClose() != 0 && numPnts == param_0) { return daNpcT_incIdx(param_0, mIdx, 1, 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) { if (i_idx == mIdx) { *param_1 = getPntPos(getIdx() - 1); return 1; } while (true) { if (!chkPassed1(param_0, i_idx)) { break; } field_0x1E = 1; if (setNextIdx(i_idx)) { mIdx = i_idx; *param_1 = getPntPos(getIdx() - 1); return 1; } } int i_idx2; *param_1 = 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) { if (i_idx == mIdx) { *param_1 = getPntPos(getIdx() - 1); return 1; } while (true) { if (!chkPassed1(param_0, i_idx)) { break; } field_0x1E = 1; if (setNextIdx(i_idx)) { mIdx = i_idx; *param_1 = getPntPos(getIdx() - 1); return 1; } } while (true) { if (field_0x1E < param_3) { if (chkPassed2(param_0, param_1, i_idx, param_3)) { field_0x1E++; continue; } } else { int i_idx2; *param_1 = getPntPos(i_idx2 = getIdx()); } return 0; } } /* 80146188-801464D8 140AC8 0350+00 2/2 0/0 2/2 .text chkPassed1__13daNpcT_Path_cF4cXyzi */ // NONMATCHING one instruction order swap 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 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()); } else { daNpcT_decIdx(i_num, prev_idx, 0, chkReverse()); daNpcT_incIdx(i_num, next_idx, 0, chkReverse()); } prev_pos = getPntPos(prev_idx); cur_pos = getPntPos(cur_idx); next_pos = getPntPos(next_idx); if (prev_idx == cur_idx) { sp5C.set(0.0f, 0.0f, 100.0f); mDoMtx_stack_c::YrotS(cLib_targetAngleY(&next_pos, &cur_pos)); mDoMtx_stack_c::multVec(&sp5C, &sp5C); prev_pos = sp5C + cur_pos; } if (cur_idx == next_idx) { sp5C.set(0.0f, 0.0f, 100.0f); mDoMtx_stack_c::YrotS(cLib_targetAngleY(&prev_pos, &cur_pos)); mDoMtx_stack_c::multVec(&sp5C, &sp5C); next_pos = sp5C + cur_pos; } f32 proj_pnt_x, proj_cur_x, proj_pnt_z, proj_cur_z, spC; if (cM3d_Len2dSqPntAndSegLine(i_pnt.x, i_pnt.z, prev_pos.x, prev_pos.z, next_pos.x, next_pos.z, &proj_pnt_x, &proj_pnt_z, &spC) && 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)))) { return 1; } } return 0; } /* ############################################################################################## */ /* 803B36A8-803B36B4 0107C8 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ SECTION_DATA 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) { 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()); } else { daNpcT_decIdx(param_3, local_142, 0, chkReverse()); daNpcT_incIdx(param_3, local_144, 0, chkReverse()); } local_140 = local_142; if (chkClose() && getNumPnts() == param_3) { daNpcT_decIdx(getNumPnts(), local_140, 1, chkReverse()); } else { daNpcT_decIdx(param_3, local_140, 0, 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; } else { cStack_b0 = local_98 - local_8c; } if (local_144 == (u16)(idx & 0xffff)) { cStack_bc = cStack_a4 - local_8c; } 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; 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)) { 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) { 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, int param_5, cXyz* o_proj, int* o_prevIdx, int* o_nextIdx) { u16 prev_idx = i_idx; u16 next_idx = i_idx; daNpcT_incIdx(i_num, next_idx, i_closed, 0); daNpcT_decIdx(i_num, prev_idx, i_closed, 0); cXyz prev_pnt(i_points[prev_idx].m_position.x, i_points[prev_idx].m_position.y, i_points[prev_idx].m_position.z); cXyz next_pnt(i_points[next_idx].m_position.x, i_points[next_idx].m_position.y, i_points[next_idx].m_position.z); cXyz cur_pnt(i_points[i_idx].m_position.x, i_points[i_idx].m_position.y, i_points[i_idx].m_position.z); cXyz vec(0.0f, 0.0f, 2.0f); s16 angle; if (prev_idx < i_idx && i_idx < next_idx) { angle = cM_atan2s(next_pnt.x - prev_pnt.x, next_pnt.z - prev_pnt.z); } else if (prev_idx < i_idx) { 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); } mDoMtx_stack_c::transS(next_pnt); mDoMtx_stack_c::YrotM(angle); mDoMtx_stack_c::multVec(&vec, &next_pnt); mDoMtx_stack_c::transS(prev_pnt); mDoMtx_stack_c::YrotM(angle + 0x8000); mDoMtx_stack_c::multVec(&vec, &prev_pnt); f32 len, proj1_x, proj1_z, proj2_x, proj2_z; cM3d_Len2dSqPntAndSegLine(i_pos.x, i_pos.z, prev_pnt.x, prev_pnt.z, next_pnt.x, next_pnt.z, &proj1_x, &proj1_z, &len); if (cM3d_IsZero(len)) { return FALSE; } cM3d_Len2dSqPntAndSegLine(cur_pnt.x, cur_pnt.z, prev_pnt.x, prev_pnt.z, next_pnt.x, next_pnt.z, &proj2_x, &proj2_z, &len); s16 angle1; if (param_5) { angle1 = cM_atan2s(prev_pnt.x - next_pnt.x, prev_pnt.z - next_pnt.z); } else { angle1 = cM_atan2s(next_pnt.x - prev_pnt.x, next_pnt.z - prev_pnt.z); } s16 angle2 = cM_atan2s(proj2_x - proj1_x, proj2_z - proj1_z); s16 angle_diff = angle1 - angle2; if (o_proj != NULL) { o_proj->set(proj1_x, 0.0f, proj1_z); } if (o_prevIdx != NULL) { *o_prevIdx = prev_idx; } if (o_nextIdx != NULL) { *o_nextIdx = next_idx; } return (u16)abs(angle_diff) > 0x4000; } static f32 dummy_literal() { cXyz vec; return vec.abs(); } /* 80146C98-80146CD8 1415D8 0040+00 0/0 0/0 121/121 .text initialize__15daNpcT_JntAnm_cFv */ void daNpcT_JntAnm_c::initialize() { mActrMngr.initialize(); memset(&mAttnPos, 0, (u32)&field_0x158 - (u32)&mAttnPos); } /* 80146CD8-80147858 141618 0B80+00 1/0 0/0 52/52 .text * setParam__15daNpcT_JntAnm_cFP10fopAc_ac_cP8J3DModelP4cXyziiiffffffffffP4cXyz */ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_eyeOffset_p, int i_backboneJointNo, int i_neckJointNo, int i_headJointNo, f32 i_bodyUpAngle, f32 i_bodyDownAngle, f32 i_bodyLeftAngle, f32 i_bodyRightAngle, f32 i_headUpAngle, f32 i_headDownAngle, f32 i_headLeftAngle, f32 i_headRightAngle, f32 param_14, f32 param_15, cXyz* param_16) { cXyz vec1, vec2, vec3; csXyz angle; mPos = i_actor->current.pos; if (i_headJointNo >= 0) { mDoMtx_stack_c::copy(i_model->getAnmMtx(i_headJointNo)); mDoMtx_stack_c::multVecZero(&mJntPos[0]); mHeadPos.setall(0.0f); mDoMtx_stack_c::multVec(&mHeadPos, &mHeadPos); 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); field_0x150.y = cLib_targetAngleY(&mJntPos[0], &mEyePos); } else { field_0x150.y = 0; } if (i_neckJointNo >= 0) { mDoMtx_stack_c::copy(i_model->getAnmMtx(i_neckJointNo)); mDoMtx_stack_c::multVecZero(&mJntPos[1]); } if (i_backboneJointNo >= 0) { mDoMtx_stack_c::copy(i_model->getAnmMtx(i_backboneJointNo)); mDoMtx_stack_c::multVecZero(&mJntPos[2]); } mMinRad[2].x = cM_s2rad(cM_deg2s(-i_bodyDownAngle)); mMaxRad[2].x = cM_s2rad(cM_deg2s(-i_bodyUpAngle)); mMinRad[2].y = cM_s2rad(cM_deg2s(i_bodyLeftAngle)); mMaxRad[2].y = cM_s2rad(cM_deg2s(i_bodyRightAngle)); mMinRad[1].setall(0.0f); mMaxRad[1].setall(0.0f); mMinRad[0].x = cM_s2rad(cM_deg2s(-i_headDownAngle)); mMaxRad[0].x = cM_s2rad(cM_deg2s(-i_headUpAngle)); mMinRad[0].y = cM_s2rad(cM_deg2s(i_headLeftAngle)); mMaxRad[0].y = cM_s2rad(cM_deg2s(i_headRightAngle)); mAttnPos.setall(0.0f); switch (mMode) { 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) { mAttnPosP = &actor->attention_info.position; mAttnPos = *mAttnPosP; mAttnPos.y += field_0x14c; } else { mAttnPosP = NULL; } break; } case LOOK_POS: if (mAttnPosP != NULL) { mAttnPos = *mAttnPosP; } break; case LOOK_CAMERA: { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); if (camera != NULL) { mAttnPosP = fopCamM_GetEye_p(camera); mAttnPos = *mAttnPosP; } break; } case LOOK_MODE_5: if (mAttnPosP != NULL) { mMinRad[2].y = 0.0f; mMaxRad[2].y = 0.0f; mMinRad[0].y = 0.0f; mMaxRad[0].y = 0.0f; mAttnPos = *mAttnPosP; } break; case LOOK_MODE_6: if (mAttnPosP != NULL) { mMinRad[2].y = 0.0f; mMaxRad[2].y = 0.0f; mMinRad[0].x = 0.0f; mMaxRad[0].x = 0.0f; 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(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; } field_0x120 = mAttnPos; Mtx mtx; MTXCopy(i_model->getBaseTRMtx(), 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(); vec3 = field_0x120 - i_actor->current.pos; mDoMtx_stack_c::multVec(&vec3, &vec3); field_0x120 = vec3 + i_actor->current.pos; for (int i = 0; i < 3; i++) { vec3 = mJntPos[i] - i_actor->current.pos; mDoMtx_stack_c::multVec(&vec3, &vec3); mJntPos[i] = vec3 + i_actor->current.pos; } vec3 = mHeadPos - i_actor->current.pos; mDoMtx_stack_c::multVec(&vec3, &vec3); mHeadPos = vec3 + i_actor->current.pos; vec3 = mEyePos - i_actor->current.pos; mDoMtx_stack_c::multVec(&vec3, &vec3); mEyePos = vec3 + i_actor->current.pos; vec3 = field_0x120 - i_actor->current.pos; mDoMtx_stack_c::YrotS(-cM_rad2s(param_15)); mDoMtx_stack_c::multVec(&vec3, &vec3); field_0x120 = vec3 + i_actor->current.pos; mEyePos = mEyePos - mHeadPos; mHeadPos = mHeadPos - mJntPos[0]; for (int i = 0; i < 3; i++) { field_0x54[i] = mJntPos[i]; } for (int i = 2; i >= 0; i--) { 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); mJntPos[i - 1] = mJntPos[i] + vec3; } else { mDoMtx_stack_c::multVec(&mEyePos, &vec1); mDoMtx_stack_c::multVec(&mHeadPos, &vec2); } } for (int i = 0; i < 3; i++) { field_0x54[i] = mJntPos[i]; } mJntPos[0] += vec2; field_0x24 = mJntPos[0] + vec1; field_0x148 = param_14; } /* 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)); if (mMaxRad[i].y < mRad[i].y) { mRad[i].y = mMaxRad[i].y; } if (mRad[i].y < mMinRad[i].y) { mRad[i].y = mMinRad[i].y; } } else { mRad[i].y = 0.0f; } switch (i) { case 0: mDoMtx_stack_c::YrotS(cM_rad2s(mRad[i].y * (1.0f - field_0x148))); break; case 1: mDoMtx_stack_c::YrotS(cM_rad2s(mRad[0].y * field_0x148)); break; default: mDoMtx_stack_c::YrotS(cM_rad2s(mRad[i].y)); break; } vec2 = vec3 - mJntPos[i]; mDoMtx_stack_c::multVec(&vec2, &vec3); vec3 += mJntPos[i]; } vec3 = field_0x24; mJntPos[0].y = field_0x24.y; 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)); if (mMaxRad[i].x < mRad[i].x) { mRad[i].x = mMaxRad[i].x; } if (mRad[i].x < mMinRad[i].x) { mRad[i].x = mMinRad[i].x; } } else { mRad[i].x = 0.0f; } switch (i) { case 0: mDoMtx_stack_c::XrotS(cM_rad2s(mRad[i].x * (1.0f - field_0x148))); break; case 1: mDoMtx_stack_c::XrotS(cM_rad2s(mRad[0].x * field_0x148)); break; default: mDoMtx_stack_c::XrotS(cM_rad2s(mRad[i].x)); } vec2 = vec3 - mJntPos[i]; mDoMtx_stack_c::multVec(&vec2, &vec3); vec3 += mJntPos[i]; } } /* 80147C38-80147DCC 142578 0194+00 0/0 0/0 52/52 .text calcJntRad__15daNpcT_JntAnm_cFfff */ void daNpcT_JntAnm_c::calcJntRad(f32 param_0, f32 param_1, f32 param_2) { if (mMode == 0) { clrRad(); } else { calc(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); 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; } if (param_2 < 0.0f && mRad[i].y < 0.0f && 0.0f < mRad[i].y - field_0xe4[i].y) { field_0xe4[i].y = mRad[i].y; } } else { field_0xe4[i].x = mRad[i].x; field_0xe4[i].y = mRad[i].y; field_0xe4[i].z = mRad[i].z; } } } /* 80147DCC-80147E3C 14270C 0070+00 0/0 0/0 28/28 .text * setParam__19daNpcT_DmgStagger_cFP10fopAc_ac_cP10fopAc_ac_cs */ void daNpcT_DmgStagger_c::setParam(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, s16 i_angle) { if (i_actor2 && i_actor1) { field_0xc[0] = 10922.0f; field_0xc[1] = 7281.0f; field_0x16 = fopAcM_searchActorAngleY(i_actor1, i_actor2) - i_angle; mStagger = 0x4000; } } /* 80147E3C-80147FA4 14277C 0168+00 0/0 0/0 47/47 .text calc__19daNpcT_DmgStagger_cFi */ void daNpcT_DmgStagger_c::calc(BOOL param_0) { cXyz vec1, vec2; mDoMtx_stack_c::YrotS(field_0x16); cLib_addCalc2(&field_0xc[1], 0.0f, 0.1f, 125.0f); cLib_addCalc2(&field_0xc[0], 0.0f, 0.1f, 125.0f); for (int i = 0; i < 2; i++) { vec1.set(0.0f, 0.0f, field_0xc[i] * cM_ssin(mStagger)); mDoMtx_stack_c::multVec(&vec1, &vec2); field_0x0[i].x = -vec2.z; field_0x0[i].z = -vec2.x; } if (mStagger != 0) { cLib_chaseS(&mStagger, 0, 0x555); if (mStagger == 0) { if (param_0) { mStagger = 1; } else { mRebirth = true; } } } else { mRebirth = false; } } /* 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 { {0.0f, 0.0f, 0.0f}, // mCenter 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 { {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph } // 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 { {0.0f, 0.0f, 0.0f}, // mCenter 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 { {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph } // 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 { {0.0f, 0.0f, 0.0f}, // mCenter 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 { {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph } // mSphAttr }; /* 80147FA4-80147FD4 1428E4 0030+00 0/0 0/0 53/53 .text * tgHitCallBack__8daNpcT_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ void daNpcT_c::tgHitCallBack(fopAc_ac_c* i_actor1, dCcD_GObjInf* i_obj1, fopAc_ac_c* i_actor2, dCcD_GObjInf* i_obj2) { u8 cut_type = 0; if (i_actor2 != NULL) { if (fopAcM_GetProfName(i_actor2) == PROC_ALINK) { cut_type = static_cast(i_actor2)->getCutType(); } else { cut_type = daPy_py_c::CUT_TYPE_NM_VERTICAL; } } static_cast(i_actor1)->setCutType(cut_type); } /* 80425708-804257D0 052428 00C8+00 4/4 0/0 40/40 .bss mFindActorPtrs__8daNpcT_c */ fopAc_ac_c* daNpcT_c::mFindActorPtrs[50]; /* 80450FD8-80450FDC 0004D8 0002+02 4/4 0/0 2/2 .sbss mSrchName__8daNpcT_c */ s16 daNpcT_c::mSrchName; /* 80450FDC-80450FE0 0004DC 0004+00 4/4 0/0 42/42 .sbss mFindCount__8daNpcT_c */ s32 daNpcT_c::mFindCount; /* 80147FD4-80148058 142914 0084+00 3/3 0/0 2/2 .text srchActor__8daNpcT_cFPvPv */ void* daNpcT_c::srchActor(void* actor, void* param_1) { if (mFindCount < 50 && fopAcM_IsActor(actor) && actor != param_1) { if (mSrchName == fopAcM_GetName((fopAc_ac_c*)actor)) { mFindActorPtrs[mFindCount] = (fopAc_ac_c*)actor; mFindCount++; } } return NULL; } /* 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); } /* 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); } /* 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); } /* 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); } /* 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); } /* 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); } /* 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); } /* 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; mpMorf[0]->setAnm(bck, mode, morf, rate, start, end); if (mpMorf[1] != NULL) { mpMorf[1]->setAnm(bck, mode, morf, rate, 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); } /* 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); } /* 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); } /* 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); } /* 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) { for (int resLoad_cnt = 0, i = 0; i < 10; i++) { if (resNoList[i] == -1) { if (i != resLoad_cnt) { break; } return cPhs_COMPLEATE_e; } int phase_state = dComIfG_resLoad(&mPhase[i], resNameList[resNoList[i]]); if (phase_state == cPhs_COMPLEATE_e) { resLoad_cnt++; } if (phase_state == cPhs_ERROR_e || phase_state == cPhs_UNK3_e) { return cPhs_ERROR_e; } } return cPhs_INIT_e; } /* 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]]); } } /* 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) { mPolSound = dKy_pol_sound_get(&mAcch.m_gnd); mReverb = dComIfGp_getReverb(mCcStts.GetRoomId()); if (mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > mGroundH) { mPolSound = dKy_pol_sound_get(&mAcch.m_wtr); } } afterMoved(); if (mGroundH != -1.0e9f) { setEnvTevColor(); setRoomNo(); } if (mFaceMotionSeqMngr.checkEntryNewMotion()) { ctrlFaceMotion(); ctrlSubFaceMotion(1); } if (mMotionSeqMngr.checkEntryNewMotion()) { ctrlMotion(); } playAllAnm(); ctrlFaceMotion(); 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) { evtOrder(); } } clrParam(); decTmr(); return 1; } /* 8014886C-80148C70 1431AC 0404+00 0/0 0/0 58/58 .text draw__8daNpcT_cFiifP11_GXColorS10fiii */ int daNpcT_c::draw(BOOL param_0, BOOL i_setEffMtx, f32 param_2, GXColorS10* i_color, f32 param_4, BOOL i_drawGhost, BOOL i_noShadow, BOOL i_simpleShadow) { J3DModel* model = mpMorf[0]->getModel(); J3DModelData* modelData = model->getModelData(); field_0xe34 = 1; if (drawDbgInfo() || checkHide() || mNoDraw) { return 1; } tevStr.TevColor.r = 0; tevStr.TevColor.g = 0; tevStr.TevColor.b = 0; tevStr.TevColor.a = 0; if (i_color != NULL) { tevStr.TevColor.r = i_color->r; tevStr.TevColor.g = i_color->g; tevStr.TevColor.b = i_color->b; tevStr.TevColor.a = i_color->a; } if (mDamageTimerStart != 0 && mDamageTimer != 0) { f32 r = (f32)mDamageTimer / (f32)mDamageTimerStart; if (cM3d_IsZero(r) == false) { tevStr.TevColor.r = r * 20.0f; } } else if (param_0) { tevStr.TevColor.g = 20; } if (mAnmFlags & ANM_PLAY_BTP) { mBtpAnm.entry(modelData); } if (mAnmFlags & ANM_PLAY_BTK) { mBtkAnm.entry(modelData); } if (mAnmFlags & ANM_PLAY_BRK) { mBrkAnm.entry(modelData); } if (mAnmFlags & ANM_PLAY_BPK) { mBpkAnm.entry(modelData); } if (i_setEffMtx) { fopAcM_setEffectMtx(this, modelData); } if (i_drawGhost) { drawGhost(); } else if (mTwilight != 0) { g_env_light.settingTevStruct(4, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(model, &tevStr); dComIfGd_setListDark(); mpMorf[0]->entryDL(); dComIfGd_setList(); } else { g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(model, &tevStr); mpMorf[0]->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); } if (mAnmFlags & ANM_PLAY_BPK) { mBpkAnm.remove(modelData); } if (i_noShadow == 0) { if (i_simpleShadow == 0) { mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, param_2, param_4, current.pos.y, mGroundH, mGndChk, &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } else { dComIfGd_setSimpleShadow(¤t.pos, mGroundH, param_4, mGndChk, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); } } drawOtherMdl(); 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); tevStr.room_no = dComIfG_Bgsp().GetRoomId(mGndChk); } /* 80148CCC-80148D10 14360C 0044+00 1/1 0/0 58/58 .text setRoomNo__8daNpcT_cFv */ void daNpcT_c::setRoomNo() { int roomId = dComIfG_Bgsp().GetRoomId(mGndChk); fopAcM_SetRoomNo(this, roomId); mCcStts.SetRoomId(roomId); } /* 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: 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: 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: return i_anm->checkState(2); case 0: case 1: return (i_anm->checkState(1) && i_anm->getRate() == 0.0f) && i_speed != 0.0f; case 3: 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)) { if (mAnmFlags & ANM_PLAY_BCK) { f32 bck_speed = mBckAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BCK) { mBckAnm.setPlaySpeed(0.0f); } mBckAnm.play(); if (checkEndAnm(mBckAnm.getFrameCtrl(), bck_speed)) { mBckLoops++; } mBckAnm.setPlaySpeed(bck_speed); } if (mAnmFlags & ANM_PLAY_BTP) { f32 btp_speed = mBtpAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BTP) { mBtpAnm.setPlaySpeed(0.0f); if (mAnmFlags & ANM_PAUSE_TIMER_BTP) { mBtpPauseTimer = cLib_getRndValue(90, 90); } } if (cLib_calcTimer(&mBtpPauseTimer) != 0) { mBtpAnm.setPlaySpeed(0.0f); } mBtpAnm.play(); if (mAnmFlags & ANM_PAUSE_TIMER_BTP) { if (checkEndAnm(mBtpAnm.getFrameCtrl(), mBtpAnm.getPlaySpeed())) { mBtpPauseTimer = cLib_getRndValue(90, 90); } } else { mBtpPauseTimer = 0; } mBtpAnm.setPlaySpeed(btp_speed); } } if (mAnmFlags & ANM_PLAY_MORF) { f32 morf_speed = mpMorf[0]->getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_MORF) { mpMorf[0]->setPlaySpeed(0.0f); mpMorf[0]->play(mPolSound, mReverb); mpMorf[0]->setPlaySpeed(morf_speed); if (mpMorf[1] != NULL) { mpMorf[1]->setPlaySpeed(0.0f); mpMorf[1]->play(0, 0); mpMorf[1]->setPlaySpeed(morf_speed); } } else { mpMorf[0]->play(mPolSound, mReverb); if (mpMorf[1] != NULL) { mpMorf[1]->play(0, 0); } if (checkEndAnm(morf_speed)) { mMorfLoops++; } } } if (mAnmFlags & ANM_PLAY_BTK) { f32 btk_speed = mBtkAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BTK) { mBtkAnm.setPlaySpeed(0.0f); } ctrlBtk(); mBtkAnm.play(); mBtkAnm.setPlaySpeed(btk_speed); } if (mAnmFlags & ANM_PLAY_BRK) { f32 brk_speed = mBrkAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BRK) { mBrkAnm.setPlaySpeed(0.0f); } mBrkAnm.play(); mBrkAnm.setPlaySpeed(brk_speed); } if (mAnmFlags & ANM_PLAY_BPK) { f32 bpk_speed = mBpkAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BPK) { mBpkAnm.setPlaySpeed(0.0f); } mBpkAnm.play(); mBpkAnm.setPlaySpeed(bpk_speed); } mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK | ANM_PAUSE_BCK | 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; } if (field_0xe2a != 0) { mpMatAnm[0]->setMorfFrm(field_0xe2a); field_0xe2a = 0; } mpMatAnm[0]->offEyeMoveFlg(); } return FALSE; } /* 80149190-8014924C 143AD0 00BC+00 0/0 0/0 57/57 .text setMtx__8daNpcT_cFv */ void daNpcT_c::setMtx() { J3DModel* model = mpMorf[0]->getModel(); J3DModelData* modelData = model->getModelData(); 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); mpMorf[0]->onMorfNone(); if (cM3d_IsZero(field_0xdfc) != 0) { mpMorf[0]->offMorfNone(); } if (mAnmFlags & ANM_PLAY_BCK) { mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame()); } mpMorf[0]->modelCalc(); } /* 8014924C-80149300 143B8C 00B4+00 1/1 0/0 0/0 .text ctrlFaceMotion__8daNpcT_cFv */ void daNpcT_c::ctrlFaceMotion() { int anmIdx; f32 morf; if (mFaceMotionSeqMngr.play(mBckLoops, &anmIdx, &morf)) { setFaceMotionAnm(anmIdx, true); if (morf < 0.0f) { mpMorf[0]->setMorf(field_0xa80); field_0xdfc = field_0xa80; if (mpMorf[1]) { mpMorf[1]->setMorf(field_0xa80); } } else { mpMorf[0]->setMorf(morf); field_0xdfc = morf; if (mpMorf[1]) { mpMorf[1]->setMorf(morf); } } } } /* 80149300-801493B8 143C40 00B8+00 1/1 0/0 0/0 .text ctrlMotion__8daNpcT_cFv */ void daNpcT_c::ctrlMotion() { int anmIdx; BOOL restart; f32 morf; if (mMotionSeqMngr.play(mMorfLoops, &anmIdx, &morf)) { restart = FALSE; if (morf < -1.0f) { restart = TRUE; } setMotionAnm(anmIdx, morf < 0.0f ? mMorfFrames : morf, restart); field_0xdfc = 0.0f; if (mCreating) { mpMorf[0]->setMorf(0.0f); field_0xdfc = 0.0f; if (mpMorf[1]) { mpMorf[1]->setMorf(0.0f); } } } } /* 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; 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 (dMsgObject_c::isMouthCheck()) { mAnmFlags &= ~ANM_FLAG_4000; } else { mAnmFlags |= ANM_FLAG_4000; } field_0xdb4 = 0x14; } else { if (mAnmFlags & ANM_FLAG_4000) { mAnmFlags &= ~ANM_FLAG_4000; } mMsgId = -1; } } else { mMsgId = -1; if (field_0xdb4) { field_0xdb4 = 1; } } } if (param_3 == 0) { cLib_calcTimer(&field_0xdb4); } return field_0xdb4; } /* 8014951C-8014997C 143E5C 0460+00 1/0 1/0 59/0 .text ctrlJoint__8daNpcT_cFP8J3DJointP8J3DModel */ int daNpcT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { int joint_no = i_joint->getJntNo(); cXyz pos; csXyz angle; mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no)); 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]); joint_mtx[0][3] = joint_mtx[1][3] = joint_mtx[2][3] = 0.0f; mDoMtx_stack_c::ZXYrotS(mCurAngle.x, mCurAngle.y + field_0xd8a.y, mCurAngle.z); if (joint_no == getNeckJointNo()) { angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0); mDoMtx_stack_c::ZXYrotM(angle); } if (joint_no == getHeadJointNo()) { angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0); mDoMtx_stack_c::ZXYrotM(angle); } mDoMtx_stack_c::inverse(); Mtx inverse_mtx; MTXCopy(mDoMtx_stack_c::get(), inverse_mtx); mDoMtx_stack_c::transS(pos); mDoMtx_stack_c::ZXYrotM(mCurAngle.x, mCurAngle.y + field_0xd8a.y, mCurAngle.z); if (joint_no == getBackboneJointNo()) { angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0); mDoMtx_stack_c::ZXYrotM(angle); } if (joint_no == getNeckJointNo()) { angle.set(mJntAnm.getJntRadX2S(1), mJntAnm.getJntRadY2S(1), 0); mDoMtx_stack_c::ZXYrotM(angle); } if (joint_no == getHeadJointNo()) { angle.set(mJntAnm.getJntRadX2S(0), mJntAnm.getJntRadY2S(0), 0); mDoMtx_stack_c::ZXYrotM(angle); } mDoMtx_stack_c::concat(inverse_mtx); mDoMtx_stack_c::concat(joint_mtx); } afterJntAnm(joint_no); i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get()); MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); if ((mAnmFlags & ANM_PLAY_BCK) && (checkChangeJoint(joint_no) || checkRemoveJoint(joint_no))) { J3DAnmTransform* bck = mBckAnm.getBckAnm(); mBckAnm.changeBckOnly(mpMorf[0]->getAnm()); mpMorf[0]->changeAnm(bck); } if (cM3d_IsZero(field_0xdfc) == false) { if (checkChangeJoint(joint_no)) { mpMorf[0]->offMorfNone(); } else if (checkRemoveJoint(joint_no)) { mpMorf[0]->onMorfNone(); } } return 1; } /* 8014997C-80149BB4 1442BC 0238+00 1/0 1/0 58/0 .text evtProc__8daNpcT_cFv */ // NONMATCHING loads dComIfG_gameInfo twice BOOL daNpcT_c::evtProc() { BOOL ret = FALSE; if (dComIfGp_event_runCheck() != FALSE) { if (eventInfo.checkCommandTalk()) { if (!checkChangeEvt()) { evtTalk(); } ret = TRUE; } else if (eventInfo.checkCommandDemoAccrpt() && dComIfGp_getEventManager().endCheck(mEvtId)) { if (evtEndProc()) { dComIfGp_event_reset(); mEvtId = -1; } } else { if (!strcmp(dComIfGp_getEventManager().getRunEventName(), "DEFAULT_GETITEM") && mItemId != fpcM_ERROR_PROCESS_ID_e) { dComIfGp_event_setTalkPartner(NULL); dComIfGp_event_setItemPartnerId(mItemId); mItemId = fpcM_ERROR_PROCESS_ID_e; } ret = evtCutProc(); } int tmp = field_0xdb4; int face_motion, motion; if (ctrlMsgAnm(&face_motion, &motion, this, field_0xe2d)) { if (field_0xe26) { mFaceMotionSeqMngr.setNo(face_motion, -1.0f, TRUE, mFaceMotionSeqMngr.getOffset()); mMotionSeqMngr.setNo(motion, -1.0f, FALSE, mMotionSeqMngr.getOffset()); } } else if (tmp != 0 && field_0xe26) { setAfterTalkMotion(); } field_0xe26 = true; } else { if (mStaffId != -1) { mMode = MODE_INIT; mStaffId = -1; } field_0xdb4 = 0; field_0xe26 = true; } return ret; } /* 80149BB4-80149D7C 1444F4 01C8+00 1/0 1/0 60/0 .text setFootPos__8daNpcT_cFv */ void daNpcT_c::setFootPos() { if (getFootLJointNo() >= 0) { mOldFootLOffset = mFootLOffset; mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getFootLJointNo())); mDoMtx_stack_c::multVecZero(&mFootLPos); mFootLOffset = mFootLPos - current.pos; } if (getFootRJointNo() >= 0) { mOldFootROffset = mFootROffset; mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getFootRJointNo())); mDoMtx_stack_c::multVecZero(&mFootRPos); mFootROffset = mFootRPos - current.pos; } if (mCreating) { mOldFootLOffset = mFootLOffset; mOldFootROffset = mFootROffset; } } /* 80149D7C-8014A05C 1446BC 02E0+00 1/0 1/0 60/0 .text setFootPrtcl__8daNpcT_cFP4cXyzff */ void daNpcT_c::setFootPrtcl(cXyz* param_0, f32 param_1, f32 param_2) { cXyz foot_l_pos = mFootLPos; cXyz foot_r_pos = mFootRPos; cXyz start, end; u32 cross1; u8 foot_l_att; u32 cross2; u8 foot_r_att; start = mFootLPos; end = start; end.y -= param_1; mLinChk.Set(&start, &end, this); cross1 = dComIfG_Bgsp().LineCross(&mLinChk); if (cross1) { foot_l_pos.y = mLinChk.GetCross().y; mFootLPolyAngle = fopAcM_getPolygonAngle(mLinChk, mCurAngle.y); foot_l_att = dComIfG_Bgsp().GetPolyAtt0(mLinChk); } else { mFootLPolyAngle = 0; } start = mFootRPos; end = start; end.y -= param_1; mLinChk.Set(&start, &end, this); cross2 = dComIfG_Bgsp().LineCross(&mLinChk); if (cross2) { foot_r_pos.y = mLinChk.GetCross().y; mFootRPolyAngle = fopAcM_getPolygonAngle(mLinChk, mCurAngle.y); foot_r_att = dComIfG_Bgsp().GetPolyAtt0(mLinChk); } else { mFootRPolyAngle = 0; } field_0x9c0.setEffectTwo(&tevStr, ¤t.pos, 0, 0, NULL, mFootLOnGround == 0 && cross1 == 1 ? &foot_l_pos : NULL, mFootROnGround == 0 && cross2 == 1 ? &foot_r_pos : NULL, &mCurAngle, param_0, fopAcM_GetRoomNo(this), param_2, speedF); if (mFootLOnGround == 0 && cross1 == 1) { switch (foot_l_att) { case 3: break; case 0xd: dkWmark_c::setFootMark(&foot_l_pos, mCurAngle.y, 3); break; } } if (mFootROnGround == 0 && cross2 == 1) { switch (foot_r_att) { case 3: break; case 0xd: dkWmark_c::setFootMark(&foot_r_pos, mCurAngle.y, 3); break; } } mFootLOnGround = cross1; mFootROnGround = cross2; } /* 8014A05C-8014A064 14499C 0008+00 1/0 1/0 60/0 .text checkCullDraw__8daNpcT_cFv */ bool daNpcT_c::checkCullDraw() { return false; } /* 8014A064-8014A0B0 1449A4 004C+00 1/0 1/0 60/0 .text twilight__8daNpcT_cFv */ void daNpcT_c::twilight() { if (mTwilight) { attention_info.flags |= 0x400000; mNoDraw = false; attention_info.flags |= 0x800000; setHitodamaPrtcl(); } } /* 8014A0B0-8014A224 1449F0 0174+00 1/0 1/0 59/0 .text evtOrder__8daNpcT_cFv */ void daNpcT_c::evtOrder() { if (strlen(mpEvtData[mEvtNo].eventName) != 0) { if (strlen(mpArcNames[mpEvtData[mEvtNo].num]) != 0) { 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))) { eventInfo.onCondition(dEvtCnd_CANTALK_e); if (chkXYItems()) { eventInfo.onCondition(dEvtCnd_CANTALKITEM_e); } if (mSpeakEvent) { fopAcM_orderSpeakEvent(this, 0, 0); } } } /* 8014A224-8014A324 144B64 0100+00 0/0 2/2 81/81 .text evtChange__8daNpcT_cFv */ void daNpcT_c::evtChange() { if (strlen(mpEvtData[mEvtNo].eventName) != 0) { if (strlen(mpArcNames[mpEvtData[mEvtNo].num]) != 0) { eventInfo.setArchiveName(mpArcNames[mpEvtData[mEvtNo].num]); dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName()); } mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEvtData[mEvtNo].eventName, 0xff); dComIfGp_getEvent().reset(this); fopAcM_orderChangeEventId(this, mEvtId, 1, 0xffff); } } /* 8014A324-8014A388 144C64 0064+00 1/0 1/0 60/0 .text clrParam__8daNpcT_cFv */ void daNpcT_c::clrParam() { field_0xd7e = mCurAngle; mCutType = 0; memset(&mEvtNo, 0, (u32)&field_0xe38 - (u32)&mEvtNo); mJntAnm.clrDirectFlag(); } /* 8014A388-8014A628 144CC8 02A0+00 1/1 0/0 57/57 .text setFaceMotionAnm__8daNpcT_cFib */ bool daNpcT_c::setFaceMotionAnm(int i_idx, bool i_modify) { J3DAnmTransform* bck = NULL; J3DAnmTexPattern* btp = NULL; mAnmFlags &= ~(ANM_PAUSE_BCK | ANM_PAUSE_BTP | ANM_PLAY_BCK | ANM_PLAY_BTP | ANM_FLAG_1000 | ANM_PAUSE_TIMER_BTP | ANM_FLAG_4000); daNpcT_faceMotionAnmData_c anm_data = getFaceMotionAnm(mpFaceMotionAnmData[i_idx]); if (anm_data.mBckFileIdx != -1) { int arc_idx = anm_data.mBckArcIdx; int file_idx = anm_data.mBckFileIdx; changeBck(&file_idx, &arc_idx); bck = getTrnsfrmAnmP(mpArcNames[arc_idx], file_idx); } if (bck != NULL) { if (setBckAnm(bck, 1.0f, anm_data.mBckAttr, 0, -1, i_modify)) { mAnmFlags |= ANM_PAUSE_BCK | ANM_PLAY_BCK; mBckLoops = 0; } else { bck = NULL; } } if (bck == NULL && anm_data.mBckFileIdx != -1) { return false; } if (anm_data.mBtpFileIdx != -1) { int arc_idx = anm_data.mBtpArcIdx; int file_idx = anm_data.mBtpFileIdx; changeBtp(&file_idx, &arc_idx); btp = getTexPtrnAnmP(mpArcNames[arc_idx], file_idx); } if (btp != NULL) { if (btp == mBtpAnm.getBtpAnm() && anm_data.field_0x18) { mAnmFlags |= ANM_PLAY_BTP | ANM_PAUSE_TIMER_BTP; } else if (setBtpAnm(btp, mpMorf[0]->getModel()->getModelData(), 1.0f, anm_data.mBtpAttr)) { mAnmFlags |= ANM_PAUSE_BTP | ANM_PLAY_BTP; if (anm_data.field_0x18) { mAnmFlags |= ANM_PAUSE_TIMER_BTP; } } else { btp = NULL; } } if (btp == NULL && anm_data.mBtpFileIdx != -1) { return false; } return afterSetFaceMotionAnm(i_idx, anm_data.mBckAttr, 0.0f, anm_data.mBtpAttr); } /* 8014A628-8014A908 144F68 02E0+00 1/0 1/0 59/0 .text setMotionAnm__8daNpcT_cFifi */ bool daNpcT_c::setMotionAnm(int i_idx, f32 i_morf, BOOL i_restart) { J3DAnmTransformKey* bck = NULL; J3DAnmTextureSRTKey* btk = NULL; BOOL restarted = FALSE; mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK | ANM_PLAY_MORF | ANM_PLAY_BTK | ANM_PLAY_BRK | ANM_PLAY_BPK); daNpcT_motionAnmData_c anm_data = getMotionAnm(mpMotionAnmData[i_idx]); if (anm_data.mBckFileIdx != -1) { int arc_idx = anm_data.mBckArcIdx; int file_idx = anm_data.mBckFileIdx; changeAnm(&file_idx, &arc_idx); bck = getTrnsfrmKeyAnmP(mpArcNames[arc_idx], file_idx); } if (bck != NULL) { if (i_restart && bck == mpMorf[0]->getAnm()) { mAnmFlags |= ANM_PLAY_MORF; mMorfLoops = 0; restarted = TRUE; } else if (setMcaMorfAnm(bck, 1.0f, i_morf, anm_data.mBckAttr, 0, -1)) { mAnmFlags |= ANM_PAUSE_MORF | ANM_PLAY_MORF; mMorfLoops = 0; } else { bck = NULL; } } if (bck == NULL && anm_data.mBckFileIdx != -1) { return false; } field_0xe29 = 0; field_0xe2a = 0; if (anm_data.mBtkFileIdx != -1) { int arc_idx = anm_data.mBtkArcIdx; int file_idx = anm_data.mBtkFileIdx; changeBtk(&file_idx, &arc_idx); field_0xe29 = anm_data.field_0x18; field_0xe2a = anm_data.field_0x1a; btk = getTexSRTKeyAnmP(mpArcNames[arc_idx], file_idx); } if (btk != NULL) { if (restarted) { mAnmFlags |= ANM_PLAY_BTK; } else if (setBtkAnm(btk, mpMorf[0]->getModel()->getModelData(), 1.0f, anm_data.mBtkAttr)) { mAnmFlags |= ANM_PAUSE_BTK | ANM_PLAY_BTK; } else { btk = NULL; } } if (btk == NULL && anm_data.mBtkFileIdx != -1) { return false; } return afterSetMotionAnm(i_idx, anm_data.mBckAttr, i_morf, anm_data.mBtkAttr); } /* 8014A908-8014A99C 145248 0094+00 0/0 0/0 40/40 .text setPos__8daNpcT_cF4cXyz */ void daNpcT_c::setPos(cXyz i_pos) { i_pos.y += 300.0f; mGndChk.SetPos(&i_pos); i_pos.y = dComIfG_Bgsp().GroundCross(&mGndChk); current.pos = i_pos; old.pos = current.pos; } /* 8014A99C-8014AA18 1452DC 007C+00 0/0 0/0 29/29 .text setAngle__8daNpcT_cF5csXyz */ void daNpcT_c::setAngle(csXyz i_angle) { current.angle = i_angle; shape_angle = current.angle; mCurAngle = current.angle; field_0xd7e = mCurAngle; old.angle = current.angle; } /* 8014AA18-8014AA40 145358 0028+00 0/0 0/0 138/138 .text setAngle__8daNpcT_cFs */ void daNpcT_c::setAngle(s16 i_angle) { current.angle.y = i_angle; shape_angle.y = current.angle.y; mCurAngle.y = current.angle.y; field_0xd7e.y = mCurAngle.y; old.angle.y = current.angle.y; } /* 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(); 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; } return hitAc; } } return NULL; } /* 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) { mDamageTimerStart = 20; } mDamageTimer = mDamageTimerStart; if (i_faceMotion > -1) { mFaceMotionSeqMngr.setNo(i_faceMotion, 0.0f, FALSE, mFaceMotionSeqMngr.getOffset()); } if (i_motion > -1) { //! @bug The parameters to this function are passed in the wrong order mMotionSeqMngr.setNo(i_motion, 0.0f, mMotionSeqMngr.getOffset(), FALSE); } speed.setall(0.0f); speedF = 0.0f; } /* 8014ABD0-8014ACF0 145510 0120+00 2/2 0/0 53/53 .text chkActorInSight__8daNpcT_cFP10fopAc_ac_cfs */ BOOL daNpcT_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_fovY, s16 i_angleY) { if (cM3d_IsZero(i_fovY)) { return FALSE; } if (i_fovY < 180.0f) { s16 fov_s = cM_deg2s(i_fovY); cXyz attn_pos = getAttnPos(i_actor); cSGlobe globe(attention_info.position - attn_pos); cSAngle angle_diff = cSAngle(globe.U().Inv()) - i_angleY; s16 angle_diff_s = angle_diff.Val(); if (angle_diff_s < 0) { angle_diff_s = -angle_diff_s; } return angle_diff_s <= fov_s; } return TRUE; } /* 8014ACF0-8014ADA0 145630 00B0+00 2/2 0/0 12/12 .text chkPointInArea__8daNpcT_cF4cXyz4cXyzfffs */ BOOL daNpcT_c::chkPointInArea(cXyz i_pos, cXyz i_center, f32 i_boundXZ, f32 i_boundY1, f32 i_boundY2, s16 i_angle) { cXyz bounds, center; f32 min_y = i_boundY2; f32 max_y = i_boundY1; if (i_boundY1 < i_boundY2) { min_y = i_boundY1; 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; return chkPointInArea(i_pos, center, bounds, i_angle); } /* 8014ADA0-8014AE1C 1456E0 007C+00 1/1 0/0 1/1 .text chkPointInArea__8daNpcT_cF4cXyz4cXyz4cXyzs */ BOOL daNpcT_c::chkPointInArea(cXyz i_pos, cXyz i_center, cXyz i_bounds, s16 i_angle) { return daNpcT_chkPointInArea(i_pos, i_center, i_bounds, i_angle, TRUE); } /* 8014AE1C-8014B010 14575C 01F4+00 1/1 0/0 0/0 .text chkFindActor__8daNpcT_cFP10fopAc_ac_cis */ BOOL daNpcT_c::chkFindActor(fopAc_ac_c* i_actor, BOOL i_release, s16 i_angleY) { cXyz attn_pos = getAttnPos(i_actor); int dist_index = i_release == FALSE ? attention_info.distances[fopAc_attn_SPEAK_e] : attention_info.distances[fopAc_attn_TALK_e]; f32 dist_max = i_release == FALSE ? dComIfGp_getAttention().getDistTable(dist_index).mDistMax : dComIfGp_getAttention().getDistTable(dist_index).mDistMaxRelease; f32 lower_y = dComIfGp_getAttention().getDistTable(dist_index).mLowerY * -1.0f; f32 upper_y = dComIfGp_getAttention().getDistTable(dist_index).mUpperY * -1.0f; u32 angle_select = dComIfGp_getAttention().getDistTable(dist_index).mAngleSelect; f32 fov = 180.0f; if (angle_select & 8) { fov = 30.0f; } else if (angle_select & 0x10) { fov = 45.0f; } else if (angle_select & 0x20) { fov = 60.0f; } else if (angle_select & 0x40) { fov = 90.0f; } else if (angle_select & 0x80) { fov = 110.0f; } else if (angle_select & 0x100) { fov = 135.0f; } if (chkPointInArea(attn_pos, attention_info.position, dist_max, lower_y, upper_y, 0) && chkActorInSight(i_actor, fov, i_angleY)) { return TRUE; } else { return FALSE; } } /* 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 FALSE; } /* 8014B0C8-8014B338 145A08 0270+00 0/0 0/0 2/2 .text chkFindWolf__8daNpcT_cFsiiffffi */ BOOL daNpcT_c::chkFindWolf(s16 i_angleY, int i_distIndex, int param_2, f32 i_boundXZ, f32 i_fovY, f32 i_boundY1, f32 i_boundY2, BOOL param_7) { cXyz attn_pos = getAttnPos(daPy_getPlayerActorClass()); if (daPy_py_c::checkNowWolf()) { if (chkPointInArea(attn_pos, attention_info.position, i_boundXZ, i_boundY1, i_boundY2, 0) && chkActorInSight(daPy_getPlayerActorClass(), i_fovY, i_angleY)) { return TRUE; } f32 dist_max = dComIfGp_getAttention().getDistTable(i_distIndex).mDistMax; f32 upper_y = dComIfGp_getAttention().getDistTable(i_distIndex).mUpperY; f32 lower_y = dComIfGp_getAttention().getDistTable(i_distIndex).mLowerY; if (chkPointInArea(attn_pos, attention_info.position, dist_max, upper_y, lower_y, 0)) { return TRUE; } int dist_index = attention_info.distances[fopAc_attn_TALK_e]; dist_max = dComIfGp_getAttention().getDistTable(dist_index).mDistMax; upper_y = dComIfGp_getAttention().getDistTable(dist_index).mUpperY; lower_y = dComIfGp_getAttention().getDistTable(dist_index).mLowerY; if (chkPointInArea(attn_pos, attention_info.position, dist_max, upper_y, lower_y, 0) && param_2 < 2 && param_7 && chkWolfAction()) { return TRUE; } } return FALSE; } /* 8014B338-8014B3EC 145C78 00B4+00 0/0 0/0 75/75 .text srchPlayerActor__8daNpcT_cFv */ BOOL daNpcT_c::srchPlayerActor() { if (mPlayerActorMngr.getActorP() != NULL) { if (!chkFindActor(daPy_getPlayerActorClass(), TRUE, mCurAngle.y)) { mPlayerActorMngr.remove(); } } else { if (chkFindActor(daPy_getPlayerActorClass(), FALSE, mCurAngle.y)) { mPlayerActorMngr.entry(daPy_getPlayerActorClass()); } } return mPlayerActorMngr.getActorP() != NULL; } /* 8014B3EC-8014B4A4 145D2C 00B8+00 3/3 0/0 5/5 .text getAttnPos__8daNpcT_cFP10fopAc_ac_c */ cXyz daNpcT_c::getAttnPos(fopAc_ac_c* i_actor) { cXyz attn_pos = i_actor->attention_info.position; if (fopAcM_GetName(i_actor) == PROC_ALINK) { attn_pos.y -= daPy_py_c::getAttentionOffsetY(); if (daPy_py_c::checkNowWolf()) { attn_pos = i_actor->current.pos; attn_pos.y = i_actor->attention_info.position.y; } } return attn_pos; } /* 8014B4A4-8014B648 145DE4 01A4+00 1/1 0/0 1/1 .text turn__8daNpcT_cFsii */ BOOL daNpcT_c::turn(s16 i_angle, int i_count, int i_direction) { if (mTurnAmount == 0) { mTurnCount = fabsf(cM_sht2d((s16)(i_angle - mStartAngle))); mTurnCount = mTurnCount / 180.0f * i_count; mTurnCount = (int)mTurnCount + 1; if (mTurnCount < 8.0f) { mTurnCount = 8.0f; } } int tmp1 = mStartAngle; int tmp2 = i_angle; if (i_direction == 0) { i_direction = (s16)(tmp2 - tmp1) >= 0 ? 1 : -1; } int angle_diff = (u16)(i_angle - mStartAngle); if (i_direction == -1) { angle_diff = -(u16)(0xffff - angle_diff); } s16 turn = angle_diff * cM_ssin(mTurnAmount); mTurnAmount += (s16)(0x4000 / mTurnCount); if ((u16)mTurnAmount < 0x4000) { mCurAngle.y = mStartAngle + turn; } else { mCurAngle.y = i_angle; mTurnAmount = 0x4000; } return i_angle == mCurAngle.y; } /* 8014B648-8014B808 145F88 01C0+00 0/0 0/0 177/177 .text step__8daNpcT_cFsiiii */ BOOL daNpcT_c::step(s16 i_angle, int i_faceMotion, int i_motion, int i_turnCount, int i_turnDirection) { if (mStepMode >= 2 && i_angle != mCurAngle.y) { mStepMode = 0; } if (mStepMode == 0) { s16 angle_diff = i_angle - mCurAngle.y; if (angle_diff == 0) { mStepMode = 2; } else { mTargetAngle = i_angle; mStartAngle = mCurAngle.y; mTurnAmount = 0; if ((int)fabsf(cM_sht2d(angle_diff)) > 64) { mFaceMotionSeqMngr.setNo(i_faceMotion, -1.0f, TRUE, mFaceMotionSeqMngr.getOffset()); mMotionSeqMngr.setNo(i_motion, -1.0f, TRUE, mMotionSeqMngr.getOffset()); } current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; mStepMode++; } } else if (mStepMode == 1) { if (turn(mTargetAngle, i_turnCount, i_turnDirection)) { current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; field_0xd7e.y = current.angle.y; mStepMode++; } else { current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; } } return mStepMode > 1; } /* 8014B808-8014BB00 146148 02F8+00 0/0 0/0 11/11 .text calcSpeedAndAngle__8daNpcT_cF4cXyziss */ void daNpcT_c::calcSpeedAndAngle(cXyz i_target, BOOL i_stop, s16 i_angleScale, s16 i_angleStep) { if (i_stop) { speedF = 0.0f; return; } current.angle.y = cLib_targetAngleY(¤t.pos, &i_target); cLib_addCalcAngleS2(&shape_angle.y, current.angle.y, i_angleScale, i_angleStep); mCurAngle.y = shape_angle.y; if (mFootLOffset.y < mFootROffset.y) { speedF = (mFootLOffset - mOldFootLOffset).absXZ(); } else { speedF = (mFootROffset - mOldFootROffset).absXZ(); } speedF *= cM_scos(mGroundAngle); if (mGroundAngle < 0) { speedF *= 0.85f; } } /* 8014BB00-8014BBF0 146440 00F0+00 0/0 0/0 2/2 .text getActorDistance__8daNpcT_cFP10fopAc_ac_cii */ int daNpcT_c::getActorDistance(fopAc_ac_c* i_actor, int i_distIndex1, int i_distIndex2) { int ret = 0; f32 dist1 = dComIfGp_getAttention().getDistTable(i_distIndex1).mDistMax; f32 dist2 = dComIfGp_getAttention().getDistTable(i_distIndex2).mDistMax; f32 actor_dist = fopAcM_searchActorDistanceXZ(this, i_actor); if (actor_dist < dist1) { return 0; } f32 diff = actor_dist - dist1; dist2 -= dist1; dist2 /= 6.0f; for (int i = 0; i < 5; i++, ret++) { if (diff < dist2 * (i + 1)) { return ret; } } return ret; } /* 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); mPlayerAngle = fopAcM_searchPlayerAngleY(this); if (checkStep()) { mStepMode = 0; } speedF = 0.0f; speed.set(0.0f, 0.0f, 0.0f); return TRUE; } /* 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 ret = FALSE; if (dMsgObject_isMsgSendControl()) { if (param_1) { dMsgObject_offMsgSendControl(); } } else if (mFlow.doFlow(this, param_2, 0)) { ret = TRUE; } else { if (mFlow.getMsg() != NULL) { switch (mFlow.getMsg()->mode) { case 2: case 6: if (param_0 != NULL) { for (int i = 0; param_0[i] > 0; i++) { if (param_0[i] == mFlow.getMsgNo()) { ret = TRUE; break; } } } break; case 17: if (param_3) { ret = TRUE; } break; } } int tmp1, face_motion, motion, tmp2; if (mFlow.checkEventRender(&tmp1, &motion, &face_motion, &tmp2)) { if (face_motion != mFaceMotionSeqMngr.getNo()) { mFaceMotionSeqMngr.setNo(face_motion, -1.0f, FALSE, mFaceMotionSeqMngr.getOffset()); } if (motion != mMotionSeqMngr.getNo()) { mMotionSeqMngr.setNo(motion, -1.0f, FALSE, mMotionSeqMngr.getOffset()); } } } return ret; } /* 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* actor = NULL; f32 minDistance = 1000000000.0f; mFindCount = 0; mSrchName = i_procName; fpcM_Search(srchActor, this); for (s32 i = 0; i < mFindCount; i++) { f32 dist = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); if (dist < minDistance) { minDistance = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); 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) { mFindCount = 0; mSrchName = PROC_TAG_EVTAREA; fpcM_Search(srchActor, this); for (int i = 0; i < mFindCount; i++) { daTag_EvtArea_c* evt_area = static_cast(mFindActorPtrs[i]); if (evt_area->getType() == i_type && evt_area->getNo() == i_no) { return mFindActorPtrs[i]; } } return NULL; } /* 8014BFB0-8014C030 1468F0 0080+00 0/0 0/0 5/5 .text getShopItemTagP__8daNpcT_cFv */ fopAc_ac_c* daNpcT_c::getShopItemTagP() { mFindCount = 0; mSrchName = PROC_TAG_SHOPITM; fpcM_Search(srchActor, this); for (s32 i = 0; i < mFindCount; i++) { if ((fopAcM_GetParam(mFindActorPtrs[i]) & 0xf0000000) == 0xf0000000) { return mFindActorPtrs[i]; } } return NULL; } /* 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; field_0xe00.y = cM_ssin(field_0xe18) * 4.0f; 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++) { 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; emitter->setGlobalTranslation(pos.x, pos.y, pos.z); emitter->setGlobalAlpha(alpha); } } } /* 8014C200-8014C384 146B40 0184+00 0/0 0/0 2/2 .text * daNpcT_chkActorInScreen__FP10fopAc_ac_cfffffffi */ bool daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, f32 param_6, f32 param_7, int param_8) { cXyz proj; cXyz pos_array[8]; if (fopAcM_GetMtx(i_ActorP)) { pos_array[0].set(param_1, param_5, param_3); pos_array[1].set(param_4, param_5, param_3); pos_array[2].set(param_1, param_5, param_6); pos_array[3].set(param_4, param_5, param_6); pos_array[4].set(param_1, param_2, param_3); pos_array[5].set(param_4, param_2, param_3); pos_array[6].set(param_1, param_2, param_6); pos_array[7].set(param_4, param_2, param_6); 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); 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) { continue; } return false; } return true; } 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) { cXyz l_pos; cXyz diff; mDoMtx_stack_c::YrotS(-i_angle); mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z); mDoMtx_stack_c::multVec(&i_pos, &l_pos); f32 axis_x = fabsf(i_bounds.x); f32 axis_z = fabsf(i_bounds.z); f32 pos_x = fabsf(l_pos.x); f32 pos_z = fabsf(l_pos.z); if (i_checkHeight) { diff = i_pos - i_center; if (!(0.0f <= diff.y && diff.y < i_bounds.y)) { return FALSE; } } f32 tmp1 = (pos_x * pos_x) / (axis_x * axis_x); f32 tmp2 = (pos_z * pos_z) / (axis_z * axis_z); if (tmp1 + tmp2 <= 1.0f) { return TRUE; } else { return FALSE; } } /* 8014C500-8014C5E0 146E40 00E0+00 0/0 0/0 29/29 .text * daNpcT_getPlayerInfoFromPlayerList__FiiP4cXyzP5csXyz */ BOOL daNpcT_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz* o_spawnPos, csXyz* o_angle) { BOOL ret = FALSE; dStage_roomDt_c* room_dt = dComIfGp_roomControl_getStatusRoomDt(i_roomNo); stage_actor_data_class* entry = room_dt->getPlayer()->mEntries; for (int i = 0; i < room_dt->getPlayerNum(); entry++, i++) { if (param_0 == (entry->mAngle.z & 0xff)) { *o_spawnPos = entry->mSpawnPos; *o_angle = entry->mAngle; 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; 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() && 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; } /* 8014C700-8014CA18 147040 0318+00 0/0 0/0 2/2 .text * daNpcT_judgeRace__FP5dPathPP10fopAc_ac_cP16daNpcT_pntData_ciPi */ int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pntData, int param_3, int* param_4) { cXyz proj; for (int i = 0; i < param_3; i++) { 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, &proj, &prev_idx, &next_idx)) { break; } if (daNpcT_incIdx(i_path->m_num, idx, i_path->m_closed & 1, 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; } if (param_4 != NULL) { for (int i = 0; i < param_3; i++) { int count = 0; if (i_pntData[i].field_0x0 >= 0) { for (int j = 0; j < param_3; j++) { if (i == j) { continue; } if (i_pntData[j].field_0x0 < 0) { count++; } else if (i_pntData[i].field_0x0 == i_pntData[j].field_0x0) { f32 proj1_x, proj2_x, proj1_z, proj2_z, tmp; if (cM3d_Len2dSqPntAndSegLine(param_1[i]->current.pos.x, param_1[i]->current.pos.z, i_path->m_points[i_pntData[i].field_0x4].m_position.x, i_path->m_points[i_pntData[i].field_0x4].m_position.z, i_path->m_points[i_pntData[i].field_0x0].m_position.x, i_path->m_points[i_pntData[i].field_0x0].m_position.z, &proj1_x, &proj1_z, &tmp) && cM3d_Len2dSqPntAndSegLine(param_1[j]->current.pos.x, param_1[j]->current.pos.z, i_path->m_points[i_pntData[i].field_0x4].m_position.x, i_path->m_points[i_pntData[i].field_0x4].m_position.z, i_path->m_points[i_pntData[i].field_0x0].m_position.x, i_path->m_points[i_pntData[i].field_0x0].m_position.z, &proj2_x, &proj2_z, &tmp)) { s16 angle1 = cM_atan2s( i_path->m_points[i_pntData[i].field_0x0].m_position.x - i_path->m_points[i_pntData[i].field_0x4].m_position.x, i_path->m_points[i_pntData[i].field_0x0].m_position.z - i_path->m_points[i_pntData[i].field_0x4].m_position.z); s16 angle2 = cM_atan2s(proj2_x - proj1_x, proj2_z - proj1_z); if ((u16)abs((s16)(angle1 - angle2)) < 0x4000) { count++; } } } else if (i_pntData[i].field_0x0 < i_pntData[j].field_0x0) { count++; } } param_4[i] = count; } } } return 1; } /* 8014CA18-8014CA2C 147358 0014+00 0/0 0/0 61/61 .text daNpcT_getDistTableIdx__Fii */ u8 daNpcT_getDistTableIdx(int param_0, int param_1) { return param_0 + param_1 * 0x14 + 0x5e; } /* 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]); } /* 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]); } /* 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]); } /* 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]); } /* 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]); } /* 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]); } /* 80392680-803926B0 01ECE0 0030+00 1/1 0/0 4/4 .rodata mCcDObjData__8daNpcT_c */ const dCcD_SrcGObjInf daNpcT_c::mCcDObjData = { {0, {{0, 0, 0}, {0, 0x00}, {0x79}}}, {dCcD_SE_NONE, 0, 0, 0, 0}, {dCcD_SE_NONE, 0, 0, 0, 0}, {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 } /* 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(¶m_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 = ¶m_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; } /* 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, ¶m_2[i]); } local_90 = *mAttnPos - i_actor->current.pos; mDoMtx_stack_c::multVec(&local_90, ¶m_5); for (int i = 0; i < 3; i++) { cXyz* vec = ¶m_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 = ¶m_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, ¤t.pos, &tevStr); } else { g_env_light.settingTevStruct(0, ¤t.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, ¤t.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(i_actor)->getCutType(); static_cast(i_this)->setCutType(cut_type); } else { static_cast(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(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(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(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(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(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()->mEntries; for (int i = 0; i < roomP->getPlayerNum(); entries++, i++) { if (param_0 == (u8)entries->mAngle.z) { param_2 = entries->mSpawnPos; param_3 = entries->mAngle; 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 */ } /* 80155BCC-80155BD0 15050C 0004+00 2/0 0/0 0/0 .text drawOtherMdls__8daNpcF_cFv */ void daNpcF_c::drawOtherMdls() { /* 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 */ bool 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 */