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