npc_kn mostly done (#2609)

* npc_kn mostly done

* fix shieldD

* pr fixes

* weak func fixes
This commit is contained in:
TakaRikka 2025-08-28 03:49:24 -07:00 committed by GitHub
parent 956e84b0e7
commit 5ce5bf20cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 5475 additions and 2675 deletions

View File

@ -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;
};

View File

@ -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 {

View File

@ -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];

View File

@ -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); }

View File

@ -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();

View File

@ -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
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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, &current.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<int>(&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<int>(&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(&current.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, &current.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<int>(&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;
}

View File

@ -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), &current.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, &current.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<int>(&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<int>(&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(&current.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, &current.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<int>(&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;
}