diff --git a/include/d/actor/d_a_npc_gwolf.h b/include/d/actor/d_a_npc_gwolf.h index 923af28f795..1f2932ea13c 100644 --- a/include/d/actor/d_a_npc_gwolf.h +++ b/include/d/actor/d_a_npc_gwolf.h @@ -11,7 +11,7 @@ * @details * */ -class daNpc_GWolf_c : public fopAc_ac_c { +class daNpc_GWolf_c : public daNpcF_c { public: /* 809F30AC */ daNpc_GWolf_c(); /* 809F34C0 */ void create(); @@ -47,18 +47,18 @@ public: /* 809F797C */ void test(void*); /* 809F7A30 */ void getGroundSlope(dBgS_ObjAcch&, s16); - /* 809F32C0 */ ~daNpc_GWolf_c(); - /* 809F4258 */ void setParam(); - /* 809F4390 */ BOOL main(); - /* 809F4558 */ BOOL ctrlBtk(); - /* 809F4638 */ void adjustShapeAngle(); - /* 809F4698 */ void setAttnPos(); - /* 809F4BB0 */ bool setExpressionAnm(int, bool); - /* 809F4BB8 */ void setExpression(int, f32); - /* 809F4BBC */ bool setMotionAnm(int, f32); - /* 809F4DE8 */ void setMotion(int, f32, int); - /* 809F4E2C */ BOOL drawDbgInfo(); - /* 809F4E34 */ void drawOtherMdls(); + /* 809F32C0 */ virtual ~daNpc_GWolf_c(); + /* 809F4258 */ virtual void setParam(); + /* 809F4390 */ virtual BOOL main(); + /* 809F4558 */ virtual BOOL ctrlBtk(); + /* 809F4638 */ virtual void adjustShapeAngle(); + /* 809F4698 */ virtual void setAttnPos(); + /* 809F4BB0 */ virtual bool setExpressionAnm(int, bool); + /* 809F4BB8 */ virtual void setExpression(int, f32); + /* 809F4BBC */ virtual void setMotionAnm(int, f32); + /* 809F4DE8 */ virtual void setMotion(int, f32, int); + /* 809F4E2C */ virtual BOOL drawDbgInfo(); + /* 809F4E34 */ virtual void drawOtherMdls(); void setHowlingEndFlag() { field_0xe1c = 2; } void setHowlingFlag() { field_0xe1c = 1; } @@ -67,14 +67,17 @@ public: static u8 mEvtCutList[60]; private: - // /* 0xB48 */ Z2Creature mCreature; - // /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; - // /* 0xBDC */ daNpcF_Lookat_c mLookAt; - // /* 0xC78 */ daNpcF_ActorMngr_c mActorMng[2]; - // /* 0xC88 */ u8 field_0xc88[4]; - // /* 0xC8C */ dCcD_Cyl mCyl; - // /* 0xDC8 */ u8 field_0xdc8[0xE1C - 0xdc8]; - /* 0x568 */ u8 field_0xb48[0xE1C - 0x568]; + /* 0xB48 */ Z2Creature mSound; + /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; + /* 0xBDC */ daNpcF_Lookat_c mLookAt; + /* 0xC78 */ daNpcF_ActorMngr_c mActorMng[2]; + /* 0xC88 */ u8 field_0xC88[0xC8C - 0xC88]; + /* 0xC8C */ dCcD_Cyl mCcCyl; + /* 0xDC8 */ u8 field_0xDC8[0xE08 - 0xDC8]; + /* 0xE08 */ int field_0xe08; + /* 0xE0C */ u8 field_0xE0C[0xE14 - 0xE0C]; + /* 0xE14 */ u32 field_0xe14; + /* 0xE18 */ u8 field_0xe18[0xE1C - 0xE18]; /* 0xE1C */ u8 field_0xe1c; }; diff --git a/include/d/actor/d_a_npc_kn.h b/include/d/actor/d_a_npc_kn.h index 5515aa64734..10808152563 100644 --- a/include/d/actor/d_a_npc_kn.h +++ b/include/d/actor/d_a_npc_kn.h @@ -16,6 +16,24 @@ public: typedef int (daNpc_Kn_c::*cutFunc)(int); typedef int (daNpc_Kn_c::*actionFunc)(void*); + enum AnmFlags { + ANM_PAUSE_MORF = 0x1, + ANM_PAUSE_BTK = 0x2, + ANM_PAUSE_BRK = 0x4, + ANM_PAUSE_BPK = 0x8, + ANM_PAUSE_BCK = 0x10, + ANM_PAUSE_BTP = 0x20, + ANM_PLAY_MORF = 0x40, + ANM_PLAY_BTK = 0x80, + ANM_PLAY_BRK = 0x100, + ANM_PLAY_BPK = 0x200, + ANM_PLAY_BCK = 0x400, + ANM_PLAY_BTP = 0x800, + ANM_FLAG_1000 = 0x1000, + ANM_PAUSE_TIMER_BTP = 0x2000, + ANM_FLAG_4000 = 0x4000, + }; + class daNpc_Kn_prtclMngr_c { public: /* 80A2AF98 */ ~daNpc_Kn_prtclMngr_c() {}; @@ -32,9 +50,9 @@ public: /* 0x05AC */ const daNpcT_faceMotionAnmData_c* mpFaceMotionAnmData; /* 0x05B0 */ const daNpcT_motionAnmData_c* mpMotionAnmData; /* 0x05B4 */ const daNpcT_evtData_c* mpEventData; - /* 0x05B8 */ char** field_0x5B8; - /* 0x05BC */ mDoExt_McaMorfSO* mpMorf[2]; - /* 0x05C4 */ Z2Creature mCreature; + /* 0x05B8 */ char** mpArcNames; + /* 0x05BC */ mDoExt_McaMorfSO* mpModelMorf[2]; + /* 0x05C4 */ Z2Creature mSound; /* 0x0654 */ mDoExt_bckAnm mBckAnm; /* 0x0670 */ mDoExt_btpAnm mBtpAnm; /* 0x0688 */ mDoExt_btkAnm mBtkAnm; @@ -48,70 +66,74 @@ public: /* 0x09A0 */ daNpcT_MatAnm_c* mpMatAnm; /* 0x09A4 */ u8 field_0x9a4[4]; /* 0x09A8 */ dMsgFlow_c mFlow; - /* 0x09F4 */ u8 field_0x9F4[0xa74 - 0x9f4]; + /* 0x09F4 */ dPaPoT_c field_0x9F4; /* 0x0A74 */ dCcD_Stts mCcStts2; /* 0x0AB0 */ u32 mFlowNodeNo; - /* 0x0AB4 */ f32 field_0xab4; - /* 0x0AB8 */ f32 field_0xab8; - /* 0x0ABC */ u8 field_0xABC; - /* 0x0ABD */ u8 field_0xABD; - /* 0x0ABE */ u8 field_0xABE[0xAC0 - 0xABE]; + /* 0x0AB4 */ f32 mExpressionMorfFrame; + /* 0x0AB8 */ f32 mMorfFrames; + /* 0x0ABC */ u8 mCreating; + /* 0x0ABD */ u8 mTwilight; /* 0x0AC0 */ dBgS_GndChk mGndChk2; /* 0x0B14 */ dBgS_LinChk mLinChk; - /* 0x0B84 */ daNpcT_MotionSeqMngr_c mMotionSeqMngr1; - /* 0x0BA8 */ daNpcT_MotionSeqMngr_c mMotionSeqMngr2; + /* 0x0B84 */ daNpcT_MotionSeqMngr_c mFaceMotionSeqMngr; + /* 0x0BA8 */ daNpcT_MotionSeqMngr_c mMotionSeqMngr; /* 0x0BCC */ daNpcT_ActorMngr_c mActorMngr1; /* 0x0BD4 */ daNpcT_ActorMngr_c mActorMngr2; /* 0x0BDC */ daNpcT_JntAnm_c mJntAnm; /* 0x0D3C */ daNpcT_DmgStagger_c mDmgStagger; - /* 0x0D58 */ cXyz field_0xd58; - /* 0x0D64 */ cXyz field_0xD64; - /* 0x0D70 */ cXyz field_0xD70; - /* 0x0D7C */ cXyz field_0xD7C; - /* 0x0D88 */ cXyz field_0xD88; - /* 0x0D94 */ cXyz field_0xD94; + /* 0x0D58 */ cXyz mFootLPos; + /* 0x0D64 */ cXyz mFootRPos; + /* 0x0D70 */ cXyz mFootLOffset; + /* 0x0D7C */ cXyz mFootROffset; + /* 0x0D88 */ cXyz mOldFootLOffset; + /* 0x0D94 */ cXyz mOldFootROffset; /* 0x0DA0 */ cXyz field_0xDA0; - /* 0x0DAC */ csXyz mTargetAngle; + /* 0x0DAC */ csXyz mCurAngle; /* 0x0DB2 */ csXyz field_0xDB2; /* 0x0DB8 */ csXyz field_0xDB8; /* 0x0DBE */ csXyz field_0xDBE; - /* 0x0DC4 */ s32 field_0xdc4; + /* 0x0DC4 */ fpc_ProcID mItemPartnerId; /* 0x0DC8 */ u32 mShadowKey; - /* 0x0DCC */ u32 field_0xdcc; - /* 0x0DD0 */ u32 field_0xdd0; - /* 0x0DD4 */ s32 mStaffId; + /* 0x0DCC */ u32 mAnmFlags; + /* 0x0DD0 */ fpc_ProcID mMsgId; + /* 0x0DD4 */ int mStaffId; /* 0x0DD8 */ int mCutType; /* 0x0DDC */ int field_0xddc; - /* 0x0DE0 */ int field_0xde0; + /* 0x0DE0 */ int mTimerStart; /* 0x0DE4 */ int mTimer; - /* 0x0DE8 */ int field_0xde8; + /* 0x0DE8 */ int mBtpPauseTimer; /* 0x0DEC */ int field_0xdec; - /* 0x0DF0 */ s16 field_0xdf0; - /* 0x0DF2 */ u8 field_0xdf2[0x0DFA - 0x0DF2]; - /* 0x0DFA */ s16 field_0xdfa; - /* 0x0DFC */ u8 field_0xdfc[0x0DFE - 0x0DFC]; - /* 0x0DFE */ s16 field_0xdfe; - /* 0x0E00 */ s16 field_0xe00; - /* 0x0E04 */ f32 field_0xe04; + /* 0x0DF0 */ s16 mGroundAngle; + /* 0x0DF2 */ s16 field_0xdf2; + /* 0x0DF4 */ s16 mFootLPolyAngle; + /* 0x0DF5 */ u8 field_0xdf5[0x0DF8 - 0x0DF6]; + /* 0x0DF8 */ s16 mFootRPolyAngle; + /* 0x0DFA */ s16 mStartAngle; + /* 0x0DFC */ s16 mTargetAngle; + /* 0x0DFE */ s16 mStepMode; + /* 0x0E00 */ s16 mTurnAmount; + /* 0x0E04 */ f32 mTurnCount; /* 0x0E08 */ u8 field_0xe08[0x0E0C - 0x0E08]; /* 0x0E0C */ f32 field_0xe0c; /* 0x0E10 */ f32 mRadius; /* 0x0E14 */ f32 mGroundHeight; - /* 0x0E18 */ u8 field_0xe18[0xe24 - 0xe18]; - /* 0x0E24 */ s16 field_0xe24; - /* 0x0E26 */ u16 field_0xe26; - /* 0x0E28 */ u16 field_0xe28; - /* 0x0E2A */ u16 field_0xe2a; + /* 0x0E18 */ u8 field_0xe18[0xe1c - 0xe18]; + /* 0x0E1C */ u32 mHitodamaPrtclKey[2]; + /* 0x0E24 */ s16 mEvtId; + /* 0x0E26 */ u16 mMorfLoops; + /* 0x0E28 */ u16 mBckLoops; + /* 0x0E2A */ u16 mMode; /* 0x0E2C */ u8 field_0xe2c; /* 0x0E2D */ u8 field_0xe2d; - /* 0x0E2E */ u8 field_0xe2e[0xe30 - 0xe2e]; + /* 0x0E2E */ u8 mFootLOnGround; + /* 0x0E2F */ u8 mFootROnGround; /* 0x0E30 */ u8 field_0xe30; /* 0x0E31 */ u8 field_0xe31; - /* 0x0E32 */ u8 field_0xe32; + /* 0x0E32 */ u8 mNoDraw; /* 0x0E33 */ u8 field_0xe33; - /* 0x0E33 */ u8 field_0xe34[0xe36 - 0xe34]; - /* 0x0E36 */ u16 mEvtIdx; - /* 0x0E38 */ u8 field_0xe38; + /* 0x0E34 */ u8 field_0xe34; + /* 0x0E36 */ u16 mEvtNo; + /* 0x0E38 */ u8 mSpeakEvent; /* 0x0E39 */ u8 field_0xe39; /* 0x0E3A */ u8 field_0xe3a; /* 0x0E3B */ u8 field_0xe3b; @@ -120,27 +142,21 @@ public: public: void initialize() { - memset(&field_0xd58, 0, (int)&field_0xe3c - (int)&field_0xd58); + memset(&mFootLPos, 0, (int)&field_0xe3c - (int)&mFootLPos); - mMotionSeqMngr1.initialize(); - mMotionSeqMngr2.initialize(); + mFaceMotionSeqMngr.initialize(); + mMotionSeqMngr.initialize(); mActorMngr1.initialize(); mActorMngr2.initialize(); mJntAnm.initialize(); mDmgStagger.initialize(); - field_0xdc4 = -1; + mItemPartnerId = -1; field_0xe2d = 1; - field_0x15a4 = 0; + mPodAnmFlags = 0; } bool checkHide() { - bool ret = false; - - if (field_0xe2c != 0 || (!dComIfGs_wolfeye_effect_check() && field_0xABD != 0)) { - ret = true; - } - - return ret; + return field_0xe2c != 0 || (!dComIfGs_wolfeye_effect_check() && mTwilight != 0); } int getHeadJointNo() { @@ -155,16 +171,21 @@ public: return 1; } + bool checkChangeJoint(int i_jointNo) { return i_jointNo == 4; } + bool checkRemoveJoint(int i_jointNo) { return i_jointNo == 5; } + void setCutType(int i_type) { mCutType = i_type;} void setActionMode(s8 i_actionMode) { mActionMode = i_actionMode;} s8 getActionMode() { return mActionMode; } + + void setTalkFlag(u8 i_flag) { field_0x15bd = i_flag; } - /* 80A2AFD4 */ s32 create(); - /* 80A2B278 */ s32 CreateHeap(); - /* 80A2B620 */ s32 Delete(); - /* 80A2B654 */ s32 Execute(); - /* 80A2B6B0 */ void Draw(); + /* 80A2AFD4 */ int create(); + /* 80A2B278 */ int CreateHeap(); + /* 80A2B620 */ int Delete(); + /* 80A2B654 */ int Execute(); + /* 80A2B6B0 */ int Draw(); /* 80A2B764 */ static int createHeapCallBack(fopAc_ac_c*); /* 80A2B784 */ static int ctrlJointCallBack(J3DJoint*, int); /* 80A2B7DC */ u8 getType(); @@ -184,7 +205,7 @@ public: /* 80A2C1D0 */ void setAfterTalkMotion(); /* 80A2C230 */ void srchActors(); /* 80A2C234 */ bool evtTalk(); - /* 80A2C318 */ bool evtCutProc(); + /* 80A2C318 */ BOOL evtCutProc(); /* 80A2C3FC */ void action(); /* 80A2C484 */ void beforeMove(); /* 80A2C4FC */ void afterMoved(); @@ -253,18 +274,18 @@ public: /* 80A37D20 */ void calcSwordAttackMove(int); /* 80A3805C */ void setSe(); /* 80A38520 */ static void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); - /* 80A38550 */ void getTrnsfrmAnmP(char const*, int); - /* 80A3858C */ void* getTrnsfrmKeyAnmP(char const*, int); - /* 80A385C8 */ void getTexPtrnAnmP(char const*, int); - /* 80A38604 */ void getTexSRTKeyAnmP(char const*, int); - /* 80A38640 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); + /* 80A38550 */ J3DAnmTransform* getTrnsfrmAnmP(char const*, int); + /* 80A3858C */ J3DAnmTransformKey* getTrnsfrmKeyAnmP(char const*, int); + /* 80A385C8 */ J3DAnmTexPattern* getTexPtrnAnmP(char const*, int); + /* 80A38604 */ J3DAnmTextureSRTKey* getTexSRTKeyAnmP(char const*, int); + /* 80A38640 */ BOOL setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); /* 80A38684 */ int setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); - /* 80A3877C */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); - /* 80A387BC */ void setBtkAnm(J3DAnmTextureSRTKey*, J3DModelData*, f32, int); - /* 80A387FC */ cPhs__Step loadRes(s8 const*, char const**); + /* 80A3877C */ BOOL setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); + /* 80A387BC */ BOOL setBtkAnm(J3DAnmTextureSRTKey*, J3DModelData*, f32, int); + /* 80A387FC */ int loadRes(s8 const*, char const**); /* 80A388B0 */ void deleteRes(s8 const*, char const**); - /* 80A38930 */ s32 execute(); - /* 80A38BB8 */ int draw(int, int, f32, _GXColorS10*, f32, int, int, int); + /* 80A38930 */ int execute(); + /* 80A38BB8 */ int draw(int, int, f32, GXColorS10*, f32, int, int, int); /* 80A38FAC */ void setEnvTevColor(); /* 80A39008 */ void setRoomNo(); /* 80A3904C */ BOOL checkEndAnm(f32); @@ -279,21 +300,28 @@ public: /* 80A3A7C0 */ bool setMotionAnm(int, f32, int); /* 80A3AA58 */ void setPos(cXyz); /* 80A3AAF0 */ void setAngle(s16); - /* 80A3AB18 */ int chkActorInSight(fopAc_ac_c*, f32, s16); - /* 80A3AC24 */ int chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); - /* 80A3ACD4 */ void chkPointInArea(cXyz, cXyz, cXyz, s16); + /* 80A3AB18 */ BOOL chkActorInSight(fopAc_ac_c*, f32, s16); + /* 80A3AC24 */ BOOL chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); + /* 80A3ACD4 */ BOOL chkPointInArea(cXyz, cXyz, cXyz, s16); /* 80A3AD50 */ int chkFindPlayer(int, s16); /* 80A3AF64 */ BOOL srchPlayerActor(); /* 80A3B000 */ cXyz getAttnPos(fopAc_ac_c*); /* 80A3B074 */ BOOL turn(s16, int, int); - /* 80A3B220 */ s32 step(s16, int, int, int, int); - /* 80A3B3E8 */ s32 initTalk(int, fopAc_ac_c**); + /* 80A3B220 */ int step(s16, int, int, int, int); + /* 80A3B3E8 */ int initTalk(int, fopAc_ac_c**); /* 80A3B448 */ BOOL talkProc(int*, int, fopAc_ac_c**, int); /* 80A3B5EC */ void setHitodamaPrtcl(); - /* 80A3B82C */ daNpc_Kn_c(daNpcT_faceMotionAnmData_c const*, daNpcT_motionAnmData_c const*, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, - daNpcT_evtData_c const*, char**); + /* 80A3B82C */ daNpc_Kn_c(daNpcT_faceMotionAnmData_c const* param_0, + daNpcT_motionAnmData_c const* param_1, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_2, int param_3, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_4, int param_5, + daNpcT_evtData_c const* param_6, char** param_7) + : mpFaceMotionAnmData(param_0), mpMotionAnmData(param_1), mFaceMotionSeqMngr(param_2, param_3), + mMotionSeqMngr(param_4, param_5), mpEventData(param_6), mpArcNames(param_7) + { + OS_REPORT("|%06d:%x|daNpc_Kn_c -> コンストラクト\n", g_Counter.mCounter0, this); + initialize(); + } /* 80A3C998 */ u32 setParamTeach01(); /* 80A3CB14 */ void setCollisionTeach01(); /* 80A3CBFC */ void teach01_selectAction(); @@ -314,32 +342,33 @@ public: /* 80A3F99C */ int ECut_secondSkillExplain(int); /* 80A3FFB4 */ int ECut_reflectExplain(int); /* 80A403B8 */ int ECut_secondSkillGet(int); + /* 80A3949C */ virtual int ctrlBtk(); - /* 80A3B7B4 */ virtual s32 getFootLJointNo(); - /* 80A3B7AC */ virtual s32 getFootRJointNo(); - /* 80A3BD1C */ virtual u16 getEyeballLMaterialNo(); - /* 80A3BD24 */ virtual u16 getEyeballRMaterialNo(); - /* 80A3BD14 */ virtual u16 getEyeballMaterialNo(); + /* 80A3B7B4 */ virtual int getFootLJointNo() { return -1; } + /* 80A3B7AC */ virtual int getFootRJointNo() { return -1; } + /* 80A3BD1C */ virtual u16 getEyeballLMaterialNo() { return 0; } + /* 80A3BD24 */ virtual u16 getEyeballRMaterialNo() { return 0; } + /* 80A3BD14 */ virtual u16 getEyeballMaterialNo() { return 0; } /* 80A3989C */ virtual int ctrlJoint(J3DJoint*, J3DModel*); - /* 80A3B720 */ virtual void afterJntAnm(int); - /* 80A3B7A4 */ virtual BOOL checkChangeEvt(); + /* 80A3B720 */ virtual void afterJntAnm(int) {} + /* 80A3B7A4 */ virtual BOOL checkChangeEvt() { return FALSE; } + /* 80A3B79C */ virtual BOOL evtEndProc() { return TRUE; } /* 80A39BBC */ virtual int evtProc(); - /* 80A3B79C */ virtual BOOL evtEndProc(); /* 80A39DBC */ virtual void setFootPos(); /* 80A39F84 */ virtual void setFootPrtcl(cXyz*, f32); /* 80A3A254 */ virtual bool checkCullDraw(); /* 80A3A25C */ virtual void twilight(); - /* 80A3B7BC */ virtual BOOL chkXYItems(); + /* 80A3B7BC */ virtual BOOL chkXYItems() { return FALSE; } /* 80A3A2A8 */ virtual void evtOrder(); /* 80A3B708 */ virtual void decTmr(); /* 80A3A504 */ virtual void clrParam(); - /* 80A3B7C4 */ virtual bool afterSetFaceMotionAnm(int, int, f32, int); + /* 80A3B7C4 */ virtual bool afterSetFaceMotionAnm(int, int, f32, int) { return true; } /* 80A3B7CC */ virtual daNpcT_faceMotionAnmData_c getFaceMotionAnm(daNpcT_faceMotionAnmData_c); /* 80A3B7FC */ virtual daNpcT_motionAnmData_c getMotionAnm(daNpcT_motionAnmData_c); /* 80A2AA0C */ virtual ~daNpc_Kn_c(); /* 80A2D060 */ virtual bool afterSetMotionAnm(int, int, f32, int); - static u8 const mCcDObjData[48]; + static const dCcD_SrcGObjInf mCcDObjData; static dCcD_SrcCyl mCcDCyl; static dCcD_SrcSph mCcDSph; static char* mCutNameList[21]; @@ -349,14 +378,14 @@ public: static u8 mFindCount[4]; private: - /* 0x0E44 */ J3DModel* mpModel; + /* 0x0E44 */ J3DModel* mpPodModel; /* 0x0E48 */ mDoExt_invisibleModel mInvisModel; /* 0x0E50 */ dKy_tevstr_c mTevStr; /* 0x11D8 */ u8 field_0x11D8[0x11DC - 0x11D8]; /* 0x11DC */ dCcD_Cyl mCylCc; /* 0x1318 */ dCcD_Sph mSphCc[2]; - /* 0x1588 */ mDoExt_bckAnm field_0x1588; - /* 0x15A4 */ u32 field_0x15a4; + /* 0x1588 */ mDoExt_bckAnm mPodBck; + /* 0x15A4 */ u32 mPodAnmFlags; /* 0x15A8 */ u32 field_0x15A8; /* 0x15AC */ u8 mType; /* 0x15AD */ u8 mDivideNo; @@ -371,16 +400,17 @@ private: /* 0x15CD */ u8 field_0x15cd; /* 0x15CE */ u8 field_0x15ce; /* 0x15CF */ u8 field_0x15cf; - /* 0x15D0 */ u16 field_0x15d0; - /* 0x15D4 */ s32 field_0x15d4[3]; + /* 0x15D0 */ s16 field_0x15d0; + /* 0x15D4 */ int field_0x15d4[3]; /* 0x15E0 */ daNpc_Kn_prtclMngr_c mParticleMngr[3]; /* 0x16F4 */ cXyz field_0x16f4; - /* 0x1700 */ u8 field_0x1700[0x170c - 0x1700]; + /* 0x1700 */ cXyz field_0x1700; /* 0x170C */ u8 field_0x170c; /* 0x170D */ u8 field_0x170d; /* 0x170E */ u8 field_0x170e; /* 0x170F */ u8 field_0x170f; - /* 0x1710 */ u8 field_0x1710[4]; + /* 0x1710 */ s16 field_0x1710; + /* 0x1712 */ s16 field_0x1712; /* 0x1714 */ actionFunc mpTeachAction; /* 0x1720 */ actionFunc mpActionFunc; /* 0x172C */ daNpcT_Path_c mPath; @@ -391,19 +421,19 @@ STATIC_ASSERT(sizeof(daNpc_Kn_c) == 0x1758); struct daNpc_Kn_HIOParam { /* 0x00 */ daNpcT_HIOParam common; - /* 0x8C */ s16 field_0x8c; - /* 0x8E */ s16 field_0x8e; - /* 0x90 */ s16 field_0x90; - /* 0x92 */ s16 field_0x92; - /* 0x94 */ f32 field_0x94; - /* 0x98 */ f32 field_0x98; - /* 0x9C */ f32 field_0x9c; - /* 0xA0 */ f32 field_0xa0; - /* 0xA4 */ f32 field_0xa4; - /* 0xA8 */ u32 field_0xa8; - /* 0xAC */ s16 field_0xac; - /* 0xAE */ s16 field_0xae; - /* 0xB0 */ f32 field_0xb0; + /* 0x8C */ s16 alpha; + /* 0x8E */ s16 attack_wait_time; + /* 0x90 */ s16 followup_wait_time; // ? + /* 0x94 */ f32 small_slide_distance; + /* 0x98 */ f32 big_slide_distance; + /* 0x9C */ f32 warp_distance; + /* 0xA0 */ f32 attack_disappear_speed_h; // ? + /* 0xA4 */ f32 attack_disappear_speed_v; // ? + /* 0xA8 */ s16 rotation_num; + /* 0xAA */ s16 rotation_speed; + /* 0xAC */ s16 attack_start_min_time; + /* 0xAE */ s16 attack_start_time_range; + /* 0xB0 */ f32 move_speed; }; class daNpc_Kn_Param_c { diff --git a/include/d/actor/d_a_obj_knBullet.h b/include/d/actor/d_a_obj_knBullet.h index 3eb2f03604f..ff63d41bc0f 100644 --- a/include/d/actor/d_a_obj_knBullet.h +++ b/include/d/actor/d_a_obj_knBullet.h @@ -23,6 +23,7 @@ public: /* 80C477B4 */ void hitPrtclSet(); u8 getActionMode() { return mActionMode; } + void setActionMode(u8 i_action) { mActionMode = i_action; } private: /* 0x568 */ u8 field_0x568[0x70c - 0x568]; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 8b8a3f1f3ea..58c188b6971 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -949,6 +949,12 @@ public: void onFishingRodReelEnd() { onEndResetFlg0(ERFLG0_UNK_20000); } void onFishingHit() { onEndResetFlg0(ERFLG0_UNK_10000); } void onFishingKeep() { onEndResetFlg2(ERFLG2_UNK_1); } + void onTraningCutHead() { onNoResetFlg3(FLG3_UNK_40); } + void onTraningCutFast() { onNoResetFlg3(FLG3_UNK_80); } + void onTraningCutLargeJump() { onNoResetFlg3(FLG3_UNK_200); } + void onTraningCutLargeTurn() { onNoResetFlg3(FLG3_UNK_100); } + void onTraningCutDown() { onNoResetFlg3(FLG3_UNK_10); } + void onTraningShieldAttack() { onNoResetFlg3(FLG3_UNK_8); } BOOL checkStickArrowReset() const { return checkResetFlg0(RFLG0_UNK_1); } u32 getCutAtFlg() const { return checkNoResetFlg0(FLG0_UNK_40); } diff --git a/include/d/d_meter2_info.h b/include/d/d_meter2_info.h index 7558a635d16..6865ac2ccb2 100644 --- a/include/d/d_meter2_info.h +++ b/include/d/d_meter2_info.h @@ -309,6 +309,7 @@ u8 dMeter2Info_getNewLetterNum(); int dMeter2Info_setNewLetterSender(); bool dMeter2Info_isItemOpenCheck(); bool dMeter2Info_isMapOpenCheck(); +s16 dMeter2Info_getNowLifeGauge(); inline void dMeter2Info_Initialize() { g_meter2_info.init(); diff --git a/src/d/actor/d_a_npc_gwolf.cpp b/src/d/actor/d_a_npc_gwolf.cpp index 5828b38b575..b7f20e9b7f9 100644 --- a/src/d/actor/d_a_npc_gwolf.cpp +++ b/src/d/actor/d_a_npc_gwolf.cpp @@ -1288,7 +1288,7 @@ void daNpc_GWolf_c::setExpression(int param_0, f32 param_1) { } /* 809F4BBC-809F4DE8 001BFC 022C+00 2/0 0/0 0/0 .text setMotionAnm__13daNpc_GWolf_cFif */ -bool daNpc_GWolf_c::setMotionAnm(int param_0, f32 param_1) { +void daNpc_GWolf_c::setMotionAnm(int param_0, f32 param_1) { // NONMATCHING } diff --git a/src/d/actor/d_a_npc_kn.cpp b/src/d/actor/d_a_npc_kn.cpp index f6f5b97709b..97dd13a3f31 100644 --- a/src/d/actor/d_a_npc_kn.cpp +++ b/src/d/actor/d_a_npc_kn.cpp @@ -1,194 +1,171 @@ /** * @file d_a_npc_kn.cpp - * -*/ + * + */ #include "d/dolzel_rel.h" -#include "d/actor/d_a_npc_kn.h" +#include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_npc.h" #include "d/actor/d_a_npc_gwolf.h" +#include "d/actor/d_a_npc_kn.h" #include "d/actor/d_a_obj_knBullet.h" -#include "JSystem//J3DGraphBase/J3DMaterial.h" -#include "Z2AudioLib/Z2Instances.h" +#include "d/d_meter2_info.h" -/* ############################################################################################## */ /* 80A408C8-80A408F8 000000 0030+00 50/50 0/0 0/0 .rodata mCcDObjData__10daNpc_Kn_c */ -const u8 daNpc_Kn_c::mCcDObjData[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +const dCcD_SrcGObjInf daNpc_Kn_c::mCcDObjData = { + {0, {{0, 0, 0}, {0, 0}, {0x79}}}, + {dCcD_SE_NONE, 0, 0, 0, 0}, + {dCcD_SE_NONE, 0, 0, 0, 0}, + {0}, }; #include "d/actor/d_a_npc_kn_base.inc" /* 80A40D54-80A40D98 000020 0044+00 1/1 0/0 0/0 .data mCcDCyl__10daNpc_Kn_c */ dCcD_SrcCyl daNpc_Kn_c::mCcDCyl = { - { - {0, {{0, 0, 0}, {0, 0}, {0}}}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0}, - }, + mCcDObjData, {{0.0f, 0.0f, 0.0f}, 0.0f, 0.0f}, }; /* 80A40D98-80A40DD8 000064 0040+00 1/1 0/0 0/0 .data mCcDSph__10daNpc_Kn_c */ dCcD_SrcSph daNpc_Kn_c::mCcDSph = { - { - {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x0}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + mCcDObjData, { {{0.0f, 0.0f, 0.0f}, 0.0f} // mSphCc - } + }, }; /* 80A40DD8-80A40DF0 0000A4 0018+00 0/1 0/0 0/0 .data l_bmdData */ static int l_bmdData[3][2] = { - {47, 1}, + {47, 1}, {48, 1}, - {49, 1} + {49, 1}, }; /* 80A40DF0-80A40EC0 -00001 00D0+00 0/1 0/0 0/0 .data l_evtList */ static daNpcT_evtData_c l_evtList[26] = { {"", 0}, - {"NONE_EQUIP_CHANGE_TALK",1}, - {"NONE_EQUIP_CHANGE_TALK_WAIT",1}, - {"NO_EQ_CHNGE_TLK_STD",1}, - {"LARGE_DAMAGE_TALK",1}, - {"FIRST_ENCOUNT",2}, - {"ATTACK_FAILED",2}, - {"FIRST_SKILL_GET",2}, - {"SECOND_ENCOUNT",1}, - {"SECOND_SKILL_EXPLAIN",3}, - {"REFLECT_EXPLAIN",3}, - {"SECOND_SKILL_GET",3}, - {"THIRD_SKILL_EXPLAIN",4}, - {"THIRD_SKILL_FIRST",1}, - {"THIRD_SKILL_GET",4}, - {"FOURTH_SKILL_EXPLAIN",5}, - {"FOURTH_SKILL_GET",5}, - {"FIFTH_SKILL_EXPLAIN",6}, - {"FIFTH_SKILL_FIRST",1}, - {"FIFTH_SKILL_GET",6}, - {"SIXTH_SKILL_EXPLAIN",7}, - {"SIXTH_SKILL_GET",7}, - {"SIXTH_SKILL_GET_STAND",7}, - {"SEVENTH_SKILL_EXPLAIN",8}, - {"SEVENTH_SKILL_GET",8}, - {"SEVENTH_SKILL_GET_STAND",8}, + {"NONE_EQUIP_CHANGE_TALK", 1}, + {"NONE_EQUIP_CHANGE_TALK_WAIT", 1}, + {"NO_EQ_CHNGE_TLK_STD", 1}, + {"LARGE_DAMAGE_TALK", 1}, + {"FIRST_ENCOUNT", 2}, + {"ATTACK_FAILED", 2}, + {"FIRST_SKILL_GET", 2}, + {"SECOND_ENCOUNT", 1}, + {"SECOND_SKILL_EXPLAIN", 3}, + {"REFLECT_EXPLAIN", 3}, + {"SECOND_SKILL_GET", 3}, + {"THIRD_SKILL_EXPLAIN", 4}, + {"THIRD_SKILL_FIRST", 1}, + {"THIRD_SKILL_GET", 4}, + {"FOURTH_SKILL_EXPLAIN", 5}, + {"FOURTH_SKILL_GET", 5}, + {"FIFTH_SKILL_EXPLAIN", 6}, + {"FIFTH_SKILL_FIRST", 1}, + {"FIFTH_SKILL_GET", 6}, + {"SIXTH_SKILL_EXPLAIN", 7}, + {"SIXTH_SKILL_GET", 7}, + {"SIXTH_SKILL_GET_STAND", 7}, + {"SEVENTH_SKILL_EXPLAIN", 8}, + {"SEVENTH_SKILL_GET", 8}, + {"SEVENTH_SKILL_GET_STAND", 8}, }; /* 80A40EC0-80A40EE4 -00001 0024+00 2/4 0/0 0/0 .data l_resNameList */ static char* l_resNameList[9] = { - "", - "KN_a", - "KN_tch01D", - "KN_tch02D", - "KN_tch03D", - "KN_tch04D", - "KN_tch05D", - "KN_tch06D", - "KN_tch07D", + "", "KN_a", "KN_tch01D", "KN_tch02D", "KN_tch03D", + "KN_tch04D", "KN_tch05D", "KN_tch06D", "KN_tch07D", }; /* 80A40EE4-80A40EE8 0001B0 0003+01 1/0 0/0 0/0 .data l_loadResPtrnTeach01 */ static s8 l_loadResPtrnTeach01[3] = { - 0x01, - 0x02, - 0xFF, + 1, + 2, + -1, }; /* 80A40EE8-80A40EEC 0001B4 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach02 */ static s8 l_loadResPtrnTeach02[4] = { - 0x01, - 0x02, - 0x03, - 0xFF, + 1, + 2, + 3, + -1, }; /* 80A40EEC-80A40EF0 0001B8 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach03 */ static s8 l_loadResPtrnTeach03[4] = { - 0x01, - 0x03, - 0x04, - 0xFF, + 1, + 3, + 4, + -1, }; /* 80A40EF0-80A40EF4 0001BC 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach04 */ static s8 l_loadResPtrnTeach04[4] = { - 0x01, - 0x04, - 0x05, - 0xFF, + 1, + 4, + 5, + -1, }; /* 80A40EF4-80A40EF8 0001C0 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach05 */ static s8 l_loadResPtrnTeach05[4] = { - 0x01, - 0x05, - 0x06, - 0xFF, + 1, + 5, + 6, + -1, }; /* 80A40EF8-80A40EFC 0001C4 0004+00 1/0 0/0 0/0 .data l_loadResPtrnTeach06 */ static s8 l_loadResPtrnTeach06[4] = { - 0x01, - 0x06, - 0x07, - 0xFF, + 1, + 6, + 7, + -1, }; /* 80A40EFC-80A40F00 0001C8 0003+01 1/0 0/0 0/0 .data l_loadResPtrnTeach07 */ static s8 l_loadResPtrnTeach07[3] = { - 0x01, - 0x08, - 0xFF, + 1, + 8, + -1, }; /* 80A40F00-80A40F04 0001CC 0002+02 1/0 0/0 0/0 .data l_loadResPtrn0 */ static s8 l_loadResPtrn0[2] = { - 0x01, - 0xFF, + 1, + -1, }; /* 80A40F04-80A40F24 -00001 0020+00 1/2 0/0 0/0 .data l_loadResPtrnList */ static s8* l_loadResPtrnList[8] = { - l_loadResPtrnTeach01, l_loadResPtrnTeach02, l_loadResPtrnTeach03, - l_loadResPtrnTeach04, l_loadResPtrnTeach05, l_loadResPtrnTeach06, - l_loadResPtrnTeach07, l_loadResPtrn0, + l_loadResPtrnTeach01, l_loadResPtrnTeach02, l_loadResPtrnTeach03, l_loadResPtrnTeach04, + l_loadResPtrnTeach05, l_loadResPtrnTeach06, l_loadResPtrnTeach07, l_loadResPtrn0, }; /* 80A40F24-80A40F5C 0001F0 0038+00 0/1 0/0 0/0 .data l_faceMotionAnmData */ static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[2] = { {-1, 0, 0, -1, 0, 0, 0}, - {21, 0, 1, -1, 0, 0, 0} - + {21, 0, 1, -1, 0, 0, 0}, }; /* 80A40F5C-80A41330 000228 03D4+00 0/1 0/0 0/0 .data l_motionAnmData */ static int l_motionAnmData[245] = { - 43,2, 1, -1,0, 0, 0, 38,2, 1, -1,0, 0, 0, 39,2, 1, -1,0, 0, - 0, 41,0, 1, -1,0, 0, 0, 16,0, 1, -1,0, 0, 0, 11,0, 1, -1,0, - 0, 0, 7, 0, 1, -1,0, 0, 0, 8, 0, 1, -1,0, 0, 0, 9, 2, 1, -1, - 0,0,0, 14,0, 1, -1,0, 0, 0, 13,2, 1, -1,0, 0, 0, 12,0, 1, - -1,0, 0, 0, 30,0, 1, -1,0, 0, 0, 17,2, 1, -1,0, 0, 0, 26,0, - 1, -1,0, 0, 0, 28,2, 1, -1,0, 0, 0, 35,0, 1, -1,0, 0, 0, 36, - 2, 1, -1,0, 0, 0, 10,0, 1, -1,0, 0, 0, 19,0, 1, -1,0, 0, 0, - 40,0, 1, -1,0, 0, 0, 37,0, 1, -1,0, 0, 0, 5, 0, 1, -1,0, 0, - 0, 18,2, 1, -1,0, 0, 0, 27,0, 1, -1,0, 0, 0, 29,2, 1, -1,0, - 0, 0, 20,0, 1, -1,0, 0, 0, 15,0, 1, -1,0, 0, 0, 24,0, 1, -1, - 0, 0, 0, 25,2, 1, -1,0, 0, 0, 44,2, 1, -1,0, 0, 0, 42,0, 1, - -1,0, 0, 0, 22,0, 1, -1,0, 0, 0, 23,2, 1, -1,0, 0, 0, 6, 0, - 1, -1,0, 0, 0 + 43, 2, 1, -1, 0, 0, 0, 38, 2, 1, -1, 0, 0, 0, 39, 2, 1, -1, 0, 0, 0, 41, 0, 1, -1, 0, 0, 0, + 16, 0, 1, -1, 0, 0, 0, 11, 0, 1, -1, 0, 0, 0, 7, 0, 1, -1, 0, 0, 0, 8, 0, 1, -1, 0, 0, 0, + 9, 2, 1, -1, 0, 0, 0, 14, 0, 1, -1, 0, 0, 0, 13, 2, 1, -1, 0, 0, 0, 12, 0, 1, -1, 0, 0, 0, + 30, 0, 1, -1, 0, 0, 0, 17, 2, 1, -1, 0, 0, 0, 26, 0, 1, -1, 0, 0, 0, 28, 2, 1, -1, 0, 0, 0, + 35, 0, 1, -1, 0, 0, 0, 36, 2, 1, -1, 0, 0, 0, 10, 0, 1, -1, 0, 0, 0, 19, 0, 1, -1, 0, 0, 0, + 40, 0, 1, -1, 0, 0, 0, 37, 0, 1, -1, 0, 0, 0, 5, 0, 1, -1, 0, 0, 0, 18, 2, 1, -1, 0, 0, 0, + 27, 0, 1, -1, 0, 0, 0, 29, 2, 1, -1, 0, 0, 0, 20, 0, 1, -1, 0, 0, 0, 15, 0, 1, -1, 0, 0, 0, + 24, 0, 1, -1, 0, 0, 0, 25, 2, 1, -1, 0, 0, 0, 44, 2, 1, -1, 0, 0, 0, 42, 0, 1, -1, 0, 0, 0, + 22, 0, 1, -1, 0, 0, 0, 23, 2, 1, -1, 0, 0, 0, 6, 0, 1, -1, 0, 0, 0, }; /* 80A41330-80A41358 0005FC 0028+00 1/2 0/0 0/0 .data l_podBckData */ -static s32 l_podBckData[5][2] = { +static int l_podBckData[5][2] = { {-1, 1}, {34, 1}, {33, 1}, @@ -199,12 +176,12 @@ static s32 l_podBckData[5][2] = { /* 80A41358-80A41378 000624 0020+00 0/1 0/0 0/0 .data l_faceMotionSequenceData */ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[8] = { {1, -1, 0}, - {-1, 0, 0}, - {-1, 0, 0}, {-1, 0, 0}, - {0, -1, 0}, - {-1, 0, 0}, - {-1, 0, 0}, + {-1, 0, 0}, + {-1, 0, 0}, + {0, -1, 0}, + {-1, 0, 0}, + {-1, 0, 0}, {-1, 0, 0}, }; @@ -242,8 +219,8 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = { {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, - {5, 0, 1}, - {4, 3, 1}, + {5, 0, 1}, + {4, 3, 1}, {0, -1, 0}, {-1, 0, 0}, {2, -1, 0}, @@ -254,8 +231,8 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = { {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, - {7, 0, 1}, - {8, 0, 0}, + {7, 0, 1}, + {8, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {32, 3, 0}, @@ -275,13 +252,13 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = { {-1, 0, 0}, {-1, 0, 0}, {26, -1, 1}, - {0, 0, 0}, + {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {20, 3, 1}, {21, 3, 1}, {22, 3, 1}, - {0, 3, 0}, + {0, 3, 0}, {13, 6, 0}, {-1, 0, 0}, {-1, 0, 0}, @@ -299,10 +276,10 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = { {-1, 0, 0}, {-1, 0, 0}, {19, -1, 1}, - {0, 0, 0}, + {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, - {5, 0, 1}, + {5, 0, 1}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, @@ -314,34 +291,34 @@ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[132] = { {2, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, - {4, 3, 1}, + {4, 3, 1}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, - {5, 0, 1}, + {5, 0, 1}, {2, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, - {6, 0, 1}, + {6, 0, 1}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, - {7, 0, 1}, + {7, 0, 1}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, - {7, 0, 1}, + {7, 0, 1}, {2, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, - {7, 0, 1}, + {7, 0, 1}, {1, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, - {1, 3, 0}, + {1, 3, 0}, + {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, - {-1, 0, 0} }; /* 80A41588-80A415DC -00001 0054+00 1/1 0/0 0/0 .data mCutNameList__10daNpc_Kn_c */ @@ -371,6 +348,7 @@ char* daNpc_Kn_c::mCutNameList[21] = { /* 80A416CC-80A417C8 000998 00FC+00 1/2 0/0 0/0 .data mCutList__10daNpc_Kn_c */ daNpc_Kn_c::cutFunc daNpc_Kn_c::mCutList[21] = { + NULL, &daNpc_Kn_c::ECut_noneEquipChangeTalk, &daNpc_Kn_c::ECut_noneEquipChangeTalkStand, &daNpc_Kn_c::ECut_largeDamageTalk, @@ -391,15 +369,15 @@ daNpc_Kn_c::cutFunc daNpc_Kn_c::mCutList[21] = { &daNpc_Kn_c::ECut_sixthSkillGet, &daNpc_Kn_c::ECut_seventhSkillExplain, &daNpc_Kn_c::ECut_seventhSkillGet, - NULL }; /* 80A2AA0C-80A2AECC 0000EC 04C0+00 1/0 0/0 0/0 .text __dt__10daNpc_Kn_cFv */ daNpc_Kn_c::~daNpc_Kn_c() { - if (heap) { - mpMorf[0]->stopZelAnime(); - mpMorf[1]->stopZelAnime(); + if (heap != NULL) { + mpModelMorf[0]->stopZelAnime(); + mpModelMorf[1]->stopZelAnime(); } + deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); } @@ -446,173 +424,177 @@ const daNpc_Kn_HIOParam daNpc_Kn_Param_c::m = { 0.0f, 0.0f, 0.0f, - // kn-specific: 255, 300, 90, - 0, 100.0f, 240.0f, 1100.0f, 27.0f, 50.0f, - 0x00100200, + 16, + 0x200, 120, 90, 2.0f, }; /* 80A2AFD4-80A2B278 0006B4 02A4+00 1/1 0/0 0/0 .text create__10daNpc_Kn_cFv */ -s32 daNpc_Kn_c::create() { - static int const heapSize[8] = { - 0x4B10, - 0x4B20, - 0x4B10, - 0x4B10, - 0x5A00, - 0x4B10, - 0x4B20, - 0x0000, - }; - - cPhs__Step step; - fopAcM_SetupActor2(this, daNpc_Kn_c, l_faceMotionAnmData, (daNpcT_motionAnmData_c*)l_motionAnmData, l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); +int daNpc_Kn_c::create() { + fopAcM_SetupActor2(this, daNpc_Kn_c, l_faceMotionAnmData, + (daNpcT_motionAnmData_c*)l_motionAnmData, l_faceMotionSequenceData, 4, + l_motionSequenceData, 4, l_evtList, l_resNameList); mType = getType(); mDivideNo = getDivideNo(); mFlowNodeNo = getFlowNodeNo(); - field_0xABD = 0; + mTwilight = FALSE; + + OS_REPORT("\t(%s:%d) flowNo:%d, PathNo:%02x<%08x> ", fopAcM_getProcNameString(this), mType, mFlowNodeNo, getPath(), fopAcM_GetParam(this)); if (isDelete()) { + OS_REPORT("===>isDelete:TRUE\n"); return cPhs_ERROR_e; - } else { - step = (cPhs__Step)loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList); - - if (step == cPhs_COMPLEATE_e) { - if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) { - return cPhs_ERROR_e; - } else { - J3DModelData* model_data = mpMorf[0]->getModel()->getModelData(); - fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); - fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); - fopAcM_OnStatus(this, fopAcM_STATUS_UNK_80000000); - mCreature.init(¤t.pos,&eyePos,3,1); - dKy_tevstr_init(&mTevStr, fopAcM_GetRoomNo(this), 0xFF); - mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mAcch.CrrPos(dComIfG_Bgsp()); - mGndChk = mAcch.m_gnd; - mGroundHeight = mAcch.GetGroundH(); - setEnvTevColor(); - setRoomNo(); - mCcStts.Init(daNpc_Kn_Param_c::m.common.weight, 0, this); - resetCol(); - reset(); - field_0xABC = 1; - Execute(); - field_0xABC = 0; - } - } } - return step; + OS_REPORT("\n"); + + int phase_state = loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList); + if (phase_state == cPhs_COMPLEATE_e) { + static int const heapSize[8] = {0x4B10, 0x4B20, 0x4B10, 0x4B10, 0x5A00, 0x4B10, 0x4B20, 0x0000}; + if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) { + return cPhs_ERROR_e; + } + + J3DModelData* model_data = mpModelMorf[0]->getModel()->getModelData(); + fopAcM_SetMtx(this, mpModelMorf[0]->getModel()->getBaseTRMtx()); + fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); + fopAcM_OnStatus(this, fopAcM_STATUS_UNK_80000000); + + mSound.init(¤t.pos, &eyePos, 3, 1); + dKy_tevstr_init(&mTevStr, fopAcM_GetRoomNo(this), 0xFF); + + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, + &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), + fopAcM_GetShapeAngle_p(this)); + mAcch.CrrPos(dComIfG_Bgsp()); + mGndChk = mAcch.m_gnd; + mGroundHeight = mAcch.GetGroundH(); + + setEnvTevColor(); + setRoomNo(); + + mCcStts.Init(daNpc_Kn_Param_c::m.common.weight, 0, this); + resetCol(); + reset(); + + mCreating = TRUE; + Execute(); + mCreating = FALSE; + } + + return phase_state; } /* 80A2B278-80A2B620 000958 03A8+00 1/1 0/0 0/0 .text CreateHeap__10daNpc_Kn_cFv */ -s32 daNpc_Kn_c::CreateHeap() { - // NONMATCHING - regalloc +int daNpc_Kn_c::CreateHeap() { + // NONMATCHING - regalloc, matches debug J3DModelData* mdlData_p = NULL; - J3DModel* model = NULL; + J3DModel* model_p = NULL; int bmd_offset = 1; int arc_idx = l_bmdData[bmd_offset][1]; int res_idx = l_bmdData[bmd_offset][0]; - mdlData_p = (J3DModelData*) dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx); - JUT_ASSERT(0x4EB, 0 != mdlData_p); - u32 big_bits = 0x11020284; - mpMorf[0] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreature, 0x80000, big_bits); + mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx); + JUT_ASSERT(1259, 0 != mdlData_p); - if (mpMorf[0] != NULL && mpMorf[0]->getModel() == NULL) { - mpMorf[0]->stopZelAnime(); - mpMorf[0] = NULL; + u32 sp2C = 0x11020284; + mpModelMorf[0] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, sp2C); + if (mpModelMorf[0] != NULL && mpModelMorf[0]->getModel() == NULL) { + mpModelMorf[0]->stopZelAnime(); + mpModelMorf[0] = NULL; } - if (mpMorf[0] == NULL) { + if (mpModelMorf[0] == NULL) { return 0; - } else { - model = mpMorf[0]->getModel(); + } - for (u16 i = 0; i < mdlData_p->getJointNum(); i++) { - mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); + model_p = mpModelMorf[0]->getModel(); + + for (u16 i = 0; i < mdlData_p->getJointNum(); i++) { + mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); + } + + model_p->setUserArea((u32)this); + + if (!mInvisModel.create(mpModelMorf[0]->getModel(), 1)) { + return 0; + } + + bmd_offset = 0; + arc_idx = l_bmdData[bmd_offset][1]; + res_idx = l_bmdData[bmd_offset][0]; + mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx); + JUT_ASSERT(1310, 0 != mdlData_p); + + sp2C = 0x11020284; + mpModelMorf[1] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, sp2C); + + if (mpModelMorf[1] != NULL && mpModelMorf[1]->getModel() == NULL) { + mpModelMorf[1] = NULL; + } + + if (mpModelMorf[1] == NULL) { + if (mpModelMorf[0] != NULL) { + mpModelMorf[0]->stopZelAnime(); + } + return 0; + } + + model_p = mpModelMorf[1]->getModel(); + + for (u16 i = 0; i < mdlData_p->getJointNum(); i++) { + mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); + } + + model_p->setUserArea((u32)this); + + if (mType == 4) { + J3DModelData* modelData = NULL; + bmd_offset = 2; + arc_idx = l_bmdData[bmd_offset][1]; + res_idx = l_bmdData[bmd_offset][0]; + modelData = (J3DModelData*)dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx); + + if (modelData != NULL) { + mpPodModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpPodModel == NULL) { + return 0; + } + } else { + return 0; + } + } + + if (setFaceMotionAnm(1, false)) { + if (mType == 4) { + void* bck_p = NULL; + bck_p = getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[1][1]], l_podBckData[1][0]); + + if (bck_p != NULL && + mPodBck.init((J3DAnmTransform*)bck_p, 1, 2, 1.0f, 0, -1, false)) + { + mPodAnmFlags |= 0x41; + return 1; + } + + if (bck_p == NULL && l_podBckData[1][0] != -1) { + return 0; + } } - model->setUserArea((u32)this); - - if (!mInvisModel.create(mpMorf[0]->getModel(), 1)) { - return 0; - } else { - bmd_offset = 0; - arc_idx = l_bmdData[bmd_offset][1]; - res_idx = l_bmdData[bmd_offset][0]; - mdlData_p = (J3DModelData*) dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx); - JUT_ASSERT(0x51E, 0 != mdlData_p); - big_bits = 0x11020284; - mpMorf[1] = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreature, 0x80000, big_bits); - - if (mpMorf[1] != NULL && mpMorf[1]->getModel() == NULL) { - mpMorf[1] = NULL; - } - - if (mpMorf[1] == NULL) { - if (mpMorf[0] != NULL) { - mpMorf[0]->stopZelAnime(); - } - return 0; - } else { - model = mpMorf[1]->getModel(); - - for (u16 i = 0; i < mdlData_p->getJointNum(); i++) { - mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); - } - - model->setUserArea((u32)this); - - if (mType == 4) { - J3DModelData* modelData = NULL; - bmd_offset = 2; - arc_idx = l_bmdData[bmd_offset][1]; - res_idx = l_bmdData[bmd_offset][0]; - modelData = (J3DModelData*) dComIfG_getObjectRes(l_resNameList[arc_idx], res_idx); - - if (modelData != NULL) { - mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); - if (mpModel == NULL) { - return 0; - } - } else { - return 0; - } - } - - if (setFaceMotionAnm(1, false)) { - if (mType == 4) { - J3DAnmTransform* anm_transform = NULL; - anm_transform = (J3DAnmTransform*) getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[1][1]],l_podBckData[1][0]); - - if (anm_transform != NULL && field_0x1588.init(anm_transform, 1, 2, 1.0f, 0, -1,false)) { - field_0x15a4 |= 0x41; - return 1; - } - - if (anm_transform == NULL && l_podBckData[1][0] != -1) { - return 0; - } - } - - if (setMotionAnm(0,0.0f,0)) { - return 1; - } - } - } + if (setMotionAnm(0, 0.0f, 0)) { + return 1; } } @@ -620,41 +602,41 @@ s32 daNpc_Kn_c::CreateHeap() { } /* 80A2B620-80A2B654 000D00 0034+00 1/1 0/0 0/0 .text Delete__10daNpc_Kn_cFv */ -s32 daNpc_Kn_c::Delete() { +int daNpc_Kn_c::Delete() { + OS_REPORT("|%06d:%x|daNpc_Kn_c -> Delete\n", g_Counter.mCounter0, this); this->~daNpc_Kn_c(); return 1; } /* 80A2B654-80A2B6B0 000D34 005C+00 2/2 0/0 0/0 .text Execute__10daNpc_Kn_cFv */ -s32 daNpc_Kn_c::Execute() { - s32 ret = execute(); +int daNpc_Kn_c::Execute() { + int rt = execute(); setPrtcl(); calcMagicBallPos(); setSwordChargePtcl(); setSe(); - return ret; + return rt; } /* 80A2B6B0-80A2B764 000D90 00B4+00 1/1 0/0 0/0 .text Draw__10daNpc_Kn_cFv */ -void daNpc_Kn_c::Draw() { +int daNpc_Kn_c::Draw() { if (mpMatAnm) { - J3DModelData* modelData = mpMorf[0]->getModel()->getModelData(); + J3DModelData* modelData = mpModelMorf[0]->getModel()->getModelData(); modelData->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm); } - _GXColorS10 local_28; - local_28.r = 0; - local_28.g = 0; - local_28.b = 0; - local_28.a = daNpc_Kn_Param_c::m.field_0x8c; - // debug ROM has chkAction here. - draw(0, 0, daNpc_Kn_Param_c::m.common.real_shadow_size, &local_28, 0.0f, 1, 0, 0); + GXColorS10 tevcolor; + tevcolor.r = 0; + tevcolor.g = 0; + tevcolor.b = 0; + tevcolor.a = daNpc_Kn_Param_c::m.alpha; + return draw(0, FALSE, daNpc_Kn_Param_c::m.common.real_shadow_size, &tevcolor, 0.0f, TRUE, FALSE, FALSE); } /* 80A2B764-80A2B784 000E44 0020+00 1/1 0/0 0/0 .text * createHeapCallBack__10daNpc_Kn_cFP10fopAc_ac_c */ int daNpc_Kn_c::createHeapCallBack(fopAc_ac_c* i_this) { - return static_cast(i_this)->CreateHeap(); + return ((daNpc_Kn_c*)i_this)->CreateHeap(); } /* 80A2B784-80A2B7DC 000E64 0058+00 1/1 0/0 0/0 .text ctrlJointCallBack__10daNpc_Kn_cFP8J3DJointi @@ -662,10 +644,10 @@ int daNpc_Kn_c::createHeapCallBack(fopAc_ac_c* i_this) { int daNpc_Kn_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { if (param_1 == 0) { J3DModel* model = j3dSys.getModel(); - daNpc_Kn_c* _this = reinterpret_cast(model->getUserArea()); + daNpc_Kn_c* a_this = (daNpc_Kn_c*)model->getUserArea(); - if (_this) { - _this->ctrlJoint(i_joint, model); + if (a_this != NULL) { + a_this->ctrlJoint(i_joint, model); } } @@ -702,7 +684,6 @@ u8 daNpc_Kn_c::getDivideNo() { /* 80A2B850-80A2B86C 000F30 001C+00 1/1 0/0 0/0 .text getFlowNodeNo__10daNpc_Kn_cFv */ u32 daNpc_Kn_c::getFlowNodeNo() { u16 node_no = home.angle.x; - if (node_no == 0xFFFF) { return 0xFFFFFFFF; } @@ -718,29 +699,17 @@ u8 daNpc_Kn_c::getPath() { /* 80A2B878-80A2B91C 000F58 00A4+00 1/1 0/0 0/0 .text isDelete__10daNpc_Kn_cFv */ BOOL daNpc_Kn_c::isDelete() { static s16 l_appearFlag[7] = { - 0xFFFF, - 0x0153, - 0x0152, - 0x0154, - 0x0155, - 0x0156, - 0x0157, + 0xFFFF, 0x0153, 0x0152, 0x0154, 0x0155, 0x0156, 0x0157, }; static s16 l_delFlag[7] = { - 0x0153, - 0x0152, - 0x0154, - 0x0155, - 0x0156, - 0x0157, - 0x0158, + 0x0153, 0x0152, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, }; switch (mType) { case 0: - if (daNpcT_chkEvtBit(0x153) == FALSE) { + if (!daNpcT_chkEvtBit(0x153)) { return 0; - } + } break; case 1: case 2: @@ -748,7 +717,7 @@ BOOL daNpc_Kn_c::isDelete() { case 4: case 5: case 6: - if (daNpcT_chkEvtBit(l_appearFlag[mType*1]) && !daNpcT_chkEvtBit(l_delFlag[mType])) { + if (daNpcT_chkEvtBit(l_appearFlag[mType * 1]) && !daNpcT_chkEvtBit(l_delFlag[mType])) { return 0; } } @@ -758,7 +727,6 @@ BOOL daNpc_Kn_c::isDelete() { /* 80A2B91C-80A2B9E0 000FFC 00C4+00 1/1 0/0 0/0 .text resetCol__10daNpc_Kn_cFv */ void daNpc_Kn_c::resetCol() { - mCylCc.Set(mCcDCyl); mCylCc.SetStts(&mCcStts); mCylCc.SetTgHitCallback(tgHitCallBack); @@ -780,7 +748,7 @@ void daNpc_Kn_c::reset() { initialize(); memset(&mpTeachAction, 0, (int)&field_0x1754 - (int)&mpTeachAction); - if (mpMatAnm) { + if (mpMatAnm != NULL) { mpMatAnm->initialize(); } @@ -791,6 +759,7 @@ void daNpc_Kn_c::reset() { mStaffId = -1; setAngle(home.angle.y); + field_0x15bd = 0; field_0x15be = 0; field_0x15cc = 0; @@ -808,7 +777,7 @@ void daNpc_Kn_c::reset() { } field_0x170c = 0; - field_0x16f4.set(1.0f,1.0f,1.0f); + field_0x16f4.set(1.0f, 1.0f, 1.0f); field_0x170d = 1; field_0x170e = 0; @@ -816,7 +785,9 @@ void daNpc_Kn_c::reset() { if (mType <= 6 && (mDivideNo == 0 || mDivideNo > 2)) { field_0xe2c = 1; - parentActorID = fopAcM_createChild(PROC_NPC_GWOLF, fopAcM_GetID(this), 0xffffff02, ¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle, 0, -1, 0); + parentActorID = + fopAcM_createChild(PROC_NPC_GWOLF, fopAcM_GetID(this), 0xFFFFFF02, ¤t.pos, + fopAcM_GetRoomNo(this), ¤t.angle, 0, -1, 0); } resetType(); @@ -842,20 +813,20 @@ void daNpc_Kn_c::resetType() { return; case 5: if (mDivideNo != 0 && mDivideNo <= 2) { - mActionMode = 0xe; + mActionMode = 14; field_0x15af = 0; } else { - mActionMode = 0x4; + mActionMode = 4; } break; case 6: if (mDivideNo != 0 && mDivideNo <= 2) { - mActionMode = 0x14; + mActionMode = 20; field_0x15af = 0; - return; + } else { + mActionMode = 4; } - mActionMode = 4; - return; + break; default: mActionMode = -1; } @@ -866,10 +837,10 @@ void daNpc_Kn_c::setParam() { selectAction(); srchActors(); - s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance; - s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle; - s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance; - s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle; + s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance; + s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle; + s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance; + s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle; f32 radius = daNpc_Kn_Param_c::m.common.attention_offset; f32 height = daNpc_Kn_Param_c::m.common.attention_offset; @@ -916,11 +887,12 @@ void daNpc_Kn_c::setParam() { attention_info.flags = setParamTeach07(); break; default: - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = 10; + mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width); mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); } @@ -928,24 +900,27 @@ void daNpc_Kn_c::setParam() { scale.set(daNpc_Kn_Param_c::m.common.scale * field_0x16f4.x, daNpc_Kn_Param_c::m.common.scale * field_0x16f4.y, daNpc_Kn_Param_c::m.common.scale * field_0x16f4.z); + mCcStts.SetWeight(daNpc_Kn_Param_c::m.common.weight); field_0xe0c = daNpc_Kn_Param_c::m.common.height; mRadius = daNpc_Kn_Param_c::m.common.width; gravity = daNpc_Kn_Param_c::m.common.gravity; - field_0xab4 = daNpc_Kn_Param_c::m.common.expression_morf_frame; - field_0xab8 = daNpc_Kn_Param_c::m.common.morf_frame; + mExpressionMorfFrame = daNpc_Kn_Param_c::m.common.expression_morf_frame; + mMorfFrames = daNpc_Kn_Param_c::m.common.morf_frame; }; /* 80A2BFB0-80A2C044 001690 0094+00 1/1 0/0 0/0 .text setParamTeach03__10daNpc_Kn_cFv */ u32 daNpc_Kn_c::setParamTeach03() { - s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance; - s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle; - s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance; - s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle; - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); + s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance; + s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle; + s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance; + s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle; + + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 228; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + mAcchCir.SetWallR(135.0f); mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); return 4; @@ -953,14 +928,16 @@ u32 daNpc_Kn_c::setParamTeach03() { /* 80A2C044-80A2C0FC 001724 00B8+00 1/1 0/0 0/0 .text setParamTeach04__10daNpc_Kn_cFv */ u32 daNpc_Kn_c::setParamTeach04() { - s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance; - s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle; - s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance; - s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle; - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); + s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance; + s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle; + s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance; + s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle; + + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 228; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + if (mActionMode == 10 || mActionMode == 11) { mAcchCir.SetWallR(135.0f); mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); @@ -972,14 +949,16 @@ u32 daNpc_Kn_c::setParamTeach04() { /* 80A2C0FC-80A2C190 0017DC 0094+00 3/3 0/0 0/0 .text setParamTeach05__10daNpc_Kn_cFv */ u32 daNpc_Kn_c::setParamTeach05() { - s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance; - s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle; - s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance; - s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle; - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); + s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance; + s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle; + s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance; + s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle; + + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 228; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + mAcchCir.SetWallR(135.0f); mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); return 4; @@ -998,8 +977,8 @@ u32 daNpc_Kn_c::setParamTeach07() { /* 80A2C1D0-80A2C230 0018B0 0060+00 1/1 0/0 0/0 .text setAfterTalkMotion__10daNpc_Kn_cFv */ void daNpc_Kn_c::setAfterTalkMotion() { - mMotionSeqMngr1.getNo(); - mMotionSeqMngr1.setNo(1, -1.0, 0, 0); + mFaceMotionSeqMngr.getNo(); + mFaceMotionSeqMngr.setNo(1, -1.0, 0, 0); } /* 80A2C230-80A2C234 001910 0004+00 1/1 0/0 0/0 .text srchActors__10daNpc_Kn_cFv */ @@ -1008,9 +987,9 @@ void daNpc_Kn_c::srchActors() {} /* 80A2C234-80A2C318 001914 00E4+00 1/1 0/0 0/0 .text evtTalk__10daNpc_Kn_cFv */ bool daNpc_Kn_c::evtTalk() { if (chkAction(&daNpc_Kn_c::talk)) { - (this->*mpActionFunc)(0); + (this->*mpActionFunc)(NULL); } else { - if (dComIfGp_event_chkTalkXY() == 0 || dComIfGp_evmng_ChkPresentEnd()) { + if (dComIfGp_event_chkTalkXY() == FALSE || dComIfGp_evmng_ChkPresentEnd()) { setAction(&daNpc_Kn_c::talk); } } @@ -1019,33 +998,32 @@ bool daNpc_Kn_c::evtTalk() { } /* 80A2C318-80A2C3FC 0019F8 00E4+00 1/1 0/0 0/0 .text evtCutProc__10daNpc_Kn_cFv */ -bool daNpc_Kn_c::evtCutProc() { - bool ret; +BOOL daNpc_Kn_c::evtCutProc() { if (mDivideNo != 0 && mDivideNo <= 2) { return false; - } else { - ret = false; - int staff_id = dComIfGp_getEventManager().getMyStaffId("Kn", this, -1); - if (staff_id != -1) { - mStaffId = staff_id; - int act_idx = dComIfGp_getEventManager().getMyActIdx(mStaffId, &mCutNameList[0], 21, 0, 0); - if ((this->*mCutList[act_idx])(mStaffId)) { - dComIfGp_getEventManager().cutEnd(mStaffId); - } - - ret = true; - } } - return ret; + BOOL rt = false; + int staff_id = dComIfGp_getEventManager().getMyStaffId("Kn", this, -1); + if (staff_id != -1) { + mStaffId = staff_id; + int act_idx = dComIfGp_getEventManager().getMyActIdx(mStaffId, &mCutNameList[0], 21, 0, 0); + + if ((this->*mCutList[act_idx])(mStaffId)) { + dComIfGp_getEventManager().cutEnd(mStaffId); + } + + rt = true; + } + + return rt; } /* 80A2C3FC-80A2C484 001ADC 0088+00 1/1 0/0 0/0 .text action__10daNpc_Kn_cFv */ void daNpc_Kn_c::action() { - if (mpTeachAction) { + if (mpTeachAction != NULL) { if (mpActionFunc == mpTeachAction) { - (this->*mpActionFunc)(0); - + (this->*mpActionFunc)(NULL); } else { setAction(mpTeachAction); } @@ -1054,14 +1032,14 @@ void daNpc_Kn_c::action() { /* 80A2C484-80A2C4FC 001B64 0078+00 1/1 0/0 0/0 .text beforeMove__10daNpc_Kn_cFv */ void daNpc_Kn_c::beforeMove() { - if (checkHide() || field_0xe32 != 0) { + if (checkHide() || mNoDraw) { attention_info.flags = 0; } } /* 80A2C4FC-80A2C56C 001BDC 0070+00 1/1 0/0 0/0 .text afterMoved__10daNpc_Kn_cFv */ void daNpc_Kn_c::afterMoved() { - if (mGroundHeight != -1e9f) { + if (mGroundHeight != -1000000000.0f) { mTevStr.YukaCol = dComIfG_Bgsp().GetPolyColor(mGndChk); mTevStr.room_no = dComIfG_Bgsp().GetRoomId(mGndChk); } @@ -1070,35 +1048,42 @@ void daNpc_Kn_c::afterMoved() { /* 80A2C56C-80A2C77C 001C4C 0210+00 1/1 0/0 0/0 .text setAttnPos__10daNpc_Kn_cFv */ void daNpc_Kn_c::setAttnPos() { cXyz pos(30.0f, 0.0f, 0.0f); + int head_joint_no = getHeadJointNo(); int neck_joint_no = getNeckJointNo(); int backbone_joint_no = getBackboneJointNo(); - J3DModel* model = mpMorf[0]->getModel(); + J3DModel* model = mpModelMorf[0]->getModel(); - mJntAnm.setParam(this, model, &pos, backbone_joint_no, neck_joint_no, head_joint_no, - daNpc_Kn_Param_c::m.common.body_angleX_min, daNpc_Kn_Param_c::m.common.body_angleX_max, - daNpc_Kn_Param_c::m.common.body_angleY_min, daNpc_Kn_Param_c::m.common.body_angleY_max, + mJntAnm.setParam( + this, model, &pos, backbone_joint_no, neck_joint_no, head_joint_no, + daNpc_Kn_Param_c::m.common.body_angleX_min, daNpc_Kn_Param_c::m.common.body_angleX_max, + daNpc_Kn_Param_c::m.common.body_angleY_min, daNpc_Kn_Param_c::m.common.body_angleY_max, daNpc_Kn_Param_c::m.common.head_angleX_min, daNpc_Kn_Param_c::m.common.head_angleX_max, daNpc_Kn_Param_c::m.common.head_angleY_min, daNpc_Kn_Param_c::m.common.head_angleY_max, daNpc_Kn_Param_c::m.common.neck_rotation_ratio, 0.0f, 0); - f32 rad_val = cM_s2rad(mTargetAngle.y - field_0xDB2.y); + f32 rad_val = cM_s2rad(mCurAngle.y - field_0xDB2.y); mJntAnm.calcJntRad(0.2f, 1.0f, rad_val); + setMtx(); - model = mpMorf[1]->getModel(); + + model = mpModelMorf[1]->getModel(); J3DModelData* modelData = model->getModelData(); - (void) modelData; + (void)modelData; + mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::ZXYrotM(mTargetAngle); + mDoMtx_stack_c::ZXYrotM(mCurAngle); mDoMtx_stack_c::scaleM(scale); model->setBaseTRMtx(mDoMtx_stack_c::get()); model->setUserArea((u32)this); - mpMorf[1]->modelCalc(); - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); + mpModelMorf[1]->modelCalc(); + + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); mDoMtx_stack_c::multVec(&pos, &eyePos); mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); - mJntAnm.setEyeAngleY(eyePos, mTargetAngle.y, 1, 1.0f, 0); - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); + mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 1, 1.0f, 0); + + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); mDoMtx_stack_c::multVecZero(&attention_info.position); attention_info.position.y += daNpc_Kn_Param_c::m.common.attention_offset; } @@ -1109,8 +1094,7 @@ void daNpc_Kn_c::setCollision() { if (field_0xe2c == 0 && field_0x15af != 0) { u32 param; - - if (field_0xABD == 1) { + if (mTwilight == TRUE) { param = 0x69; } else { param = 0x79; @@ -1157,9 +1141,10 @@ void daNpc_Kn_c::setCollision() { setCollisionTeach07(); } - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getBackboneJointNo())); + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getBackboneJointNo())); mDoMtx_stack_c::multVecZero(¢erPos); centerPos.y = current.pos.y; + f32 radius = daNpc_Kn_Param_c::m.common.width; mCylCc.SetH(daNpc_Kn_Param_c::m.common.height); mCylCc.SetR(radius); @@ -1172,30 +1157,32 @@ void daNpc_Kn_c::setCollision() { setCollisionSword(); } -/* 80A2C984-80A2CB30 002064 01AC+00 1/1 0/0 0/0 .text setCollisionSword__10daNpc_Kn_cFv */ +/* 80A2C984-80A2CB30 002064 01AC+00 1/1 0/0 0/0 .text setCollisionSword__10daNpc_Kn_cFv + */ void daNpc_Kn_c::setCollisionSword() { - static f32 l_swordOffset[2] = { - 60.0f, - 120.0f - }; + static f32 l_swordOffset[2] = {60.0f, 120.0f}; - if (mMotionSeqMngr2.getNo() == 0x19 && mMotionSeqMngr2.getStepNo() == 0 && mMotionSeqMngr2.checkEntryNewMotion() == 0) { + if (mMotionSeqMngr.getNo() == 0x19 && mMotionSeqMngr.getStepNo() == 0 && + mMotionSeqMngr.checkEntryNewMotion() == 0) + { field_0x15ce = 1; } else { field_0x15ce = 0; } - for (s32 i = 0; i < 2; i++) { + for (int i = 0; i < 2; i++) { if (field_0xe2c == 0) { - if (field_0x15ce && mpMorf[0]->getFrame() >= 30.0f && mpMorf[0]->getFrame() <= 40.0f) { - cXyz pos(l_swordOffset[i], 0.0f, 0.0f); - mSphCc[i].OnAtSetBit(); - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0xd)); - mDoMtx_stack_c::scaleM(scale); - mDoMtx_stack_c::multVec(&pos,&pos); - mSphCc[i].SetC(pos); - mSphCc[i].SetR(30.0f); - dComIfG_Ccsp()->Set(&mSphCc[i]); + if (field_0x15ce && mpModelMorf[0]->getFrame() >= 30.0f && mpModelMorf[0]->getFrame() <= 40.0f) { + cXyz pos(l_swordOffset[i], 0.0f, 0.0f); + mSphCc[i].OnAtSetBit(); + + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(13)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVec(&pos, &pos); + + mSphCc[i].SetC(pos); + mSphCc[i].SetR(30.0f); + dComIfG_Ccsp()->Set(&mSphCc[i]); } else { mSphCc[i].OffAtSetBit(); } @@ -1208,38 +1195,34 @@ void daNpc_Kn_c::setCollisionSword() { /* 80A2CB30-80A2CBEC 002210 00BC+00 9/9 0/0 0/0 .text checkCollisionSword__10daNpc_Kn_cFv */ BOOL daNpc_Kn_c::checkCollisionSword() { - int iVar2 = false; // Status variable - - // Main collision check loop - for (int iVar3 = 0; iVar3 < 2; iVar3++) { - // Check shield hit - - if (mSphCc[iVar3].ChkAtShieldHit()) { - iVar2 = 1; + int hit_type = false; + + for (int i = 0; i < 2; i++) { + if (mSphCc[i].ChkAtShieldHit()) { + hit_type = 1; break; } - - // Check regular hit - if (mSphCc[iVar3].ChkAtHit()) { - iVar2 = 2; + + if (mSphCc[i].ChkAtHit()) { + hit_type = 2; } } - + // If shield was hit, clear hit - if (iVar2 == 1) { - for (int iVar3 = 0; iVar3 < 2; iVar3++) { - mSphCc[iVar3].ClrAtHit(); + if (hit_type == 1) { + for (int i = 0; i < 2; i++) { + mSphCc[i].ClrAtHit(); } } - - return iVar2 == 2; + + return hit_type == 2; } /* 80A2CBEC-80A2CC24 0022CC 0038+00 1/1 0/0 0/0 .text setCollisionTeach03__10daNpc_Kn_cFv */ void daNpc_Kn_c::setCollisionTeach03() { - mCylCc.SetTgType(-1); - mCylCc.SetTgSPrm(19); + mCylCc.SetTgType(0xFFFFFFFF); + mCylCc.SetTgSPrm(0x13); mCylCc.OffTgNoAtHitInfSet(); mCylCc.OnTgNoConHit(); mCylCc.OnCoSetBit(); @@ -1254,9 +1237,9 @@ void daNpc_Kn_c::setCollisionTeach04() { mCylCc.OffTgSetBit(); mCylCc.OffCoSetBit(); } else { - mCylCc.SetTgType(-1); + mCylCc.SetTgType(0xFFFFFFFF); mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); - mCylCc.SetTgSPrm(19); + mCylCc.SetTgSPrm(0x13); mCylCc.OnTgShield(); mCylCc.OffTgNoAtHitInfSet(); mCylCc.OnTgNoConHit(); @@ -1264,20 +1247,20 @@ void daNpc_Kn_c::setCollisionTeach04() { break; case 11: case 10: - mCylCc.SetTgType(-1); - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); - mCylCc.SetTgSPrm(19); - mCylCc.OffTgShield(); - mCylCc.OffTgNoAtHitInfSet(); - mCylCc.OnTgNoConHit(); + mCylCc.SetTgType(0xFFFFFFFF); + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); + mCylCc.SetTgSPrm(0x13); + mCylCc.OffTgShield(); + mCylCc.OffTgNoAtHitInfSet(); + mCylCc.OnTgNoConHit(); } } /* 80A2CD00-80A2CD38 0023E0 0038+00 3/3 0/0 0/0 .text setCollisionTeach05__10daNpc_Kn_cFv */ void daNpc_Kn_c::setCollisionTeach05() { - mCylCc.SetTgType(-1); - mCylCc.SetTgSPrm(19); + mCylCc.SetTgType(0xFFFFFFFF); + mCylCc.SetTgSPrm(0x13); mCylCc.OffTgNoAtHitInfSet(); mCylCc.OnTgNoConHit(); mCylCc.OnCoSetBit(); @@ -1302,53 +1285,54 @@ int daNpc_Kn_c::drawDbgInfo() { /* 80A2CD80-80A2CF9C 002460 021C+00 1/1 0/0 0/0 .text drawOtherMdl__10daNpc_Kn_cFv */ void daNpc_Kn_c::drawOtherMdl() { - J3DModel* model = mpMorf[1]->getModel(); + J3DModel* model = mpModelMorf[1]->getModel(); mTevStr.TevColor.r = 0; mTevStr.TevColor.g = 0; mTevStr.TevColor.b = 0; mTevStr.TevColor.a = 0; - if (field_0xde0 && mTimer) { - f32 fval = (f32)mTimer / (f32)field_0xde0; - - if (cM3d_IsZero(fval) == 0) { - mTevStr.TevColor.r = fval * 20.0f; + if (mTimerStart != 0 && mTimer != 0) { + f32 col_strength = (f32)mTimer / (f32)mTimerStart; + if (cM3d_IsZero(col_strength) == false) { + mTevStr.TevColor.r = col_strength * 20.0f; } } g_env_light.settingTevStruct(0, ¤t.pos, &mTevStr); g_env_light.setLightTevColorType_MAJI(model->getModelData(), &mTevStr); - mpMorf[1]->entryDL(); + mpModelMorf[1]->entryDL(); mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, - daNpc_Kn_Param_c::m.common.real_shadow_size, 20.0f, current.pos.y, mGroundHeight, - mGndChk, &mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + daNpc_Kn_Param_c::m.common.real_shadow_size, 20.0f, + current.pos.y, mGroundHeight, mGndChk, &mTevStr, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); - if (field_0x15cd && mpModel) { - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(22)); + if (field_0x15cd && mpPodModel != NULL) { + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(22)); mDoMtx_stack_c::scaleM(scale); - mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); - g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr); - J3DModelData* modelData2 = mpModel->getModelData(); + mpPodModel->setBaseTRMtx(mDoMtx_stack_c::get()); - if (field_0x15a4 & 0x40) { - field_0x1588.entry(modelData2); + g_env_light.setLightTevColorType_MAJI(mpPodModel, &mTevStr); + J3DModelData* mdlData_p = mpPodModel->getModelData(); + + if (mPodAnmFlags & 0x40) { + mPodBck.entry(mdlData_p); } - mDoExt_modelUpdateDL(mpModel); + mDoExt_modelUpdateDL(mpPodModel); - if (field_0x15a4 & 0x40) { - field_0x1588.remove(modelData2); + if (mPodAnmFlags & 0x40) { + mPodBck.remove(mdlData_p); } - dComIfGd_addRealShadow(mShadowKey,mpModel); + dComIfGd_addRealShadow(mShadowKey, mpPodModel); } } /* 80A2CF9C-80A2D060 00267C 00C4+00 1/1 0/0 0/0 .text drawGhost__10daNpc_Kn_cFv */ void daNpc_Kn_c::drawGhost() { - J3DModel* model = mpMorf[0]->getModel(); + J3DModel* model = mpModelMorf[0]->getModel(); g_env_light.settingTevStruct(7, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(model, &tevStr); @@ -1362,9 +1346,9 @@ void daNpc_Kn_c::drawGhost() { } /* 80A2D060-80A2D198 002740 0138+00 1/0 0/0 0/0 .text afterSetMotionAnm__10daNpc_Kn_cFiifi */ -bool daNpc_Kn_c::afterSetMotionAnm(int param_0, int param_1, f32 param_2, int param_3) { - field_0x15a4 &= 0xfffffc30; - J3DAnmTransform* anm_tranform = NULL; +bool daNpc_Kn_c::afterSetMotionAnm(int param_0, int i_mode, f32 param_2, int param_3) { + mPodAnmFlags &= 0xFFFFFC30; + J3DAnmTransform* bck_p = NULL; int i = 0; switch (param_0) { @@ -1383,19 +1367,19 @@ bool daNpc_Kn_c::afterSetMotionAnm(int param_0, int param_1, f32 param_2, int pa } if (l_podBckData[i][0] != -1) { - anm_tranform = static_cast(getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[i][1]], l_podBckData[i][0])); + bck_p = (J3DAnmTransform*)getTrnsfrmKeyAnmP(l_resNameList[l_podBckData[i][1]], l_podBckData[i][0]); } - if (anm_tranform && field_0x1588.init(anm_tranform, 1, param_1, 1.0f, 0, -1, true)) { - field_0x15a4 |= 0x41; + if (bck_p && mPodBck.init(bck_p, 1, i_mode, 1.0f, 0, -1, true)) { + mPodAnmFlags |= 0x41; return true; - } else { - if (anm_tranform == NULL && l_podBckData[i][0] != -1) { - return false; - } else { - return true; - } } + + if (bck_p == NULL && l_podBckData[i][0] != -1) { + return false; + } + + return true; } /* 80A2D198-80A2D3A4 002878 020C+00 2/1 0/0 0/0 .text selectAction__10daNpc_Kn_cFv */ @@ -1469,7 +1453,7 @@ int daNpc_Kn_c::selectAction() { /* 80A2D3A4-80A2D3FC 002A84 0058+00 1/1 0/0 0/0 .text teach03_selectAction__10daNpc_Kn_cFv */ void daNpc_Kn_c::teach03_selectAction() { - switch(mActionMode) { + switch (mActionMode) { case 8: mpTeachAction = &daNpc_Kn_c::teach03_attackWait; return; @@ -1487,7 +1471,7 @@ void daNpc_Kn_c::teach04_selectAction() { case 10: mpTeachAction = &daNpc_Kn_c::teach04_attackWait; return; - case 11: + case 11: mpTeachAction = &daNpc_Kn_c::teach04_finishWait; return; } @@ -1567,16 +1551,16 @@ BOOL daNpc_Kn_c::chkAction(daNpc_Kn_c::actionFunc i_action) { /* 80A2D734-80A2D7DC 002E14 00A8+00 2/2 0/0 0/0 .text * setAction__10daNpc_Kn_cFM10daNpc_Kn_cFPCvPvPv_i */ BOOL daNpc_Kn_c::setAction(daNpc_Kn_c::actionFunc i_action) { - field_0xe2a = 3; + mMode = 3; if (mpActionFunc) { - (this->*mpActionFunc)(0); + (this->*mpActionFunc)(NULL); } - field_0xe2a = 0; + mMode = 0; mpActionFunc = i_action; if (mpActionFunc) { - (this->*mpActionFunc)(0); + (this->*mpActionFunc)(NULL); } return TRUE; @@ -1584,23 +1568,23 @@ BOOL daNpc_Kn_c::setAction(daNpc_Kn_c::actionFunc i_action) { /* 80A2D7DC-80A2D9C4 002EBC 01E8+00 8/0 0/0 0/0 .text wait__10daNpc_Kn_cFPv */ int daNpc_Kn_c::wait(void* param_0) { - switch(field_0xe2a) { + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); - field_0xe2a = 2; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + mMode = 2; case 2: - if (field_0xABD == 0 && srchPlayerActor()) { + if (mTwilight == 0 && srchPlayerActor()) { mJntAnm.lookPlayer(0); } else { - if (home.angle.y != mTargetAngle.y && step(home.angle.y, 1, 0x20, 0x14, 0) != 0) { - field_0xe2a = 1; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + if (home.angle.y != mCurAngle.y && step(home.angle.y, 1, 0x20, 20, 0)) { + mMode = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } mJntAnm.lookNone(0); - }; + } case 3: default: return 1; @@ -1609,148 +1593,156 @@ int daNpc_Kn_c::wait(void* param_0) { /* 80A2D9C4-80A2DB94 0030A4 01D0+00 2/0 0/0 0/0 .text talk__10daNpc_Kn_cFPv */ int daNpc_Kn_c::talk(void* param_0) { - int bVar = 0; + int rt = 0; + BOOL var_r30 = FALSE; - switch(field_0xe2a) { + switch (mMode) { case 0: case 1: initTalk(mFlowNodeNo, 0); - field_0xe2a = 2; + mMode = 2; case 2: - if (field_0xABD == 0) { + if (!mTwilight) { mJntAnm.lookPlayer(0); - if (mTargetAngle.y == fopAcM_searchPlayerAngleY(this)) { - bVar = 1; + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + var_r30 = 1; } else { - if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 0x14, 0) != 0) { - bVar = true; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + var_r30 = true; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } } } else { - bVar = 1; + var_r30 = 1; } - if (bVar != 0 && talkProc(0,0,NULL,0)) { + if (var_r30 && talkProc(0, 0, NULL, 0)) { mActorMngr1.entry(daPy_getPlayerActorClass()); dComIfGp_event_reset(); - field_0xe2a = 3; - }; - + mMode = 3; + } + break; case 3: default: - return 0; + break; } + + return rt; } /* 80A2DB94-80A2DCB4 003274 0120+00 1/0 0/0 0/0 .text test__10daNpc_Kn_cFPv */ int daNpc_Kn_c::test(void* param_0) { - switch(field_0xe2a) { + int rt = 0; + + switch (mMode) { case 0: case 1: speedF = 0.0f; speed.setall(0.0f); - field_0xe2a = 2; + mMode = 2; case 2: - mMotionSeqMngr1.setNo(daNpc_Kn_Param_c::m.common.face_expression,-1.0f,0,0); - mMotionSeqMngr2.setNo(daNpc_Kn_Param_c::m.common.motion,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(daNpc_Kn_Param_c::m.common.face_expression, -1.0f, 0, 0); + mMotionSeqMngr.setNo(daNpc_Kn_Param_c::m.common.motion, -1.0f, 0, 0); mJntAnm.lookNone(0); attention_info.flags = 0; + break; case 3: default: - return 0; + break; } + + return rt; } /* 80A2DCB4-80A2DD70 003394 00BC+00 7/7 0/0 0/0 .text setSceneChange__10daNpc_Kn_cFi */ void daNpc_Kn_c::setSceneChange(int param_0) { for (int i = 2; i <= 7; i++) { - if (daNpcT_chkTmpBit(i + 0x5a)) { - dStage_changeScene(i,0.0,0,fopAcM_GetRoomNo(this),0,-1); + if (daNpcT_chkTmpBit(i + 90)) { + dStage_changeScene(i, 0.0, 0, fopAcM_GetRoomNo(this), 0, -1); - if (param_0 == 0) return; + if (param_0 == 0) + return; - daNpcT_offTmpBit(i + 0x5a); - daNpcT_onEvtBit(i + 0x1ea); + daNpcT_offTmpBit(i + 90); + daNpcT_onEvtBit(i + 490); return; } } - dStage_changeScene(1,0.0,0,fopAcM_GetRoomNo(this),0,-1); + dStage_changeScene(1, 0.0, 0, fopAcM_GetRoomNo(this), 0, -1); } /* 80A2DD70-80A2DF84 003450 0214+00 1/0 0/0 0/0 .text ECut_noneEquipChangeTalk__10daNpc_Kn_cFi */ int daNpc_Kn_c::ECut_noneEquipChangeTalk(int i_idx) { - dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); - int ret = 0; - int intP = -1; + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int rt = 0; + int prm = -1; - int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm"); + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); - if (intP2) { - intP = *intP2; + if (prm_p != NULL) { + prm = *prm_p; } if (event_manager->getIsAddvance(i_idx)) { - switch (intP) { + switch (prm) { case 0: mJntAnm.lookPlayer(0); speed.zero(); speedF = 0.0f; break; case 10: - field_0xdfe = 2; - initTalk(mFlowNodeNo,NULL); + mStepMode = 2; + initTalk(mFlowNodeNo, NULL); break; } } - switch (intP) { + switch (prm) { case 0: - if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) { - if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) { - ret = 1; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } } else { - ret = 1; + rt = 1; } break; case 10: - intP = talkProc(NULL,0,NULL,0); - if (intP != 0) { - ret = 1; + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; } break; default: - ret = 1; + rt = 1; } - return ret; + return rt; } /* 80A2DF84-80A2E26C 003664 02E8+00 1/0 0/0 0/0 .text * ECut_noneEquipChangeTalkStand__10daNpc_Kn_cFi */ int daNpc_Kn_c::ECut_noneEquipChangeTalkStand(int i_idx) { - dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); - int ret = 0; - int intP = -1; + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int rt = 0; + int prm = -1; - int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm"); + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); - if (intP2) { - intP = *intP2; + if (prm_p != NULL) { + prm = *prm_p; } if (event_manager->getIsAddvance(i_idx)) { - switch (intP) { + switch (prm) { case 0: mJntAnm.lookNone(0); - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(22,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(22, -1.0f, 0, 0); speed.zero(); speedF = 0.0f; break; @@ -1758,61 +1750,59 @@ int daNpc_Kn_c::ECut_noneEquipChangeTalkStand(int i_idx) { mJntAnm.lookPlayer(0); break; case 20: - field_0xdfe = 2; - initTalk(mFlowNodeNo,NULL); + mStepMode = 2; + initTalk(mFlowNodeNo, NULL); break; } } - switch (intP) { + switch (prm) { case 0: - if (mMotionSeqMngr2.getNo() != 22) { + if (mMotionSeqMngr.getNo() != 22) { break; } - if (mMotionSeqMngr2.getStepNo() > 0) { - ret = 1; + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; } - break; case 10: - if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) { - if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) { - ret = 1; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } } else { - ret = 1; + rt = 1; } break; case 20: - intP = talkProc(NULL,0,NULL,0); - if (intP != 0) { - ret = 1; + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; } break; default: - ret = 1; + rt = 1; } - return ret; + return rt; } /* 80A2E26C-80A2E528 00394C 02BC+00 1/0 0/0 0/0 .text ECut_largeDamageTalk__10daNpc_Kn_cFi */ int daNpc_Kn_c::ECut_largeDamageTalk(int i_idx) { - dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); - int ret = 0; - int intP = -1; + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int rt = 0; + int prm = -1; - int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm"); + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); - if (intP2) { - intP = *intP2; + if (prm_p != NULL) { + prm = *prm_p; } if (event_manager->getIsAddvance(i_idx)) { - switch (intP) { + switch (prm) { case 0: mJntAnm.lookPlayer(0); speed.zero(); @@ -1821,247 +1811,245 @@ int daNpc_Kn_c::ECut_largeDamageTalk(int i_idx) { case 10: break; case 20: - field_0xdfe = 2; - initTalk(mFlowNodeNo,NULL); + mStepMode = 2; + initTalk(mFlowNodeNo, NULL); break; } } - switch (intP) { + switch (prm) { case 0: if (!daPy_getPlayerActorClass()->checkPlayerFly()) { - ret = 1; + rt = 1; } daPy_getPlayerActorClass()->onLargeDamageUpStop(); break; case 10: - if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) { - if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) { - ret = 1; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); - } - + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } } else { - ret = 1; + rt = 1; } daPy_getPlayerActorClass()->onLargeDamageUpStop(); - break; case 20: - intP = talkProc(NULL,0,NULL,0); - - if (intP != 0) { - ret = 1; + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; } - - cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800); - setAngle(mTargetAngle.y); - daPy_getPlayerActorClass()->onLargeDamageUpStop(); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + daPy_getPlayerActorClass()->onLargeDamageUpStop(); break; default: - ret = 1; + rt = 1; } - return ret; + return rt; } /* 80A2E528-80A2E664 003C08 013C+00 5/0 0/0 0/0 .text teach02_start__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach02_start(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); mJntAnm.lookPlayer(0); - field_0xe2a = 2; + mMode = 2; case 2: - mEvtIdx = 8; + mEvtNo = 8; field_0xe39 = 1; - cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800); - setAngle(mTargetAngle.y); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; case 3: default: - return 1; + break; } + + return 1; } /* 80A2E664-80A2EC04 003D44 05A0+00 1/0 0/0 0/0 .text teach03_attackWait__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach03_attackWait(void* param_0) { - switch (field_0xe2a) { - case 0: - case 1: { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(9,-1.0f,0,0); - mJntAnm.lookPlayer(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x8e; - mTargetPos = current.pos; - field_0x15bc = 0; - field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac, - daNpc_Kn_Param_c::m.field_0xae); - speedF = 0; - speed.zero(); - field_0x15cc = 0; - field_0xe2a = 2; - } + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; + mTargetPos = current.pos; + field_0x15bc = 0; + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); + speedF = 0; + speed.zero(); + field_0x15cc = 0; + mMode = 2; // fallthrough - case 2: { - mCcStts.Move(); + case 2: { + mCcStts.Move(); - int cut_type = daPy_getPlayerActorClass()->getCutType(); - if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) { // backslice - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); - mCylCc.OffTgShield(); - } else { - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); - mCylCc.OnTgShield(); - } + int cut_type = daPy_getPlayerActorClass()->getCutType(); + if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); + mCylCc.OffTgShield(); + } else { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCylCc.OnTgShield(); + } - if (mCylCc.ChkTgHit()) { - if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) { - if (mType == 2) { - mEvtIdx = 14; - } else if (mType == 3) { - mEvtIdx = 15; - } + if (mCylCc.ChkTgHit()) { + if (cut_type == daPy_py_c::CUT_TYPE_TWIRL) { + if (mType == 2) { + mEvtNo = 14; + } else if (mType == 3) { + mEvtNo = 15; + } - s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y; - int absAngle = angle < 0 ? -angle : angle; + s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y; + int absAngle = angle < 0 ? -angle : angle; - if (absAngle < 0x4000) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x12,-1.0f,0,0); + if (absAngle < 0x4000) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); - setAngle(fopAcM_searchPlayerAngleY(this)); - speedF = -daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1); - } else { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0xe,-1.0f,0,0); - - setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); - speedF = daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1); - } - - mJntAnm.lookNone(0); - speed.y = daNpc_Kn_Param_c::m.field_0xa4; - mCreature.startCollisionSE(Z2SE_HIT_SWORD, 0x1f); - } else { setAngle(fopAcM_searchPlayerAngleY(this)); - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } else { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xe, -1.0f, 0, 0); - if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { - mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK,0x28); + setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); + speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } + + mJntAnm.lookNone(0); + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f); + } else { + setAngle(fopAcM_searchPlayerAngleY(this)); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0); + + if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); + } else { + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); + } + } + } else { + if (daPy_getPlayerActorClass()->checkSideStep()) { + field_0x15cc = 1; + } + + if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) { + mTargetPos = current.pos; + field_0x15bc = 0; + + BOOL is_lockon = FALSE; + if (dComIfGp_getAttention()->LockonTruth()) { + is_lockon = TRUE; + } + + if (checkCollisionSword()) { + mEvtNo = 4; + } else { + mEvtNo = 1; + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + + if (field_0x15cc) { + mFlowNodeNo = 0x2e4; + } else { + if (is_lockon) { + mFlowNodeNo = 0x2e2; } else { - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28); + mFlowNodeNo = 0x2e3; } } } else { - - if (daPy_getPlayerActorClass()->checkSideStep()) { - field_0x15cc = 1; - } - - if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) { - mTargetPos = current.pos; - field_0x15bc = 0; - - BOOL truth = FALSE; - if (dComIfGp_getAttention()->LockonTruth()) { - truth = TRUE; - } - - if (checkCollisionSword()) { - mEvtIdx = 4; - } else { - mEvtIdx = 1; - } - - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); - - if (field_0x15cc) { - mFlowNodeNo = 0x2e4; - } else { - if (truth) { - mFlowNodeNo = 0x2e2; - } else { - mFlowNodeNo = 0x2e3; - } - } - } else { - calcSwordAttackMove(0); - } + calcSwordAttackMove(0); } } - // fallthrough - case 3: - default: { - return 1; - } + break; } + case 3: + default: + break; + } + + return 1; } /* 80A2EC04-80A2EF8C 0042E4 0388+00 1/0 0/0 0/0 .text teach04_attackWait__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach04_attackWait(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(9,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); mJntAnm.lookPlayer(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x8e; + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; mTargetPos = current.pos; field_0x15bc = 0; - field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac, - daNpc_Kn_Param_c::m.field_0xae); + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); speedF = 0; speed.zero(); - field_0xe2a = 2; + mMode = 2; case 2: - calcSlip(); - mCcStts.Move(); - if (mCylCc.ChkTgShieldHit()) { - u8 cut_type = daPy_getPlayerActorClass()->getCutType(); + calcSlip(); + mCcStts.Move(); + if (mCylCc.ChkTgShieldHit()) { + u8 cut_type = daPy_getPlayerActorClass()->getCutType(); if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { - s16 angle = cLib_targetAngleY(&mCylCc.GetTgHitAc()->current.pos, ¤t.pos); - cXyz pos(0.0f,0.0f, daNpc_Kn_Param_c::m.field_0x94); + fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc(); + JUT_ASSERT(3715, 0 != aTgHitActor_p); + + s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, ¤t.pos); + cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance); mDoMtx_stack_c::YrotS(angle); - mDoMtx_stack_c::multVec(&pos, &mTargetPos); + mDoMtx_stack_c::multVec(&offset, &mTargetPos); mTargetPos += current.pos; + field_0x15bc = 1; mCylCc.ClrTgHit(); - mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); mActionMode = 10; break; } } if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) { - BOOL truth = FALSE; - + BOOL is_lockon = FALSE; if (dComIfGp_getAttention()->LockonTruth()) { - truth = TRUE; + is_lockon = TRUE; } if (checkCollisionSword()) { - mEvtIdx = 4; + mEvtNo = 4; } else { - mEvtIdx = 1; + mEvtNo = 1; } - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); - if (truth) { + if (is_lockon) { mFlowNodeNo = 0x2f3; } else { mFlowNodeNo = 0x2f4; @@ -2069,15 +2057,16 @@ int daNpc_Kn_c::teach04_attackWait(void* param_0) { } else { if (mCylCc.ChkTgHit()) { - if (mCylCc.GetTgHitObj()->ChkAtType(AT_TYPE_SHIELD_ATTACK) == 0) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0); - mCreature.startCollisionSE(Z2SE_HIT_SWORD, 0x28); + if (!mCylCc.GetTgHitObj()->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); break; } } calcSwordAttackMove(1); } + break; case 3: default: break; @@ -2088,54 +2077,55 @@ int daNpc_Kn_c::teach04_attackWait(void* param_0) { /* 80A2EF8C-80A2F24C 00466C 02C0+00 1/0 0/0 0/0 .text teach04_headBreakWait__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach04_headBreakWait(void* param_0) { - switch (field_0xe2a) { - case 0: - case 1: { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0xb,-1.0f,1,0); - mJntAnm.lookNone(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x90; - onHeadLockFlg(); - field_0xe2a = 2; - } + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xb, -1.0f, 1, 0); + mJntAnm.lookNone(0); + field_0xdec = daNpc_Kn_Param_c::m.followup_wait_time; + onHeadLockFlg(); + mMode = 2; // fallthrough - case 2: { - calcSlip(); - field_0x15c0.set(10.0f,-10.0f,0.0f); - int head_joint_no = getHeadJointNo(); - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(head_joint_no)); - mDoMtx_stack_c::multVec(&field_0x15c0, &field_0x15c0); - setHeadLockPos(&field_0x15c0); - mCcStts.Move(); + case 2: { + calcSlip(); + field_0x15c0.set(10.0f, -10.0f, 0.0f); - if (mCylCc.ChkTgHit() && daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP) { - s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position); - cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x94); - mDoMtx_stack_c::YrotS(angle); - mDoMtx_stack_c::multVec(&pos,&mTargetPos); - mTargetPos += current.pos; - field_0x15bc = 1; - mCylCc.ClrTgHit(); - mCreature.startCollisionSE(Z2SE_HIT_SWORD, 0x1e); - mActionMode = 11; - break; - } else { - if (!cLib_calcTimer(&field_0xdec)) { - mEvtIdx = 1; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); - mFlowNodeNo = 0x2f2; - mActionMode = 9; - } + int head_joint_no = getHeadJointNo(); + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(head_joint_no)); + mDoMtx_stack_c::multVec(&field_0x15c0, &field_0x15c0); + setHeadLockPos(&field_0x15c0); + + mCcStts.Move(); + + if (mCylCc.ChkTgHit() && daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_HEAD_JUMP) { + s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position); + cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance); + mDoMtx_stack_c::YrotS(angle); + mDoMtx_stack_c::multVec(&offset, &mTargetPos); + mTargetPos += current.pos; + + field_0x15bc = 1; + mCylCc.ClrTgHit(); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1e); + mActionMode = 11; + break; + } else { + if (cLib_calcTimer(&field_0xdec) == 0) { + mEvtNo = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + mFlowNodeNo = 0x2f2; + mActionMode = 9; } - break; } - // fallthrough - case 3: - offHeadLockFlg(); - // fallthrough - default: - break; + break; + } + case 3: + offHeadLockFlg(); + break; + default: + break; } return 1; @@ -2144,57 +2134,60 @@ int daNpc_Kn_c::teach04_headBreakWait(void* param_0) { /* 80A2F24C-80A2F600 00492C 03B4+00 1/0 0/0 0/0 .text teach04_finishWait__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach04_finishWait(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0xb,-1.0f,1,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xb, -1.0f, 1, 0); mJntAnm.lookNone(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x90; - field_0xe2a = 2; + field_0xdec = daNpc_Kn_Param_c::m.followup_wait_time; + mMode = 2; case 2: calcSlip(); mCcStts.Move(); if (mCylCc.ChkTgHit() && daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_GUARD_ATTACK) { if (mType == 3) { - mEvtIdx = 16; + mEvtNo = 16; } else { - mEvtIdx = 17; + mEvtNo = 17; } cXyz* pos_p = mCylCc.GetTgHitPosP(); - s16 angle = (pos_p ? cLib_targetAngleY(¤t.pos, pos_p) : fopAcM_searchPlayerAngleY(this)) - current.angle.y; + s16 angle = + (pos_p ? cLib_targetAngleY(¤t.pos, pos_p) : fopAcM_searchPlayerAngleY(this)) - + current.angle.y; int absAngle = angle < 0 ? -angle : angle; - if (absAngle < 0x4000) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x12,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); setAngle(fopAcM_searchPlayerAngleY(this)); - speedF = -daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); } else { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0xe,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xe, -1.0f, 0, 0); setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); - speedF = daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); } - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f); + + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f); mJntAnm.lookNone(0); - speed.y = daNpc_Kn_Param_c::m.field_0xa4; + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; break; } else { - if (!cLib_calcTimer(&field_0xdec)) { - mEvtIdx = 1; + if (cLib_calcTimer(&field_0xdec) == 0) { + mEvtNo = 1; mFlowNodeNo = 0x306; mActionMode = 9; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); } } + break; case 3: default: break; @@ -2206,27 +2199,27 @@ int daNpc_Kn_c::teach04_finishWait(void* param_0) { /* 80A2F600-80A2FBB4 004CE0 05B4+00 1/0 0/0 0/0 .text teach05_surpriseAttackWait__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(9,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); mJntAnm.lookPlayer(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x8e; + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; mTargetPos = current.pos; field_0x15bc = 0; - field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac, - daNpc_Kn_Param_c::m.field_0xae); + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); speedF = 0.0f; speed.zero(); - field_0xe2a = 2; - case 2: + mMode = 2; + case 2: { calcSlip(); mCcStts.Move(); int cut_type = daPy_getPlayerActorClass()->getCutType(); - - if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) { + if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || + cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) + { mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); mCylCc.OffTgShield(); } else { @@ -2234,49 +2227,50 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) { mCylCc.OnTgShield(); } - if (mCylCc.ChkTgHit()){ - if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) { + if (mCylCc.ChkTgHit()) { + if (cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_B || + cut_type == daPy_py_c::CUT_TYPE_MORTAL_DRAW_A) + { if (mType == 4) { - mEvtIdx = 0x13; + mEvtNo = 0x13; } else { - mEvtIdx = 0x14; + mEvtNo = 0x14; } s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y; int absAngle = angle < 0 ? -angle : angle; if (absAngle < 0x4000) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x12,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); setAngle(fopAcM_searchPlayerAngleY(this)); - speedF = -daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); } else { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(14,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(14, -1.0f, 0, 0); setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); - speedF = daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1); + speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); } - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f); mJntAnm.lookNone(0); - speed.y = daNpc_Kn_Param_c::m.field_0xa4; + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; } else { setAngle(fopAcM_searchPlayerAngleY(this)); - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0); - + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0); + if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { - mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK,0x28); + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); } else { - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); } break; } - } else { if (daPy_getPlayerActorClass()->checkSideStep()) { field_0x15cc = 1; @@ -2287,25 +2281,24 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) { if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) { mTargetPos = current.pos; field_0x15bc = 0; - - BOOL check = FALSE; - + + BOOL is_lockon = FALSE; if (dComIfGp_getAttention()->LockonTruth()) { - check = TRUE; + is_lockon = TRUE; } if (checkCollisionSword()) { - mEvtIdx = 4; + mEvtNo = 4; } else { - mEvtIdx = 1; + mEvtNo = 1; } - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); - - if (check != FALSE) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + + if (is_lockon != FALSE) { mFlowNodeNo = 0x2ec; - + } else { if (!daPy_getPlayerActorClass()->checkItemSwordEquip()) { mFlowNodeNo = 0x2ea; @@ -2315,7 +2308,8 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) { } } } - + break; + } case 3: default: break; @@ -2325,48 +2319,51 @@ int daNpc_Kn_c::teach05_surpriseAttackWait(void* param_0) { } /* 80A2FBB4-80A2FC14 005294 0060+00 1/1 0/0 0/0 .text s_sub6__FPvPv */ -static void* s_sub6(void* i_this, void* param_1) { - if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1) { - static_cast(i_this)->setActionMode(18); +static void* s_sub6(void* i_actor, void* i_other) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other) { + ((daNpc_Kn_c*)i_actor)->setActionMode(18); } - - return 0; + + return NULL; } /* 80A2FC14-80A2FC80 0052F4 006C+00 2/2 0/0 0/0 .text s_subEnd6__FPvPv */ -static void* s_subEnd6(void* i_this, void* param_1) { - if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1 && static_cast(i_this)->getActionMode() != 17) { - static_cast(i_this)->setActionMode(17); +static void* s_subEnd6(void* i_actor, void* i_other) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other && + ((daNpc_Kn_c*)i_actor)->getActionMode() != 17) + { + ((daNpc_Kn_c*)i_actor)->setActionMode(17); } - - return 0; + + return NULL; } /* 80A2FC80-80A30398 005360 0718+00 1/0 0/0 0/0 .text teach06_superJumpWait__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach06_superJumpWait(void* param_0) { - // NONMATCHING - switch (field_0xe2a) { + // NONMATCHING - value comparison not getting optimized + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(9,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); mJntAnm.lookPlayer(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x90; + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; mTargetPos = current.pos; field_0x15bc = 0; - field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac, - daNpc_Kn_Param_c::m.field_0xae); + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); speedF = 0.0f; speed.zero(); field_0x15bd = 0; - field_0xe2a = 2; - case 2: + mMode = 2; + case 2: { calcSlip(); mCcStts.Move(); int cut_type = daPy_getPlayerActorClass()->getCutType(); - - if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) { + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT || + cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || + cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) + { mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); mCylCc.OffTgShield(); } else { @@ -2375,107 +2372,105 @@ int daNpc_Kn_c::teach06_superJumpWait(void* param_0) { } if (mCylCc.ChkTgHit()) { - if (field_0x15bd == 2 && cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) { - mEvtIdx = 22; - fpcM_Search(s_subEnd6,this); - } else { - calcSwordAttackMove(1); - if (field_0x15bd == 2 || cLib_calcTimer(&field_0xdec) && checkCollisionSword() && field_0x15bd != 1) { - if (daPy_getPlayerActorClass()->checkDamageImpact()) { - BOOL check = FALSE; - - if (dComIfGp_getAttention()->LockonTruth()) { - check = TRUE; - } - - if (daPy_getPlayerActorClass()->checkSideStep()) { - mFlowNodeNo = 0x2fb; - - } else { - if (check == FALSE) { - mFlowNodeNo = 0x2fc; - } else { - mFlowNodeNo = 0x2fd; - } - } - } + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) { + if (mType == 5) { + mEvtNo = 0x15; } else { - mTargetPos = current.pos; - field_0x15bc = 9; + mEvtNo = 0x17; + } - BOOL check = FALSE; - - if (dComIfGp_getAttention()->LockonTruth()) { - check = TRUE; - } + s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y; + int absAngle = angle < 0 ? -angle : angle; - if (checkCollisionSword() && field_0x15bd == 1) { - mEvtIdx = 4; - } else { - mEvtIdx = 1; - } + if (absAngle < 0x4000) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); - fpcM_Search(s_sub6,this); + setAngle(fopAcM_searchPlayerAngleY(this)); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } else { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xe, -1.0f, 0, 0); + setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); + speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } + mJntAnm.lookNone(0); + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f); + } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT) { + fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc(); + JUT_ASSERT(4286, 0 != aTgHitActor_p); + + s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, ¤t.pos); + cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance); + mDoMtx_stack_c::YrotS(angle); + mDoMtx_stack_c::multVec(&offset, &mTargetPos); + mTargetPos += current.pos; + + field_0x15bc = 1; + mCylCc.ClrTgHit(); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1E, -1.0f, 1, 0); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1E); + } else { + setAngle(fopAcM_searchPlayerAngleY(this)); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0); + + if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); + } else { + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); } } - } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) { - if (mType == 5) { - mEvtIdx = 0x15; + } else { + if (field_0x15bd == 2 && + (cut_type != daPy_py_c::CUT_TYPE_LARGE_JUMP && cut_type != daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH)) + { + mEvtNo = 22; + fpcM_Search(s_subEnd6, this); } else { - mEvtIdx = 0x17; + calcSwordAttackMove(1); + if (field_0x15bd != 2 && (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword() || field_0x15bd == 1)) { + mTargetPos = current.pos; + field_0x15bc = 0; + + BOOL is_lockon = FALSE; + if (dComIfGp_getAttention()->LockonTruth()) { + is_lockon = TRUE; + } + + if (checkCollisionSword() || field_0x15bd == 1) { + mEvtNo = 4; + } else { + mEvtNo = 1; + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + fpcM_Search(s_sub6, this); + } else if (!daPy_getPlayerActorClass()->checkDamageImpact()) { + BOOL is_lockon = FALSE; + if (dComIfGp_getAttention()->LockonTruth()) { + is_lockon = TRUE; + } + + if (daPy_getPlayerActorClass()->checkCutLargeJumpCharge()) { + mFlowNodeNo = 0x2fb; + } else { + if (is_lockon) { + mFlowNodeNo = 0x2fc; + } else { + mFlowNodeNo = 0x2fd; + } + } + } } - - s16 angle = fopAcM_searchPlayerAngleY(this) - current.angle.y; - int absAngle = angle < 0 ? -angle : angle; - - if (absAngle < 0x4000) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x12,-1.0f,0,0); - - setAngle(fopAcM_searchPlayerAngleY(this)); - speedF = -daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); - } else { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0xe,-1.0f,0,0); - setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); - speedF = daNpc_Kn_Param_c::m.field_0xa0; - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); - } - mJntAnm.lookNone(0); - speed.y = daNpc_Kn_Param_c::m.field_0xa4; - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f); - break; - - } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT) { - fopAc_ac_c* hit_ac = mCylCc.GetTgHitAc(); - s16 angle = cLib_targetAngleY(&hit_ac->current.pos, ¤t.pos); - cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.common.face_expression); - mDoMtx_stack_c::YrotS(angle); - mDoMtx_stack_c::multVec(&pos, &pos); } - // iVar2 = ::dCcD_GObjInf::GetTgHitAc((dCcD_GObjInf *)(this + 0x122c)); - // if (iVar2 == 0) { - // uVar4 = JUTAssertion::getSDevice(); - // JUTAssertion::showAssert(uVar4,d_a_npc_kn::@126361,0x10be,d_a_npc_kn::@127478); - // m_Do_printf::OSPanic(d_a_npc_kn::@126361,0x10be,&d_a_npc_kn::@124961); - // } - // sVar8 = SComponentD::(iVar2 + 0x4d4,this + 0x4d4); - // ::cXyz::cXyz(&cStack_2c,0.0,0.0,*(float *)(*(int *)(this + 0x1228) + 0x9c)); - // mDoMtx_stack_c::YrotS(sVar8); - // mDoMtx_stack_c::multVec(&cStack_2c,(cXyz *)(this + 0x1600)); - // ::cXyz::operator_+=((cXyz *)(this + 0x1600),(Vec *)(this + 0x4d4)); - // this[0x160c] = (daNpc_Kn_c)0x1; - // (**(code **)(*(int *)(this + 0x1268) + 0x24))(); - // ::daNpcT_MotionSeqMngr_c::setNo((daNpcT_MotionSeqMngr_c *)(this + 0xbd4),1,-1.0,0,0); - // ::daNpcT_MotionSeqMngr_c::setNo((daNpcT_MotionSeqMngr_c *)(this + 0xbf8),0x1e,-1.0,1,0); - // (**(code **)(*(int *)(this + 0x5cc) + 0x2c))(this + 0x5cc,0x40000,0x1e); - // } else { - - // } - + break; + } case 3: default: break; @@ -2487,14 +2482,14 @@ int daNpc_Kn_c::teach06_superJumpWait(void* param_0) { /* 80A30398-80A305A8 005A78 0210+00 1/0 0/0 0/0 .text teach06_divideMove__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach06_divideMove(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: - case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(9,-1.0f,0,0); + case 1: { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); mJntAnm.lookPlayer(0); - cXyz pos(0.0f,0.0f,180.0f); + cXyz pos(0.0f, 0.0f, 180.0f); s16 angle; if (mDivideNo == 1) { angle = home.angle.y - 0x1555; @@ -2504,18 +2499,23 @@ int daNpc_Kn_c::teach06_divideMove(void* param_0) { mDoMtx_stack_c::transS(home.pos); mDoMtx_stack_c::YrotM(angle); - mDoMtx_stack_c::multVec(&pos,&pos); + mDoMtx_stack_c::multVec(&pos, &pos); mTargetPos = pos; - field_0xe2a = 2; - case 2: - cXyz pos2(current.pos); - cLib_chasePos(&pos2, mTargetPos, 6.0f); - setPos(pos2); - cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this), 2, 0x800); - setAngle(mTargetAngle.y); + mMode = 2; + } + case 2: { + cXyz pos(current.pos); + cLib_chasePos(&pos, mTargetPos, 6.0f); + setPos(pos); + + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + if (!dComIfGp_event_runCheck()) { mActionMode = 15; } + break; + } case 3: default: break; @@ -2527,22 +2527,23 @@ int daNpc_Kn_c::teach06_divideMove(void* param_0) { /* 80A305A8-80A30708 005C88 0160+00 1/0 0/0 0/0 .text teach06_waitDivide__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach06_waitDivide(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); mJntAnm.lookPlayer(0); speedF = 0.0f; speed.zero(); - field_0xe2a = 2; + mMode = 2; break; case 2: - cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this), 2, 0x800); - setAngle(mTargetAngle.y); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); if (!dComIfGp_event_runCheck()) { mActionMode = 15; } + break; case 3: default: break; @@ -2551,38 +2552,187 @@ int daNpc_Kn_c::teach06_waitDivide(void* param_0) { return 1; } -// FIXME: Remove once teach06_superJump functions get decompiled. -f32 dummy_lits_8270_8271(int sel) { - switch (sel) { - case 0: return 13.0f; - default: return 14.0f; - } -} - /* 80A30708-80A30D44 005DE8 063C+00 1/0 0/0 0/0 .text teach06_superJumpWaitDivide__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach06_superJumpWaitDivide(void* param_0) { - // NONMATCHING + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + field_0x15af = 1; + mTargetPos = current.pos; + field_0x15bc = 0; + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); + speedF = 0.0f; + speed.zero(); + mMode = 2; + case 2: { + calcSlip(); + mCcStts.Move(); + + int cut_type = daPy_getPlayerActorClass()->getCutType(); + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); + mCylCc.OffTgShield(); + } else { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCylCc.OnTgShield(); + } + + if (mCylCc.ChkTgHit()) { + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP || cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_FINISH) { + mActionMode = 16; + + daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID); + if (parent_p != NULL) { + parent_p->setTalkFlag(2); + } + + int spC; + s16 temp_r0_2 = fopAcM_searchPlayerAngleY(this) - current.angle.y; + if (temp_r0_2 < 0) { + spC = -temp_r0_2; + } else { + spC = temp_r0_2; + } + + if (spC < 0x4000) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); + setAngle(fopAcM_searchPlayerAngleY(this)); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } else { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xE, -1.0f, 0, 0); + setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); + speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } + + mJntAnm.lookNone(0); + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1F); + } else if (cut_type == daPy_py_c::CUT_TYPE_LARGE_JUMP_INIT) { + fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc(); + JUT_ASSERT(4619, 0 != aTgHitActor_p); + + s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, ¤t.pos); + cXyz offset(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance); + mDoMtx_stack_c::YrotS(angle); + mDoMtx_stack_c::multVec(&offset, &mTargetPos); + mTargetPos += current.pos; + + field_0x15bc = 1; + mCylCc.ClrTgHit(); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1E, -1.0f, 1, 0); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1E); + } else { + setAngle(fopAcM_searchPlayerAngleY(this)); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0); + + if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); + } else { + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); + } + } + } else { + if (dComIfGp_event_runCheck()) { + speedF = 0.0f; + speed.zero(); + } else { + calcSwordAttackMove(1); + } + + if (checkCollisionSword()) { + daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID); + if (parent_p != NULL) { + parent_p->setTalkFlag(1); + parent_p->mFlowNodeNo = mFlowNodeNo; + } + } else if (!daPy_getPlayerActorClass()->checkDamageImpact()) { + BOOL is_lockon = FALSE; + if (dComIfGp_getAttention()->LockonTruth()) { + is_lockon = TRUE; + } + + if (daPy_getPlayerActorClass()->checkCutLargeJumpCharge()) { + mFlowNodeNo = 0x2FB; + } else if (is_lockon) { + mFlowNodeNo = 0x2FC; + } else { + mFlowNodeNo = 0x2FD; + } + } + } + break; + } + case 3: + default: + break; + } + + return 1; } /* 80A30D44-80A30EDC 006424 0198+00 1/0 0/0 0/0 .text teach06_superJumpedDivide__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach06_superJumpedDivide(void* param_0) { - // NONMATCHING + switch (mMode) { + case 0: + case 1: + mTargetPos = current.pos; + field_0x15bc = 0; + mMode = 2; + case 2: + if (mMotionSeqMngr.getNo() == 19 || mMotionSeqMngr.getNo() == 15) { + if (mMotionSeqMngr.getStepNo() <= 0) { + if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + } else { + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 18) { + mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + } + } + break; + case 3: + default: + break; + } + + return 1; } /* 80A30EDC-80A30F5C 0065BC 0080+00 1/0 0/0 0/0 .text teach06_warpDelete__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach06_warpDelete(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: field_0x170c = 1; - field_0xe2a = 2; + mMode = 2; case 2: field_0x170c = 1; ctrlWarp(); - if (this->field_0x170c == 2) { + + if (field_0x170c == 2) { fopAcM_delete(this); } case 3: @@ -2594,51 +2744,202 @@ int daNpc_Kn_c::teach06_warpDelete(void* param_0) { } /* 80A30F5C-80A30FBC 00663C 0060+00 1/1 0/0 0/0 .text s_sub7__FPvPv */ -static void* s_sub7(void* i_this, void* param_1) { - if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1) { - static_cast(i_this)->setActionMode(24); +static void* s_sub7(void* i_actor, void* i_other) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other) { + ((daNpc_Kn_c*)i_actor)->setActionMode(24); } - - return 0; + + return NULL; } /* 80A30FBC-80A31028 00669C 006C+00 2/2 0/0 0/0 .text s_subEnd7__FPvPv */ -static void* s_subEnd7(void* i_this, void* param_1) { - if (fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_NPC_KN && i_this != param_1 && static_cast(i_this)->getActionMode() != 23) { - static_cast(i_this)->setActionMode(23); +static void* s_subEnd7(void* i_actor, void* i_other) { + if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_NPC_KN && i_actor != i_other && + ((daNpc_Kn_c*)i_actor)->getActionMode() != 23) + { + ((daNpc_Kn_c*)i_actor)->setActionMode(23); } - - return 0; + + return NULL; } /* 80A31028-80A315D0 006708 05A8+00 1/0 0/0 0/0 .text teach07_superTurnAttackWait__10daNpc_Kn_cFPv */ +// NONMATCHING - value comparison not getting optimized int daNpc_Kn_c::teach07_superTurnAttackWait(void* param_0) { - // NONMATCHING + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; + mTargetPos = current.pos; + field_0x15bc = 0; + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); + speedF = 0.0f; + speed.zero(); + field_0x15bd = 0; + mMode = 2; + case 2: { + calcSlip(); + mCcStts.Move(); + + int cut_type = daPy_getPlayerActorClass()->getCutType(); + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); + mCylCc.OffTgShield(); + } else { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCylCc.OnTgShield(); + } + + if (mCylCc.ChkTgHit()) { + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + if (mType == 6) { + mEvtNo = 0x18; + } + + int spC; + s16 temp_r0_2 = fopAcM_searchPlayerAngleY(this) - current.angle.y; + if (temp_r0_2 < 0) { + spC = -temp_r0_2; + } else { + spC = temp_r0_2; + } + + if (spC < 0x4000) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); + setAngle(fopAcM_searchPlayerAngleY(this)); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } else { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xE, -1.0f, 0, 0); + setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); + speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } + + mJntAnm.lookNone(0); + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1F); + break; + } else { + setAngle(fopAcM_searchPlayerAngleY(this)); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0); + + if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); + } else { + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); + } + } + } else if (field_0x15bd == 2 && cut_type != daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT && cut_type != daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + mEvtNo = 0x19; + fpcM_Search(s_subEnd7, this); + break; + } + + calcSwordAttackMove(1); + + if (field_0x15bd != 2 && (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword() || field_0x15bd == 1)) { + mTargetPos = current.pos; + field_0x15bc = 0; + + BOOL is_lockon = FALSE; + if (dComIfGp_getAttention()->LockonTruth()) { + is_lockon = TRUE; + } + + if (checkCollisionSword() || field_0x15bd == 1) { + mEvtNo = 4; + } else { + mEvtNo = 1; + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + mFlowNodeNo = 0x303; + fpcM_Search(s_sub7, this); + } + break; + } + case 3: + default: + break; + } + + return 1; } /* 80A315D0-80A317F8 006CB0 0228+00 1/0 0/0 0/0 .text teach07_divideMove__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach07_divideMove(void* param_0) { - // NONMATCHING + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + + if (mDivideNo == 1) { + field_0x1710 = home.angle.y - 0x2AAA; + } else { + field_0x1710 = home.angle.y + 0x2AAA; + } + + field_0x1712 = home.angle.y + 0x8000; + + mTargetPos = current.pos; + field_0x15bc = 0; + speedF = 0.0f; + speed.zero(); + mMode = 2; + case 2: { + cLib_chaseAngleS(&field_0x1712, field_0x1710, 0x100); + + cXyz offset(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(daPy_getPlayerActorClass()->current.pos); + mDoMtx_stack_c::YrotM(field_0x1712); + mDoMtx_stack_c::multVec(&offset, &offset); + setPos(offset); + + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + + if (!dComIfGp_event_runCheck()) { + mActionMode = 21; + } + break; + } + case 3: + default: + break; + } + + return 1; } /* 80A317F8-80A31958 006ED8 0160+00 1/0 0/0 0/0 .text teach07_waitDivide__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach07_waitDivide(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); mJntAnm.lookPlayer(0); speedF = 0.0f; speed.zero(); - field_0xe2a = 2; + mMode = 2; break; case 2: - cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this), 2, 0x800); - setAngle(mTargetAngle.y); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + if (!dComIfGp_event_runCheck()) { mActionMode = 21; } @@ -2653,27 +2954,155 @@ int daNpc_Kn_c::teach07_waitDivide(void* param_0) { /* 80A31958-80A31E24 007038 04CC+00 1/0 0/0 0/0 .text * teach07_superTurnAttackWaitDivide__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach07_superTurnAttackWaitDivide(void* param_0) { - // NONMATCHING + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + field_0x15af = 1; + mTargetPos = current.pos; + field_0x15bc = 0; + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); + speedF = 0.0f; + speed.zero(); + mMode = 2; + case 2: { + calcSlip(); + mCcStts.Move(); + + int cut_type = daPy_getPlayerActorClass()->getCutType(); + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); + mCylCc.OffTgShield(); + } else { + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCylCc.OnTgShield(); + } + + if (mCylCc.ChkTgHit()) { + if (cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_LEFT || cut_type == daPy_py_c::CUT_TYPE_LARGE_TURN_RIGHT) { + mActionMode = 22; + + daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID); + if (parent_p != NULL) { + parent_p->setTalkFlag(2); + } + + int spC; + s16 temp_r0_2 = fopAcM_searchPlayerAngleY(this) - current.angle.y; + if (temp_r0_2 < 0) { + spC = -temp_r0_2; + } else { + spC = temp_r0_2; + } + + if (spC < 0x4000) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); + setAngle(fopAcM_searchPlayerAngleY(this)); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } else { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xE, -1.0f, 0, 0); + setAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); + speedF = daNpc_Kn_Param_c::m.attack_disappear_speed_h; + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } + + mJntAnm.lookNone(0); + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1F); + break; + } else { + setAngle(fopAcM_searchPlayerAngleY(this)); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1B, -1.0f, 1, 0); + + if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); + } else { + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); + } + } + } + + if (dComIfGp_event_runCheck()) { + speedF = 0.0f; + speed.zero(); + } else { + calcSwordAttackMove(1); + } + + if (checkCollisionSword()) { + daNpc_Kn_c* parent_p = (daNpc_Kn_c*)fpcM_SearchByID(parentActorID); + if (parent_p != NULL) { + parent_p->setTalkFlag(1); + } + } + break; + } + case 3: + default: + break; + } + + return 1; } /* 80A31E24-80A31FBC 007504 0198+00 1/0 0/0 0/0 .text * teach07_superTurnAttackedDivide__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach07_superTurnAttackedDivide(void* param_0) { - // NONMATCHING + switch (mMode) { + case 0: + case 1: + mTargetPos = current.pos; + field_0x15bc = 0; + mMode = 2; + case 2: + if (mMotionSeqMngr.getNo() == 19 || mMotionSeqMngr.getNo() == 15) { + if (mMotionSeqMngr.getStepNo() <= 0) { + if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + } else { + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 18) { + mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + } + } + break; + case 3: + default: + break; + } + + return 1; } /* 80A31FBC-80A3203C 00769C 0080+00 1/0 0/0 0/0 .text teach07_warpDelete__10daNpc_Kn_cFPv */ int daNpc_Kn_c::teach07_warpDelete(void* param_0) { - switch (field_0xe2a) { + switch (mMode) { case 0: case 1: field_0x170c = 1; - field_0xe2a = 2; + mMode = 2; case 2: field_0x170c = 1; ctrlWarp(); - if (this->field_0x170c == 2) { + if (field_0x170c == 2) { fopAcM_delete(this); } case 3: @@ -2684,64 +3113,61 @@ int daNpc_Kn_c::teach07_warpDelete(void* param_0) { return 1; } -/* 80A3203C-80A324C4 00771C 0488+00 3/0 0/0 0/0 .text ECut_secondEncount__10daNpc_Kn_cFi */ +/* 80A3203C-80A324C4 00771C 0488+00 3/0 0/0 0/0 .text ECut_secondEncount__10daNpc_Kn_cFi + */ int daNpc_Kn_c::ECut_secondEncount(int i_idx) { - // NONMATCHING - need to finish second switch under case 10 - dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); - int ret = 0; - int intP = -1; + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int rt = 0; + int prm = -1; - int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm"); - - if (intP2) { - intP = *intP2; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; } if (event_manager->getIsAddvance(i_idx)) { - switch (intP) { + switch (prm) { case 0: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); break; - case 2: - daNpc_GWolf_c* pGWolf = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID); - - if (fopAcM_GetName(pGWolf) == PROC_NPC_GWOLF) { - pGWolf->setMotion(4,-1.0f,FALSE); + case 2: { + daNpc_GWolf_c* gwolf_p = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID); + if (fopAcM_GetName(gwolf_p) == PROC_NPC_GWOLF) { + gwolf_p->setMotion(4, -1.0f, FALSE); } - break; - case 5: - daNpc_GWolf_c* pProc = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID); - - if (pProc) { - fopAcM_delete(pProc); - }; + } + case 5: { + daNpc_GWolf_c* gwolf_p = (daNpc_GWolf_c*)fpcM_SearchByID(parentActorID); + if (gwolf_p != NULL) { + fopAcM_delete(gwolf_p); + } field_0xe2c = 0; break; + } case 10: switch (mType) { case 1: - initTalk(0x2bd,0); + initTalk(0x2bd, NULL); break; case 2: - initTalk(0x2de,0); + initTalk(0x2de, NULL); break; case 3: - initTalk(0x2ee,0); + initTalk(0x2ee, NULL); break; case 4: - initTalk(0x2e6,0); + initTalk(0x2e6, NULL); break; case 5: - initTalk(0x2f7,0); + initTalk(0x2f7, NULL); break; case 6: - initTalk(0x2ff,0); + initTalk(0x2ff, NULL); break; } - break; case 20: field_0xdec = 30; @@ -2749,41 +3175,71 @@ int daNpc_Kn_c::ECut_secondEncount(int i_idx) { } } - switch (intP) { + switch (prm) { case 0: - ret = 1; + rt = 1; break; case 2: - ret = 1; + rt = 1; break; case 5: - ret = 1; + rt = 1; break; case 10: - if (talkProc(0,0,NULL,0)) { + if (talkProc(0, 0, NULL, 0)) { if (mFlow.getChoiceNo() == 0) { - int local_38 = 0; - + int sp8 = 0; switch (mType) { case 1: + if (mFlow.getEventId(&sp8) == 0x1A && sp8 == 0) { + rt = 1; + } else { + setSceneChange(0); + } break; case 2: + if (mFlow.getEventId(&sp8) == 0x1A) { + if (sp8 == 1) { + rt = 1; + } else if (sp8 == 2) { + mEvtNo = 0xD; + evtChange(); + } + } else { + setSceneChange(0); + } break; case 3: + if (mFlow.getEventId(&sp8) == 0x1A && sp8 == 3) { + rt = 1; + } else { + setSceneChange(0); + } break; case 4: + if (mFlow.getEventId(&sp8) == 0x1A) { + if (sp8 == 4) { + rt = 1; + } else if (sp8 == 5) { + mEvtNo = 0x12; + evtChange(); + } + } else { + setSceneChange(0); + } + break; + default: + rt = 1; break; } } else { - break; + setSceneChange(0); } } - break; case 20: if (cLib_calcTimer(&field_0xdec) == 0) { - ret = 1; - + rt = 1; switch (mType) { case 1: mActionMode = 2; @@ -2805,293 +3261,248 @@ int daNpc_Kn_c::ECut_secondEncount(int i_idx) { break; } } - break; default: - ret = 1; + rt = 1; } - return ret; + return rt; } /* 80A324C4-80A32D30 007BA4 086C+00 3/0 0/0 0/0 .text ECut_thirdSkillExplain__10daNpc_Kn_cFi */ int daNpc_Kn_c::ECut_thirdSkillExplain(int i_idx) { - dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); - int ret = 0; - int intP = -1; + int rt = 0; + int prm = -1; - int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm"); - - if (intP2) { - intP = *intP2; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; } if (event_manager->getIsAddvance(i_idx)) { - switch (intP) { - case 0: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(28,-1.0f,1,0); - mJntAnm.lookPlayer(0); - field_0xdec = 0x1e; - break; - case 10: - field_0xdfe = 2; - initTalk(0x2df,0); - break; - case 20: - Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING,0,0); - case 65: - setPos(home.pos); - setAngle(home.angle.y); - cXyz pos(0.0f,0.0f,375.0f); - mDoMtx_stack_c::transS(home.pos); - mDoMtx_stack_c::YrotM(home.angle.y); - mDoMtx_stack_c::multVec(&pos,&pos); - cXyz pos2 = pos; - pos2.y += 500.0f; - - if (fopAcM_gc_c::gndCheck(&pos2)) { - pos.y = fopAcM_gc_c::getGroundY(); - } - - daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos,fopAcM_searchPlayerAngleY(this) + 0x8000,0); - daPy_getPlayerActorClass()->onTraningCutBack(); - break; - case 30: - initTalk(0x2e0,0); - break; - case 40: - daNpcT_offTmpBit(0xb); - initTalk(0x2e1,0); - break; - case 50: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(17,-1.0f,1,0); - break; - case 55: - field_0xdec = 0x1e; - break; - case 60: - initTalk(0x2e1,0); - break; - case 70: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(24,-1.0f,1,0); - mJntAnm.lookNone(0); - break; - } - } - - switch (intP) { + switch (prm) { case 0: - if (cLib_calcTimer(&field_0xdec) == 0) { - if (mTargetAngle.y == fopAcM_searchPlayerAngleY(this)) { - ret = 1; - mTargetPos = current.pos; - field_0x15bc = 0; - speedF = 0.0f; - speed.zero(); - } else { - - if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); - } - } - - } else { - calcSlip(); - } - - break; - case 6: - if (mTargetAngle.y == fopAcM_searchPlayerAngleY(this)) { - ret = 1; - } else { - if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0) != 0) { - ret = 1; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); - } - break; - } - ret = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(28, -1.0f, 1, 0); + mJntAnm.lookPlayer(0); + field_0xdec = 0x1e; break; case 10: - if (talkProc(0,0,NULL,0) != 0) { - ret = 1; - } + mStepMode = 2; + initTalk(0x2df, 0); break; case 20: - case 65: - ret = 1; + Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0); + case 65: { setPos(home.pos); setAngle(home.angle.y); - cXyz pos(0.0f,0.0f,375.0f); + + cXyz pos(0.0f, 0.0f, 375.0f); mDoMtx_stack_c::transS(home.pos); mDoMtx_stack_c::YrotM(home.angle.y); - mDoMtx_stack_c::multVec(&pos,&pos); - cXyz pos2(pos); + mDoMtx_stack_c::multVec(&pos, &pos); + + cXyz pos2 = pos; pos2.y += 500.0f; - if (fopAcM_gc_c::gndCheck(&pos2)) { pos.y = fopAcM_gc_c::getGroundY(); } - daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos,fopAcM_searchPlayerAngleY(this) + 0x8000,0); - // daPy_getPlayerActorClass()->onTraningCutBack(); + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + daPy_getPlayerActorClass()->onTraningCutBack(); break; + } case 30: + initTalk(0x2e0, NULL); + break; case 40: - if (talkProc(0,0,NULL,0) != 0) { - ret = 1; - } + daNpcT_offTmpBit(0xb); + initTalk(0x2e1, NULL); break; case 50: - if (mMotionSeqMngr2.getNo() == 17) { - if (mMotionSeqMngr2.getStepNo() >= 3) { - ret = 1; - } else { - cXyz pos(0.0f,0.0f,0.0f); - s16 local_98 = 0; - - if (mMotionSeqMngr2.getStepNo() == 0 && !(mpMorf[0]->getFrame() <= 4) && mpMorf[0]->getFrame() <= 14) { - pos.set(13.0f,0.0f,20.0f); - - local_98 = cM_deg2s(-3.8f); - } - - if (mMotionSeqMngr2.getStepNo() == 1) { - if (mpMorf[0]->getFrame() <= 10) { - pos.set(3.77f, 0.0f, 19.05f); - local_98 = cM_deg2s(-6.76f); - } else { - pos.set(-13.66f, 0.0f, 19.05f); - local_98 = cM_deg2s(-6.76f); - } - } - - mDoMtx_stack_c::YrotS(home.angle.y); - mDoMtx_stack_c::multVec(&pos,&pos); - pos += current.pos; - setPos(pos); - setAngle(current.angle.y + local_98); - } - } + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(17, -1.0f, 1, 0); + break; + case 55: + field_0xdec = 30; break; case 60: - if (talkProc(0,0,NULL,0) != 0) { - ret = 1; - } + initTalk(0x2e1, NULL); break; case 70: - if (mMotionSeqMngr2.getNo() == 0x18 && mMotionSeqMngr2.getStepNo() > 0) { - ret = 1; - mActionMode = 8; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(24, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + } + } + + switch (prm) { + case 0: + if (cLib_calcTimer(&field_0xdec) == 0) { + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + rt = 1; + mTargetPos = current.pos; + field_0x15bc = 0; + speedF = 0.0f; + speed.zero(); + } else { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } + } else { + calcSlip(); + } + break; + case 6: + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + rt = 1; + } else { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } break; - default: - ret = 1; + } + rt = 1; + break; + case 10: + if (talkProc(0, 0, NULL, 0)) { + rt = 1; + } + break; + case 20: + case 65: { + rt = 1; + setPos(home.pos); + setAngle(home.angle.y); + + cXyz pos(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&pos, &pos); + + cXyz pos2(pos); + pos2.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&pos2)) { + pos.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + break; + } + case 30: + case 40: + if (talkProc(0, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + if (mMotionSeqMngr.getNo() == 17) { + if (mMotionSeqMngr.getStepNo() >= 3) { + rt = 1; + } else { + cXyz pos(0.0f, 0.0f, 0.0f); + s16 local_98 = 0; + + if (mMotionSeqMngr.getStepNo() == 0 && !(mpModelMorf[0]->getFrame() <= 4) && + mpModelMorf[0]->getFrame() <= 14) + { + pos.set(13.0f, 0.0f, 20.0f); + + local_98 = cM_deg2s(-3.8f); + } + + if (mMotionSeqMngr.getStepNo() == 1) { + if (mpModelMorf[0]->getFrame() <= 10) { + pos.set(3.77f, 0.0f, 19.05f); + local_98 = cM_deg2s(-6.76f); + } else { + pos.set(-13.66f, 0.0f, 19.05f); + local_98 = cM_deg2s(-6.76f); + } + } + + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&pos, &pos); + pos += current.pos; + setPos(pos); + setAngle(current.angle.y + local_98); + } + } + break; + case 60: + if (talkProc(0, 0, NULL, 0)) { + rt = 1; + } + break; + case 70: + if (mMotionSeqMngr.getNo() == 24 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + mActionMode = 8; + } + break; + default: + rt = 1; } - return ret; - -} - -// FIXME: Remove once ECut_sixthSkillExplain is decompiled: -f32 dummy_lits_9982(int sel) { - switch (sel) { - case 0: return 700.0f; - case 1: return 594.0f; - case 2: return 165.0f; - case 3: return 9.0f; - default: return 138.64f; - } + return rt; } /* 80A32D30-80A33358 008410 0628+00 3/0 0/0 0/0 .text ECut_thirdSkillGet__10daNpc_Kn_cFi */ int daNpc_Kn_c::ECut_thirdSkillGet(int i_idx) { - // NONMATCHING -} + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; -/* 80A33358-80A33D80 008A38 0A28+00 3/0 0/0 0/0 .text ECut_fourthSkillExplain__10daNpc_Kn_cFi */ -int daNpc_Kn_c::ECut_fourthSkillExplain(int i_idx) { - // NONMATCHING -} + int rt = 0; + int prm = -1; -/* 80A33D80-80A343A8 009460 0628+00 3/0 0/0 0/0 .text ECut_fourthSkillGet__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_fourthSkillGet(int i_idx) { - // NONMATCHING -} - -/* 80A343A8-80A34DB8 009A88 0A10+00 3/0 0/0 0/0 .text ECut_fifthSkillExplain__10daNpc_Kn_cFi */ -int daNpc_Kn_c::ECut_fifthSkillExplain(int i_idx) { - // NONMATCHING -} - -/* 80A34DB8-80A353E0 00A498 0628+00 3/0 0/0 0/0 .text ECut_fifthSkillGet__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_fifthSkillGet(int i_idx) { - // NONMATCHING -} - -/* 80A353E0-80A35D88 00AAC0 09A8+00 3/0 0/0 0/0 .text ECut_sixthSkillExplain__10daNpc_Kn_cFi */ -int daNpc_Kn_c::ECut_sixthSkillExplain(int i_idx) { - // NONMATCHING -} - -/* 80A35D88-80A363C0 00B468 0638+00 3/0 0/0 0/0 .text ECut_sixthSkillGet__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_sixthSkillGet(int i_idx) { - dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); - - int ret = 0; - int intP = -1; - - int* intP2 = dComIfGp_evmng_getMyIntegerP(i_idx,"prm"); - - if (intP2) { - intP = *intP2; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; } if (event_manager->getIsAddvance(i_idx)) { - switch (intP) { - case 0: - daNpcT_offTmpBit(0xb); - daNpcT_offTmpBit(0xc); + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + daNpcT_offTmpBit(0xC); break; - case 4: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - - if (mMotionSeqMngr2.getNo() == 0x13) { - mMotionSeqMngr2.setNo(22,-1.0f,0,0); + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); } else { - mMotionSeqMngr2.setNo(16,-1.0f,0,0); + mMotionSeqMngr.setNo(0x10, -1.0f, 0, 0); } - fpcM_Search(s_subEnd6,this); break; - case 6: + case 6: mJntAnm.lookNone(0); break; - case 10: - field_0xdfe = 2; - cXyz pos(0.0f,0.0f,1000.0f); - mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos,&home.pos)); - mDoMtx_stack_c::multVec(&pos,&pos); - cXyz pos2 = pos; - pos2.y += 500.0f; + case 10: { + mStepMode = 2; - if (fopAcM_gc_c::gndCheck(&pos2)) { - pos.y = fopAcM_gc_c::getGroundY(); + cXyz sp1C(0.0f, 0.0f, 700.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos, &home.pos)); + mDoMtx_stack_c::multVec(&sp1C, &sp1C); + + cXyz sp10(sp1C); + sp10.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp10)) { + sp1C.y = fopAcM_gc_c::getGroundY(); } - daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); - initTalk(0x2fe,NULL); + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); + initTalk(0x2E5, NULL); break; + } case 12: setAngle(fopAcM_searchPlayerAngleY(this)); break; @@ -3100,104 +3511,1434 @@ int daNpc_Kn_c::ECut_sixthSkillGet(int i_idx) { Z2GetAudioMgr()->bgmStreamPlay(); break; case 20: - initTalk(0x2fe,0); + initTalk(0x2E5, NULL); break; case 30: - initTalk(0x2fe,0); + initTalk(0x2E5, NULL); + break; } } - - switch (intP) { - case 0: + switch (prm) { + case 0: if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { speedF = 0.0f; speed.zero(); - if (mMotionSeqMngr2.getNo() == 0x12) { - mMotionSeqMngr2.setNo(0x13, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0); } else { - mMotionSeqMngr2.setNo(15, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0xF, -1.0f, 0, 0); } - mMotionSeqMngr1.setNo(1,-1.0f,0,0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); setLandingPrtcl(); - ret = 1; + rt = 1; } break; - case 2: - if (mMotionSeqMngr2.getNo() == 0x13 || mMotionSeqMngr2.getNo() == 15) { - if (mMotionSeqMngr2.getStepNo() > 0) { - ret = 1; - } else { - if (mpMorf[0]->getFrame() >= 13.0f && mpMorf[0]->getFrame() < 14.0f) { - setLandingPrtcl(); - } + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); } } break; - case 4: - if (mMotionSeqMngr2.getNo() == 22 || mMotionSeqMngr2.getNo() == 16) { - if (mMotionSeqMngr2.getStepNo() > 0) { - ret = 1; - } + case 4: + if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; } break; - case 6: - if (mTargetAngle.y != fopAcM_searchPlayerAngleY(this)) { - if (step(fopAcM_searchPlayerAngleY(this),1,0x20,0x14,0)) { - ret = 1; - mMotionSeqMngr1.setNo(1, -1.0f, 0, 0); - mMotionSeqMngr2.setNo(0, -1.0f, 0, 0); + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } - } else { - ret = 1; + rt = 1; } break; case 10: - if (talkProc(NULL,0,NULL,0)) { - ret = 1; - + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; if (field_0x170e == 0) { field_0x170e = 1; - Z2GetAudioMgr()->bgmStop(0x32,0); - } + Z2GetAudioMgr()->bgmStop(0x32, 0); + } } break; case 20: if (talkProc(NULL, 0, NULL, 0)) { - ret = 1; + rt = 1; } - cLib_addCalcAngleS2(&mTargetAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); - setAngle(mTargetAngle.y); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); break; case 30: if (talkProc(NULL, 0, NULL, 0)) { setSceneChange(1); } - cLib_addCalcAngleS2(&mTargetAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); - setAngle(mTargetAngle.y); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); break; default: - ret = 1; + rt = 1; + break; } - return ret; + return rt; } -// FIXME: remove when next func is decompiled -f32 dummy_lit_11516(u8 val) { - return f32(val); +/* 80A33358-80A33D80 008A38 0A28+00 3/0 0/0 0/0 .text ECut_fourthSkillExplain__10daNpc_Kn_cFi */ +int daNpc_Kn_c::ECut_fourthSkillExplain(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + mActionMode = 9; + break; + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + break; + case 6: + mJntAnm.lookPlayer(0); + break; + case 10: + mStepMode = 2; + initTalk(0x2EF, NULL); + break; + case 20: + Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0); + /* fallthrough */ + case 65: { + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp64(-10.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp64, &sp64); + + cXyz sp58(sp64); + sp58.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp58)) { + sp64.y = fopAcM_gc_c::getGroundY(); + } + + if (prm == 20) { + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x7254, 0); + daPy_getPlayerActorClass()->onTraningCutHead(); + } else { + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + } + break; + } + case 30: + initTalk(0x2F0, NULL); + break; + case 40: + daNpcT_offTmpBit(0xB); + initTalk(0x2F1, NULL); + break; + case 50: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(13, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + case 60: + initTalk(0x2F1, NULL); + break; + case 70: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(24, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(19, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 20: + case 65: { + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp4C(-10.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp4C, &sp4C); + + cXyz sp40(sp4C); + sp40.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp40)) { + sp4C.y = fopAcM_gc_c::getGroundY(); + } + + if (prm == 20) { + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x7254, 0); + } else { + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + } + rt = 1; + break; + } + case 25: + rt = 1; + break; + case 30: + case 40: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + if (mMotionSeqMngr.getNo() == 0xD && !mMotionSeqMngr.checkEntryNewMotion()) { + if (mpModelMorf[0]->isStop()) { + cXyz sp34(0.0f, 0.0f, 594.0f); + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&sp34, &sp34); + sp34 += home.pos; + + setPos(sp34); + setAngle(home.angle.y + 0x8000); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(6, -1.0f, 1, 0); + } + } else if (mMotionSeqMngr.getNo() == 6 && !mMotionSeqMngr.checkEntryNewMotion()) { + rt = 1; + } + break; + case 60: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 70: + if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A33D80-80A343A8 009460 0628+00 3/0 0/0 0/0 .text ECut_fourthSkillGet__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_fourthSkillGet(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + daNpcT_offTmpBit(0xC); + break; + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + break; + case 6: + mJntAnm.lookNone(0); + break; + case 10: { + mStepMode = 2; + + cXyz sp1C(0.0f, 0.0f, 700.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos, &home.pos)); + mDoMtx_stack_c::multVec(&sp1C, &sp1C); + + cXyz sp10(sp1C); + sp10.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp10)) { + sp1C.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); + initTalk(0x2F5, NULL); + break; + } + case 12: + setAngle(fopAcM_searchPlayerAngleY(this)); + break; + case 15: + Z2GetAudioMgr()->bgmStreamPrepare(0x2000038); + Z2GetAudioMgr()->bgmStreamPlay(); + break; + case 20: + initTalk(0x2F5, NULL); + break; + case 30: + initTalk(0x2F5, NULL); + break; + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(19, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + if (field_0x170e == 0) { + field_0x170e = 1; + Z2GetAudioMgr()->bgmStop(0x32, 0); + } + } + break; + case 20: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 30: + if (talkProc(NULL, 0, NULL, 0)) { + setSceneChange(1); + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A343A8-80A34DB8 009A88 0A10+00 3/0 0/0 0/0 .text ECut_fifthSkillExplain__10daNpc_Kn_cFi */ +int daNpc_Kn_c::ECut_fifthSkillExplain(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + break; + case 6: + mJntAnm.lookPlayer(0); + break; + case 10: + mStepMode = 2; + initTalk(0x2E7, NULL); + break; + case 20: + Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0); + /* fallthrough */ + case 65: { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (prm == 20) { + mMotionSeqMngr.setNo(3, -1.0f, 0, 0); + field_0x15cd = 1; + } else { + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + field_0x15cd = 0; + } + + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp64(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp64, &sp64); + + cXyz sp58(sp64); + sp58.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp58)) { + sp64.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + daPy_getPlayerActorClass()->onTraningCutFast(); + break; + } + case 30: + initTalk(0x2E8, NULL); + break; + case 40: + daNpcT_offTmpBit(0xB); + initTalk(0x2E9, NULL); + break; + case 50: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(12, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + case 60: + initTalk(0x2E9, NULL); + break; + case 70: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(24, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(19, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 20: + case 65: { + rt = 1; + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp4C(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp4C, &sp4C); + + cXyz sp40(sp4C); + sp40.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp40)) { + sp4C.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + break; + } + case 30: + case 40: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + if (mMotionSeqMngr.getNo() == 0xC && !mMotionSeqMngr.checkEntryNewMotion()) { + if (mpModelMorf[0]->isStop()) { + cXyz sp34(0.0f, 0.0f, 165.0f); + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&sp34, &sp34); + sp34 += home.pos; + + setPos(sp34); + setAngle(home.angle.y); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(7, -1.0f, 1, 0); + } else if (mpModelMorf[0]->getFrame() >= 8.0f && mpModelMorf[0]->getFrame() < 9.0f) { + mpPodModel->getModelData()->getMaterialNodePointer(0)->getShape()->hide(); + } + } else if (mMotionSeqMngr.getNo() == 7 && !mMotionSeqMngr.checkEntryNewMotion()) { + rt = 1; + } + break; + case 60: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 70: + if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + mActionMode = 12; + } + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A34DB8-80A353E0 00A498 0628+00 3/0 0/0 0/0 .text ECut_fifthSkillGet__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_fifthSkillGet(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + daNpcT_offTmpBit(0xC); + break; + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + break; + case 6: + mJntAnm.lookNone(0); + break; + case 10: { + mStepMode = 2; + + cXyz sp1C(0.0f, 0.0f, 700.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos, &home.pos)); + mDoMtx_stack_c::multVec(&sp1C, &sp1C); + + cXyz sp10(sp1C); + sp10.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp10)) { + sp1C.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); + initTalk(0x2ED, NULL); + break; + } + case 12: + setAngle(fopAcM_searchPlayerAngleY(this)); + break; + case 15: + Z2GetAudioMgr()->bgmStreamPrepare(0x2000038); + Z2GetAudioMgr()->bgmStreamPlay(); + break; + case 20: + initTalk(0x2ED, NULL); + break; + case 30: + initTalk(0x2ED, NULL); + break; + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(19, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + if (field_0x170e == 0) { + field_0x170e = 1; + Z2GetAudioMgr()->bgmStop(0x32, 0); + } + } + break; + case 20: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 30: + if (talkProc(NULL, 0, NULL, 0)) { + setSceneChange(1); + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A353E0-80A35D88 00AAC0 09A8+00 3/0 0/0 0/0 .text ECut_sixthSkillExplain__10daNpc_Kn_cFi */ +int daNpc_Kn_c::ECut_sixthSkillExplain(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + break; + case 6: + mJntAnm.lookPlayer(0); + break; + case 10: + mStepMode = 2; + initTalk(0x2F8, NULL); + break; + case 20: + Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0); + /* fallthrough */ + case 65: { + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp64(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp64, &sp64); + + cXyz sp58(sp64); + sp58.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp58)) { + sp64.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + daPy_getPlayerActorClass()->onTraningCutLargeJump(); + break; + } + case 30: + initTalk(0x2F9, NULL); + break; + case 40: + daNpcT_offTmpBit(0xB); + initTalk(0x2FA, NULL); + break; + case 50: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(10, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + case 60: + initTalk(0x2FA, NULL); + break; + case 70: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(24, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + case 80: + field_0xdec = 0x78; + break; + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(19, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 20: + case 65: { + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp4C(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp4C, &sp4C); + + cXyz sp40(sp4C); + sp40.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp40)) { + sp4C.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + rt = 1; + break; + } + case 30: + case 40: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + if (mMotionSeqMngr.getNo() == 10 && !mMotionSeqMngr.checkEntryNewMotion()) { + if (mpModelMorf[0]->isStop()) { + cXyz sp34(0.0f, 0.0f, 138.64f); + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&sp34, &sp34); + sp34 += home.pos; + + setPos(sp34); + setAngle(home.angle.y); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, 0.0f, 1, 0); + } + } else if (mMotionSeqMngr.getNo() == 0 && !mMotionSeqMngr.checkEntryNewMotion()) { + rt = 1; + } + break; + case 60: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 70: + if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + for (int i = 0; i < 2; i++) { + fopAcM_createChild(PROC_NPC_KN, fopAcM_GetID(this), ((i + 1) << 8) + 6, ¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle, NULL, -1, NULL); + } + } + break; + case 80: + if (cLib_calcTimer(&field_0xdec) == 0) { + rt = 1; + mActionMode = 13; + } + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A35D88-80A363C0 00B468 0638+00 3/0 0/0 0/0 .text ECut_sixthSkillGet__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_sixthSkillGet(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xb); + daNpcT_offTmpBit(0xc); + break; + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(22, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + + fpcM_Search(s_subEnd6, this); + break; + case 6: + mJntAnm.lookNone(0); + break; + case 10: { + mStepMode = 2; + + cXyz pos(0.0f, 0.0f, 1000.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos, &home.pos)); + mDoMtx_stack_c::multVec(&pos, &pos); + + cXyz pos2 = pos; + pos2.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&pos2)) { + pos.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); + initTalk(0x2fe, NULL); + break; + } + case 12: + setAngle(fopAcM_searchPlayerAngleY(this)); + break; + case 15: + Z2GetAudioMgr()->bgmStreamPrepare(0x2000038); + Z2GetAudioMgr()->bgmStreamPlay(); + break; + case 20: + initTalk(0x2fe, NULL); + break; + case 30: + initTalk(0x2fe, NULL); + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 15) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if (mMotionSeqMngr.getNo() == 22 || mMotionSeqMngr.getNo() == 16) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + + if (field_0x170e == 0) { + field_0x170e = 1; + Z2GetAudioMgr()->bgmStop(0x32, 0); + } + } + break; + case 20: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 30: + if (talkProc(NULL, 0, NULL, 0)) { + setSceneChange(1); + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + default: + rt = 1; + } + + return rt; } /* 80A363C0-80A36C20 00BAA0 0860+00 3/0 0/0 0/0 .text ECut_seventhSkillExplain__10daNpc_Kn_cFi */ int daNpc_Kn_c::ECut_seventhSkillExplain(int i_idx) { - // NONMATCHING + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + break; + case 6: + mJntAnm.lookPlayer(0); + break; + case 10: + mStepMode = 2; + initTalk(0x300, NULL); + break; + case 20: { + Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0); + + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp64(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp64, &sp64); + + cXyz sp58(sp64); + sp58.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp58)) { + sp64.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + daPy_getPlayerActorClass()->onTraningCutLargeTurn(); + break; + } + case 30: + initTalk(0x301, NULL); + break; + case 40: + daNpcT_offTmpBit(0xB); + initTalk(0x302, NULL); + break; + case 50: + dComIfGp_setItemLifeCount(dComIfGs_getMaxLife(), 0); + dMeter2Info_onLifeGaugeSE(); + dComIfGp_event_offHindFlag(0x10); + break; + case 55: + field_0xdec = 30; + break; + case 60: + initTalk(0x302, NULL); + break; + case 70: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(24, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + case 80: + field_0xdec = 0x78; + break; + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(19, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 0xF) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if ((mMotionSeqMngr.getNo() == 0x16 || mMotionSeqMngr.getNo() == 0x10) && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 20: { + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp4C(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp4C, &sp4C); + + cXyz sp40(sp4C); + sp40.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp40)) { + sp4C.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp4C, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + rt = 1; + break; + } + case 30: + case 40: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + if (dMeter2Info_getNowLifeGauge() == dComIfGs_getLife()) { + rt = 1; + } + break; + case 55: + if (cLib_calcTimer(&field_0xdec) == 0) { + rt = 1; + } + break; + case 60: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 70: + if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + for (int i = 0; i < 2; i++) { + fopAcM_createChild(PROC_NPC_KN, fopAcM_GetID(this), ((i + 1) << 8) + 7, ¤t.pos, fopAcM_GetRoomNo(this), ¤t.angle, NULL, -1, NULL); + } + } + break; + case 80: + if (cLib_calcTimer(&field_0xdec) == 0) { + rt = 1; + mActionMode = 19; + } + break; + default: + rt = 1; + break; + } + + return rt; } /* 80A36C20-80A372D0 00C300 06B0+00 3/0 0/0 0/0 .text ECut_seventhSkillGet__10daNpc_Kn_cFi */ int daNpc_Kn_c::ECut_seventhSkillGet(int i_idx) { - // NONMATCHING + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + daNpcT_offTmpBit(0xC); + daNpcT_offTmpBit(0xD); + break; + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + + if (mMotionSeqMngr.getNo() == 0x13) { + mMotionSeqMngr.setNo(22, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(16, -1.0f, 0, 0); + } + + fpcM_Search(s_subEnd7, this); + break; + case 6: + mJntAnm.lookNone(0); + break; + case 10: { + mStepMode = 2; + + cXyz pos(0.0f, 0.0f, 700.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos, &home.pos)); + mDoMtx_stack_c::multVec(&pos, &pos); + + cXyz pos2 = pos; + pos2.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&pos2)) { + pos.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&pos, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); + initTalk(0x305, NULL); + break; + } + case 12: + setAngle(fopAcM_searchPlayerAngleY(this)); + break; + case 15: + Z2GetAudioMgr()->bgmStreamPrepare(0x2000038); + Z2GetAudioMgr()->bgmStreamPlay(); + break; + case 20: + initTalk(0x305, 0); + break; + case 30: + initTalk(0x305, 0); + break; + case 40: + initTalk(0x305, NULL); + break; + } + } + + switch (prm) { + case 0: + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + + if (mMotionSeqMngr.getNo() == 0x12) { + mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0); + } else { + mMotionSeqMngr.setNo(15, -1.0f, 0, 0); + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + setLandingPrtcl(); + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x13 || mMotionSeqMngr.getNo() == 15) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } else if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } + break; + case 4: + if (mMotionSeqMngr.getNo() == 22 || mMotionSeqMngr.getNo() == 16) { + if (mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + + if (field_0x170e == 0) { + field_0x170e = 1; + Z2GetAudioMgr()->bgmStop(0x32, 0); + } + } + break; + case 20: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 30: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 40: + if (talkProc(NULL, 0, NULL, 0)) { + setSceneChange(1); + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + default: + rt = 1; + } + + return rt; } /* 80A372D0-80A37430 00C9B0 0160+00 1/1 0/0 0/0 .text setPrtcl__10daNpc_Kn_cFv */ @@ -3206,27 +4947,26 @@ int daNpc_Kn_c::setPrtcl() { BOOL check = i == 2 ? TRUE : FALSE; s8 room_no = fopAcM_GetRoomNo(this); - csXyz* angle = mParticleMngr[i].mpModel == 1 ? &mParticleMngr[i].mAngle : NULL; - cXyz* pos = mParticleMngr[i].mpModel == 1 ? &mParticleMngr[i].mPos : NULL; + csXyz* angle = mParticleMngr[i].mpModel == true ? &mParticleMngr[i].mAngle : NULL; + cXyz* pos = mParticleMngr[i].mpModel == true ? &mParticleMngr[i].mPos : NULL; - - mParticleMngr[i].mManager.setEffectCenter(&tevStr, &mParticleMngr[i].mPos, check, 0, pos, angle, 0, room_no, 0.0f, speedF); + mParticleMngr[i].mManager.setEffectCenter(&tevStr, &mParticleMngr[i].mPos, check, 0, pos, + angle, 0, room_no, 0.0f, speedF); - if (mParticleMngr[i].mpModel) { - JPABaseEmitter* emitter = mParticleMngr[i].mManager.getCenterEmitter(0,0); - - if (emitter) { + if (mParticleMngr[i].mpModel != NULL) { + JPABaseEmitter* emitter = mParticleMngr[i].mManager.getCenterEmitter(0, 0); + if (emitter != NULL) { switch (i) { case 0: case 1: - mParticleMngr[i].mScale.set(1.0f,1.0f,1.0f); + mParticleMngr[i].mScale.set(1.0f, 1.0f, 1.0f); emitter->setAwayFromCenterSpeed(0.0f); emitter->setRandomDirectionSpeed(0.0f); emitter->setSpread(1.0f); emitter->setGlobalParticleScale(mParticleMngr[i].mScale); break; case 2: - mParticleMngr[i].mScale.set(2.0f,2.0f,2.0f); + mParticleMngr[i].mScale.set(2.0f, 2.0f, 2.0f); break; } } @@ -3240,20 +4980,19 @@ int daNpc_Kn_c::setPrtcl() { /* 80A37430-80A37558 00CB10 0128+00 1/1 0/0 0/0 .text setSlipPrtcl__10daNpc_Kn_cFv */ int daNpc_Kn_c::setSlipPrtcl() { - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0x1f)); + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0x1f)); mDoMtx_stack_c::multVecZero(&mParticleMngr[0].mPos); mParticleMngr[0].mPos.y -= 20.0f; mParticleMngr[0].mAngle = current.angle; mParticleMngr[0].mAngle.y -= 0x8000; mParticleMngr[0].mpModel = true; - - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0x1b)); + + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0x1b)); mDoMtx_stack_c::multVecZero(&mParticleMngr[1].mPos); mParticleMngr[1].mPos.y -= 20.0f; mParticleMngr[1].mAngle = current.angle; mParticleMngr[1].mAngle.y -= 0x8000; mParticleMngr[1].mpModel = true; - return 1; } @@ -3261,7 +5000,7 @@ int daNpc_Kn_c::setSlipPrtcl() { */ int daNpc_Kn_c::setLandingPrtcl() { mParticleMngr[2].mPos = current.pos; - mParticleMngr[2].mAngle = mTargetAngle; + mParticleMngr[2].mAngle = mCurAngle; mParticleMngr[2].mpModel = true; return 1; } @@ -3270,10 +5009,12 @@ int daNpc_Kn_c::setLandingPrtcl() { void daNpc_Kn_c::calcMagicBallPos() { fopAc_ac_c* actor; - if (mType == 1 && fopAcM_SearchByID(parentActorID, &actor) && actor && fopAcM_GetName(actor) == PROC_KN_BULLET && ((daObjKnBullet_c*)actor)->getActionMode() == 0) { + if (mType == 1 && fopAcM_SearchByID(parentActorID, &actor) && actor && + fopAcM_GetName(actor) == PROC_KN_BULLET && ((daObjKnBullet_c*)actor)->getActionMode() == 0) + { cXyz pos(150.0f, 0.0f, 0.0f); - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(13)); - mDoMtx_stack_c::multVec(&pos,&pos); + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(13)); + mDoMtx_stack_c::multVec(&pos, &pos); actor->current.pos = pos; } } @@ -3291,71 +5032,69 @@ static daNpc_Kn_Param_c l_HIO; /* 80A37670-80A37B08 00CD50 0498+00 1/1 0/0 0/0 .text setSwordChargePtcl__10daNpc_Kn_cFv */ +// NONMATCHING - reg alloc void daNpc_Kn_c::setSwordChargePtcl() { - // NONMATCHING - if (mMotionSeqMngr2.getNo() == 10 && mMotionSeqMngr2.getStepNo() == 0 && !mMotionSeqMngr2.checkEntryNewMotion()) { - f32 frame = mpMorf[0]->getFrame(); - if (frame >= 17.0f || frame < 37.0f) { - static cXyz lightAParticleScale(1.5223,1.3f,1.3f); + JPABaseEmitter* emitter; + + if (mMotionSeqMngr.getNo() == 10 && mMotionSeqMngr.getStepNo() == 0 && + !mMotionSeqMngr.checkEntryNewMotion()) + { + f32 frame = mpModelMorf[0]->getFrame(); + if (frame >= 17.0f && frame < 37.0f) { + static cXyz lightAParticleScale(1.5223f, 1.3f, 1.3f); static cXyz lightALocalTrans(88.399994f, 0.0f, 0.0f); - field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0],0x368, ¤t.pos, &tevStr); - JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]); + f32 temp_f29 = 156.0f; + f32 var_f30 = frame; - if (emitter) { - emitter->setGlobalRTMatrix(mpMorf[0]->getModel()->getAnmMtx(0xd)); - emitter->setGlobalParticleScale(lightAParticleScale); // may need a tvec cast here + field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0], 0x368, ¤t.pos, &tevStr); + + emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]); + if (emitter != NULL) { + emitter->setGlobalRTMatrix(mpModelMorf[0]->getModel()->getAnmMtx(0xd)); + emitter->setGlobalParticleScale(lightAParticleScale); emitter->setLocalTranslation(lightALocalTrans); } - cXyz pos1; - cXyz pos2; + cXyz sp50; + cXyz sp44; + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0xd)); + mDoMtx_stack_c::multVecSR(&cXyz::BaseX, &sp50); + mDoMtx_stack_c::multVecZero(&sp44); - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(0xd)); - mDoMtx_stack_c::multVecSR(&pos1.BaseX,&pos1); - mDoMtx_stack_c::multVecZero(&pos2); + if (var_f30 >= 31.0f) + var_f30 = 31.0f; - f32 frame_copy = frame; - if (frame >= 31.0f) - frame_copy = 31.0f; - - pos1 *= (frame_copy + 1.0f) - 17.0f; - pos1 += 10.4; - pos1 += pos2; - - field_0x15d4[1] = dComIfGp_particle_set(field_0x15d4[1],0x36a, &pos1, &tevStr); + sp50 = sp44 + (sp50 * ((var_f30 + 1.0f) - 17.0f)) * (temp_f29 / 15.0f); + field_0x15d4[1] = dComIfGp_particle_set(field_0x15d4[1], 0x36a, &sp50, &tevStr); if (frame >= 31.0f) { - field_0x15d4[2] = dComIfGp_particle_set(field_0x15d4[2],0x36b, &pos1, &tevStr); + field_0x15d4[2] = dComIfGp_particle_set(field_0x15d4[2], 0x36b, &sp50, &tevStr); } - } else { - JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]); + emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]); + if (emitter != NULL) { + u8 temp_r3_3 = emitter->getGlobalAlpha(); + if (temp_r3_3 > 17) { + field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0], 0x368, ¤t.pos, &tevStr); - if (emitter) { - if (emitter->getGlobalAlpha() < 0x12) { - emitter->setGlobalAlpha(0); - } else { - field_0x15d4[0] = dComIfGp_particle_set(field_0x15d4[0],0x368, ¤t.pos, &tevStr); emitter = dComIfGp_particle_getEmitter(field_0x15d4[0]); - - if (emitter) { - emitter->setGlobalRTMatrix(mpMorf[0]->getModel()->getAnmMtx(0xd)); - emitter->setGlobalAlpha(emitter->getGlobalAlpha() - 0x11); - + if (emitter != NULL) { + emitter->setGlobalRTMatrix(mpModelMorf[0]->getModel()->getAnmMtx(0xd)); + emitter->setGlobalAlpha(temp_r3_3 - 17); } + } else { + emitter->setGlobalAlpha(0); } } emitter = dComIfGp_particle_getEmitter(field_0x15d4[1]); - - if (emitter) { + if (emitter != NULL) { emitter->stopDrawParticle(); } emitter = dComIfGp_particle_getEmitter(field_0x15d4[2]); - - if (emitter) { + if (emitter != NULL) { emitter->stopDrawParticle(); } } @@ -3377,34 +5116,56 @@ void daNpc_Kn_c::calcSlip() { pos -= current.pos; speed.x = pos.x; speed.z = pos.z; - f32 absxz = (mTargetPos - current.pos).absXZ(); + f32 absxz = (mTargetPos - current.pos).absXZ(); if (absxz > 25.0f) { setSlipPrtcl(); - } else { - if (absxz < 5.0f) { - field_0x15bc = 0; - speed.x = 0.0f; - speed.z = 0.0f; - } + } else if (absxz < 5.0f) { + field_0x15bc = 0; + speed.x = 0.0f; + speed.z = 0.0f; } } } } -// FIXME: Remove when following func is decompiled: -f32 dummy_lit_12656() { - return 250.0f; -} - /* 80A37D20-80A3805C 00D400 033C+00 9/9 0/0 0/0 .text calcSwordAttackMove__10daNpc_Kn_cFi */ void daNpc_Kn_c::calcSwordAttackMove(int param_0) { - // NONMATCHING + f32 temp_f31 = (daPy_getPlayerActorClass()->current.pos - current.pos).absXZ(); + if (cLib_calcTimer(&field_0x15d0) == 1 && field_0x15bc == 0) { + if (temp_f31 < 250.0f) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x19, -1.0f, 1, 0); + } else { + field_0x15d0 = 2; + } + } + + if (field_0x15bc == 0 && field_0x15ce == 0 && (mMotionSeqMngr.getNo() != 0x1B || mMotionSeqMngr.getStepNo()) && temp_f31 > 250.0f) { + speedF = daNpc_Kn_Param_c::m.move_speed; + } else { + speedF = 0.0f; + if (field_0x15bc == 0) { + speed.zero(); + } + } + + if (field_0x15ce == 0) { + if (param_0) { + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + } else { + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), daNpc_Kn_Param_c::m.rotation_num, daNpc_Kn_Param_c::m.rotation_speed); + } + + setAngle(mCurAngle.y); + mJntAnm.lookPlayer(0); + } else { + mJntAnm.lookNone(0); + } } /* 80A3805C-80A38450 00D73C 03F4+00 2/1 0/0 0/0 .text setSe__10daNpc_Kn_cFv */ -// NONMATCHING - case 12 is wrong void daNpc_Kn_c::setSe() { if (field_0xe2c == 0) { switch (field_0x15A8) { @@ -3419,62 +5180,64 @@ void daNpc_Kn_c::setSe() { case 30: case 31: case 33: - mCreature.startCreatureVoiceLevel(Z2SE_KN_V_BREATH,-1); - break; - case 4: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_GUARD,-1); - } + mSound.startCreatureVoiceLevel(Z2SE_KN_V_BREATH, -1); break; case 5: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_S,-1); - } - break; - case 6: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_M,-1); + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_GUARD, -1); } break; case 7: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1); + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_S, -1); } break; - case 12: - if (mpMorf[0]->getFrame() >= 4.0f && mpMorf[0]->getFrame() < 5.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_BALL_READY,-1); - } else if (mpMorf[1]->getFrame() >= 27.0f && mpMorf[1]->getFrame() < 28.0f) { - if (mActionMode == 7) { - mCreature.startCreatureVoice(Z2SE_KN_V_BALL_READY,-1); - } else { - mCreature.startCreatureVoice(Z2SE_KN_V_BALL_THROW,-1); - } + case 6: + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_M, -1); } break; case 16: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L,-1); + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + } + break; + case 4: + if (mpModelMorf[0]->getFrame() >= 4.0f && mpModelMorf[0]->getFrame() < 5.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_ATTACK, -1); + } + break; + case 12: + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + if (mActionMode == 7) { + mSound.startCreatureVoice(Z2SE_KN_V_BALL_READY, -1); + } + } else if (mpModelMorf[0]->getFrame() >= 27.0f && mpModelMorf[0]->getFrame() < 28.0f) { + if (mActionMode == 7) { + mSound.startCreatureVoice(Z2SE_KN_V_BALL_THROW, -1); + } else { + mSound.startCreatureVoice(Z2SE_KN_V_ATTACK, -1); + } } break; case 20: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_SOTOMOGIRI,-1); + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_SOTOMOGIRI, -1); } break; case 28: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_KABUTOWARI,-1); + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_KABUTOWARI, -1); } break; case 32: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_IAIGIRI,-1); + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_IAIGIRI, -1); } break; case 34: - if (mpMorf[0]->getFrame() >= 1.0f && mpMorf[0]->getFrame() < 2.0f) { - mCreature.startCreatureVoice(Z2SE_KN_V_JUMP_ATTACK_L,-1); + if (mpModelMorf[0]->getFrame() >= 1.0f && mpModelMorf[0]->getFrame() < 2.0f) { + mSound.startCreatureVoice(Z2SE_KN_V_JUMP_ATTACK_L, -1); } break; } @@ -3482,813 +5245,57 @@ void daNpc_Kn_c::setSe() { } /* 80A38450-80A38470 00DB30 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Create__FPv */ -static void daNpc_Kn_Create(void* i_actor) { - static_cast(i_actor)->create(); +static int daNpc_Kn_Create(void* i_this) { + return ((daNpc_Kn_c*)i_this)->create(); } /* 80A38470-80A38490 00DB50 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Delete__FPv */ -static void daNpc_Kn_Delete(void* i_actor) { - static_cast(i_actor)->Delete(); +static int daNpc_Kn_Delete(void* i_this) { + return ((daNpc_Kn_c*)i_this)->Delete(); } /* 80A38490-80A384B0 00DB70 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Execute__FPv */ -static void daNpc_Kn_Execute(void* i_actor) { - static_cast(i_actor)->Execute(); +static int daNpc_Kn_Execute(void* i_this) { + return ((daNpc_Kn_c*)i_this)->Execute(); } /* 80A384B0-80A384D0 00DB90 0020+00 1/0 0/0 0/0 .text daNpc_Kn_Draw__FPv */ -static void daNpc_Kn_Draw(void* i_actor) { - static_cast(i_actor)->Draw(); +static int daNpc_Kn_Draw(void* i_this) { + return ((daNpc_Kn_c*)i_this)->Draw(); } /* 80A384D0-80A384D8 00DBB0 0008+00 1/0 0/0 0/0 .text daNpc_Kn_IsDelete__FPv */ -static bool daNpc_Kn_IsDelete(void* param_0) { - return true; -} - -/* 80A3B720-80A3B724 010E00 0004+00 1/0 0/0 0/0 .text afterJntAnm__10daNpc_Kn_cFi */ -void daNpc_Kn_c::afterJntAnm(int param_0) { - /* empty function */ -} - -/* 80A3B79C-80A3B7A4 010E7C 0008+00 1/0 0/0 0/0 .text evtEndProc__10daNpc_Kn_cFv */ -BOOL daNpc_Kn_c::evtEndProc() { - return TRUE; -} - -/* 80A3B7A4-80A3B7AC 010E84 0008+00 1/0 0/0 0/0 .text checkChangeEvt__10daNpc_Kn_cFv */ -BOOL daNpc_Kn_c::checkChangeEvt() { - return FALSE; -} - -/* 80A3B7AC-80A3B7B4 010E8C 0008+00 1/0 0/0 0/0 .text getFootRJointNo__10daNpc_Kn_cFv */ -s32 daNpc_Kn_c::getFootRJointNo() { - return -1; -} - -/* 80A3B7B4-80A3B7BC 010E94 0008+00 1/0 0/0 0/0 .text getFootLJointNo__10daNpc_Kn_cFv */ -s32 daNpc_Kn_c::getFootLJointNo() { - return -1; -} - -/* 80A3B7BC-80A3B7C4 010E9C 0008+00 1/0 0/0 0/0 .text chkXYItems__10daNpc_Kn_cFv */ -BOOL daNpc_Kn_c::chkXYItems() { - return false; -} - -/* 80A3B7C4-80A3B7CC 010EA4 0008+00 1/0 0/0 0/0 .text afterSetFaceMotionAnm__10daNpc_Kn_cFiifi */ -bool daNpc_Kn_c::afterSetFaceMotionAnm(int param_0, int param_1, f32 param_2, int param_3) { - return true; -} - -/* 80A3B82C-80A3BD14 010F0C 04E8+00 1/1 0/0 0/0 .text - * __ct__10daNpc_Kn_cFPC26daNpcT_faceMotionAnmData_cPC22daNpcT_motionAnmData_cPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPC16daNpcT_evtData_cPPc - */ - // NONMATCHING - missing something instructions / regalloc -daNpc_Kn_c::daNpc_Kn_c(daNpcT_faceMotionAnmData_c const* param_0, - daNpcT_motionAnmData_c const* param_1, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_2, int param_3, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_4, int param_5, - daNpcT_evtData_c const* param_6, char** param_7) : - // daNpcT_c(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7) { - mpFaceMotionAnmData(param_0), - mpMotionAnmData(param_1), mMotionSeqMngr1(param_2, param_3), - mMotionSeqMngr2(param_4, param_5), - mpEventData(param_6), - field_0x5B8(param_7) { - initialize(); -} - -/* 80A3BD14-80A3BD1C 0113F4 0008+00 1/0 0/0 0/0 .text getEyeballMaterialNo__10daNpc_Kn_cFv */ -u16 daNpc_Kn_c::getEyeballMaterialNo() { - return false; -} - -/* 80A3BD1C-80A3BD24 0113FC 0008+00 1/0 0/0 0/0 .text getEyeballLMaterialNo__10daNpc_Kn_cFv */ -u16 daNpc_Kn_c::getEyeballLMaterialNo() { - return false; -} - -/* 80A3BD24-80A3BD2C 011404 0008+00 1/0 0/0 0/0 .text getEyeballRMaterialNo__10daNpc_Kn_cFv */ -u16 daNpc_Kn_c::getEyeballRMaterialNo() { - return false; -} - -/* 80A3C124-80A3C16C 011804 0048+00 2/1 0/0 0/0 .text __dt__16daNpc_Kn_Param_cFv */ -// daNpc_Kn_Param_c::~daNpc_Kn_Param_c() {} - -// FIXME: The following funcs may be in their own inc file? - -/* 80A3C998-80A3CB14 012078 017C+00 1/1 0/0 0/0 .text setParamTeach01__10daNpc_Kn_cFv */ -u32 daNpc_Kn_c::setParamTeach01() { - s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance; - s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle; - s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance; - s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle; - - switch(mActionMode) { - case 0: - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); - return 0; - case 1: - if (field_0x170c != 0) { - return 0; - } - case 2: - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); - mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); - return 4; - case 3: - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); - mAcchCir.SetWallR(135.0f); - mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); - return 4; - } - - return 10; -} - -/* 80A3CB14-80A3CBFC 0121F4 00E8+00 1/1 0/0 0/0 .text setCollisionTeach01__10daNpc_Kn_cFv - */ -void daNpc_Kn_c::setCollisionTeach01() { - switch (mActionMode) { - case 0: - break; - case 1: - mCylCc.SetTgType(-1); - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); - mCylCc.SetTgSPrm(0x13); - mCylCc.OnTgNoConHit(); - - if (field_0x170c == 0) { - mCylCc.OnTgShield(); - } else { - mCylCc.OffTgShield(); - } - break; - case 2: - mCylCc.SetTgType(-1); - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); - mCylCc.SetTgSPrm(0x13); - mCylCc.OffTgShield(); - mCylCc.OffTgNoAtHitInfSet(); - mCylCc.OnTgNoConHit(); - mCylCc.OnCoSetBit(); - break; - case 3: - mCylCc.OffTgSetBit(); - mCylCc.OffCoSetBit(); - break; - } -} - -/* 80A3CBFC-80A3CCC0 0122DC 00C4+00 1/1 0/0 0/0 .text teach01_selectAction__10daNpc_Kn_cFv */ -void daNpc_Kn_c::teach01_selectAction() { - switch(mActionMode) { - case 0: - mpTeachAction = &daNpc_Kn_c::teach01_start; - return; - case 1: - mpTeachAction = &daNpc_Kn_c::teach01_attackWait; - return; - case 2: - mpTeachAction = &daNpc_Kn_c::teach01_swordAttackWait; - return; - case 3: - mpTeachAction = &daNpc_Kn_c::teach01_swordFinishWait; - return; - } - - mpTeachAction = &daNpc_Kn_c::wait; - return; -} - -/* 80A3CCC0-80A3CDFC 0123A0 013C+00 1/0 0/0 0/0 .text teach01_start__10daNpc_Kn_cFPv */ -int daNpc_Kn_c::teach01_start(void* param_0) { - switch(field_0xe2a) { - case 0: - case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,0,0); - mJntAnm.lookPlayer(0); - field_0xe2a = 2; - case 2: - mEvtIdx = 5; - field_0xe39 = 1; - cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800); - setAngle(mTargetAngle.y); - case 3: - default: - return 1; - } -} - -/* 80A3CDFC-80A3CF78 0124DC 017C+00 1/0 0/0 0/0 .text teach01_attackWait__10daNpc_Kn_cFPv - */ -int daNpc_Kn_c::teach01_attackWait(void* param_0) { - switch(field_0xe2a) { - case 0: - case 1: - mMotionSeqMngr2.setNo(9,-1.0f,1,0); - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mJntAnm.lookPlayer(0); - field_0xe2a = 2; - case 2: - if (!ctrlWarp()) { - cLib_addCalcAngleS2(&mTargetAngle.y,fopAcM_searchPlayerAngleY(this),2,0x800); - setAngle(mTargetAngle.y); - if (mCylCc.ChkTgHit()) { - - mEvtIdx = 6; - field_0x16f4.set(1.0f,1.0f,1.0f); - field_0x170c = 0; - field_0x170d = 0; - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28); - } - } - case 3: - default: - return 1; - } -} - -/* 80A3CF78-80A3D32C 012658 03B4+00 1/0 0/0 0/0 .text teach01_swordAttackWait__10daNpc_Kn_cFPv */ -int daNpc_Kn_c::teach01_swordAttackWait(void* param_0) { - switch(field_0xe2a) { - case 0: - case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(9,-1.0f,0,0); - mJntAnm.lookPlayer(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x8e; - mTargetPos = current.pos; - field_0x15bc = 0; - field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac, - daNpc_Kn_Param_c::m.field_0xae); - speedF = 0.0f; - speed.zero(); - field_0xe2a = 2; - case 2: - calcSlip(); - mCcStts.Move(); - if (mCylCc.ChkTgHit()) { - int cut_type = daPy_getPlayerActorClass()->getCutType(); - if (cut_type == daPy_py_c::CUT_TYPE_JUMP || cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT || cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT || daPy_getPlayerActorClass()->getCutCount() >= 4) { - mActionMode = 0x3; - setAngle(fopAcM_searchPlayerAngleY(this)); - speedF = -daNpc_Kn_Param_c::m.field_0xa0; - speed.y = daNpc_Kn_Param_c::m.field_0xa4; - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1f); - } else { - fopAc_ac_c* hit_ac = mCylCc.GetTgHitAc(); - s16 angle = cLib_targetAngleY(&hit_ac->current.pos,¤t.pos); - cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x94); - mDoMtx_stack_c::YrotS(angle); - mDoMtx_stack_c::multVec(&pos,&mTargetPos); - mTargetPos += current.pos; - field_0x15bc = 1; - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x1f,-1.0f,1,0); - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1e); - } - } else { - if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) { - mTargetPos = current.pos; - int check = 0; - - if (dComIfGp_getAttention()->LockonTruth()) { - check = 1; - } - - checkCollisionSword() != 0 ? mEvtIdx = 4 : mEvtIdx = 1; - - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); - - check != 0 ?mFlowNodeNo = 0x2da: mFlowNodeNo = 0x2db; - - } else { - calcSwordAttackMove(1); - } - - - } - case 3: - default: - return 1; - } -} - -/* 80A3D32C-80A3D6D8 012A0C 03AC+00 1/0 0/0 0/0 .text teach01_swordFinishWait__10daNpc_Kn_cFPv */ -int daNpc_Kn_c::teach01_swordFinishWait(void* param_0) { - switch(field_0xe2a) { - case 0: - case 1: - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x12,-1.0f,0,0); - mCreature.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); - mJntAnm.lookNone(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x8e; - field_0xe2a = 2; - case 2: - mTargetPos = current.pos; - int no = mMotionSeqMngr2.getNo(); - if (no == 0x12) { - if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { - speedF = 0.0f; - speed.zero(); - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x13,-1.0f,0,0); - setLandingPrtcl(); - } - } else if (no == 0x13) { - if (mMotionSeqMngr2.getStepNo() == 0) { - if (mpMorf[0]->getFrame() >= 13.0f && mpMorf[0]->getFrame() < 14.0f) { - setLandingPrtcl(); - } - } else { - // both downFlg inlines are generating extra instructions? - // if (!checkDownFlg()) - if (!(mFlags & 0x1)) { - cXyz pos(10.0f,0.0f,0.0f); - mFlags |= 1; - // onDownFlg(); - u8 backbone_joint = getBackboneJointNo(); - J3DModel* model = mpMorf[0]->getModel(); - mDoMtx_stack_c::copy(model->getAnmMtx(backbone_joint)); - mDoMtx_stack_c::multVec(&pos,&field_0x15c0); - setDownPos(&field_0x15c0); - } else { - if (checkCutDownHitFlg()) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x14,-1.0f,0,0); - - if (mType == 0) { - mEvtIdx = 7; - } else if (mType == 1) { - mEvtIdx = 9; - } - - mCreature.startCollisionSE(Z2SE_HIT_SWORD_STAB,0x1e); - break; - } - } - } - } - - if (cLib_calcTimer(&field_0xdec) == 0) { - if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_DOWN) { - offDownFlg(); - mTargetPos = current.pos; - mEvtIdx = 3; - mFlowNodeNo = 0x2dc; - mActionMode = 2; - } - } - case 3: - default: - break; - } - +static int daNpc_Kn_IsDelete(void* i_this) { return 1; } -// FIXME: Remove once ctrlWarp is decompiled: -f32 dummy_lits_12626(int sel) { - switch (sel) { - case 0: return 600.0f; - default: return 100.0f; - } -} +#include "d/actor/d_a_npc_kn_teach01.inc" -/* 80A3D6D8-80A3DCEC 012DB8 0614+00 3/3 0/0 0/0 .text ctrlWarp__10daNpc_Kn_cFv */ -int daNpc_Kn_c::ctrlWarp() { - // NONMATCHING -} - -/* 80A3DCEC-80A3DEC4 0133CC 01D8+00 1/0 0/0 0/0 .text ECut_firstEncount__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_firstEncount(int param_0) { - // NONMATCHING -} - -/* 80A3DEC4-80A3E550 0135A4 068C+00 1/0 0/0 0/0 .text ECut_attackFailed__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_attackFailed(int param_0) { - // NONMATCHING -} - -/* 80A3E550-80A3EB84 013C30 0634+00 3/0 0/0 0/0 .text ECut_firstSkillGet__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_firstSkillGet(int param_0) { - // NONMATCHING -} - -/* 80A3EB84-80A3EE38 014264 02B4+00 1/1 0/0 0/0 .text setParamTeach02__10daNpc_Kn_cFv */ -u32 daNpc_Kn_c::setParamTeach02() { - s16 field48 = daNpc_Kn_Param_c::m.common.talk_distance; - s16 field4a = daNpc_Kn_Param_c::m.common.talk_angle; - s16 field4c = daNpc_Kn_Param_c::m.common.attention_distance; - s16 field4e = daNpc_Kn_Param_c::m.common.attention_angle; - f32 radius = daNpc_Kn_Param_c::m.common.attention_offset; - f32 height = daNpc_Kn_Param_c::m.common.height; - - switch(mActionMode) { - case 7: - case 6: - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); - return 4; - case 5: - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); - cXyz pos; - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getBackboneJointNo())); - mDoMtx_stack_c::multVecZero(&pos); - - f32 absxz = (daPy_getPlayerActorClass()->current.pos - pos).absXZ(); - - if (absxz < 255.0f) { - return 0x200004; - } else { - return 4; - } - case 4: - attention_info.distances[0] = daNpcT_getDistTableIdx(field4c, field4e); - attention_info.distances[2] = 0xe4; - attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = daNpcT_getDistTableIdx(field48, field4a); - mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width); - mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); - return 0; - } - - return 10; -} - -/* 80A3EE38-80A3EF1C 014518 00E4+00 1/1 0/0 0/0 .text setCollisionTeach02__10daNpc_Kn_cFv - */ -void daNpc_Kn_c::setCollisionTeach02() { - switch (mActionMode) { - case 4: - break; - case 5: - mCylCc.SetTgType(-1); - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); - mCylCc.SetTgSPrm(0x13); - mCylCc.OnTgShield(); - mCylCc.OffTgNoAtHitInfSet(); - mCylCc.OnTgNoConHit(); - break; - case 6: - mCylCc.SetTgType(-1); - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); - mCylCc.SetTgSPrm(0x13); - mCylCc.OffTgShield(); - mCylCc.OffTgNoAtHitInfSet(); - mCylCc.OnTgNoConHit(); - break; - case 7: - mCylCc.SetTgType(-1); - mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); - mCylCc.SetTgSPrm(0x13); - mCylCc.OffTgShield(); - mCylCc.OnTgNoConHit(); - break; - } -} - -/* 80A3EF1C-80A3EFE0 0145FC 00C4+00 1/1 0/0 0/0 .text teach02_selectAction__10daNpc_Kn_cFv */ -void daNpc_Kn_c::teach02_selectAction() { - switch(mActionMode) { - case 4: - mpTeachAction = &daNpc_Kn_c::teach02_start; - return; - case 5: - mpTeachAction = &daNpc_Kn_c::teach02_shieldBashWait; - return; - case 6: - mpTeachAction = &daNpc_Kn_c::teach02_finishWait; - return; - case 7: - mpTeachAction = &daNpc_Kn_c::teach02_shieldReflectWait; - return; - } - - mpTeachAction = &daNpc_Kn_c::wait; - return; -} - -/* 80A3EFE0-80A3F358 0146C0 0378+00 1/0 0/0 0/0 .text teach02_shieldBashWait__10daNpc_Kn_cFPv */ -int daNpc_Kn_c::teach02_shieldBashWait(void* param_0) { - switch(field_0xe2a) { - case 0: - case 1: - mMotionSeqMngr1.setNo(1, -1.0f, 0, 0); - mMotionSeqMngr2.setNo(9, -1.0f, 0, 0); - mJntAnm.lookPlayer(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x8e; - mTargetPos = current.pos; - field_0x15bc = 0; - field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.field_0xac, - daNpc_Kn_Param_c::m.field_0xae); - speedF = 0.0f; - speed.zero(); - field_0xe2a = 2; - case 2: - mCcStts.Move(); - - if (mCylCc.ChkTgShieldHit()) { - u8 cut_type = daPy_getPlayerActorClass()->getCutType(); - - if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { - s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position); - cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x94); - - mDoMtx_stack_c::YrotS(angle); - mDoMtx_stack_c::multVec(&pos,&mTargetPos); - mTargetPos += current.pos; - field_0x15bc = 1; - mCylCc.ClrTgHit(); - mActionMode = 6; - mCreature.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK,0x28); - break; - } - } - - if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) { - BOOL truth = FALSE; - - if (dComIfGp_getAttention()->LockonTruth()) { - truth = TRUE; - } - - if (checkCollisionSword()) { - mEvtIdx = 4; - } else { - mEvtIdx = 1; - } - - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); - - if (truth) { - mFlowNodeNo = 0x2c0; - } else { - mFlowNodeNo = 0x2bf; - } - } else { - if (mCylCc.ChkTgHit()) { - if (mCylCc.GetTgHitObj()->ChkAtType(0x10) == 0) { - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0x1b,-1.0f,1,0); - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x28); - break; - } - } - - calcSwordAttackMove(1); - } - case 3: - default: - break; - } - - return 1; -} - -/* 80A3F358-80A3F5A4 014A38 024C+00 1/0 0/0 0/0 .text teach02_finishWait__10daNpc_Kn_cFPv - */ -int daNpc_Kn_c::teach02_finishWait(void* param_0) { - switch(field_0xe2a) { - case 0: - case 1: - mMotionSeqMngr1.setNo(1, -1.0f, 0, 0); - mMotionSeqMngr2.setNo(11, -1.0f, 1, 0); - mJntAnm.lookPlayer(0); - field_0xdec = daNpc_Kn_Param_c::m.field_0x90; - field_0xe2a = 2; - case 2: - calcSlip(); - mCcStts.Move(); - - if (mCylCc.ChkTgHit()) { - u8 cut_type = daPy_getPlayerActorClass()->getCutType(); - - if (cut_type != daPy_py_c::CUT_TYPE_GUARD_ATTACK) { - if (mType == 1) { - mEvtIdx = 10; - } else if (mType == 2) { - mEvtIdx = 12; - } - - cXyz pos(0.0f,0.0f,daNpc_Kn_Param_c::m.field_0x98); - mDoMtx_stack_c::YrotS(cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, &attention_info.position)); - mDoMtx_stack_c::multVec(&pos,&mTargetPos); - mTargetPos += current.pos; - field_0x15bc = 1; - mCreature.startCollisionSE(Z2SE_HIT_SWORD,0x1e); - break; - } - } - - if (!cLib_calcTimer(&field_0xdec)) { - mEvtIdx = 1; - mFlowNodeNo = 0x2c1; - mActionMode = 5; - - mMotionSeqMngr1.setNo(1,-1.0f,0,0); - mMotionSeqMngr2.setNo(0,-1.0f,1,0); - } - case 3: - default: - break; - } - - return 1; -} - -// FIXME: Remove when teach02_shieldReflectWait is decompiled: -f32 dummy_lits_13839(int sel) { - switch (sel) { - case 0: return 3.0f; - case 1: return 34.0f; - default: return 35.0f; - } -} - -/* 80A3F5A4-80A3F99C 014C84 03F8+00 1/0 0/0 0/0 .text teach02_shieldReflectWait__10daNpc_Kn_cFPv - */ -int daNpc_Kn_c::teach02_shieldReflectWait(void* param_0) { - // NONMATCHING - switch(field_0xe2a) { - case 0: - case 1: - mMotionSeqMngr1.setNo(1, -1.0f, 0, 0); - mMotionSeqMngr1.setNo(32, -1.0f, 1, 0); - mJntAnm.lookPlayer(0); - field_0xe2a = 2; - case 2: - mCcStts.Move(); - - if (field_0x15bd == 0) { - - } - case 3: - default: - break; - } - - return 1; -} - -// FIXME: Remove when the following func is decompiled. -f32 dummy_lit_14210(int sel) { - return 15.0f; -} - -/* 80A3F99C-80A3FFB4 01507C 0618+00 3/0 0/0 0/0 .text ECut_secondSkillExplain__10daNpc_Kn_cFi */ -int daNpc_Kn_c::ECut_secondSkillExplain(int param_0) { - // NONMATCHING -} - -/* 80A3FFB4-80A403B8 015694 0404+00 1/0 0/0 0/0 .text ECut_reflectExplain__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_reflectExplain(int param_0) { - // NONMATCHING -} - -/* 80A403B8-80A408B4 015A98 04FC+00 2/0 0/0 0/0 .text ECut_secondSkillGet__10daNpc_Kn_cFi - */ -int daNpc_Kn_c::ECut_secondSkillGet(int param_0) { - // NONMATCHING -} - -// FIXME: The following were temporarily moved down here. -// These .data pieces will be inlined with their corresp functions. - -/* 80A42C38-80A42C74 001F04 003C+00 0/1 0/0 0/0 .data l_checkOffset$13216 */ -static u8 l_checkOffset[60] = { - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x48, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xC2, 0x48, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x42, 0x48, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xC2, 0x48, 0x00, 0x00, -}; - -/* 80A42C74-80A42CD4 001F40 0060+00 0/1 0/0 0/0 .data l_WarpInScaleTable$13228 */ -static u8 l_WarpInScaleTable[96] = { - 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0xCC, 0x08, 0x31, - 0x3F, 0x52, 0xF1, 0xAA, - 0x3F, 0xD5, 0xC2, 0x8F, - 0x3F, 0xF4, 0x7A, 0xE1, - 0x3F, 0x38, 0x51, 0xEC, - 0x3F, 0xE5, 0x1E, 0xB8, - 0x3F, 0xCC, 0x08, 0x31, - 0x3F, 0x51, 0x26, 0xE9, - 0x3F, 0xD5, 0xC2, 0x8F, - 0x3E, 0xCC, 0xCC, 0xCD, - 0x3F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xA6, 0x66, 0x66, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -}; - -/* 80A42CD4-80A42CDC 001FA0 0008+00 0/1 0/0 0/0 .data l_warpInTimeTable$13229 */ -static u8 l_warpInTimeTable[8] = { - 0x01, - 0x04, - 0x08, - 0x0B, - 0x0D, - 0x0E, - 0x0F, - 0x10, -}; - -/* 80A42CDC-80A42D0C 001FA8 0030+00 0/1 0/0 0/0 .data l_WarpOutScaleTable$13245 */ -static u8 l_WarpOutScaleTable[48] = { - 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xA8, 0xF5, 0xC3, - 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x18, 0x10, 0x62, - 0x3F, 0xC0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, -}; - -/* 80A42D0C-80A42D10 001FD8 0004+00 0/1 0/0 0/0 .data l_warpOutTimeTable$13246 */ -static u8 l_warpOutTimeTable[4] = { - 0x01, - 0x03, - 0x05, - 0x06, -}; +#include "d/actor/d_a_npc_kn_teach02.inc" /* 80A43148-80A43168 -00001 0020+00 1/0 0/0 0/0 .data daNpc_Kn_MethodTable */ static actor_method_class daNpc_Kn_MethodTable = { - (process_method_func)daNpc_Kn_Create, - (process_method_func)daNpc_Kn_Delete, - (process_method_func)daNpc_Kn_Execute, - (process_method_func)daNpc_Kn_IsDelete, + (process_method_func)daNpc_Kn_Create, (process_method_func)daNpc_Kn_Delete, + (process_method_func)daNpc_Kn_Execute, (process_method_func)daNpc_Kn_IsDelete, (process_method_func)daNpc_Kn_Draw, }; /* 80A43168-80A43198 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_KN */ extern actor_process_profile_definition g_profile_NPC_KN = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_NPC_KN, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daNpc_Kn_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 347, // mPriority - &daNpc_Kn_MethodTable, // sub_method - 0x00044107, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_NPC_KN, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daNpc_Kn_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 347, // mPriority + &daNpc_Kn_MethodTable, // sub_method + 0x00044107, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; AUDIO_INSTANCES; diff --git a/src/d/actor/d_a_npc_kn_base.inc b/src/d/actor/d_a_npc_kn_base.inc index 480c889286b..ab7b16f9f08 100644 --- a/src/d/actor/d_a_npc_kn_base.inc +++ b/src/d/actor/d_a_npc_kn_base.inc @@ -1,62 +1,64 @@ #include "d/actor/d_a_npc_kn.h" #include "d/d_msg_object.h" +#include "d/d_k_wmark.h" /* 80A38520-80A38550 00DC00 0030+00 1/1 0/0 0/0 .text * tgHitCallBack__10daNpc_Kn_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -void daNpc_Kn_c::tgHitCallBack(fopAc_ac_c* param_0, dCcD_GObjInf* param_1, fopAc_ac_c* param_2, - dCcD_GObjInf* param_3) { +void daNpc_Kn_c::tgHitCallBack(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf, + fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) { u8 cut_type = 0; - - if (param_2) { - if (fopAcM_GetProfName(param_2) == 0xfd) { - cut_type = ((daPy_py_c*)param_2)->getCutType(); + if (i_atActor != NULL) { + if (fopAcM_GetProfName(i_atActor) == PROC_ALINK) { + cut_type = ((daPy_py_c*)i_atActor)->getCutType(); } else { cut_type = 1; } } - ((daNpc_Kn_c*)param_0)->setCutType(cut_type); + ((daNpc_Kn_c*)i_tgActor)->setCutType(cut_type); } /* 80A38550-80A3858C 00DC30 003C+00 1/1 0/0 0/0 .text getTrnsfrmAnmP__10daNpc_Kn_cFPCci */ -void daNpc_Kn_c::getTrnsfrmAnmP(char const* i_arcName, int i_resIdx) { - dComIfG_getObjectRes(i_arcName, i_resIdx); +J3DAnmTransform* daNpc_Kn_c::getTrnsfrmAnmP(char const* i_arcName, int i_resIdx) { + return (J3DAnmTransform*)dComIfG_getObjectRes(i_arcName, i_resIdx); } /* 80A3858C-80A385C8 00DC6C 003C+00 3/3 0/0 0/0 .text getTrnsfrmKeyAnmP__10daNpc_Kn_cFPCci */ -void* daNpc_Kn_c::getTrnsfrmKeyAnmP(char const* i_arcName, int i_resIdx) { - return dComIfG_getObjectRes(i_arcName, i_resIdx); +J3DAnmTransformKey* daNpc_Kn_c::getTrnsfrmKeyAnmP(char const* i_arcName, int i_resIdx) { + return (J3DAnmTransformKey*)dComIfG_getObjectRes(i_arcName, i_resIdx); } /* 80A385C8-80A38604 00DCA8 003C+00 1/1 0/0 0/0 .text getTexPtrnAnmP__10daNpc_Kn_cFPCci */ -void daNpc_Kn_c::getTexPtrnAnmP(char const* i_arcName, int i_resIdx) { - dComIfG_getObjectRes(i_arcName, i_resIdx); +J3DAnmTexPattern* daNpc_Kn_c::getTexPtrnAnmP(char const* i_arcName, int i_resIdx) { + return (J3DAnmTexPattern*)dComIfG_getObjectRes(i_arcName, i_resIdx); } /* 80A38604-80A38640 00DCE4 003C+00 1/1 0/0 0/0 .text getTexSRTKeyAnmP__10daNpc_Kn_cFPCci */ -void daNpc_Kn_c::getTexSRTKeyAnmP(char const* i_arcName, int i_resIdx) { - dComIfG_getObjectRes(i_arcName, i_resIdx); +J3DAnmTextureSRTKey* daNpc_Kn_c::getTexSRTKeyAnmP(char const* i_arcName, int i_resIdx) { + return (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(i_arcName, i_resIdx); } /* 80A38640-80A38684 00DD20 0044+00 1/1 0/0 0/0 .text * setBckAnm__10daNpc_Kn_cFP15J3DAnmTransformfiiib */ -void daNpc_Kn_c::setBckAnm(J3DAnmTransform* i_bck, f32 i_rate, int i_attribute, int i_startF, - int i_endF, bool i_modify) { - mBckAnm.init(i_bck, 1, i_attribute, i_rate, i_startF, i_endF, i_modify); +BOOL daNpc_Kn_c::setBckAnm(J3DAnmTransform* i_bck, f32 i_speed, int i_mode, int i_startF, + int i_endF, bool i_modify) { + return mBckAnm.init(i_bck, TRUE, i_mode, i_speed, i_startF, i_endF, i_modify); } /* 80A38684-80A3877C 00DD64 00F8+00 1/1 0/0 0/0 .text * setMcaMorfAnm__10daNpc_Kn_cFP18J3DAnmTransformKeyffiii */ -int daNpc_Kn_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf, - int i_attribute, int i_start, int i_end) { +int daNpc_Kn_c::setMcaMorfAnm(J3DAnmTransformKey* i_bck, f32 i_speed, f32 i_morf, int i_mode, + int i_start, int i_end) { f32 f_start = i_start; f32 f_end = i_end; - mpMorf[0]->setAnm(i_anm, i_attribute, i_morf, i_rate, f_start, f_end); - if (mpMorf[1]) { - mpMorf[1]->setAnm(i_anm, i_attribute, i_morf, i_rate, f_start, f_end); + + mpModelMorf[0]->setAnm(i_bck, i_mode, i_morf, i_speed, f_start, f_end); + + if (mpModelMorf[1] != NULL) { + mpModelMorf[1]->setAnm(i_bck, i_mode, i_morf, i_speed, f_start, f_end); } return 1; @@ -64,37 +66,38 @@ int daNpc_Kn_c::setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf, /* 80A3877C-80A387BC 00DE5C 0040+00 1/1 0/0 0/0 .text * setBtpAnm__10daNpc_Kn_cFP16J3DAnmTexPatternP12J3DModelDatafi */ -void daNpc_Kn_c::setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_rate, - int i_attribute) { - mBtpAnm.init(i_modelData, i_btp, 1, i_attribute, i_rate, 0, -1); +BOOL daNpc_Kn_c::setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_speed, + int i_mode) { + return mBtpAnm.init(i_modelData, i_btp, TRUE, i_mode, i_speed, 0, -1); } /* 80A387BC-80A387FC 00DE9C 0040+00 1/1 0/0 0/0 .text * setBtkAnm__10daNpc_Kn_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi */ -void daNpc_Kn_c::setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_rate, - int i_attribute) { - mBtkAnm.init(i_modelData, i_btk, 1, i_attribute, i_rate, 0, -1); +BOOL daNpc_Kn_c::setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_speed, + int i_mode) { + return mBtkAnm.init(i_modelData, i_btk, TRUE, i_mode, i_speed, 0, -1); } /* 80A387FC-80A388B0 00DEDC 00B4+00 1/1 0/0 0/0 .text loadRes__10daNpc_Kn_cFPCScPPCc */ -cPhs__Step daNpc_Kn_c::loadRes(s8 const* param_0, char const** param_1) { - cPhs__Step phase; - int dbg_r28 = 0; - for (int idx = 0; idx < 8; ++idx) { - if (param_0[idx] == -1) { - if (idx != dbg_r28) { +int daNpc_Kn_c::loadRes(const s8* i_ptrn_list, const char** i_arcname_list) { + int phase; + int resLoad_cnt = 0; + + for (int i = 0; i < 8; ++i) { + if (i_ptrn_list[i] == -1) { + if (i != resLoad_cnt) { break; } return cPhs_COMPLEATE_e; } - phase = (cPhs__Step)dComIfG_resLoad(&mPhase[idx], param_1[param_0[idx]]); - if (phase == 4) { - ++dbg_r28; + phase = dComIfG_resLoad(&mPhase[i], i_arcname_list[i_ptrn_list[i]]); + if (phase == cPhs_COMPLEATE_e) { + ++resLoad_cnt; } - if (phase == 5 || phase == 3){ + if (phase == cPhs_ERROR_e || phase == cPhs_UNK3_e) { return cPhs_ERROR_e; } } @@ -103,17 +106,17 @@ cPhs__Step daNpc_Kn_c::loadRes(s8 const* param_0, char const** param_1) { } /* 80A388B0-80A38930 00DF90 0080+00 1/1 0/0 0/0 .text deleteRes__10daNpc_Kn_cFPCScPPCc */ -void daNpc_Kn_c::deleteRes(s8 const* param_0, char const** param_1) { - for (int i = 0; i < 8 && param_0[i] != -1; i++ ) { - dComIfG_resDelete(&mPhase[i], param_1[param_0[i]]); +void daNpc_Kn_c::deleteRes(const s8* i_ptrn_list, const char** i_arcname_list) { + for (int i = 0; i < 8 && i_ptrn_list[i] != -1; i++) { + dComIfG_resDelete(&mPhase[i], i_arcname_list[i_ptrn_list[i]]); } } /* 80A38930-80A38BB8 00E010 0288+00 1/1 0/0 0/0 .text execute__10daNpc_Kn_cFv */ -s32 daNpc_Kn_c::execute() { +int daNpc_Kn_c::execute() { setParam(); - if (!evtEndProc()) { + if (!evtProc()) { action(); } @@ -127,20 +130,20 @@ s32 daNpc_Kn_c::execute() { mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; - field_0xdf0 = fopAcM_getPolygonAngle(mGndChk,current.angle.y); + mGroundAngle = fopAcM_getPolygonAngle(mGndChk, current.angle.y); mGroundHeight = mAcch.GetGroundH(); afterMoved(); - if (mGroundHeight != -1e+09f) { + if (mGroundHeight != -1000000000.0f) { setEnvTevColor(); setRoomNo(); } - if (mMotionSeqMngr1.checkEntryNewMotion()) { + if (mFaceMotionSeqMngr.checkEntryNewMotion()) { ctrlFaceMotion(); } - if (mMotionSeqMngr2.checkEntryNewMotion()) { + if (mMotionSeqMngr.checkEntryNewMotion()) { ctrlMotion(); } @@ -152,7 +155,8 @@ s32 daNpc_Kn_c::execute() { setCollision(); if (field_0xe33 == 0) { - if (field_0xe39 != 0 && dComIfGp_getEvent().isOrderOK() || g_dComIfG_gameInfo.play.mEvent.mEventStatus == 0) { + if ((field_0xe39 != 0 && dComIfGp_getEvent().isOrderOK()) || dComIfGp_event_runCheck() == FALSE) + { evtOrder(); } } @@ -163,12 +167,13 @@ s32 daNpc_Kn_c::execute() { } /* 80A38BB8-80A38FAC 00E298 03F4+00 1/1 0/0 0/0 .text draw__10daNpc_Kn_cFiifP11_GXColorS10fiii */ -int daNpc_Kn_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3, f32 param_4, - int param_5, int param_6, int param_7) { - J3DModel* model = mpMorf[0]->getModel(); - J3DModelData* modelData = model->getModelData(); +int daNpc_Kn_c::draw(BOOL param_0, BOOL i_setEffMtx, f32 param_2, GXColorS10* i_tevcolor, f32 param_4, + BOOL i_isDrawGhost, BOOL i_noShadow, BOOL i_simpleShadow) { + J3DModel* model_p = mpModelMorf[0]->getModel(); + J3DModelData* mdlData_p = model_p->getModelData(); field_0xe3a = 1; - if (drawDbgInfo() || checkHide() || field_0xe32) { + + if (drawDbgInfo() || checkHide() || mNoDraw) { return 1; } @@ -176,77 +181,78 @@ int daNpc_Kn_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3 tevStr.TevColor.g = 0; tevStr.TevColor.b = 0; tevStr.TevColor.a = 0; - if (param_3 != NULL) { - tevStr.TevColor.r = param_3->r; - tevStr.TevColor.g = param_3->g; - tevStr.TevColor.b = param_3->b; - tevStr.TevColor.a = param_3->a; + if (i_tevcolor != NULL) { + tevStr.TevColor.r = i_tevcolor->r; + tevStr.TevColor.g = i_tevcolor->g; + tevStr.TevColor.b = i_tevcolor->b; + tevStr.TevColor.a = i_tevcolor->a; } - if (field_0xde0 && mTimer) { - f32 dbg_f32 = f32(mTimer) / f32(field_0xde0); - if (cM3d_IsZero(dbg_f32) == 0) { - tevStr.TevColor.r = 20.0f * dbg_f32; + if (mTimerStart != 0 && mTimer != 0) { + f32 color_strength = f32(mTimer) / f32(mTimerStart); + if (cM3d_IsZero(color_strength) == false) { + tevStr.TevColor.r = 20.0f * color_strength; } } else if (param_0) { tevStr.TevColor.g = 20; } - if (field_0xdcc & 0x800) { - mBtpAnm.entry(modelData); + if (mAnmFlags & ANM_PLAY_BTP) { + mBtpAnm.entry(mdlData_p); } - if (field_0xdcc & 0x80) { - mBtkAnm.entry(modelData); + if (mAnmFlags & ANM_PLAY_BTK) { + mBtkAnm.entry(mdlData_p); } - if (field_0xdcc & 0x100) { - mBrkAnm.entry(modelData); + if (mAnmFlags & ANM_PLAY_BRK) { + mBrkAnm.entry(mdlData_p); } - if (field_0xdcc & 0x200) { - mBpkAnm.entry(modelData); + if (mAnmFlags & ANM_PLAY_BPK) { + mBpkAnm.entry(mdlData_p); } - if (param_1) { - fopAcM_setEffectMtx(this, modelData); + if (i_setEffMtx) { + fopAcM_setEffectMtx(this, mdlData_p); } - if (param_5) { + if (i_isDrawGhost) { drawGhost(); - } else if (field_0xABD) { + } else if (mTwilight) { g_env_light.settingTevStruct(4, ¤t.pos, &tevStr); - g_env_light.setLightTevColorType_MAJI(model, &tevStr); + g_env_light.setLightTevColorType_MAJI(model_p, &tevStr); + dComIfGd_setListDark(); - mpMorf[0]->entryDL(); + mpModelMorf[0]->entryDL(); dComIfGd_setList(); } else { g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); - g_env_light.setLightTevColorType_MAJI(model, &tevStr); - mpMorf[0]->entryDL(); + g_env_light.setLightTevColorType_MAJI(model_p, &tevStr); + mpModelMorf[0]->entryDL(); } - if (field_0xdcc & 0x800) { - mBtpAnm.remove(modelData); + if (mAnmFlags & ANM_PLAY_BTP) { + mBtpAnm.remove(mdlData_p); } - if (field_0xdcc & 0x80) { - mBtkAnm.remove(modelData); + if (mAnmFlags & ANM_PLAY_BTK) { + mBtkAnm.remove(mdlData_p); } - if (field_0xdcc & 0x100) { - mBrkAnm.remove(modelData); + if (mAnmFlags & ANM_PLAY_BRK) { + mBrkAnm.remove(mdlData_p); } - if (field_0xdcc & 0x200) { - mBpkAnm.remove(modelData); + if (mAnmFlags & ANM_PLAY_BPK) { + mBpkAnm.remove(mdlData_p); } - if (param_6 == 0) { - if (param_7 == 0) { - mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, param_2, - param_4, current.pos.y, mGroundHeight, mGndChk, &tevStr, - 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + if (!i_noShadow) { + if (!i_simpleShadow) { + mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model_p, ¤t.pos, param_2, param_4, + current.pos.y, mGroundHeight, mGndChk, &tevStr, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); } else { dComIfGd_setSimpleShadow(¤t.pos, mGroundHeight, param_4, mGndChk, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); @@ -271,105 +277,106 @@ void daNpc_Kn_c::setRoomNo() { } /* 80A3904C-80A390F8 00E72C 00AC+00 1/1 0/0 0/0 .text checkEndAnm__10daNpc_Kn_cFf */ -BOOL daNpc_Kn_c::checkEndAnm(f32 i_rate) { - switch(mpMorf[0]->getPlayMode()) { - case 2: - return mpMorf[0]->isLoop(); - case 1: - case 0: - return mpMorf[0]->isStop() && mpMorf[0]->getPlaySpeed() == 0.0f && i_rate != 0.0f; - case 3: - case 4: - default: - return FALSE; +BOOL daNpc_Kn_c::checkEndAnm(f32 i_speed) { + switch (mpModelMorf[0]->getPlayMode()) { + case J3DFrameCtrl::EMode_LOOP: + return mpModelMorf[0]->isLoop(); + case J3DFrameCtrl::EMode_RESET: + case J3DFrameCtrl::EMode_NONE: + return mpModelMorf[0]->isStop() && mpModelMorf[0]->getPlaySpeed() == 0.0f && i_speed != 0.0f; + case J3DFrameCtrl::EMode_REVERSE: + case J3DFrameCtrl::EMode_LOOP_REVERSE: + default: + return FALSE; } } /* 80A390F8-80A3917C 00E7D8 0084+00 1/1 0/0 0/0 .text checkEndAnm__10daNpc_Kn_cFP12J3DFrameCtrlf */ -BOOL daNpc_Kn_c::checkEndAnm(J3DFrameCtrl* i_frameCtrl, f32 i_rate) { +BOOL daNpc_Kn_c::checkEndAnm(J3DFrameCtrl* i_frameCtrl, f32 i_speed) { switch (i_frameCtrl->getAttribute()) { - case 2: - return i_frameCtrl->checkState(2); - case 1: - case 0: - return i_frameCtrl->checkState(1) && i_frameCtrl->getRate() == 0.0f && i_rate != 0.0f; - case 3: - case 4: - default: - return FALSE; + case J3DFrameCtrl::EMode_LOOP: + return i_frameCtrl->checkState(2); + case J3DFrameCtrl::EMode_RESET: + case J3DFrameCtrl::EMode_NONE: + return i_frameCtrl->checkState(1) && i_frameCtrl->getRate() == 0.0f && i_speed != 0.0f; + case J3DFrameCtrl::EMode_REVERSE: + case J3DFrameCtrl::EMode_LOOP_REVERSE: + default: + return FALSE; } } /* 80A3917C-80A3949C 00E85C 0320+00 1/1 0/0 0/0 .text playAllAnm__10daNpc_Kn_cFv */ void daNpc_Kn_c::playAllAnm() { f32 play_speed; - if ((field_0xdcc & 0x4000) == 0) { - if (field_0xdcc & 0x400) { + if (!(mAnmFlags & ANM_FLAG_4000)) { + if (mAnmFlags & ANM_PLAY_BCK) { play_speed = mBckAnm.getPlaySpeed(); - if (field_0xdcc & 0x10) { + if (mAnmFlags & ANM_PAUSE_BCK) { mBckAnm.setPlaySpeed(0.0f); } mBckAnm.play(); if (checkEndAnm(mBckAnm.getFrameCtrl(), play_speed)) { - ++field_0xe28; + ++mBckLoops; } mBckAnm.setPlaySpeed(play_speed); } - if (field_0xdcc & 0x800) { + if (mAnmFlags & ANM_PLAY_BTP) { play_speed = mBtpAnm.getPlaySpeed(); - if (field_0xdcc & 0x20) { + if (mAnmFlags & ANM_PAUSE_BTP) { mBtpAnm.setPlaySpeed(0.0f); - if (field_0xdcc & 0x2000) { - field_0xde8 = cLib_getRndValue(90, 90); + if (mAnmFlags & ANM_PAUSE_TIMER_BTP) { + mBtpPauseTimer = cLib_getRndValue(90, 90); } } - if (cLib_calcTimer(&field_0xde8)) { + if (cLib_calcTimer(&mBtpPauseTimer)) { mBtpAnm.setPlaySpeed(0.0f); } mBtpAnm.play(); - if (field_0xdcc & 0x2000) { + if (mAnmFlags & ANM_PAUSE_TIMER_BTP) { if (checkEndAnm(mBtpAnm.getFrameCtrl(), mBtpAnm.getPlaySpeed())) { - field_0xde8 = cLib_getRndValue(90, 90); + mBtpPauseTimer = cLib_getRndValue(90, 90); } } else { - field_0xde8 = 0; + mBtpPauseTimer = 0; } mBtpAnm.setPlaySpeed(play_speed); } } - if (field_0xdcc & 0x40) { - play_speed = mpMorf[0]->getPlaySpeed(); - if (field_0xdcc & 1) { - mpMorf[0]->setPlaySpeed(0.0f); - mpMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); - mpMorf[0]->setPlaySpeed(play_speed); - if (mpMorf[1] != NULL) { - mpMorf[1]->setPlaySpeed(0.0f); - mpMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); - mpMorf[1]->setPlaySpeed(play_speed); + if (mAnmFlags & ANM_PLAY_MORF) { + play_speed = mpModelMorf[0]->getPlaySpeed(); + if (mAnmFlags & ANM_PAUSE_MORF) { + mpModelMorf[0]->setPlaySpeed(0.0f); + mpModelMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mpModelMorf[0]->setPlaySpeed(play_speed); + + if (mpModelMorf[1] != NULL) { + mpModelMorf[1]->setPlaySpeed(0.0f); + mpModelMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mpModelMorf[1]->setPlaySpeed(play_speed); } } else { - mpMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); - if (mpMorf[1] != NULL) { - mpMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mpModelMorf[0]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if (mpModelMorf[1] != NULL) { + mpModelMorf[1]->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); } if (checkEndAnm(play_speed)) { - ++field_0xe26; + ++mMorfLoops; } } } - if (field_0xdcc & 0x80) { + if (mAnmFlags & ANM_PLAY_BTK) { play_speed = mBtkAnm.getPlaySpeed(); - if (field_0xdcc & 2) { + if (mAnmFlags & ANM_PAUSE_BTK) { mBtkAnm.setPlaySpeed(0.0f); } @@ -378,9 +385,9 @@ void daNpc_Kn_c::playAllAnm() { mBtkAnm.setPlaySpeed(play_speed); } - if (field_0xdcc & 0x100) { + if (mAnmFlags & ANM_PLAY_BRK) { play_speed = mBrkAnm.getPlaySpeed(); - if (field_0xdcc & 4) { + if (mAnmFlags & ANM_PAUSE_BRK) { mBrkAnm.setPlaySpeed(0.0f); } @@ -388,9 +395,9 @@ void daNpc_Kn_c::playAllAnm() { mBrkAnm.setPlaySpeed(play_speed); } - if (field_0xdcc & 0x200) { + if (mAnmFlags & ANM_PLAY_BPK) { play_speed = mBpkAnm.getPlaySpeed(); - if (field_0xdcc & 8) { + if (mAnmFlags & ANM_PAUSE_BPK) { mBpkAnm.setPlaySpeed(0.0f); } @@ -398,23 +405,26 @@ void daNpc_Kn_c::playAllAnm() { mBpkAnm.setPlaySpeed(play_speed); } - field_0xdcc &= ~0x403F; - if (field_0x15a4 & 0x40) { - play_speed = field_0x1588.getPlaySpeed(); - if (field_0x15a4 & 1) { - field_0x1588.setPlaySpeed(0.0f); + mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK | ANM_PAUSE_BCK + | ANM_PAUSE_BTP | ANM_FLAG_4000); + + if (mPodAnmFlags & ANM_PLAY_MORF) { + play_speed = mPodBck.getPlaySpeed(); + if (mPodAnmFlags & ANM_PAUSE_MORF) { + mPodBck.setPlaySpeed(0.0f); } - field_0x1588.play(); - field_0x1588.setPlaySpeed(play_speed); + mPodBck.play(); + mPodBck.setPlaySpeed(play_speed); } - field_0x15a4 &= ~0x403F; + mPodAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK | ANM_PAUSE_BCK + | ANM_PAUSE_BTP | ANM_FLAG_4000); } /* 80A3949C-80A39558 00EB7C 00BC+00 1/0 0/0 0/0 .text ctrlBtk__10daNpc_Kn_cFv */ int daNpc_Kn_c::ctrlBtk() { - if (mpMatAnm) { + if (mpMatAnm != NULL) { if (field_0xe30 != 0 && mBtkAnm.getBtkAnm()) { mpMatAnm->setNowOffsetX(cM_ssin(mJntAnm.getEyeAngleY()) * 0.2f); mpMatAnm->setNowOffsetY(cM_ssin(mJntAnm.getEyeAngleX()) * 0.2f); @@ -441,36 +451,39 @@ int daNpc_Kn_c::ctrlBtk() { /* 80A39558-80A395DC 00EC38 0084+00 1/1 0/0 0/0 .text setMtx__10daNpc_Kn_cFv */ void daNpc_Kn_c::setMtx() { - J3DModel* model = mpMorf[0]->getModel(); - // J3DModelData* data = model->getModelData(); // debug used this? - mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::ZXYrotM(mTargetAngle); - mDoMtx_stack_c::scaleM(scale); - model->setBaseTRMtx(mDoMtx_stack_c::get()); - model->setUserArea((u32)this); + J3DModel* model_p = mpModelMorf[0]->getModel(); + J3DModelData* mdlData_p = model_p->getModelData(); - if (field_0xdcc & 0x400) { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(mCurAngle); + mDoMtx_stack_c::scaleM(scale); + model_p->setBaseTRMtx(mDoMtx_stack_c::get()); + model_p->setUserArea((u32)this); + + if (mAnmFlags & ANM_PLAY_BCK) { mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame()); } - mpMorf[0]->modelCalc(); + mpModelMorf[0]->modelCalc(); } /* 80A395DC-80A39684 00ECBC 00A8+00 1/1 0/0 0/0 .text ctrlFaceMotion__10daNpc_Kn_cFv */ void daNpc_Kn_c::ctrlFaceMotion() { - int int_play; - f32 f32_play; - if (mMotionSeqMngr1.play(field_0xe28, &int_play, &f32_play)) { - setFaceMotionAnm(int_play, true); - if (f32_play < 0.0f) { - mpMorf[0]->setMorf(field_0xab4); - if (mpMorf[1] != NULL) { - mpMorf[1]->setMorf(field_0xab4); + int motionNo; + f32 morfFrm; + + if (mFaceMotionSeqMngr.play(mBckLoops, &motionNo, &morfFrm)) { + setFaceMotionAnm(motionNo, true); + + if (morfFrm < 0.0f) { + mpModelMorf[0]->setMorf(mExpressionMorfFrame); + if (mpModelMorf[1] != NULL) { + mpModelMorf[1]->setMorf(mExpressionMorfFrame); } } else { - mpMorf[0]->setMorf(f32_play); - if (mpMorf[1] != NULL) { - mpMorf[1]->setMorf(f32_play); + mpModelMorf[0]->setMorf(morfFrm); + if (mpModelMorf[1] != NULL) { + mpModelMorf[1]->setMorf(morfFrm); } } } @@ -478,22 +491,22 @@ void daNpc_Kn_c::ctrlFaceMotion() { /* 80A39684-80A39738 00ED64 00B4+00 1/1 0/0 0/0 .text ctrlMotion__10daNpc_Kn_cFv */ void daNpc_Kn_c::ctrlMotion() { - int p2; - f32 p3; + int motionNo; + f32 morfFrm; - if (mMotionSeqMngr2.play(field_0xe26, &p2, &p3)) { - int asdf = false; - if (p3 < -1.0f) { - asdf = true; + if (mMotionSeqMngr.play(mMorfLoops, &motionNo, &morfFrm)) { + BOOL restart = FALSE; + if (morfFrm < -1.0f) { + restart = TRUE; } - setMotionAnm(p2, p3 < 0.0f ? field_0xab8 : p3, asdf); + setMotionAnm(motionNo, morfFrm < 0.0f ? mMorfFrames : morfFrm, restart); - if (field_0xABC != 0) { - mpMorf[0]->setMorf(0.0f); + if (mCreating) { + mpModelMorf[0]->setMorf(0.0f); - if (mpMorf[1]) { - mpMorf[1]->setMorf(0.0f); + if (mpModelMorf[1]) { + mpModelMorf[1]->setMorf(0.0f); } } } @@ -501,38 +514,40 @@ void daNpc_Kn_c::ctrlMotion() { /* 80A39738-80A3989C 00EE18 0164+00 1/1 0/0 0/0 .text ctrlMsgAnm__10daNpc_Kn_cFPiPiP10fopAc_ac_ci */ -int daNpc_Kn_c::ctrlMsgAnm(int* param_0, int* param_1, fopAc_ac_c* param_2, int param_3) { - *param_0 = -1; - *param_1 = -1; +int daNpc_Kn_c::ctrlMsgAnm(int* o_faceAnmAttr_p, int* o_anmAttr_p, fopAc_ac_c* i_talkPartner_p, int param_3) { + *o_faceAnmAttr_p = -1; + *o_anmAttr_p = -1; + if (param_3 || eventInfo.checkCommandTalk() || mStaffId != -1) { - if (dComIfGp_event_getTalkPartner() == param_2) { + if (dComIfGp_event_getTalkPartner() == i_talkPartner_p) { msg_class* msg_p = dMsgObject_c::getActor(); - JUT_ASSERT(0x440, 0 != msg_p); + JUT_ASSERT(1088, 0 != msg_p); + if (msg_p->mode == 2 || msg_p->mode == 3) { - field_0xdd0 = -1; + mMsgId = fpcM_ERROR_PROCESS_ID_e; } else if (msg_p->mode == 6) { - if (msg_p->msg_idx != field_0xdd0) { - *param_0 = dComIfGp_getMesgFaceAnimeAttrInfo(); - *param_1 = dComIfGp_getMesgAnimeAttrInfo(); - field_0xdd0 = msg_p->msg_idx; + if (msg_p->msg_idx != mMsgId) { + *o_faceAnmAttr_p = dComIfGp_getMesgFaceAnimeAttrInfo(); + *o_anmAttr_p = dComIfGp_getMesgAnimeAttrInfo(); + mMsgId = msg_p->msg_idx; } if (dMsgObject_isMouthCheck()) { - field_0xdcc &= ~0x4000; + mAnmFlags &= ~ANM_FLAG_4000; } else { - field_0xdcc |= 0x4000; + mAnmFlags |= ANM_FLAG_4000; } field_0xddc = 20; } else { - if (field_0xdcc & 0x4000) { - field_0xdcc &= ~0x4000; + if (mAnmFlags & ANM_FLAG_4000) { + mAnmFlags &= ~ANM_FLAG_4000; } - field_0xdd0 = -1; + mMsgId = fpcM_ERROR_PROCESS_ID_e; } } else { - field_0xdd0 = -1; + mMsgId = fpcM_ERROR_PROCESS_ID_e; if (field_0xddc) { field_0xddc = 1; } @@ -548,49 +563,202 @@ int daNpc_Kn_c::ctrlMsgAnm(int* param_0, int* param_1, fopAc_ac_c* param_2, int /* 80A3989C-80A39BBC 00EF7C 0320+00 1/0 0/0 0/0 .text ctrlJoint__10daNpc_Kn_cFP8J3DJointP8J3DModel */ -int daNpc_Kn_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { - // NONMATCHING -} +int daNpc_Kn_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { + int joint_no = i_joint->getJntNo(); + cXyz pos; + csXyz angle; + mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no)); -bool asdf_func(char* str) { - if (0 == strcmp(str, "DEFAULT_GETITEM")) { - return true; + if (joint_no == getBackboneJointNo() || joint_no == getNeckJointNo() || joint_no == getHeadJointNo()) { + Mtx 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; + + mDoMtx_stack_c::ZXYrotS(mCurAngle.x, (mCurAngle.y + field_0xDBE.y), mCurAngle.z); + + if (joint_no == getNeckJointNo()) { + angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0); + mDoMtx_stack_c::ZXYrotM(angle); + } + + if (joint_no == getHeadJointNo()) { + angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0); + mDoMtx_stack_c::ZXYrotM(angle); + } + + mDoMtx_stack_c::inverse(); + Mtx inverse_mtx; + cMtx_copy(mDoMtx_stack_c::get(), inverse_mtx); + mDoMtx_stack_c::transS(pos); + mDoMtx_stack_c::ZXYrotM(mCurAngle.x, (mCurAngle.y + field_0xDBE.y), mCurAngle.z); + + if (joint_no == getBackboneJointNo()) { + angle.set(mJntAnm.getJntRadX2S(2), mJntAnm.getJntRadY2S(2), 0); + mDoMtx_stack_c::ZXYrotM(angle); + } + + if (joint_no == getNeckJointNo()) { + angle.set(mJntAnm.getJntRadX2S(1), mJntAnm.getJntRadY2S(1), 0); + mDoMtx_stack_c::ZXYrotM(angle); + } + + if (joint_no == getHeadJointNo()) { + angle.set(mJntAnm.getJntRadX2S(0), mJntAnm.getJntRadY2S(0), 0); + mDoMtx_stack_c::ZXYrotM(angle); + } + + mDoMtx_stack_c::concat(inverse_mtx); + mDoMtx_stack_c::concat(joint_mtx); } - return false; + afterJntAnm(joint_no); + i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get()); + cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + + if ((mAnmFlags & ANM_PLAY_BCK) && (checkChangeJoint(joint_no) || checkRemoveJoint(joint_no))) { + J3DAnmTransform* bck = mBckAnm.getBckAnm(); + mBckAnm.changeBckOnly(mpModelMorf[0]->getAnm()); + mpModelMorf[0]->changeAnm(bck); + } + + return 1; } /* 80A39BBC-80A39DBC 00F29C 0200+00 1/0 0/0 0/0 .text evtProc__10daNpc_Kn_cFv */ +// NONMATCHING - gameinfo load issues int daNpc_Kn_c::evtProc() { - // NONMATCHING + BOOL ret = FALSE; + + if (dComIfGp_event_runCheck() != 0) { + if (eventInfo.checkCommandTalk()) { + if (!checkChangeEvt()) { + evtTalk(); + } + ret = TRUE; + } else if (eventInfo.checkCommandDemoAccrpt() && dComIfGp_getEventManager().endCheck(mEvtId)) { + if (evtEndProc()) { + dComIfGp_event_reset(); + mEvtId = -1; + } + } else { + if (strcmp(dComIfGp_getEventManager().getRunEventName(), "DEFAULT_GETITEM") == 0 && mItemPartnerId != fpcM_ERROR_PROCESS_ID_e) { + dComIfGp_event_setTalkPartner(NULL); + dComIfGp_event_setItemPartnerId(mItemPartnerId); + mItemPartnerId = fpcM_ERROR_PROCESS_ID_e; + } + ret = evtCutProc(); + } + + int temp_r28 = field_0xddc; + int face_motion, motion; + if (ctrlMsgAnm(&face_motion, &motion, this, field_0xe34)) { + if (field_0xe2d != 0) { + mFaceMotionSeqMngr.setNo(face_motion, -1.0f, 1, 0); + mMotionSeqMngr.setNo(motion, -1.0f, 1, 0); + } + } else if (temp_r28 != 0 && field_0xe2d != 0) { + setAfterTalkMotion(); + } + } else { + if (mStaffId != -1) { + mMode = 1; + mStaffId = -1; + } + field_0xddc = 0; + field_0xe2d = 1; + } + + return ret; } /* 80A39DBC-80A39F84 00F49C 01C8+00 1/0 0/0 0/0 .text setFootPos__10daNpc_Kn_cFv */ void daNpc_Kn_c::setFootPos() { if (getFootLJointNo() >= 0) { - field_0xD88 = field_0xD70; - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getFootLJointNo())); - mDoMtx_stack_c::multVecZero(&field_0xd58); - field_0xD70 = field_0xd58 - current.pos; + mOldFootLOffset = mFootLOffset; + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getFootLJointNo())); + mDoMtx_stack_c::multVecZero(&mFootLPos); + mFootLOffset = mFootLPos - current.pos; } if (getFootRJointNo() >= 0) { - field_0xD94 = field_0xD7C; - mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getFootRJointNo())); - mDoMtx_stack_c::multVecZero(&field_0xD64); - field_0xD7C = field_0xD64 - current.pos; + mOldFootROffset = mFootROffset; + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getFootRJointNo())); + mDoMtx_stack_c::multVecZero(&mFootRPos); + mFootROffset = mFootRPos - current.pos; } - if (field_0xABC != 0) { - field_0xD88 = field_0xD70; - field_0xD94 = field_0xD7C; + if (mCreating) { + mOldFootLOffset = mFootLOffset; + mOldFootROffset = mFootROffset; } } /* 80A39F84-80A3A254 00F664 02D0+00 1/0 0/0 0/0 .text setFootPrtcl__10daNpc_Kn_cFP4cXyzf */ void daNpc_Kn_c::setFootPrtcl(cXyz* param_0, f32 param_1) { - // NONMATCHING + cXyz foot_l_pos(mFootLPos); + cXyz foot_r_pos(mFootRPos); + cXyz start; + cXyz end; + + start = mFootLPos; + end = start; + end.y -= param_1; + mLinChk.Set(&start, &end, this); + + u8 cross_l, foot_l_att; + u8 cross_r, foot_r_att; + cross_l = dComIfG_Bgsp().LineCross(&mLinChk); + if (cross_l) { + foot_l_pos.y = mLinChk.GetCross().y; + mFootLPolyAngle = fopAcM_getPolygonAngle(mLinChk, mCurAngle.y); + foot_l_att = dComIfG_Bgsp().GetPolyAtt0(mLinChk); + } else { + mFootLPolyAngle = 0; + } + + start = mFootRPos; + end = start; + end.y -= param_1; + mLinChk.Set(&start, &end, this); + + cross_r = dComIfG_Bgsp().LineCross(&mLinChk); + if (cross_r) { + foot_r_pos.y = mLinChk.GetCross().y; + mFootRPolyAngle = fopAcM_getPolygonAngle(mLinChk, mCurAngle.y); + foot_r_att = dComIfG_Bgsp().GetPolyAtt0(mLinChk); + } else { + mFootRPolyAngle = 0; + } + + field_0x9F4.setEffectTwo(&tevStr, ¤t.pos, 0, 0, NULL, + !mFootLOnGround && cross_l == true ? &foot_l_pos : NULL, + !mFootROnGround && cross_r == true ? &foot_r_pos : NULL, + &mCurAngle, param_0, fopAcM_GetRoomNo(this), 0.0f, speedF); + + if (!mFootLOnGround && cross_l == true) { + switch (foot_l_att) { + case 3: + break; + case 13: + dkWmark_c::setFootMark(&foot_l_pos, mCurAngle.y, 3); + break; + } + } + + if (!mFootROnGround && cross_r == true) { + switch (foot_r_att) { + case 3: + break; + case 13: + dkWmark_c::setFootMark(&foot_r_pos, mCurAngle.y, 3); + break; + } + } + + mFootLOnGround = cross_l; + mFootROnGround = cross_r; } /* 80A3A254-80A3A25C 00F934 0008+00 1/0 0/0 0/0 .text checkCullDraw__10daNpc_Kn_cFv */ @@ -600,9 +768,9 @@ bool daNpc_Kn_c::checkCullDraw() { /* 80A3A25C-80A3A2A8 00F93C 004C+00 1/0 0/0 0/0 .text twilight__10daNpc_Kn_cFv */ void daNpc_Kn_c::twilight() { - if (field_0xABD != 0) { + if (mTwilight) { attention_info.flags |= 0x400000; - field_0xe32 = 0; + mNoDraw = FALSE; attention_info.flags |= 0x800000; setHitodamaPrtcl(); } @@ -610,27 +778,26 @@ void daNpc_Kn_c::twilight() { /* 80A3A2A8-80A3A404 00F988 015C+00 1/0 0/0 0/0 .text evtOrder__10daNpc_Kn_cFv */ void daNpc_Kn_c::evtOrder() { - if (strlen(mpEventData[mEvtIdx].eventName) != 0) { - if (strlen(field_0x5B8[mpEventData[mEvtIdx].num])) { - eventInfo.setArchiveName(field_0x5B8[mpEventData[mEvtIdx].num]); + if (strlen(mpEventData[mEvtNo].eventName) != 0) { + if (strlen(mpArcNames[mpEventData[mEvtNo].num])) { + eventInfo.setArchiveName(mpArcNames[mpEventData[mEvtNo].num]); dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName()); } - field_0xe24 = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtIdx].eventName,0xff); - fopAcM_orderOtherEventId(this,field_0xe24,0xff,0xffff,6,1); - + mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtNo].eventName, 0xff); + fopAcM_orderOtherEventId(this, mEvtId, 0xff, 0xffff, 6, 1); + } else { u32 flag_check = attention_info.flags; - if (flag_check & 8 || flag_check & 2) { - eventInfo.onCondition(1); + eventInfo.onCondition(dEvtCnd_CANTALK_e); if (chkXYItems()) { - eventInfo.onCondition(32); + eventInfo.onCondition(dEvtCnd_CANTALKITEM_e); } - if (field_0xe38 != 0) { - fopAcM_orderSpeakEvent(this,0,0); + if (mSpeakEvent) { + fopAcM_orderSpeakEvent(this, 0, 0); } } } @@ -638,35 +805,133 @@ void daNpc_Kn_c::evtOrder() { /* 80A3A404-80A3A504 00FAE4 0100+00 1/1 0/0 0/0 .text evtChange__10daNpc_Kn_cFv */ void daNpc_Kn_c::evtChange() { - if (strlen(mpEventData[mEvtIdx].eventName) != 0) { - if (strlen(field_0x5B8[mpEventData[mEvtIdx].num])) { - eventInfo.setArchiveName(field_0x5B8[mpEventData[mEvtIdx].num]); + if (strlen(mpEventData[mEvtNo].eventName) != 0) { + if (strlen(mpArcNames[mpEventData[mEvtNo].num])) { + eventInfo.setArchiveName(mpArcNames[mpEventData[mEvtNo].num]); dComIfGp_getEventManager().setObjectArchive(eventInfo.getArchiveName()); } - field_0xe24 = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtIdx].eventName,0xff); + mEvtId = dComIfGp_getEventManager().getEventIdx(this, mpEventData[mEvtNo].eventName, 0xff); dComIfGp_getEvent().reset(this); - fopAcM_orderChangeEventId(this,field_0xe24,1,0xffff); + fopAcM_orderChangeEventId(this, mEvtId, 1, 0xffff); } } /* 80A3A504-80A3A568 00FBE4 0064+00 1/0 0/0 0/0 .text clrParam__10daNpc_Kn_cFv */ void daNpc_Kn_c::clrParam() { - field_0xDB2 = mTargetAngle; + field_0xDB2 = mCurAngle; mCutType = 0; - memset((void*)&mEvtIdx,0,(int)(void*)&field_0xe3c - (int)(void*)&mEvtIdx); // fake match? + memset((void*)&mEvtNo, 0, (int)(void*)&field_0xe3c - (int)(void*)&mEvtNo); // fake match? mJntAnm.clrDirectFlag(); } /* 80A3A568-80A3A7C0 00FC48 0258+00 2/2 0/0 0/0 .text setFaceMotionAnm__10daNpc_Kn_cFib */ -bool daNpc_Kn_c::setFaceMotionAnm(int param_0, bool param_1) { - // NONMATCHING +bool daNpc_Kn_c::setFaceMotionAnm(int i_idx, bool i_modify) { + J3DAnmTransform* bck = NULL; + J3DAnmTexPattern* btp = NULL; + mAnmFlags &= ~0x7C30; + + daNpcT_faceMotionAnmData_c anm_data = getFaceMotionAnm(mpFaceMotionAnmData[i_idx]); + + if (anm_data.mBckFileIdx != -1) { + bck = getTrnsfrmAnmP(mpArcNames[anm_data.mBckArcIdx], anm_data.mBckFileIdx); + } + + if (bck != NULL) { + if (setBckAnm(bck, 1.0f, anm_data.mBckAttr, 0, -1, i_modify)) { + mAnmFlags |= ANM_PAUSE_BCK | ANM_PLAY_BCK; + mBckLoops = 0; + } else { + bck = NULL; + } + } + + if (bck == NULL && anm_data.mBckFileIdx != -1) { + return false; + } + + if (anm_data.mBtpFileIdx != -1) { + btp = getTexPtrnAnmP(mpArcNames[anm_data.mBtpArcIdx], anm_data.mBtpFileIdx); + } + + if (btp != NULL) { + if (btp == mBtpAnm.getBtpAnm() && anm_data.field_0x18) { + mAnmFlags |= ANM_PLAY_BTP | ANM_PAUSE_TIMER_BTP; + } else if (setBtpAnm(btp, mpModelMorf[0]->getModel()->getModelData(), 1.0f, anm_data.mBtpAttr)) { + mAnmFlags |= ANM_PAUSE_BTP | ANM_PLAY_BTP; + if (anm_data.field_0x18) { + mAnmFlags |= ANM_PAUSE_TIMER_BTP; + } + } else { + btp = NULL; + } + } + + if (btp == NULL && anm_data.mBtpFileIdx != -1) { + return false; + } + + return afterSetFaceMotionAnm(i_idx, anm_data.mBckAttr, 0.0f, anm_data.mBtpAttr); } /* 80A3A7C0-80A3AA58 00FEA0 0298+00 2/2 0/0 0/0 .text setMotionAnm__10daNpc_Kn_cFifi */ -bool daNpc_Kn_c::setMotionAnm(int param_0, f32 param_1, int param_2) { - // NONMATCHING +bool daNpc_Kn_c::setMotionAnm(int i_idx, f32 i_morf, BOOL i_restart) { + J3DAnmTransformKey* bck = NULL; + J3DAnmTextureSRTKey* btk = NULL; + BOOL restarted = FALSE; + + mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BPK + | ANM_PLAY_MORF | ANM_PLAY_BTK | ANM_PLAY_BRK | ANM_PLAY_BPK); + + daNpcT_motionAnmData_c anm_data = getMotionAnm(mpMotionAnmData[i_idx]); + + if (anm_data.mBckFileIdx != -1) { + bck = getTrnsfrmKeyAnmP(mpArcNames[anm_data.mBckArcIdx], anm_data.mBckFileIdx); + } + + if (bck != NULL) { + if (i_restart && bck == mpModelMorf[0]->getAnm()) { + mAnmFlags |= ANM_PLAY_MORF; + mMorfLoops = 0; + restarted = TRUE; + } else if (setMcaMorfAnm(bck, 1.0f, i_morf, anm_data.mBckAttr, 0, -1)) { + field_0x15A8 = i_idx; + mAnmFlags |= ANM_PAUSE_MORF | ANM_PLAY_MORF; + mMorfLoops = 0; + } else { + bck = NULL; + } + } + + if (bck == NULL && anm_data.mBckFileIdx != -1) { + return false; + } + + field_0xe30 = 0; + field_0xe31 = 0; + + if (anm_data.mBtkFileIdx != -1) { + field_0xe30 = anm_data.field_0x18; + field_0xe31 = anm_data.field_0x1a; + btk = getTexSRTKeyAnmP(mpArcNames[anm_data.mBtkArcIdx], anm_data.mBtkFileIdx); + } + + if (btk != NULL) { + if (restarted) { + mAnmFlags |= ANM_PLAY_BTK; + } else if (setBtkAnm(btk, mpModelMorf[0]->getModel()->getModelData(), 1.0f, anm_data.mBtkAttr)) { + mAnmFlags |= ANM_PAUSE_BTK | ANM_PLAY_BTK; + } else { + btk = NULL; + } + } + + if (btk == NULL && anm_data.mBtkFileIdx != -1) { + return false; + } + + return afterSetMotionAnm(i_idx, anm_data.mBckAttr, i_morf, anm_data.mBtkAttr); } /* 80A3AA58-80A3AAF0 010138 0098+00 10/10 0/0 0/0 .text setPos__10daNpc_Kn_cF4cXyz */ @@ -674,6 +939,7 @@ void daNpc_Kn_c::setPos(cXyz i_pos) { i_pos.y += 500.0f; mGndChk.SetPos(&i_pos); i_pos.y = dComIfG_Bgsp().GroundCross(&mGndChk); + current.pos = i_pos; old.pos = current.pos; } @@ -682,135 +948,191 @@ void daNpc_Kn_c::setPos(cXyz i_pos) { void daNpc_Kn_c::setAngle(s16 i_angle) { current.angle.y = i_angle; shape_angle.y = current.angle.y; - mTargetAngle.y = current.angle.y; - field_0xDB2.y = mTargetAngle.y; + mCurAngle.y = current.angle.y; + field_0xDB2.y = mCurAngle.y; old.angle.y = current.angle.y; } /* 80A3AB18-80A3AC24 0101F8 010C+00 1/1 0/0 0/0 .text * chkActorInSight__10daNpc_Kn_cFP10fopAc_ac_cfs */ -int daNpc_Kn_c::chkActorInSight(fopAc_ac_c* actor, f32 arg1, s16 arg2) { - if (arg1 < 180.0f) { - s16 sVar1 = cM_deg2s(arg1); - cXyz sp34 = getAttnPos(actor); - cSGlobe cStack_48(attention_info.position - sp34); - cSAngle acStack_4c(cSAngle(cStack_48.U().Inv()) - arg2); - s16 sVar2 = acStack_4c.Val(); - if (sVar2 < 0) { - sVar2 = -sVar2; +BOOL daNpc_Kn_c::chkActorInSight(fopAc_ac_c* actor, f32 i_fovY, s16 i_angleY) { + if (i_fovY < 180.0f) { + s16 fov_s = cM_deg2s(i_fovY); + cXyz attn_pos = getAttnPos(actor); + cSGlobe globe(attention_info.position - attn_pos); + cSAngle angle_diff(cSAngle(globe.U().Inv()) - i_angleY); + s16 angle_diff_s = angle_diff.Val(); + if (angle_diff_s < 0) { + angle_diff_s = -angle_diff_s; } - return (sVar2 > sVar1) == 0; + return (angle_diff_s > fov_s) == FALSE; } - return 1; + return TRUE; } /* 80A3AC24-80A3ACD4 010304 00B0+00 1/1 0/0 0/0 .text chkPointInArea__10daNpc_Kn_cF4cXyz4cXyzfffs */ -int daNpc_Kn_c::chkPointInArea(cXyz param_0, cXyz param_1, f32 param_2, f32 param_3, - f32 param_4, s16 param_5) { - // NONMATCHING +BOOL daNpc_Kn_c::chkPointInArea(cXyz i_pos, cXyz i_center, f32 i_boundXZ, f32 i_boundY1, f32 i_boundY2, + s16 i_angle) { + cXyz bounds, center; + f32 min_y = i_boundY2; + f32 max_y = i_boundY1; + if (i_boundY1 < i_boundY2) { + min_y = i_boundY1; + max_y = i_boundY2; + } + + 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); } /* 80A3ACD4-80A3AD50 0103B4 007C+00 1/1 0/0 0/0 .text * chkPointInArea__10daNpc_Kn_cF4cXyz4cXyz4cXyzs */ -void daNpc_Kn_c::chkPointInArea(cXyz param_0, cXyz param_1, cXyz param_2, s16 param_3) { - // NONMATCHING +BOOL daNpc_Kn_c::chkPointInArea(cXyz i_pos, cXyz i_center, cXyz i_bounds, s16 i_angle) { + return daNpcT_chkPointInArea(i_pos, i_center, i_bounds, i_angle, TRUE); } /* 80A3AD50-80A3AF50 010430 0200+00 1/1 0/0 0/0 .text chkFindPlayer__10daNpc_Kn_cFis */ -int daNpc_Kn_c::chkFindPlayer(int arg0, s16 arg1) { +int daNpc_Kn_c::chkFindPlayer(BOOL i_release, s16 i_angleY) { cXyz attn_pos = getAttnPos(daPy_getPlayerActorClass()); - int dbg_r27 = (arg0 == 0) ? attention_info.distances[3] : attention_info.distances[1]; - f32 dist_max = (arg0 == 0) ? dComIfGp_getAttention()->getDistTable(dbg_r27).mDistMax : - dComIfGp_getAttention()->getDistTable(dbg_r27).mDistMaxRelease; - f32 dbg_f29 = -1.0f * dComIfGp_getAttention()->getDistTable(dbg_r27).mLowerY; - f32 dbg_f28 = -1.0f * dComIfGp_getAttention()->getDistTable(dbg_r27).mUpperY; - int mAngleSelect = dComIfGp_getAttention()->getDistTable(dbg_r27).mAngleSelect; - f32 dbg_f31 = 180.0f; + int dist_index = i_release == FALSE ? attention_info.distances[3] : attention_info.distances[1]; + f32 dist_max = i_release == FALSE ? dComIfGp_getAttention()->getDistTable(dist_index).mDistMax : + dComIfGp_getAttention()->getDistTable(dist_index).mDistMaxRelease; + f32 lower_y = -1.0f * dComIfGp_getAttention()->getDistTable(dist_index).mLowerY; + f32 upper_y = -1.0f * dComIfGp_getAttention()->getDistTable(dist_index).mUpperY; + int mAngleSelect = dComIfGp_getAttention()->getDistTable(dist_index).mAngleSelect; + + f32 fov = 180.0f; if (mAngleSelect & 8) { - dbg_f31 = 30.0f; + fov = 30.0f; } else if (mAngleSelect & 0x10) { - dbg_f31 = 45.0f; + fov = 45.0f; } else if (mAngleSelect & 0x20) { - dbg_f31 = 60.0f; + fov = 60.0f; } else if (mAngleSelect & 0x40) { - dbg_f31 = 90.0f; + fov = 90.0f; } else if (mAngleSelect & 0x80) { - dbg_f31 = 110.0f; + fov = 110.0f; } else if (mAngleSelect & 0x100) { - dbg_f31 = 135.0f; + fov = 135.0f; } - int pnt_chk = chkPointInArea(attn_pos, attention_info.position, dist_max, dbg_f29, dbg_f28, 0); - if (pnt_chk && chkActorInSight(daPy_getPlayerActorClass(), dbg_f31, arg1)) { - return 1; + int pnt_chk = chkPointInArea(attn_pos, attention_info.position, dist_max, lower_y, upper_y, 0); + if (pnt_chk && chkActorInSight(daPy_getPlayerActorClass(), fov, i_angleY)) { + return TRUE; } - return 0; + return FALSE; } /* 80A3AF64-80A3B000 010644 009C+00 1/1 0/0 0/0 .text srchPlayerActor__10daNpc_Kn_cFv */ BOOL daNpc_Kn_c::srchPlayerActor() { - // NONMATCHING -} - -/* 80A3B000-80A3B074 0106E0 0074+00 2/2 0/0 0/0 .text getAttnPos__10daNpc_Kn_cFP10fopAc_ac_c */ -cXyz daNpc_Kn_c::getAttnPos(fopAc_ac_c* param_0) { - cXyz pos(param_0->attention_info.position); - - if (fopAcM_GetName(param_0) == PROC_ALINK) { - f32 offset = static_cast(param_0)->getAttentionOffsetY(); - pos.y -= offset; - } - - return pos; -} - -/* 80A3B074-80A3B220 010754 01AC+00 1/1 0/0 0/0 .text turn__10daNpc_Kn_cFsii */ -BOOL daNpc_Kn_c::turn(s16 arg0, int arg1, int arg2) { - if (field_0xe00 == 0) { - field_0xe04 = fabsf(cM_sht2d((s16)(arg0 - field_0xdfa))); - field_0xe04 = (field_0xe04 / 180.0f) * arg1; - field_0xe04 = (int) field_0xe04 + 1; - if (field_0xe04 < 8.0f) { - field_0xe04 = 8.0f; + if (mActorMngr1.getActorP() != NULL) { + if (!chkFindPlayer(TRUE, mCurAngle.y)) { + mActorMngr1.remove(); + } + } else { + if (chkFindPlayer(FALSE, mCurAngle.y)) { + mActorMngr1.entry(daPy_getPlayerActorClass()); } } - s16 sVar1 = field_0xdfa; - int o_arg = arg0; - if (arg2 == 0) { - arg2 = ((s16)(arg0 - field_0xdfa) >= 0) ? 1 : -1; + return mActorMngr1.getActorP() != NULL; +} + +/* 80A3B000-80A3B074 0106E0 0074+00 2/2 0/0 0/0 .text getAttnPos__10daNpc_Kn_cFP10fopAc_ac_c */ +cXyz daNpc_Kn_c::getAttnPos(fopAc_ac_c* i_actor) { + cXyz attn_pos(i_actor->attention_info.position); + + if (fopAcM_GetName(i_actor) == PROC_ALINK) { + f32 offset = static_cast(i_actor)->getAttentionOffsetY(); + attn_pos.y -= offset; } - int dbg_r30 = (u16) (o_arg - sVar1); - if (arg2 == -1) { - dbg_r30 = -(u16) (0xFFFF - dbg_r30); + return attn_pos; +} + +/* 80A3B074-80A3B220 010754 01AC+00 1/1 0/0 0/0 .text turn__10daNpc_Kn_cFsii */ +BOOL daNpc_Kn_c::turn(s16 i_angle, int i_count, int i_direction) { + if (mTurnAmount == 0) { + mTurnCount = fabsf(cM_sht2d((s16)(i_angle - mStartAngle))); + mTurnCount = (mTurnCount / 180.0f) * i_count; + mTurnCount = (int)mTurnCount + 1; + if (mTurnCount < 8.0f) { + mTurnCount = 8.0f; + } } - int offset = dbg_r30 * cM_ssin((s16) field_0xe00); - field_0xe00 += (s16) (16384.0f / field_0xe04); - if ((u16)field_0xe00 < 0x4000) { - mTargetAngle.y = field_0xdfa + offset; + s16 sVar1 = mStartAngle; + int o_arg = i_angle; + if (i_direction == 0) { + i_direction = ((s16)(i_angle - mStartAngle) >= 0) ? 1 : -1; + } + + int angle_diff = (u16)(o_arg - sVar1); + if (i_direction == -1) { + angle_diff = -(u16)(0xFFFF - angle_diff); + } + + int offset = angle_diff * cM_ssin((s16)mTurnAmount); + mTurnAmount += (s16)(16384.0f / mTurnCount); + + if ((u16)mTurnAmount < 0x4000) { + mCurAngle.y = mStartAngle + offset; } else { - mTargetAngle.y = arg0; - field_0xe00 = 0x4000; + mCurAngle.y = i_angle; + mTurnAmount = 0x4000; } - return arg0 == mTargetAngle.y; + return i_angle == mCurAngle.y; } /* 80A3B220-80A3B3E8 010900 01C8+00 19/19 0/0 0/0 .text step__10daNpc_Kn_cFsiiii */ -s32 daNpc_Kn_c::step(s16 param_0, int param_1, int param_2, int param_3, int param_4) { - // NONMATCHING +int daNpc_Kn_c::step(s16 i_angle, int i_faceMotion, int i_motion, int i_turnCount, + int i_turnDirection) { + if (mStepMode >= 2 && i_angle != mCurAngle.y) { + mStepMode = 0; + } + + if (mStepMode == 0) { + s16 angle_diff = i_angle - mCurAngle.y; + if (angle_diff == 0) { + mStepMode = 2; + } else { + mTargetAngle = i_angle; + mStartAngle = mCurAngle.y; + mTurnAmount = 0; + if ((int)fabsf(cM_sht2d(angle_diff)) >= 20) { + mFaceMotionSeqMngr.setNo(i_faceMotion, -1.0f, TRUE, 0); + mMotionSeqMngr.setNo(i_motion, -1.0f, TRUE, 0); + } + current.angle.y = mCurAngle.y; + shape_angle.y = current.angle.y; + mStepMode++; + } + } else if (mStepMode == 1) { + if (turn(mTargetAngle, i_turnCount, i_turnDirection)) { + current.angle.y = mCurAngle.y; + shape_angle.y = current.angle.y; + field_0xDB2.y = current.angle.y; + mStepMode++; + } else { + current.angle.y = mCurAngle.y; + shape_angle.y = current.angle.y; + } + } + + return mStepMode > 1; } /* 80A3B3E8-80A3B448 010AC8 0060+00 20/20 0/0 0/0 .text initTalk__10daNpc_Kn_cFiPP10fopAc_ac_c */ -s32 daNpc_Kn_c::initTalk(int param_0, fopAc_ac_c** param_1) { - mFlow.init(this,param_0, 0, param_1); +int daNpc_Kn_c::initTalk(int i_flowID, fopAc_ac_c** i_partnerList_p) { + mFlow.init(this, i_flowID, 0, i_partnerList_p); speedF = 0.0f; speed.setall(0.0f); return 1; @@ -818,49 +1140,89 @@ s32 daNpc_Kn_c::initTalk(int param_0, fopAc_ac_c** param_1) { /* 80A3B448-80A3B5EC 010B28 01A4+00 20/20 0/0 0/0 .text talkProc__10daNpc_Kn_cFPiiPP10fopAc_ac_ci */ -BOOL daNpc_Kn_c::talkProc(int* param_0, int param_1, fopAc_ac_c** param_2, int param_3) { - // NONMATCHING +BOOL daNpc_Kn_c::talkProc(int* param_0, int param_1, fopAc_ac_c** i_partnerList_p, int param_3) { + BOOL ret = FALSE; + + if (dMsgObject_isMsgSendControl()) { + if (param_1) { + dMsgObject_offMsgSendControl(); + } + } else if (mFlow.doFlow(this, i_partnerList_p, 0)) { + ret = TRUE; + } else { + if (mFlow.getMsg() != NULL) { + switch (mFlow.getMsg()->mode) { + case 2: + case 6: + if (param_0 != NULL) { + for (int i = 0; param_0[i] > 0; i++) { + if (param_0[i] == mFlow.getMsgNo()) { + ret = TRUE; + break; + } + } + } + break; + case 17: + if (param_3) { + ret = TRUE; + } + break; + } + } + + int tmp1, face_motion, motion, tmp2; + if (mFlow.checkEventRender(&tmp1, &motion, &face_motion, &tmp2)) { + mFaceMotionSeqMngr.setNo(face_motion, -1.0f, FALSE, 0); + mMotionSeqMngr.setNo(motion, -1.0f, FALSE, 0); + } + } + + return ret; } // FIXME: dummy functions to get rodata to align. -f64 dummy_lits_00(int sel) { +static f64 dummy_lits_00(int sel) { switch (sel) { - case 0: return 0.5; - case 1: return 3.0; - default: return 0.0; + case 0: + return 0.5; + case 1: + return 3.0; + default: + return 0.0; } } -f32 dummy_lits_01(int sel) { + +static f32 dummy_lits_01(int sel) { switch (sel) { - case 0: return 0.85f; - case 1: return 6.0f; - default: return 1e9f; + case 0: + return 0.85f; + case 1: + return 6.0f; + default: + return 1e9f; } } /* 80A3B5EC-80A3B708 010CCC 011C+00 1/1 0/0 0/0 .text setHitodamaPrtcl__10daNpc_Kn_cFv */ void daNpc_Kn_c::setHitodamaPrtcl() { - // nonmatching - static u16 const id[2] = { - 0x8497, - 0x8498, - }; cXyz pos(eyePos); for (int i = 0; i < 2; i++) { - tevStr.mLightObj.mLightObj.dummy[i] = dComIfGp_particle_set(tevStr.mLightObj.mLightObj.dummy[i], - id[i], &pos, &mTargetAngle, 0); - JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(tevStr.mLightObj.mLightObj.dummy[i]); - if (emitter) { + static const u16 id[2] = {0x8497,0x8498}; + mHitodamaPrtclKey[i] = dComIfGp_particle_set(mHitodamaPrtclKey[i], id[i], &pos, &mCurAngle, 0); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHitodamaPrtclKey[i]); + if (emitter != NULL) { u8 alpha; - if (dComIfGs_wolfeye_effect_check() == 0) { - alpha = 0xff; + if (dComIfGs_wolfeye_effect_check() == FALSE) { + alpha = 0xFF; } else { alpha = 0; } - emitter->setGlobalTranslation(pos.x,pos.y,pos.z); + emitter->setGlobalTranslation(pos.x, pos.y, pos.z); emitter->setGlobalAlpha(alpha); } } @@ -868,9 +1230,7 @@ void daNpc_Kn_c::setHitodamaPrtcl() { /* 80A3B708-80A3B720 010DE8 0018+00 1/0 0/0 0/0 .text decTmr__10daNpc_Kn_cFv */ void daNpc_Kn_c::decTmr() { - if (mTimer == 0) { - return; + if (mTimer != 0) { + mTimer--; } - - mTimer--; } diff --git a/src/d/actor/d_a_npc_kn_teach01.inc b/src/d/actor/d_a_npc_kn_teach01.inc new file mode 100644 index 00000000000..06c41071479 --- /dev/null +++ b/src/d/actor/d_a_npc_kn_teach01.inc @@ -0,0 +1,747 @@ +#include "d/actor/d_a_npc_kn.h" + +/* 80A3C998-80A3CB14 012078 017C+00 1/1 0/0 0/0 .text setParamTeach01__10daNpc_Kn_cFv */ +u32 daNpc_Kn_c::setParamTeach01() { + s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance; + s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle; + s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance; + s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle; + + switch (mActionMode) { + case 0: + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + return 0; + case 1: + if (field_0x170c != 0) { + return 0; + } + case 2: + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width); + mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); + return 4; + case 3: + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + mAcchCir.SetWallR(135.0f); + mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); + return 4; + } + + return 10; +} + +/* 80A3CB14-80A3CBFC 0121F4 00E8+00 1/1 0/0 0/0 .text setCollisionTeach01__10daNpc_Kn_cFv + */ +void daNpc_Kn_c::setCollisionTeach01() { + switch (mActionMode) { + case 0: + break; + case 1: + mCylCc.SetTgType(-1); + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCylCc.SetTgSPrm(0x13); + mCylCc.OnTgNoConHit(); + + if (field_0x170c == 0) { + mCylCc.OnTgShield(); + } else { + mCylCc.OffTgShield(); + } + break; + case 2: + mCylCc.SetTgType(-1); + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); + mCylCc.SetTgSPrm(0x13); + mCylCc.OffTgShield(); + mCylCc.OffTgNoAtHitInfSet(); + mCylCc.OnTgNoConHit(); + mCylCc.OnCoSetBit(); + break; + case 3: + mCylCc.OffTgSetBit(); + mCylCc.OffCoSetBit(); + break; + } +} + +/* 80A3CBFC-80A3CCC0 0122DC 00C4+00 1/1 0/0 0/0 .text teach01_selectAction__10daNpc_Kn_cFv */ +void daNpc_Kn_c::teach01_selectAction() { + switch (mActionMode) { + case 0: + mpTeachAction = &daNpc_Kn_c::teach01_start; + return; + case 1: + mpTeachAction = &daNpc_Kn_c::teach01_attackWait; + return; + case 2: + mpTeachAction = &daNpc_Kn_c::teach01_swordAttackWait; + return; + case 3: + mpTeachAction = &daNpc_Kn_c::teach01_swordFinishWait; + return; + } + + mpTeachAction = &daNpc_Kn_c::wait; + return; +} + +/* 80A3CCC0-80A3CDFC 0123A0 013C+00 1/0 0/0 0/0 .text teach01_start__10daNpc_Kn_cFPv */ +int daNpc_Kn_c::teach01_start(void* param_0) { + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + mMode = 2; + case 2: + mEvtNo = 5; + field_0xe39 = 1; + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + case 3: + default: + return 1; + } +} + +/* 80A3CDFC-80A3CF78 0124DC 017C+00 1/0 0/0 0/0 .text teach01_attackWait__10daNpc_Kn_cFPv + */ +int daNpc_Kn_c::teach01_attackWait(void* param_0) { + switch (mMode) { + case 0: + case 1: + mMotionSeqMngr.setNo(9, -1.0f, 1, 0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + mMode = 2; + case 2: + if (!ctrlWarp()) { + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + if (mCylCc.ChkTgHit()) { + mEvtNo = 6; + field_0x16f4.set(1.0f, 1.0f, 1.0f); + field_0x170c = 0; + field_0x170d = 0; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); + } + } + case 3: + default: + return 1; + } +} + +/* 80A3CF78-80A3D32C 012658 03B4+00 1/0 0/0 0/0 .text teach01_swordAttackWait__10daNpc_Kn_cFPv */ +int daNpc_Kn_c::teach01_swordAttackWait(void* param_0) { + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; + mTargetPos = current.pos; + field_0x15bc = 0; + field_0x15d0 = cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); + speedF = 0.0f; + speed.zero(); + mMode = 2; + case 2: + calcSlip(); + mCcStts.Move(); + + if (mCylCc.ChkTgHit()) { + int cut_type = daPy_getPlayerActorClass()->getCutType(); + if (cut_type == daPy_py_c::CUT_TYPE_JUMP || + cut_type == daPy_py_c::CUT_TYPE_TURN_RIGHT || + cut_type == daPy_py_c::CUT_TYPE_TURN_LEFT || + daPy_getPlayerActorClass()->getCutCount() >= 4) + { + mActionMode = 3; + setAngle(fopAcM_searchPlayerAngleY(this)); + speedF = -daNpc_Kn_Param_c::m.attack_disappear_speed_h; + speed.y = daNpc_Kn_Param_c::m.attack_disappear_speed_v; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1f); + } else { + fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc(); + s16 angle = cLib_targetAngleY(&aTgHitActor_p->current.pos, ¤t.pos); + cXyz pos(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance); + mDoMtx_stack_c::YrotS(angle); + mDoMtx_stack_c::multVec(&pos, &mTargetPos); + mTargetPos += current.pos; + field_0x15bc = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1f, -1.0f, 1, 0); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1e); + } + } else { + if (cLib_calcTimer(&field_0xdec) == 0 || checkCollisionSword()) { + mTargetPos = current.pos; + + int is_lockon = FALSE; + if (dComIfGp_getAttention()->LockonTruth()) { + is_lockon = TRUE; + } + + checkCollisionSword() ? mEvtNo = 4 : mEvtNo = 1; + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + + is_lockon ? mFlowNodeNo = 0x2da : mFlowNodeNo = 0x2db; + } else { + calcSwordAttackMove(1); + } + } + case 3: + default: + return 1; + } +} + +/* 80A3D32C-80A3D6D8 012A0C 03AC+00 1/0 0/0 0/0 .text teach01_swordFinishWait__10daNpc_Kn_cFPv */ +int daNpc_Kn_c::teach01_swordFinishWait(void* param_0) { + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x12, -1.0f, 0, 0); + mSound.startCreatureVoice(Z2SE_KN_V_DAMAGE_L, -1); + mJntAnm.lookNone(0); + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; + mMode = 2; + case 2: { + mTargetPos = current.pos; + int no = mMotionSeqMngr.getNo(); + if (no == 0x12) { + if (speed.y <= 0.0f && mAcch.ChkGroundHit()) { + speedF = 0.0f; + speed.zero(); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x13, -1.0f, 0, 0); + setLandingPrtcl(); + } + } else if (no == 0x13) { + if (mMotionSeqMngr.getStepNo() == 0) { + if (mpModelMorf[0]->getFrame() >= 13.0f && mpModelMorf[0]->getFrame() < 14.0f) { + setLandingPrtcl(); + } + } else { + if (!checkDownFlg()) { + cXyz pos(10.0f, 0.0f, 0.0f); + onDownFlg(); + + u8 backbone_joint = getBackboneJointNo(); + J3DModel* model = mpModelMorf[0]->getModel(); + mDoMtx_stack_c::copy(model->getAnmMtx(backbone_joint)); + mDoMtx_stack_c::multVec(&pos, &field_0x15c0); + setDownPos(&field_0x15c0); + } else if (checkCutDownHitFlg()) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x14, -1.0f, 0, 0); + + if (mType == 0) { + mEvtNo = 7; + } else if (mType == 1) { + mEvtNo = 9; + } + + mSound.startCollisionSE(Z2SE_HIT_SWORD_STAB, 0x1e); + break; + } + } + } + + if (cLib_calcTimer(&field_0xdec) == 0) { + if (daPy_getPlayerActorClass()->getCutType() != daPy_py_c::CUT_TYPE_DOWN) { + offDownFlg(); + mTargetPos = current.pos; + mEvtNo = 3; + mFlowNodeNo = 0x2dc; + mActionMode = 2; + } + } + break; + } + case 3: + default: + break; + } + + return 1; +} + +/* 80A3D6D8-80A3DCEC 012DB8 0614+00 3/3 0/0 0/0 .text ctrlWarp__10daNpc_Kn_cFv */ +int daNpc_Kn_c::ctrlWarp() { + int sp28 = 0; + + switch (field_0x170c) { + case 0: { + cXyz spEC(daPy_getPlayerActorClass()->current.pos); + + bool sp8 = (daPy_getPlayerActorClass()->current.pos - current.pos).absXZ() > daNpc_Kn_Param_c::m.warp_distance; + if (sp8) { + sp28 = 1; + cXyz spE0(0.0f, 0.0f, 600.0f); + mDoMtx_stack_c::YrotS(daPy_getPlayerActorClass()->shape_angle.y); + mDoMtx_stack_c::multVec(&spE0, &spE0); + spE0 += spEC; + spE0.y += 1000.0f; + + for (int i = 0; i < 5; i++) { + static Vec l_checkOffset[] = { + {0.0f, 0.0f, 0.0f}, + {50.0f, 0.0f, 0.0f}, + {-50.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, 50.0f}, + {0.0f, 0.0f, -50.0f}, + }; + + cXyz spD4 = spE0 + l_checkOffset[i]; + if (!fopAcM_gc_c::gndCheck(&spD4) || !(fopAcM_gc_c::getGroundY() >= current.pos.y - 100.0f)) { + sp28 = 0; + break; + } + } + + if (sp28 == 1) { + spE0.y = fopAcM_gc_c::getGroundY(); + field_0x1700 = spE0; + field_0x170c = 1; + field_0x170d = 0; + field_0x16f4.set(1.0f, 1.0f, 1.0f); + } + } + break; + } + case 1: + sp28 = 1; + field_0x170d++; + + static Vec l_WarpInScaleTable[] = { + {1.0f, 1.0f, 1.0f}, + {1.594f, 0.824f, 1.67f}, + {1.91f, 0.72f, 1.79f}, + {1.594f, 0.81699997f, 1.67f}, + {0.4f, 1.5f, 1.0f}, + {0.0f, 1.3f, 0.0f}, + {0.0f, 1.0f, 0.0f}, + {0.0f, 0.0f, 0.0f}, + }; + + if (field_0x170d < 15) { + for (int i = 0; i < 7; i++) { + static u8 l_warpInTimeTable[] = {1, 4, 8, 11, 13, 14, 15, 16}; + + int sp1C = l_warpInTimeTable[i]; + int sp18 = l_warpInTimeTable[i + 1]; + if (sp1C <= field_0x170d && sp18 > field_0x170d) { + cXyz spC8(l_WarpInScaleTable[i]); + cXyz spBC(l_WarpInScaleTable[i + 1]); + + field_0x16f4 = spC8 + (((spBC - spC8) * (field_0x170d - sp1C)) / (sp18 - sp1C)); + } + } + } else { + field_0x16f4 = l_WarpInScaleTable[7]; + field_0x170c = 2; + field_0x170d = 0; + } + break; + case 2: + sp28 = 1; + field_0x170d++; + if (field_0x170d >= 5) { + field_0x170d = 0; + field_0x170c = 3; + setPos(field_0x1700); + setAngle(fopAcM_searchPlayerAngleY(this)); + } + break; + case 3: + sp28 = 1; + field_0x170d++; + + static Vec l_WarpOutScaleTable[] = { + {0.0f, 1.0f, 0.0f}, + {0.0f, 1.32f, 0.0f}, + {0.594f, 1.5f, 1.0f}, + {1.0f, 1.0f, 1.0f}, + }; + + if (field_0x170d < 6) { + for (int i = 0; i < 3; i++) { + static u8 l_warpOutTimeTable[] = {1, 3, 5, 6}; + + int sp10 = l_warpOutTimeTable[i]; + int spC = l_warpOutTimeTable[i + 1]; + if (sp10 <= field_0x170d && spC > field_0x170d) { + cXyz spB0(l_WarpOutScaleTable[i]); + cXyz spA4(l_WarpOutScaleTable[i + 1]); + + field_0x16f4 = spB0 + (((spA4 - spB0) * (field_0x170d - sp10)) / (spC - sp10)); + } + } + } else { + field_0x16f4 = l_WarpOutScaleTable[3]; + field_0x170c = 0; + field_0x170d = 0; + } + break; + } + + return sp28; +} + +/* 80A3DCEC-80A3DEC4 0133CC 01D8+00 1/0 0/0 0/0 .text ECut_firstEncount__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_firstEncount(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + mJntAnm.lookPlayer(0); + mActionMode = 1; + break; + case 10: + daPy_getPlayerActorClass()->changeDemoMoveAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); + field_0xdec = 52; + break; + case 20: + break; + case 30: + mMotionSeqMngr.setNo(9, -1.0f, 1, 0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + break; + } + } + + switch (prm) { + case 0: + rt = 1; + break; + case 10: + if (cLib_calcTimer(&field_0xdec) == 0) { + fopAc_ac_c* parent_p = (fopAc_ac_c*)fpcM_SearchByID(parentActorID); + if (parent_p != NULL) { + fopAcM_delete(parent_p); + } + + field_0xe2c = 0; + rt = 1; + } + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A3DEC4-80A3E550 0135A4 068C+00 1/0 0/0 0/0 .text ECut_attackFailed__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_attackFailed(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + daNpcT_offTmpBit(0xC); + daNpcT_offTmpBit(0xD); + + mMotionSeqMngr.setNo(0x1A, -1.0f, 1, 0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + + mJntAnm.lookPlayer(0); + field_0xdec = 12; + break; + case 10: + break; + case 20: + initTalk(0x2D6, NULL); + break; + case 25: + initTalk(0x2D6, NULL); + break; + case 30: + initTalk(0x2D6, NULL); + break; + case 40: + initTalk(0x2D6, NULL); + break; + case 50: { + Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0); + current.pos = home.pos; + old.pos = home.pos; + setAngle(home.angle.y); + + cXyz sp18(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp18, &sp18); + + cXyz spC(sp18); + spC.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&spC)) { + sp18.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp18, fopAcM_searchPlayerAngleY(this) + 0x8000, 0); + daPy_getPlayerActorClass()->onTraningCutDown(); + break; + } + case 60: + initTalk(0x2D8, NULL); + break; + case 70: + initTalk(0x2D9, NULL); + break; + case 80: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(24, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + } + } + + switch (prm) { + case 0: + if (cLib_calcTimer(&field_0xdec) == 0 && daPy_getPlayerActorClass()->checkPlayerFly()) { + rt = 1; + daPy_getPlayerActorClass()->onLargeDamageUpStop(); + } else if (field_0xdec == 1) { + daPy_getPlayerActorClass()->changeDemoMoveAngle(fopAcM_searchPlayerAngleY(this) + 0x8000); + daPy_getPlayerActorClass()->setThrowDamage(fopAcM_searchPlayerAngleY(this), 20.0f, 30.0f, 0, 1, 0); + } + + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 10: + if (!daPy_getPlayerActorClass()->checkPlayerFly()) { + rt = 1; + } + + daPy_getPlayerActorClass()->onLargeDamageUpStop(); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 20: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } else { + daPy_getPlayerActorClass()->onLargeDamageUpStop(); + } + break; + case 40: + case 30: + case 25: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + setAngle(fopAcM_searchPlayerAngleY(this)); + rt = 1; + break; + case 70: + case 60: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 80: + if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + mActionMode = 2; + } + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A3E550-80A3EB84 013C30 0634+00 3/0 0/0 0/0 .text ECut_firstSkillGet__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_firstSkillGet(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + daNpcT_offTmpBit(0xC); + daNpcT_offTmpBit(0xD); + daNpcT_offTmpBit(0xE); + daNpcT_offTmpBit(0xF); + field_0xdec = 30; + break; + case 2: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x15, -1.0f, 0, 0); + break; + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x16, -1.0f, 0, 0); + break; + case 6: + mJntAnm.lookNone(0); + break; + case 10: { + mStepMode = 2; + + cXyz sp1C(0.0f, 0.0f, 500.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos, &home.pos)); + mDoMtx_stack_c::multVec(&sp1C, &sp1C); + + cXyz sp10(sp1C); + sp10.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp10)) { + sp1C.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp1C, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); + initTalk(0x2DD, NULL); + break; + } + case 12: + setAngle(fopAcM_searchPlayerAngleY(this)); + break; + case 15: + Z2GetAudioMgr()->bgmStreamPrepare(0x2000038); + Z2GetAudioMgr()->bgmStreamPlay(); + break; + case 20: + initTalk(0x2DD, NULL); + break; + case 30: + initTalk(0x2DD, NULL); + break; + case 40: + initTalk(0x2DD, NULL); + break; + case 50: + initTalk(0x2DD, NULL); + break; + case 60: + initTalk(0x2DD, NULL); + break; + } + } + + switch (prm) { + case 0: + if (cLib_calcTimer(&field_0xdec) == 0) { + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x15 && mMotionSeqMngr.getStepNo() > 0 && mMorfLoops != 0) { + rt = 1; + } + break; + case 4: + if (mMotionSeqMngr.getNo() == 0x16 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + if (field_0x170e == 0) { + field_0x170e = 1; + Z2GetAudioMgr()->bgmStop(0x32, 0); + } + } + break; + case 20: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 30: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 40: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 60: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + default: + rt = 1; + break; + } + + return rt; +} diff --git a/src/d/actor/d_a_npc_kn_teach02.inc b/src/d/actor/d_a_npc_kn_teach02.inc new file mode 100644 index 00000000000..a7e93732bee --- /dev/null +++ b/src/d/actor/d_a_npc_kn_teach02.inc @@ -0,0 +1,645 @@ +#include "d/actor/d_a_npc_kn.h" +#include "d/actor/d_a_obj_knBullet.h" + +/* 80A3EB84-80A3EE38 014264 02B4+00 1/1 0/0 0/0 .text setParamTeach02__10daNpc_Kn_cFv */ +u32 daNpc_Kn_c::setParamTeach02() { + s16 talk_distance = daNpc_Kn_Param_c::m.common.talk_distance; + s16 talk_angle = daNpc_Kn_Param_c::m.common.talk_angle; + s16 attention_distance = daNpc_Kn_Param_c::m.common.attention_distance; + s16 attention_angle = daNpc_Kn_Param_c::m.common.attention_angle; + f32 radius = daNpc_Kn_Param_c::m.common.attention_offset; + f32 height = daNpc_Kn_Param_c::m.common.height; + + switch (mActionMode) { + case 7: + case 6: + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + return 4; + case 5: { + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + cXyz pos; + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(getBackboneJointNo())); + mDoMtx_stack_c::multVecZero(&pos); + + f32 absxz = (daPy_getPlayerActorClass()->current.pos - pos).absXZ(); + + if (absxz < 255.0f) { + return 0x200004; + } else { + return 4; + } + } + case 4: + attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); + attention_info.distances[fopAc_attn_BATTLE_e] = 0xe4; + attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); + mAcchCir.SetWallR(daNpc_Kn_Param_c::m.common.width); + mAcchCir.SetWallH(daNpc_Kn_Param_c::m.common.knee_length); + return 0; + } + + return 10; +} + +/* 80A3EE38-80A3EF1C 014518 00E4+00 1/1 0/0 0/0 .text setCollisionTeach02__10daNpc_Kn_cFv + */ +void daNpc_Kn_c::setCollisionTeach02() { + switch (mActionMode) { + case 4: + break; + case 5: + mCylCc.SetTgType(-1); + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCylCc.SetTgSPrm(0x13); + mCylCc.OnTgShield(); + mCylCc.OffTgNoAtHitInfSet(); + mCylCc.OnTgNoConHit(); + break; + case 6: + mCylCc.SetTgType(-1); + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_1); + mCylCc.SetTgSPrm(0x13); + mCylCc.OffTgShield(); + mCylCc.OffTgNoAtHitInfSet(); + mCylCc.OnTgNoConHit(); + break; + case 7: + mCylCc.SetTgType(-1); + mCylCc.SetTgHitMark(CcG_Tg_UNK_MARK_2); + mCylCc.SetTgSPrm(0x13); + mCylCc.OffTgShield(); + mCylCc.OnTgNoConHit(); + break; + } +} + +/* 80A3EF1C-80A3EFE0 0145FC 00C4+00 1/1 0/0 0/0 .text teach02_selectAction__10daNpc_Kn_cFv */ +void daNpc_Kn_c::teach02_selectAction() { + switch (mActionMode) { + case 4: + mpTeachAction = &daNpc_Kn_c::teach02_start; + return; + case 5: + mpTeachAction = &daNpc_Kn_c::teach02_shieldBashWait; + return; + case 6: + mpTeachAction = &daNpc_Kn_c::teach02_finishWait; + return; + case 7: + mpTeachAction = &daNpc_Kn_c::teach02_shieldReflectWait; + return; + } + + mpTeachAction = &daNpc_Kn_c::wait; + return; +} + +/* 80A3EFE0-80A3F358 0146C0 0378+00 1/0 0/0 0/0 .text teach02_shieldBashWait__10daNpc_Kn_cFPv */ +int daNpc_Kn_c::teach02_shieldBashWait(void* param_0) { + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(9, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + field_0xdec = daNpc_Kn_Param_c::m.attack_wait_time; + mTargetPos = current.pos; + field_0x15bc = 0; + field_0x15d0 = + cLib_getRndValue(daNpc_Kn_Param_c::m.attack_start_min_time, daNpc_Kn_Param_c::m.attack_start_time_range); + speedF = 0.0f; + speed.zero(); + mMode = 2; + case 2: + mCcStts.Move(); + + if (mCylCc.ChkTgShieldHit()) { + u8 cut_type = daPy_getPlayerActorClass()->getCutType(); + + if (cut_type == daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + s16 angle = cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, + &attention_info.position); + cXyz pos(0.0f, 0.0f, daNpc_Kn_Param_c::m.small_slide_distance); + + mDoMtx_stack_c::YrotS(angle); + mDoMtx_stack_c::multVec(&pos, &mTargetPos); + mTargetPos += current.pos; + field_0x15bc = 1; + mCylCc.ClrTgHit(); + mActionMode = 6; + mSound.startCollisionSE(Z2SE_HIT_SHIELD_ATTACK, 0x28); + break; + } + } + + if (!cLib_calcTimer(&field_0xdec) || checkCollisionSword()) { + BOOL is_lockon = FALSE; + if (dComIfGp_getAttention()->LockonTruth()) { + is_lockon = TRUE; + } + + if (checkCollisionSword()) { + mEvtNo = 4; + } else { + mEvtNo = 1; + } + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + + if (is_lockon) { + mFlowNodeNo = 0x2c0; + } else { + mFlowNodeNo = 0x2bf; + } + } else { + if (mCylCc.ChkTgHit()) { + if (!mCylCc.GetTgHitObj()->ChkAtType(0x10)) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0x1b, -1.0f, 1, 0); + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x28); + break; + } + } + + calcSwordAttackMove(1); + } + case 3: + default: + break; + } + + return 1; +} + +/* 80A3F358-80A3F5A4 014A38 024C+00 1/0 0/0 0/0 .text teach02_finishWait__10daNpc_Kn_cFPv + */ +int daNpc_Kn_c::teach02_finishWait(void* param_0) { + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(11, -1.0f, 1, 0); + mJntAnm.lookPlayer(0); + field_0xdec = daNpc_Kn_Param_c::m.followup_wait_time; + mMode = 2; + case 2: + calcSlip(); + mCcStts.Move(); + + if (mCylCc.ChkTgHit()) { + u8 cut_type = daPy_getPlayerActorClass()->getCutType(); + + if (cut_type != daPy_py_c::CUT_TYPE_GUARD_ATTACK) { + if (mType == 1) { + mEvtNo = 10; + } else if (mType == 2) { + mEvtNo = 12; + } + + cXyz pos(0.0f, 0.0f, daNpc_Kn_Param_c::m.big_slide_distance); + mDoMtx_stack_c::YrotS(cLib_targetAngleY(&daPy_getPlayerActorClass()->current.pos, + &attention_info.position)); + mDoMtx_stack_c::multVec(&pos, &mTargetPos); + mTargetPos += current.pos; + field_0x15bc = 1; + mSound.startCollisionSE(Z2SE_HIT_SWORD, 0x1e); + break; + } + } + + if (!cLib_calcTimer(&field_0xdec)) { + mEvtNo = 1; + mFlowNodeNo = 0x2c1; + mActionMode = 5; + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 1, 0); + } + case 3: + default: + break; + } + + return 1; +} + +/* 80A3F5A4-80A3F99C 014C84 03F8+00 1/0 0/0 0/0 .text teach02_shieldReflectWait__10daNpc_Kn_cFPv + */ +int daNpc_Kn_c::teach02_shieldReflectWait(void* param_0) { + + switch (mMode) { + case 0: + case 1: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(32, -1.0f, 0, 0); + mJntAnm.lookPlayer(0); + mMode = 2; + case 2: + mCcStts.Move(); + + if (field_0x15bd != 0) { + if (!daPy_getPlayerActorClass()->checkPlayerFly()) { + mEvtNo = 2; + if (field_0x15bd == 1) { + mFlowNodeNo = 0x2C4; + } else if (field_0x15bd == 2) { + mFlowNodeNo = 0x2C3; + } + field_0x15bd = 0; + } + } else { + if (parentActorID == fpcM_ERROR_PROCESS_ID_e || fpcM_SearchByID(parentActorID) == NULL) { + if (mMotionSeqMngr.getNo() == 0x19 && mMotionSeqMngr.getStepNo() == 0) { + if (mpModelMorf[0]->getFrame() >= 2.0f && mpModelMorf[0]->getFrame() < 3.0f) { + cXyz sp20(150.0f, 0.0f, 0.0f); + mDoMtx_stack_c::copy(mpModelMorf[0]->getModel()->getAnmMtx(0xD)); + mDoMtx_stack_c::multVec(&sp20, &sp20); + parentActorID = fopAcM_createChild(PROC_KN_BULLET, fopAcM_GetID(this), 0, &sp20, fopAcM_GetRoomNo(this), ¤t.angle, NULL, -1, NULL); + } + } else { + mMotionSeqMngr.setNo(0x19, -1.0f, 1, 0); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + } + } else { + fopAc_ac_c* parent_p; + if (fopAcM_SearchByID(parentActorID, &parent_p) && parent_p != NULL && fopAcM_GetName(parent_p) == PROC_KN_BULLET && ((daObjKnBullet_c*)parent_p)->getActionMode() == 0) { + if (mpModelMorf[0]->getFrame() >= 34.0f && mpModelMorf[0]->getFrame() < 35.0f) { + ((daObjKnBullet_c*)parent_p)->setActionMode(1); + parent_p->current.angle.y = mCurAngle.y; + parent_p->shape_angle.y = mCurAngle.y; + } + } + } + + if (mCylCc.ChkTgHit()) { + fopAc_ac_c* aTgHitActor_p = mCylCc.GetTgHitAc(); + JUT_ASSERT(437, 0 != aTgHitActor_p); + + if (fopAcM_GetName(aTgHitActor_p) == PROC_KN_BULLET) { + mEvtNo = 0xB; + + s16 var_r27 = cLib_targetAngleY(&aTgHitActor_p->current.pos, ¤t.pos); + cXyz sp14(0.0f, 0.0f, daNpc_Kn_Param_c::m.big_slide_distance); + mDoMtx_stack_c::YrotS(var_r27); + mDoMtx_stack_c::multVec(&sp14, &mTargetPos); + mTargetPos += current.pos; + field_0x15bc = 1; + mSound.startCollisionSE(Z2SE_HIT_HARD_BODY, 0x1E); + } + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + } + break; + case 3: + default: + break; + } + + return 1; +} + +/* 80A3F99C-80A3FFB4 01507C 0618+00 3/0 0/0 0/0 .text ECut_secondSkillExplain__10daNpc_Kn_cFi */ +int daNpc_Kn_c::ECut_secondSkillExplain(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + field_0xdec = 30; + break; + case 2: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(21, -1.0f, 0, 0); + break; + case 4: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(22, -1.0f, 0, 0); + break; + case 6: + mJntAnm.lookNone(0); + break; + case 10: + mStepMode = 2; + initTalk(0x2D7, NULL); + break; + case 20: { + Z2GetAudioMgr()->bgmStart(Z2BGM_OUGI_TRAINING, 0, 0); + + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp64(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp64, &sp64); + + cXyz sp58(sp64); + sp58.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp58)) { + sp64.y = fopAcM_gc_c::getGroundY() + 15.0f; + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp64, home.angle.y + 0x8000, 0); + daPy_getPlayerActorClass()->onTraningShieldAttack(); + break; + } + case 30: + initTalk(0x2C6, NULL); + break; + case 40: + initTalk(0x2BE, NULL); + break; + case 50: + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(24, -1.0f, 1, 0); + mJntAnm.lookNone(0); + break; + } + } + + switch (prm) { + case 0: + if (cLib_calcTimer(&field_0xdec) == 0) { + rt = 1; + } + break; + case 2: + if (mMotionSeqMngr.getNo() == 0x15 && mMotionSeqMngr.getStepNo() > 0 && mMorfLoops != 0) { + rt = 1; + } + break; + case 4: + if (mMotionSeqMngr.getNo() == 0x16 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + } + break; + case 6: + if (mCurAngle.y != fopAcM_searchPlayerAngleY(this)) { + if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + rt = 1; + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + rt = 1; + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 20: { + cXyz sp28(0.0f, 0.0f, 375.0f); + mDoMtx_stack_c::transS(home.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp28, &sp28); + + cXyz sp1C(sp28); + sp1C.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp1C)) { + sp28.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp28, home.angle.y + 0x8000, 0); + rt = 1; + break; + } + case 30: + case 40: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 50: + if (mMotionSeqMngr.getNo() == 0x18 && mMotionSeqMngr.getStepNo() > 0) { + rt = 1; + mActionMode = 5; + offDownFlg(); + } + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A3FFB4-80A403B8 015694 0404+00 1/0 0/0 0/0 .text ECut_reflectExplain__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_reflectExplain(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(28, -1.0f, 1, 0); + mJntAnm.lookPlayer(0); + field_0xdec = 30; + break; + case 10: + mStepMode = 2; + initTalk(0x2C2, NULL); + break; + case 20: { + setPos(home.pos); + setAngle(home.angle.y); + + cXyz sp24(0.0f, 0.0f, 600.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&sp24, &sp24); + + cXyz sp18(sp24); + sp18.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&sp18)) { + sp24.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp24, home.angle.y + 0x8000, 0); + break; + } + case 30: + initTalk(0x2C2, NULL); + break; + } + } + + switch (prm) { + case 0: + if (cLib_calcTimer(&field_0xdec) == 0) { + mTargetPos = current.pos; + field_0x15bc = 0; + speedF = 0.0f; + speed.zero(); + + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + rt = 1; + } else if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + calcSlip(); + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + break; + case 20: + rt = 1; + break; + case 30: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + mActionMode = 7; + } + break; + default: + rt = 1; + break; + } + + return rt; +} + +/* 80A403B8-80A408B4 015A98 04FC+00 2/0 0/0 0/0 .text ECut_secondSkillGet__10daNpc_Kn_cFi + */ +int daNpc_Kn_c::ECut_secondSkillGet(int i_idx) { + dEvent_manager_c* event_manager = &dComIfGp_getEventManager(); + int sp8 = 0; + + int rt = 0; + int prm = -1; + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_idx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager->getIsAddvance(i_idx)) { + switch (prm) { + case 0: + daNpcT_offTmpBit(0xB); + daNpcT_offTmpBit(0xC); + + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(28, -1.0f, 1, 0); + + mJntAnm.lookPlayer(0); + field_0xdec = 30; + break; + case 10: { + mStepMode = 2; + + cXyz sp18(0.0f, 0.0f, 500.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(cLib_targetAngleY(¤t.pos, &home.pos)); + mDoMtx_stack_c::multVec(&sp18, &sp18); + + cXyz spC(sp18); + spC.y += 500.0f; + if (fopAcM_gc_c::gndCheck(&spC)) { + sp18.y = fopAcM_gc_c::getGroundY(); + } + + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp18, (s16)cLib_targetAngleY(&home.pos, ¤t.pos), 0); + initTalk(0x2C5, NULL); + break; + } + case 12: + setAngle(fopAcM_searchPlayerAngleY(this)); + break; + case 15: + Z2GetAudioMgr()->bgmStreamPrepare(0x2000038); + Z2GetAudioMgr()->bgmStreamPlay(); + break; + case 20: + initTalk(0x2C5, NULL); + break; + case 30: + initTalk(0x2C5, NULL); + break; + } + } + + switch (prm) { + case 0: + if (cLib_calcTimer(&field_0xdec) == 0) { + mTargetPos = current.pos; + field_0x15bc = 0; + speedF = 0.0f; + speed.zero(); + + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + rt = 1; + } else if (step(fopAcM_searchPlayerAngleY(this), 1, 0x20, 20, 0)) { + mFaceMotionSeqMngr.setNo(1, -1.0f, 0, 0); + mMotionSeqMngr.setNo(0, -1.0f, 0, 0); + } + } else { + calcSlip(); + } + break; + case 10: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + if (field_0x170e == 0) { + field_0x170e = 1; + Z2GetAudioMgr()->bgmStop(0x32, 0); + } + } + break; + case 20: + if (talkProc(NULL, 0, NULL, 0)) { + rt = 1; + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + case 30: + if (talkProc(NULL, 0, NULL, 0)) { + setSceneChange(1); + } + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + break; + default: + rt = 1; + break; + } + + return rt; +}