d_a_npc_pouya matching (#2806)

* d_a_npc_pouya matching

* mItemPartnerId fix
This commit is contained in:
hev7 2025-11-15 12:02:24 +00:00 committed by GitHub
parent 9ea1b81288
commit 2387021347
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 1215 additions and 1463 deletions

View File

@ -134,7 +134,8 @@ jointNo$5024 = .rodata:0x00000110; // type:object size:0x4 scope:local data:4byt
...data.0 = .data:0x00000000; // type:label scope:local
cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global
@1787 = .data:0x0000000C; // type:object size:0x4 scope:local
lbl_348_data_10 = .data:0x00000010; // type:object size:0x10
_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8
_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8
l_bmdData = .data:0x00000020; // type:object size:0x18 scope:global data:4byte
l_evtList = .data:0x00000038; // type:object size:0x48 scope:global
l_resNameList = .data:0x00000080; // type:object size:0xC scope:global

View File

@ -133,7 +133,8 @@ jointNo$5024 = .rodata:0x00000110; // type:object size:0x4 scope:local data:4byt
@stringBase0 = .rodata:0x00000120; // type:object size:0xD0 scope:local data:string_table
cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global
@1787 = .data:0x0000000C; // type:object size:0x4 scope:local
lbl_348_data_10 = .data:0x00000010; // type:object size:0x10
_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8
_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8
l_bmdData = .data:0x00000020; // type:object size:0x18 scope:global data:4byte
l_evtList = .data:0x00000038; // type:object size:0x48 scope:global
l_resNameList = .data:0x00000080; // type:object size:0xC scope:global

View File

@ -133,7 +133,8 @@ jointNo$5024 = .rodata:0x00000110; // type:object size:0x4 scope:local data:4byt
@stringBase0 = .rodata:0x00000120; // type:object size:0xD0 scope:local data:string_table
cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global
@1787 = .data:0x0000000C; // type:object size:0x4 scope:local
lbl_348_data_10 = .data:0x00000010; // type:object size:0x10
_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8
_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8
l_bmdData = .data:0x00000020; // type:object size:0x18 scope:global data:4byte
l_evtList = .data:0x00000038; // type:object size:0x48 scope:global
l_resNameList = .data:0x00000080; // type:object size:0xC scope:global

View File

@ -1904,7 +1904,7 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_passer"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_passer2"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_post"),
ActorRel(NonMatching, "d_a_npc_pouya"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_pouya"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_prayer", extra_cflags=[DANPCF_C_HACK]),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_raca"),
ActorRel(Equivalent, "d_a_npc_rafrel", extra_cflags=[DANPCF_C_HACK]), # weak func order

View File

@ -100,6 +100,7 @@ public:
}
}
}
void setOffset(int i_offset) { mOffset = i_offset; }
private:
/* 0x00 */ sequenceStepData_c const* mpSeqData;

View File

