d_a_npc_zelro matching and some npct's linked (#2649)

* npc_zero matching and some other npcts cleaned and linked

* debug fix

* okay actual debug fix... i hope

* this isnt funny anymore

* please

* this should fix things

* added JP matching to zelR and zelRo

* added attention flag enum
This commit is contained in:
Carco_21 2025-09-15 02:44:07 -07:00 committed by GitHub
parent 9b4b9003c4
commit e3353f2c56
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 1015 additions and 1452 deletions

View File

@ -1913,8 +1913,8 @@ config.libs = [
ActorRel(NonMatching, "d_a_npc_ykw"),
ActorRel(NonMatching, "d_a_npc_zanb"),
ActorRel(MatchingFor("GZ2E01", "GZ2J01"), "d_a_npc_zant"),
ActorRel(NonMatching, "d_a_npc_zelR"),
ActorRel(NonMatching, "d_a_npc_zelRo"),
ActorRel(MatchingFor("GZ2E01", "GZ2J01"), "d_a_npc_zelR"),
ActorRel(MatchingFor("GZ2E01", "GZ2J01"), "d_a_npc_zelRo"),
ActorRel(MatchingFor("GZ2E01", "GZ2J01"), "d_a_npc_zelda"),
ActorRel(Equivalent, "d_a_npc_zra", extra_cflags=[DANPCF_C_HACK]), # regalloc
ActorRel(NonMatching, "d_a_npc_zrc", extra_cflags=[DANPCF_C_HACK]),

View File

@ -10,9 +10,74 @@
*
* @details
*
*/
*/
struct daNpc_midP_HIOParam {
/* 0x0 */ daNpcT_HIOParam common;
};
class daNpc_midP_HIO_c : public mDoHIO_entry_c {
/* 0x8 */ daNpc_midP_HIOParam param;
};
class daNpc_midP_Param_c {
public:
/* 80A73954 */ virtual ~daNpc_midP_Param_c() {}
static const daNpc_midP_HIOParam m;
};
class daNpc_midP_c : public daNpcT_c {
public:
enum Joint {
/* 0x00 */ JNT_CENTER,
/* 0x01 */ JNT_BACKBONE1,
/* 0x02 */ JNT_BACKBONE2,
/* 0x03 */ JNT_NECK,
/* 0x04 */ JNT_HEAD,
/* 0x05 */ JNT_CHIN,
/* 0x06 */ JNT_MAYUL,
/* 0x07 */ JNT_MAYUR,
/* 0x08 */ JNT_MOUTH,
/* 0x09 */ JNT_SHOULDERL,
/* 0x0A */ JNT_ARML1,
/* 0x0B */ JNT_ARML2,
/* 0x0C */ JNT_HANDL,
/* 0x0D */ JNT_FINGERL1,
/* 0x0E */ JNT_FINGERL2,
/* 0x0F */ JNT_THAMBL,
/* 0x10 */ JNT_MANTL1,
/* 0x11 */ JNT_MANTL2,
/* 0x12 */ JNT_MANT_ANIMEL1,
/* 0x13 */ JNT_SHOULDERR,
/* 0x14 */ JNT_ARMR1,
/* 0x15 */ JNT_ARMR2,
/* 0x16 */ JNT_HANDR,
/* 0x17 */ JNT_FINGERR1,
/* 0x18 */ JNT_FINGERR2,
/* 0x19 */ JNT_THAMBR,
/* 0x1A */ JNT_MANTR1,
/* 0x1B */ JNT_MANTR2,
/* 0x1C */ JNT_MANT_ANIMER1,
/* 0x1D */ JNT_WAIST,
/* 0x1E */ JNT_LEGL1,
/* 0x1F */ JNT_LEGL2,
/* 0x20 */ JNT_FOOTL,
/* 0x21 */ JNT_TOEL,
/* 0x22 */ JNT_LEGR1,
/* 0x23 */ JNT_LEGR2,
/* 0x24 */ JNT_FOOTR,
/* 0x25 */ JNT_TOER,
/* 0x26 */ JNT_MANTC1,
/* 0x27 */ JNT_MANTC2,
/* 0x28 */ JNT_MANT_ANIMEL2,
/* 0x29 */ JNT_MANT_ANIMER2,
/* 0x2A */ JNT_SKIRTB1,
/* 0x2B */ JNT_SKIRTB2,
/* 0x2C */ JNT_SKIRTF1,
/* 0x2D */ JNT_SKIRTF2,
};
typedef int (daNpc_midP_c::*cutFunc)(int);
typedef int (daNpc_midP_c::*actionFunc)(void*);
@ -56,11 +121,11 @@ public:
daNpcT_c(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8) {}
/* 80A7390C */ u16 getEyeballRMaterialNo() { return 3; }
/* 80A73914 */ u16 getEyeballLMaterialNo() { return 2; }
/* 80A7391C */ s32 getHeadJointNo() { return 4; }
/* 80A73924 */ s32 getNeckJointNo() { return 3; }
/* 80A7392C */ s32 getBackboneJointNo() { return 2; }
/* 80A73934 */ BOOL checkChangeJoint(int param_0) { return param_0 == 4; }
/* 80A73944 */ BOOL checkRemoveJoint(int param_0) { return param_0 == 8; }
/* 80A7391C */ s32 getHeadJointNo() { return JNT_HEAD; }
/* 80A73924 */ s32 getNeckJointNo() { return JNT_NECK; }
/* 80A7392C */ s32 getBackboneJointNo() { return JNT_BACKBONE2; }
/* 80A73934 */ BOOL checkChangeJoint(int i_joint) { return i_joint == JNT_HEAD; }
/* 80A73944 */ BOOL checkRemoveJoint(int i_joint) { return i_joint == JNT_MOUTH; }
int getFlowNodeNo() {
u16 nodeNo = home.angle.x;
@ -85,52 +150,4 @@ private:
STATIC_ASSERT(sizeof(daNpc_midP_c) == 0xfa0);
class daNpc_midP_Param_c {
public:
/* 80A73954 */ virtual ~daNpc_midP_Param_c() {}
struct Data {
/* 0x00 */ f32 field_0x00;
/* 0x04 */ f32 mGravity;
/* 0x08 */ f32 mScale;
/* 0x0C */ f32 field_0x0c;
/* 0x10 */ f32 mWeight;
/* 0x14 */ f32 mCylH;
/* 0x18 */ f32 mWallH;
/* 0x1C */ f32 mWallR;
/* 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 mMorfFrames;
/* 0x48 */ s16 field_0x48;
/* 0x4A */ s16 field_0x4a;
/* 0x4C */ s16 field_0x4c;
/* 0x4E */ s16 field_0x4e;
/* 0x50 */ f32 mAttnFovY;
/* 0x54 */ f32 field_0x54;
/* 0x58 */ f32 field_0x58;
/* 0x5C */ f32 field_0x5c;
/* 0x60 */ s16 field_0x60;
/* 0x62 */ s16 field_0x62;
/* 0x64 */ int field_0x64;
/* 0x68 */ int 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;
};
#endif /* D_A_NPC_MIDP_H */

View File

@ -10,11 +10,9 @@
*
* @details
*
*/
struct daNpc_Saru_HIOParam
{
*/
struct daNpc_Saru_HIOParam {
/* 0x00 */ daNpcT_HIOParam common;
/* 0x8C */ s16 scared_time; // 怯える時間 - Scared Time
/* 0x8E */ s16 field_0x8e;

View File

@ -10,7 +10,23 @@
*
* @details
*
*/
*/
struct daNpc_ZelR_HIOParam {
/* 0x0 */ daNpcT_HIOParam common;
};
class daNpc_ZelR_HIO_c : public mDoHIO_entry_c {
/* 0x8 */ daNpc_ZelR_HIOParam param;
};
class daNpc_ZelR_Param_c {
public:
/* 80B71A74 */ virtual ~daNpc_ZelR_Param_c() {};
static const daNpc_ZelR_HIOParam m;
};
class daNpc_ZelR_c : public daNpcT_c {
public:
typedef BOOL (daNpc_ZelR_c::*ActionFn)(void*);
@ -57,10 +73,10 @@ public:
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)
{}
/* 80B71A34 */ u16 getEyeballRMaterialNo();
/* 80B71A3C */ u16 getEyeballLMaterialNo();
/* 80B71A44 */ s32 getHeadJointNo();
/* 80B71A4C */ s32 getBackboneJointNo();
/* 80B71A34 */ u16 getEyeballRMaterialNo() { return 3; }
/* 80B71A3C */ u16 getEyeballLMaterialNo() { return 2; }
/* 80B71A44 */ s32 getHeadJointNo() { return 3; }
/* 80B71A4C */ s32 getBackboneJointNo() { return 1; }
/* 80B71A54 */ BOOL checkChangeJoint(int param_1) { return param_1 == 3; };
/* 80B71A64 */ BOOL checkRemoveJoint(int param_1) { return param_1 == 13; };
@ -71,7 +87,6 @@ private:
/* 0xE40 */ u8 field_0xe40[0xe44 - 0xe40];
/* 0xE44 */ dCcD_Cyl mCyl;
/* 0xF80 */ u8 mType;
/* 0xF81 */ u8 field_0xf81[0xf84 - 0xf81];
/* 0xF84 */ ActionFn field_0xf84;
/* 0xF90 */ ActionFn field_0xf90;
/* 0xF9C */ daNpcT_Path_c mPath;
@ -80,53 +95,5 @@ private:
STATIC_ASSERT(sizeof(daNpc_ZelR_c) == 0xfc8);
class daNpc_ZelR_Param_c {
public:
/* 80B71A74 */ virtual ~daNpc_ZelR_Param_c() {};
struct Data {
/* 0x00 */ f32 field_0x0;
/* 0x04 */ f32 mGravity;
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 field_0xc;
/* 0x10 */ f32 mWeight;
/* 0x14 */ f32 mCylH;
/* 0x18 */ f32 mWallH;
/* 0x1C */ f32 mWallR;
/* 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 mMorfFrames;
/* 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;
};
#endif /* D_A_NPC_ZELR_H */

View File

@ -10,66 +10,145 @@
*
* @details
*
*/
class daNpc_ZelRo_c : public fopAc_ac_c {
*/
struct daNpc_ZelRo_HIOParam {
/* 0x0 */ daNpcT_HIOParam common;
};
class daNpc_ZelRo_HIO_c : public mDoHIO_entry_c {
/* 0x8 */ daNpc_ZelRo_HIOParam param;
};
class daNpc_ZelRo_Param_c {
public:
/* 80B74BF0 */ virtual ~daNpc_ZelRo_Param_c() {}
static daNpc_ZelRo_HIOParam const m;
};
class daNpc_ZelRo_c : public daNpcT_c {
public:
enum Material {
/* 0x0 */ SC_EYE_L_V,
/* 0x1 */ SC_EYE_R_V,
/* 0x2 */ ZELR_ROBE01_M_V,
/* 0x3 */ ZELR_ROBE02_M_V,
/* 0x4 */ ZELDA_BODY_M_V,
/* 0x5 */ ZELDA_DOUBLESIDE_M_V,
/* 0x6 */ ZELDA_EYEBALL_L_V,
/* 0x7 */ ZELDA_EYEBALL_R_V,
/* 0x8 */ ZELDA_HAIR_M_V,
/* 0x9 */ ZELDA_JEWEL_M_V,
};
enum Joint {
/* 0x00 */ JNT_CENTER,
/* 0x01 */ JNT_BACKBONE1,
/* 0x02 */ JNT_BACKBONE2,
/* 0x03 */ JNT_NECK,
/* 0x04 */ JNT_HEAD,
/* 0x05 */ JNT_CHIN,
/* 0x06 */ JNT_MANT,
/* 0x07 */ JNT_MAYUL,
/* 0x08 */ JNT_MAYUR,
/* 0x09 */ JNT_MOMIL1,
/* 0x0A */ JNT_MOMIL2,
/* 0x0B */ JNT_MOMIL3,
/* 0x0C */ JNT_MOMIR1,
/* 0x0D */ JNT_MOMIR2,
/* 0x0E */ JNT_MOMIR3,
/* 0x0F */ JNT_MOUTH,
/* 0x10 */ JNT_SHOULDERL,
/* 0x11 */ JNT_ARML1,
/* 0x12 */ JNT_ARML2,
/* 0x13 */ JNT_HANDL,
/* 0x14 */ JNT_FINGERL1,
/* 0x15 */ JNT_FINGERL2,
/* 0x16 */ JNT_THAMBL,
/* 0x17 */ JNT_SHOULDERR,
/* 0x18 */ JNT_ARMR1,
/* 0x19 */ JNT_ARMR2,
/* 0x1A */ JNT_HANDR,
/* 0x1B */ JNT_FINGERR1,
/* 0x1C */ JNT_FINGERR2,
/* 0x1D */ JNT_THAMBR,
/* 0x1E */ JNT_WAIST,
/* 0x1F */ JNT_SKARTL_01,
/* 0x20 */ JNT_SKARTL_02,
/* 0x21 */ JNT_SKARTL_03,
/* 0x22 */ JNT_SKARTR_01,
/* 0x23 */ JNT_SKARTR_02,
/* 0x24 */ JNT_SKARTR_03,
};
typedef int (daNpc_ZelRo_c::*actionFunc)(void*);
typedef int (daNpc_ZelRo_c::*cutFunc)(int);
/* 80B71FAC */ ~daNpc_ZelRo_c();
/* 80B720E4 */ void create();
/* 80B72378 */ void CreateHeap();
/* 80B727E4 */ void Delete();
/* 80B72818 */ void Execute();
/* 80B72838 */ void Draw();
/* 80B728FC */ void createHeapCallBack(fopAc_ac_c*);
/* 80B7291C */ void ctrlJointCallBack(J3DJoint*, int);
/* 80B72974 */ void getType();
/* 80B72994 */ void getFlowNodeNo();
/* 80B729B0 */ void getPath();
/* 80B729BC */ void isDelete();
/* 80B720E4 */ cPhs__Step create();
/* 80B72378 */ int CreateHeap();
/* 80B727E4 */ int Delete();
/* 80B72818 */ int Execute();
/* 80B72838 */ int Draw();
/* 80B728FC */ static int createHeapCallBack(fopAc_ac_c*);
/* 80B7291C */ static int ctrlJointCallBack(J3DJoint*, int);
/* 80B72974 */ u8 getType();
/* 80B72994 */ int getFlowNodeNo();
/* 80B729B0 */ u8 getPath();
/* 80B729BC */ BOOL isDelete();
/* 80B72A10 */ void reset();
/* 80B72B8C */ void afterJntAnm(int);
/* 80B72C18 */ void ctrlBtk();
/* 80B72C18 */ BOOL ctrlBtk();
/* 80B72D24 */ void setParam();
/* 80B72E18 */ void setAfterTalkMotion();
/* 80B72E78 */ void srchActors();
/* 80B72E7C */ void evtTalk();
/* 80B72F7C */ void evtCutProc();
/* 80B72E7C */ BOOL evtTalk();
/* 80B72F7C */ BOOL evtCutProc();
/* 80B73044 */ void action();
/* 80B73194 */ void beforeMove();
/* 80B7320C */ void setAttnPos();
/* 80B7342C */ void setCollision();
/* 80B7355C */ bool drawDbgInfo();
/* 80B73564 */ void selectAction();
/* 80B735AC */ void chkAction(int (daNpc_ZelRo_c::*)(void*));
/* 80B735D8 */ void setAction(int (daNpc_ZelRo_c::*)(void*));
/* 80B73680 */ void wait(void*);
/* 80B7382C */ void talk(void*);
/* 80B74AE8 */ daNpc_ZelRo_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**);
/* 80B74BA8 */ u16 getEyeballRMaterialNo();
/* 80B74BB0 */ u16 getEyeballLMaterialNo();
/* 80B74BB8 */ s32 getHeadJointNo();
/* 80B74BC0 */ s32 getNeckJointNo();
/* 80B74BC8 */ bool getBackboneJointNo();
/* 80B74BD0 */ void checkChangeJoint(int);
/* 80B74BE0 */ void checkRemoveJoint(int);
/* 80B7355C */ int drawDbgInfo();
/* 80B73564 */ BOOL selectAction();
/* 80B735AC */ BOOL chkAction(actionFunc);
/* 80B735D8 */ BOOL setAction(actionFunc);
/* 80B73680 */ int wait(void*);
/* 80B7382C */ int talk(void*);
#ifdef DEBUG
int test(void*);
#endif
/* 80B74AE8 */ daNpc_ZelRo_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) {}
/* 80B74BA8 */ u16 getEyeballRMaterialNo() { return ZELDA_EYEBALL_R_V; }
/* 80B74BB0 */ u16 getEyeballLMaterialNo() { return ZELDA_EYEBALL_L_V; }
/* 80B74BB8 */ s32 getHeadJointNo() { return JNT_HEAD; }
/* 80B74BC0 */ s32 getNeckJointNo() { return JNT_NECK; }
/* 80B74BC8 */ s32 getBackboneJointNo() { return JNT_BACKBONE1; }
/* 80B74BD0 */ BOOL checkChangeJoint(int i_joint) { return i_joint == JNT_HEAD; }
/* 80B74BE0 */ BOOL checkRemoveJoint(int i_joint) { return i_joint == JNT_MOUTH; }
static void* mCutNameList;
static u8 mCutList[12];
static char* mCutNameList;
static cutFunc mCutList[1];
private:
/* 0x568 */ u8 field_0x568[0xfc8 - 0x568];
/* 0xE40 */ daNpc_ZelRo_HIO_c* mHIO;
/* 0xE44 */ dCcD_Cyl mCyl;
/* 0xF80 */ u8 mType;
/* 0xF84 */ actionFunc mNextAction;
/* 0xF90 */ actionFunc mAction;
/* 0xF9C */ daNpcT_Path_c mPath;
/* 0xFC4 */ u8 field_0xfc4;
};
STATIC_ASSERT(sizeof(daNpc_ZelRo_c) == 0xfc8);
class daNpc_ZelRo_Param_c {
public:
/* 80B74BF0 */ ~daNpc_ZelRo_Param_c();
static u8 const m[140];
};
#endif /* D_A_NPC_ZELRO_H */

View File

@ -6,11 +6,24 @@
#include "d/dolzel_rel.h"
#include "d/actor/d_a_npc_midp.h"
#include "SSystem/SComponent/c_counter.h"
enum midP_RES_File_ID {
/* BCK */
/* 0x6 */ BCK_MIDP_WAIT_A = 0x6,
/* BMDR */
/* 0x9 */ BMDR_MIDP = 0x9,
/* BTK */
/* 0xC */ BTK_MIDP = 0xC,
/* BTP */
/* 0xF */ BTP_MIDP = 0xF,
};
/* 80A73AD4-80A73ADC 000020 0008+00 1/1 0/0 0/0 .data l_bmdData */
static int l_bmdData[2][1] = {
{9}, {1}
static int l_bmdData[1][2] = {
{BMDR_MIDP, 1},
};
/* 80A73ADC-80A73AEC -00001 0010+00 0/1 0/0 0/0 .data l_evtList */
@ -73,15 +86,15 @@ daNpc_midP_c::~daNpc_midP_c() {
}
/* 80A739C0-80A73A4C 000000 008C+00 6/6 0/0 0/0 .rodata m__18daNpc_midP_Param_c */
daNpc_midP_Param_c::Data const daNpc_midP_Param_c::m = {
daNpc_midP_HIOParam const daNpc_midP_Param_c::m = {
210.0f,
-3.0f, // mGravity
1.0f, // mScale
-3.0f,
1.0f,
500.0f,
255.0f, // mWeight
190.0f, // mCylH
35.0f, // mWallH
30.0f, // mWallR
255.0f,
190.0f,
35.0f,
30.0f,
0.0f,
0.0f,
10.0f,
@ -91,12 +104,12 @@ daNpc_midP_Param_c::Data const daNpc_midP_Param_c::m = {
45.0f,
-45.0f,
0.6f,
12.0f, // mMorfFrames
12.0f,
3,
6,
5,
6,
110.0f, // mAttnFovY
110.0f,
0.0f,
0.0f,
0.0f,
@ -104,13 +117,16 @@ daNpc_midP_Param_c::Data const daNpc_midP_Param_c::m = {
8,
0,
0,
0,
false,
false,
4.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
0.0f,
};
@ -147,7 +163,7 @@ int daNpc_midP_c::create() {
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
mCcStts.Init(daNpc_midP_Param_c::m.mWeight, 0, this);
mCcStts.Init(daNpc_midP_Param_c::m.common.weight, 0, this);
mCyl.Set(mCcDCyl);
mCyl.SetStts(&mCcStts);
mCyl.SetTgHitCallback(tgHitCallBack);
@ -335,27 +351,27 @@ void daNpc_midP_c::setParam() {
selectAction();
srchActors();
s16 sVar1 = daNpc_midP_Param_c::m.field_0x48;
s16 sVar2 = daNpc_midP_Param_c::m.field_0x4a;
s16 sVar3 = daNpc_midP_Param_c::m.field_0x4c;
s16 sVar4 = daNpc_midP_Param_c::m.field_0x4e;
s16 sVar1 = daNpc_midP_Param_c::m.common.talk_distance;
s16 sVar2 = daNpc_midP_Param_c::m.common.talk_angle;
s16 sVar3 = daNpc_midP_Param_c::m.common.attention_distance;
s16 sVar4 = daNpc_midP_Param_c::m.common.attention_angle;
attention_info.distances[0] = daNpcT_getDistTableIdx(sVar3, sVar4);
attention_info.distances[1] = attention_info.distances[0];
attention_info.distances[3] = daNpcT_getDistTableIdx(sVar1, sVar2);
attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
scale.setall(daNpc_midP_Param_c::m.mScale);
mCcStts.SetWeight(daNpc_midP_Param_c::m.mWeight);
mCylH = daNpc_midP_Param_c::m.mCylH;
mWallR = daNpc_midP_Param_c::m.mWallR;
mAttnFovY = daNpc_midP_Param_c::m.mAttnFovY;
scale.setall(daNpc_midP_Param_c::m.common.scale);
mCcStts.SetWeight(daNpc_midP_Param_c::m.common.weight);
mCylH = daNpc_midP_Param_c::m.common.height;
mWallR = daNpc_midP_Param_c::m.common.width;
mAttnFovY = daNpc_midP_Param_c::m.common.fov;
mAcchCir.SetWallR(mWallR);
mAcchCir.SetWallH(daNpc_midP_Param_c::m.mWallH);
mRealShadowSize = daNpc_midP_Param_c::m.field_0x0c;
mExpressionMorfFrame = daNpc_midP_Param_c::m.field_0x6c;
mMorfFrames = daNpc_midP_Param_c::m.mMorfFrames;
gravity = daNpc_midP_Param_c::m.mGravity;
mAcchCir.SetWallH(daNpc_midP_Param_c::m.common.knee_length);
mRealShadowSize = daNpc_midP_Param_c::m.common.real_shadow_size;
mExpressionMorfFrame = daNpc_midP_Param_c::m.common.expression_morf_frame;
mMorfFrames = daNpc_midP_Param_c::m.common.morf_frame;
gravity = daNpc_midP_Param_c::m.common.gravity;
}
/* 80A71A98-80A71AF8 000F18 0060+00 1/0 0/0 0/0 .text setAfterTalkMotion__12daNpc_midP_cFv */
@ -430,7 +446,6 @@ void daNpc_midP_c::beforeMove() {
/* 80A71E28-80A72064 0012A8 023C+00 1/0 0/0 0/0 .text setAttnPos__12daNpc_midP_cFv */
void daNpc_midP_c::setAttnPos() {
// NONMATCHING
cXyz sp3c(10.0f, -30.0f, 0.0f);
cXyz sp48(10.0f, 0.0f, 0.0f);
@ -438,11 +453,11 @@ void daNpc_midP_c::setAttnPos() {
f32 dVar5 = cM_s2rad(mCurAngle.y - field_0xd7e.y);
J3DModel* model = mpMorf[0]->getModel();
mJntAnm.setParam(this, model, &sp3c, getBackboneJointNo(), getNeckJointNo(),
getHeadJointNo(), daNpc_midP_Param_c::m.field_0x24, daNpc_midP_Param_c::m.field_0x20,
daNpc_midP_Param_c::m.field_0x2c, daNpc_midP_Param_c::m.field_0x28,
daNpc_midP_Param_c::m.field_0x34, daNpc_midP_Param_c::m.field_0x30,
daNpc_midP_Param_c::m.field_0x3c, daNpc_midP_Param_c::m.field_0x38,
daNpc_midP_Param_c::m.field_0x40, dVar5, &sp48);
getHeadJointNo(), daNpc_midP_Param_c::m.common.body_angleX_min, daNpc_midP_Param_c::m.common.body_angleX_max,
daNpc_midP_Param_c::m.common.body_angleY_min, daNpc_midP_Param_c::m.common.body_angleY_max,
daNpc_midP_Param_c::m.common.head_angleX_min, daNpc_midP_Param_c::m.common.head_angleX_max,
daNpc_midP_Param_c::m.common.head_angleY_min, daNpc_midP_Param_c::m.common.head_angleY_max,
daNpc_midP_Param_c::m.common.neck_rotation_ratio, dVar5, &sp48);
mJntAnm.calcJntRad(0.2f, 1.0f, dVar5);
setMtx();
@ -452,7 +467,7 @@ void daNpc_midP_c::setAttnPos() {
mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0);
attention_info.position = current.pos;
attention_info.position.y += daNpc_midP_Param_c::m.field_0x00;
attention_info.position.y += daNpc_midP_Param_c::m.common.attention_offset;
}
/* 80A72064-80A7216C 0014E4 0108+00 1/0 0/0 0/0 .text setCollision__12daNpc_midP_cFv */
@ -640,9 +655,6 @@ static int daNpc_midP_IsDelete(void* i_this) {
return 1;
}
/* 80A73D50-80A73D5C 000008 000C+00 1/1 0/0 0/0 .bss @3811 */
static u8 lit_3811[12];
/* 80A73D5C-80A73D60 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */
static daNpc_midP_Param_c l_HIO;

View File

@ -25,7 +25,8 @@ enum saru_RES_File_ID {
};
enum RES_Name {
/* 0x1 */ NPC_KS = 0x1,
/* 0x0 */ NONE,
/* 0x1 */ NPC_KS,
/* 0x2 */ SARU_TW,
/* 0x3 */ SARU,
};
@ -246,7 +247,6 @@ daNpc_Saru_c::~daNpc_Saru_c() {
deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList);
}
/* ############################################################################################## */
/* 80AC44F8-80AC4588 000000 0090+00 9/9 0/0 0/0 .rodata m__18daNpc_Saru_Param_c */
daNpc_Saru_HIOParam const daNpc_Saru_Param_c::m = {
140.0f,
@ -359,26 +359,20 @@ int daNpc_Saru_c::CreateHeap() {
2, 3,
};
void* modelData = NULL;
J3DModel* model = NULL;
BOOL uVar1 = mTwilight == true ? TRUE : FALSE;
int arcNameIdx = l_bmdData[uVar1][1];
int resName = l_bmdData[uVar1][0];
modelData = dComIfG_getObjectRes(l_resNameList[arcNameIdx], resName);
int bmdIdx = mTwilight == true ? TRUE : FALSE;
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_resNameList[l_bmdData[bmdIdx][1]], l_bmdData[bmdIdx][0]));
if (modelData == NULL) {
return 0;
}
u32 temp1 = 0x11020084;
mpMorf[0] = new mDoExt_McaMorfSO((J3DModelData*)modelData, NULL,
NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, temp1);
mpMorf[0] = new mDoExt_McaMorfSO(modelData, NULL,
NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11020084);
if (mpMorf[0] == NULL || mpMorf[0]->getModel() == NULL) {
return 0;
}
model = mpMorf[0]->getModel();
model = mpMorf[0]->getModel();
for (u16 i = 0; i < ((J3DModelData*)modelData)->getJointNum(); i++) {
((J3DModelData*)modelData)->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
J3DModel* model = mpMorf[0]->getModel();
for (u16 i = 0; i < modelData->getJointNum(); i++) {
modelData->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
}
model->setUserArea((uintptr_t)this);
@ -391,7 +385,7 @@ int daNpc_Saru_c::CreateHeap() {
}
if (modelData != NULL) {
mpRoseModels[i] = mDoExt_J3DModel__create((J3DModelData*)modelData, 0x80000, 0x11000084);
mpRoseModels[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
} else {
mpRoseModels[i] = NULL;
}
@ -1194,33 +1188,35 @@ int daNpc_Saru_c::wait(void* param_1) {
/* 80AC2FD8-80AC31B4 002C98 01DC+00 3/0 0/0 0/0 .text talk__12daNpc_Saru_cFPv */
int daNpc_Saru_c::talk(void* param_1) {
switch (mMode) {
case 0:
case 1:
if (mStagger.checkStagger() == 0) {
initTalk(mFlowNodeNo, NULL);
mMode = 2;
}
case 2:
if (mStagger.checkStagger() == 0) {
if (mTwilight != false || mPlayerAngle == mCurAngle.y) {
if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) {
mPlayerActorMngr.entry(daPy_getPlayerActorClass());
dComIfGp_event_reset();
mMode = 3;
}
mJntAnm.lookPlayer(0);
if (mTwilight != false) {
mJntAnm.lookNone(0);
}
} else {
mJntAnm.lookPlayer(0);
step(fopAcM_searchPlayerAngleY(this), -1, -1, 15, 0);
case 0:
case 1:
if (mStagger.checkStagger() == 0) {
initTalk(mFlowNodeNo, NULL);
mMode = 2;
}
case 2:
if (mStagger.checkStagger() == 0) {
if (mTwilight != false || mPlayerAngle == mCurAngle.y) {
if (talkProc(NULL, FALSE, NULL, FALSE) && mFlow.checkEndFlow()) {
mPlayerActorMngr.entry(daPy_getPlayerActorClass());
dComIfGp_event_reset();
mMode = 3;
}
mJntAnm.lookPlayer(0);
if (mTwilight != false) {
mJntAnm.lookNone(0);
}
} else {
mJntAnm.lookPlayer(0);
step(fopAcM_searchPlayerAngleY(this), -1, -1, 15, 0);
}
break;
case 3:
break;
}
case 3:
break;
}
return 0;

View File

@ -6,7 +6,11 @@
#include "d/dolzel_rel.h"
#include "d/actor/d_a_npc_zelR.h"
#include "SSystem/SComponent/c_counter.h"
enum RES_Name {
/* 0x0 */ NONE,
/* 0x1 */ ZELRF,
};
/* 80B71BF8-80B71C00 000020 0008+00 1/1 0/0 0/0 .data l_bmdData */
static daNpc_GetParam1 l_bmdData[1] = {
@ -81,15 +85,15 @@ daNpc_ZelR_c::~daNpc_ZelR_c() {
static daNpc_ZelR_Param_c l_HIO;
/* 80B71AE0-80B71B6C 000000 008C+00 6/6 0/0 0/0 .rodata m__18daNpc_ZelR_Param_c */
daNpc_ZelR_Param_c::Data const daNpc_ZelR_Param_c::m = {
daNpc_ZelR_HIOParam const daNpc_ZelR_Param_c::m = {
190.0f,
-3.0f, // mGravity
-3.0f,
1.0f,
400.0f,
255.0f, // mWeight
170.0f, // mCylH
35.0f, // mWallH
30.0f, // mWallR
255.0f,
170.0f,
35.0f,
30.0f,
0.0f,
0.0f,
10.0f,
@ -99,7 +103,7 @@ daNpc_ZelR_Param_c::Data const daNpc_ZelR_Param_c::m = {
45.0f,
-45.0f,
0.6f,
12.0f, // mMorfFrames
12.0f,
3,
6,
5,
@ -110,8 +114,11 @@ daNpc_ZelR_Param_c::Data const daNpc_ZelR_Param_c::m = {
0.0f,
0x3C,
8,
0.0f,
0.0f,
0,
0,
0,
false,
false,
4.0f,
0.0f,
0.0f,
@ -160,7 +167,7 @@ int daNpc_ZelR_c::create() {
setEnvTevColor();
setRoomNo();
mCcStts.Init(daNpc_ZelR_Param_c::m.mWeight, 0, this);
mCcStts.Init(daNpc_ZelR_Param_c::m.common.weight, 0, this);
mCyl.Set(mCcDCyl);
mCyl.SetStts(&mCcStts);
mCyl.SetTgHitCallback(tgHitCallBack);
@ -176,12 +183,7 @@ int daNpc_ZelR_c::create() {
/* 80B6F1F8-80B6F4A8 0004B8 02B0+00 1/1 0/0 0/0 .text CreateHeap__12daNpc_ZelR_cFv */
int daNpc_ZelR_c::CreateHeap() {
// NONMATCHING
int bmdIdx = mTwilight;
if (mTwilight == 1) {
bmdIdx = 0;
}
int bmdIdx = mTwilight == true ? NONE : NONE;
J3DModelData* mdlData_p = (J3DModelData*)(dComIfG_getObjectRes(
l_resNameList[l_bmdData[bmdIdx].arcIdx], l_bmdData[bmdIdx].fileIdx
));
@ -367,24 +369,24 @@ BOOL daNpc_ZelR_c::ctrlBtk() {
void daNpc_ZelR_c::setParam() {
selectAction();
srchActors();
s16 sVar1 = l_HIO.m.field_0x48;
s16 sVar2 = l_HIO.m.field_0x4a;
s16 sVar3 = l_HIO.m.field_0x4c;
s16 sVar4 = l_HIO.m.field_0x4e;
s16 sVar1 = l_HIO.m.common.talk_distance;
s16 sVar2 = l_HIO.m.common.talk_angle;
s16 sVar3 = l_HIO.m.common.attention_distance;
s16 sVar4 = l_HIO.m.common.attention_angle;
attention_info.distances[0] = daNpcT_getDistTableIdx(sVar3, sVar4);
attention_info.distances[1] = attention_info.distances[0];
attention_info.distances[3] = daNpcT_getDistTableIdx(sVar1, sVar2);
attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
scale.setall(l_HIO.m.field_0x8);
mCcStts.SetWeight(l_HIO.m.mWeight);
mCylH = l_HIO.m.mCylH;
mWallR = l_HIO.m.mWallR;
scale.setall(l_HIO.m.common.scale);
mCcStts.SetWeight(l_HIO.m.common.weight);
mCylH = l_HIO.m.common.height;
mWallR = l_HIO.m.common.width;
mAcchCir.SetWallR(mWallR);
mAcchCir.SetWallH(l_HIO.m.mWallH);
mRealShadowSize = l_HIO.m.field_0xc;
gravity = l_HIO.m.mGravity;
mExpressionMorfFrame = l_HIO.m.field_0x6c;
mMorfFrames = l_HIO.m.mMorfFrames;
mAcchCir.SetWallH(l_HIO.m.common.knee_length);
mRealShadowSize = l_HIO.m.common.real_shadow_size;
gravity = l_HIO.m.common.gravity;
mExpressionMorfFrame = l_HIO.m.common.expression_morf_frame;
mMorfFrames = l_HIO.m.common.morf_frame;
}
/* 80B6FC9C-80B6FCFC 000F5C 0060+00 1/0 0/0 0/0 .text setAfterTalkMotion__12daNpc_ZelR_cFv */
@ -421,7 +423,6 @@ BOOL daNpc_ZelR_c::evtTalk() {
/* 80B6FE00-80B6FEC8 0010C0 00C8+00 1/0 0/0 0/0 .text evtCutProc__12daNpc_ZelR_cFv */
BOOL daNpc_ZelR_c::evtCutProc() {
// NONMATCHING
BOOL rv = FALSE;
int staffId = dComIfGp_getEventManager().getMyStaffId("ZelR", this, -1);
if (staffId != -1) {
@ -474,9 +475,9 @@ void daNpc_ZelR_c::setAttnPos() {
mStagger.calc(FALSE);
mJntAnm.setParam(this, mpMorf[0]->getModel(), &sp38, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(),
l_HIO.m.field_0x24, l_HIO.m.field_0x20, l_HIO.m.field_0x2c,
l_HIO.m.field_0x28, l_HIO.m.field_0x34, l_HIO.m.field_0x30,
l_HIO.m.field_0x3c, l_HIO.m.field_0x38, l_HIO.m.field_0x40,
l_HIO.m.common.body_angleX_min, l_HIO.m.common.body_angleX_max, l_HIO.m.common.body_angleY_min,
l_HIO.m.common.body_angleY_max, l_HIO.m.common.head_angleX_min, l_HIO.m.common.head_angleX_max,
l_HIO.m.common.head_angleY_min, l_HIO.m.common.head_angleY_max, l_HIO.m.common.neck_rotation_ratio,
0.0f, NULL);
mJntAnm.calcJntRad(0.2f, 1.0f, cM_s2rad(mCurAngle.y - field_0xd7e.y));
@ -489,7 +490,7 @@ void daNpc_ZelR_c::setAttnPos() {
mJntAnm.setEyeAngleY(eyePos, mCurAngle.y, 0, 1.0f, 0);
attention_info.position = current.pos;
attention_info.position.y += l_HIO.m.field_0x0;
attention_info.position.y += l_HIO.m.common.attention_offset;
}
/* 80B702B0-80B703E0 001570 0130+00 1/0 0/0 0/0 .text setCollision__12daNpc_ZelR_cFv */
@ -531,7 +532,7 @@ int daNpc_ZelR_c::drawDbgInfo() {
/* 80B703E8-80B70430 0016A8 0048+00 1/1 0/0 0/0 .text selectAction__12daNpc_ZelR_cFv */
int daNpc_ZelR_c::selectAction() {
field_0xf84 = NULL;
field_0xf84 = &daNpc_ZelR_c::talk;
field_0xf84 = &daNpc_ZelR_c::wait;
return 1;
}
@ -558,9 +559,6 @@ int daNpc_ZelR_c::setAction(int (daNpc_ZelR_c::*param_1)(void*)) {
/* 80B70504-80B706B0 0017C4 01AC+00 1/0 0/0 0/0 .text wait__12daNpc_ZelR_cFPv */
int daNpc_ZelR_c::wait(void* param_1) {
// NONMATCHING
s16 sVar1;
switch (mMode) {
case 0:
case 1:
@ -569,15 +567,16 @@ int daNpc_ZelR_c::wait(void* param_1) {
mMode = 2;
case 2:
if (!mStagger.checkStagger()) {
BOOL bVar1;
if (srchPlayerActor()) {
mJntAnm.lookPlayer(0);
sVar1 = checkStep();
bVar1 = checkStep();
} else {
mJntAnm.lookNone(0);
sVar1 = home.angle.y != mCurAngle.y;
bVar1 = home.angle.y != mCurAngle.y;
}
if ((sVar1 & 0xff) && step(home.angle.y, -1, -1, 15, 0)) {
if (bVar1 && step(home.angle.y, -1, -1, 15, 0)) {
mMode = 1;
}
}
@ -619,51 +618,27 @@ BOOL daNpc_ZelR_c::talk(void* param_1) {
}
/* 80B70814-80B70834 001AD4 0020+00 1/0 0/0 0/0 .text daNpc_ZelR_Create__FPv */
static int daNpc_ZelR_Create(void* param_1) {
daNpc_ZelR_c* i_this = (daNpc_ZelR_c*)param_1;
return i_this->create();
static int daNpc_ZelR_Create(void* a_this) {
return static_cast<daNpc_ZelR_c*>(a_this)->create();
}
/* 80B70834-80B70854 001AF4 0020+00 1/0 0/0 0/0 .text daNpc_ZelR_Delete__FPv */
static int daNpc_ZelR_Delete(void* param_1) {
daNpc_ZelR_c* i_this = (daNpc_ZelR_c*)param_1;
return i_this->Delete();
static int daNpc_ZelR_Delete(void* a_this) {
return static_cast<daNpc_ZelR_c*>(a_this)->Delete();
}
/* 80B70854-80B70874 001B14 0020+00 1/0 0/0 0/0 .text daNpc_ZelR_Execute__FPv */
static int daNpc_ZelR_Execute(void* param_1) {
daNpc_ZelR_c* i_this = (daNpc_ZelR_c*)param_1;
return i_this->Execute();
static int daNpc_ZelR_Execute(void* a_this) {
return static_cast<daNpc_ZelR_c*>(a_this)->Execute();
}
/* 80B70874-80B70894 001B34 0020+00 1/0 0/0 0/0 .text daNpc_ZelR_Draw__FPv */
static int daNpc_ZelR_Draw(void* param_1) {
daNpc_ZelR_c* i_this = (daNpc_ZelR_c*)param_1;
return i_this->Draw();
static int daNpc_ZelR_Draw(void* a_this) {
return static_cast<daNpc_ZelR_c*>(a_this)->Draw();
}
/* 80B70894-80B7089C 001B54 0008+00 1/0 0/0 0/0 .text daNpc_ZelR_IsDelete__FPv */
static int daNpc_ZelR_IsDelete(void* param_0) {
return 1;
}
/* 80B71A34-80B71A3C 002CF4 0008+00 1/0 0/0 0/0 .text getEyeballRMaterialNo__12daNpc_ZelR_cFv */
u16 daNpc_ZelR_c::getEyeballRMaterialNo() {
return 3;
}
/* 80B71A3C-80B71A44 002CFC 0008+00 1/0 0/0 0/0 .text getEyeballLMaterialNo__12daNpc_ZelR_cFv */
u16 daNpc_ZelR_c::getEyeballLMaterialNo() {
return 2;
}
/* 80B71A44-80B71A4C 002D04 0008+00 1/0 0/0 0/0 .text getHeadJointNo__12daNpc_ZelR_cFv */
s32 daNpc_ZelR_c::getHeadJointNo() {
return 3;
}
/* 80B71A4C-80B71A54 002D0C 0008+00 1/0 0/0 0/0 .text getBackboneJointNo__12daNpc_ZelR_cFv */
s32 daNpc_ZelR_c::getBackboneJointNo() {
static int daNpc_ZelR_IsDelete(void* a_this) {
return 1;
}

File diff suppressed because it is too large Load Diff