diff options
| author | YunataSavior <58997725+YunataSavior@users.noreply.github.com> | 2025-10-16 20:21:57 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-16 20:21:57 -0700 |
| commit | 43bf8abf483dca508f0c0ec24e4c50afc4190895 (patch) | |
| tree | 2bfb0f31ee46585c7c9ef0d23e16d5761b020e7a /include | |
| parent | da605fd79248c70a75b1ddb69c51ed9dd6782cb8 (diff) | |
npc_toby OK (#2733)
* npc_toby 68% done
* address ykm ykw regressions
* All npc_toby cut done + chkPassed1 fakematch
* npc_toby OK
* npc_toby some hio var rename
* npc_gnd cleanup
* npc_gnd CreateHeap and reset
* Add fakematch comment fo get_u16_Idx
Diffstat (limited to 'include')
| -rw-r--r-- | include/d/actor/d_a_npc.h | 12 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc_gnd.h | 117 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc_toby.h | 180 | ||||
| -rw-r--r-- | include/d/actor/d_a_obj_automata.h | 10 |
4 files changed, 198 insertions, 121 deletions
diff --git a/include/d/actor/d_a_npc.h b/include/d/actor/d_a_npc.h index 2abb1e1ea9..f0cfcc579d 100644 --- a/include/d/actor/d_a_npc.h +++ b/include/d/actor/d_a_npc.h @@ -440,6 +440,7 @@ public: /* 80145C74 */ int setPathInfo(u8, s8, u8); /* 80145D2C */ int setNextPathInfo(s8, u8); /* 80145DA0 */ void reverse(); + void setNextIdx() { setNextIdx(getNumPnts()); } /* 80145DD0 */ int setNextIdx(int); int getDstPos(cXyz i_pnt, cXyz* o_pos_p) { return getDstPos(i_pnt, o_pos_p, getNumPnts()); @@ -460,7 +461,9 @@ public: Vec getPntPos(int i_idx) { return mPathInfo->m_points[i_idx].m_position; } - u8 getArg0() { return mPathInfo->m_points[mIdx].mArg0; } + int getArg0() { return mPathInfo->m_points[mIdx].mArg0; } + int getArg1() { return mPathInfo->m_points[mIdx].mArg1; } + int getArg2() { return mPathInfo->m_points[mIdx].mArg2; } int chkClose() { BOOL rt = dPath_ChkClose(mPathInfo); @@ -473,7 +476,11 @@ public: void setIdx(int i_idx) { mIdx = i_idx; } - const u16 getIdx() { return mIdx; } + const int getIdx() { return mIdx; } +#if VERSION != VERSION_SHIELD_DEBUG + // fakematch inline to fix daNpcT_Path_c::chkPassed1 + const u16 get_u16_Idx() { return mIdx; } +#endif dPath* getPathInfo() { return mPathInfo; } @@ -791,6 +798,7 @@ void daNpcT_offTmpBit(u32 i_idx); void daNpcT_onTmpBit(u32 i_idx); BOOL daNpcT_chkTmpBit(u32 i_idx); void daNpcT_onEvtBit(u32 i_idx); +void daNpcT_offEvtBit(u32 i_idx); BOOL daNpcT_chkTmpBit(u32 i_idx); BOOL daNpcT_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz* o_spawnPos, csXyz* o_angle); diff --git a/include/d/actor/d_a_npc_gnd.h b/include/d/actor/d_a_npc_gnd.h index 8dc52c4061..5a3a436509 100644 --- a/include/d/actor/d_a_npc_gnd.h +++ b/include/d/actor/d_a_npc_gnd.h @@ -3,6 +3,33 @@ #include "d/actor/d_a_npc.h" +struct daNpc_Gnd_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; +}; + +class daNpc_Gnd_Param_c { +public: + /* 809BE434 */ virtual ~daNpc_Gnd_Param_c() {} + + static const daNpc_Gnd_HIOParam m; +}; + +#if DEBUG +class daNpc_Gnd_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Gnd_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpc_Gnd_HIOParam m; +}; + +#define NPC_GND_HIO_CLASS daNpc_Gnd_HIO_c +#else +#define NPC_GND_HIO_CLASS daNpc_Gnd_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Gnd_c @@ -27,7 +54,7 @@ public: /* 809BBE60 */ int Execute(); /* 809BBE80 */ int Draw(); /* 809BBF44 */ static int createHeapCallBack(fopAc_ac_c*); - /* 809BBF64 */ int ctrlJointCallBack(J3DJoint*, int); + /* 809BBF64 */ static int ctrlJointCallBack(J3DJoint*, int); /* 809BBFBC */ u8 getType(); /* 809BBFDC */ int getFlowNodeNo(); /* 809BBFF8 */ int isDelete(); @@ -50,76 +77,38 @@ public: /* 809BCD5C */ void setAction(int (daNpc_Gnd_c::*)(void*)); /* 809BCE04 */ void wait(void*); /* 809BD050 */ void talk(void*); - /* 809BE2D0 */ daNpc_Gnd_c(daNpcT_faceMotionAnmData_c const* param_1, daNpcT_motionAnmData_c const* param_2, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_3, int param_4, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_5, int param_6, - daNpcT_evtData_c const* param_7, char** param_8) : - daNpcT_c(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8) - {} - /* 809BE40C */ u16 getEyeballRMaterialNo(); - /* 809BE414 */ u16 getEyeballLMaterialNo(); - /* 809BE41C */ s32 getHeadJointNo(); - /* 809BE424 */ s32 getNeckJointNo(); - /* 809BE42C */ s32 getBackboneJointNo(); + /* 809BE2D0 */ daNpc_Gnd_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) { + // "|%06d:%x|daNpc_Gnd_c -> Construct\n" + OS_REPORT("|%06d:%x|daNpc_Gnd_c -> コンストラクト\n", g_Counter.mCounter0, this); + } + /* 809BE40C */ u16 getEyeballRMaterialNo() { return 3; } + /* 809BE414 */ u16 getEyeballLMaterialNo() { return 2; } + /* 809BE41C */ s32 getHeadJointNo() { return 4; } + /* 809BE424 */ s32 getNeckJointNo() { return 3; } + /* 809BE42C */ s32 getBackboneJointNo() { return 1; } static char* mCutNameList; static cutFunc mCutList[1]; private: - /* 0xE40 */ u8 field_0xe40[0xf80 - 0xe40]; + /* 0xE40 */ NPC_GND_HIO_CLASS* mpHIO; + /* 0xE44 */ dCcD_Cyl mCyl1; /* 0xF80 */ u8 mType; - /* 0xF81 */ u8 field_0xf81[0xfa0 - 0xf81]; -}; - -STATIC_ASSERT(sizeof(daNpc_Gnd_c) == 0xfa0); - -class daNpc_Gnd_Param_c { -public: - /* 809BE434 */ ~daNpc_Gnd_Param_c(); - - struct Data { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 field_0x04; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4a; - /* 0x4C */ s16 field_0x4c; - /* 0x4E */ s16 field_0x4e; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 field_0x62; - /* 0x64 */ f32 field_0x64; - /* 0x68 */ f32 field_0x68; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ f32 field_0x70; - /* 0x74 */ f32 field_0x74; - /* 0x78 */ f32 field_0x78; - /* 0x7C */ f32 field_0x7c; - /* 0x80 */ f32 field_0x80; - /* 0x84 */ f32 field_0x84; - /* 0x88 */ f32 field_0x88; - }; - - static const Data m; + /* 0xF81 */ u8 field_0xf81[0xF84 - 0xF81]; + /* 0xF84 */ u8 field_0xF84; + /* 0xF85 */ u8 field_0xF85[0xF9C - 0xF85]; + /* 0xF9C */ u8 field_0xF9C; }; +STATIC_ASSERT(sizeof(daNpc_Gnd_c) == 0xFA0); #endif /* D_A_NPC_GND_H */ diff --git a/include/d/actor/d_a_npc_toby.h b/include/d/actor/d_a_npc_toby.h index d2cc7ea278..48503f091a 100644 --- a/include/d/actor/d_a_npc_toby.h +++ b/include/d/actor/d_a_npc_toby.h @@ -4,6 +4,37 @@ #include "dolphin/types.h" #include "d/actor/d_a_npc.h" +struct daNpc_Toby_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; + /* 0x8C */ f32 performance_speed; + /* 0x90 */ f32 speedup_performance; + /* 0x94 */ f32 init_play_speed; + /* 0x98 */ f32 switching_speed; +}; + +class daNpc_Toby_Param_c { +public: + /* 80B24978 */ virtual ~daNpc_Toby_Param_c() {} + + static const daNpc_Toby_HIOParam m; +}; + +#if DEBUG +class daNpc_Toby_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Toby_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpc_Toby_HIOParam m; +}; + +#define NPC_TOBY_HIO_CLASS daNpc_Toby_HIO_c +#else +#define NPC_TOBY_HIO_CLASS daNpc_Toby_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpc_Toby_c @@ -12,78 +43,119 @@ * @details * */ -class daNpc_Toby_c : public fopAc_ac_c { +class daNpc_Toby_c : public daNpcT_c { public: + typedef int (daNpc_Toby_c::*cutFunc)(int); + typedef int (daNpc_Toby_c::*actionFunc)(void*); + /* 80B1E64C */ ~daNpc_Toby_c(); - /* 80B1E798 */ void create(); - /* 80B1EA60 */ void CreateHeap(); - /* 80B1EF28 */ void Delete(); - /* 80B1EF5C */ void Execute(); - /* 80B1EF7C */ void Draw(); - /* 80B1F010 */ void createHeapCallBack(fopAc_ac_c*); - /* 80B1F030 */ void ctrlJointCallBack(J3DJoint*, int); - /* 80B1F088 */ void srchToby(void*, void*); - /* 80B1F124 */ void getOtherTobyP(int); - /* 80B1F200 */ void getType(); - /* 80B1F274 */ void isDelete(); + /* 80B1E798 */ int create(); + /* 80B1EA60 */ int CreateHeap(); + /* 80B1EF28 */ int Delete(); + /* 80B1EF5C */ int Execute(); + /* 80B1EF7C */ int Draw(); + /* 80B1F010 */ static int createHeapCallBack(fopAc_ac_c*); + /* 80B1F030 */ static int ctrlJointCallBack(J3DJoint*, int); + /* 80B1F088 */ static void* srchToby(void*, void*); + /* 80B1F124 */ fopAc_ac_c* getOtherTobyP(int); + /* 80B1F200 */ u8 getType(); + /* 80B1F274 */ int isDelete(); /* 80B1F384 */ void reset(); /* 80B1F5AC */ void afterJntAnm(int); /* 80B1F638 */ void setParam(); - /* 80B1F784 */ void checkChangeEvt(); + /* 80B1F784 */ BOOL checkChangeEvt(); /* 80B1F950 */ void setAfterTalkMotion(); /* 80B1FA08 */ void srchActors(); - /* 80B1FB34 */ void evtTalk(); - /* 80B1FBD4 */ void evtCutProc(); + /* 80B1FB34 */ BOOL evtTalk(); + /* 80B1FBD4 */ BOOL evtCutProc(); /* 80B1FC9C */ void action(); /* 80B1FE68 */ void beforeMove(); /* 80B1FF2C */ void setAttnPos(); /* 80B20278 */ void setCollision(); - /* 80B2042C */ bool drawDbgInfo(); + /* 80B2042C */ int drawDbgInfo(); /* 80B20434 */ void drawOtherMdl(); - /* 80B2050C */ void afterSetFaceMotionAnm(int, int, f32, int); - /* 80B20568 */ void afterSetMotionAnm(int, int, f32, int); - /* 80B205F4 */ void selectAction(); - /* 80B20710 */ void chkAction(int (daNpc_Toby_c::*)(void*)); - /* 80B2073C */ void setAction(int (daNpc_Toby_c::*)(void*)); - /* 80B207E4 */ void cutTobyHouseFire(int); - /* 80B20AB0 */ void cutTalkToOneself(int); - /* 80B20FC0 */ void cutRepairSCannon(int); - /* 80B215B4 */ void cutSCannon(int); - /* 80B219F4 */ void cutConversationAboutSCannon(int); - /* 80B22434 */ void cutConversationAboutZra(int); - /* 80B22614 */ void chkAttnZra(); - /* 80B226B0 */ void wait(void*); - /* 80B22D98 */ void walk(void*); - /* 80B22FAC */ void play(void*); - /* 80B23344 */ void talk(void*); - /* 80B24840 */ daNpc_Toby_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**); - /* 80B24920 */ u16 getEyeballMaterialNo(); - /* 80B24928 */ s32 getHeadJointNo(); - /* 80B24930 */ s32 getNeckJointNo(); - /* 80B24938 */ bool getBackboneJointNo(); - /* 80B24940 */ void checkChangeJoint(int); - /* 80B24950 */ void checkRemoveJoint(int); - /* 80B24960 */ s32 getFootLJointNo(); - /* 80B24968 */ s32 getFootRJointNo(); - /* 80B24970 */ bool chkXYItems(); + /* 80B2050C */ bool afterSetFaceMotionAnm(int, int, f32, int); + /* 80B20568 */ bool afterSetMotionAnm(int, int, f32, int); + /* 80B205F4 */ int selectAction(); + /* 80B20710 */ int chkAction(actionFunc); + /* 80B2073C */ int setAction(actionFunc); + /* 80B207E4 */ int cutTobyHouseFire(int); + /* 80B20AB0 */ int cutTalkToOneself(int); + /* 80B20FC0 */ int cutRepairSCannon(int); + /* 80B215B4 */ int cutSCannon(int); + /* 80B219F4 */ int cutConversationAboutSCannon(int); + /* 80B22434 */ int cutConversationAboutZra(int); + /* 80B22614 */ int chkAttnZra(); + /* 80B226B0 */ int wait(void*); + /* 80B22D98 */ int walk(void*); + /* 80B22FAC */ int play(void*); + /* 80B23344 */ int talk(void*); +#if DEBUG + int test(void*); +#endif + /* 80B24840 */ daNpc_Toby_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) { + // "|%06d:%x|daNpc_Toby_c -> Construct\n" + OS_REPORT("|%06d:%x|daNpc_Toby_c -> コンストラクト\n", g_Counter.mCounter0, this); + } + /* 80B24920 */ u16 getEyeballMaterialNo() { return 2; } + /* 80B24928 */ s32 getHeadJointNo() { return 4; } + /* 80B24930 */ s32 getNeckJointNo() { return 3; } + /* 80B24938 */ s32 getBackboneJointNo() { return 1; } + /* 80B24940 */ BOOL checkChangeJoint(int arg0) { return arg0 == 4; } + /* 80B24950 */ BOOL checkRemoveJoint(int arg0) { return arg0 == 8; } + /* 80B24960 */ s32 getFootLJointNo() { return 24; } + /* 80B24968 */ s32 getFootRJointNo() { return 27; } + /* 80B24970 */ BOOL chkXYItems() { return TRUE; } + + int getFlowNodeNo() { + u16 nodeNo = home.angle.x; + u32 rv; + if (nodeNo == 0xffff) { + rv = -1; + } else { + rv = nodeNo; + } + + return rv; + } + + u8 getPathID() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; } + u8 getBitSW() { return (fopAcM_GetParam(this) & 0xFF0000) >> 16; } static char* mCutNameList[7]; - static u8 mCutList[84]; + static cutFunc mCutList[7]; private: - /* 0x568 */ u8 field_0x568[0x1008 - 0x568]; + /* 0x0E40 */ NPC_TOBY_HIO_CLASS* mpHIO; + /* 0x0E44 */ J3DModel* mpTobyModels[1]; + /* 0x0E48 */ dCcD_Cyl mCyl1; + /* 0x0F84 */ u8 mType; + /* 0x0F88 */ daNpcT_ActorMngr_c mActorMngr[4]; + /* 0x0FA8 */ actionFunc mActFunc_0; + /* 0x0FB4 */ actionFunc mActFunc_1; + /* 0x0FC0 */ daNpcT_Path_c mPath; + /* 0x0FE8 */ cXyz field_0x0FE8; + /* 0x0FF4 */ int field_0x0FF4; + /* 0x0FF8 */ f32 mPlaySpeed; + /* 0x0FFC */ u16 field_0x0FFC; + /* 0x0FFE */ u8 field_0x0FFE; + /* 0x0FFF */ u8 field_0x0FFF; + /* 0x1000 */ u8 field_0x1000; + /* 0x1001 */ bool field_0x1001; + /* 0x1002 */ bool field_0x1002; + /* 0x1003 */ u8 field_0x1003; + /* 0x1004 */ u8 field_0x1004; }; STATIC_ASSERT(sizeof(daNpc_Toby_c) == 0x1008); -class daNpc_Toby_Param_c { -public: - /* 80B24978 */ ~daNpc_Toby_Param_c(); - - static u8 const m[156]; -}; - #endif /* D_A_NPC_TOBY_H */ diff --git a/include/d/actor/d_a_obj_automata.h b/include/d/actor/d_a_obj_automata.h index 46b28b4396..6a1939ee0f 100644 --- a/include/d/actor/d_a_obj_automata.h +++ b/include/d/actor/d_a_obj_automata.h @@ -30,7 +30,7 @@ private: /* 0xB28 */ f32 mGroundH; /* 0xB2C */ f32 mAnmPlaySpeed; /* 0xB30 */ u8 field_0xb30; - /* 0xB31 */ u8 field_0xb31; + /* 0xB31 */ u8 mCoNone; public: /* 80BA56EC */ virtual ~daObj_AutoMata_c(); @@ -46,6 +46,14 @@ public: /* 80BA6690 */ void setRoomNo(); /* 80BA66D4 */ void setMtx(); /* 80BA674C */ void setSe(); + + void setAnmPlaySpeed(f32 i_playspeed) { + mAnmPlaySpeed = i_playspeed; + } + + void setCoNone() { + mCoNone = true; + } }; STATIC_ASSERT(sizeof(daObj_AutoMata_c) == 0xb38); |
