mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-07 13:23:27 -04:00
D_a_npc_tt (#1099)
* matching * cleanup * d_a_npc_tt matching outside of _create and rodata * matching * cleanup
This commit is contained in:
+1
-1
@@ -1699,7 +1699,7 @@ config.libs = [
|
||||
ActorRel(NonMatching, "d_a_npc_sarace"),
|
||||
ActorRel(NonMatching, "d_a_npc_sv"),
|
||||
ActorRel(Matching, "d_a_npc_tc"),
|
||||
ActorRel(NonMatching, "d_a_npc_tt"),
|
||||
ActorRel(Matching, "d_a_npc_tt"),
|
||||
ActorRel(NonMatching, "d_a_npc_uk"),
|
||||
ActorRel(NonMatching, "d_a_npc_ym1"),
|
||||
ActorRel(NonMatching, "d_a_npc_yw1"),
|
||||
|
||||
+137
-42
@@ -2,82 +2,177 @@
|
||||
#define D_A_NPC_TT_H
|
||||
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "d/d_npc.h"
|
||||
|
||||
struct tt_ke_s {
|
||||
void ke_control(float);
|
||||
/* 0x00 */ cXyz field_0x00[10];
|
||||
/* 0x78 */ cXyz field_0x78[10];
|
||||
void ke_control(f32);
|
||||
void ke_pos_set(cXyz*);
|
||||
};
|
||||
|
||||
struct lineKe {
|
||||
tt_ke_s field_0x6C8[8];
|
||||
mDoExt_3DlineMat0_c mLineMat;
|
||||
};
|
||||
|
||||
class daNpc_Tt_c : public fopAc_ac_c {
|
||||
public:
|
||||
void ChkOrder(unsigned char) {}
|
||||
void ClrOrder() {}
|
||||
void SetOrder(unsigned char) {}
|
||||
void chkEvFlag(unsigned short) {}
|
||||
void chkFlag(unsigned short) {}
|
||||
void clrEvFlag(unsigned short) {}
|
||||
void clrFlag(unsigned short) {}
|
||||
void getBackboneJntNum() {}
|
||||
void getBackbone_x() {}
|
||||
void getBackbone_y() {}
|
||||
void getHeadJntNum() {}
|
||||
void getHead_x() {}
|
||||
void getHead_y() {}
|
||||
void incAttnSetCount() {}
|
||||
void setAction(int (daNpc_Tt_c::*)(void*), void*) {}
|
||||
void setAttentionBasePos(cXyz) {}
|
||||
void setEvFlag(unsigned short) {}
|
||||
void setEyePos(cXyz) {}
|
||||
void setFlag(unsigned short) {}
|
||||
|
||||
void XyCheckCB(int);
|
||||
enum ActionStatus {
|
||||
ACTION_ENDING = -1,
|
||||
ACTION_STARTING = 0,
|
||||
ACTION_ONGOING = 1
|
||||
};
|
||||
|
||||
enum TalkStates {
|
||||
TALK_FINISHED = -1,
|
||||
TALK_INIT = 0,
|
||||
TALK_MSG_CREATE = 1,
|
||||
TALK_ACTIVE = 2
|
||||
};
|
||||
|
||||
typedef BOOL (daNpc_Tt_c::*ActionFunc)(void*);
|
||||
|
||||
bool ChkOrder(u8 flag) { return mOrderFlags & flag; }
|
||||
void ClrOrder() { mOrderFlags = 0; }
|
||||
void SetOrder(u8 flag) { mOrderFlags |= flag; }
|
||||
bool chkEvFlag(u16 evFlag) { return (mEvFlags & evFlag) == evFlag; }
|
||||
bool chkFlag(u16 flag) { return (mFlags & flag) == flag; }
|
||||
void clrEvFlag(u16 evFlag) { mEvFlags &= ~evFlag; }
|
||||
void clrFlag(u16 flag) { mFlags &= ~flag; }
|
||||
|
||||
s8 getBackboneJntNum() { return m_jnt.getBackboneJntNum(); }
|
||||
s16 getBackbone_y() { return m_jnt.getBackbone_y(); }
|
||||
s8 getHeadJntNum() { return m_jnt.getHeadJntNum(); }
|
||||
s16 getHead_x() { return m_jnt.getHead_x(); }
|
||||
s16 getHead_y() { return m_jnt.getHead_y(); }
|
||||
|
||||
void incAttnSetCount() {
|
||||
if (mAttnSetCount != 0xff) {
|
||||
mAttnSetCount++;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL setAction(ActionFunc actionFunc, void* arg) {
|
||||
if (mCurrActionFunc != actionFunc) {
|
||||
if (mCurrActionFunc != NULL) {
|
||||
mActionStatus = ACTION_ENDING;
|
||||
(this->*mCurrActionFunc)(arg);
|
||||
}
|
||||
mCurrActionFunc = actionFunc;
|
||||
mActionStatus = ACTION_STARTING;
|
||||
(this->*mCurrActionFunc)(arg);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void setAttentionBasePos(cXyz i_attnBasePos) { mAttnBasePos = i_attnBasePos; }
|
||||
void setEvFlag(u16 evFlag) { mEvFlags |= evFlag;}
|
||||
void setEyePos(cXyz i_eyePos) { mEyePos = i_eyePos; }
|
||||
void setFlag(u16 flag) { mFlags |= flag; }
|
||||
|
||||
s16 XyCheckCB(int);
|
||||
void setAnmStatus();
|
||||
void eventOrder();
|
||||
void checkOrder();
|
||||
void next_msgStatus(unsigned long*);
|
||||
void getMsg();
|
||||
u16 next_msgStatus(u32*);
|
||||
u32 getMsg();
|
||||
void setCollision();
|
||||
void talkInit();
|
||||
void msgAnm();
|
||||
void msgPushButton();
|
||||
void msgContinue();
|
||||
void talk();
|
||||
u16 talk();
|
||||
void demoInitChange();
|
||||
void demoProcTact1();
|
||||
bool demoProcTact1();
|
||||
void demoInitPatten();
|
||||
void demoProcPatten();
|
||||
bool demoProcPatten();
|
||||
void demoInitSpeak();
|
||||
void demoProcSpeak();
|
||||
bool demoProcSpeak();
|
||||
void demoInitWait();
|
||||
void demoProcWait();
|
||||
bool demoProcWait();
|
||||
void demoInitCom();
|
||||
void demoProcCom();
|
||||
void getNowEventAction();
|
||||
void demoProc();
|
||||
void init();
|
||||
s32 getNowEventAction();
|
||||
bool demoProc();
|
||||
BOOL init();
|
||||
void setAttention(bool);
|
||||
void lookBack();
|
||||
void wait01();
|
||||
void talk01();
|
||||
void tact00();
|
||||
void wait_action(void*);
|
||||
bool wait01();
|
||||
bool talk01();
|
||||
bool tact00();
|
||||
BOOL wait_action(void*);
|
||||
void set_ke_root(int, int, int);
|
||||
void ke_execute();
|
||||
BOOL _draw();
|
||||
BOOL _execute();
|
||||
BOOL _delete();
|
||||
cPhs_State _create();
|
||||
void CreateHeap();
|
||||
BOOL CreateHeap();
|
||||
|
||||
void initTexPatternAnm(bool);
|
||||
BOOL initTexPatternAnm(bool);
|
||||
void playTexPatternAnm();
|
||||
void setAnm(int);
|
||||
void danceInit(int);
|
||||
void danceProc();
|
||||
void danceNext();
|
||||
|
||||
BOOL danceProc();
|
||||
BOOL danceNext();
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x290 */ dNpc_HeadAnm_c mHeadAnm;
|
||||
/* 0x2B4 */ s16 mEventIdx;
|
||||
/* 0x2B6 */ u8 field_0x2B6[0x2B8 - 0x2B6];
|
||||
/* 0x2B8 */ request_of_phase_process_class mPhs;
|
||||
/* 0x2C0 */ mDoExt_McaMorf* mpMorf;
|
||||
/* 0x2C4 */ u32 mShadowId;
|
||||
/* 0x2C8 */ J3DAnmTexPattern* m_head_tex_pattern;
|
||||
/* 0x2CC */ mDoExt_btpAnm mBtpAnm;
|
||||
/* 0x2E0 */ u8 mBlinkFrame;
|
||||
/* 0x2E1 */ u8 field_0x2E1[0x2E2 - 0x2E1];
|
||||
/* 0x2E2 */ s16 mBlinkTimer;
|
||||
/* 0x2E4 */ dBgS_ObjAcch mObjAcch;
|
||||
/* 0x4A8 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x4E8 */ dCcD_Stts mStts;
|
||||
/* 0x524 */ dCcD_Cyl mCyl;
|
||||
/* 0x654 */ s8 m_head_jnt_num;
|
||||
/* 0x655 */ s8 m_backbone_jnt_num;
|
||||
/* 0x656 */ u8 field_0x656[0x658 - 0x656];
|
||||
/* 0x658 */ dNpc_JntCtrl_c m_jnt;
|
||||
/* 0x68C */ cXyz mEyePos;
|
||||
/* 0x698 */ cXyz mAttnBasePos;
|
||||
/* 0x6A4 */ s16 mMaxHeadTurnVelocity;
|
||||
/* 0x6A6 */ u8 field_0x6A6[0x6A8 - 0x6A6];
|
||||
/* 0x6A8 */ s8 mAnmEnded;
|
||||
/* 0x6A9 */ u8 mAttnSetCount;
|
||||
/* 0x6AA */ u8 field_0x6AA[0x6AC - 0x6AA];
|
||||
/* 0x6AC */ f32 mAnmTimer;
|
||||
/* 0x6B0 */ u32 mCurrMsgNo;
|
||||
/* 0x6B4 */ u16 mFlags;
|
||||
/* 0x6B6 */ s16 mNoticeLinkTimer;
|
||||
/* 0x6B8 */ ActionFunc mCurrActionFunc;
|
||||
/* 0x6C4 */ u8 mDanceStep;
|
||||
/* 0x6C5 */ u8 mDanceStepTimer;
|
||||
/* 0x6C6 */ u8 field_0x6C6[0x6C8 - 0x6C6];
|
||||
/* 0x6C8 */ lineKe mLineKe;
|
||||
/* 0xE64 */ s8 mTexPatternIdx;
|
||||
/* 0xE65 */ s8 mCurrAnmIdx;
|
||||
/* 0xE66 */ s8 mAnmLoopCount;
|
||||
/* 0xE67 */ u8 mOrderFlags;
|
||||
/* 0xE68 */ s8 mState;
|
||||
/* 0xE69 */ s8 mReturnToState;
|
||||
/* 0xE6A */ u8 mType;
|
||||
/* 0xE6B */ s8 mActionStatus;
|
||||
/* 0xE6C */ s8 mTalkState;
|
||||
/* 0xE6D */ u8 mMsgAnmIdx;
|
||||
/* 0xE6E */ u8 field_0xE6E[0xE70 - 0xE6E];
|
||||
/* 0xE70 */ u32 mMtrlSndId;
|
||||
/* 0xE74 */ s8 mReverb;
|
||||
/* 0xE75 */ u8 mEvFlags;
|
||||
/* 0xE76 */ s16 mSoundTimer;
|
||||
/* 0xE78 */ s16 mTimer;
|
||||
/* 0xE7A */ u8 field_0xE7A;
|
||||
/* 0xE7B */ u8 field_0xE7B[0xE7C - 0xE7B];
|
||||
/* 0xE7C */ u32 mMsgNo;
|
||||
/* 0xE80 */ int mStaffIdx;
|
||||
}; // Size: 0xE84
|
||||
|
||||
#endif /* D_A_NPC_TT_H */
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@ enum {
|
||||
/* 0x54 */ DSNAP_TYPE_KB,
|
||||
/* 0x55 */ DSNAP_TYPE_KAMOME,
|
||||
/* 0x56 */ DSNAP_TYPE_KN,
|
||||
/* 0x57 */ DSNAP_TYPE_UNK57,
|
||||
/* 0x57 */ DSNAP_TYPE_TT,
|
||||
/* 0x58 */ DSNAP_TYPE_KM1,
|
||||
/* 0x59 */ DSNAP_TYPE_UNK59,
|
||||
/* 0x5A */ DSNAP_TYPE_UNK5A,
|
||||
|
||||
+787
-69
File diff suppressed because it is too large
Load Diff
+192
-12
@@ -1,33 +1,213 @@
|
||||
// The name of this .inc file is known because of an assert contained in it.
|
||||
|
||||
#include "d/actor/d_a_npc_tt.h"
|
||||
|
||||
static const s16 l_bck_ix_tbl[] = {
|
||||
dRes_INDEX_TT_BCK_WAIT01_e,
|
||||
dRes_INDEX_TT_BCK_TALK01_e,
|
||||
dRes_INDEX_TT_BCK_TALK01_e,
|
||||
dRes_INDEX_TT_BCK_TALK02_e,
|
||||
dRes_INDEX_TT_BCK_STEP01_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_TURN_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_ND_e,
|
||||
dRes_INDEX_TT_BCK_POSE_NL_e,
|
||||
dRes_INDEX_TT_BCK_POSE_NR_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
dRes_INDEX_TT_BCK_POSE_CC_e,
|
||||
};
|
||||
|
||||
static const s16 l_bas_ix_tbl[] = {
|
||||
dRes_INDEX_TT_BAS_WAIT01_e,
|
||||
dRes_INDEX_TT_BAS_TALK01_e,
|
||||
dRes_INDEX_TT_BAS_TALK01_e,
|
||||
dRes_INDEX_TT_BAS_TALK01_e,
|
||||
dRes_INDEX_TT_BAS_STEP01_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_TURN_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_ND_e,
|
||||
dRes_INDEX_TT_BAS_POSE_NL_e,
|
||||
dRes_INDEX_TT_BAS_POSE_NR_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
dRes_INDEX_TT_BAS_POSE_CC_e,
|
||||
};
|
||||
|
||||
static const int l_btp_ix_tbl[] = {
|
||||
dRes_INDEX_TT_BTP_MABA01_e
|
||||
};
|
||||
|
||||
/* 00002CD4-00002DEC .text initTexPatternAnm__10daNpc_Tt_cFb */
|
||||
void daNpc_Tt_c::initTexPatternAnm(bool) {
|
||||
/* Nonmatching */
|
||||
BOOL daNpc_Tt_c::initTexPatternAnm(bool i_modify) {
|
||||
|
||||
J3DModelData* modelData = mpMorf->getModel()->getModelData();
|
||||
|
||||
m_head_tex_pattern = (J3DAnmTexPattern*)dComIfG_getObjectRes("Tt", l_btp_ix_tbl[mTexPatternIdx]);
|
||||
JUT_ASSERT(130, m_head_tex_pattern != NULL);
|
||||
|
||||
if (!mBtpAnm.init(modelData, m_head_tex_pattern, TRUE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, i_modify, FALSE)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mBlinkFrame = 0;
|
||||
mBlinkTimer = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00002DEC-00002E78 .text playTexPatternAnm__10daNpc_Tt_cFv */
|
||||
void daNpc_Tt_c::playTexPatternAnm() {
|
||||
/* Nonmatching */
|
||||
if (cLib_calcTimer(&mBlinkTimer) == 0) {
|
||||
if (mBlinkFrame >= m_head_tex_pattern->getFrameMax()) {
|
||||
mBlinkFrame -= m_head_tex_pattern->getFrameMax();
|
||||
mBlinkTimer = cM_rndF(100.0f) + 30.0f;
|
||||
} else {
|
||||
mBlinkFrame++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 00002E78-00002F94 .text setAnm__10daNpc_Tt_cFi */
|
||||
void daNpc_Tt_c::setAnm(int) {
|
||||
/* Nonmatching */
|
||||
void daNpc_Tt_c::setAnm(int newAnmIdx) {
|
||||
if (mTexPatternIdx != 0) {
|
||||
mTexPatternIdx = 0;
|
||||
initTexPatternAnm(true);
|
||||
}
|
||||
s8 anmIdx = newAnmIdx;
|
||||
f32 morf = 8.0f;
|
||||
f32 speed = 1.0f;
|
||||
s32 loopMode = J3DFrameCtrl::EMode_LOOP;
|
||||
|
||||
if(newAnmIdx >= 7 && newAnmIdx <= 31) {
|
||||
morf = 7.0f;
|
||||
mSoundTimer = morf;
|
||||
}
|
||||
|
||||
if (newAnmIdx == 6) {
|
||||
speed = 0.9f;
|
||||
}
|
||||
|
||||
if (newAnmIdx < 5) {
|
||||
clrFlag(0x40);
|
||||
} else {
|
||||
loopMode = J3DFrameCtrl::EMode_NONE;
|
||||
}
|
||||
|
||||
if(newAnmIdx == 2) {
|
||||
speed = 0.0f;
|
||||
}
|
||||
|
||||
if (anmIdx != mCurrAnmIdx && anmIdx != -1) {
|
||||
mCurrAnmIdx = anmIdx;
|
||||
mAnmLoopCount = 0;
|
||||
mAnmTimer = 0.0f;
|
||||
dNpc_setAnm(mpMorf, loopMode, morf, speed, l_bck_ix_tbl[mCurrAnmIdx], l_bas_ix_tbl[mCurrAnmIdx], "Tt");
|
||||
}
|
||||
}
|
||||
|
||||
/* 00002F94-00002FFC .text danceInit__10daNpc_Tt_cFi */
|
||||
void daNpc_Tt_c::danceInit(int) {
|
||||
/* Nonmatching */
|
||||
void daNpc_Tt_c::danceInit(int param_1) {
|
||||
if (param_1 != 0 || !chkFlag(0x40)) {
|
||||
mDanceStep = 0;
|
||||
mDanceStepTimer = 8;
|
||||
setAnm(5);
|
||||
setFlag(0x40);
|
||||
}
|
||||
}
|
||||
|
||||
/* 00002FFC-000030B0 .text danceProc__10daNpc_Tt_cFv */
|
||||
void daNpc_Tt_c::danceProc() {
|
||||
/* Nonmatching */
|
||||
BOOL daNpc_Tt_c::danceProc() {
|
||||
if (!chkFlag(0x40)) {
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
if (mpMorf->isMorf()) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (mDanceStep == 5 && mDanceStepTimer == 0x19) {
|
||||
mHeadAnm.swing_vertical_init(2, 0x1194, -1000, 1);
|
||||
}
|
||||
|
||||
if(mDanceStepTimer != 0) {
|
||||
mDanceStepTimer--;
|
||||
return FALSE;
|
||||
}
|
||||
return danceNext();
|
||||
}
|
||||
|
||||
/* 000030B0-00003210 .text danceNext__10daNpc_Tt_cFv */
|
||||
void daNpc_Tt_c::danceNext() {
|
||||
/* Nonmatching */
|
||||
BOOL daNpc_Tt_c::danceNext() {
|
||||
if (mDanceStep < 6) {
|
||||
mDanceStep++;
|
||||
} else {
|
||||
mDanceStep = 0;
|
||||
}
|
||||
|
||||
switch(mDanceStep) {
|
||||
case 0:
|
||||
case 2:
|
||||
setAnm(5);
|
||||
mDanceStepTimer = 8;
|
||||
break;
|
||||
case 1:
|
||||
setAnm(10);
|
||||
mDanceStepTimer = 8;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
setAnm(9);
|
||||
mDanceStepTimer = 8;
|
||||
break;
|
||||
case 4:
|
||||
setAnm(6);
|
||||
mDanceStepTimer = 58;
|
||||
break;
|
||||
case 5:
|
||||
if(chkFlag(0x100)) {
|
||||
clrFlag(0x100);
|
||||
fopAcM_seStart(this, JA_SE_CV_TT_DANCE_FIN, 0);
|
||||
}
|
||||
setAnm(8);
|
||||
mDanceStepTimer = 53;
|
||||
break;
|
||||
}
|
||||
return mDanceStep == 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user