@ -3,6 +3,33 @@
#include "d/actor/d_a_npc.h"
struct daNpc_Pouya_HIOParam {
/* 0x00 */ daNpcT_HIOParam common;
};
class daNpc_Pouya_Param_c {
public:
/* 80B24978 */ virtual ~daNpc_Pouya_Param_c() {}
static const daNpc_Pouya_HIOParam m;
};
#if DEBUG
class daNpc_Pouya_HIO_c : public mDoHIO_entry_c {
public:
daNpc_Pouya_HIO_c();
void listenPropertyEvent(const JORPropertyEvent*);
void genMessage(JORMContext*);
daNpc_Pouya_HIOParam m;
};
#define NPC_POUYA_HIO_CLASS daNpc_Pouya_HIO_c
#else
#define NPC_POUYA_HIO_CLASS daNpc_Pouya_Param_c
#endif
/**
* @ingroup actors-npcs
* @class daNpc_Pouya_c
@ -11,71 +38,133 @@
* @details
*
*/
class daNpc_Pouya_c : public fopAc_ac_c {
class daNpc_Pouya_c : public daNpcT_c {
public:
typedef int (daNpc_Pouya_c::*cutFunc)(int);
typedef int (daNpc_Pouya_c::*actionFunc)(void*);
enum Type {
TYPE_0,
TYPE_1,
TYPE_2,
TYPE_3,
TYPE_4,
TYPE_5,
};
enum FaceMotion {
/* 0x00 */ FACE_MOT_UNK_0 = 0,
/* 0x01 */ FACE_MOT_UNK_1 = 1,
/* 0x02 */ FACE_MOT_UNK_2 = 2,
/* 0x03 */ FACE_MOT_UNK_3 = 3,
/* 0x04 */ FACE_MOT_UNK_4 = 4,
/* 0x05 */ FACE_MOT_UNK_5 = 5,
/* 0x06 */ FACE_MOT_UNK_6 = 6,
/* 0x07 */ FACE_MOT_UNK_7 = 7,
/* 0x08 */ FACE_MOT_UNK_8 = 8,
/* 0x09 */ FACE_MOT_UNK_9 = 9,
/* 0x0A */ FACE_MOT_UNK_10 = 10,
/* 0x0B */ FACE_MOT_UNK_11 = 11,
/* 0x0C */ FACE_MOT_UNK_12 = 12,
/* 0x0D */ FACE_MOT_UNK_13 = 13,
/* 0x0E */ FACE_MOT_UNK_14 = 14,
/* 0x0F */ FACE_MOT_UNK_15 = 15,
/* 0x10 */ FACE_MOT_UNK_16 = 16,
/* 0x11 */ FACE_MOT_UNK_17 = 17,
};
enum Motion {
/* 0x00 */ MOT_UNK_0 = 0,
/* 0x01 */ MOT_UNK_1 = 1,
/* 0x04 */ MOT_UNK_4 = 4,
/* 0x08 */ MOT_UNK_8 = 8,
/* 0x0A */ MOT_UNK_10 = 10,
/* 0x0F */ MOT_UNK_15 = 15,
};
/* 80AADDAC */ ~daNpc_Pouya_c();
/* 80AADEE0 */ void create();
/* 80AAE1AC */ void CreateHeap();
/* 80AAE788 */ void Delete();
/* 80AAE7BC */ void Execute();
/* 80AAE7DC */ void Draw();
/* 80AAE870 */ void createHeapCallBack(fopAc_ac_c*);
/* 80AAE890 */ void ctrlJointCallBack(J3DJoint*, int);
/* 80AADEE0 */ int create();
/* 80AAE1AC */ int CreateHeap();
/* 80AAE788 */ int Delete();
/* 80AAE7BC */ int Execute();
/* 80AAE7DC */ int Draw();
/* 80AAE870 */ static int createHeapCallBack(fopAc_ac_c*);
/* 80AAE890 */ static int ctrlJointCallBack(J3DJoint*, int);
/* 80AAE8E8 */ u8 getType();
/* 80AAE94C */ void isDelete();
/* 80AAE94C */ BOOL isDelete();
/* 80AAE9D8 */ void reset();
/* 80AAEBCC */ void ctrlSubFaceMotion(int);
/* 80AAEDB8 */ void afterJntAnm(int);
/* 80AAEE44 */ void setParam();
/* 80AAEFB4 */ void checkChangeEvt();
/* 80AAEFB4 */ BOOL checkChangeEvt();
/* 80AAF148 */ void setAfterTalkMotion();
/* 80AAF1F0 */ void srchActors();
/* 80AAF1F4 */ void evtTalk();
/* 80AAF294 */ void evtCutProc();
/* 80AAF1F4 */ BOOL evtTalk();
/* 80AAF294 */ BOOL evtCutProc();
/* 80AAF35C */ void action();
/* 80AAF4F8 */ void beforeMove();
/* 80AAF5BC */ void setAttnPos();
/* 80AAF8E4 */ void setCollision();
/* 80AAFA5C */ bool drawDbgInfo();
/* 80AAFA5C */ int drawDbgInfo();
/* 80AAFA64 */ void drawOtherMdl();
/* 80AAFB4C */ void afterSetMotionAnm(int, int, f32, int);
/* 80AAFBDC */ void selectAction();
/* 80AAFC24 */ void chkAction(int (daNpc_Pouya_c::*)(void*));
/* 80AAFC50 */ void setAction(int (daNpc_Pouya_c::*)(void*));
/* 80AAFB4C */ bool afterSetMotionAnm(int, int, f32, int);
/* 80AAFBDC */ int selectAction();
/* 80AAFC24 */ BOOL chkAction(int (daNpc_Pouya_c::*)(void*));
/* 80AAFC50 */ int setAction(int (daNpc_Pouya_c::*)(void*));
/* 80AAFCF8 */ void setPrtcls();
/* 80AAFE08 */ void cutHaveFavorToAsk(int);
/* 80AB04A8 */ void wait(void*);
/* 80AB0A7C */ void talk(void*);
/* 80AB1E94 */ daNpc_Pouya_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**);
/* 80AB1F54 */ u16 getEyeballMaterialNo();
/* 80AB1F5C */ s32 getHeadJointNo();
/* 80AB1F64 */ s32 getNeckJointNo();
/* 80AB1F6C */ bool getBackboneJointNo();
/* 80AB1F74 */ void checkChangeJoint(int);
/* 80AB1F84 */ void checkRemoveJoint(int);
/* 80AAFE08 */ int cutHaveFavorToAsk(int);
/* 80AB04A8 */ int wait(void*);
/* 80AB0A7C */ int talk(void*);
/* 80AB1E94 */ daNpc_Pouya_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) {}
/* 80AB1F54 */ u16 getEyeballMaterialNo() { return 1; }
/* 80AB1F5C */ s32 getHeadJointNo() { return 4; }
/* 80AB1F64 */ s32 getNeckJointNo() { return 3; }
/* 80AB1F6C */ s32 getBackboneJointNo() { return 1; }
/* 80AB1F74 */ BOOL checkChangeJoint(int i_joint) { return i_joint == 4; }
/* 80AB1F84 */ BOOL checkRemoveJoint(int i_joint) { return i_joint == 8; }
MtxP getHeadMtx() { return mpMorf->getModel()->getAnmMtx(4); }
u8 getBitSW() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; }
int getFlowNodeNo() {
u16 nodeNo = home.angle.x;
if (nodeNo == 0xffff) {
return -1;
}
return nodeNo;
}
BOOL chkPouyaB() { return (mType == TYPE_2 || mType == TYPE_3 || mType == TYPE_4); }
MtxP getHeadMtx() { return mpMorf[0]->getModel()->getAnmMtx(4); }
static char* mCutNameList[3];
static u8 mCutList[36];
static cutFunc mCutList[3];
private:
/* 0x568 */ u8 field_0x568[0x578 - 0x568];
/* 0x578 */ mDoExt_McaMorfSO* mpMorf;
/* 0x57C */ u8 field_0x57c[0xfd4 - 0x57c];
/* 0xE40 */ NPC_POUYA_HIO_CLASS* mpHIO;
/* 0xE44 */ J3DModel* mpModel[1];
/* 0xE48 */ dCcD_Cyl mCyl;
/* 0xF84 */ u8 mType;
/* 0xF88 */ daNpcT_Path_c mPath;
/* 0xFB0 */ actionFunc field_0xfb0;
/* 0xFBC */ actionFunc mAction;
/* 0xFC8 */ u32 field_0xfc8;
/* 0xFCC */ s8 field_0xfcc;
/* 0xFCD */ s8 field_0xfcd;
/* 0xFCE */ u8 field_0xfce;
/* 0xFCF */ u8 field_0xfcf;
/* 0xFD0 */ u8 field_0xfd0;
};
STATIC_ASSERT(sizeof(daNpc_Pouya_c) == 0xfd4);
class daNpc_Pouya_Param_c {
public:
/* 80AB1F94 */ ~daNpc_Pouya_Param_c();
static u8 const m[140];
};
#endif /* D_A_NPC_POUYA_H */

