From 9f76ba2f69e32317377477fdd341f4951a012cf0 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Tue, 25 Nov 2025 15:32:01 -0500 Subject: [PATCH] d_a_npc debug work (#2863) * Remove d_a_npc3.cpp This file appears to not actually be real and the asserts in its functions all reference d_a_npc2.cpp instead. * d_a_npc debug almost matching --- include/SSystem/SComponent/c_lib.h | 2 +- include/d/actor/d_a_npc.h | 677 ++---------------------- include/d/actor/d_a_npc2.h | 184 +++++++ include/d/actor/d_a_npc4.h | 459 ++++++++++++++++ include/d/actor/d_a_npc_ash.h | 2 +- include/d/actor/d_a_npc_ashB.h | 2 +- include/d/actor/d_a_npc_blue_ns.h | 2 +- include/d/actor/d_a_npc_bouS.h | 2 +- include/d/actor/d_a_npc_chat.h | 2 +- include/d/actor/d_a_npc_chin.h | 2 +- include/d/actor/d_a_npc_doorboy.h | 2 +- include/d/actor/d_a_npc_drainSol.h | 2 +- include/d/actor/d_a_npc_gra.h | 3 +- include/d/actor/d_a_npc_grc.h | 3 +- include/d/actor/d_a_npc_grd.h | 2 +- include/d/actor/d_a_npc_gro.h | 2 +- include/d/actor/d_a_npc_grr.h | 2 +- include/d/actor/d_a_npc_grs.h | 2 +- include/d/actor/d_a_npc_grz.h | 3 +- include/d/actor/d_a_npc_gwolf.h | 2 +- include/d/actor/d_a_npc_impal.h | 2 +- include/d/actor/d_a_npc_ins.h | 2 +- include/d/actor/d_a_npc_kasi_hana.h | 2 +- include/d/actor/d_a_npc_kasi_kyu.h | 2 +- include/d/actor/d_a_npc_kasi_mich.h | 2 +- include/d/actor/d_a_npc_moir.h | 2 +- include/d/actor/d_a_npc_myna2.h | 2 +- include/d/actor/d_a_npc_prayer.h | 2 +- include/d/actor/d_a_npc_rafrel.h | 2 +- include/d/actor/d_a_npc_shad.h | 2 +- include/d/actor/d_a_npc_shoe.h | 2 +- include/d/actor/d_a_npc_soldierA.h | 2 +- include/d/actor/d_a_npc_soldierB.h | 2 +- include/d/actor/d_a_npc_the.h | 2 +- include/d/actor/d_a_npc_theB.h | 2 +- include/d/actor/d_a_npc_tk.h | 20 +- include/d/actor/d_a_npc_tkc.h | 2 +- include/d/actor/d_a_npc_tks.h | 2 +- include/d/actor/d_a_npc_wrestler.h | 1 + include/d/actor/d_a_npc_zra.h | 3 +- include/d/actor/d_a_npc_zrc.h | 2 +- include/d/actor/d_a_npc_zrz.h | 2 +- include/d/actor/d_a_obj_gra2.h | 3 +- include/d/actor/d_a_obj_tks.h | 2 +- include/d/actor/d_a_obj_zraMark.h | 1 + include/d/actor/d_a_startAndGoal.h | 2 +- include/d/d_bg_s.h | 2 +- include/d/d_cc_d.h | 2 +- include/m_Do/m_Do_ext.h | 3 +- include/m_Do/m_Do_mtx.h | 4 +- src/d/actor/d_a_L7op_demo_dr.cpp | 2 +- src/d/actor/d_a_b_dr.cpp | 2 +- src/d/actor/d_a_kytag04.cpp | 3 +- src/d/actor/d_a_npc.cpp | 746 +++++++++++++++------------ src/d/actor/d_a_npc2.cpp | 501 ++++++++++++++++-- src/d/actor/d_a_npc3.cpp | 301 ----------- src/d/actor/d_a_npc4.cpp | 519 ++++++++++++++----- src/d/actor/d_a_npc_ash.cpp | 5 +- src/d/actor/d_a_npc_ashB.cpp | 3 +- src/d/actor/d_a_npc_chin.cpp | 1 + src/d/actor/d_a_npc_doorboy.cpp | 1 + src/d/actor/d_a_npc_drainSol.cpp | 1 + src/d/actor/d_a_npc_fairy.cpp | 3 +- src/d/actor/d_a_npc_fairy_seirei.cpp | 1 + src/d/actor/d_a_npc_gra.cpp | 1 + src/d/actor/d_a_npc_grc.cpp | 1 + src/d/actor/d_a_npc_grd.cpp | 3 +- src/d/actor/d_a_npc_grmc.cpp | 1 + src/d/actor/d_a_npc_grr.cpp | 1 + src/d/actor/d_a_npc_grz.cpp | 1 + src/d/actor/d_a_npc_gwolf.cpp | 1 + src/d/actor/d_a_npc_impal.cpp | 1 + src/d/actor/d_a_npc_ins.cpp | 1 + src/d/actor/d_a_npc_kasi_hana.cpp | 3 +- src/d/actor/d_a_npc_kasi_kyu.cpp | 3 +- src/d/actor/d_a_npc_kasi_mich.cpp | 3 +- src/d/actor/d_a_npc_moi.cpp | 1 + src/d/actor/d_a_npc_myna2.cpp | 1 + src/d/actor/d_a_npc_pachi_taro.cpp | 2 + src/d/actor/d_a_npc_rafrel.cpp | 1 + src/d/actor/d_a_npc_shoe.cpp | 1 + src/d/actor/d_a_npc_soldierA.cpp | 1 + src/d/actor/d_a_npc_soldierB.cpp | 5 +- src/d/actor/d_a_npc_the.cpp | 5 +- src/d/actor/d_a_npc_tkc.cpp | 1 + src/d/actor/d_a_npc_tkj.cpp | 1 + src/d/actor/d_a_npc_tks.cpp | 3 +- src/d/actor/d_a_npc_zrc.cpp | 1 + src/d/actor/d_a_npc_zrz.cpp | 1 + src/d/actor/d_a_obj_gadget.cpp | 1 + src/d/actor/d_a_obj_gra2.cpp | 5 +- src/d/actor/d_a_obj_gra_rock.cpp | 1 + src/d/actor/d_a_obj_kago.cpp | 2 +- src/d/actor/d_a_obj_kbacket.cpp | 3 +- src/d/actor/d_a_obj_mie.cpp | 5 +- src/d/actor/d_a_obj_pumpkin.cpp | 7 +- src/d/actor/d_a_obj_tks.cpp | 1 + src/d/actor/d_a_obj_yel_bag.cpp | 1 + src/d/actor/d_a_tag_allmato.cpp | 1 + src/d/actor/d_a_tag_evtmsg.cpp | 2 +- src/d/actor/d_a_tag_mstop.cpp | 2 +- src/d/actor/d_a_tag_push.cpp | 1 + src/d/d_bg_s.cpp | 2 +- src/d/d_meter2_info.cpp | 1 + 104 files changed, 2060 insertions(+), 1546 deletions(-) create mode 100644 include/d/actor/d_a_npc2.h create mode 100644 include/d/actor/d_a_npc4.h delete mode 100644 src/d/actor/d_a_npc3.cpp diff --git a/include/SSystem/SComponent/c_lib.h b/include/SSystem/SComponent/c_lib.h index 1dcd862402..a93ba51aa5 100644 --- a/include/SSystem/SComponent/c_lib.h +++ b/include/SSystem/SComponent/c_lib.h @@ -92,7 +92,7 @@ T cLib_getRndValue(T min, T range) { template T cLib_calcTimer(T* value) { if (*(T*)value != 0) { - *value = *value - 1; + --*value; } return *value; } diff --git a/include/d/actor/d_a_npc.h b/include/d/actor/d_a_npc.h index c8a8f4b1b0..59bf616126 100644 --- a/include/d/actor/d_a_npc.h +++ b/include/d/actor/d_a_npc.h @@ -6,7 +6,6 @@ #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" @@ -151,36 +150,41 @@ public: f32, f32, f32, f32, f32, f32, cXyz*); /* 80147858 */ void calc(f32); /* 80147C38 */ void calcJntRad(f32, f32, f32); +#if DEBUG + void drawDbgInfo(); +#endif void setEyeAngleX(cXyz param_1, f32 param_2, s16 param_3) { - cXyz cStack_50; + cXyz unusedXyz; + f32 param_2_recip = 0.0f; s16 sVar3 = 0; if (mAttnPosP != NULL) { - cStack_50 = *mAttnPosP - param_1; + cXyz cStack_50 = *mAttnPosP - param_1; sVar3 = -cM_atan2s(cStack_50.y, cStack_50.absXZ()); sVar3 += param_3; } sVar3 += field_0x150.x; - mEyeAngle.x = field_0x132.x * (1.0f - 1.0f / param_2) + - sVar3 * (1.0f / param_2); + param_2_recip = 1.0f / param_2; + mEyeAngle.x = field_0x132.x * (1.0f - param_2_recip) + + sVar3 * param_2_recip; } void setEyeAngleY(cXyz param_1, s16 param_2, BOOL param_3, f32 param_4, s16 param_5) { - cXyz cStack_50; + f32 param_4_recip = 0.0f; s16 sVar3 = 0; if (mAttnPosP != NULL) { - cStack_50 = *mAttnPosP - param_1; - sVar3 = cM_atan2s(cStack_50.x, cStack_50.z); + cXyz cStack_50 = *mAttnPosP - param_1; + sVar3 += cM_atan2s(cStack_50.x, cStack_50.z); sVar3 -= param_2; - s16 diff = field_0x150.y - param_2; - sVar3 -= diff; + sVar3 -= (s16)(field_0x150.y - param_2); sVar3 += param_5; } if (param_3) { - sVar3 = -sVar3; + sVar3 = sVar3 * -1; } - mEyeAngle.y = field_0x132.y * (1.0f - 1.0f / param_4) + - sVar3 * (1.0f / param_4); + param_4_recip = 1.0f / param_4; + mEyeAngle.y = field_0x132.y * (1.0f - param_4_recip) + + sVar3 * param_4_recip; } void setEyeAngleY(s16 param_1, f32 param_2) { @@ -192,7 +196,8 @@ public: s16 getEyeAngleY() { return mEyeAngle.y; } f32 getJntRadX(int param_0) { - f32 ret = field_0xe4[2].x; + f32 ret = 0.0f; + ret = field_0xe4[2].x; if (param_0 == 0) { ret += field_0xe4[0].x * (1.0f - field_0x148); } else if (param_0 == 1) { @@ -202,7 +207,8 @@ public: } f32 getJntRadY(int param_0) { - f32 ret = field_0xe4[2].y; + f32 ret = 0.0f; + ret = field_0xe4[2].y; if (param_0 == 0) { ret += field_0xe4[0].y * (1.0f - field_0x148); } else if (param_0 == 1) { @@ -421,11 +427,10 @@ public: f32 GetH10() { return H10; } f32 GetH11() { return H11; } - // constants might be wrong, regalloc void Set(f32 param_1) { field_0x00 = param_1; + f32 cubed = param_1 * param_1 * param_1; f32 sqr = param_1 * param_1; - f32 cubed = param_1 * sqr; H00 = 1.0f + (2.0f * cubed - 3.0f * sqr); H01 = -2.0f * cubed + 3.0f * sqr; @@ -477,8 +482,7 @@ public: int getArg2() { return mPathInfo->m_points[mIdx].mArg2; } int chkClose() { - BOOL rt = dPath_ChkClose(mPathInfo); - return rt; + return dPath_ChkClose(mPathInfo); } bool chkReverse() { return mDirection == 1; } @@ -501,6 +505,10 @@ public: field_0x1E = 1; } + bool checkReverse() { + return mDirection == 1; + } + BOOL chkNextId() { return mPathInfo->m_nextID != 0xFFFF; } }; @@ -684,7 +692,10 @@ public: /* 8014BFB0 */ fopAc_ac_c* getShopItemTagP(); /* 8014C030 */ void setHitodamaPrtcl(); - /* 8014CD20 */ virtual ~daNpcT_c() {} + /* 8014CD20 */ virtual ~daNpcT_c() { + // "daNpcT_c -> destructed" + OS_REPORT("|%06d:%x|daNpcT_c -> デストラクト\n", g_Counter.mCounter0, this); + } /* 801490D4 */ virtual BOOL ctrlBtk(); /* 8014CC14 */ virtual void ctrlSubFaceMotion(int) {} /* 8014CC40 */ virtual BOOL checkChangeJoint(int) { return FALSE; } @@ -760,6 +771,10 @@ public: field_0xde4 = 0.2f; } + BOOL chkFindPlayer(BOOL param_0, s16 param_1) { + return chkFindActor(daPy_getPlayerActorClass(), param_0, param_1); + } + static dCcD_SrcGObjInf const mCcDObjData; static dCcD_SrcCyl mCcDCyl; static dCcD_SrcSph mCcDSph; @@ -817,591 +832,7 @@ BOOL daNpcT_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz* o_spawn csXyz* o_angle); int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pntData, int param_3, int* param_4); BOOL daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32 param_3, - f32 param_4, f32 param_5, f32 param_6, f32 param_7, int param_8); - -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 { -public: - /* 8014D804 */ daBaseNpc_acMngr_c(); - /* 8014D81C */ void entry(fopAc_ac_c*); - /* 8014D838 */ fopAc_ac_c* getActor(); - /* 80150524 */ virtual ~daBaseNpc_acMngr_c() {} - -private: - /* 0x04 */ fpc_ProcID mActorId; -}; - -class daBaseNpc_path_c { -public: - /* 8014D998 */ daBaseNpc_path_c(); - /* 8014D9A8 */ BOOL isPath(); - /* 8014D9BC */ int setPathInfo(u8, s8, s8); - /* 8014DA48 */ void reverseDir(); - /* 8014DA64 */ s32 chkPnt(cXyz); - /* 8014DAC4 */ BOOL setNextPnt(); - /* 8014DB04 */ u16 getIdx(); - /* 8014DB0C */ void setIdx(u16); - /* 8014DB14 */ Vec getPntPos(u16); - /* 801503FC */ virtual ~daBaseNpc_path_c() {} - - static const int MAXNUMCONTROLPNT_e = 64; - -public: - /* 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; - /* 0xA14 */ s16 field_0xa14; - /* 0xA16 */ u8 field_0xa16[2]; - /* 0xA18 */ int field_0xa18; - /* 0xA1C */ u8 field_0xa1c[8]; -}; - -class daBaseNpc_lookat_c { -public: - /* 8014DB40 */ void limitter(s16, s16*, s16, s16); - /* 8014DBB4 */ void calc(fopAc_ac_c*, f32 (*)[4], s16); - /* 8014E634 */ void setMaxJntLmt(csXyz, int); - /* 8014E658 */ void setMinJntLmt(csXyz, int); - /* 8014E67C */ void setJntPos(cXyz, int); - /* 8014E6A0 */ int setAttnPos(cXyz*); - /* 8014E6AC */ csXyz getRot(int); - /* 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 */ int setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); - /* 8014EEE4 */ int setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); - /* 8014EF28 */ J3DAnmTransform* getTexPtrnAnmP(char*, int); - /* 8014EF64 */ int setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); - /* 8014EFF4 */ void orderEvent(int, char*); - /* 8014F0A0 */ void setEnvTevColor(); - /* 8014F0FC */ void setRoomNo(); - /* 8014F148 */ int checkEndAnm(f32); - /* 8014F1C8 */ int checkEndAnm(J3DFrameCtrl*); - - /* 8014E89C */ virtual ~daBaseNpc_c(); - /* 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(); - /* 8014F228 */ virtual void allAnmPlay(); - /* 8014F38C */ virtual void adjustShapeAngle(); - /* 8014F390 */ virtual void setMtx(int); - /* 8014F4A0 */ virtual void setCollisions(); - /* 8014F4A4 */ virtual void setAttnPos(); - /* 8014F4A8 */ virtual void drawOtherMdls(); - /* 8014F4AC */ virtual bool dbgDraw(); - - static dCcD_SrcGObjInf const mCcDObj; - static dCcD_SrcCyl mCcDCyl; - static dCcD_SrcSph mCcDSph; - -public: - /* 0x56C */ dBgS_ObjAcch mAcch; - /* 0x744 */ char field_0x744; - /* 0x745 */ u8 field_0x745[0x74c - 0x745]; - /* 0x74C */ request_of_phase_process_class mPhase; - /* 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 */ u16 field_0x842; - /* 0x844 */ u8 field_0x844; - /* 0x845 */ u8 field_0x845[0x848 - 0x845]; - /* 0x848 */ s32 field_0x848; - /* 0x84C */ dMsgFlow_c mMsgFlow; - /* 0x898 */ u8 field_0x898[0x89A - 0x898]; - /* 0x89A */ s16 mEvtIdx; - /* 0x89C */ dCcD_Stts mCcStts; - /* 0x8D8 */ dBgS_AcchCir mAcchCir; - /* 0x918 */ s16 field_0x918; - /* 0x91A */ csXyz field_0x91a; - /* 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; -}; - -STATIC_ASSERT(sizeof(daBaseNpc_c) == 0xA14); - -class daBaseNpc_moveBgActor_c : public daBaseNpc_c { -public: - /* 8014F4B4 */ daBaseNpc_moveBgActor_c(); - /* 8014F518 */ int MoveBGCreateHeap(); - /* 8014F60C */ int MoveBGCreate(char const*, int, MoveBGActor_SetFunc, u32); - /* 8014F6FC */ int MoveBGDelete(); - /* 8014F770 */ int MoveBGExecute(); - int MoveBGDraw() { - int ret = Draw(); - return ret; - } - - /* 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; - -public: - /* 0xA14 */ dBgW* mpBgw; - /* 0xA18 */ Mtx mBgMtx; -}; - -class daNpcF_ActorMngr_c { -private: - /* 0x0 */ fpc_ProcID mActorID; - -public: - daNpcF_ActorMngr_c() { initialize(); } - - /* 801506B0 */ void initialize(); - /* 801506D8 */ void entry(unsigned int); - /* 801506BC */ void entry(fopAc_ac_c*); - /* 801506E0 */ void remove(); - /* 801506EC */ fopAc_ac_c* getActorP(); - - fpc_ProcID getPId() { return mActorID; } - - /* 80155E40 */ virtual ~daNpcF_ActorMngr_c() {} -}; - -class daNpcF_c : public fopAc_ac_c { -protected: - /* 0x568 */ mDoExt_McaMorfSO* mAnm_p; - /* 0x56C */ mDoExt_bckAnm mBckAnm; - /* 0x588 */ mDoExt_btpAnm mBtpAnm; - /* 0x5A0 */ mDoExt_btkAnm mBtkAnm; - /* 0x5B8 */ mDoExt_brkAnm mBrkAnm; - /* 0x5D0 */ dBgS_ObjAcch mAcch; - /* 0x7A8 */ dCcD_Stts mCcStts; - /* 0x7E4 */ dBgS_AcchCir mAcchCir; - /* 0x824 */ daNpcF_ActorMngr_c field_0x824; - /* 0x82C */ daNpcF_ActorMngr_c mAttnActor[5]; - /* 0x854 */ cXyz mLookatPos[3]; - /* 0x878 */ cXyz mLookPos; - /* 0x884 */ cXyz field_0x884; - /* 0x890 */ cXyz field_0x890; - /* 0x89C */ cXyz field_0x89c; - /* 0x8A8 */ cXyz field_0x8a8; - /* 0x8B4 */ cXyz field_0x8b4; - /* 0x8C0 */ cXyz field_0x8c0; - /* 0x8CC */ cXyz field_0x8cc; - /* 0x8D8 */ cXyz field_0x8d8; - /* 0x8E4 */ cXyz mHeadPos; - /* 0x8F0 */ csXyz mCurAngle; - /* 0x8F6 */ csXyz mOldAngle; - /* 0x8FC */ csXyz mEyeAngle; - /* 0x902 */ csXyz mHeadAngle; - /* 0x908 */ csXyz field_0x908[3]; - /* 0x91A */ csXyz mLookatAngle[3]; - /* 0x92C */ int mStaffID; - /* 0x930 */ int mCutType; - /* 0x934 */ int mAttnIdx; - /* 0x938 */ int mAttnChangeTimer; - /* 0x93C */ int mAttnActorTimer[5]; - /* 0x950 */ int mMsgTimer; - /* 0x954 */ int mDamageTimer; - /* 0x958 */ int mTotalDamageTimer; - /* 0x95C */ int field_0x95c; - /* 0x960 */ int mEventTimer; - /* 0x964 */ int mBtpTimer; - /* 0x968 */ int mTurnAmount; - /* 0x96C */ int mTurnMode; - /* 0x970 */ f32 mTurnStepNum; - /* 0x974 */ f32 mExpressionMorfOverride; - /* 0x978 */ f32 mExpressionMorf; - /* 0x97C */ f32 mMotionMorfOverride; - /* 0x980 */ f32 mGroundH; - /* 0x984 */ f32 field_0x984[3]; - /* 0x990 */ s16 field_0x990; - /* 0x992 */ s16 field_0x992; - /* 0x994 */ s16 mTurnStartAngle; - /* 0x996 */ s16 mTurnTargetAngle; - /* 0x998 */ s16 field_0x998; - /* 0x99C */ u32 mAnmFlags; - /* 0x9A0 */ u32 mShadowKey; - /* 0x9A4 */ u32 field_0x9a4; - /* 0x9A8 */ u32 mHitodamaParticleKey[2]; - /* 0x9B0 */ u32 mPolySound; - /* 0x9B4 */ int mFlowNodeNo; - /* 0x9B8 */ cXyz field_0x9b8; - /* 0x9C4 */ cXyz field_0x9c4; - /* 0x9D0 */ s16 field_0x9d0; - /* 0x9D2 */ s16 field_0x9d2; - /* 0x9D4 */ s16 mEventIdx; - /* 0x9D6 */ s16 mExpressionPhase; - /* 0x9D8 */ s16 mExpressionPrevPhase; - /* 0x9DA */ s16 mMotionPhase; - /* 0x9DC */ s16 mMotionPrevPhase; - /* 0x9DE */ s16 mExpression; - /* 0x9E0 */ s16 mMotion; - /* 0x9E2 */ u16 mMotionLoops; - /* 0x9E4 */ u16 mExpressionLoops; - /* 0x9E6 */ u16 mOrderEvtNo; - /* 0x9E8 */ s8 mReverb; - /* 0x9E9 */ bool mOrderSpeakEvt; - /* 0x9EA */ bool field_0x9ea; - /* 0x9EB */ bool field_0x9eb; - /* 0x9EC */ bool field_0x9ec; - /* 0x9ED */ bool mOrderNewEvt; - /* 0x9EE */ bool field_0x9ee; - /* 0x9EF */ u8 field_0x9ef; - /* 0x9F0 */ bool mIsDamaged; - /* 0x9F1 */ u8 field_0x9f1; - /* 0x9F2 */ bool mHide; - /* 0x9F3 */ u8 field_0x9f3; - /* 0x9F4 */ u8 mTwilight; - /* 0x9F5 */ u8 field_0x9f5; - /* 0x9F6 */ u8 field_0x9f6; - /* 0x9F8 */ dMsgFlow_c mFlow; - /* 0xA44 */ cBgS_GndChk mGndChk; - /* 0xA80 */ dBgS_GndChk field_0xa80; - /* 0xAD4 */ dBgS_LinChk field_0xad4; - -public: - struct daNpcF_anmPlayData { - u16 idx; - f32 morf; - int numLoops; - }; - - enum AnmFlags { - ANM_PAUSE_MORF = 0x0001, - ANM_PAUSE_BTK = 0x0002, - ANM_PAUSE_BRK = 0x0004, - ANM_PLAY_MORF = 0x0008, - ANM_PLAY_BTK = 0x0010, - ANM_PLAY_BRK = 0x0020, - ANM_PAUSE_BCK = 0x0040, - ANM_PAUSE_BTP = 0x0080, - ANM_PLAY_BCK = 0x0100, - ANM_PLAY_BTP = 0x0200, - ANM_FLAG_400 = 0x0400, - ANM_FLAG_800 = 0x0800, - ANM_PAUSE_EXPRESSION = 0x1000, - ANM_PAUSE_BPK = 0x2000, - ANM_PLAY_BPK = 0x4000, - ANM_MOTION_FLAGS = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PLAY_MORF | - ANM_PLAY_BTK | ANM_PLAY_BRK, - ANM_EXPRESSION_FLAGS = ANM_PAUSE_BCK | ANM_PAUSE_BTP | ANM_PLAY_BCK | ANM_PLAY_BTP | - ANM_FLAG_400 | ANM_FLAG_800 | ANM_PAUSE_EXPRESSION, - ANM_PAUSE_ALL = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BCK | - ANM_PAUSE_BTP | ANM_PAUSE_EXPRESSION, - }; - - enum LookMode { - /* 0 */ LOOK_NONE, - /* 1 */ LOOK_RESET, - /* 2 */ LOOK_PLAYER, - /* 3 */ LOOK_PLAYER_TALK, - /* 4 */ LOOK_ACTOR, - /* 5 */ LOOK_ATTN, - }; - - daNpcF_c() { - FORCE_DONT_INLINE; - initialize(); - } - /* 80152014 */ BOOL execute(); - /* 801522AC */ int draw(BOOL, BOOL, f32, _GXColorS10*, BOOL); - /* 80152614 */ static void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, - dCcD_GObjInf*); - /* 80152654 */ static void* srchAttnActor1(void*, void*); - /* 801526E8 */ static void* srchActor(void*, void*); - - /* 801528C8 */ void initialize(); - /* 80152B2C */ J3DAnmTransformKey* getTrnsfrmKeyAnmP(char*, int); - /* 80152B68 */ J3DAnmTexPattern* getTexPtrnAnmP(char*, int); - /* 80152BA4 */ J3DAnmTextureSRTKey* getTexSRTKeyAnmP(char*, int); - /* 80152BE0 */ J3DAnmTevRegKey* getTevRegKeyAnmP(char*, int); - /* 80152C1C */ BOOL setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf, int i_attr, - int i_start, int i_end); - /* 80152C80 */ BOOL setBckAnm(J3DAnmTransform* i_bck, f32 i_rate, int i_attr, int i_start, - int i_end, bool i_modify); - /* 80152CC4 */ BOOL setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_rate, - int i_attr); - /* 80152D04 */ BOOL setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_rate, - int i_attr); - /* 80152D44 */ BOOL setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 i_rate, - int i_attr); - /* 80152D84 */ void setEnvTevColor(); - /* 80152DE0 */ void setRoomNo(); - /* 80152E24 */ BOOL chkEndAnm(f32); - /* 80152EC4 */ BOOL chkEndAnm(J3DFrameCtrl*, f32); - /* 80152F40 */ BOOL playAllAnm(); - /* 80153150 */ void playExpressionAnm(daNpcF_c::daNpcF_anmPlayData***); - /* 80153264 */ void playMotionAnm(daNpcF_c::daNpcF_anmPlayData***); - /* 8015337C */ void setLookatMtx(int, int*, f32); - /* 80153578 */ BOOL hitChk2(dCcD_Cyl*, BOOL, BOOL); - /* 80153658 */ void setDamage(int, int, int); - /* 80153718 */ int ctrlMsgAnm(int&, int&, fopAc_ac_c*, BOOL); - /* 8015387C */ void orderEvent(int, char*, u16, u16, u8, u16); - /* 80153954 */ void changeEvent(char*, char*, u16, u16); - /* 801539F0 */ BOOL chkActorInSight(fopAc_ac_c*, f32); - /* 80153A78 */ BOOL chkActorInArea(fopAc_ac_c*, cXyz, cXyz, s16); - /* 80153BDC */ BOOL chkActorInAttnArea(fopAc_ac_c*, fopAc_ac_c*, int); - /* 80153D1C */ BOOL initTalk(int, fopAc_ac_c**); - /* 80153D84 */ BOOL talkProc(int*, BOOL, fopAc_ac_c**); - /* 80153EF4 */ BOOL turn(s16, f32, int); - /* 801540A4 */ BOOL step(s16, int, int, int); - /* 80154250 */ void setAngle(s16); - /* 80154278 */ u8 getDistTableIdx(int, int); - /* 801542A0 */ fopAc_ac_c* getEvtAreaTagP(int, int); - /* 8015436C */ fopAc_ac_c* getAttnActorP(BOOL, fpcLyIt_JudgeFunc, f32, f32, f32, f32, s16, - int, BOOL); - /* 80154730 */ BOOL chkActorInSight2(fopAc_ac_c*, f32, s16); - /* 80154834 */ BOOL chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); - /* 801548F4 */ BOOL chkPointInArea(cXyz, cXyz, cXyz, s16); - /* 8015496C */ cXyz getAttentionPos(fopAc_ac_c*); - /* 801549E0 */ BOOL chkFindPlayer2(BOOL, s16); - /* 80154BD8 */ void setHitodamaPrtcl(); - - /* 80155BF4 */ virtual ~daNpcF_c() {} - /* 80155BC8 */ virtual void setParam() {} - /* 80155BC0 */ virtual BOOL main() { return TRUE; } - /* 80155BD8 */ virtual BOOL ctrlBtk() { return FALSE; } - /* 80155BBC */ virtual void adjustShapeAngle() {} - /* 8015276C */ virtual void setMtx(); - /* 801527FC */ virtual void setMtx2(); - /* 80155BB8 */ virtual void setAttnPos() {} - /* 80155BB4 */ virtual void setCollisions() {} - /* 80155BE0 */ virtual bool setExpressionAnm(int i_idx, bool i_modify) { return true; } - /* 80155EC8 */ virtual bool setExpressionBtp(int i_idx) { return true; } - /* 80155BF0 */ virtual void setExpression(int i_expression, f32 i_morf) {} - /* 80155BE8 */ virtual void setMotionAnm(int i_idx, f32 i_morf) {} - /* 80155BEC */ virtual void setMotion(int i_motion, f32 i_morf, int i_restart) {} - /* 80155BD0 */ virtual BOOL drawDbgInfo() { return TRUE; } - /* 80155BCC */ virtual void drawOtherMdls() {} - - BOOL chkActorInSpeakArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { - return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.distances[fopAc_attn_SPEAK_e]); - } - BOOL chkPlayerInSpeakArea(fopAc_ac_c* i_actor) { - return chkActorInSpeakArea(daPy_getPlayerActorClass(), i_actor); - } - BOOL chkActorInTalkArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { - return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.distances[fopAc_attn_TALK_e]); - } - BOOL chkPlayerInTalkArea(fopAc_ac_c* i_actor) { - return chkActorInTalkArea(daPy_getPlayerActorClass(), i_actor); - } - BOOL checkHide() { return mHide || (mTwilight && !dComIfGs_wolfeye_effect_check()); } - void setIntDemander(fopAc_ac_c* i_actor) { field_0x824.entry(i_actor); } - void setIntFlowNodeNo(int i_flowNodeNo) { mFlowNodeNo = i_flowNodeNo; } - void setCutType(int i_cutType) { mCutType = i_cutType; } - void onInterrupt(u8 param_0) { field_0x9ef = param_0; } - void onHide() { mHide = true; } - void offHide() { mHide = false; } - - static dCcD_SrcGObjInf const mCcDObjInfo; - static dCcD_SrcCyl mCcDCyl; - static dCcD_SrcSph mCcDSph; - static fopAc_ac_c* mFindActorPList[100]; - static s32 mFindCount; - static s16 mSrchActorName; -}; - -STATIC_ASSERT(sizeof(daNpcF_c) == 0xB48); - -BOOL daNpcF_chkEvtBit(u32 i_idx); -void daNpcF_onEvtBit(u32 i_idx); -BOOL daNpcF_chkTmpBit(u32 i_idx); -void daNpcF_onTmpBit(u32 i_idx); -void daNpcF_offTmpBit(u32 i_idx); -u8 daNpcF_getDistTableIdx(int param_0, int param_1); -#if DEBUG -class daNpcF_HIOParam; -void daNpcF_commonListenPropertyEvent(char*, int*, daNpcF_HIOParam*); -void daNpcF_commonGenMessage(JORMContext*, daNpcF_HIOParam*); -#endif -void daNpcF_clearMessageTmpBit(); -BOOL daNpcF_chkPointInArea(cXyz, cXyz, cXyz, s16); -int daNpcF_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz& param_2, csXyz& param_3); -s16 daNpcF_getGroundAngle(cBgS_PolyInfo*, s16); -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 daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_isClosed, - BOOL i_isReversed); -BOOL daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p); - -class daNpcF_MatAnm_c : public J3DMaterialAnm { -private: - /* 0x0F4 */ mutable f32 field_0xF4; - /* 0x0F8 */ mutable f32 field_0xF8; - /* 0x0FC */ f32 mNowOffsetX; - /* 0x100 */ f32 mNowOffsetY; - /* 0x104 */ u8 mEyeMoveFlag; - /* 0x105 */ u8 mMorfFrm; - -public: - daNpcF_MatAnm_c() { initialize(); } - /* 80150738 */ void initialize(); - /* 8015075C */ void calc(J3DMaterial*) const; - /* 80155ED0 */ ~daNpcF_MatAnm_c() {} - void setNowOffsetX(float i_nowOffsetX) { mNowOffsetX = i_nowOffsetX; } - void setNowOffsetY(float i_nowOffsetY) { mNowOffsetY = i_nowOffsetY; } - void onEyeMoveFlag() { mEyeMoveFlag = 1; } - void offEyeMoveFlag() { mEyeMoveFlag = 0; } -}; - -class daNpcF_SPCurve_c { -private: - /* 0x00 */ u16 mNurbs; - /* 0x02 */ u16 field_0x02; - /* 0x04 */ u8 mIsReversed; - /* 0x05 */ u8 mIsClosed; - /* 0x08 */ dPnt mPoints[96]; - -public: - /* 80150870 */ void initialize(dPath*, int); - - daNpcF_SPCurve_c() { - initialize(NULL, 0); - } - - virtual ~daNpcF_SPCurve_c() {} -}; // Size: 0x60C - -class daNpcF_Path_c { -protected: - /* 0x00 */ u16 mIdx; - /* 0x02 */ u8 mIsReversed; - /* 0x03 */ bool mIsClosed; - /* 0x04 */ dPath* mPathInfo; - /* 0x08 */ f32 mRange; - /* 0x0C */ f32 mPosDst; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ cXyz mPosition; - /* 0x20 */ daNpcF_SPCurve_c mSPCurve; - -public: - /* 80150900 */ void initialize(); - /* 8015095C */ int setPathInfo(u8, s8, u8); - /* 80150A24 */ BOOL chkPassed(cXyz); - /* 80150A7C */ BOOL chkPassedDst(cXyz); - /* 80150BBC */ void reverse(); - /* 80150BE0 */ BOOL setNextIdx(); - /* 80150C18 */ int getNextIdx(); - /* 80150C60 */ int getBeforeIdx(); - /* 80150CA8 */ BOOL getBeforePos(cXyz&); - /* 80150D44 */ BOOL getNextPos(cXyz&); - /* 80150DE0 */ BOOL getDstPos(cXyz, cXyz&); - /* 80150EB4 */ void setNextIdxDst(cXyz); - - daNpcF_Path_c() { - initialize(); - } - - virtual ~daNpcF_Path_c() {} - - int getIdx() { return mIdx; }; - void setIdx(int i_idx) { mIdx = i_idx; } - 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; } - void offReverse() { mIsReversed = false; } - dPath* getPathInfo() { return mPathInfo; } - void setRange(f32 i_range) { mRange = i_range; } - u16 getNumPnts() { return mPathInfo->m_num; } -#if DEBUG - void drawDbgInfoXyz(); -#endif -}; // Size: 0x630 - -class daNpcF_Lookat_c { -private: - /* 0x00 */ cXyz mJointPos[4]; - /* 0x30 */ cXyz* mAttnPos_p; - /* 0x34 */ csXyz mAngularMoveDis[4]; - /* 0x4C */ csXyz mMinAngle[4]; - /* 0x64 */ csXyz mMaxAngle[4]; - /* 0x7C */ csXyz mRotAngle[4]; - /* 0x94 */ bool field_0x94[4]; - /* 0x98 vtable */ - -public: - /* 80151038 */ void initialize(); - /* 801510B8 */ void setParam(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s16, - cXyz*); - /* 80151350 */ void calc(fopAc_ac_c*, Mtx, csXyz**, BOOL, int, BOOL); - /* 801515D4 */ void adjustMoveDisAngle(s16&, s16, s16, s16); - /* 80151648 */ void initCalc(fopAc_ac_c*, Mtx, cXyz*, csXyz*, f32*, cXyz&, BOOL); - /* 80151A54 */ void update(cXyz*, csXyz*, f32*); - /* 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_p; } - void setAttnPos(cXyz* i_attnPos) { mAttnPos_p = i_attnPos; } -}; - -class daNpcF_MoveBgActor_c : public daNpcF_c { -private: -public: - /* 80155B54 */ ~daNpcF_MoveBgActor_c() {} - /* 80155E88 */ virtual bool CreateHeap() { return true; } - /* 80155E90 */ virtual bool Create() { return true; } - /* 80155EA0 */ virtual bool Execute(Mtx**) { return true; } - /* 80155EA8 */ virtual bool Draw() { return true; } - /* 80155E98 */ virtual bool Delete() { return true; } - /* 80155EB0 */ virtual bool IsDelete() { return true; } - /* 80155EB8 */ virtual bool ToFore() { return true; } - /* 80155EC0 */ virtual bool ToBack() { return true; } -}; +f32 param_4, f32 param_5, f32 param_6, f32 param_7, int param_8); struct daNpcT_HIOParam { /* 0x00 */ f32 attention_offset; @@ -1451,40 +882,4 @@ void daNpcT_cmnGenMessage(JORMContext*, daNpcT_HIOParam* param_1); void daNpcT_cmnListenPropertyEvent(char*, int*, daNpcT_HIOParam*); -struct daNpcF_HIOParam { - /* 0x00 */ f32 attention_offset; - /* 0x04 */ f32 gravity; - /* 0x08 */ f32 scale; - /* 0x0C */ f32 real_shadow_size; - /* 0x10 */ f32 weight; - /* 0x14 */ f32 height; - /* 0x18 */ f32 knee_length; - /* 0x1C */ f32 width; - /* 0x20 */ f32 body_angleX_max; - /* 0x24 */ f32 body_angleX_min; - /* 0x28 */ f32 body_angleY_max; - /* 0x2C */ f32 body_angleY_min; - /* 0x30 */ f32 head_angleX_max; - /* 0x34 */ f32 head_angleX_min; - /* 0x38 */ f32 head_angleY_max; - /* 0x3C */ f32 head_angleY_min; - /* 0x40 */ f32 neck_rotation_ratio; - /* 0x44 */ f32 morf_frame; - /* 0x48 */ s16 talk_distance; - /* 0x4A */ s16 talk_angle; - /* 0x4C */ s16 attention_distance; - /* 0x4E */ s16 attention_angle; - /* 0x50 */ f32 fov; - /* 0x54 */ f32 search_distance; - /* 0x58 */ f32 search_height; - /* 0x5C */ f32 search_depth; - /* 0x60 */ s16 attention_time; - /* 0x62 */ s16 damage_time; - /* 0x64 */ s16 face_expression; - /* 0x66 */ s16 motion; - /* 0x68 */ s16 look_mode; - /* 0x6A */ u8 debug_mode_ON; - /* 0x6B */ u8 debug_info_ON; -}; - #endif /* D_A_D_A_NPC_H */ diff --git a/include/d/actor/d_a_npc2.h b/include/d/actor/d_a_npc2.h new file mode 100644 index 0000000000..e58a8c1b7b --- /dev/null +++ b/include/d/actor/d_a_npc2.h @@ -0,0 +1,184 @@ +#ifndef D_A_NPC2 +#define D_A_NPC2 + +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_msg_flow.h" +#include "d/d_path.h" + +class daBaseNpc_acMngr_c { +public: + /* 8014D804 */ daBaseNpc_acMngr_c(); + /* 8014D81C */ void entry(fopAc_ac_c*); + /* 8014D838 */ fopAc_ac_c* getActor(); + /* 80150524 */ virtual ~daBaseNpc_acMngr_c() {} + +private: + /* 0x04 */ fpc_ProcID mActorId; +}; + +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_path_c { +public: + /* 8014D998 */ daBaseNpc_path_c(); + /* 8014D9A8 */ BOOL isPath(); + /* 8014D9BC */ int setPathInfo(u8, s8, s8); + /* 8014DA48 */ void reverseDir(); + /* 8014DA64 */ s32 chkPnt(cXyz); + /* 8014DAC4 */ BOOL setNextPnt(); + /* 8014DB04 */ u16 getIdx(); + /* 8014DB0C */ void setIdx(u16); + /* 8014DB14 */ Vec getPntPos(u16); + void dbgDraw(f32); + /* 801503FC */ virtual ~daBaseNpc_path_c() {} + + static const int MAXNUMCONTROLPNT_e = 64; + +public: + /* 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; + /* 0xA14 */ s16 field_0xa14; + /* 0xA16 */ u8 field_0xa16[2]; + /* 0xA18 */ int field_0xa18; + /* 0xA1C */ u8 field_0xa1c[8]; +}; + +class daBaseNpc_lookat_c { +public: + /* 8014DB40 */ void limitter(s16, s16*, s16, s16); + /* 8014DBB4 */ void calc(fopAc_ac_c*, f32 (*)[4], s16); + /* 8014E634 */ void setMaxJntLmt(csXyz, int); + /* 8014E658 */ void setMinJntLmt(csXyz, int); + /* 8014E67C */ void setJntPos(cXyz, int); + /* 8014E6A0 */ int setAttnPos(cXyz*); + /* 8014E6AC */ csXyz getRot(int); + /* 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 */ int setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); + /* 8014EEE4 */ int setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); + /* 8014EF28 */ J3DAnmTransform* getTexPtrnAnmP(char*, int); + /* 8014EF64 */ int setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); + /* 8014EFF4 */ void orderEvent(int, char*); + /* 8014F0A0 */ void setEnvTevColor(); + /* 8014F0FC */ void setRoomNo(); + /* 8014F148 */ int checkEndAnm(f32); + /* 8014F1C8 */ int checkEndAnm(J3DFrameCtrl*); + + /* 8014E89C */ virtual ~daBaseNpc_c(); + /* 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(); + /* 8014F228 */ virtual void allAnmPlay(); + /* 8014F38C */ virtual void adjustShapeAngle(); + /* 8014F390 */ virtual void setMtx(int); + /* 8014F4A0 */ virtual void setCollisions(); + /* 8014F4A4 */ virtual void setAttnPos(); + /* 8014F4A8 */ virtual void drawOtherMdls(); + /* 8014F4AC */ virtual bool dbgDraw(); + + static dCcD_SrcGObjInf const mCcDObj; + static dCcD_SrcCyl mCcDCyl; + static dCcD_SrcSph mCcDSph; + +public: + /* 0x56C */ dBgS_ObjAcch mAcch; + /* 0x744 */ char field_0x744; + /* 0x745 */ u8 field_0x745[0x74c - 0x745]; + /* 0x74C */ request_of_phase_process_class mPhase; + /* 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 */ u16 field_0x842; + /* 0x844 */ u8 field_0x844; + /* 0x845 */ u8 field_0x845[0x848 - 0x845]; + /* 0x848 */ s32 field_0x848; + /* 0x84C */ dMsgFlow_c mMsgFlow; + /* 0x898 */ u8 field_0x898[0x89A - 0x898]; + /* 0x89A */ s16 mEvtIdx; + /* 0x89C */ dCcD_Stts mCcStts; + /* 0x8D8 */ dBgS_AcchCir mAcchCir; + /* 0x918 */ s16 field_0x918; + /* 0x91A */ csXyz field_0x91a; + /* 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; +}; + +STATIC_ASSERT(sizeof(daBaseNpc_c) == 0xA14); + +class daBaseNpc_moveBgActor_c : public daBaseNpc_c { +public: + /* 8014F4B4 */ daBaseNpc_moveBgActor_c(); + /* 8014F518 */ int MoveBGCreateHeap(); + /* 8014F60C */ int MoveBGCreate(char const*, int, MoveBGActor_SetFunc, u32); + /* 8014F6FC */ int MoveBGDelete(); + /* 8014F770 */ int MoveBGExecute(); + int MoveBGDraw() { + int ret = Draw(); + return ret; + } + + /* 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; + +public: + /* 0xA14 */ dBgW* mpBgw; + /* 0xA18 */ Mtx mBgMtx; +}; + +#endif /* D_A_NPC2 */ diff --git a/include/d/actor/d_a_npc4.h b/include/d/actor/d_a_npc4.h new file mode 100644 index 0000000000..69f38f4a7c --- /dev/null +++ b/include/d/actor/d_a_npc4.h @@ -0,0 +1,459 @@ +#ifndef D_A_NPC4 +#define D_A_NPC4 + +#include "d/actor/d_a_player.h" +#include "d/d_msg_flow.h" +#include "d/d_bg_s_gnd_chk.h" +#include "d/d_bg_s_lin_chk.h" +#include "d/d_path.h" +#include "f_op/f_op_actor.h" +#include "f_pc/f_pc_base.h" +#include "m_Do/m_Do_ext.h" + +class daNpcF_ActorMngr_c { +private: + /* 0x0 */ fpc_ProcID mActorID; + +public: + daNpcF_ActorMngr_c() { initialize(); } + + /* 801506B0 */ void initialize(); + /* 801506D8 */ void entry(unsigned int); + /* 801506BC */ void entry(fopAc_ac_c*); + /* 801506E0 */ void remove(); + /* 801506EC */ fopAc_ac_c* getActorP(); + + fpc_ProcID getPId() { return mActorID; } + + /* 80155E40 */ virtual ~daNpcF_ActorMngr_c() {} +}; + +BOOL daNpcF_chkEvtBit(u32 i_idx); +void daNpcF_onEvtBit(u32 i_idx); +BOOL daNpcF_chkTmpBit(u32 i_idx); +void daNpcF_onTmpBit(u32 i_idx); +void daNpcF_offTmpBit(u32 i_idx); +u8 daNpcF_getDistTableIdx(int param_0, int param_1); +#if DEBUG +class daNpcF_HIOParam; +void daNpcF_commonListenPropertyEvent(char*, int*, daNpcF_HIOParam*); +void daNpcF_commonGenMessage(JORMContext*, daNpcF_HIOParam*); +#endif +void daNpcF_clearMessageTmpBit(); +BOOL daNpcF_chkPointInArea(cXyz, cXyz, cXyz, s16); +int daNpcF_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz& param_2, csXyz& param_3); +s16 daNpcF_getGroundAngle(cBgS_PolyInfo*, s16); +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 daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_isClosed, + BOOL i_isReversed); +BOOL daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p); + +class daNpcF_c : public fopAc_ac_c { +protected: + /* 0x568 */ mDoExt_McaMorfSO* mAnm_p; + /* 0x56C */ mDoExt_bckAnm mBckAnm; + /* 0x588 */ mDoExt_btpAnm mBtpAnm; + /* 0x5A0 */ mDoExt_btkAnm mBtkAnm; + /* 0x5B8 */ mDoExt_brkAnm mBrkAnm; + /* 0x5D0 */ dBgS_ObjAcch mAcch; + /* 0x7A8 */ dCcD_Stts mCcStts; + /* 0x7E4 */ dBgS_AcchCir mAcchCir; + /* 0x824 */ daNpcF_ActorMngr_c field_0x824; + /* 0x82C */ daNpcF_ActorMngr_c mAttnActor[5]; + /* 0x854 */ cXyz mLookatPos[3]; + /* 0x878 */ cXyz mLookPos; + /* 0x884 */ cXyz field_0x884; + /* 0x890 */ cXyz field_0x890; + /* 0x89C */ cXyz field_0x89c; + /* 0x8A8 */ cXyz field_0x8a8; + /* 0x8B4 */ cXyz field_0x8b4; + /* 0x8C0 */ cXyz field_0x8c0; + /* 0x8CC */ cXyz field_0x8cc; + /* 0x8D8 */ cXyz field_0x8d8; + /* 0x8E4 */ cXyz mHeadPos; + /* 0x8F0 */ csXyz mCurAngle; + /* 0x8F6 */ csXyz mOldAngle; + /* 0x8FC */ csXyz mEyeAngle; + /* 0x902 */ csXyz mHeadAngle; + /* 0x908 */ csXyz field_0x908[3]; + /* 0x91A */ csXyz mLookatAngle[3]; + /* 0x92C */ int mStaffID; + /* 0x930 */ int mCutType; + /* 0x934 */ int mAttnIdx; + /* 0x938 */ int mAttnChangeTimer; + /* 0x93C */ int mAttnActorTimer[5]; + /* 0x950 */ int mMsgTimer; + /* 0x954 */ int mDamageTimer; + /* 0x958 */ int mTotalDamageTimer; + /* 0x95C */ int field_0x95c; + /* 0x960 */ int mEventTimer; + /* 0x964 */ int mBtpTimer; + /* 0x968 */ int mTurnAmount; + /* 0x96C */ int mTurnMode; + /* 0x970 */ f32 mTurnStepNum; + /* 0x974 */ f32 mExpressionMorfOverride; + /* 0x978 */ f32 mExpressionMorf; + /* 0x97C */ f32 mMotionMorfOverride; + /* 0x980 */ f32 mGroundH; + /* 0x984 */ f32 field_0x984[3]; + /* 0x990 */ s16 field_0x990; + /* 0x992 */ s16 field_0x992; + /* 0x994 */ s16 mTurnStartAngle; + /* 0x996 */ s16 mTurnTargetAngle; + /* 0x998 */ s16 field_0x998; + /* 0x99C */ u32 mAnmFlags; + /* 0x9A0 */ u32 mShadowKey; + /* 0x9A4 */ u32 field_0x9a4; + /* 0x9A8 */ u32 mHitodamaParticleKey[2]; + /* 0x9B0 */ u32 mPolySound; + /* 0x9B4 */ int mFlowNodeNo; + /* 0x9B8 */ cXyz field_0x9b8; + /* 0x9C4 */ cXyz field_0x9c4; + /* 0x9D0 */ s16 field_0x9d0; + /* 0x9D2 */ s16 field_0x9d2; + /* 0x9D4 */ s16 mEventIdx; + /* 0x9D6 */ s16 mExpressionPhase; + /* 0x9D8 */ s16 mExpressionPrevPhase; + /* 0x9DA */ s16 mMotionPhase; + /* 0x9DC */ s16 mMotionPrevPhase; + /* 0x9DE */ s16 mExpression; + /* 0x9E0 */ s16 mMotion; + /* 0x9E2 */ u16 mMotionLoops; + /* 0x9E4 */ u16 mExpressionLoops; + /* 0x9E6 */ u16 mOrderEvtNo; + /* 0x9E8 */ s8 mReverb; + /* 0x9E9 */ bool mOrderSpeakEvt; + /* 0x9EA */ bool field_0x9ea; + /* 0x9EB */ bool field_0x9eb; + /* 0x9EC */ bool field_0x9ec; + /* 0x9ED */ bool mOrderNewEvt; + /* 0x9EE */ bool field_0x9ee; + /* 0x9EF */ u8 field_0x9ef; + /* 0x9F0 */ bool mIsDamaged; + /* 0x9F1 */ u8 field_0x9f1; + /* 0x9F2 */ bool mHide; + /* 0x9F3 */ u8 field_0x9f3; + /* 0x9F4 */ u8 mTwilight; + /* 0x9F5 */ u8 field_0x9f5; + /* 0x9F6 */ u8 field_0x9f6; + /* 0x9F8 */ dMsgFlow_c mFlow; + /* 0xA44 */ cBgS_GndChk mGndChk; + /* 0xA80 */ dBgS_GndChk field_0xa80; + /* 0xAD4 */ dBgS_LinChk field_0xad4; + +public: + struct daNpcF_anmPlayData { + u16 idx; + f32 morf; + int numLoops; + }; + + enum AnmFlags { + ANM_PAUSE_MORF = 0x0001, + ANM_PAUSE_BTK = 0x0002, + ANM_PAUSE_BRK = 0x0004, + ANM_PLAY_MORF = 0x0008, + ANM_PLAY_BTK = 0x0010, + ANM_PLAY_BRK = 0x0020, + ANM_PAUSE_BCK = 0x0040, + ANM_PAUSE_BTP = 0x0080, + ANM_PLAY_BCK = 0x0100, + ANM_PLAY_BTP = 0x0200, + ANM_FLAG_400 = 0x0400, + ANM_FLAG_800 = 0x0800, + ANM_PAUSE_EXPRESSION = 0x1000, + ANM_PAUSE_BPK = 0x2000, + ANM_PLAY_BPK = 0x4000, + ANM_MOTION_FLAGS = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PLAY_MORF | + ANM_PLAY_BTK | ANM_PLAY_BRK, + ANM_EXPRESSION_FLAGS = ANM_PAUSE_BCK | ANM_PAUSE_BTP | ANM_PLAY_BCK | ANM_PLAY_BTP | + ANM_FLAG_400 | ANM_FLAG_800 | ANM_PAUSE_EXPRESSION, + ANM_PAUSE_ALL = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BCK | + ANM_PAUSE_BTP | ANM_PAUSE_EXPRESSION, + }; + + enum LookMode { + /* 0 */ LOOK_NONE, + /* 1 */ LOOK_RESET, + /* 2 */ LOOK_PLAYER, + /* 3 */ LOOK_PLAYER_TALK, + /* 4 */ LOOK_ACTOR, + /* 5 */ LOOK_ATTN, + }; + + daNpcF_c() { + FORCE_DONT_INLINE; + initialize(); + } + /* 80152014 */ BOOL execute(); + /* 801522AC */ int draw(BOOL, BOOL, f32, _GXColorS10*, BOOL); + /* 80152614 */ static void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, + dCcD_GObjInf*); + /* 80152654 */ static void* srchAttnActor1(void*, void*); + /* 801526E8 */ static void* srchActor(void*, void*); + + /* 801528C8 */ void initialize(); + /* 80152B2C */ J3DAnmTransformKey* getTrnsfrmKeyAnmP(char*, int); + /* 80152B68 */ J3DAnmTexPattern* getTexPtrnAnmP(char*, int); + /* 80152BA4 */ J3DAnmTextureSRTKey* getTexSRTKeyAnmP(char*, int); + /* 80152BE0 */ J3DAnmTevRegKey* getTevRegKeyAnmP(char*, int); + /* 80152C1C */ BOOL setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf, int i_attr, + int i_start, int i_end); + /* 80152C80 */ BOOL setBckAnm(J3DAnmTransform* i_bck, f32 i_rate, int i_attr, int i_start, + int i_end, bool i_modify); + /* 80152CC4 */ BOOL setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_rate, + int i_attr); + /* 80152D04 */ BOOL setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_rate, + int i_attr); + /* 80152D44 */ BOOL setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 i_rate, + int i_attr); + /* 80152D84 */ void setEnvTevColor(); + /* 80152DE0 */ void setRoomNo(); + /* 80152E24 */ BOOL chkEndAnm(f32); + /* 80152EC4 */ BOOL chkEndAnm(J3DFrameCtrl*, f32); + /* 80152F40 */ BOOL playAllAnm(); + /* 80153150 */ void playExpressionAnm(daNpcF_c::daNpcF_anmPlayData***); + /* 80153264 */ void playMotionAnm(daNpcF_c::daNpcF_anmPlayData***); + /* 8015337C */ void setLookatMtx(int, int*, f32); + /* 80153578 */ BOOL hitChk2(dCcD_Cyl*, BOOL, BOOL); + /* 80153658 */ void setDamage(int, int, int); + /* 80153718 */ int ctrlMsgAnm(int&, int&, fopAc_ac_c*, BOOL); + /* 8015387C */ void orderEvent(int, char*, u16, u16, u8, u16); + /* 80153954 */ void changeEvent(char*, char*, u16, u16); + /* 801539F0 */ BOOL chkActorInSight(fopAc_ac_c*, f32); + /* 80153A78 */ BOOL chkActorInArea(fopAc_ac_c*, cXyz, cXyz, s16); + /* 80153BDC */ BOOL chkActorInAttnArea(fopAc_ac_c*, fopAc_ac_c*, int); + /* 80153D1C */ BOOL initTalk(int, fopAc_ac_c**); + /* 80153D84 */ BOOL talkProc(int*, BOOL, fopAc_ac_c**); + /* 80153EF4 */ BOOL turn(s16, f32, int); + /* 801540A4 */ BOOL step(s16, int, int, int); + /* 80154250 */ void setAngle(s16); + /* 80154278 */ u8 getDistTableIdx(int, int); + /* 801542A0 */ fopAc_ac_c* getEvtAreaTagP(int, int); + /* 8015436C */ fopAc_ac_c* getAttnActorP(BOOL, fpcLyIt_JudgeFunc, f32, f32, f32, f32, s16, + int, BOOL); + /* 80154730 */ BOOL chkActorInSight2(fopAc_ac_c*, f32, s16); + /* 80154834 */ BOOL chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); + /* 801548F4 */ BOOL chkPointInArea(cXyz, cXyz, cXyz, s16); + /* 8015496C */ cXyz getAttentionPos(fopAc_ac_c*); + /* 801549E0 */ BOOL chkFindPlayer2(BOOL, s16); + /* 80154BD8 */ void setHitodamaPrtcl(); + + /* 80155BF4 */ virtual ~daNpcF_c() {} + /* 80155BC8 */ virtual void setParam() {} + /* 80155BC0 */ virtual BOOL main() { return TRUE; } + /* 80155BD8 */ virtual BOOL ctrlBtk() { return FALSE; } + /* 80155BBC */ virtual void adjustShapeAngle() {} + /* 8015276C */ virtual void setMtx(); + /* 801527FC */ virtual void setMtx2(); + /* 80155BB8 */ virtual void setAttnPos() {} + /* 80155BB4 */ virtual void setCollisions() {} + /* 80155BE0 */ virtual bool setExpressionAnm(int i_idx, bool i_modify) { return true; } + /* 80155EC8 */ virtual bool setExpressionBtp(int i_idx) { return true; } + /* 80155BF0 */ virtual void setExpression(int i_expression, f32 i_morf) {} + /* 80155BE8 */ virtual void setMotionAnm(int i_idx, f32 i_morf) {} + /* 80155BEC */ virtual void setMotion(int i_motion, f32 i_morf, int i_restart) {} + /* 80155BD0 */ virtual BOOL drawDbgInfo() { return TRUE; } + /* 80155BCC */ virtual void drawOtherMdls() {} + + BOOL chkActorInSpeakArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { + return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.distances[fopAc_attn_SPEAK_e]); + } + BOOL chkPlayerInSpeakArea(fopAc_ac_c* i_actor) { + return chkActorInSpeakArea(daPy_getPlayerActorClass(), i_actor); + } + BOOL chkActorInTalkArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { + return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.distances[fopAc_attn_TALK_e]); + } + BOOL chkPlayerInTalkArea(fopAc_ac_c* i_actor) { + return chkActorInTalkArea(daPy_getPlayerActorClass(), i_actor); + } + BOOL checkHide() { return mHide || (mTwilight && !dComIfGs_wolfeye_effect_check()); } + void setIntDemander(fopAc_ac_c* i_actor) { field_0x824.entry(i_actor); } + void setIntFlowNodeNo(int i_flowNodeNo) { mFlowNodeNo = i_flowNodeNo; } + void setCutType(int i_cutType) { mCutType = i_cutType; } + void onInterrupt(u8 param_0) { field_0x9ef = param_0; } + void onHide() { mHide = true; } + void offHide() { mHide = false; } + + static dCcD_SrcGObjInf const mCcDObjInfo; + static dCcD_SrcCyl mCcDCyl; + static dCcD_SrcSph mCcDSph; + static fopAc_ac_c* mFindActorPList[100]; + static s32 mFindCount; + static s16 mSrchActorName; + static char mFileNameBuf[0x15]; +}; + +STATIC_ASSERT(sizeof(daNpcF_c) == 0xB48); + +class daNpcF_MatAnm_c : public J3DMaterialAnm { +private: + /* 0x0F4 */ mutable f32 field_0xF4; + /* 0x0F8 */ mutable f32 field_0xF8; + /* 0x0FC */ f32 mNowOffsetX; + /* 0x100 */ f32 mNowOffsetY; + /* 0x104 */ u8 mEyeMoveFlag; + /* 0x105 */ u8 mMorfFrm; + +public: + daNpcF_MatAnm_c() { initialize(); } + /* 80150738 */ void initialize(); + /* 8015075C */ void calc(J3DMaterial*) const; + /* 80155ED0 */ ~daNpcF_MatAnm_c() {} + void setNowOffsetX(float i_nowOffsetX) { mNowOffsetX = i_nowOffsetX; } + void setNowOffsetY(float i_nowOffsetY) { mNowOffsetY = i_nowOffsetY; } + void onEyeMoveFlag() { mEyeMoveFlag = 1; } + void offEyeMoveFlag() { mEyeMoveFlag = 0; } +}; + +class daNpcF_SPCurve_c { +private: + /* 0x00 */ u16 mNurbs; + /* 0x02 */ u16 field_0x02; + /* 0x04 */ u8 mIsReversed; + /* 0x05 */ u8 mIsClosed; + /* 0x08 */ dPnt mPoints[96]; + +public: + /* 80150870 */ void initialize(dPath*, int); + + daNpcF_SPCurve_c() { + initialize(NULL, 0); + } + + virtual ~daNpcF_SPCurve_c() {} +}; // Size: 0x60C + +class daNpcF_Path_c { +protected: + /* 0x00 */ u16 mIdx; + /* 0x02 */ u8 mIsReversed; + /* 0x03 */ u8 mIsClosed; + /* 0x04 */ dPath* mPathInfo; + /* 0x08 */ f32 mRange; + /* 0x0C */ f32 mPosDst; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ cXyz mPosition; + /* 0x20 */ daNpcF_SPCurve_c mSPCurve; + +public: + /* 80150900 */ void initialize(); + /* 8015095C */ int setPathInfo(u8, s8, u8); + /* 80150A24 */ BOOL chkPassed(cXyz); + /* 80150A7C */ BOOL chkPassedDst(cXyz); + /* 80150BBC */ void reverse(); + /* 80150BE0 */ BOOL setNextIdx(); + /* 80150C18 */ int getNextIdx(); + /* 80150C60 */ int getBeforeIdx(); + /* 80150CA8 */ BOOL getBeforePos(cXyz&); + /* 80150D44 */ BOOL getNextPos(cXyz&); + /* 80150DE0 */ BOOL getDstPos(cXyz, cXyz&); + /* 80150EB4 */ void setNextIdxDst(cXyz); + + daNpcF_Path_c() { + initialize(); + } + + virtual ~daNpcF_Path_c() {} + + int getIdx() { return mIdx; }; + void setIdx(int i_idx) { mIdx = i_idx; } + 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; } + void offReverse() { mIsReversed = false; } + dPath* getPathInfo() { return mPathInfo; } + void setRange(f32 i_range) { mRange = i_range; } + int getNumPnts() { return mPathInfo->m_num; } +#if DEBUG + void drawDbgInfoXyz(); +#endif +}; // Size: 0x630 + +class daNpcF_Lookat_c { +private: + /* 0x00 */ cXyz mJointPos[4]; + /* 0x30 */ cXyz* mAttnPos_p; + /* 0x34 */ csXyz mAngularMoveDis[4]; + /* 0x4C */ csXyz mMinAngle[4]; + /* 0x64 */ csXyz mMaxAngle[4]; + /* 0x7C */ csXyz mRotAngle[4]; + /* 0x94 */ bool field_0x94[4]; + /* 0x98 vtable */ + +public: + /* 80151038 */ void initialize(); + /* 801510B8 */ void setParam(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s16, + cXyz*); + /* 80151350 */ void calc(fopAc_ac_c*, Mtx, csXyz**, BOOL, int, BOOL); + /* 801515D4 */ void adjustMoveDisAngle(s16&, s16, s16, s16); + /* 80151648 */ void initCalc(fopAc_ac_c*, Mtx, cXyz*, csXyz*, f32*, cXyz&, BOOL); + /* 80151A54 */ void update(cXyz*, csXyz*, f32*); + /* 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_p; } + void setAttnPos(cXyz* i_attnPos) { mAttnPos_p = i_attnPos; } +}; + +class daNpcF_MoveBgActor_c : public daNpcF_c { +private: +public: + /* 80155B54 */ ~daNpcF_MoveBgActor_c() {} + /* 80155E88 */ virtual bool CreateHeap() { return true; } + /* 80155E90 */ virtual bool Create() { return true; } + /* 80155EA0 */ virtual bool Execute(Mtx**) { return true; } + /* 80155EA8 */ virtual bool Draw() { return true; } + /* 80155E98 */ virtual bool Delete() { return true; } + /* 80155EB0 */ virtual bool IsDelete() { return true; } + /* 80155EB8 */ virtual bool ToFore() { return true; } + /* 80155EC0 */ virtual bool ToBack() { return true; } +}; + +struct daNpcF_HIOParam { + /* 0x00 */ f32 attention_offset; + /* 0x04 */ f32 gravity; + /* 0x08 */ f32 scale; + /* 0x0C */ f32 real_shadow_size; + /* 0x10 */ f32 weight; + /* 0x14 */ f32 height; + /* 0x18 */ f32 knee_length; + /* 0x1C */ f32 width; + /* 0x20 */ f32 body_angleX_max; + /* 0x24 */ f32 body_angleX_min; + /* 0x28 */ f32 body_angleY_max; + /* 0x2C */ f32 body_angleY_min; + /* 0x30 */ f32 head_angleX_max; + /* 0x34 */ f32 head_angleX_min; + /* 0x38 */ f32 head_angleY_max; + /* 0x3C */ f32 head_angleY_min; + /* 0x40 */ f32 neck_rotation_ratio; + /* 0x44 */ f32 morf_frame; + /* 0x48 */ s16 talk_distance; + /* 0x4A */ s16 talk_angle; + /* 0x4C */ s16 attention_distance; + /* 0x4E */ s16 attention_angle; + /* 0x50 */ f32 fov; + /* 0x54 */ f32 search_distance; + /* 0x58 */ f32 search_height; + /* 0x5C */ f32 search_depth; + /* 0x60 */ s16 attention_time; + /* 0x62 */ s16 damage_time; + /* 0x64 */ s16 face_expression; + /* 0x66 */ s16 motion; + /* 0x68 */ s16 look_mode; + /* 0x6A */ u8 debug_mode_ON; + /* 0x6B */ u8 debug_info_ON; +}; + +#endif /* D_A_NPC4 */ diff --git a/include/d/actor/d_a_npc_ash.h b/include/d/actor/d_a_npc_ash.h index d8a892c36a..48313e79bf 100644 --- a/include/d/actor/d_a_npc_ash.h +++ b/include/d/actor/d_a_npc_ash.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_ASH_H #define D_A_NPC_ASH_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpcAsh_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_ashB.h b/include/d/actor/d_a_npc_ashB.h index 490f11a2e2..0b442c0500 100644 --- a/include/d/actor/d_a_npc_ashB.h +++ b/include/d/actor/d_a_npc_ashB.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_ASHB_H #define D_A_NPC_ASHB_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpcAshB_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_blue_ns.h b/include/d/actor/d_a_npc_blue_ns.h index b6735b3fa4..ed2cfb12cc 100644 --- a/include/d/actor/d_a_npc_blue_ns.h +++ b/include/d/actor/d_a_npc_blue_ns.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_BLUE_NS_H #define D_A_NPC_BLUE_NS_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_tag_yami.h" #include "d/actor/d_a_obj_carry.h" diff --git a/include/d/actor/d_a_npc_bouS.h b/include/d/actor/d_a_npc_bouS.h index eba7f50f59..c530c6fac1 100644 --- a/include/d/actor/d_a_npc_bouS.h +++ b/include/d/actor/d_a_npc_bouS.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_BOUS_H #define D_A_NPC_BOUS_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_chat.h b/include/d/actor/d_a_npc_chat.h index 39347c4849..81e8b7b381 100644 --- a/include/d/actor/d_a_npc_chat.h +++ b/include/d/actor/d_a_npc_chat.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_CHAT_H #define D_A_NPC_CHAT_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_chin.h b/include/d/actor/d_a_npc_chin.h index 175ccaddbe..b3679d080b 100644 --- a/include/d/actor/d_a_npc_chin.h +++ b/include/d/actor/d_a_npc_chin.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_CHIN_H #define D_A_NPC_CHIN_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_obj_glowSphere.h" struct daNpcChin_HIOParam { diff --git a/include/d/actor/d_a_npc_doorboy.h b/include/d/actor/d_a_npc_doorboy.h index a7173ea6da..834c521f69 100644 --- a/include/d/actor/d_a_npc_doorboy.h +++ b/include/d/actor/d_a_npc_doorboy.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_DOORBOY_H #define D_A_NPC_DOORBOY_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_msg_object.h" /** diff --git a/include/d/actor/d_a_npc_drainSol.h b/include/d/actor/d_a_npc_drainSol.h index fa7559c664..6aa677f4f4 100644 --- a/include/d/actor/d_a_npc_drainSol.h +++ b/include/d/actor/d_a_npc_drainSol.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_DRAINSOL_H #define D_A_NPC_DRAINSOL_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_gra.h b/include/d/actor/d_a_npc_gra.h index 82c86509d4..a2acb2a692 100644 --- a/include/d/actor/d_a_npc_gra.h +++ b/include/d/actor/d_a_npc_gra.h @@ -1,7 +1,8 @@ #ifndef D_A_NPC_GRA_H #define D_A_NPC_GRA_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" +#include "d/d_particle_copoly.h" class daNpc_grA_HIOParam { diff --git a/include/d/actor/d_a_npc_grc.h b/include/d/actor/d_a_npc_grc.h index c49f8833fd..08ff6fedac 100644 --- a/include/d/actor/d_a_npc_grc.h +++ b/include/d/actor/d_a_npc_grc.h @@ -1,7 +1,8 @@ #ifndef D_A_NPC_GRC_H #define D_A_NPC_GRC_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" +#include "d/d_particle_copoly.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_grd.h b/include/d/actor/d_a_npc_grd.h index bb2c4d131d..055978b267 100644 --- a/include/d/actor/d_a_npc_grd.h +++ b/include/d/actor/d_a_npc_grd.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_GRD_H #define D_A_NPC_GRD_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpc_Grd_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_gro.h b/include/d/actor/d_a_npc_gro.h index 1671e048e4..bf4f21a06d 100644 --- a/include/d/actor/d_a_npc_gro.h +++ b/include/d/actor/d_a_npc_gro.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_GRO_H #define D_A_NPC_GRO_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_grr.h b/include/d/actor/d_a_npc_grr.h index cd2854db1e..211f29a2b6 100644 --- a/include/d/actor/d_a_npc_grr.h +++ b/include/d/actor/d_a_npc_grr.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_GRR_H #define D_A_NPC_GRR_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_grs.h b/include/d/actor/d_a_npc_grs.h index ff5e00a509..d7729b036a 100644 --- a/include/d/actor/d_a_npc_grs.h +++ b/include/d/actor/d_a_npc_grs.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_GRS_H #define D_A_NPC_GRS_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpc_grS_HIOParam { /* 0x000 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_grz.h b/include/d/actor/d_a_npc_grz.h index 4e6df3d782..5b6b0f42d2 100644 --- a/include/d/actor/d_a_npc_grz.h +++ b/include/d/actor/d_a_npc_grz.h @@ -1,7 +1,8 @@ #ifndef D_A_NPC_GRZ_H #define D_A_NPC_GRZ_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" +#include "d/d_particle_copoly.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_gwolf.h b/include/d/actor/d_a_npc_gwolf.h index 7b3aa0a2e2..b140bbe56b 100644 --- a/include/d/actor/d_a_npc_gwolf.h +++ b/include/d/actor/d_a_npc_gwolf.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_GWOLF_H #define D_A_NPC_GWOLF_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_impal.h b/include/d/actor/d_a_npc_impal.h index 9745e2c74d..3b0b640567 100644 --- a/include/d/actor/d_a_npc_impal.h +++ b/include/d/actor/d_a_npc_impal.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_IMPAL_H #define D_A_NPC_IMPAL_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpcImpal_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_ins.h b/include/d/actor/d_a_npc_ins.h index 601488a52b..85d316bfb7 100644 --- a/include/d/actor/d_a_npc_ins.h +++ b/include/d/actor/d_a_npc_ins.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_INS_H #define D_A_NPC_INS_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_kasi_hana.h b/include/d/actor/d_a_npc_kasi_hana.h index b31f1d57bd..64b55ea95a 100644 --- a/include/d/actor/d_a_npc_kasi_hana.h +++ b/include/d/actor/d_a_npc_kasi_hana.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_KASI_HANA_H #define D_A_NPC_KASI_HANA_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_tag_escape.h" /** diff --git a/include/d/actor/d_a_npc_kasi_kyu.h b/include/d/actor/d_a_npc_kasi_kyu.h index 310304fce1..b4ad3f5859 100644 --- a/include/d/actor/d_a_npc_kasi_kyu.h +++ b/include/d/actor/d_a_npc_kasi_kyu.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_KASI_KYU_H #define D_A_NPC_KASI_KYU_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_tag_escape.h" /** diff --git a/include/d/actor/d_a_npc_kasi_mich.h b/include/d/actor/d_a_npc_kasi_mich.h index 4db9aa41cf..00c84422f0 100644 --- a/include/d/actor/d_a_npc_kasi_mich.h +++ b/include/d/actor/d_a_npc_kasi_mich.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_KASI_MICH_H #define D_A_NPC_KASI_MICH_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_tag_escape.h" /** diff --git a/include/d/actor/d_a_npc_moir.h b/include/d/actor/d_a_npc_moir.h index 97fd762500..d3a10e6447 100644 --- a/include/d/actor/d_a_npc_moir.h +++ b/include/d/actor/d_a_npc_moir.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_MOIR_H #define D_A_NPC_MOIR_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_myna2.h b/include/d/actor/d_a_npc_myna2.h index 2c47c65aa6..837689eec1 100644 --- a/include/d/actor/d_a_npc_myna2.h +++ b/include/d/actor/d_a_npc_myna2.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_MYNA2_H #define D_A_NPC_MYNA2_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_prayer.h b/include/d/actor/d_a_npc_prayer.h index d5b145d288..d11c6d2149 100644 --- a/include/d/actor/d_a_npc_prayer.h +++ b/include/d/actor/d_a_npc_prayer.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_PRAYER_H #define D_A_NPC_PRAYER_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_rafrel.h b/include/d/actor/d_a_npc_rafrel.h index 8ca054d23c..4b39fa974d 100644 --- a/include/d/actor/d_a_npc_rafrel.h +++ b/include/d/actor/d_a_npc_rafrel.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_RAFREL_H #define D_A_NPC_RAFREL_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_shad.h b/include/d/actor/d_a_npc_shad.h index 17852f4d62..69678e06a5 100644 --- a/include/d/actor/d_a_npc_shad.h +++ b/include/d/actor/d_a_npc_shad.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_SHAD_H #define D_A_NPC_SHAD_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpcShad_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_shoe.h b/include/d/actor/d_a_npc_shoe.h index 0f5e0f7a0b..d45e81bf13 100644 --- a/include/d/actor/d_a_npc_shoe.h +++ b/include/d/actor/d_a_npc_shoe.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_SHOE_H #define D_A_NPC_SHOE_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpcShoe_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_soldierA.h b/include/d/actor/d_a_npc_soldierA.h index d129fe0000..4245ea6983 100644 --- a/include/d/actor/d_a_npc_soldierA.h +++ b/include/d/actor/d_a_npc_soldierA.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_SOLDIERA_H #define D_A_NPC_SOLDIERA_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_soldierB.h b/include/d/actor/d_a_npc_soldierB.h index ff6c69e252..dd01e6100c 100644 --- a/include/d/actor/d_a_npc_soldierB.h +++ b/include/d/actor/d_a_npc_soldierB.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_SOLDIERB_H #define D_A_NPC_SOLDIERB_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpc_SoldierB_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_the.h b/include/d/actor/d_a_npc_the.h index 56aaf8d515..dbd999922c 100644 --- a/include/d/actor/d_a_npc_the.h +++ b/include/d/actor/d_a_npc_the.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_THE_H #define D_A_NPC_THE_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daNpcThe_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_npc_theB.h b/include/d/actor/d_a_npc_theB.h index 959765ec6c..8611823849 100644 --- a/include/d/actor/d_a_npc_theB.h +++ b/include/d/actor/d_a_npc_theB.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_THEB_H #define D_A_NPC_THEB_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_tk.h b/include/d/actor/d_a_npc_tk.h index de5a8d3708..c3faacb836 100644 --- a/include/d/actor/d_a_npc_tk.h +++ b/include/d/actor/d_a_npc_tk.h @@ -80,11 +80,11 @@ public: /* 80B0BBC8 */ int CreateHeap(); /* 80B0BD24 */ int create(); - void setBump() { mFlags |= 4; } - void setEventWolf() { mFlags |= 0x80; } - void setEvent() { mFlags |= 0x8; } - void setAway() { mFlags |= 2; } - void setAttack() { mFlags |= 1; } + void setBump() { mFlags |= (u16)4; } + void setEventWolf() { mFlags |= (u16)0x80; } + void setEvent() { mFlags |= (u16)0x8; } + void setAway() { mFlags |= (u16)2; } + void setAttack() { mFlags |= (u16)1; } void setHawkPath(u8 i_pathNo) { if (i_pathNo != 0xFF) { @@ -93,13 +93,13 @@ public: } BOOL isAttackLink() { return field_0x71a != 0; } - void setAttackLink() { mFlags |= 0x10; } - void setBackHanjo() { mFlags |= 0x20; } - void setHanjoHand() { mFlags |= 0x40; } - void setQuickHanjoHand() { mFlags |= 0x200; } + void setAttackLink() { mFlags |= (u16)0x10; } + void setBackHanjo() { mFlags |= (u16)0x20; } + void setHanjoHand() { mFlags |= (u16)0x40; } + void setQuickHanjoHand() { mFlags |= (u16)0x200; } BOOL isHanjoHand() { return mIsHanjoHand != 0; } - void setResistanceDemo() { mFlags |= 0x100; } + void setResistanceDemo() { mFlags |= (u16)0x100; } /* 0x568 */ request_of_phase_process_class mPhase; /* 0x570 */ mDoExt_McaMorfSO* mpMorf; diff --git a/include/d/actor/d_a_npc_tkc.h b/include/d/actor/d_a_npc_tkc.h index 1d4d4d79d3..2a5762a950 100644 --- a/include/d/actor/d_a_npc_tkc.h +++ b/include/d/actor/d_a_npc_tkc.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_TKC_H #define D_A_NPC_TKC_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_tks.h b/include/d/actor/d_a_npc_tks.h index 4c99e1b9ee..c7677ed86b 100644 --- a/include/d/actor/d_a_npc_tks.h +++ b/include/d/actor/d_a_npc_tks.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_TKS_H #define D_A_NPC_TKS_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_wrestler.h b/include/d/actor/d_a_npc_wrestler.h index a5e867545c..c8e9d5fb99 100644 --- a/include/d/actor/d_a_npc_wrestler.h +++ b/include/d/actor/d_a_npc_wrestler.h @@ -2,6 +2,7 @@ #define D_A_NPC_WRESTLER_H #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_zra.h b/include/d/actor/d_a_npc_zra.h index d788856671..898754a558 100644 --- a/include/d/actor/d_a_npc_zra.h +++ b/include/d/actor/d_a_npc_zra.h @@ -1,7 +1,8 @@ #ifndef D_A_NPC_ZRA_H #define D_A_NPC_ZRA_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" +#include "d/d_particle_copoly.h" class daNpc_zrA_HIO_c; /** diff --git a/include/d/actor/d_a_npc_zrc.h b/include/d/actor/d_a_npc_zrc.h index a7d8811b28..ae5f6a2c33 100644 --- a/include/d/actor/d_a_npc_zrc.h +++ b/include/d/actor/d_a_npc_zrc.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_ZRC_H #define D_A_NPC_ZRC_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" /** * @ingroup actors-npcs diff --git a/include/d/actor/d_a_npc_zrz.h b/include/d/actor/d_a_npc_zrz.h index 18ffbe28d6..f78c86dbf0 100644 --- a/include/d/actor/d_a_npc_zrz.h +++ b/include/d/actor/d_a_npc_zrz.h @@ -1,7 +1,7 @@ #ifndef D_A_NPC_ZRZ_H #define D_A_NPC_ZRZ_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" class daGraveStone_c; class daObjZraRock_c; diff --git a/include/d/actor/d_a_obj_gra2.h b/include/d/actor/d_a_obj_gra2.h index c437cf198c..57c02149b9 100644 --- a/include/d/actor/d_a_obj_gra2.h +++ b/include/d/actor/d_a_obj_gra2.h @@ -1,7 +1,8 @@ #ifndef D_A_OBJ_GRA2_H #define D_A_OBJ_GRA2_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc2.h" +#include "d/d_particle_copoly.h" #include "f_op/f_op_actor_mng.h" diff --git a/include/d/actor/d_a_obj_tks.h b/include/d/actor/d_a_obj_tks.h index 7d6973c832..b4e6ebfaf4 100644 --- a/include/d/actor/d_a_obj_tks.h +++ b/include/d/actor/d_a_obj_tks.h @@ -2,7 +2,7 @@ #define D_A_OBJ_TKS_H #include "f_op/f_op_actor_mng.h" -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" struct daObjTks_HIOParam { /* 0x00 */ daNpcF_HIOParam common; diff --git a/include/d/actor/d_a_obj_zraMark.h b/include/d/actor/d_a_obj_zraMark.h index a23117ea3b..23262b0949 100644 --- a/include/d/actor/d_a_obj_zraMark.h +++ b/include/d/actor/d_a_obj_zraMark.h @@ -3,6 +3,7 @@ #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" diff --git a/include/d/actor/d_a_startAndGoal.h b/include/d/actor/d_a_startAndGoal.h index f4984dae11..8c0b895acb 100644 --- a/include/d/actor/d_a_startAndGoal.h +++ b/include/d/actor/d_a_startAndGoal.h @@ -1,7 +1,7 @@ #ifndef D_A_STARTANDGOAL_H #define D_A_STARTANDGOAL_H -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" class daStartAndGoal_Path_c : public daNpcF_Path_c { public: diff --git a/include/d/d_bg_s.h b/include/d/d_bg_s.h index a925ee2720..f8cb52660d 100644 --- a/include/d/d_bg_s.h +++ b/include/d/d_bg_s.h @@ -118,7 +118,7 @@ public: s32 GetRoomPathPntNo(cBgS_PolyInfo const&); int GetGrpSoundId(cBgS_PolyInfo const&); u32 ChkGrpInf(cBgS_PolyInfo const&, u32); - s32 GetRoomId(cBgS_PolyInfo const&); + int GetRoomId(cBgS_PolyInfo const&); bool GetPolyAttackThrough(cBgS_PolyInfo const&); u32 ChkPolyHSStick(cBgS_PolyInfo const&); void WallCorrect(dBgS_Acch*); diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index 9d13c848b0..590f299728 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -241,7 +241,7 @@ public: void ClrTg() { mTg = 0; } void SetAtApid(fpc_ProcID id) { mAtApid = id; } void SetTgApid(fpc_ProcID id) { mTgApid = id; } - u8 GetRoomId() { return mRoomId; } + int GetRoomId() { return mRoomId; } void SetRoomId(int id) { mRoomId = id; } fpc_ProcID GetAtOldApid() { return mAtOldApid; } fpc_ProcID GetTgOldApid() { return mTgOldApid; } diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index a75897c346..bc3aa12e7c 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -169,8 +169,7 @@ public: J3DAnmTransform* getBckAnm() { return mAnm; } void removeJoint(J3DModelData* i_modelData, u16 i_idx) { - J3DJoint* mpJnt = i_modelData->getJointNodePointer(i_idx); - mpJnt->setMtxCalc(0); + i_modelData->getJointNodePointer(i_idx)->setMtxCalc(0); } private: diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index a2229295a6..d6b2fef63e 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -40,7 +40,7 @@ inline void mDoMtx_multVec(CMtxP m, const Vec* src, Vec* dst) { PSMTXMultVec(m, src, dst); } -inline void mDoMtx_multVecArray(Mtx m, const Vec* src, Vec* dst, u32 count) { +inline void mDoMtx_multVecArray(const Mtx m, const Vec* src, Vec* dst, u32 count) { MTXMultVecArray(m, src, dst, count); } @@ -96,7 +96,7 @@ inline void cMtx_copy(const Mtx src, Mtx dst) { mDoMtx_copy(src, dst); } -inline void cMtx_multVecArray(Mtx mtx, const Vec* src, Vec* dst, u32 count) { +inline void cMtx_multVecArray(const Mtx mtx, const Vec* src, Vec* dst, u32 count) { mDoMtx_multVecArray(mtx, src, dst, count); } diff --git a/src/d/actor/d_a_L7op_demo_dr.cpp b/src/d/actor/d_a_L7op_demo_dr.cpp index 1d546695be..7c0380f45b 100644 --- a/src/d/actor/d_a_L7op_demo_dr.cpp +++ b/src/d/actor/d_a_L7op_demo_dr.cpp @@ -9,7 +9,7 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "f_op/f_op_camera_mng.h" #include "f_op/f_op_msg_mng.h" diff --git a/src/d/actor/d_a_b_dr.cpp b/src/d/actor/d_a_b_dr.cpp index 0a3bc78266..904e156527 100644 --- a/src/d/actor/d_a_b_dr.cpp +++ b/src/d/actor/d_a_b_dr.cpp @@ -11,7 +11,7 @@ #include "d/d_menu_window.h" #include "d/d_s_play.h" #include "d/d_debug_viewer.h" -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_camera.h" #include "c/c_damagereaction.h" #include "f_op/f_op_camera_mng.h" diff --git a/src/d/actor/d_a_kytag04.cpp b/src/d/actor/d_a_kytag04.cpp index d813d7fd7e..6e17668fa9 100644 --- a/src/d/actor/d_a_kytag04.cpp +++ b/src/d/actor/d_a_kytag04.cpp @@ -6,7 +6,8 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_kytag04.h" -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" +#include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" /* 8046CB58-8046CFE8 000078 0490+00 1/0 0/0 0/0 .text daKytag04_Draw__FP13kytag04_class diff --git a/src/d/actor/d_a_npc.cpp b/src/d/actor/d_a_npc.cpp index 7c698c4451..1536034daf 100644 --- a/src/d/actor/d_a_npc.cpp +++ b/src/d/actor/d_a_npc.cpp @@ -1,8 +1,10 @@ #include "d/dolzel.h" // IWYU pragma: keep #include "d/actor/d_a_npc.h" + #include "d/actor/d_a_npc_tk.h" #include "d/actor/d_a_tag_evtarea.h" +#include "d/d_debug_viewer.h" #include "d/d_k_wmark.h" #include "d/d_msg_object.h" #include "SSystem/SComponent/c_math.h" @@ -136,6 +138,149 @@ void daNpcT_cmnListenPropertyEvent(char* param_0, int* param_1, daNpcT_HIOParam* sprintf(¶m_0[*param_1], "%.3ff,\t// 箱オフセット\n", param_2->box_offset); *param_1 = strlen(param_0); } + +void daNpcT_cmnGenMessage(JORMContext* ctx, daNpcT_HIOParam* i_hioParam) { + ctx->genSlider("注目オフセット ", &i_hioParam->attention_offset, + 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("重力 ", &i_hioParam->gravity, + -100.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("スケ−ル ", &i_hioParam->scale, + 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("リアル影サイズ ", &i_hioParam->real_shadow_size, + 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("体重 ", &i_hioParam->weight, + 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("高さ ", &i_hioParam->height, + 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("ひざ丈 ", &i_hioParam->knee_length, + 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("幅 ", &i_hioParam->width, + 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("腰のX角上限 ", &i_hioParam->body_angleX_max, -90.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("腰のX角下限 ", &i_hioParam->body_angleX_min, -90.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("腰のY角上限 ", &i_hioParam->body_angleY_max, -180.0f, 179.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("腰のY角下限 ", &i_hioParam->body_angleY_min, -180.0f, 179.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("頭のX角上限 ", &i_hioParam->head_angleX_max, -90.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("頭のX角下限 ", &i_hioParam->head_angleX_min, -90.0f, 90.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("頭のY角上限 ", &i_hioParam->head_angleY_max, -180.0f, 179.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("頭のY角下限 ", &i_hioParam->head_angleY_min, -180.0f, 179.0f, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("首の移動割合 ", &i_hioParam->neck_rotation_ratio, + 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("補間フレ-ム ", &i_hioParam->morf_frame, + 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->startComboBox("会話距離 ", &i_hioParam->talk_distance, + 0, NULL, 0xffff, 0xffff, 0x100, 26); + ctx->genComboBoxItem(" 50", 0); + ctx->genComboBoxItem(" 100", 1); + ctx->genComboBoxItem(" 150", 2); + ctx->genComboBoxItem(" 200", 3); + ctx->genComboBoxItem(" 250", 4); + ctx->genComboBoxItem(" 300", 5); + ctx->genComboBoxItem(" 350", 6); + ctx->genComboBoxItem(" 400", 7); + ctx->genComboBoxItem(" 450", 8); + ctx->genComboBoxItem(" 500", 9); + ctx->genComboBoxItem(" 550", 10); + ctx->genComboBoxItem(" 600", 11); + ctx->genComboBoxItem(" 650", 12); + ctx->genComboBoxItem(" 700", 13); + ctx->genComboBoxItem(" 750", 14); + ctx->genComboBoxItem(" 800", 15); + ctx->genComboBoxItem(" 850", 16); + ctx->genComboBoxItem(" 900", 17); + ctx->genComboBoxItem(" 950", 18); + ctx->genComboBoxItem("1000", 19); + ctx->endComboBox(); + ctx->startComboBox("会話角度 ", &i_hioParam->talk_angle, + 0, NULL, 0xffff, 0xffff, 0x100, 26); + ctx->genComboBoxItem(" 30", 0); + ctx->genComboBoxItem(" 45", 1); + ctx->genComboBoxItem(" 60", 2); + ctx->genComboBoxItem(" 90", 3); + ctx->genComboBoxItem(" 110", 4); + ctx->genComboBoxItem(" 135", 5); + ctx->genComboBoxItem(" 180", 6); + ctx->endComboBox(); + ctx->startComboBox("注目距離 ", &i_hioParam->attention_distance, + 0, NULL, 0xffff, 0xffff, 0x100, 26); + ctx->genComboBoxItem(" 50", 0); + ctx->genComboBoxItem(" 100", 1); + ctx->genComboBoxItem(" 150", 2); + ctx->genComboBoxItem(" 200", 3); + ctx->genComboBoxItem(" 250", 4); + ctx->genComboBoxItem(" 300", 5); + ctx->genComboBoxItem(" 350", 6); + ctx->genComboBoxItem(" 400", 7); + ctx->genComboBoxItem(" 450", 8); + ctx->genComboBoxItem(" 500", 9); + ctx->genComboBoxItem(" 550", 10); + ctx->genComboBoxItem(" 600", 11); + ctx->genComboBoxItem(" 650", 12); + ctx->genComboBoxItem(" 700", 13); + ctx->genComboBoxItem(" 750", 14); + ctx->genComboBoxItem(" 800", 15); + ctx->genComboBoxItem(" 850", 16); + ctx->genComboBoxItem(" 900", 17); + ctx->genComboBoxItem(" 950", 18); + ctx->genComboBoxItem("1000", 19); + ctx->endComboBox(); + ctx->startComboBox("注目角度 ", &i_hioParam->attention_angle, + 0, NULL, 0xffff, 0xffff, 0x100, 26); + ctx->genComboBoxItem(" 30", 0); + ctx->genComboBoxItem(" 45", 1); + ctx->genComboBoxItem(" 60", 2); + ctx->genComboBoxItem(" 90", 3); + ctx->genComboBoxItem(" 110", 4); + ctx->genComboBoxItem(" 135", 5); + ctx->genComboBoxItem(" 180", 6); + ctx->endComboBox(); + ctx->genSlider("視界 ", &i_hioParam->fov, + 0.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("サ-チ距離 ", &i_hioParam->search_distance, + 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("サ-チ高さ ", &i_hioParam->search_height, + -10000.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("サ-チ低さ ", &i_hioParam->search_depth, + -10000.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("? ", &i_hioParam->attention_time, + 0, 10000, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("? ", &i_hioParam->damage_time, + 0, 10000, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("表情 ", &i_hioParam->face_expression, + 0, 0xff, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("動作 ", &i_hioParam->motion, + 0, 0xff, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("注視モ-ド ", &i_hioParam->look_mode, + 0, 0xff, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genCheckBox("デバグモ-ドON", &i_hioParam->debug_mode_ON, 1, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genCheckBox("デバグ情報ON ", &i_hioParam->debug_info_ON, 1, 0, NULL, + 0xffff, 0xffff, 512, 24); + ctx->genSlider("表情補間フレ-ム", &i_hioParam->expression_morf_frame, + 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("箱最小x ", &i_hioParam->box_min_x, + -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("箱最小y ", &i_hioParam->box_min_y, + -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("箱最小z ", &i_hioParam->box_min_z, + -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("箱最大x ", &i_hioParam->box_max_x, + -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("箱最大y ", &i_hioParam->box_max_y, + -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("箱最大z ", &i_hioParam->box_max_z, + -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + ctx->genSlider("箱オフセット ", &i_hioParam->box_offset, + -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); +} #endif /* 801456D4-801456E0 140014 000C+00 1/1 0/0 159/159 .text initialize__18daNpcT_ActorMngr_cFv */ @@ -159,7 +304,8 @@ void daNpcT_ActorMngr_c::remove() { fopAc_ac_c* daNpcT_ActorMngr_c::getActorP() { fopAc_ac_c* actor = NULL; - if (fopAcM_SearchByID(mActorID, &actor) == 1 && actor != NULL && fopAcM_IsActor(actor)) { + s32 actor2 = fopAcM_SearchByID(mActorID, &actor); + if (actor2 == 1 && actor != NULL && fopAcM_IsActor(actor)) { return actor; } @@ -183,25 +329,25 @@ void daNpcT_MatAnm_c::calc(J3DMaterial* i_material) const { for (u32 i = 0; i < 8; i++) { if (getTexMtxAnm(i).getAnmFlag()) { - J3DTexMtxInfo* curr_mtx_info = - &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo(); + J3DTextureSRTInfo* curr_mtx_info = + &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo().mSRT; if (mEyeMoveFlg != 0) { - curr_mtx_info->mSRT.mTranslationX = mNowOffsetX; - curr_mtx_info->mSRT.mTranslationY = mNowOffsetY; + curr_mtx_info->mTranslationX = mNowOffsetX; + curr_mtx_info->mTranslationY = mNowOffsetY; } if (mMorfFrm != 0) { f32 tmp8 = 1.0f / (mMorfFrm + 1); - curr_mtx_info->mSRT.mTranslationX = - field_0xF4 * (1.0f - tmp8) + curr_mtx_info->mSRT.mTranslationX * tmp8; - curr_mtx_info->mSRT.mTranslationY = - field_0xF8 * (1.0f - tmp8) + curr_mtx_info->mSRT.mTranslationY * tmp8; + curr_mtx_info->mTranslationX = + field_0xF4 * (1.0f - tmp8) + curr_mtx_info->mTranslationX * tmp8; + curr_mtx_info->mTranslationY = + field_0xF8 * (1.0f - tmp8) + curr_mtx_info->mTranslationY * tmp8; } - field_0xF4 = curr_mtx_info->mSRT.mTranslationX; - field_0xF8 = curr_mtx_info->mSRT.mTranslationY; + field_0xF4 = curr_mtx_info->mTranslationX; + field_0xF8 = curr_mtx_info->mTranslationY; } } } @@ -256,7 +402,7 @@ int daNpcT_MotionSeqMngr_c::play(u16 i_loopNo, int* o_motionNo_p, f32* o_morfFrm /* 80145A24-80145A38 140364 0014+00 0/0 0/0 43/43 .text * checkEndSequence__22daNpcT_MotionSeqMngr_cFv */ s32 daNpcT_MotionSeqMngr_c::checkEndSequence() { - return mEndSequence == true; + return (u8)mEndSequence == true; } /* 80145A38-80145A78 140378 0040+00 2/2 0/0 0/0 .text daNpcT_addIdx__FiiRUsi */ @@ -299,14 +445,24 @@ static BOOL daNpcT_subIdx(int i_step, int i_num, u16& i_idx, BOOL i_closed) { /* 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, 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); + int result = 0; + if (i_direction) { + result = daNpcT_subIdx(1, i_num, i_idx, i_closed); + } else { + result = daNpcT_addIdx(1, i_num, i_idx, i_closed); + } + return result; } /* 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, 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); + int result = 0; + if (i_direction) { + result = daNpcT_addIdx(1, i_num, i_idx, i_closed); + } else { + result = daNpcT_subIdx(1, i_num, i_idx, i_closed); + } + return result; } /* 80145B7C-80145C40 1404BC 00C4+00 1/1 0/0 0/0 .text @@ -350,8 +506,7 @@ int daNpcT_Path_c::setPathInfo(u8 i_pathIdx, s8 i_roomNo, u8 i_direction) { } mIsClosed = dPath_ChkClose(mPathInfo); - u16 idx; - mPosition = getPntPos(idx = getIdx()); + mPosition = getPntPos(getIdx()); } return 1; @@ -362,9 +517,8 @@ int daNpcT_Path_c::setNextPathInfo(s8 i_roomNo, u8 i_direction) { mIdx = 0; mDirection = i_direction; - u16 next_id = mPathInfo->m_nextID; - if (next_id != 0xFFFF) { - mPathInfo = dPath_GetRoomPath(next_id, i_roomNo); + if (mPathInfo->m_nextID != 0xFFFF) { + mPathInfo = dPath_GetRoomPath(mPathInfo->m_nextID, i_roomNo); if (mPathInfo == NULL) { return 0; } @@ -377,7 +531,7 @@ int daNpcT_Path_c::setNextPathInfo(s8 i_roomNo, u8 i_direction) { /* 80145DA0-80145DD0 1406E0 0030+00 0/0 0/0 1/1 .text reverse__13daNpcT_Path_cFv */ void daNpcT_Path_c::reverse() { - if (mDirection == 1) { + if (chkReverse()) { offReverse(); } else { onReverse(); @@ -397,13 +551,16 @@ int daNpcT_Path_c::setNextIdx(int i_idx) { /* 80145E38-80145FB4 140778 017C+00 0/0 0/0 1/1 .text getDstPos__13daNpcT_Path_cF4cXyzP4cXyzi */ int daNpcT_Path_c::getDstPos(cXyz i_pnt, cXyz* o_pos_p, int i_idx) { + int passed1; + if (i_idx == mIdx) { *o_pos_p = getPntPos(getIdx() - 1); return 1; } while (true) { - if (!chkPassed1(i_pnt, i_idx)) { + passed1 = chkPassed1(i_pnt, i_idx); + if (!passed1) { break; } @@ -416,8 +573,7 @@ int daNpcT_Path_c::getDstPos(cXyz i_pnt, cXyz* o_pos_p, int i_idx) { } } - int i_idx2; - *o_pos_p = getPntPos(i_idx2 = getIdx()); + *o_pos_p = getPntPos(getIdx()); return 0; } @@ -425,13 +581,16 @@ int daNpcT_Path_c::getDstPos(cXyz i_pnt, cXyz* o_pos_p, int i_idx) { /* 80145FB4-80146188 1408F4 01D4+00 0/0 0/0 10/10 .text getDstPosH__13daNpcT_Path_cF4cXyzP4cXyzii */ int daNpcT_Path_c::getDstPosH(cXyz i_pnt, cXyz* o_pos_p, int i_idx, int param_3) { + int passed1; + if (i_idx == mIdx) { *o_pos_p = getPntPos(getIdx() - 1); return 1; } while (true) { - if (!chkPassed1(i_pnt, i_idx)) { + passed1 = chkPassed1(i_pnt, i_idx); + if (!passed1) { break; } @@ -451,8 +610,7 @@ int daNpcT_Path_c::getDstPosH(cXyz i_pnt, cXyz* o_pos_p, int i_idx, int param_3) continue; } } else { - int i_idx2; - *o_pos_p = getPntPos(i_idx2 = getIdx()); + *o_pos_p = getPntPos(getIdx()); } return 0; @@ -617,12 +775,13 @@ int daNpcT_Path_c::chkPassed2(cXyz i_pnt, cXyz* param_2, int i_num, int param_4) f32 proj_pnt_z; f32 proj_cur_z; f32 auStack_13c; + s16 var_r28; 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 var_r28 = cM_atan2s(cur_pos.x - prev_pos.x, cur_pos.z - prev_pos.z); + 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) { @@ -633,10 +792,38 @@ int daNpcT_Path_c::chkPassed2(cXyz i_pnt, cXyz* param_2, int i_num, int param_4) return 0; } +#if DEBUG +int daNpcT_Path_c::drawDbgInfo(f32 param_0, int param_1) { + GXColor green = {0x80, 0xff, 0x80, 0xff}; + GXColor blue = {0x80, 0x80, 0xff, 0xff}; + GXColor red = {0xff, 0x80, 0x80, 0xff}; + GXColor yellow = {0xff, 0xff, 0x80, 0xff}; + + cXyz unkXyz1; + cXyz unkXyz2; + + for (int i = 0; i <= getNumPnts(); i++) { + if (i < getNumPnts()) { + unkXyz1.set(getPntPos(i).x, param_0, getPntPos(i).z); + if (i != 0) { + unkXyz2.set(getPntPos(i - 1).x, param_0, getPntPos(i - 1).z); + dDbVw_drawLineOpa(unkXyz1, unkXyz2, red, 1, 12); + } + dDbVw_drawSphereOpa(unkXyz1, 9.0f, green, 1); + } else if (mIsClosed) { + unkXyz1.set(getPntPos(i - 1).x, param_0, getPntPos(i - 1).z); + unkXyz2.set(getPntPos(0).x, param_0, getPntPos(0).z); + dDbVw_drawLineOpa(unkXyz1, unkXyz2, red, 1, 12); + } + } +} +#endif + /* 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, BOOL i_closed, int param_5, cXyz* o_proj, int* o_prevIdx, int* o_nextIdx) { + u16 idx = i_idx; u16 prev_idx = i_idx; u16 next_idx = i_idx; daNpcT_incIdx(i_num, next_idx, i_closed, 0); @@ -646,17 +833,17 @@ static BOOL daNpcT_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, B i_points[prev_idx].m_position.z); cXyz next_pnt(i_points[next_idx].m_position.x, i_points[next_idx].m_position.y, i_points[next_idx].m_position.z); - cXyz cur_pnt(i_points[i_idx].m_position.x, i_points[i_idx].m_position.y, - i_points[i_idx].m_position.z); + cXyz cur_pnt(i_points[idx].m_position.x, i_points[idx].m_position.y, + i_points[idx].m_position.z); cXyz vec(0.0f, 0.0f, 2.0f); s16 angle; - if (prev_idx < i_idx && i_idx < next_idx) { + if (prev_idx < idx && idx < next_idx) { angle = cM_atan2s(next_pnt.x - prev_pnt.x, next_pnt.z - prev_pnt.z); - } else if (prev_idx < i_idx) { + } else if (prev_idx < idx) { angle = cM_atan2s(cur_pnt.x - prev_pnt.x, cur_pnt.z - prev_pnt.z); - } else if (i_idx < next_idx) { + } else if (idx < next_idx) { angle = cM_atan2s(next_pnt.x - cur_pnt.x, next_pnt.z - cur_pnt.z); } else { JUT_ASSERT(1470, FALSE); @@ -679,14 +866,12 @@ static BOOL daNpcT_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, B cM3d_Len2dSqPntAndSegLine(cur_pnt.x, cur_pnt.z, prev_pnt.x, prev_pnt.z, next_pnt.x, next_pnt.z, &proj2_x, &proj2_z, &len); - s16 angle1; if (param_5) { - angle1 = cM_atan2s(prev_pnt.x - next_pnt.x, prev_pnt.z - next_pnt.z); + angle = cM_atan2s(prev_pnt.x - next_pnt.x, prev_pnt.z - next_pnt.z); } else { - angle1 = cM_atan2s(next_pnt.x - prev_pnt.x, next_pnt.z - prev_pnt.z); + angle = cM_atan2s(next_pnt.x - prev_pnt.x, next_pnt.z - prev_pnt.z); } - s16 angle2 = cM_atan2s(proj2_x - proj1_x, proj2_z - proj1_z); - s16 angle_diff = angle1 - angle2; + angle = angle - cM_atan2s(proj2_x - proj1_x, proj2_z - proj1_z); if (o_proj != NULL) { o_proj->set(proj1_x, 0.0f, proj1_z); @@ -698,15 +883,9 @@ static BOOL daNpcT_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, B *o_nextIdx = next_idx; } - return (u16)abs(angle_diff) > 0x4000; + return (u16)abs(angle) > 0x4000; } -#if DEBUG -int daNpcT_Path_c::drawDbgInfo(f32 param_0, int param_1) { - return 0; -} -#endif - static f32 dummy_literal() { cXyz vec; return vec.abs(); @@ -727,6 +906,8 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e f32 i_bodyRightAngle, f32 i_headUpAngle, f32 i_headDownAngle, f32 i_headLeftAngle, f32 i_headRightAngle, f32 param_14, f32 param_15, cXyz* param_16) { + fopAc_ac_c* actor = NULL; + camera_class* camera = NULL; cXyz vec1, vec2, vec3; csXyz angle; mPos = i_actor->current.pos; @@ -778,7 +959,7 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e mAttnPos = *mAttnPosP; break; case LOOK_ACTOR: { - fopAc_ac_c* actor = mActrMngr.getActorP(); + actor = mActrMngr.getActorP(); if (actor != NULL) { mAttnPosP = &actor->attention_info.position; mAttnPos = *mAttnPosP; @@ -794,7 +975,8 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e } break; case LOOK_CAMERA: { - camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + int cameraId = dComIfGp_getPlayerCameraID(0); + camera = dComIfGp_getCamera(cameraId); if (camera != NULL) { mAttnPosP = fopCamM_GetEye_p(camera); mAttnPos = *mAttnPosP; @@ -826,14 +1008,14 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e mTimer = getTime(); } - int angle_y_offset; + s16 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 = (int)angle_y_offset; angle.y += static_cast(i_actor)->mCurAngle.y; vec3.set(0.0f, mJntPos[0].y, 1000.0f); if (mMode == 8) { @@ -854,7 +1036,7 @@ void daNpcT_JntAnm_c::setParam(fopAc_ac_c* i_actor, J3DModel* i_model, cXyz* i_e field_0x120 = mAttnPos; Mtx mtx; - MTXCopy(i_model->getBaseTRMtx(), mtx); + cMtx_copy(i_model->getBaseTRMtx(), mtx); mtx[0][3] = 0.0f; mtx[1][3] = 0.0f; mtx[2][3] = 0.0f; @@ -929,10 +1111,10 @@ void daNpcT_JntAnm_c::calc(f32 param_0) { for (int i = 0; i < 3; i++) { if (i != 1) { - s16 var_r27 = cLib_targetAngleY(&mJntPos[i], &vec1); - var_r27 = var_r27 - cLib_targetAngleY(&mJntPos[i], &vec3); + angle = cLib_targetAngleY(&mJntPos[i], &vec1); + angle = angle - cLib_targetAngleY(&mJntPos[i], &vec3); - mRad[i].y = cM_s2rad(var_r27); + mRad[i].y = cM_s2rad(angle); if (mMaxRad[i].y < mRad[i].y) { mRad[i].y = mMaxRad[i].y; } @@ -965,6 +1147,7 @@ void daNpcT_JntAnm_c::calc(f32 param_0) { for (int i = 0; i < 3; i++) { if (i != 1) { + (void)mJntPos[i]; s16 var_r26 = -cLib_targetAngleX(&mJntPos[i], &field_0x120); var_r26 = var_r26 - (s16)-cLib_targetAngleX(&mJntPos[i], &field_0x24); @@ -1025,12 +1208,36 @@ void daNpcT_JntAnm_c::calcJntRad(f32 param_0, f32 param_1, f32 param_2) { } } +#if DEBUG +void daNpcT_JntAnm_c::drawDbgInfo() { + GXColor green = {0x80, 0xff, 0x80, 0xff}; + GXColor blue = {0x80, 0x80, 0xff, 0xff}; + GXColor red = {0xff, 0x80, 0x80, 0xff}; + GXColor yellow = {0xff, 0xff, 0x80, 0xff}; + + cXyz unusedXyz1; + cXyz unusedXyz2; + + for (int i = 2; i >= 0; i--) { + if (i != 2) { + dDbVw_drawLineOpa(mJntPos[i + 1], mJntPos[i], red, 1, 12); + } + + dDbVw_drawSphereOpa(mJntPos[i], 4.5f, green, 1); + } + + dDbVw_drawLineOpa(mJntPos[0], field_0x24, red, 1, 12); + dDbVw_drawSphereOpa(field_0x24, 9.0f, green, 1); + dDbVw_drawSphereOpa(mAttnPos, 18.0f, green, 1); +} +#endif + /* 80147DCC-80147E3C 14270C 0070+00 0/0 0/0 28/28 .text * setParam__19daNpcT_DmgStagger_cFP10fopAc_ac_cP10fopAc_ac_cs */ void daNpcT_DmgStagger_c::setParam(fopAc_ac_c* i_actor1, fopAc_ac_c* i_actor2, s16 i_angle) { if (i_actor2 && i_actor1) { - mPower[0] = 10922.0f; - mPower[1] = 7281.0f; + mPower[0] = cM_deg2s(60.0f); + mPower[1] = cM_deg2s(40.0f); field_0x16 = fopAcM_searchActorAngleY(i_actor1, i_actor2) - i_angle; mStagger = 0x4000; } @@ -1082,46 +1289,11 @@ dCcD_SrcSph daNpcT_c::mCcDSph = { } // mSphAttr }; -/* 803B375C-803B37A0 01087C 0044+00 0/0 0/0 1/1 .data mCcDCyl__11daBaseNpc_c */ -dCcD_SrcCyl daBaseNpc_c::mCcDCyl = { - daBaseNpc_c::mCcDObj, - { - {0.0f, 0.0f, 0.0f}, // mCenter - 0.0f, // mRadius - 0.0f // mHeight - } // mCyl -}; - -/* 803B37A0-803B37E0 0108C0 0040+00 0/0 0/0 1/1 .data mCcDSph__11daBaseNpc_c */ -dCcD_SrcSph daBaseNpc_c::mCcDSph = { - daBaseNpc_c::mCcDObj, - { - {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph - } // mSphAttr -}; - -/* 803B37E0-803B3824 010900 0044+00 0/0 0/0 36/36 .data mCcDCyl__8daNpcF_c */ -dCcD_SrcCyl daNpcF_c::mCcDCyl = { - daNpcF_c::mCcDObjInfo, - { - {0.0f, 0.0f, 0.0f}, // mCenter - 0.0f, // mRadius - 0.0f // mHeight - } // mCyl -}; - -/* 803B3824-803B3864 010944 0040+00 0/0 0/0 2/2 .data mCcDSph__8daNpcF_c */ -dCcD_SrcSph daNpcF_c::mCcDSph = { - daNpcF_c::mCcDObjInfo, - { - {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph - } // mSphAttr -}; - /* 80147FA4-80147FD4 1428E4 0030+00 0/0 0/0 53/53 .text * tgHitCallBack__8daNpcT_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ void daNpcT_c::tgHitCallBack(fopAc_ac_c* i_actor1, dCcD_GObjInf* i_obj1, fopAc_ac_c* i_actor2, dCcD_GObjInf* i_obj2) { + fopAc_ac_c* actor1 = i_actor1; u8 cut_type = 0; if (i_actor2 != NULL) { if (fopAcM_GetProfName(i_actor2) == PROC_ALINK) { @@ -1131,12 +1303,14 @@ void daNpcT_c::tgHitCallBack(fopAc_ac_c* i_actor1, dCcD_GObjInf* i_obj1, fopAc_a } } - static_cast(i_actor1)->setCutType(cut_type); + static_cast(actor1)->setCutType(cut_type); } /* 80425708-804257D0 052428 00C8+00 4/4 0/0 40/40 .bss mFindActorPtrs__8daNpcT_c */ fopAc_ac_c* daNpcT_c::mFindActorPtrs[50]; +char l_fileNameBuf[0x15]; + /* 80450FD8-80450FDC 0004D8 0002+02 4/4 0/0 2/2 .sbss mSrchName__8daNpcT_c */ s16 daNpcT_c::mSrchName; @@ -1144,10 +1318,13 @@ s16 daNpcT_c::mSrchName; int daNpcT_c::mFindCount; /* 80147FD4-80148058 142914 0084+00 3/3 0/0 2/2 .text srchActor__8daNpcT_cFPvPv */ -void* daNpcT_c::srchActor(void* actor, void* param_1) { - if (mFindCount < 50 && fopAcM_IsActor(actor) && actor != param_1) { - if (mSrchName == fopAcM_GetName((fopAc_ac_c*)actor)) { - mFindActorPtrs[mFindCount] = (fopAc_ac_c*)actor; +void* daNpcT_c::srchActor(void* i_actor1, void* i_actor2) { + fopAc_ac_c* actor2 = (fopAc_ac_c*)i_actor2; + void* foundActor = NULL; + if (mFindCount < 50 && fopAcM_IsActor(i_actor1) && i_actor1 != i_actor2) { + if (mSrchName == fopAcM_GetName((fopAc_ac_c*)i_actor1)) { + foundActor = (fopAc_ac_c*)i_actor1; + mFindActorPtrs[mFindCount] = (fopAc_ac_c*)foundActor; mFindCount++; } } @@ -1190,7 +1367,9 @@ J3DAnmColor* daNpcT_c::getColorAnmP(char const* i_arcName, int i_resIdx) { */ 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); + s16 start = i_start; + s16 end = i_end; + return mBckAnm.init(i_bck, TRUE, i_mode, i_speed, start, end, i_modify); } /* 80148204-801482F8 142B44 00F4+00 1/1 0/0 1/1 .text @@ -1235,7 +1414,9 @@ int daNpcT_c::setBpkAnm(J3DAnmColor* i_bpk, J3DModelData* i_modelData, f32 i_spe /* 801483F8-801484AC 142D38 00B4+00 0/0 0/0 58/58 .text loadRes__8daNpcT_cFPCScPPCc */ int daNpcT_c::loadRes(s8 const* i_resNoList, char const** i_resNameList) { - for (int resLoad_cnt = 0, i = 0; i < 10; i++) { + int phase_state; + int resLoad_cnt = 0; + for (int i = 0; i < 10; i++) { if (i_resNoList[i] == -1) { if (i != resLoad_cnt) { break; @@ -1243,7 +1424,7 @@ int daNpcT_c::loadRes(s8 const* i_resNoList, char const** i_resNameList) { return cPhs_COMPLEATE_e; } - int phase_state = dComIfG_resLoad(&mPhase[i], i_resNameList[i_resNoList[i]]); + phase_state = dComIfG_resLoad(&mPhase[i], i_resNameList[i_resNoList[i]]); if (phase_state == cPhs_COMPLEATE_e) { resLoad_cnt++; } @@ -1265,9 +1446,12 @@ void daNpcT_c::deleteRes(s8 const* i_resNoList, char const** i_resNameList) { /* 8014852C-8014886C 142E6C 0340+00 0/0 0/0 59/59 .text execute__8daNpcT_cFv */ int daNpcT_c::execute() { + BOOL procResult = FALSE; + setParam(); - if (!evtProc()) { + procResult = evtProc(); + if (!procResult) { action(); } @@ -1431,7 +1615,7 @@ void daNpcT_c::setEnvTevColor() { /* 80148CCC-80148D10 14360C 0044+00 1/1 0/0 58/58 .text setRoomNo__8daNpcT_cFv */ void daNpcT_c::setRoomNo() { - int roomId = dComIfG_Bgsp().GetRoomId(mGndChk); + s8 roomId = (s8)dComIfG_Bgsp().GetRoomId(mGndChk); fopAcM_SetRoomNo(this, roomId); mCcStts.SetRoomId(roomId); @@ -1462,6 +1646,7 @@ int daNpcT_c::checkEndAnm(J3DFrameCtrl* i_anm, f32 i_speed) { case J3DFrameCtrl::EMode_RESET: return (i_anm->checkState(1) && i_anm->getRate() == 0.0f) && i_speed != 0.0f; case J3DFrameCtrl::EMode_REVERSE: + case J3DFrameCtrl::EMode_LOOP_REVERSE: break; } @@ -1470,24 +1655,25 @@ int daNpcT_c::checkEndAnm(J3DFrameCtrl* i_anm, f32 i_speed) { /* 80148E4C-801490D4 14378C 0288+00 1/1 0/0 0/0 .text playAllAnm__8daNpcT_cFv */ void daNpcT_c::playAllAnm() { + f32 speed; if (!(mAnmFlags & ANM_FLAG_4000)) { if (mAnmFlags & ANM_PLAY_BCK) { - f32 bck_speed = mBckAnm.getPlaySpeed(); + speed = mBckAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BCK) { mBckAnm.setPlaySpeed(0.0f); } mBckAnm.play(); - if (checkEndAnm(mBckAnm.getFrameCtrl(), bck_speed)) { + if (checkEndAnm(mBckAnm.getFrameCtrl(), speed)) { mBckLoops++; } - mBckAnm.setPlaySpeed(bck_speed); + mBckAnm.setPlaySpeed(speed); } if (mAnmFlags & ANM_PLAY_BTP) { - f32 btp_speed = mBtpAnm.getPlaySpeed(); + speed = mBtpAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BTP) { mBtpAnm.setPlaySpeed(0.0f); @@ -1510,21 +1696,21 @@ void daNpcT_c::playAllAnm() { mBtpPauseTimer = 0; } - mBtpAnm.setPlaySpeed(btp_speed); + mBtpAnm.setPlaySpeed(speed); } } if (mAnmFlags & ANM_PLAY_MORF) { - f32 morf_speed = mpMorf[0]->getPlaySpeed(); + speed = mpMorf[0]->getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_MORF) { mpMorf[0]->setPlaySpeed(0.0f); mpMorf[0]->play(mPolSound, mReverb); - mpMorf[0]->setPlaySpeed(morf_speed); + mpMorf[0]->setPlaySpeed(speed); if (mpMorf[1] != NULL) { mpMorf[1]->setPlaySpeed(0.0f); mpMorf[1]->play(0, 0); - mpMorf[1]->setPlaySpeed(morf_speed); + mpMorf[1]->setPlaySpeed(speed); } } else { mpMorf[0]->play(mPolSound, mReverb); @@ -1533,41 +1719,41 @@ void daNpcT_c::playAllAnm() { mpMorf[1]->play(0, 0); } - if (checkEndAnm(morf_speed)) { + if (checkEndAnm(speed)) { mMorfLoops++; } } } if (mAnmFlags & ANM_PLAY_BTK) { - f32 btk_speed = mBtkAnm.getPlaySpeed(); + speed = mBtkAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BTK) { mBtkAnm.setPlaySpeed(0.0f); } ctrlBtk(); mBtkAnm.play(); - mBtkAnm.setPlaySpeed(btk_speed); + mBtkAnm.setPlaySpeed(speed); } if (mAnmFlags & ANM_PLAY_BRK) { - f32 brk_speed = mBrkAnm.getPlaySpeed(); + speed = mBrkAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BRK) { mBrkAnm.setPlaySpeed(0.0f); } mBrkAnm.play(); - mBrkAnm.setPlaySpeed(brk_speed); + mBrkAnm.setPlaySpeed(speed); } if (mAnmFlags & ANM_PLAY_BPK) { - f32 bpk_speed = mBpkAnm.getPlaySpeed(); + speed = mBpkAnm.getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_BPK) { mBpkAnm.setPlaySpeed(0.0f); } mBpkAnm.play(); - mBpkAnm.setPlaySpeed(bpk_speed); + mBpkAnm.setPlaySpeed(speed); } mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK | ANM_PAUSE_BCK @@ -1577,17 +1763,20 @@ void daNpcT_c::playAllAnm() { /* 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_0xe29 != 0) { + J3DAnmTextureSRTKey* btkAnm = mBtkAnm.getBtkAnm(); + if (btkAnm != 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; + if (field_0xe2a != 0) { + mpMatAnm[0]->setMorfFrm(field_0xe2a); + field_0xe2a = 0; + } + + mpMatAnm[0]->onEyeMoveFlag(); + return TRUE; } - - mpMatAnm[0]->onEyeMoveFlag(); - return TRUE; } if (field_0xe2a != 0) { @@ -1654,11 +1843,10 @@ void daNpcT_c::ctrlFaceMotion() { /* 80149300-801493B8 143C40 00B8+00 1/1 0/0 0/0 .text ctrlMotion__8daNpcT_cFv */ void daNpcT_c::ctrlMotion() { int motionNo; - BOOL restart; f32 morfFrm; if (mMotionSeqMngr.play(mMorfLoops, &motionNo, &morfFrm)) { - restart = FALSE; + BOOL restart = FALSE; if (morfFrm < -1.0f) { restart = TRUE; @@ -1699,7 +1887,7 @@ int daNpcT_c::ctrlMsgAnm(int* o_faceAnmAttr_p, int* o_anmAttr_p, fopAc_ac_c* i_t mMsgId = msg_p->msg_idx; } - if (dMsgObject_c::isMouthCheck()) { + if (dMsgObject_isMouthCheck()) { mAnmFlags &= ~ANM_FLAG_4000; } else { mAnmFlags |= ANM_FLAG_4000; @@ -1730,14 +1918,15 @@ int daNpcT_c::ctrlMsgAnm(int* o_faceAnmAttr_p, int* o_anmAttr_p, fopAc_ac_c* i_t /* 8014951C-8014997C 143E5C 0460+00 1/0 1/0 59/0 .text ctrlJoint__8daNpcT_cFP8J3DJointP8J3DModel */ int daNpcT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { - int joint_no = i_joint->getJntNo(); + J3DJoint* joint = i_joint; + int joint_no = joint->getJntNo(); cXyz pos; csXyz angle; mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no)); if (joint_no == getBackboneJointNo() || joint_no == getNeckJointNo() || joint_no == getHeadJointNo()) { Mtx joint_mtx; - MTXCopy(mDoMtx_stack_c::get(), joint_mtx); + cMtx_copy(mDoMtx_stack_c::get(), joint_mtx); pos.set(joint_mtx[0][3], joint_mtx[1][3], joint_mtx[2][3]); joint_mtx[0][3] = joint_mtx[1][3] = joint_mtx[2][3] = 0.0f; @@ -1753,7 +1942,7 @@ int daNpcT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { mDoMtx_stack_c::inverse(); Mtx inverse_mtx; - MTXCopy(mDoMtx_stack_c::get(), inverse_mtx); + cMtx_copy(mDoMtx_stack_c::get(), inverse_mtx); mDoMtx_stack_c::transS(pos); mDoMtx_stack_c::ZXYrotM(mCurAngle.x, mCurAngle.y + field_0xd8a.y, mCurAngle.z); @@ -1775,7 +1964,7 @@ int daNpcT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { afterJntAnm(joint_no); i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get()); - MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); if ((mAnmFlags & ANM_PLAY_BCK) && (checkChangeJoint(joint_no) || checkRemoveJoint(joint_no))) { J3DAnmTransform* bck = mBckAnm.getBckAnm(); @@ -1883,9 +2072,9 @@ void daNpcT_c::setFootPrtcl(cXyz* param_0, f32 param_1, f32 param_2) { cXyz foot_l_pos = mFootLPos; cXyz foot_r_pos = mFootRPos; cXyz start, end; - u32 cross1; + u8 cross1; u8 foot_l_att; - u32 cross2; + u8 cross2; u8 foot_r_att; start = mFootLPos; @@ -1945,7 +2134,8 @@ void daNpcT_c::setFootPrtcl(cXyz* param_0, f32 param_1, f32 param_2) { /* 8014A05C-8014A064 14499C 0008+00 1/0 1/0 60/0 .text checkCullDraw__8daNpcT_cFv */ bool daNpcT_c::checkCullDraw() { - return false; + bool result = false; + return result; } /* 8014A064-8014A0B0 1449A4 004C+00 1/0 1/0 60/0 .text twilight__8daNpcT_cFv */ @@ -1968,7 +2158,11 @@ void daNpcT_c::evtOrder() { 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 & fopAc_AttnFlag_SPEAK_e) || (attention_info.flags & fopAc_AttnFlag_TALK_e))) { + } else if ( +#if !PLATFORM_SHIELD + (!mTwilight || daPy_py_c::checkNowWolfEyeUp()) && +#endif + ((attention_info.flags & fopAc_AttnFlag_SPEAK_e) || (attention_info.flags & fopAc_AttnFlag_TALK_e))) { eventInfo.onCondition(dEvtCnd_CANTALK_e); if (chkXYItems()) { eventInfo.onCondition(dEvtCnd_CANTALKITEM_e); @@ -2154,10 +2348,12 @@ 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) { + fopAc_ac_c* hit_actor_p = NULL; + ((dCcD_Stts*)i_objInf->GetStts())->Move(); if (mDamageTimer == 0) { - fopAc_ac_c* hit_actor_p = i_objInf->GetTgHitAc(); + 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(); @@ -2211,7 +2407,7 @@ BOOL daNpcT_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_fovY, s16 i_angleY) { if (angle_diff_s < 0) { angle_diff_s = -angle_diff_s; } - return angle_diff_s <= fov_s; + return (angle_diff_s > fov_s) == false; } return TRUE; @@ -2222,15 +2418,14 @@ BOOL daNpcT_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_fovY, s16 i_angleY) { BOOL daNpcT_c::chkPointInArea(cXyz i_pos, cXyz i_center, f32 i_boundXZ, f32 i_boundY1, f32 i_boundY2, s16 i_angle) { cXyz bounds, center; - f32 min_y = i_boundY2; f32 max_y = i_boundY1; - if (i_boundY1 < i_boundY2) { + f32 min_y = i_boundY2; + if (max_y < min_y) { min_y = i_boundY1; max_y = i_boundY2; } - f32 range_y = fabsf(max_y - min_y); - bounds.set(i_boundXZ, range_y, i_boundXZ); + bounds.set(i_boundXZ, fabsf(max_y - min_y), i_boundXZ); center = i_center; center.y += min_y; return chkPointInArea(i_pos, center, bounds, i_angle); @@ -2270,13 +2465,13 @@ BOOL daNpcT_c::chkFindActor(fopAc_ac_c* i_actor, BOOL i_release, s16 i_angleY) { fov = 135.0f; } - if (chkPointInArea(attn_pos, attention_info.position, dist_max, lower_y, upper_y, 0) - && chkActorInSight(i_actor, fov, i_angleY)) - { - return TRUE; - } else { - return FALSE; + if (chkPointInArea(attn_pos, attention_info.position, dist_max, lower_y, upper_y, 0)) { + if (chkActorInSight(i_actor, fov, i_angleY)) { + return TRUE; + } } + + return FALSE; } /* 8014B024-8014B0C8 145964 00A4+00 1/1 0/0 0/0 .text chkWolfAction__8daNpcT_cFv */ @@ -2295,10 +2490,10 @@ BOOL daNpcT_c::chkFindWolf(s16 i_angleY, int i_distIndex, int param_2, f32 i_bou cXyz attn_pos = getAttnPos(daPy_getPlayerActorClass()); if (daPy_py_c::checkNowWolf()) { - if (chkPointInArea(attn_pos, attention_info.position, i_boundXZ, i_boundY1, i_boundY2, 0) - && chkActorInSight(daPy_getPlayerActorClass(), i_fovY, i_angleY)) - { - return TRUE; + if (chkPointInArea(attn_pos, attention_info.position, i_boundXZ, i_boundY1, i_boundY2, 0)) { + if (chkActorInSight(daPy_getPlayerActorClass(), i_fovY, i_angleY)) { + return TRUE; + } } f32 dist_max = dComIfGp_getAttention()->getDistTable(i_distIndex).mDistMax; @@ -2312,10 +2507,10 @@ BOOL daNpcT_c::chkFindWolf(s16 i_angleY, int i_distIndex, int param_2, f32 i_bou dist_max = dComIfGp_getAttention()->getDistTable(dist_index).mDistMax; upper_y = dComIfGp_getAttention()->getDistTable(dist_index).mUpperY; lower_y = dComIfGp_getAttention()->getDistTable(dist_index).mLowerY; - if (chkPointInArea(attn_pos, attention_info.position, dist_max, upper_y, lower_y, 0) - && param_2 < 2 && param_7 && chkWolfAction()) - { - return TRUE; + if (chkPointInArea(attn_pos, attention_info.position, dist_max, upper_y, lower_y, 0)) { + if (param_2 < 2 && param_7 && chkWolfAction()) { + return TRUE; + } } } @@ -2325,16 +2520,16 @@ BOOL daNpcT_c::chkFindWolf(s16 i_angleY, int i_distIndex, int param_2, f32 i_bou /* 8014B338-8014B3EC 145C78 00B4+00 0/0 0/0 75/75 .text srchPlayerActor__8daNpcT_cFv */ BOOL daNpcT_c::srchPlayerActor() { if (mPlayerActorMngr.getActorP() != NULL) { - if (!chkFindActor(daPy_getPlayerActorClass(), TRUE, mCurAngle.y)) { + if (!chkFindPlayer(TRUE, mCurAngle.y)) { mPlayerActorMngr.remove(); } } else { - if (chkFindActor(daPy_getPlayerActorClass(), FALSE, mCurAngle.y)) { + if (chkFindPlayer(FALSE, mCurAngle.y)) { mPlayerActorMngr.entry(daPy_getPlayerActorClass()); } } - return mPlayerActorMngr.getActorP() != NULL; + return NULL != mPlayerActorMngr.getActorP(); } /* 8014B3EC-8014B4A4 145D2C 00B8+00 3/3 0/0 5/5 .text getAttnPos__8daNpcT_cFP10fopAc_ac_c @@ -2366,15 +2561,15 @@ BOOL daNpcT_c::turn(s16 i_angle, int i_count, int i_direction) { int tmp1 = mStartAngle; int tmp2 = i_angle; if (i_direction == 0) { - i_direction = (s16)(tmp2 - tmp1) >= 0 ? 1 : -1; + i_direction = (s16)(i_angle - mStartAngle) >= 0 ? 1 : -1; } - int angle_diff = (u16)(i_angle - mStartAngle); + int angle_diff = (u16)(tmp2 - tmp1); if (i_direction == -1) { angle_diff = -(u16)(0xffff - angle_diff); } - s16 turn = angle_diff * cM_ssin(mTurnAmount); + s16 turn = angle_diff * cM_ssin((s16)mTurnAmount); mTurnAmount += (s16)(0x4000 / mTurnCount); if ((u16)mTurnAmount < 0x4000) { @@ -2457,14 +2652,14 @@ int daNpcT_c::getActorDistance(fopAc_ac_c* i_actor, int i_distIndex1, int i_dist f32 actor_dist = fopAcM_searchActorDistanceXZ(this, i_actor); if (actor_dist < dist1) { - return 0; + return ret; } - f32 diff = actor_dist - dist1; + actor_dist -= dist1; dist2 -= dist1; dist2 /= 6.0f; for (int i = 0; i < 5; i++, ret++) { - if (diff < dist2 * (i + 1)) { + if (actor_dist < dist2 * (i + 1)) { return ret; } } @@ -2482,7 +2677,7 @@ BOOL daNpcT_c::initTalk(int i_flowID, fopAc_ac_c** i_partnerList_p) { } speedF = 0.0f; - speed.set(0.0f, 0.0f, 0.0f); + speed.setall(0.0f); return TRUE; } @@ -2543,8 +2738,7 @@ fopAc_ac_c* daNpcT_c::getNearestActorP(s16 i_srchActorName) { fpcM_Search(srchActor, this); for (s32 i = 0; i < mFindCount; i++) { - f32 dist = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); - if (dist < minDistance) { + if (fopAcM_searchActorDistance(this, mFindActorPtrs[i]) < minDistance) { minDistance = fopAcM_searchActorDistance(this, mFindActorPtrs[i]); actor = mFindActorPtrs[i]; } @@ -2573,12 +2767,14 @@ fopAc_ac_c* daNpcT_c::getEvtAreaTagP(int i_type, int i_no) { /* 8014BFB0-8014C030 1468F0 0080+00 0/0 0/0 5/5 .text getShopItemTagP__8daNpcT_cFv */ fopAc_ac_c* daNpcT_c::getShopItemTagP() { + int unusedInt1 = 0; mFindCount = 0; mSrchName = PROC_TAG_SHOPITM; fpcM_Search(srchActor, this); for (s32 i = 0; i < mFindCount; i++) { - if ((fopAcM_GetParam(mFindActorPtrs[i]) & 0xF0000000) == 0xF0000000) { + u32 param = fopAcM_GetParam(mFindActorPtrs[i]) & 0xF0000000; + if (0xF0000000 == param) { return mFindActorPtrs[i]; } } @@ -2588,13 +2784,14 @@ 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() { + JPABaseEmitter* emitter = NULL; cXyz pos; field_0xe18 = (u16)(field_0xe1a * 2); field_0xe00.x = cM_ssin(field_0xe1a) * 8.0f; field_0xe00.y = cM_ssin(field_0xe18) * 4.0f; field_0xe00.z = field_0xe00.x * -cM_ssin(shape_angle.y); field_0xe00.x = field_0xe00.x * cM_scos(shape_angle.y); - field_0xe1a += 0x400; + field_0xe1a += (s16)0x400; pos.x = eyePos.x + field_0xe00.x + field_0xe0c.x; pos.y = eyePos.y + field_0xe00.y + field_0xe0c.y; @@ -2605,7 +2802,7 @@ void daNpcT_c::setHitodamaPrtcl() { mHitodamaPrtclKey[i] = dComIfGp_particle_set(mHitodamaPrtclKey[i], id[i], &pos, &mCurAngle, NULL); - JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHitodamaPrtclKey[i]); + emitter = dComIfGp_particle_getEmitter(mHitodamaPrtclKey[i]); if (emitter != NULL) { u8 alpha = dComIfGs_wolfeye_effect_check() == FALSE ? 0xFF : 0; emitter->setGlobalTranslation(pos.x, pos.y, pos.z); @@ -2618,10 +2815,10 @@ void daNpcT_c::setHitodamaPrtcl() { * daNpcT_chkActorInScreen__FP10fopAc_ac_cfffffffi */ BOOL daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, f32 param_6, f32 param_7, int param_8) { - cXyz proj; - cXyz pos_array[8]; - if (fopAcM_GetMtx(i_ActorP)) { + cXyz pos_array[8]; + cXyz proj; + pos_array[0].set(param_1, param_5, param_3); pos_array[1].set(param_4, param_5, param_3); pos_array[2].set(param_1, param_5, param_6); @@ -2636,6 +2833,10 @@ BOOL daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32 cMtx_multVecArray(mDoMtx_stack_c::get(), pos_array, pos_array, 8); if (param_8) { +#if DEBUG + dDbVw_drawCube8pOpa(pos_array, (GXColor){0x0, 0xc0, 0x0, 0xff}); +#endif + return false; } @@ -2649,7 +2850,6 @@ BOOL daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32 return true; } - return false; } @@ -2657,7 +2857,6 @@ BOOL daNpcT_chkActorInScreen(fopAc_ac_c* i_ActorP, f32 param_1, f32 param_2, f32 BOOL daNpcT_chkPointInArea(cXyz i_pos, cXyz i_center, cXyz i_bounds, s16 i_angle, BOOL i_checkHeight) { cXyz l_pos; - cXyz diff; mDoMtx_stack_c::YrotS(-i_angle); mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z); @@ -2669,15 +2868,13 @@ BOOL daNpcT_chkPointInArea(cXyz i_pos, cXyz i_center, cXyz i_bounds, s16 i_angle f32 pos_z = fabsf(l_pos.z); if (i_checkHeight) { - diff = i_pos - i_center; + cXyz diff = i_pos - i_center; if (!(0.0f <= diff.y && diff.y < i_bounds.y)) { return FALSE; } } - f32 tmp1 = (pos_x * pos_x) / (axis_x * axis_x); - f32 tmp2 = (pos_z * pos_z) / (axis_z * axis_z); - if (tmp1 + tmp2 <= 1.0f) { + if ((pos_x * pos_x) / (axis_x * axis_x) + (pos_z * pos_z) / (axis_z * axis_z) <= 1.0f) { return TRUE; } else { return FALSE; @@ -2692,13 +2889,15 @@ BOOL daNpcT_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz* o_spawn 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++) { + for (int i = 0; i < room_dt->getPlayerNum();) { if (param_0 == (entry->base.angle.z & 0xFF)) { *o_spawnPos = entry->base.position; *o_angle = entry->base.angle; ret = TRUE; break; } + entry++; + i++; } return ret; @@ -2740,10 +2939,14 @@ BOOL daNpcT_chkDoBtnIsSpeak(fopAc_ac_c* i_actor_p) { int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pntData, int param_3, int* param_4) { cXyz proj; + int prev_idx; + int next_idx; + f32 proj1_x, proj2_x, proj1_z, proj2_z, tmp; for (int i = 0; i < param_3; i++) { + proj.setall(0.0f); - int prev_idx = 0; - int next_idx = 0; + prev_idx = 0; + next_idx = 0; u16 idx = i_pntData[i].field_0x0; if (i_pntData[i].field_0x0 < 0) { @@ -2751,9 +2954,10 @@ int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pn } while (idx < i_path->m_num) { - 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)) { + BOOL passed = + 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); + if (!passed) { break; } @@ -2783,7 +2987,6 @@ int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pn if (i_pntData[j].field_0x0 < 0) { count++; } else if (i_pntData[i].field_0x0 == i_pntData[j].field_0x0) { - f32 proj1_x, proj2_x, proj1_z, proj2_z, tmp; if (cM3d_Len2dSqPntAndSegLine(param_1[i]->current.pos.x, param_1[i]->current.pos.z, i_path->m_points[i_pntData[i].field_0x4].m_position.x, @@ -2798,15 +3001,17 @@ int daNpcT_judgeRace(dPath* i_path, fopAc_ac_c** param_1, daNpcT_pntData_c* i_pn i_path->m_points[i_pntData[i].field_0x0].m_position.x, i_path->m_points[i_pntData[i].field_0x0].m_position.z, &proj2_x, &proj2_z, &tmp)) { - s16 angle1 = cM_atan2s( + s16 angle = cM_atan2s( i_path->m_points[i_pntData[i].field_0x0].m_position.x - i_path->m_points[i_pntData[i].field_0x4].m_position.x, i_path->m_points[i_pntData[i].field_0x0].m_position.z - i_path->m_points[i_pntData[i].field_0x4].m_position.z); - s16 angle2 = cM_atan2s(proj2_x - proj1_x, proj2_z - proj1_z); - if ((u16)abs((s16)(angle1 - angle2)) < 0x4000) { - count++; + angle -= (int)cM_atan2s(proj2_x - proj1_x, proj2_z - proj1_z); + if ((u16)abs(angle) >= 0x4000) { + continue; } + + count++; } } else if (i_pntData[i].field_0x0 < i_pntData[j].field_0x0) { count++; @@ -2828,175 +3033,32 @@ 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_no) { - dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[i_no]); + dComIfGs_onEventBit((u16)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_no) { - dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[i_no]); + dComIfGs_offEventBit((u16)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_no) { - return dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[i_no]); + return dComIfGs_isEventBit((u16)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_no) { - dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]); + dComIfGs_onTmpBit((u16)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_no) { - dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]); + dComIfGs_offTmpBit((u16)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_no) { - return dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[i_no]); -} - -void daNpcT_cmnGenMessage(JORMContext* ctx, daNpcT_HIOParam* i_hioParam) { - ctx->genSlider("注目オフセット ", &i_hioParam->attention_offset, - 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("重力 ", &i_hioParam->gravity, - -100.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("スケ−ル ", &i_hioParam->scale, - 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("リアル影サイズ ", &i_hioParam->real_shadow_size, - 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("体重 ", &i_hioParam->weight, - 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("高さ ", &i_hioParam->height, - 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("ひざ丈 ", &i_hioParam->knee_length, - 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("幅 ", &i_hioParam->width, - 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("腰のX角上限 ", &i_hioParam->body_angleX_max, -90.0f, 90.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("腰のX角下限 ", &i_hioParam->body_angleX_min, -90.0f, 90.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("腰のY角上限 ", &i_hioParam->body_angleY_max, -180.0f, 179.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("腰のY角下限 ", &i_hioParam->body_angleY_min, -180.0f, 179.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("頭のX角上限 ", &i_hioParam->head_angleX_max, -90.0f, 90.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("頭のX角下限 ", &i_hioParam->head_angleX_min, -90.0f, 90.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("頭のY角上限 ", &i_hioParam->head_angleY_max, -180.0f, 179.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("頭のY角下限 ", &i_hioParam->head_angleY_min, -180.0f, 179.0f, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("首の移動割合 ", &i_hioParam->neck_rotation_ratio, - 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("補間フレ-ム ", &i_hioParam->morf_frame, - 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->startComboBox("会話距離 ", &i_hioParam->talk_distance, - 0, NULL, 0xffff, 0xffff, 0x100, 26); - ctx->genComboBoxItem(" 50", 0); - ctx->genComboBoxItem(" 100", 1); - ctx->genComboBoxItem(" 150", 2); - ctx->genComboBoxItem(" 200", 3); - ctx->genComboBoxItem(" 250", 4); - ctx->genComboBoxItem(" 300", 5); - ctx->genComboBoxItem(" 350", 6); - ctx->genComboBoxItem(" 400", 7); - ctx->genComboBoxItem(" 450", 8); - ctx->genComboBoxItem(" 500", 9); - ctx->genComboBoxItem(" 550", 10); - ctx->genComboBoxItem(" 600", 11); - ctx->genComboBoxItem(" 650", 12); - ctx->genComboBoxItem(" 700", 13); - ctx->genComboBoxItem(" 750", 14); - ctx->genComboBoxItem(" 800", 15); - ctx->genComboBoxItem(" 850", 16); - ctx->genComboBoxItem(" 900", 17); - ctx->genComboBoxItem(" 950", 18); - ctx->genComboBoxItem("1000", 19); - ctx->endComboBox(); - ctx->startComboBox("会話角度 ", &i_hioParam->talk_angle, - 0, NULL, 0xffff, 0xffff, 0x100, 26); - ctx->genComboBoxItem(" 30", 0); - ctx->genComboBoxItem(" 45", 1); - ctx->genComboBoxItem(" 60", 2); - ctx->genComboBoxItem(" 90", 3); - ctx->genComboBoxItem(" 110", 4); - ctx->genComboBoxItem(" 135", 5); - ctx->genComboBoxItem(" 180", 6); - ctx->endComboBox(); - ctx->startComboBox("注目距離 ", &i_hioParam->attention_distance, - 0, NULL, 0xffff, 0xffff, 0x100, 26); - ctx->genComboBoxItem(" 50", 0); - ctx->genComboBoxItem(" 100", 1); - ctx->genComboBoxItem(" 150", 2); - ctx->genComboBoxItem(" 200", 3); - ctx->genComboBoxItem(" 250", 4); - ctx->genComboBoxItem(" 300", 5); - ctx->genComboBoxItem(" 350", 6); - ctx->genComboBoxItem(" 400", 7); - ctx->genComboBoxItem(" 450", 8); - ctx->genComboBoxItem(" 500", 9); - ctx->genComboBoxItem(" 550", 10); - ctx->genComboBoxItem(" 600", 11); - ctx->genComboBoxItem(" 650", 12); - ctx->genComboBoxItem(" 700", 13); - ctx->genComboBoxItem(" 750", 14); - ctx->genComboBoxItem(" 800", 15); - ctx->genComboBoxItem(" 850", 16); - ctx->genComboBoxItem(" 900", 17); - ctx->genComboBoxItem(" 950", 18); - ctx->genComboBoxItem("1000", 19); - ctx->endComboBox(); - ctx->startComboBox("注目角度 ", &i_hioParam->attention_angle, - 0, NULL, 0xffff, 0xffff, 0x100, 26); - ctx->genComboBoxItem(" 30", 0); - ctx->genComboBoxItem(" 45", 1); - ctx->genComboBoxItem(" 60", 2); - ctx->genComboBoxItem(" 90", 3); - ctx->genComboBoxItem(" 110", 4); - ctx->genComboBoxItem(" 135", 5); - ctx->genComboBoxItem(" 180", 6); - ctx->endComboBox(); - ctx->genSlider("視界 ", &i_hioParam->fov, - 0.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("サ-チ距離 ", &i_hioParam->search_distance, - 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("サ-チ高さ ", &i_hioParam->search_height, - -10000.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("サ-チ低さ ", &i_hioParam->search_depth, - -10000.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("? ", &i_hioParam->attention_time, - 0, 10000, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("? ", &i_hioParam->damage_time, - 0, 10000, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("表情 ", &i_hioParam->face_expression, - 0, 0xff, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("動作 ", &i_hioParam->motion, - 0, 0xff, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("注視モ-ド ", &i_hioParam->look_mode, - 0, 0xff, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genCheckBox("デバグモ-ドON", &i_hioParam->debug_mode_ON, 1, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genCheckBox("デバグ情報ON ", &i_hioParam->debug_info_ON, 1, 0, NULL, - 0xffff, 0xffff, 512, 24); - ctx->genSlider("表情補間フレ-ム", &i_hioParam->expression_morf_frame, - 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("箱最小x ", &i_hioParam->box_min_x, - -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("箱最小y ", &i_hioParam->box_min_y, - -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("箱最小z ", &i_hioParam->box_min_z, - -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("箱最大x ", &i_hioParam->box_max_x, - -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("箱最大y ", &i_hioParam->box_max_y, - -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("箱最大z ", &i_hioParam->box_max_z, - -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); - ctx->genSlider("箱オフセット ", &i_hioParam->box_offset, - -1000.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 512, 24); + return dComIfGs_isTmpBit((u16)dSv_event_tmp_flag_c::tempBitLabels[i_no]); } /* 80392680-803926B0 01ECE0 0030+00 1/1 0/0 4/4 .rodata mCcDObjData__8daNpcT_c */ @@ -3009,6 +3071,4 @@ const dCcD_SrcGObjInf daNpcT_c::mCcDObjData = { #include "d/actor/d_a_npc2.cpp" -#include "d/actor/d_a_npc3.cpp" - #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 index da210f9892..0f783b52df 100644 --- a/src/d/actor/d_a_npc2.cpp +++ b/src/d/actor/d_a_npc2.cpp @@ -1,9 +1,28 @@ #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc2.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); +/* 803B375C-803B37A0 01087C 0044+00 0/0 0/0 1/1 .data mCcDCyl__11daBaseNpc_c */ +dCcD_SrcCyl daBaseNpc_c::mCcDCyl = { + daBaseNpc_c::mCcDObj, + { + {0.0f, 0.0f, 0.0f}, // mCenter + 0.0f, // mRadius + 0.0f // mHeight + } // mCyl +}; + +/* 803B37A0-803B37E0 0108C0 0040+00 0/0 0/0 1/1 .data mCcDSph__11daBaseNpc_c */ +dCcD_SrcSph daBaseNpc_c::mCcDSph = { + daBaseNpc_c::mCcDObj, + { + {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph + } // mSphAttr +}; + /* 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; @@ -16,7 +35,11 @@ static int daBaseNpc_addIdx(int i_step, int i_num, u16* i_idx, BOOL i_closed) { if (i_closed) { new_idx -= i_num * (new_idx / i_num); } else { - new_idx = i_num != 0 ? i_num - 1 : 0; + if (i_num != 0) { + new_idx = i_num - 1; + } else { + new_idx = 0; + } ret = TRUE; } } @@ -48,33 +71,39 @@ static BOOL daBaseNpc_subIdx(int i_step, int i_num, u16* i_idx, BOOL i_closed) { /* 8014D5C4-8014D620 147F04 005C+00 2/2 0/0 0/0 .text daBaseNpc_incIdx__FiPUsii */ static BOOL daBaseNpc_incIdx(int i_pathNo, u16* i_pathIdx, BOOL i_pathClosed, int i_pathDirection) { + BOOL result = FALSE; if (i_pathDirection < 0) { - return daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed); + result = daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed); } else { - return daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed); + result = daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed); } + return result; } /* 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) { +static BOOL daBaseNpc_decIdx(int i_pathNo, u16* i_pathIdx, BOOL i_pathClosed, int i_pathDirection) { + BOOL result = FALSE; if (i_pathDirection < 0) { - daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed); + result = daBaseNpc_addIdx(1, i_pathNo, i_pathIdx, i_pathClosed); } else { - daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed); + result = daBaseNpc_subIdx(1, i_pathNo, i_pathIdx, i_pathClosed); } + return result; } /* 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; + f32 var_f31; + f32 var_f30; if (i_deg != 0) { - f32 var_f31 = (f32)(i_knotVector_p[i_pntNo + i_deg + 1] - i_knotVector_p[i_pntNo + 1]); + 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]); + 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); } @@ -102,7 +131,8 @@ void daBaseNpc_acMngr_c::entry(fopAc_ac_c* 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) { + BOOL foundActor = fopAcM_SearchByID(mActorId, &ret); + if (foundActor && ret != NULL) { return ret; } @@ -116,20 +146,20 @@ void daBaseNpc_matAnm_c::calc(J3DMaterial* i_material) const { for (u32 i = 0; i < 8; i++) { if (getTexMtxAnm(i).getAnmFlag()) { - J3DTexMtxInfo* curr_mtx_info = - &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo(); + J3DTextureSRTInfo* curr_mtx_info = + &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo().mSRT; 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; + curr_mtx_info->mTranslationX = field_0xF4 * (1.0f - var_f31) + curr_mtx_info->mTranslationX * var_f31; + curr_mtx_info->mTranslationY = field_0xF8 * (1.0f - var_f31) + curr_mtx_info->mTranslationY * var_f31; } else if (mEyeMoveFlg != 0) { - curr_mtx_info->mSRT.mTranslationX = mNowOffsetX; - curr_mtx_info->mSRT.mTranslationY = mNowOffsetY; + curr_mtx_info->mTranslationX = mNowOffsetX; + curr_mtx_info->mTranslationY = mNowOffsetY; } - field_0xF4 = curr_mtx_info->mSRT.mTranslationX; - field_0xF8 = curr_mtx_info->mSRT.mTranslationY; + field_0xF4 = curr_mtx_info->mTranslationX; + field_0xF8 = curr_mtx_info->mTranslationY; } } } @@ -139,7 +169,7 @@ 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; + return NULL != mPathInfo; } /* 8014D9BC-8014DA48 1482FC 008C+00 0/0 0/0 1/1 .text setPathInfo__16daBaseNpc_path_cFUcScSc */ @@ -170,7 +200,7 @@ void daBaseNpc_path_c::reverseDir() { direction = 1; } - mDirection = direction; + mDirection = (int)direction; } /* 8014DA64-8014DAC4 1483A4 0060+00 0/0 0/0 3/3 .text chkPnt__16daBaseNpc_path_cF4cXyz */ @@ -200,27 +230,65 @@ Vec daBaseNpc_path_c::getPntPos(u16 iIdx) { return mPathInfo->m_points[iIdx].m_position; } +void daBaseNpc_path_c::dbgDraw(f32 param_0) { + GXColor green = {0x80, 0xff, 0x80, 0xff}; + GXColor blue = {0x80, 0x80, 0xff, 0xff}; + GXColor red = {0xff, 0x80, 0x80, 0xff}; + GXColor yellow = {0xff, 0xff, 0x80, 0xff}; + + cXyz unkXyz1; + cXyz unkXyz2; + + for (int i = 0; i <= mPathInfo->m_num; i++) { + unkXyz1.set(mPathInfo->m_points[i].m_position.x, param_0, + mPathInfo->m_points[i].m_position.z); + dDbVw_drawSphereOpa(unkXyz1, 9.0f, red, 1); + + if (i != 0) { + unkXyz1.set(mPathInfo->m_points[i - 1].m_position.x, param_0, + mPathInfo->m_points[i - 1].m_position.z); + if (mPathInfo->m_num == i) { + if (!dPath_ChkClose(mPathInfo)) { + return; + } + unkXyz2.set(mPathInfo->m_points[0].m_position.x, param_0, + mPathInfo->m_points[0].m_position.z); + } else { + unkXyz2.set(mPathInfo->m_points[i].m_position.x, param_0, + mPathInfo->m_points[i].m_position.z); + } + + dDbVw_drawLineOpa(unkXyz1, unkXyz2, red, 1, 12); + } + } +} + /* 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; + int tmp = 0; + tmp = (int)i_value + *o_value_p; - if (i_max < tmp2) { - if (tmp < i_max) { - *o_value_p -= tmp2 - i_max; + if (i_max < tmp) { + if ((int)i_value < i_max) { + *o_value_p -= tmp - i_max; } else { *o_value_p = 0; } } - tmp += *o_value_p; + tmp = (int)i_value + *o_value_p; - if (tmp >= (s16)i_min) { + if (tmp >= i_min) { return; } if (i_min < i_value) { - *o_value_p -= (int)(tmp - i_min); + //TODO: fakematch +#if VERSION == VERSION_SHIELD_DEBUG + *o_value_p -= tmp - i_min; +#else + *o_value_p -= tmp - (s16)i_min; +#endif return; } @@ -426,11 +494,11 @@ int daBaseNpc_c::draw(f32 param_0) { return 1; } - if (cLib_checkBit(field_0x840, 0x40)) { + if (cLib_checkBit((u16)field_0x840, 0x40)) { mBtp.entry(modelData_p); } - if (cLib_checkBit(field_0x840, 0x80)) { + if (cLib_checkBit((u16)field_0x840, 0x80)) { mBtk.entry(modelData_p); } @@ -442,11 +510,11 @@ int daBaseNpc_c::draw(f32 param_0) { mpModelMorf->entryDL(); } - if (cLib_checkBit(field_0x840, 0x40)) { + if (cLib_checkBit((u16)field_0x840, 0x40)) { mBtp.remove(modelData_p); } - if (cLib_checkBit(field_0x840, 0x80)) { + if (cLib_checkBit((u16)field_0x840, 0x80)) { mBtk.remove(modelData_p); } @@ -462,14 +530,17 @@ const char* daBaseNpc_c::getResName() { /* 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); + void* objectRes = dComIfG_getObjectRes(i_arcName, i_resIdx); + return (J3DAnmTransform*)objectRes; } /* 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); + f32 start = i_start; + f32 end = i_end; + mpModelMorf->setAnm(i_anm, i_mode, i_morf, i_speed, start, end); return 1; } @@ -477,13 +548,16 @@ int daBaseNpc_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_speed, f32 i_mor * setBckAnm__11daBaseNpc_cFP15J3DAnmTransformfiiib */ int daBaseNpc_c::setBckAnm(J3DAnmTransform* i_anm, f32 i_speed, int i_mode, int i_start, int i_end, bool i_modify) { - return mBck.init(i_anm, TRUE, i_mode, i_speed, i_start, i_end, i_modify); + s16 start = i_start; + s16 end = i_end; + return mBck.init(i_anm, TRUE, i_mode, i_speed, start, 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); + void* objectRes = dComIfG_getObjectRes(i_arcName, i_resIdx); + return (J3DAnmTransform*)objectRes; } /* 8014EF64-8014EFA4 1498A4 0040+00 0/0 0/0 1/1 .text @@ -495,18 +569,18 @@ int daBaseNpc_c::setBtpAnm(J3DAnmTexPattern* i_anm, J3DModelData* i_modelData, f /* 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; + u32 attn_flags = 0; - if (dComIfGp_getLinkPlayer()->checkWolf()) { + if (daPy_py_c::checkNowWolf()) { if (param_1 != 0) { - attn_flags = 10; + attn_flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; } else { - attn_flags = 1; + attn_flags = fopAc_AttnFlag_LOCK_e; } } else if (param_0 != 0) { - attn_flags = 10; + attn_flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; } else { - attn_flags = 1; + attn_flags = fopAc_AttnFlag_LOCK_e; } attention_info.flags = attn_flags; @@ -539,7 +613,7 @@ void daBaseNpc_c::setEnvTevColor() { /* 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); + s8 room_id = dComIfG_Bgsp().GetRoomId(field_0x9d4); fopAcM_SetRoomNo(this, room_id); mCcStts.SetRoomId(room_id); } @@ -558,6 +632,7 @@ int daBaseNpc_c::checkEndAnm(f32 param_0) { case J3DFrameCtrl::EMode_RESET: return mpModelMorf->isStop() && param_0 != mpModelMorf->getPlaySpeed(); case J3DFrameCtrl::EMode_REVERSE: + case J3DFrameCtrl::EMode_LOOP_REVERSE: break; } @@ -574,6 +649,7 @@ int daBaseNpc_c::checkEndAnm(J3DFrameCtrl* i_framectrl) { case J3DFrameCtrl::EMode_RESET: return i_framectrl->checkState(1) || i_framectrl->getRate() == 0.0f; case J3DFrameCtrl::EMode_REVERSE: + case J3DFrameCtrl::EMode_LOOP_REVERSE: break; } @@ -582,7 +658,9 @@ int daBaseNpc_c::checkEndAnm(J3DFrameCtrl* i_framectrl) { /* 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)) { + u32 offMask = 0x10F; + if (cLib_checkBit((u16)field_0x840, 0x10) && + !cLib_checkBit((u16)field_0x840, 1)) { f32 temp_f31 = mpModelMorf->getPlaySpeed(); mpModelMorf->play(0, 0); @@ -591,17 +669,20 @@ void daBaseNpc_c::allAnmPlay() { } } - if (cLib_checkBit(field_0x840, 0x80) && !cLib_checkBit(field_0x840, 8) && !btkCtrl()) { + if (cLib_checkBit((u16)field_0x840, 0x80) && + !cLib_checkBit((u16)field_0x840, 8) && !btkCtrl()) { mBtk.play(); } - if (!cLib_checkBit(field_0x840, 0x100)) { - if (cLib_checkBit(field_0x840, 0x20) && !cLib_checkBit(field_0x840, 2)) { + if (!cLib_checkBit((u16)field_0x840, 0x100)) { + if (cLib_checkBit((u16)field_0x840, 0x20) && + !cLib_checkBit((u16)field_0x840, 2)) { mBck.play(); } - if (cLib_checkBit(field_0x840, 0x40) && !cLib_checkBit(field_0x840, 4)) { - mBtp.getFrame(); + if (cLib_checkBit((u16)field_0x840, 0x40) && + !cLib_checkBit((u16)field_0x840, 4)) { + f32 frame = mBtp.getFrame(); mBtp.play(); if (mBtp.getFrameCtrl()->getAttribute() == 2) { @@ -619,7 +700,7 @@ void daBaseNpc_c::allAnmPlay() { } } - cLib_offBit(field_0x840, 0x10F); + cLib_offBit(field_0x840, offMask); } /* 8014F38C-8014F390 149CCC 0004+00 2/0 0/0 1/0 .text adjustShapeAngle__11daBaseNpc_cFv @@ -643,10 +724,10 @@ void daBaseNpc_c::setMtx(int param_0) { model->setUserArea(0); } - if ((field_0x840 & 0x10) && field_0x83c) { + if (cLib_checkBit((u16)field_0x840, 0x10) && field_0x83c) { u16 tmp = 0; while (field_0x83c[tmp] != 0xFFFF) { - mBck.entryJoint(modelData, field_0x83c[tmp], mBck.getFrame()); + mBck.entryJoint(modelData, field_0x83c[tmp]); tmp++; } @@ -675,3 +756,321 @@ void daBaseNpc_c::drawOtherMdls() {} bool daBaseNpc_c::dbgDraw() { return true; } + +/* 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) { + daBaseNpc_moveBgActor_c* moveBgActor = (daBaseNpc_moveBgActor_c*)i_this; + return moveBgActor->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) { + int unusedInt1 = 1; + 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()) { + BOOL isConnect = mDoCPd_c::isConnect(PAD_3); + if (isConnect) { + 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; + } + + //TODO: Possible fakematch - retail definitely looks like a ternary but + // debug looks like if-else and has inverted order +#if DEBUG + if (!Create()) { + return 5; + } else { + return 4; + } +#else + //return Create() ? cPhs_COMPLEATE_e : cPhs_ERROR_e; // using enums here changes code gen + return Create() ? 4 : 5; +#endif +} + +/* 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()) { + bool result = dComIfG_Bgsp().Release(mpBgw); + if (result) { + 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 = 0; + f32 total_weight; + f32 basis; + for (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; + + total_weight = 0.0f; + for (i = 0; i < aMaxNumCPnt; i++) { + 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 var_r29 = param_2; + u16 sp12, sp10; + sp10 = var_r29; + sp12 = var_r29; + 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[var_r29].m_position.x, param_1[var_r29].m_position.y, param_1[var_r29].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; + s16 var_r31; + if (sp12 == var_r29 && var_r29 == sp10) { + JUT_ASSERT(2288, FALSE); + } else if (sp12 < var_r29 && var_r29 < sp10) { + sp24 = (sp4C - sp64).absXZ(); + var_r31 = cM_atan2s(sp4C.x - sp64.x, sp4C.z - sp64.z); + + sp70 = sp64; + sp64.x = sp70.x + (-1.0f * sp24 * cM_ssin(var_r31)); + sp64.z = sp70.z + (-1.0f * sp24 * cM_scos(var_r31)); + sp4C.x = sp70.x + (2.0f * sp24 * cM_ssin(var_r31)); + sp4C.z = sp70.z + (2.0f * sp24 * cM_scos(var_r31)); + } else if (sp12 < var_r29) { + sp24 = (sp58 - sp64).absXZ(); + var_r31 = cM_atan2s(sp58.x - sp64.x, sp58.z - sp64.z); + + sp70 = sp58; + sp64.x = sp70.x + (-2.0f * sp24 * cM_ssin(var_r31)); + sp64.z = sp70.z + (-2.0f * sp24 * cM_scos(var_r31)); + sp4C.x = sp70.x + (2.0f * sp24 * cM_ssin(var_r31)); + sp4C.z = sp70.z + (2.0f * sp24 * cM_scos(var_r31)); + } else if (var_r29 < sp10) { + sp24 = (sp4C - sp58).absXZ(); + var_r31 = cM_atan2s(sp4C.x - sp58.x, sp4C.z - sp58.z); + + sp70 = sp58; + sp64.x = sp70.x + (-2.0f * sp24 * cM_ssin(var_r31)); + sp64.z = sp70.z + (-2.0f * sp24 * cM_scos(var_r31)); + sp4C.x = sp70.x + (2.0f * sp24 * cM_ssin(var_r31)); + sp4C.z = sp70.z + (2.0f * sp24 * cM_scos(var_r31)); + } else { + JUT_ASSERT(2322, FALSE); + } + + 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); + + 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); + } + + var_r31 -= cM_atan2s(sp18 - sp20, sp14 - sp1C); + return (u16)abs(var_r31) > 0x4000; +} + +/* 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; + bool triPla = dComIfG_Bgsp().GetTriPla(*param_0, &spC); + if (!triPla || !cBgW_CheckBGround(spC.mNormal.y)) { + return 0; + } + + return fopAcM_getPolygonAngle(&spC, param_1); + } + + return 0; +} diff --git a/src/d/actor/d_a_npc3.cpp b/src/d/actor/d_a_npc3.cpp deleted file mode 100644 index 212114bf24..0000000000 --- a/src/d/actor/d_a_npc3.cpp +++ /dev/null @@ -1,301 +0,0 @@ -#include "d/actor/d_a_npc.h" -#include "d/d_bg_w.h" - -static BOOL daBaseNpc_incIdx(int i_pathNo, u16* i_pathIdx, BOOL 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, FALSE); - } 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, FALSE); - } - - 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 index 64243885d0..49fb5cdbc5 100644 --- a/src/d/actor/d_a_npc4.cpp +++ b/src/d/actor/d_a_npc4.cpp @@ -1,4 +1,4 @@ -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_npc_tk.h" #include "d/d_msg_object.h" #include "d/actor/d_a_tag_evtarea.h" @@ -47,14 +47,24 @@ static BOOL daNpcF_subIdx(int i_step, int i_num, u16& i_idx, BOOL i_isClosed) { /* 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); + BOOL result = FALSE; + if (i_reverse) { + result = daNpcF_subIdx(1, i_num, i_idx, i_isClosed); + } else { + result = daNpcF_addIdx(1, i_num, i_idx, i_isClosed); + } + return result; } /* 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); + BOOL result = FALSE; + if (i_reverse) { + result = daNpcF_addIdx(1, i_num, i_idx, i_isClosed); + } else { + result = daNpcF_subIdx(1, i_num, i_idx, i_isClosed); + } + return result; } /* 801506B0-801506BC 14AFF0 000C+00 0/0 0/0 130/130 .text initialize__18daNpcF_ActorMngr_cFv */ @@ -82,7 +92,8 @@ void daNpcF_ActorMngr_c::remove() { fopAc_ac_c* daNpcF_ActorMngr_c::getActorP() { fopAc_ac_c* actor = NULL; - if (fopAcM_SearchByID(mActorID, &actor) == 1 && actor != NULL) { + BOOL foundActor = fopAcM_SearchByID(mActorID, &actor); + if (foundActor == TRUE && actor != NULL) { return actor; } @@ -106,28 +117,26 @@ void daNpcF_MatAnm_c::calc(J3DMaterial* i_material) const { for (u32 i = 0; i < 8; i++) { if (J3DMaterialAnm::getTexMtxAnm(i).getAnmFlag()) { - J3DTexMtxInfo* curr_mtx_info = - &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo(); + J3DTextureSRTInfo* curr_mtx_info = + &i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo().mSRT; if (mMorfFrm != 0) { f32 tmp8 = 1.0f / (mMorfFrm + 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; + curr_mtx_info->mTranslationX = + field_0xF4 * (1.0f - tmp8) + curr_mtx_info->mTranslationX * tmp8; + curr_mtx_info->mTranslationY = + field_0xF8 * (1.0f - tmp8) + curr_mtx_info->mTranslationY * tmp8; } else { if (mEyeMoveFlag != 0) { - curr_mtx_info->mSRT.mTranslationX = mNowOffsetX; - curr_mtx_info->mSRT.mTranslationY = mNowOffsetY; + curr_mtx_info->mTranslationX = mNowOffsetX; + curr_mtx_info->mTranslationY = mNowOffsetY; } } - field_0xF4 = curr_mtx_info->mSRT.mTranslationX; - field_0xF8 = curr_mtx_info->mSRT.mTranslationY; + field_0xF4 = curr_mtx_info->mTranslationX; + field_0xF8 = curr_mtx_info->mTranslationY; } } } @@ -167,7 +176,33 @@ void daNpcF_Path_c::initialize() { #if DEBUG void daNpcF_Path_c::drawDbgInfoXyz() { - // UNFINISHED + GXColor green = {0x80, 0xff, 0x80, 0xff}; + GXColor blue = {0x80, 0x80, 0xff, 0xff}; + GXColor red = {0xff, 0x80, 0x80, 0xff}; + GXColor yellow = {0xff, 0xff, 0x80, 0xff}; + + cXyz unkXyz1; + cXyz unkXyz2; + + for (int i = 0; i <= getNumPnts(); i++) { + if (i < getNumPnts()) { + unkXyz1.set(getPntPos(i).x, getPntPos(i).y, getPntPos(i).z); + if (i != 0) { + unkXyz2.set(getPntPos(i - 1).x, getPntPos(i - 1).y, getPntPos(i - 1).z); + dDbVw_drawLineOpa(unkXyz1, unkXyz2, red, 1, 12); + } + + if (i == getIdx()) { + dDbVw_drawSphereOpa(unkXyz1, 50.0f, yellow, 1); + } else { + dDbVw_drawSphereOpa(unkXyz1, 9.0f, (GXColor){0xff, 0xff, 0xff, 0xff}, 1); + } + } else if (mIsClosed) { + unkXyz1.set(getPntPos(i - 1).x, getPntPos(i - 1).y, getPntPos(i - 1).z); + unkXyz2.set(getPntPos(0).x, getPntPos(0).y, getPntPos(0).z); + dDbVw_drawLineOpa(unkXyz1, unkXyz2, red, 1, 12); + } + } } #endif @@ -233,8 +268,9 @@ int daNpcF_Path_c::getBeforeIdx() { /* 80150CA8-80150D44 14B5E8 009C+00 0/0 0/0 1/1 .text getBeforePos__13daNpcF_Path_cFR4cXyz */ BOOL daNpcF_Path_c::getBeforePos(cXyz& o_pos) { + BOOL ret = FALSE; u16 idx = mIdx; - BOOL ret = daNpcF_decIdx(mPathInfo->m_num, idx, chkClose(), mIsReversed); + ret = daNpcF_decIdx(mPathInfo->m_num, idx, chkClose(), mIsReversed); o_pos = getPntPos(idx); return ret; @@ -243,9 +279,10 @@ BOOL daNpcF_Path_c::getBeforePos(cXyz& o_pos) { /* 80150D44-80150DE0 14B684 009C+00 0/0 0/0 1/1 .text getNextPos__13daNpcF_Path_cFR4cXyz */ BOOL daNpcF_Path_c::getNextPos(cXyz& o_pos) { + BOOL ret = FALSE; u16 idx = mIdx; - BOOL ret = daNpcF_incIdx(mPathInfo->m_num, idx, chkClose(), mIsReversed); + ret = daNpcF_incIdx(mPathInfo->m_num, idx, chkClose(), mIsReversed); o_pos = getPntPos(idx); return ret; @@ -253,18 +290,18 @@ BOOL daNpcF_Path_c::getNextPos(cXyz& o_pos) { /* 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; + BOOL ret = FALSE; while (!ret) { o_pos2 = getPntPos(getIdx()); - if (!chkPassed(i_pos1)) { + if (chkPassed(i_pos1)) { + if (setNextIdx()) { + ret = true; + } + } else { break; } - - if (setNextIdx()) { - ret = true; - } } return ret; @@ -370,7 +407,7 @@ void daNpcF_Lookat_c::calc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, csXyz** 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); + OS_REPORT("|%d| a:%f(%d), b:%f(%d), axis:%d\n", i, sp1C, o_lookatAngle[i]->y, angY, mRotAngle[i].y, i_axis); } if (i_axis > 0 && angY - sp1C < 0.0f) { @@ -443,8 +480,7 @@ void daNpcF_Lookat_c::initCalc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, cXyz 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]; + local_90 = (param_2 + i)[1] - (param_2 + i)[0]; param_4[i] = local_90.abs(); param_3[i].setall(0); param_3[i].x = -cM_atan2s(local_90.y, local_90.absXZ()); @@ -474,8 +510,7 @@ void daNpcF_Lookat_c::update(cXyz* param_0, csXyz* param_1, f32* param_2) { 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]); + mDoMtx_stack_c::transS(param_0[i]); ang.x += mAngularMoveDis[i].x; ang.y += mAngularMoveDis[i].y; @@ -483,7 +518,7 @@ void daNpcF_Lookat_c::update(cXyz* param_0, csXyz* param_1, f32* param_2) { mDoMtx_stack_c::concat(mtx); vec.set(0.0f, 0.0f, param_2[i]); - mDoMtx_stack_c::multVec(&vec, &pparam0i[1]); + mDoMtx_stack_c::multVec(&vec, ¶m_0[i] + 1); } } @@ -491,23 +526,34 @@ void daNpcF_Lookat_c::update(cXyz* param_0, csXyz* param_1, f32* param_2) { * 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) { + cXyz vec1; + cXyz vec2; + if (i_axis == 0) { field_0x94[i_no] = false; } + s16 pitch1, yaw1, pitch2, yaw2, mvx, mvy; if (!field_0x94[i_no]) { - cXyz vec1 = param_3 - param_1[i_no]; + vec1 = param_3 - param_1[i_no]; if (!vec1.isZero()) { vec1.normalize(); - cXyz vec2 = param_1[3] - param_1[i_no]; + 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); + pitch1 = -cM_atan2s(vec1.y, vec1.absXZ()); + yaw1 = cM_atan2s(vec1.x, vec1.z); + pitch2 = -cM_atan2s(vec2.y, vec2.absXZ()); + yaw2 = cM_atan2s(vec2.x, vec2.z); + mvx = pitch1 - pitch2; + mvy = yaw1 - yaw2; + mAngularMoveDis[i_no].x += mvx; + mAngularMoveDis[i_no].y += mvy; + if (i_debug) { + OS_REPORT("*******%d: mvy:%d, mAngularMoveDis:%d, angle:%d(%d/%d)\n", + i_no, mvy, mAngularMoveDis[i_no].y, param_2[i_no].y, + mMinAngle[i_no].y, mMaxAngle[i_no].y); + } } } } @@ -517,6 +563,11 @@ void daNpcF_Lookat_c::calcMoveDisAngle(int i_no, cXyz* param_1, csXyz* param_2, adjustMoveDisAngle(mAngularMoveDis[i_no].y, param_2[i_no].y, mMinAngle[i_no].y, mMaxAngle[i_no].y); + if (i_debug) { + OS_REPORT("+++++++%d: mvy:%d, mAngularMoveDis:%d\n", + i_no, mvy, mAngularMoveDis[i_no].y); + } + if (i_axis < 0 && mAngularMoveDis[i_no].y > 0) { field_0x94[i_no] = false; } @@ -643,19 +694,17 @@ int daNpcF_c::draw(BOOL i_isTest, BOOL param_1, f32 i_shadowDepth, _GXColorS10* } else { g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); } - g_env_light.setLightTevColorType_MAJI(model->getModelData(), &tevStr); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); if (!drawDbgInfo()) { if (mAnmFlags & ANM_PLAY_BTP) { - mBtpAnm.entry(&modelData->getMaterialTable(), (s16)mBtpAnm.getFrame()); + mBtpAnm.entry(modelData); } if (mAnmFlags & ANM_PLAY_BTK) { - frame = mBtkAnm.getFrame(); - mBtkAnm.entry(&modelData->getMaterialTable(), frame); + mBtkAnm.entry(modelData); } if (mAnmFlags & ANM_PLAY_BRK) { - frame = mBrkAnm.getFrame(); - mBrkAnm.entry(&modelData->getMaterialTable(), frame); + mBrkAnm.entry(modelData); } if (param_1) { @@ -696,15 +745,35 @@ int daNpcF_c::draw(BOOL i_isTest, BOOL param_1, f32 i_shadowDepth, _GXColorS10* 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) { + daNpcF_c* npc = static_cast(i_this); if (daPy_getPlayerActorClass() == i_actor) { - u8 cut_type = static_cast(i_actor)->getCutType(); - static_cast(i_this)->setCutType(cut_type); + npc->setCutType(static_cast(i_actor)->getCutType()); } else { - static_cast(i_this)->setCutType(daPy_py_c::CUT_TYPE_NM_VERTICAL); + npc->setCutType(daPy_py_c::CUT_TYPE_NM_VERTICAL); } } } +/* 803B37E0-803B3824 010900 0044+00 0/0 0/0 36/36 .data mCcDCyl__8daNpcF_c */ +dCcD_SrcCyl daNpcF_c::mCcDCyl = { + daNpcF_c::mCcDObjInfo, + { + {0.0f, 0.0f, 0.0f}, // mCenter + 0.0f, // mRadius + 0.0f // mHeight + } // mCyl +}; + +/* 803B3824-803B3864 010944 0040+00 0/0 0/0 2/2 .data mCcDSph__8daNpcF_c */ +dCcD_SrcSph daNpcF_c::mCcDSph = { + daNpcF_c::mCcDObjInfo, + { + {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph + } // mSphAttr +}; + +char daNpcF_c::mFileNameBuf[0x15]; + /* 804257E8-80425978 052508 0190+00 4/4 0/0 0/0 .bss mFindActorPList__8daNpcF_c */ fopAc_ac_c* daNpcF_c::mFindActorPList[100]; @@ -713,12 +782,15 @@ 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) { + void* param_1_copy = param_1; + fopAc_ac_c* actor = NULL; 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); + actor = static_cast(i_proc); + mFindActorPList[mFindCount] = actor; mFindCount++; } return NULL; @@ -729,10 +801,13 @@ 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 + void* i_this_copy = i_this; + fopAc_ac_c* actor = NULL; + if (mFindCount < 100 && fopAcM_IsActor(i_proc) && i_proc != i_this && mSrchActorName == fopAcM_GetName(i_proc)) { - mFindActorPList[mFindCount] = static_cast(i_proc); + actor = static_cast(i_proc); + mFindActorPList[mFindCount] = actor; mFindCount++; } @@ -742,6 +817,7 @@ void* daNpcF_c::srchActor(void* i_proc, void* i_this) { /* 8015276C-801527FC 14D0AC 0090+00 2/0 0/0 40/9 .text setMtx__8daNpcF_cFv */ void daNpcF_c::setMtx() { J3DModel* model = mAnm_p->getModel(); + J3DModelData* modelData = model->getModelData(); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(mCurAngle); mDoMtx_stack_c::scaleM(scale); @@ -759,6 +835,7 @@ void daNpcF_c::setMtx() { /* 801527FC-801528C8 14D13C 00CC+00 2/0 0/0 38/0 .text setMtx2__8daNpcF_cFv */ void daNpcF_c::setMtx2() { J3DModel* model = mAnm_p->getModel(); + J3DModelData* modelData = model->getModelData(); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(mCurAngle); mDoMtx_stack_c::scaleM(scale); @@ -872,30 +949,36 @@ void daNpcF_c::initialize() { /* 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); + J3DAnmTransformKey* key = (J3DAnmTransformKey*)dComIfG_getObjectRes(i_arcName, i_resIdx); + return key; } /* 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); + J3DAnmTexPattern* pattern = (J3DAnmTexPattern*)dComIfG_getObjectRes(i_arcName, i_resIdx); + return pattern; } /* 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); + J3DAnmTextureSRTKey* key = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(i_arcName, i_resIdx); + return key; } /* 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); + J3DAnmTevRegKey* key = (J3DAnmTevRegKey*)dComIfG_getObjectRes(i_arcName, i_resIdx); + return key; } /* 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) { - mAnm_p->setAnm(i_anm, i_mode, i_morf, i_speed, (f32)i_start, (f32)i_end); + f32 start = i_start; + f32 end = i_end; + mAnm_p->setAnm(i_anm, i_mode, i_morf, i_speed, start, end); return true; } @@ -903,7 +986,9 @@ BOOL daNpcF_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_speed, f32 i_morf, * 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); + s16 start = i_start; + s16 end = i_end; + return mBckAnm.init(i_bck, true, i_mode, i_speed, start, end, i_modify); } /* 80152CC4-80152D04 14D604 0040+00 0/0 0/0 32/32 .text @@ -935,7 +1020,7 @@ void daNpcF_c::setEnvTevColor() { /* 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); + s8 room_id = dComIfG_Bgsp().GetRoomId(mGndChk); fopAcM_SetRoomNo(this, room_id); mCcStts.SetRoomId(room_id); } @@ -949,6 +1034,7 @@ BOOL daNpcF_c::chkEndAnm(f32 param_0) { case J3DFrameCtrl::EMode_RESET: return mAnm_p->isStop() && mAnm_p->getPlaySpeed() == 0.0f && param_0 != 0.0f; case J3DFrameCtrl::EMode_REVERSE: + case J3DFrameCtrl::EMode_LOOP_REVERSE: default: return false; } @@ -970,6 +1056,7 @@ BOOL daNpcF_c::chkEndAnm(J3DFrameCtrl* frameCtrl, f32 prevRate) { case J3DFrameCtrl::EMode_RESET: return frameCtrl->checkState(1) && frameCtrl->getRate() == 0.0f && prevRate != 0.0f; case J3DFrameCtrl::EMode_REVERSE: + case J3DFrameCtrl::EMode_LOOP_REVERSE: default: return false; } @@ -1151,7 +1238,7 @@ void daNpcF_c::setLookatMtx(int i_jointNo, int* i_jointList, f32 i_neckHeadAngle 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); + cMtx_copy(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; @@ -1164,7 +1251,7 @@ void daNpcF_c::setLookatMtx(int i_jointNo, int* i_jointList, f32 i_neckHeadAngle } } mDoMtx_stack_c::inverse(); - MTXCopy(mDoMtx_stack_c::get(), invParentMtx); + cMtx_copy(mDoMtx_stack_c::get(), invParentMtx); mDoMtx_stack_c::transS(pos); mDoMtx_stack_c::XYZrotM(mCurAngle); @@ -1183,12 +1270,15 @@ void daNpcF_c::setLookatMtx(int i_jointNo, int* i_jointList, f32 i_neckHeadAngle /* 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) { + fopAc_ac_c* hit_actor = NULL; + s16 actorAngleY; static_cast(i_ccCyl->GetStts())->Move(); if (mDamageTimer == 0 && i_ccCyl->ChkTgHit()) { - fopAc_ac_c* hit_actor = i_ccCyl->GetTgHitAc(); + hit_actor = i_ccCyl->GetTgHitAc(); if (hit_actor != NULL) { - field_0x990 = fopAcM_searchActorAngleY(this, hit_actor) - mCurAngle.y; + actorAngleY = fopAcM_searchActorAngleY(this, hit_actor); + field_0x990 = actorAngleY - mCurAngle.y; if (fopAcM_GetName(hit_actor) == PROC_NPC_TK) { if (param_1) { static_cast(hit_actor)->setBump(); @@ -1219,8 +1309,8 @@ void daNpcF_c::setDamage(int i_timer, int i_expression, int i_motion) { setMotion(i_motion, 0.0f, true); } - field_0x984[0] = 8192.0f; - field_0x984[2] = 12743.0f; + field_0x984[0] = cM_deg2s(45.0f); + field_0x984[2] = cM_deg2s(70.0f); field_0x992 = 0x4000; mTotalDamageTimer = i_timer; mDamageTimer = mTotalDamageTimer; @@ -1236,8 +1326,7 @@ int daNpcF_c::ctrlMsgAnm(int& o_expression, int& o_motion, fopAc_ac_c* param_2, o_motion = -1; if (param_3 || eventInfo.checkCommandTalk() || mStaffID != -1) { - fopAc_ac_c* talkPartner = dComIfGp_event_getTalkPartner(); - if (talkPartner == param_2) { + if (dComIfGp_event_getTalkPartner() == param_2) { msg_class* msg_p = dMsgObject_c::getActor(); JUT_ASSERT(2780, NULL != msg_p); @@ -1250,7 +1339,7 @@ int daNpcF_c::ctrlMsgAnm(int& o_expression, int& o_motion, fopAc_ac_c* param_2, field_0x9a4 = msg_p->msg_idx; } - if (dMsgObject_c::isMouthCheck()) { + if (dMsgObject_isMouthCheck()) { mAnmFlags &= ~ANM_PAUSE_EXPRESSION; } else { mAnmFlags |= ANM_PAUSE_EXPRESSION; @@ -1284,7 +1373,13 @@ void daNpcF_c::orderEvent(int i_speak, char* i_evtName, u16 param_2, u16 i_prior 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()) { + } else if ( +#if PLATFORM_SHIELD + true +#else + !mTwilight|| daPy_py_c::checkNowWolfEyeUp() +#endif + ) { if ((attention_info.flags & fopAc_AttnFlag_SPEAK_e) || (attention_info.flags & fopAc_AttnFlag_TALK_e)) { eventInfo.onCondition(dEvtCnd_CANTALK_e); if (i_speak) { @@ -1312,10 +1407,10 @@ void daNpcF_c::changeEvent(char* i_arcName, char* i_evtName, u16 param_2, u16 pa /* 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); + s16 angle = mHeadAngle.y; + angle = fopAcM_searchActorAngleY(this, i_actor) - angle; + angle = abs(angle); + return i_fovY == 180.0f || angle < cM_deg2s(i_fovY); } /* 80153A78-80153BDC 14E3B8 0164+00 1/1 0/0 0/0 .text @@ -1329,8 +1424,8 @@ BOOL daNpcF_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_fovY) { * @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; + cXyz delta, relPos; mDoMtx_stack_c::YrotS(-i_angleY); mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z); @@ -1382,9 +1477,8 @@ BOOL daNpcF_c::chkActorInAttnArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorA /* 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); + speedF = 0.0f; + speed.setall(0.0f); mOrderSpeakEvt = false; field_0x9ec = false; return true; @@ -1397,9 +1491,9 @@ BOOL daNpcF_c::talkProc(int* param_0, BOOL param_1, fopAc_ac_c** i_talkPartners_ motion = -1; expression = -1; - if (dMsgObject_c::isMsgSendControl()) { + if (dMsgObject_isMsgSendControl()) { if (param_1) { - dMsgObject_c::offMsgSendControl(); + dMsgObject_offMsgSendControl(); } } else if (mFlow.doFlow(this, i_talkPartners_p, 0)) { ret = true; @@ -1430,7 +1524,7 @@ BOOL daNpcF_c::talkProc(int* param_0, BOOL param_1, fopAc_ac_c** i_talkPartners_ 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 = fabsf(cM_sht2d((s16)(current.angle.y - i_targetAngle))); mTurnStepNum = (mTurnStepNum / 180.0f) * i_rate; mTurnStepNum = (int)mTurnStepNum + 1; if (mTurnStepNum < 8.0f) { @@ -1441,16 +1535,15 @@ BOOL daNpcF_c::turn(s16 i_targetAngle, f32 i_rate, int i_direction) { s16 turn_start_angle = mTurnStartAngle; if (i_direction == 0) { - i_direction = (s16)(target_angle - turn_start_angle) >= 0 ? 1 : -1; + i_direction = (s16)(i_targetAngle - mTurnStartAngle) >= 0 ? 1 : -1; } - u16 angle_diff = target_angle - turn_start_angle; - int signed_angle_diff = angle_diff; + u32 turn_angle = (u16)(target_angle - turn_start_angle); if (i_direction < 0) { - signed_angle_diff = -(u16)(0xffff - angle_diff); + turn_angle = -(u16)(0xffff - turn_angle); } - int turn_angle = (int)(signed_angle_diff * cM_ssin(mTurnAmount)); + turn_angle = (int)((int)turn_angle * cM_ssin(mTurnAmount)); mTurnAmount = (int)((f32)mTurnAmount + (f32)0x4000 / mTurnStepNum); if ((u16)mTurnAmount >= 0x4000) { current.angle.y = i_targetAngle; @@ -1465,7 +1558,8 @@ BOOL daNpcF_c::turn(s16 i_targetAngle, f32 i_rate, int i_direction) { /* 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) { + s16 angleDiff = i_targetAngle - mCurAngle.y; + if ((int)fabsf(cM_sht2d(angleDiff)) > 40) { if (i_expression >= 0) { setExpression(i_expression, -1.0f); } @@ -1563,8 +1657,10 @@ fopAc_ac_c* daNpcF_c::getAttnActorP(BOOL i_playerAttn, fpcLyIt_JudgeFunc i_searc fpcM_Search(i_searchFunc, this); int i, j; + BOOL sp30; + int unusedInt1; for (i = 0; i < mFindCount; i++) { - BOOL sp30 = chkPointInArea(getAttentionPos(mFindActorPList[i]), attention_info.position, + 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++) { @@ -1593,8 +1689,9 @@ fopAc_ac_c* daNpcF_c::getAttnActorP(BOOL i_playerAttn, fpcLyIt_JudgeFunc i_searc if (actor != NULL) { sp34 = 900; i = 0; + j = unusedInt1 = 0; - for (j = 0; j < 5; j++) { + for (; j < 5; j++) { if (mAttnActorTimer[j] < sp34) { sp34 = mAttnActorTimer[j]; i = j; @@ -1633,10 +1730,10 @@ BOOL daNpcF_c::chkActorInSight2(fopAc_ac_c* i_actor, f32 i_fovY, s16 i_sightAngl if (ang_diff < 0) { ang_diff = -ang_diff; } - return ang_diff <= fov_y; - } else { - return true; + return (ang_diff > fov_y) == FALSE; } + + return true; } /* 80154834-801548F4 14F174 00C0+00 2/2 0/0 0/0 .text chkPointInArea__8daNpcF_cF4cXyz4cXyzfffs */ @@ -1644,10 +1741,10 @@ BOOL daNpcF_c::chkPointInArea(cXyz i_point, cXyz param_1, f32 i_radius, f32 i_of f32 i_offsetY2, s16 i_angleY) { cXyz bounds, center; - f32 lower = i_offsetY2; f32 upper = i_offsetY1; + f32 lower = i_offsetY2; - if (i_offsetY1 < i_offsetY2) { + if (upper < lower) { lower = i_offsetY1; upper = i_offsetY2; } @@ -1706,9 +1803,10 @@ BOOL daNpcF_c::chkFindPlayer2(BOOL i_hasAttn, s16 i_angle) { 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; + if (chkPointInArea(attn_pos, attention_info.position, dist_max, lower_y, upper_y, 0)) { + if (chkActorInSight2(daPy_getPlayerActorClass(), fovy, i_angle)) { + return true; + } } return false; @@ -1750,6 +1848,7 @@ BOOL daNpcF_pntVsLineSegmentLengthSquare2D(f32 i_pntX, f32 i_pntZ, f32 i_startX, f32 i_endX, f32 i_endZ, f32* o_projX, f32* o_projZ, f32* o_dist2) { BOOL ret = false; + f32 prm; f32 len2; f32 line_x = i_endX - i_startX; f32 line_z = i_endZ - i_startZ; @@ -1760,7 +1859,7 @@ BOOL daNpcF_pntVsLineSegmentLengthSquare2D(f32 i_pntX, f32 i_pntZ, f32 i_startX, return false; } - f32 prm = (line_x * (i_pntX - i_startX) + line_z * (i_pntZ - i_startZ)) / len2; + prm = (line_x * (i_pntX - i_startX) + line_z * (i_pntZ - i_startZ)) / len2; if (0.0f <= prm && prm <= 1.0f) { ret = true; @@ -1801,7 +1900,9 @@ BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_i f32 dist; s16 angle; - if (prev_idx != i_idx || next_idx != i_idx) { + if (prev_idx == i_idx && next_idx == i_idx) { + JUT_ASSERT(0xff9, FALSE); + } else { 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); @@ -1826,6 +1927,8 @@ BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_i 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 { + JUT_ASSERT(0x1029, FALSE); } f32 proj_x, proj_z, proj2_x, proj2_z; @@ -1836,18 +1939,17 @@ BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_i } 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); + angle = 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); + angle = 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; + angle = angle - cM_atan2s(proj2_x - proj_x, proj2_z - proj_z); + return (u16)abs(angle) > 0x4000; } - } else { - return false; } + + return false; } /* 8015556C-80155634 14FEAC 00C8+00 1/1 0/0 8/8 .text daNpcF_getGroundAngle__FP13cBgS_PolyInfos */ @@ -1855,39 +1957,40 @@ 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)) { + BOOL triPla = dComIfG_Bgsp().GetTriPla(*param_0, &plane); + if (!triPla || !cBgW_CheckBGround(plane.mNormal.y)) { return 0; } else { return fopAcM_getPolygonAngle(&plane, param_1); } - } else { - return 0; } + + 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]); + return dComIfGs_isEventBit((u16)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]); + dComIfGs_onEventBit((u16)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]); + return dComIfGs_isTmpBit((u16)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]); + dComIfGs_onTmpBit((u16)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]); + dComIfGs_offTmpBit((u16)dSv_event_tmp_flag_c::tempBitLabels[i_no]); } /* 80155774-80155854 1500B4 00E0+00 0/0 2/2 5/5 .text daNpcF_getPlayerInfoFromPlayerList__FiiR4cXyzR5csXyz */ @@ -1897,13 +2000,14 @@ int daNpcF_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz& param_2, 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++) { + for (int i = 0; i < room_p->getPlayerNum(); i++) { if (param_0 == (u8)entries->base.angle.z) { param_2 = entries->base.position; param_3 = entries->base.angle; rv = 1; break; } + entries++; } return rv; @@ -1914,6 +2018,8 @@ BOOL daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p) { BOOL ret = FALSE; if (daPy_getPlayerActorClass()->checkPriActorOwn(i_actor_p)) { + JUT_ASSERT(0x10dd, NULL != dComIfGp_getAttention()); + for (int i = 0; i < dComIfGp_getAttention()->GetActionCount(); i++) { if (dComIfGp_getAttention()->ActionTarget(i) == i_actor_p && dComIfGp_getAttention()->getActionBtnB() && @@ -1926,7 +2032,11 @@ BOOL daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_actor_p) { for (int i = 0; i < dComIfGp_getAttention()->GetLockonCount(); i++) { if (dComIfGp_getAttention()->LockonTarget(i) == i_actor_p && dComIfGp_getAttention()->getActionBtnB() && - dComIfGp_getAttention()->getActionBtnB()->mType == fopAc_attn_TALK_e) + (dComIfGp_getAttention()->getActionBtnB()->mType == fopAc_attn_TALK_e +#if DEBUG + || dComIfGp_getAttention()->getActionBtnB()->mType == fopAc_attn_UNK_4 +#endif + )) { ret = TRUE; } @@ -1951,14 +2061,19 @@ BOOL daNpcF_chkPointInArea(cXyz i_point, cXyz i_center, cXyz i_bounds, s16 i_ang cXyz delta = i_center - i_point; + f32 tmp_float1; + f32 tmp_float2; + f32 tmp_float3; 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; + if ((delta_x * delta_x) / (bound_x * bound_x) + + (delta_z * delta_z) / (bound_z * bound_z) <= 1.0f) { + return TRUE; + } } + + return FALSE; } /* 80155AD4-80155AE8 150414 0014+00 1/1 0/0 1/1 .text daNpcF_getDistTableIdx__Fii */ @@ -1967,12 +2082,168 @@ u8 daNpcF_getDistTableIdx(int param_0, int param_1) { } #if DEBUG -void daNpcF_commonListenPropertyEvent(char*, int*, daNpcF_HIOParam*) { - // TODO. +void daNpcF_commonListenPropertyEvent(char* param_1, int* param_2, daNpcF_HIOParam* param_3) { + sprintf(param_1 + *param_2, "%.3ff,\t// 注目オフセット\n", param_3->attention_offset); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 重力\n", param_3->gravity); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// スケ−ル\n", param_3->scale); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// リアル影サイズ\n", param_3->real_shadow_size); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 体重\n", param_3->weight); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 高さ\n", param_3->height); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// ひざ丈\n", param_3->knee_length); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 幅\n", param_3->width); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 腰のX角上限\n", param_3->body_angleX_max); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 腰のX角下限\n", param_3->body_angleX_min); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 腰のY角上限\n", param_3->body_angleY_max); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 腰のY角下限\n", param_3->body_angleY_min); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 頭のX角上限\n", param_3->head_angleX_max); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 頭のX角下限\n", param_3->head_angleX_min); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 頭のY角上限\n", param_3->head_angleY_max); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 頭のY角下限\n", param_3->head_angleY_min); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 首の回転比率\n", param_3->neck_rotation_ratio); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 補間フレ−ム\n", param_3->morf_frame); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 会話距離\n", param_3->talk_distance); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 会話角度\n", param_3->talk_angle); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 注目距離\n", param_3->attention_distance); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 注目角度\n", param_3->attention_angle); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// 視界\n", param_3->fov); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// サ−チ距離\n", param_3->search_distance); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// サ−チ高さ\n", param_3->search_height); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%.3ff,\t// サ−チ低さ\n", param_3->search_depth); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 注目時間\n", param_3->attention_time); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// ダメ-ジ期間\n", param_3->damage_time); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 表情\n", param_3->face_expression); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 動作\n", param_3->motion); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// 注視モ−ド\n", param_3->look_mode); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// デバグモ−ドON\n", param_3->debug_mode_ON); + *param_2 = strlen(param_1); + sprintf(param_1 + *param_2, "%d, \t// デバグ情報ON\n", param_3->debug_info_ON); + *param_2 = strlen(param_1); + return; } -void daNpcF_commonGenMessage(JORMContext*, daNpcF_HIOParam*) { - // TODO +void daNpcF_commonGenMessage(JORMContext* i_ctx, daNpcF_HIOParam* i_hio) { + i_ctx->genSlider("注目オフセット ", &i_hio->attention_offset, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("重力 ", &i_hio->gravity, -100.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("スケ−ル ", &i_hio->scale, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("リアル影サイズ ", &i_hio->real_shadow_size, 0.0f, 10000.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("体重 ", &i_hio->weight, 0.0f, 255.0f, 0, NULL, 0xffff, 0xffff,0x200, 0x18); + i_ctx->genSlider("高さ ", &i_hio->height, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff,0x200, 0x18); + i_ctx->genSlider("ひざ丈 ", &i_hio->knee_length, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff,0x200, 0x18); + i_ctx->genSlider("幅 ", &i_hio->width, 0.0f, 1000.0f, 0, NULL, 0xffff, 0xffff,0x200, 0x18); + i_ctx->genSlider("腰のX角上限 ", &i_hio->body_angleX_max, -90.0f, 90.0f, 0, NULL, 0xffff,0xffff, 0x200, 0x18); + i_ctx->genSlider("腰のX角下限 ", &i_hio->body_angleX_min, -90.0f, 90.0f, 0, NULL, 0xffff,0xffff, 0x200, 0x18); + i_ctx->genSlider("腰のY角上限 ", &i_hio->body_angleY_max, -180.0, 179.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("腰のY角下限 ", &i_hio->body_angleY_min, -180.0, 179.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("頭のX角上限 ", &i_hio->head_angleX_max, -90.0f, 90.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("頭のX角下限 ", &i_hio->head_angleX_min, -90.0f, 90.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("頭のY角上限 ", &i_hio->head_angleY_max, -180.0f, 179.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("頭のY角下限 ", &i_hio->head_angleY_min, -180.0f, 179.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("首の回転比率 ", &i_hio->neck_rotation_ratio, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("補間フレ-ム ", &i_hio->morf_frame, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->startComboBox("会話距離 ", &i_hio->talk_distance, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + i_ctx->genComboBoxItem(" 50", 0); + i_ctx->genComboBoxItem(" 100", 1); + i_ctx->genComboBoxItem(" 150", 2); + i_ctx->genComboBoxItem(" 200", 3); + i_ctx->genComboBoxItem(" 250", 4); + i_ctx->genComboBoxItem(" 300", 5); + i_ctx->genComboBoxItem(" 350", 6); + i_ctx->genComboBoxItem(" 400", 7); + i_ctx->genComboBoxItem(" 450", 8); + i_ctx->genComboBoxItem(" 500", 9); + i_ctx->genComboBoxItem(" 550", 10); + i_ctx->genComboBoxItem(" 600", 11); + i_ctx->genComboBoxItem(" 650", 12); + i_ctx->genComboBoxItem(" 700", 13); + i_ctx->genComboBoxItem(" 750", 14); + i_ctx->genComboBoxItem(" 800", 15); + i_ctx->genComboBoxItem(" 850", 16); + i_ctx->genComboBoxItem(" 900", 17); + i_ctx->genComboBoxItem(" 950", 18); + i_ctx->genComboBoxItem("1000", 19); + i_ctx->endComboBox(); + i_ctx->startComboBox("会話角度 ", &i_hio->talk_angle, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + i_ctx->genComboBoxItem(" 30", 0); + i_ctx->genComboBoxItem(" 45", 1); + i_ctx->genComboBoxItem(" 60", 2); + i_ctx->genComboBoxItem(" 90", 3); + i_ctx->genComboBoxItem(" 110", 4); + i_ctx->genComboBoxItem(" 135", 5); + i_ctx->genComboBoxItem(" 180", 6); + i_ctx->endComboBox(); + i_ctx->startComboBox("注目距離 ", &i_hio->attention_distance, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + i_ctx->genComboBoxItem(" 50", 0); + i_ctx->genComboBoxItem(" 100", 1); + i_ctx->genComboBoxItem(" 150", 2); + i_ctx->genComboBoxItem(" 200", 3); + i_ctx->genComboBoxItem(" 250", 4); + i_ctx->genComboBoxItem(" 300", 5); + i_ctx->genComboBoxItem(" 350", 6); + i_ctx->genComboBoxItem(" 400", 7); + i_ctx->genComboBoxItem(" 450", 8); + i_ctx->genComboBoxItem(" 500", 9); + i_ctx->genComboBoxItem(" 550", 10); + i_ctx->genComboBoxItem(" 600", 11); + i_ctx->genComboBoxItem(" 650", 12); + i_ctx->genComboBoxItem(" 700", 13); + i_ctx->genComboBoxItem(" 750", 14); + i_ctx->genComboBoxItem(" 800", 15); + i_ctx->genComboBoxItem(" 850", 16); + i_ctx->genComboBoxItem(" 900", 17); + i_ctx->genComboBoxItem(" 950", 18); + i_ctx->genComboBoxItem("1000", 19); + i_ctx->endComboBox(); + i_ctx->startComboBox("注目角度 ", &i_hio->attention_angle, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a); + i_ctx->genComboBoxItem(" 30", 0); + i_ctx->genComboBoxItem(" 45", 1); + i_ctx->genComboBoxItem(" 60", 2); + i_ctx->genComboBoxItem(" 90", 3); + i_ctx->genComboBoxItem(" 110", 4); + i_ctx->genComboBoxItem(" 135", 5); + i_ctx->genComboBoxItem(" 180", 6); + i_ctx->endComboBox(); + i_ctx->genSlider("視界 ", &i_hio->fov, 0.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("サ-チ距離 ", &i_hio->search_distance, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("サ-チ高さ ", &i_hio->search_height, -10000.0,10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("サ-チ低さ ", &i_hio->search_depth, -10000.0,10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("注目時間 ", &i_hio->attention_time, 0, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("ダメ-ジ期間 ", &i_hio->damage_time, 0,10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("表情 ", &i_hio->face_expression, 0,10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("動作 ", &i_hio->motion, 0, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genSlider("注視モ-ド ", &i_hio->look_mode, 0, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genCheckBox("デバグモ-ドON", &i_hio->debug_mode_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + i_ctx->genCheckBox("デバグ情報ON ", &i_hio->debug_info_ON, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); } #endif diff --git a/src/d/actor/d_a_npc_ash.cpp b/src/d/actor/d_a_npc_ash.cpp index bdd42dc451..c391dacd0d 100644 --- a/src/d/actor/d_a_npc_ash.cpp +++ b/src/d/actor/d_a_npc_ash.cpp @@ -5,10 +5,11 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/actor/d_a_npc_ash.h" +#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_tag_evtarea.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" -#include "d/actor/d_a_npc_ash.h" -#include "d/actor/d_a_tag_evtarea.h" /* 8095D640-8095D6AC 000000 006C+00 14/14 0/0 0/0 .rodata m__16daNpcAsh_Param_c */ const daNpcAsh_HIOParam daNpcAsh_Param_c::m = { diff --git a/src/d/actor/d_a_npc_ashB.cpp b/src/d/actor/d_a_npc_ashB.cpp index 287580b301..68e687bec4 100644 --- a/src/d/actor/d_a_npc_ashB.cpp +++ b/src/d/actor/d_a_npc_ashB.cpp @@ -5,8 +5,9 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep -#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "d/actor/d_a_npc_ashB.h" +#include "d/actor/d_a_npc.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" /* 809620E4-80962154 000000 0070+00 11/11 0/0 0/0 .rodata m__17daNpcAshB_Param_c */ const daNpcAshB_HIOParam daNpcAshB_Param_c::m = { diff --git a/src/d/actor/d_a_npc_chin.cpp b/src/d/actor/d_a_npc_chin.cpp index 08ea6594cf..d7c277b391 100644 --- a/src/d/actor/d_a_npc_chin.cpp +++ b/src/d/actor/d_a_npc_chin.cpp @@ -5,6 +5,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/actor/d_a_npc.h" #include "d/actor/d_a_npc_chin.h" #include "d/d_debug_viewer.h" #include "d/d_meter2_info.h" diff --git a/src/d/actor/d_a_npc_doorboy.cpp b/src/d/actor/d_a_npc_doorboy.cpp index fd01921664..7c2ca4aad8 100644 --- a/src/d/actor/d_a_npc_doorboy.cpp +++ b/src/d/actor/d_a_npc_doorboy.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_doorboy.h" +#include "d/actor/d_a_npc.h" enum DoorBoy_RES_File_ID { /* BMDR */ diff --git a/src/d/actor/d_a_npc_drainSol.cpp b/src/d/actor/d_a_npc_drainSol.cpp index d46a708b9c..16df698d2e 100644 --- a/src/d/actor/d_a_npc_drainSol.cpp +++ b/src/d/actor/d_a_npc_drainSol.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_drainSol.h" +#include "d/actor/d_a_npc.h" /* 809AFACC-809AFAD4 000000 0008+00 1/1 0/0 0/0 .data l_bmdGetParamList */ static int l_bmdGetParamList[] = { diff --git a/src/d/actor/d_a_npc_fairy.cpp b/src/d/actor/d_a_npc_fairy.cpp index 7e2e7bf76d..00f358412d 100644 --- a/src/d/actor/d_a_npc_fairy.cpp +++ b/src/d/actor/d_a_npc_fairy.cpp @@ -6,8 +6,9 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_fairy.h" -#include "JSystem/JHostIO/JORFile.h" +#include "d/actor/d_a_npc4.h" #include "d/d_s_play.h" +#include "JSystem/JHostIO/JORFile.h" enum fairy_RES_File_ID { /* BCK */ diff --git a/src/d/actor/d_a_npc_fairy_seirei.cpp b/src/d/actor/d_a_npc_fairy_seirei.cpp index 271ca24be6..93f24604f0 100644 --- a/src/d/actor/d_a_npc_fairy_seirei.cpp +++ b/src/d/actor/d_a_npc_fairy_seirei.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_fairy_seirei.h" +#include "d/actor/d_a_npc4.h" /* ############################################################################################## */ diff --git a/src/d/actor/d_a_npc_gra.cpp b/src/d/actor/d_a_npc_gra.cpp index cf21d735ba..480de8b6b8 100644 --- a/src/d/actor/d_a_npc_gra.cpp +++ b/src/d/actor/d_a_npc_gra.cpp @@ -8,6 +8,7 @@ #include "d/d_meter2_info.h" #include "d/actor/d_a_obj_onsenTaru.h" #include "JSystem/JHostIO/JORFile.h" +#include "d/actor/d_a_npc.h" #include "d/actor/d_a_npc_gra.h" #include "d/actor/d_a_tag_gra.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_npc_grc.cpp b/src/d/actor/d_a_npc_grc.cpp index a1e9655fc7..97dd460284 100644 --- a/src/d/actor/d_a_npc_grc.cpp +++ b/src/d/actor/d_a_npc_grc.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_grc.h" +#include "d/actor/d_a_npc.h" #include "Z2AudioLib/Z2Instances.h" enum grC_RES_File_ID { diff --git a/src/d/actor/d_a_npc_grd.cpp b/src/d/actor/d_a_npc_grd.cpp index 0c22d8cafd..0dbff8170d 100644 --- a/src/d/actor/d_a_npc_grd.cpp +++ b/src/d/actor/d_a_npc_grd.cpp @@ -5,8 +5,9 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep -#include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_npc_grd.h" +#include "d/actor/d_a_npc.h" +#include "Z2AudioLib/Z2Instances.h" enum Animation { /* 0x00 */ ANM_UNK_0, diff --git a/src/d/actor/d_a_npc_grmc.cpp b/src/d/actor/d_a_npc_grmc.cpp index 5807320ec1..c675c2d428 100644 --- a/src/d/actor/d_a_npc_grmc.cpp +++ b/src/d/actor/d_a_npc_grmc.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_grmc.h" +#include "d/actor/d_a_npc4.h" enum grC_RES_File_ID { /* BCK */ diff --git a/src/d/actor/d_a_npc_grr.cpp b/src/d/actor/d_a_npc_grr.cpp index 640b88d2e7..a72f080ae6 100644 --- a/src/d/actor/d_a_npc_grr.cpp +++ b/src/d/actor/d_a_npc_grr.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_grr.h" +#include "d/actor/d_a_npc.h" #include "Z2AudioLib/Z2Instances.h" enum grR_RES_File_ID { diff --git a/src/d/actor/d_a_npc_grz.cpp b/src/d/actor/d_a_npc_grz.cpp index 2e6816e5c1..5db112e1c5 100644 --- a/src/d/actor/d_a_npc_grz.cpp +++ b/src/d/actor/d_a_npc_grz.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_grz.h" +#include "d/actor/d_a_npc.h" #include "d/actor/d_a_obj_grz_rock.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_npc_gwolf.cpp b/src/d/actor/d_a_npc_gwolf.cpp index 8a017a13ef..7cd4e10aaa 100644 --- a/src/d/actor/d_a_npc_gwolf.cpp +++ b/src/d/actor/d_a_npc_gwolf.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_gwolf.h" +#include "d/actor/d_a_npc.h" #include "Z2AudioLib/Z2Instances.h" #include "d/d_camera.h" diff --git a/src/d/actor/d_a_npc_impal.cpp b/src/d/actor/d_a_npc_impal.cpp index 87c2de0838..1959437996 100644 --- a/src/d/actor/d_a_npc_impal.cpp +++ b/src/d/actor/d_a_npc_impal.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_impal.h" +#include "d/actor/d_a_npc.h" /* 80A0C270-80A0C2E0 000000 0070+00 12/12 0/0 0/0 .rodata m__18daNpcImpal_Param_c */ daNpcImpal_HIOParam const daNpcImpal_Param_c::m = { diff --git a/src/d/actor/d_a_npc_ins.cpp b/src/d/actor/d_a_npc_ins.cpp index d547cd9bfe..cef93417fd 100644 --- a/src/d/actor/d_a_npc_ins.cpp +++ b/src/d/actor/d_a_npc_ins.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_ins.h" +#include "d/actor/d_a_npc.h" #include "d/d_meter2_info.h" #include "d/d_msg_object.h" diff --git a/src/d/actor/d_a_npc_kasi_hana.cpp b/src/d/actor/d_a_npc_kasi_hana.cpp index 03096b4125..121283e19c 100644 --- a/src/d/actor/d_a_npc_kasi_hana.cpp +++ b/src/d/actor/d_a_npc_kasi_hana.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_kasi_hana.h" +#include "d/actor/d_a_npc.h" #include "d/actor/d_a_npc_chin.h" #include "d/actor/d_a_npc_kasi_kyu.h" #include "d/actor/d_a_npc_kasi_mich.h" @@ -1577,7 +1578,7 @@ void* daNpcKasiHana_c::_srch_escape_tag(void* i_actor, void* i_data) { int daNpcKasiHana_c::getWolfPathNearIdx() { int iVar1 = 0; f32 fVar1 = 0.0f; - u16 numPnts = mPath.getNumPnts(); + int numPnts = mPath.getNumPnts(); cXyz sp44, sp50; int rv = 0; diff --git a/src/d/actor/d_a_npc_kasi_kyu.cpp b/src/d/actor/d_a_npc_kasi_kyu.cpp index 2f9cf87c5e..8c9f4cf4b9 100644 --- a/src/d/actor/d_a_npc_kasi_kyu.cpp +++ b/src/d/actor/d_a_npc_kasi_kyu.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_kasi_kyu.h" +#include "d/actor/d_a_npc.h" #include "Z2AudioLib/Z2Instances.h" enum kasi_kyu_RES_File_ID { @@ -945,7 +946,7 @@ void* daNpcKasiKyu_c::_srch_escape_tag(void* i_actor, void* i_data) { int daNpcKasiKyu_c::getWolfPathNearIdx() { int iVar1 = 0; f32 fVar1 = 0.0f; - u16 numPnts = mPath.getNumPnts(); + int numPnts = mPath.getNumPnts(); cXyz sp44, sp50; int rv = 0; diff --git a/src/d/actor/d_a_npc_kasi_mich.cpp b/src/d/actor/d_a_npc_kasi_mich.cpp index 9b30fb1388..8baff31d44 100644 --- a/src/d/actor/d_a_npc_kasi_mich.cpp +++ b/src/d/actor/d_a_npc_kasi_mich.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_kasi_mich.h" +#include "d/actor/d_a_npc.h" #include "Z2AudioLib/Z2Instances.h" enum kasi_mich_RES_File_ID { @@ -945,7 +946,7 @@ void* daNpcKasiMich_c::_srch_escape_tag(void* i_actor, void* i_data) { int daNpcKasiMich_c::getWolfPathNearIdx() { int iVar1 = 0; f32 fVar1 = 0.0f; - u16 numPnts = mPath.getNumPnts(); + int numPnts = mPath.getNumPnts(); cXyz sp44, sp50; int rv = 0; diff --git a/src/d/actor/d_a_npc_moi.cpp b/src/d/actor/d_a_npc_moi.cpp index f4f73792fe..44cee8a988 100644 --- a/src/d/actor/d_a_npc_moi.cpp +++ b/src/d/actor/d_a_npc_moi.cpp @@ -8,6 +8,7 @@ #include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_ep.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_npc_moi.h" #include "d/actor/d_a_npc_uri.h" diff --git a/src/d/actor/d_a_npc_myna2.cpp b/src/d/actor/d_a_npc_myna2.cpp index 59b0ac5009..4bf5a07f70 100644 --- a/src/d/actor/d_a_npc_myna2.cpp +++ b/src/d/actor/d_a_npc_myna2.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_myna2.h" +#include "d/actor/d_a_npc.h" #include "d/actor/d_a_player.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_npc_pachi_taro.cpp b/src/d/actor/d_a_npc_pachi_taro.cpp index 515fcc699a..22baee7467 100644 --- a/src/d/actor/d_a_npc_pachi_taro.cpp +++ b/src/d/actor/d_a_npc_pachi_taro.cpp @@ -8,6 +8,8 @@ #include "d/actor/d_a_npc_pachi_taro.h" #include "JSystem/JHostIO/JORFile.h" #include "d/actor/d_a_tag_pachi.h" +#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_npc_pachi_maro.h" #include "d/actor/d_a_npc_pachi_besu.h" #include "d/d_debug_viewer.h" diff --git a/src/d/actor/d_a_npc_rafrel.cpp b/src/d/actor/d_a_npc_rafrel.cpp index 4187445261..4c471fd903 100644 --- a/src/d/actor/d_a_npc_rafrel.cpp +++ b/src/d/actor/d_a_npc_rafrel.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_rafrel.h" +#include "d/actor/d_a_npc.h" /* 80AC0324-80AC0328 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ static daNpcRafrel_Param_c l_HIO; diff --git a/src/d/actor/d_a_npc_shoe.cpp b/src/d/actor/d_a_npc_shoe.cpp index 874a17f04d..30dc1f5453 100644 --- a/src/d/actor/d_a_npc_shoe.cpp +++ b/src/d/actor/d_a_npc_shoe.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_shoe.h" +#include "d/actor/d_a_npc.h" /* 80AEA3B0-80AEA41C 000000 006C+00 11/11 0/0 0/0 .rodata m__17daNpcShoe_Param_c */ const daNpcShoe_HIOParam daNpcShoe_Param_c::m = { diff --git a/src/d/actor/d_a_npc_soldierA.cpp b/src/d/actor/d_a_npc_soldierA.cpp index 0d37ba60ea..dea383a2ca 100644 --- a/src/d/actor/d_a_npc_soldierA.cpp +++ b/src/d/actor/d_a_npc_soldierA.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_soldierA.h" +#include "d/actor/d_a_npc.h" #include "d/d_debug_viewer.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_npc_soldierB.cpp b/src/d/actor/d_a_npc_soldierB.cpp index 42a3250100..6feb2be67d 100644 --- a/src/d/actor/d_a_npc_soldierB.cpp +++ b/src/d/actor/d_a_npc_soldierB.cpp @@ -5,9 +5,10 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep -#include "Z2AudioLib/Z2Instances.h" -#include "d/actor/d_a_npc_soldierA.h" #include "d/actor/d_a_npc_soldierB.h" +#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc_soldierA.h" +#include "Z2AudioLib/Z2Instances.h" enum Joint { /* 0x00 */ JNT_CENTER, diff --git a/src/d/actor/d_a_npc_the.cpp b/src/d/actor/d_a_npc_the.cpp index 705a307c74..55e530af22 100644 --- a/src/d/actor/d_a_npc_the.cpp +++ b/src/d/actor/d_a_npc_the.cpp @@ -5,10 +5,11 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/actor/d_a_npc_the.h" +#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_tag_evtarea.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" -#include "d/actor/d_a_npc_the.h" -#include "d/actor/d_a_tag_evtarea.h" /* 80AFBE0C-80AFBE78 000000 006C+00 11/11 0/0 0/0 .rodata m__16daNpcThe_Param_c */ const daNpcThe_HIOParam daNpcThe_Param_c::m = { diff --git a/src/d/actor/d_a_npc_tkc.cpp b/src/d/actor/d_a_npc_tkc.cpp index 8f11727878..271e1cf1f7 100644 --- a/src/d/actor/d_a_npc_tkc.cpp +++ b/src/d/actor/d_a_npc_tkc.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_tkc.h" +#include "d/actor/d_a_npc.h" #include "d/d_camera.h" enum Tkc_RES_File_ID { diff --git a/src/d/actor/d_a_npc_tkj.cpp b/src/d/actor/d_a_npc_tkj.cpp index 5e1062c04e..58e485b881 100644 --- a/src/d/actor/d_a_npc_tkj.cpp +++ b/src/d/actor/d_a_npc_tkj.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_tkj.h" +#include "d/actor/d_a_npc4.h" /* 805766D4-805766DC 000020 0008+00 1/1 0/0 0/0 .data l_bmdData */ static int l_bmdData[1][2] = { diff --git a/src/d/actor/d_a_npc_tks.cpp b/src/d/actor/d_a_npc_tks.cpp index 1bff4d51b0..63f8e8e381 100644 --- a/src/d/actor/d_a_npc_tks.cpp +++ b/src/d/actor/d_a_npc_tks.cpp @@ -6,8 +6,9 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_tks.h" -#include "d/d_a_obj.h" +#include "d/actor/d_a_npc.h" #include "d/actor/d_a_npc_tkc.h" +#include "d/d_a_obj.h" #include "d/d_meter2_info.h" #include "f_op/f_op_kankyo_mng.h" diff --git a/src/d/actor/d_a_npc_zrc.cpp b/src/d/actor/d_a_npc_zrc.cpp index a216a13f5b..aafaac83b5 100644 --- a/src/d/actor/d_a_npc_zrc.cpp +++ b/src/d/actor/d_a_npc_zrc.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_zrc.h" +#include "d/actor/d_a_npc.h" #include "SSystem/SComponent/c_math.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_npc_zrz.cpp b/src/d/actor/d_a_npc_zrz.cpp index 8c265016e1..8902c20186 100644 --- a/src/d/actor/d_a_npc_zrz.cpp +++ b/src/d/actor/d_a_npc_zrz.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_zrz.h" +#include "d/actor/d_a_npc.h" #include "SSystem/SComponent/c_math.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "d/actor/d_a_obj_grave_stone.h" diff --git a/src/d/actor/d_a_obj_gadget.cpp b/src/d/actor/d_a_obj_gadget.cpp index d16d1dbb5e..8d874ca788 100644 --- a/src/d/actor/d_a_obj_gadget.cpp +++ b/src/d/actor/d_a_obj_gadget.cpp @@ -7,6 +7,7 @@ #include "d/actor/d_a_obj_gadget.h" #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_path.h" #include "d/d_cc_d.h" #include "Z2AudioLib/Z2Instances.h" diff --git a/src/d/actor/d_a_obj_gra2.cpp b/src/d/actor/d_a_obj_gra2.cpp index d2a59b8bf8..fb45898630 100644 --- a/src/d/actor/d_a_obj_gra2.cpp +++ b/src/d/actor/d_a_obj_gra2.cpp @@ -6,7 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_gra2.h" -#include "Z2AudioLib/Z2Instances.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_tag_gra.h" #include "d/d_bg_w.h" #include "d/d_cc_uty.h" @@ -16,9 +16,8 @@ #include "d/d_debug_viewer.h" #endif #include "d/d_msg_object.h" -#include "d/d_attention.h" #include "f_op/f_op_camera_mng.h" -#include +#include "Z2AudioLib/Z2Instances.h" class daObj_GrA_Param_c { public: diff --git a/src/d/actor/d_a_obj_gra_rock.cpp b/src/d/actor/d_a_obj_gra_rock.cpp index 68e81a8209..6c39a914b9 100644 --- a/src/d/actor/d_a_obj_gra_rock.cpp +++ b/src/d/actor/d_a_obj_gra_rock.cpp @@ -7,6 +7,7 @@ #include "d/actor/d_a_obj_gra_rock.h" #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_bg_w.h" static void dummy() { diff --git a/src/d/actor/d_a_obj_kago.cpp b/src/d/actor/d_a_obj_kago.cpp index 9b1e7568cb..8b58c87d71 100644 --- a/src/d/actor/d_a_obj_kago.cpp +++ b/src/d/actor/d_a_obj_kago.cpp @@ -9,9 +9,9 @@ #include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_cc_d.h" #include "d/d_com_inf_game.h" -#include "dol2asm.h" #include "f_op/f_op_actor_mng.h" /* ############################################################################################## */ diff --git a/src/d/actor/d_a_obj_kbacket.cpp b/src/d/actor/d_a_obj_kbacket.cpp index f8887abc23..295b4d4f57 100644 --- a/src/d/actor/d_a_obj_kbacket.cpp +++ b/src/d/actor/d_a_obj_kbacket.cpp @@ -7,11 +7,10 @@ #include "d/actor/d_a_obj_kbacket.h" #include "SSystem/SComponent/c_counter.h" -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_player.h" #include "d/d_cc_d.h" #include "d/d_com_inf_game.h" -#include "dol2asm.h" // // Declarations: diff --git a/src/d/actor/d_a_obj_mie.cpp b/src/d/actor/d_a_obj_mie.cpp index b8b632c61a..644bdae0ce 100644 --- a/src/d/actor/d_a_obj_mie.cpp +++ b/src/d/actor/d_a_obj_mie.cpp @@ -6,11 +6,12 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_mie.h" -#include "d/actor/d_a_npc_pouya.h" #include "d/actor/d_a_npc.h" -#include "SSystem/SComponent/c_counter.h" +#include "d/actor/d_a_npc4.h" +#include "d/actor/d_a_npc_pouya.h" #include "d/d_path.h" #include "d/d_cc_d.h" +#include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2Instances.h" /* 80C95B88-80C95B90 000000 0008+00 3/3 0/0 0/0 .data l_bmdData */ diff --git a/src/d/actor/d_a_obj_pumpkin.cpp b/src/d/actor/d_a_obj_pumpkin.cpp index d19aec1356..70eb6f0c00 100644 --- a/src/d/actor/d_a_obj_pumpkin.cpp +++ b/src/d/actor/d_a_obj_pumpkin.cpp @@ -6,14 +6,15 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_pumpkin.h" +#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" +#include "d/actor/d_a_npc_jagar.h" #include "d/d_cc_d.h" +#include "d/d_cc_uty.h" #if DEBUG #include "SSystem/SComponent/c_counter.h" #include "JSystem/JHostIO/JORFile.h" #endif -#include "d/actor/d_a_npc.h" -#include "d/d_cc_uty.h" -#include "d/actor/d_a_npc_jagar.h" /* ############################################################################################## */ /* 80CB8370-80CB83A4 000000 0034+00 5/5 0/0 0/0 .rodata m__21daObj_Pumpkin_Param_c */ diff --git a/src/d/actor/d_a_obj_tks.cpp b/src/d/actor/d_a_obj_tks.cpp index aa0bfeb90e..2175fba353 100644 --- a/src/d/actor/d_a_obj_tks.cpp +++ b/src/d/actor/d_a_obj_tks.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_tks.h" +#include "d/actor/d_a_npc.h" #include "d/d_camera.h" #include "d/d_com_inf_game.h" diff --git a/src/d/actor/d_a_obj_yel_bag.cpp b/src/d/actor/d_a_obj_yel_bag.cpp index 21ee47accb..ca5108b762 100644 --- a/src/d/actor/d_a_obj_yel_bag.cpp +++ b/src/d/actor/d_a_obj_yel_bag.cpp @@ -7,6 +7,7 @@ #include "d/actor/d_a_obj_yel_bag.h" #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_com_inf_game.h" #include "Z2AudioLib/Z2Instances.h" #include "SSystem/SComponent/c_lib.h" diff --git a/src/d/actor/d_a_tag_allmato.cpp b/src/d/actor/d_a_tag_allmato.cpp index f3e20f33a7..cc3ef0b8de 100644 --- a/src/d/actor/d_a_tag_allmato.cpp +++ b/src/d/actor/d_a_tag_allmato.cpp @@ -1,6 +1,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_tag_allmato.h" +#include "d/actor/d_a_npc4.h" #include "d/actor/d_a_obj_itamato.h" #include "d/actor/d_a_obj_boumato.h" #include "d/actor/d_a_arrow.h" diff --git a/src/d/actor/d_a_tag_evtmsg.cpp b/src/d/actor/d_a_tag_evtmsg.cpp index 9e6ee9bdf7..af5f9c7f50 100644 --- a/src/d/actor/d_a_tag_evtmsg.cpp +++ b/src/d/actor/d_a_tag_evtmsg.cpp @@ -6,7 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_tag_evtmsg.h" -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" diff --git a/src/d/actor/d_a_tag_mstop.cpp b/src/d/actor/d_a_tag_mstop.cpp index 24ce937dcd..24addcce62 100644 --- a/src/d/actor/d_a_tag_mstop.cpp +++ b/src/d/actor/d_a_tag_mstop.cpp @@ -8,7 +8,7 @@ #include "d/actor/d_a_tag_mstop.h" #include "d/actor/d_a_midna.h" #include "d/actor/d_a_player.h" -#include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "f_op/f_op_actor_mng.h" /* 805A6138-805A6318 000078 01E0+00 1/1 0/0 0/0 .text create__12daTagMstop_cFv */ diff --git a/src/d/actor/d_a_tag_push.cpp b/src/d/actor/d_a_tag_push.cpp index 5d238291e4..8f16f32751 100644 --- a/src/d/actor/d_a_tag_push.cpp +++ b/src/d/actor/d_a_tag_push.cpp @@ -6,6 +6,7 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_tag_push.h" +#include "d/actor/d_a_npc4.h" #include "d/d_procname.h" /* 804902B8-80490418 000078 0160+00 2/1 0/0 0/0 .text srchActor__12daTag_Push_cFPvPv */ diff --git a/src/d/d_bg_s.cpp b/src/d/d_bg_s.cpp index e5d497e06c..58059a2d6d 100644 --- a/src/d/d_bg_s.cpp +++ b/src/d/d_bg_s.cpp @@ -552,7 +552,7 @@ u32 dBgS::ChkGrpInf(cBgS_PolyInfo const& poly, u32 param_1) { } /* 80075100-8007519C 06FA40 009C+00 0/0 16/16 60/60 .text GetRoomId__4dBgSFRC13cBgS_PolyInfo */ -s32 dBgS::GetRoomId(cBgS_PolyInfo const& poly) { +int dBgS::GetRoomId(cBgS_PolyInfo const& poly) { if (!poly.ChkSetInfo()) { return -1; } diff --git a/src/d/d_meter2_info.cpp b/src/d/d_meter2_info.cpp index 324d80aa66..f90c33566a 100644 --- a/src/d/d_meter2_info.cpp +++ b/src/d/d_meter2_info.cpp @@ -4,6 +4,7 @@ #include "JSystem/JMessage/JMessage.h" #include "JSystem/JUtility/JUTFont.h" #include "d/actor/d_a_npc.h" +#include "d/actor/d_a_npc4.h" #include "d/d_item_data.h" #include "d/d_meter2.h" #include "d/d_meter2_info.h"