Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -1562,7 +1562,7 @@ def MatchingFor(*versions) -> bool:
ActorRel(Equivalent, "d_a_npc_henna"), # weak func order
ActorRel(NonMatching, "d_a_npc_kakashi"),
ActorRel(NonMatching, "d_a_npc_kkri"),
ActorRel(NonMatching, "d_a_npc_kolin"),
ActorRel(Equivalent, "d_a_npc_kolin"), # weak func order
ActorRel(Equivalent, "d_a_npc_maro"), # weak func order
ActorRel(NonMatching, "d_a_npc_taro"),
ActorRel(NonMatching, "d_a_npc_tkj"),
Expand Down Expand Up @@ -1806,7 +1806,7 @@ def MatchingFor(*versions) -> bool:
ActorRel(MatchingFor("GZ2E01"), "d_a_npc_kdk"),
ActorRel(NonMatching, "d_a_npc_kn"),
ActorRel(NonMatching, "d_a_npc_knj"),
ActorRel(NonMatching, "d_a_npc_kolinb"),
ActorRel(Equivalent, "d_a_npc_kolinb"), # weak func order
ActorRel(Equivalent, "d_a_npc_ks"), # weak func order
ActorRel(NonMatching, "d_a_npc_kyury"),
ActorRel(NonMatching, "d_a_npc_len"),
Expand Down
163 changes: 108 additions & 55 deletions include/d/actor/d_a_npc_kolin.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,55 +10,83 @@
*
* @details
*
*/
*/

struct daNpc_Kolin_HIOParam {
/* 0x00 */ daNpcT_HIOParam common;
/* 0x8C */ f32 start_distance; // 走りはじめ距離 - Start Distance
/* 0x90 */ f32 follow_distance; // 追従距離 - Follow Distance
/* 0x94 */ f32 run_speed; // 走る速度 - Run Speed
/* 0x98 */ s16 shy_walk_time; // いじけ歩き時間 - Shy Walk Time
/* 0x9A */ s16 sulk_time; // いじけ時間 - Sulk Time
/* 0x9C */ f32 yeah_yeah; // ハイハイ - Yeah Yeah (Likely a sarcastic connotation)
};

class daNpc_Kolin_Param_c {
public:
/* 8055A4E8 */ virtual ~daNpc_Kolin_Param_c() {}

static daNpc_Kolin_HIOParam const m;
};

class daNpc_Kolin_c : public daNpcT_c {
public:
typedef int (daNpc_Kolin_c::*cutFunc)(int);
typedef int (daNpc_Kolin_c::*actionFunc)(void*);

/* 80553FEC */ ~daNpc_Kolin_c();
/* 80554138 */ void create();
/* 80554414 */ void CreateHeap();
/* 80554930 */ void Delete();
/* 80554964 */ void Execute();
/* 80554984 */ void Draw();
/* 80554A18 */ void createHeapCallBack(fopAc_ac_c*);
/* 80554A38 */ void ctrlJointCallBack(J3DJoint*, int);
/* 80554A90 */ void getType();
/* 80554B30 */ void isDelete();
/* 80554138 */ cPhs__Step create();
/* 80554414 */ int CreateHeap();
/* 80554930 */ int Delete();
/* 80554964 */ int Execute();
/* 80554984 */ int Draw();
/* 80554A18 */ static int createHeapCallBack(fopAc_ac_c*);
/* 80554A38 */ static int ctrlJointCallBack(J3DJoint*, int);
/* 80554A90 */ u8 getType();
/* 80554B30 */ BOOL isDelete();
/* 80554CB0 */ void reset();
/* 805552DC */ void srchActors();
/* 80555E38 */ void selectAction();
/* 80555F28 */ void chkAction(int (daNpc_Kolin_c::*)(void*));
/* 80555F54 */ void setAction(int (daNpc_Kolin_c::*)(void*));
/* 80555E38 */ int selectAction();
/* 80555F28 */ BOOL chkAction(actionFunc);
/* 80555F54 */ int setAction(actionFunc);
/* 80555FFC */ void calcFollowSpeedAndAngle(fopAc_ac_c*, int, int);
/* 805563BC */ void followPlayer(int);
/* 805567AC */ void lookup(u8);
/* 805568AC */ void cutNoRide(int);
/* 80556A04 */ void cutHail(int);
/* 80556DB4 */ void cutGiveMeWoodSwd(int);
/* 80557054 */ void cutGetWoodSwd(int);
/* 805576C4 */ void cutConversationAboutLoopHole(int);
/* 805579DC */ void cutCacaricoConversation(int);
/* 80557BD4 */ void cutConversationAboutDeathMt(int);
/* 80557C6C */ void cutConversationAboutGoron(int);
/* 80557D04 */ void cutClothTry(int);
/* 80557E38 */ void cutThankYou(int);
/* 80557ED8 */ void wait(void*);
/* 80558698 */ void timidWalk(void*);
/* 80558AF8 */ void follow(void*);
/* 80558C4C */ void clothWait(void*);
/* 80558E90 */ void talk(void*);
/* 8055A3B8 */ daNpc_Kolin_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**);

