diff options
| author | hev7 <143887945+hev7@users.noreply.github.com> | 2025-11-14 10:32:10 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-14 12:32:10 +0200 |
| commit | a0df17da2b776c682a57d77da8a9cac4726fe047 (patch) | |
| tree | 83b5f4d595713755f0d356d62ca590189fa6b9e7 /include | |
| parent | 3ccdb41ea910063f063d94097b62e8c9e7894364 (diff) | |
npc_yamis, npc_yamit matching (#2801)
Diffstat (limited to 'include')
| -rw-r--r-- | include/d/actor/d_a_npc_yamis.h | 154 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc_yamit.h | 153 | ||||
| -rw-r--r-- | include/d/actor/d_a_tag_yami.h | 2 |
3 files changed, 210 insertions, 99 deletions
diff --git a/include/d/actor/d_a_npc_yamis.h b/include/d/actor/d_a_npc_yamis.h index d62e1a7350..eee897c32d 100644 --- a/include/d/actor/d_a_npc_yamis.h +++ b/include/d/actor/d_a_npc_yamis.h @@ -3,6 +3,33 @@ #include "d/actor/d_a_npc.h" +struct daNpc_yamiS_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_yamiS_Param_c { +public: + /* 80B4CD38 */ virtual ~daNpc_yamiS_Param_c() {} + + static const daNpc_yamiS_HIOParam m; +}; + +#if DEBUG +class daNpc_yamiS_HIO_c : public mDoHIO_entry_c { +public: + daNpc_yamiS_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpc_yamiS_HIOParam m; +}; + +#define NPC_YAMIS_HIO_CLASS daNpc_yamiS_HIO_c +#else +#define NPC_YAMIS_HIO_CLASS daNpc_yamiS_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_yamiS_c @@ -11,80 +38,109 @@ * @details * */ -class daNpc_yamiS_c : public fopAc_ac_c { +class daNpc_yamiS_c : public daNpcT_c { public: + typedef BOOL (daNpc_yamiS_c::*cutFunc)(int); + typedef int (daNpc_yamiS_c::*actionFunc)(void*); + /* 80B4656C */ ~daNpc_yamiS_c(); - /* 80B466A4 */ void create(); - /* 80B46958 */ void CreateHeap(); - /* 80B46DA8 */ void Delete(); - /* 80B46DDC */ void Execute(); - /* 80B46DFC */ void Draw(); - /* 80B46EA4 */ void createHeapCallBack(fopAc_ac_c*); - /* 80B46EC4 */ void ctrlJointCallBack(J3DJoint*, int); - /* 80B46F1C */ void getType(); - /* 80B46F54 */ void getFlowNodeNo(); - /* 80B46FB8 */ void isDelete(); + /* 80B466A4 */ cPhs__Step create(); + /* 80B46958 */ int CreateHeap(); + /* 80B46DA8 */ int Delete(); + /* 80B46DDC */ int Execute(); + /* 80B46DFC */ int Draw(); + /* 80B46EA4 */ static int createHeapCallBack(fopAc_ac_c*); + /* 80B46EC4 */ static int ctrlJointCallBack(J3DJoint*, int); + /* 80B46F1C */ u8 getType(); + /* 80B46F54 */ u32 getFlowNodeNo(); + /* 80B46FB8 */ BOOL isDelete(); /* 80B47040 */ void reset(); /* 80B47254 */ void afterJntAnm(int); /* 80B472E0 */ void setParam(); /* 80B473DC */ void setAfterTalkMotion(); /* 80B4743C */ void srchActors(); - /* 80B47440 */ void evtTalk(); - /* 80B47524 */ void evtCutProc(); + /* 80B47440 */ BOOL evtTalk(); + /* 80B47524 */ BOOL evtCutProc(); /* 80B475EC */ void action(); /* 80B476D8 */ void beforeMove(); /* 80B47750 */ void setAttnPos(); /* 80B4797C */ void setCollision(); - /* 80B47AE8 */ bool drawDbgInfo(); + /* 80B47AE8 */ int drawDbgInfo(); /* 80B47AF0 */ void drawGhost(); - /* 80B47B5C */ void selectAction(); - /* 80B47BA4 */ void chkAction(int (daNpc_yamiS_c::*)(void*)); - /* 80B47BD0 */ void setAction(int (daNpc_yamiS_c::*)(void*)); - /* 80B47C78 */ void wait(void*); - /* 80B47F50 */ void talk(void*); - /* 80B4815C */ void cutStopper(int); - /* 80B481F0 */ void _cutStopper_Init(int const&); - /* 80B48238 */ void _cutStopper_Main(int const&); - /* 80B494D8 */ daNpc_yamiS_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**); - /* 80B49598 */ u16 getEyeballMaterialNo(); - /* 80B495A0 */ s32 getHeadJointNo(); - /* 80B495A8 */ s32 getNeckJointNo(); - /* 80B495B0 */ bool getBackboneJointNo(); - /* 80B495B8 */ void checkChangeJoint(int); - /* 80B495C8 */ void checkRemoveJoint(int); - /* 80B495D8 */ void evtEndProc(); - - void vanish_off() { - field_0xf81 = 0; + /* 80B47B5C */ int selectAction(); + /* 80B47BA4 */ BOOL chkAction(int (daNpc_yamiS_c::*)(void*)); + /* 80B47BD0 */ int setAction(int (daNpc_yamiS_c::*)(void*)); + /* 80B47C78 */ int wait(void*); + /* 80B47F50 */ int talk(void*); + /* 80B4815C */ BOOL cutStopper(int); + /* 80B481F0 */ BOOL _cutStopper_Init(int const&); + /* 80B48238 */ BOOL _cutStopper_Main(int const&); + /* 80B494D8 */ daNpc_yamiS_c( + daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, + daNpcT_motionAnmData_c const* i_motionAnmData, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, + int i_faceMotionStepNum, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum, + daNpcT_evtData_c const* i_evtData, char** i_arcNames) + : daNpcT_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData, + i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData, + i_arcNames) {} + /* 80B49598 */ u16 getEyeballMaterialNo() { return 1; } + /* 80B495A0 */ s32 getHeadJointNo() { return 4; } + /* 80B495A8 */ s32 getNeckJointNo() { return 3; } + /* 80B495B0 */ s32 getBackboneJointNo() { return 1; } + /* 80B495B8 */ BOOL checkChangeJoint(int i_joint) { return i_joint == 4; } + /* 80B495C8 */ BOOL checkRemoveJoint(int i_joint) { return i_joint == 6; } + /* 80B495D8 */ BOOL evtEndProc() { + mJntAnm.lookNone(0); + eventInfo.setIdx(0); + mEvtNo = 0; + return TRUE; + } + + u8 getPathID() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; } + int getSwitchBitNo() { + u32 full_prm = fopAcM_GetParam(this); + return (full_prm >> 16) & 0xFF; } + BOOL _is_vanish_prm() { + int reg_r31 = (fopAcM_GetParam(this) >> 28) != 0; + if (reg_r31 == 15) { + reg_r31 = 0; + } + return reg_r31; + } + + BOOL is_vanish() { return mVanish; } + void vanish_on() { mVanish = 1; } + void vanish_off() { mVanish = 0; } void on_CoHit() { field_0xe44.OnCoSetBit(); field_0xe44.OnTgSetBit(); } + void off_CoHit() { + field_0xe44.OffCoSetBit(); + field_0xe44.OffTgSetBit(); + } static char* mCutNameList[2]; - static u8 mCutList[24]; + static cutFunc mCutList[2]; private: - /* 0x568 */ u8 field_0x568[0xe44 - 0x568]; + /* 0xE40 */ NPC_YAMIS_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl field_0xe44; - /* 0xF80 */ u8 field_0xf80; - /* 0xF81 */ u8 field_0xf81; - /* 0xF82 */ u8 field_0xf82[0xFCC - 0xF82]; + /* 0xF80 */ u8 mType; + /* 0xF81 */ s8 mVanish; + /* 0xF82 */ s8 field_0xf82; + /* 0xF83 */ u8 field_0xf83; + /* 0xF84 */ actionFunc mNextAction; + /* 0xF90 */ actionFunc mAction; + /* 0xF9C */ daNpcT_Path_c mPath; + /* 0xFC4 */ u8 field_0xfc4; + /* 0xFC8 */ int field_0xfc8; }; STATIC_ASSERT(sizeof(daNpc_yamiS_c) == 0xfcc); -class daNpc_yamiS_Param_c { -public: - /* 80B49644 */ ~daNpc_yamiS_Param_c(); - - static u8 const m[140]; -}; - - #endif /* D_A_NPC_YAMIS_H */ diff --git a/include/d/actor/d_a_npc_yamit.h b/include/d/actor/d_a_npc_yamit.h index b4da5fa772..0ff9e7979b 100644 --- a/include/d/actor/d_a_npc_yamit.h +++ b/include/d/actor/d_a_npc_yamit.h @@ -4,6 +4,33 @@ #include "d/actor/d_a_npc.h" #include "d/actor/d_a_tag_yami.h" +struct daNpc_yamiT_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_yamiT_Param_c { +public: + /* 80B4CD38 */ virtual ~daNpc_yamiT_Param_c() {} + + static const daNpc_yamiT_HIOParam m; +}; + +#if DEBUG +class daNpc_yamiT_HIO_c : public mDoHIO_entry_c { +public: + daNpc_yamiT_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpc_yamiT_HIOParam m; +}; + +#define NPC_YAMIT_HIO_CLASS daNpc_yamiT_HIO_c +#else +#define NPC_YAMIT_HIO_CLASS daNpc_yamiT_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_yamiT_c @@ -12,81 +39,107 @@ * @details * */ -class daNpc_yamiT_c : public fopAc_ac_c { +class daNpc_yamiT_c : public daNpcT_c { public: + typedef BOOL (daNpc_yamiT_c::*cutFunc)(int); + typedef int (daNpc_yamiT_c::*actionFunc)(void*); + /* 80B49BEC */ ~daNpc_yamiT_c(); - /* 80B49D24 */ void create(); - /* 80B49FD8 */ void CreateHeap(); - /* 80B4A428 */ void Delete(); - /* 80B4A45C */ void Execute(); - /* 80B4A47C */ void _search_Tag(void*, void*); - /* 80B4A4E0 */ void Draw(); - /* 80B4A588 */ void createHeapCallBack(fopAc_ac_c*); - /* 80B4A5A8 */ void ctrlJointCallBack(J3DJoint*, int); - /* 80B4A600 */ void getType(); - /* 80B4A638 */ void getFlowNodeNo(); - /* 80B4A69C */ void isDelete(); + /* 80B49D24 */ cPhs__Step create(); + /* 80B49FD8 */ int CreateHeap(); + /* 80B4A428 */ int Delete(); + /* 80B4A45C */ int Execute(); + /* 80B4A47C */ static void* _search_Tag(void*, void*); + /* 80B4A4E0 */ int Draw(); + /* 80B4A588 */ static int createHeapCallBack(fopAc_ac_c*); + /* 80B4A5A8 */ static int ctrlJointCallBack(J3DJoint*, int); + /* 80B4A600 */ u8 getType(); + /* 80B4A638 */ u32 getFlowNodeNo(); + /* 80B4A69C */ BOOL isDelete(); /* 80B4A724 */ void reset(); /* 80B4A914 */ void afterJntAnm(int); /* 80B4A9A0 */ void setParam(); /* 80B4AAD0 */ void setAfterTalkMotion(); /* 80B4AB30 */ void srchActors(); - /* 80B4ABA0 */ void evtTalk(); - /* 80B4AC84 */ void evtCutProc(); + /* 80B4ABA0 */ BOOL evtTalk(); + /* 80B4AC84 */ BOOL evtCutProc(); /* 80B4AD4C */ void action(); /* 80B4AE38 */ void beforeMove(); /* 80B4AEB0 */ void setAttnPos(); /* 80B4B0DC */ void setCollision(); - /* 80B4B210 */ bool drawDbgInfo(); - /* 80B4B218 */ void evtEndProc(); + /* 80B4B210 */ int drawDbgInfo(); + /* 80B4B218 */ BOOL evtEndProc(); /* 80B4B294 */ void drawGhost(); - /* 80B4B300 */ void selectAction(); - /* 80B4B348 */ void chkAction(int (daNpc_yamiT_c::*)(void*)); - /* 80B4B374 */ void setAction(int (daNpc_yamiT_c::*)(void*)); - /* 80B4B41C */ void wait(void*); - /* 80B4B7D4 */ void talk(void*); - /* 80B4B9E0 */ void cutStopper(int); - /* 80B4BA74 */ void _cutStopper_Init(int const&); - /* 80B4BAAC */ void _cutStopper_Main(int const&); - /* 80B4CC38 */ daNpc_yamiT_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**); - /* 80B4CCF8 */ u16 getEyeballMaterialNo(); - /* 80B4CD00 */ s32 getHeadJointNo(); - /* 80B4CD08 */ s32 getNeckJointNo(); - /* 80B4CD10 */ bool getBackboneJointNo(); - /* 80B4CD18 */ void checkChangeJoint(int); - /* 80B4CD28 */ void checkRemoveJoint(int); - - void vanish_off() { - field_0xf81 = 0; + /* 80B4B300 */ int selectAction(); + /* 80B4B348 */ BOOL chkAction(int (daNpc_yamiT_c::*)(void*)); + /* 80B4B374 */ int setAction(int (daNpc_yamiT_c::*)(void*)); + /* 80B4B41C */ int wait(void*); + /* 80B4B7D4 */ int talk(void*); + /* 80B4B9E0 */ BOOL cutStopper(int); + /* 80B4BA74 */ BOOL _cutStopper_Init(int const&); + /* 80B4BAAC */ BOOL _cutStopper_Main(int const&); + /* 80B4CC38 */ daNpc_yamiT_c( + daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, + daNpcT_motionAnmData_c const* i_motionAnmData, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, + int i_faceMotionStepNum, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum, + daNpcT_evtData_c const* i_evtData, char** i_arcNames) + : daNpcT_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData, + i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData, + i_arcNames) {} + /* 80B4CCF8 */ u16 getEyeballMaterialNo() { return 1; } + /* 80B4CD00 */ s32 getHeadJointNo() { return 4; } + /* 80B4CD08 */ s32 getNeckJointNo() { return 3; } + /* 80B4CD10 */ s32 getBackboneJointNo() { return 1; } + /* 80B4CD18 */ BOOL checkChangeJoint(int i_joint) { return i_joint == 4; } + /* 80B4CD28 */ BOOL checkRemoveJoint(int i_joint) { return i_joint == 6; } + + u8 getPathID() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; } + int getSwitchBitNo() { + u32 full_prm = fopAcM_GetParam(this); + return (full_prm >> 16) & 0xFF; } + u8 _chk_TagPrm(fopAc_ac_c* i_tag) { return (fopAcM_GetParam(i_tag) & 0xFF) == 2; } + BOOL _is_vanish_prm() { + int reg_r31 = (fopAcM_GetParam(this) >> 28) != 0; + if (reg_r31 == 15) { + reg_r31 = 0; + } + return reg_r31; + } + + BOOL is_vanish() { return mVanish; } + void vanish_on() { mVanish = 1; } + void vanish_off() { mVanish = 0; } void on_CoHit() { field_0xe44.OnCoSetBit(); field_0xe44.OnTgSetBit(); } + void off_CoHit() { + field_0xe44.OffCoSetBit(); + field_0xe44.OffTgSetBit(); + } + u8 _is_stopper_off() { return fopAcM_isSwitch(this, 0x3D) && fopAcM_isSwitch(this, 0x3E); } static char* mCutNameList[2]; - static u8 mCutList[24]; + static cutFunc mCutList[2]; private: - /* 0x568 */ u8 field_0x568[0xe44 - 0x568]; + /* 0xE40 */ NPC_YAMIT_HIO_CLASS* mpHIO; /* 0xE44 */ dCcD_Cyl field_0xe44; - /* 0xF80 */ u8 field_0xf80; - /* 0xF81 */ u8 field_0xf81; - /* 0xF82 */ u8 field_0xf82[0xFCC - 0xF82]; + /* 0xF80 */ u8 mType; + /* 0xF81 */ s8 mVanish; + /* 0xF82 */ s8 field_0xf82; + /* 0xF83 */ s8 field_0xf83; + /* 0xF84 */ daTagYami_c* mpTagYami; + /* 0xF84 */ actionFunc mNextAction; + /* 0xF90 */ actionFunc mAction; + /* 0xF9C */ daNpcT_Path_c mPath; + /* 0xFC4 */ u8 field_0xfc4; }; STATIC_ASSERT(sizeof(daNpc_yamiT_c) == 0xfcc); -class daNpc_yamiT_Param_c { -public: - /* 80B4CD38 */ ~daNpc_yamiT_Param_c(); - - static u8 const m[140]; -}; - - #endif /* D_A_NPC_YAMIT_H */ diff --git a/include/d/actor/d_a_tag_yami.h b/include/d/actor/d_a_tag_yami.h index 7e5b8650fd..094a993285 100644 --- a/include/d/actor/d_a_tag_yami.h +++ b/include/d/actor/d_a_tag_yami.h @@ -20,6 +20,8 @@ public: u8 get_MTagSw2() { return fopAcM_GetParamBit(this, 16, 8); } s32 get_prm() { return fopAcM_GetParam(this) & 0xff; } + int is_CoHit() { return mIsCoHit; } + void on_CoHit() { mCyl.OnCoSetBit(); mCoHitValid = 1; |
