d_a_npc_moir almost matching (#2701)

This commit is contained in:
YunataSavior 2025-09-26 02:53:57 -07:00 committed by GitHub
parent 083cea4770
commit 30fafe135d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 90 additions and 92 deletions

View File

@ -29,6 +29,7 @@ public:
class daNpcMoiR_c : public daNpcF_c {
public:
typedef bool (daNpcMoiR_c::*ActionFn)(void*);
typedef BOOL (daNpcMoiR_c::*Action2Fn)(void*);
typedef BOOL (daNpcMoiR_c::*EventFn)(int);
enum Animation {
@ -128,7 +129,7 @@ public:
/* 0x2 */ MODE_2,
};
/* 80A7C16C */ daNpcMoiR_c() {}
/* 80A7C16C */ daNpcMoiR_c();
/* 80A7C380 */ ~daNpcMoiR_c();
/* 80A7C580 */ cPhs__Step Create();
/* 80A7C978 */ int CreateHeap();
@ -138,8 +139,8 @@ public:
/* 80A7CEFC */ int ctrlJoint(J3DJoint*, J3DModel*);
/* 80A7D0CC */ static int createHeapCallBack(fopAc_ac_c*);
/* 80A7D0EC */ static int ctrlJointCallBack(J3DJoint*, int);
/* 80A7D138 */ bool setExpressionAnm(int, bool);
/* 80A7D394 */ bool setExpressionBtp(int);
/* 80A7D138 */ inline bool setExpressionAnm(int, bool);
/* 80A7D394 */ inline bool setExpressionBtp(int);
/* 80A7D474 */ void setMotionAnm(int, f32);
/* 80A7D5C4 */ void reset();
/* 80A7D73C */ inline void setWaitAction();
@ -153,18 +154,18 @@ public:
/* 80A7F40C */ bool fight(void*);
/* 80A7F9AC */ bool demo(void*);
/* 80A7FEE8 */ bool leave(void*);
/* 80A802C4 */ BOOL EvCut_Introduction(int);
/* 80A803A0 */ BOOL EvCut_Appear(int);
/* 80A8081C */ BOOL EvCut_Appear2(int);
/* 80A810FC */ void setParam();
/* 80A81274 */ BOOL main();
/* 80A815D4 */ void checkHeadGear();
/* 80A818B4 */ void playMotion();
/* 80A802C4 */ inline BOOL EvCut_Introduction(int);
/* 80A803A0 */ inline BOOL EvCut_Appear(int);
/* 80A8081C */ inline BOOL EvCut_Appear2(int);
/* 80A810FC */ inline void setParam();
/* 80A81274 */ inline BOOL main();
/* 80A815D4 */ inline void checkHeadGear();
/* 80A818B4 */ inline void playMotion();
/* 80A8210C */ inline BOOL ctrlBtk();
/* 80A821E0 */ inline void setAttnPos();
/* 80A825A0 */ inline void lookat();
/* 80A82878 */ void drawOtherMdls();
/* 80A82900 */ BOOL drawDbgInfo();
/* 80A82878 */ inline void drawOtherMdls();
/* 80A82900 */ inline BOOL drawDbgInfo();
MtxP getHandRMtx() { return mpMorf->getModel()->getAnmMtx(17); }

View File

@ -227,6 +227,9 @@ daNpcMoiR_c::EventFn daNpcMoiR_c::mEvtSeqList[4] = {
&daNpcMoiR_c::EvCut_Appear2,
};
/* 80A7C16C-80A7C2F0 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpcMoiR_cFv */
daNpcMoiR_c::daNpcMoiR_c() {}
/* 80A7C380-80A7C580 000300 0200+00 1/0 0/0 0/0 .text __dt__11daNpcMoiR_cFv */
daNpcMoiR_c::~daNpcMoiR_c() {
for (int i = 0; l_loadRes_list[mMode][i] >= 0; i++) {
@ -509,7 +512,7 @@ int daNpcMoiR_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) {
return 1;
}
inline void daNpcMoiR_c::searchActors() {
void daNpcMoiR_c::searchActors() {
if (mActorMngr[1].getActorP() == NULL) {
mActorMngr[1].entry(fopAcM_SearchByName(PROC_NPC_ASH));
}
@ -707,7 +710,7 @@ void daNpcMoiR_c::setWaitAction() {
}
}
inline void daNpcMoiR_c::playExpression() {
void daNpcMoiR_c::playExpression() {
daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcMoiR_Param_c::m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0};
daNpcF_anmPlayData dat1 = {ANM_F_HOLD_S_LOOP, daNpcMoiR_Param_c::m.common.morf_frame, 1};
@ -883,7 +886,7 @@ void daNpcMoiR_c::playMotion() {
}
/* 80A825A0-80A82878 006520 02D8+00 1/1 0/0 0/0 .text lookat__11daNpcMoiR_cFv */
inline void daNpcMoiR_c::lookat() {
void daNpcMoiR_c::lookat() {
daPy_py_c* player = NULL;
J3DModel* model = mpMorf->getModel();
BOOL bVar1 = FALSE;
@ -949,7 +952,7 @@ inline void daNpcMoiR_c::lookat() {
mLookat.calc(this, model->getBaseTRMtx(), local_dc, bVar1, sVar1, FALSE);
}
inline BOOL daNpcMoiR_c::chkFindPlayer() {
BOOL daNpcMoiR_c::chkFindPlayer() {
BOOL rv;
f32 fVar1 = mMode == MODE_SIT ? 135.0f : daNpcMoiR_Param_c::m.common.fov;
@ -976,13 +979,13 @@ inline BOOL daNpcMoiR_c::chkFindPlayer() {
return rv;
}
inline void daNpcMoiR_c::setLookMode(int i_lookMode) {
void daNpcMoiR_c::setLookMode(int i_lookMode) {
if (i_lookMode >= LOOK_NONE && i_lookMode <= LOOK_PLAYER_TALK && i_lookMode != mLookMode) {
mLookMode = i_lookMode;
}
}
inline BOOL daNpcMoiR_c::step(s16 param_1, int param_2) {
BOOL daNpcMoiR_c::step(s16 param_1, int param_2) {
if (mTurnMode == 0) {
if (param_2 != 0) {
if ((s32)fabsf(cM_sht2d((s16)(param_1 - mCurAngle.y))) > 40) {
@ -1021,6 +1024,10 @@ inline BOOL daNpcMoiR_c::step(s16 param_1, int param_2) {
return mTurnMode > 1;
}
static daNpcMoiR_c::Action2Fn dummy_4854() {
return &daNpcMoiR_c::multiTalk;
}
/* 80A7D934-80A7DD94 0018B4 0460+00 1/0 0/0 0/0 .text wait_type0__11daNpcMoiR_cFPv */
bool daNpcMoiR_c::wait_type0(void* param_1) {
// NONMATCHING
@ -1167,6 +1174,9 @@ bool daNpcMoiR_c::wait_type1(void* param_1) {
mOrderEvtNo = 2;
}
// This is fake, but it matches on GCN:
Action2Fn dummy_5013 = &daNpcMoiR_c::multiTalk;
if (dComIfGp_event_runCheck()) {
if (eventInfo.checkCommandTalk()) {
if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) {
@ -1258,7 +1268,7 @@ bool daNpcMoiR_c::wait_type2(void* param_1) {
return true;
}
inline void daNpcMoiR_c::setExpressionTalkAfter() {
void daNpcMoiR_c::setExpressionTalkAfter() {
switch (mExpression) {
case 3:
setExpression(EXPR_FH_HOLD_S, -1.0f);
@ -1274,77 +1284,6 @@ inline void daNpcMoiR_c::setExpressionTalkAfter() {
}
}
/* 80A7EFBC-80A7F40C 002F3C 0450+00 2/0 0/0 0/0 .text multiTalk__11daNpcMoiR_cFPv */
BOOL daNpcMoiR_c::multiTalk(void* param_1) {
// NONMATCHING
BOOL rv = FALSE;
fopAc_ac_c* speakers[4] = {this, mActorMngr[1].getActorP(), mActorMngr[2].getActorP(), mActorMngr[3].getActorP()};
dComIfGp_setMesgCameraInfoActor(speakers[0], speakers[1], speakers[2], speakers[3], NULL, NULL, NULL, NULL, NULL, NULL);
switch (field_0xe08) {
case 0:
initTalk(mMsgNo, NULL);
mMsgTimer = 0;
if (mLookMode != LOOK_NONE) {
mLookMode = LOOK_NONE;
}
field_0xe08 = 2;
break;
case 2:
if (talkProc(NULL, TRUE, (fopAc_ac_c**)&speakers)) {
switch (mMode) {
case MODE_SIT:
setAction(&daNpcMoiR_c::wait_type0);
break;
case MODE_STAND:
setAction(&daNpcMoiR_c::wait_type1);
break;
case MODE_2:
setAction(&daNpcMoiR_c::wait_type2);
break;
}
rv = TRUE;
} else {
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, FALSE) != 0) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
switch (mExpression) {
case 3:
setExpression(EXPR_FH_HOLD_S, -1.0f);
break;
case 10:
setExpression(EXPR_FH_HOLD_S_LOOP, -1.0f);
break;
default:
setExpression(EXPR_NONE, -1.0f);
break;
}
}
}
break;
case 3:
setExpression(EXPR_NONE, -1.0f);
dComIfGp_event_reset();
break;
}
return rv;
}
/* 80A7E8C0-80A7EFBC 002840 06FC+00 2/0 0/0 0/0 .text talk__11daNpcMoiR_cFPv */
bool daNpcMoiR_c::talk(void* param_1) {
int itemNo, msgTimer, i_expression, i_actionID;
@ -1420,6 +1359,64 @@ bool daNpcMoiR_c::talk(void* param_1) {
return rv;
}
/* 80A7EFBC-80A7F40C 002F3C 0450+00 2/0 0/0 0/0 .text multiTalk__11daNpcMoiR_cFPv */
BOOL daNpcMoiR_c::multiTalk(void* param_1) {
// NONMATCHING
BOOL rv = FALSE;
fopAc_ac_c* speakers[4] = {this, mActorMngr[1].getActorP(), mActorMngr[2].getActorP(), mActorMngr[3].getActorP()};
dComIfGp_setMesgCameraInfoActor(speakers[0], speakers[1], speakers[2], speakers[3], NULL, NULL, NULL, NULL, NULL, NULL);
switch (field_0xe08) {
case 0:
initTalk(mMsgNo, NULL);
mMsgTimer = 0;
if (mLookMode != LOOK_NONE) {
mLookMode = LOOK_NONE;
}
field_0xe08 = 2;
break;
case 2:
if (talkProc(NULL, TRUE, (fopAc_ac_c**)&speakers)) {
setWaitAction();
rv = TRUE;
} else {
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, FALSE) != 0) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
switch (mExpression) {
case 3:
setExpression(EXPR_FH_HOLD_S, -1.0f);
break;
case 10:
setExpression(EXPR_FH_HOLD_S_LOOP, -1.0f);
break;
default:
setExpression(EXPR_NONE, -1.0f);
break;
}
}
}
break;
case 3:
setExpression(EXPR_NONE, -1.0f);
dComIfGp_event_reset();
break;
}
return rv;
}
/* 80A7F40C-80A7F9AC 00338C 05A0+00 2/0 0/0 0/0 .text fight__11daNpcMoiR_cFPv */
bool daNpcMoiR_c::fight(void* param_1) {
// NONMATCHING
@ -1914,7 +1911,7 @@ void daNpcMoiR_c::checkHeadGear() {
/* 80A8210C-80A821E0 00608C 00D4+00 1/0 0/0 0/0 .text ctrlBtk__11daNpcMoiR_cFv */
// NONMATCHING inlining issues
inline BOOL daNpcMoiR_c::ctrlBtk() {
BOOL daNpcMoiR_c::ctrlBtk() {
if (mpMatAnm != NULL) {
J3DAnmTextureSRTKey* anm = NULL;
anm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx);
@ -1933,7 +1930,7 @@ inline BOOL daNpcMoiR_c::ctrlBtk() {
}
/* 80A821E0-80A825A0 006160 03C0+00 1/0 0/0 0/0 .text setAttnPos__11daNpcMoiR_cFv */
inline void daNpcMoiR_c::setAttnPos() {
void daNpcMoiR_c::setAttnPos() {
if (mLookMode == LOOK_RESET) {
for (int i = 0; i < 3; i++) {
mLookatAngle[i].setall(0);