/* 8055A4B8 */ virtual int checkChangeJoint(int);
/* 8055A4C8 */ virtual int checkRemoveJoint(int);
/* 8055A4B0 */ virtual s32 getBackboneJointNo();
/* 8055A4A8 */ virtual s32 getNeckJointNo();
/* 8055A4A0 */ virtual s32 getHeadJointNo();
/* 8055A4D8 */ virtual s32 getFootLJointNo();
/* 8055A4E0 */ virtual s32 getFootRJointNo();
/* 8055A498 */ virtual u16 getEyeballMaterialNo();
/* 805568AC */ int cutNoRide(int);
/* 80556A04 */ int cutHail(int);
/* 80556DB4 */ int cutGiveMeWoodSwd(int);
/* 80557054 */ int cutGetWoodSwd(int);
/* 805576C4 */ int cutConversationAboutLoopHole(int);
/* 805579DC */ int cutCacaricoConversation(int);
/* 80557BD4 */ int cutConversationAboutDeathMt(int);
/* 80557C6C */ int cutConversationAboutGoron(int);
/* 80557D04 */ int cutClothTry(int);
/* 80557E38 */ int cutThankYou(int);
/* 80557ED8 */ int wait(void*);
/* 80558698 */ int timidWalk(void*);
/* 80558AF8 */ int follow(void*);
/* 80558C4C */ int clothWait(void*);
/* 80558E90 */ int talk(void*);
/* 8055A3B8 */ daNpc_Kolin_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) {}
/* 8055A4B8 */ virtual int checkChangeJoint(int i_joint) { return i_joint == 4; }
/* 8055A4C8 */ virtual int checkRemoveJoint(int i_joint) { return i_joint == 8; }
/* 8055A4B0 */ virtual s32 getBackboneJointNo() { return 1; }
/* 8055A4A8 */ virtual s32 getNeckJointNo() { return 3; }
/* 8055A4A0 */ virtual s32 getHeadJointNo() { return 4; }
/* 8055A4D8 */ virtual s32 getFootLJointNo() { return 22; }
/* 8055A4E0 */ virtual s32 getFootRJointNo() { return 25; }
/* 8055A498 */ virtual u16 getEyeballMaterialNo() { return 2; }
/* 80554EBC */ virtual void afterJntAnm(int);
/* 80554F48 */ virtual void setParam();
/* 80555118 */ virtual BOOL checkChangeEvt();
Expand All @@ -74,11 +102,25 @@ class daNpc_Kolin_c : public daNpcT_c {
/* 80555DC4 */ virtual void changeAnm(int*, int*);
/* 80555DEC */ virtual void changeBck(int*, int*);

static void* mCutNameList[11];
static u8 mCutList[132];
static char* mCutNameList[11];
static cutFunc mCutList[11];

u32 getFlowNodeNo() {
u16 nodeNo = home.angle.x;
u32 rv;
if (nodeNo == 0xffff) {
rv = -1;
} else {
rv = nodeNo;
}
return rv;
}

u32 getPathID() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; }
u32 getBitSW() { return (fopAcM_GetParam(this) & 0xFF0000) >> 16; }

BOOL orderNoRideEvt() {
if (field_0xf84 == 11) {
if (mType == 11) {
s16 var_r28 = (s16)(fopAcM_searchPlayerAngleY(this) - home.angle.y);
int var_r29 = 3;

Expand All @@ -103,19 +145,30 @@ class daNpc_Kolin_c : public daNpcT_c {
}

private:
/* 0x0E40 */ u8 field_0xe40[0xF84 - 0xE40];
/* 0x0F84 */ u8 field_0xf84;
/* 0x0F85 */ u8 field_0xf85[0x1020 - 0xF85];
/* 0x0E40 */ u8 field_0xe40[0xe44 - 0xe40];
/* 0x0E44 */ J3DModel* mpClothModel;
/* 0x0E48 */ dCcD_Cyl field_0xe48;
/* 0x0F84 */ u8 mType;
/* 0x0F88 */ daNpcT_ActorMngr_c mActorMngr[5];
/* 0x0FB0 */ daNpcT_Path_c mPath;
/* 0x0FD8 */ actionFunc mNextAction;
/* 0x0FE4 */ actionFunc mAction;
/* 0x0FF0 */ u8 field_0xff0[0xffc - 0xff0];
/* 0x0FFC */ int field_0xffc;
/* 0x1000 */ int field_0x1000;
/* 0x1004 */ int field_0x1004;
/* 0x1008 */ int field_0x1008;
/* 0x100C */ u8 field_0x100c[0x1010 - 0x100c];
/* 0x1010 */ f32 field_0x1010;
/* 0x1014 */ u8 field_0x1014;
/* 0x1015 */ u8 field_0x1015;
/* 0x1016 */ u8 field_0x1016;
/* 0x1017 */ u8 field_0x1017;
/* 0x1018 */ u8 field_0x1018;
/* 0x1019 */ u8 field_0x1019[0x101c - 0x1019];
/* 0x101C */ u8 field_0x101c;
};

STATIC_ASSERT(sizeof(daNpc_Kolin_c) == 0x1020);

class daNpc_Kolin_Param_c {
public:
/* 8055A4E8 */ ~daNpc_Kolin_Param_c();

static u8 const m[160];
};


#endif /* D_A_NPC_KOLIN_H */
Loading