2021-03-28 22:49:05 +02:00
|
|
|
#ifndef D_A_NPC_KASI_MICH_H
|
|
|
|
|
#define D_A_NPC_KASI_MICH_H
|
|
|
|
|
|
2024-10-10 07:29:58 -07:00
|
|
|
#include "d/actor/d_a_npc.h"
|
2025-08-29 15:40:14 -04:00
|
|
|
#include "d/actor/d_a_tag_escape.h"
|
2024-06-05 09:54:15 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @ingroup actors-npcs
|
|
|
|
|
* @class daNpcKasiMich_c
|
|
|
|
|
* @brief Misha
|
|
|
|
|
*
|
|
|
|
|
* @details
|
|
|
|
|
*
|
2025-08-29 15:40:14 -04:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
struct daNpcKasiMich_HIOParam {
|
|
|
|
|
/* 0x00 */ daNpcF_HIOParam common;
|
|
|
|
|
/* 0x6C */ s16 escape_time; // 逃げるまでの時間 - Escape Time
|
|
|
|
|
/* 0x70 */ f32 escape_spd; // 逃げる速度 - Escape Speed
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class daNpcKasiMich_HIO_c
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
: public mDoHIO_entry_c
|
|
|
|
|
#endif
|
|
|
|
|
{
|
|
|
|
|
/* 0x8 */ daNpcKasiMich_HIOParam param;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class daNpcKasiMich_c : public daNpcF_c {
|
2024-06-05 09:54:15 -06:00
|
|
|
public:
|
2025-08-29 15:40:14 -04:00
|
|
|
typedef int (daNpcKasiMich_c::*actionFunc)(int);
|
|
|
|
|
typedef BOOL (daNpcKasiMich_c::*EventFn)(int);
|
|
|
|
|
|
2024-06-05 09:54:15 -06:00
|
|
|
/* 80A261CC */ daNpcKasiMich_c();
|
|
|
|
|
/* 80A26414 */ ~daNpcKasiMich_c();
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A26624 */ cPhs__Step Create();
|
|
|
|
|
/* 80A268A0 */ int CreateHeap();
|
|
|
|
|
/* 80A26A24 */ int Delete();
|
|
|
|
|
/* 80A26A58 */ int Execute();
|
|
|
|
|
/* 80A26A84 */ int Draw();
|
|
|
|
|
/* 80A26AD0 */ int ctrlJoint(J3DJoint*, J3DModel*);
|
|
|
|
|
/* 80A26C5C */ static int createHeapCallBack(fopAc_ac_c*);
|
|
|
|
|
/* 80A26C7C */ static int ctrlJointCallBack(J3DJoint*, int);
|
2024-06-05 09:54:15 -06:00
|
|
|
/* 80A26CC8 */ void setParam();
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A26D34 */ BOOL main();
|
2024-06-05 09:54:15 -06:00
|
|
|
/* 80A26FDC */ void setAttnPos();
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A27184 */ void setMotionAnm(int, f32);
|
2024-06-05 09:54:15 -06:00
|
|
|
/* 80A27254 */ void setMotion(int, f32, int);
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A2729C */ BOOL drawDbgInfo();
|
2024-06-05 09:54:15 -06:00
|
|
|
/* 80A272A4 */ void reset();
|
|
|
|
|
/* 80A274D8 */ void playMotion();
|
|
|
|
|
/* 80A2790C */ void playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData***);
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A27A84 */ BOOL setAction(actionFunc);
|
2024-06-05 09:54:15 -06:00
|
|
|
/* 80A27B2C */ void setLookMode(int);
|
|
|
|
|
/* 80A27B50 */ void lookat();
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A27D30 */ BOOL step(s16, int);
|
|
|
|
|
/* 80A27E24 */ BOOL chkFindPlayer();
|
|
|
|
|
/* 80A27F08 */ int wait(int);
|
|
|
|
|
/* 80A282B4 */ int fear(int);
|
|
|
|
|
/* 80A28490 */ daTagEscape_c* srchWolfTag();
|
|
|
|
|
/* 80A284F8 */ static void* _srch_escape_tag(void*, void*);
|
|
|
|
|
/* 80A285C8 */ int getWolfPathNearIdx();
|
|
|
|
|
/* 80A286FC */ int chace_st(int);
|
|
|
|
|
/* 80A287A0 */ int chace(int);
|
|
|
|
|
/* 80A28910 */ cXyz getChacePos();
|
|
|
|
|
/* 80A289CC */ int turn_link(int);
|
|
|
|
|
/* 80A28A8C */ int turn_home(int);
|
|
|
|
|
/* 80A28B70 */ int turn_center(int);
|
|
|
|
|
/* 80A28C40 */ int talk_dummy(int);
|
|
|
|
|
/* 80A28CB8 */ int kya(int);
|
|
|
|
|
/* 80A28D90 */ int kya2(int);
|
|
|
|
|
/* 80A28E28 */ int kya_stop(int);
|
|
|
|
|
/* 80A28EFC */ int iyan(int);
|
|
|
|
|
/* 80A28F74 */ int escape(int);
|
|
|
|
|
/* 80A2908C */ int iyan_look(int);
|
|
|
|
|
/* 80A29164 */ int turn_hana(int);
|
2025-09-15 05:53:53 -04:00
|
|
|
void dummy();
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A291E8 */ int wait_dummy(int);
|
|
|
|
|
/* 80A2926C */ int cheer(int);
|
|
|
|
|
/* 80A29458 */ BOOL _turn_to_link(s16);
|
|
|
|
|
/* 80A294A4 */ BOOL _turn_pos(cXyz const&, s16);
|
|
|
|
|
/* 80A29500 */ BOOL actor_front_check(fopAc_ac_c*);
|
2024-06-05 09:54:15 -06:00
|
|
|
/* 80A295D8 */ void _getOffset(cXyz const&, cXyz&);
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A29FDC */ void adjustShapeAngle() {}
|
2024-06-05 09:54:15 -06:00
|
|
|
|
2025-08-29 15:40:14 -04:00
|
|
|
s8 getType() {
|
|
|
|
|
s8 rv = fopAcM_GetParam(this) & 0xFF;
|
|
|
|
|
|
|
|
|
|
if (rv == 0xFF) {
|
|
|
|
|
rv = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
int getMessageNo() { return home.angle.x; }
|
|
|
|
|
u8 getRailNo() { return fopAcM_GetParam(this) >> 8; }
|
|
|
|
|
void setSygnal(int i_sygnal) { mSygnal = i_sygnal; }
|
|
|
|
|
void setChacePos(cXyz& i_chacePos) { mChacePos = i_chacePos; }
|
|
|
|
|
void setCenterPos(cXyz& i_centerPos) { mCenterPos = i_centerPos; }
|
|
|
|
|
void setPlPoint(int i_plPoint) { mPlPoint = i_plPoint; }
|
|
|
|
|
void off_talked() { mTalked = false; }
|
|
|
|
|
BOOL is_talked() { return mTalked; }
|
|
|
|
|
BOOL is_fear() { return mFear; }
|
|
|
|
|
BOOL is_escape() { return mEscape; }
|
|
|
|
|
void chgWeightHeavy() { mCcStts.SetWeight(0xFE); }
|
|
|
|
|
void chgWeightLight() { mCcStts.SetWeight(0xD8); }
|
|
|
|
|
BOOL pl_front_check() { return actor_front_check(daPy_getPlayerActorClass()); }
|
|
|
|
|
|
|
|
|
|
static EventFn mEvtSeqList[1];
|
|
|
|
|
static daTagEscape_c* mTargetTag;
|
|
|
|
|
static f32 mTargetTagDist;
|
|
|
|
|
static s16 mWolfAngle;
|
2024-06-05 09:54:15 -06:00
|
|
|
|
|
|
|
|
private:
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 0x0B48 */ Z2CreatureCitizen mSound;
|
|
|
|
|
/* 0x0BEC */ u8 field_0xbec[0xbf0 - 0xbec];
|
|
|
|
|
/* 0x0BF0 */ daNpcF_Lookat_c mLookat;
|
|
|
|
|
/* 0x0C8C */ daNpcF_ActorMngr_c mActorMngr[1];
|
|
|
|
|
/* 0x0C94 */ daNpcF_Path_c mPath;
|
|
|
|
|
/* 0x12C4 */ daNpcKasiMich_HIO_c* mHIO;
|
|
|
|
|
/* 0x12C8 */ dCcD_Cyl mCyl;
|
|
|
|
|
/* 0x1404 */ s16 mMode;
|
|
|
|
|
/* 0x1408 */ actionFunc mAction;
|
|
|
|
|
/* 0x1414 */ request_of_phase_process_class mPhases[3];
|
|
|
|
|
/* 0x142C */ fpc_ProcID field_0x142c;
|
|
|
|
|
/* 0x1430 */ int field_0x1430;
|
|
|
|
|
/* 0x1434 */ int field_0x1434;
|
|
|
|
|
/* 0x1438 */ int mMessageNo;
|
|
|
|
|
/* 0x143C */ s16 mLookMode;
|
|
|
|
|
/* 0x143E */ s16 field_0x143e;
|
|
|
|
|
/* 0x1440 */ s16 field_0x1440;
|
|
|
|
|
/* 0x1444 */ int mSygnal;
|
|
|
|
|
/* 0x1448 */ cXyz mChacePos;
|
|
|
|
|
/* 0x1454 */ cXyz mCenterPos;
|
|
|
|
|
/* 0x1460 */ int mPlPoint;
|
|
|
|
|
/* 0x1464 */ s8 mType;
|
|
|
|
|
/* 0x1465 */ s8 field_0x1465;
|
|
|
|
|
/* 0x1466 */ bool mTalked;
|
|
|
|
|
/* 0x1467 */ bool mFear;
|
|
|
|
|
/* 0x1468 */ bool mEscape;
|
|
|
|
|
/* 0x1469 */ u8 field_0x1469;
|
2024-06-05 09:54:15 -06:00
|
|
|
};
|
2024-06-10 01:34:52 -06:00
|
|
|
|
2024-06-05 09:54:15 -06:00
|
|
|
STATIC_ASSERT(sizeof(daNpcKasiMich_c) == 0x146c);
|
|
|
|
|
|
|
|
|
|
class daNpcKasiMich_Param_c {
|
|
|
|
|
public:
|
2025-08-29 15:40:14 -04:00
|
|
|
/* 80A29FE0 */ virtual ~daNpcKasiMich_Param_c() {}
|
2024-06-05 09:54:15 -06:00
|
|
|
|
2025-08-29 15:40:14 -04:00
|
|
|
static daNpcKasiMich_HIOParam const m;
|
2024-06-05 09:54:15 -06:00
|
|
|
};
|
|
|
|
|
|
2021-03-28 22:49:05 +02:00
|
|
|
#endif /* D_A_NPC_KASI_MICH_H */
|