View File

@ -69,6 +69,7 @@ public:
static void endFrame() { JFWDisplay::getManager()->endFrame(); }
static void offFade() { mFade = 0; }
static u8 isFade() { return mFade; }
static void fadeIn_f(f32 i_fadeSpeed, _GXColor& i_fadeColor) { fadeOut_f(-i_fadeSpeed, i_fadeColor); }
static void offBlure() { mBlureFlag = false; }
static bool isBlure() { return mBlureFlag; }
static void setBlureRate(u8 i_rate) { mBlureRate = i_rate; }

View File

@ -90,6 +90,7 @@ enum FaceMotion {
/* 0x07 */ FACE_MOT_UNK_7 = 7,
/* 0x08 */ FACE_MOT_UNK_8 = 8,
/* 0x09 */ FACE_MOT_UNK_9 = 9,
/* 0x0A */ FACE_MOT_UNK_10 = 10,
/* 0x0B */ FACE_MOT_UNK_11 = 11,
/* 0x0C */ FACE_MOT_UNK_12 = 12,
/* 0x0D */ FACE_MOT_UNK_13 = 13,
@ -629,10 +630,10 @@ BOOL daNpc_Lud_c::checkChangeEvt() {
/* 80A6BE6C-80A6BEE4 0013AC 0078+00 1/0 0/0 0/0 .text setAfterTalkMotion__11daNpc_Lud_cFv
*/
void daNpc_Lud_c::setAfterTalkMotion() {
int iVar2 = MOT_UNK_18;
int iVar2 = FACE_MOT_UNK_18;
switch (mFaceMotionSeqMngr.getNo()) {
case MOT_UNK_1:
iVar2 = MOT_UNK_10;
case FACE_MOT_UNK_1:
iVar2 = FACE_MOT_UNK_10;
break;
}
mFaceMotionSeqMngr.setNo(iVar2, -1.0f, 0, 0);

File diff suppressed because it is too large Load Diff