summaryrefslogtreecommitdiff
path: root/src/d/actor
diff options
context:
space:
mode:
authorZeclos <Zeclos99@gmail.com>2026-07-05 19:11:40 +0200
committerGitHub <noreply@github.com>2026-07-05 13:11:40 -0400
commita7a5b5d6364e06e439d53a095ef6fd1ef25d7a68 (patch)
tree5f08ec2dc97854a0e8225f3705528f9cbed03737 /src/d/actor
parent6051ac9b5b72f259b9d5d65fc9b7ad097d4bde38 (diff)
D_a_npc_tt (#1099)
* matching * cleanup * d_a_npc_tt matching outside of _create and rodata * matching * cleanup
Diffstat (limited to 'src/d/actor')
-rw-r--r--src/d/actor/d_a_npc_tt.cpp856
-rw-r--r--src/d/actor/d_a_npc_tt_anm.inc204
2 files changed, 979 insertions, 81 deletions
diff --git a/src/d/actor/d_a_npc_tt.cpp b/src/d/actor/d_a_npc_tt.cpp
index 39016019..455b344f 100644
--- a/src/d/actor/d_a_npc_tt.cpp
+++ b/src/d/actor/d_a_npc_tt.cpp
@@ -6,225 +6,944 @@
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_tt.h"
#include "m_Do/m_Do_ext.h"
+#include "res/Object/Tt.h"
+#include "d/d_snap.h"
+#include "d/actor/d_a_player_main.h"
+
+static fpc_ProcID l_msgId;
+static msg_class* l_msg;
/* 00000078-00000098 .text daNpc_tt_XyCheckCB__FPvi */
-static s16 daNpc_tt_XyCheckCB(void*, int) {
- /* Nonmatching */
+static s16 daNpc_tt_XyCheckCB(void* i_this, int i_itemBtn) {
+ return ((daNpc_Tt_c*)i_this)->XyCheckCB(i_itemBtn);
}
/* 00000098-000000BC .text XyCheckCB__10daNpc_Tt_cFi */
-void daNpc_Tt_c::XyCheckCB(int) {
- /* Nonmatching */
+s16 daNpc_Tt_c::XyCheckCB(int i_itemBtn) {
+ return dComIfGp_getSelectItem(i_itemBtn) == dItemNo_WIND_WAKER_e ? TRUE : FALSE;
}
/* 000000BC-00000108 .text daNpc_tt_XyEventCB__FPvi */
-static s16 daNpc_tt_XyEventCB(void*, int) {
- /* Nonmatching */
+static s16 daNpc_tt_XyEventCB(void* i_this, int i_itemBtn) {
+ daNpc_Tt_c* a_this = (daNpc_Tt_c*)i_this;
+ a_this->mEventIdx = dComIfGp_evmng_getEventIdx("TACT_TT10");
+ return a_this->mEventIdx;
}
/* 00000108-000002D8 .text nodeCallBack_Tt__FP7J3DNodei */
-static BOOL nodeCallBack_Tt(J3DNode*, int) {
- /* Nonmatching */
+static BOOL nodeCallBack_Tt(J3DNode* node, int calcTiming) {
+ cXyz temp;
+ cXyz temp2;
+ if (calcTiming == J3DNodeCBCalcTiming_In) {
+ J3DModel* model = j3dSys.getModel();
+ daNpc_Tt_c* i_this = (daNpc_Tt_c*)model->getUserArea();
+ J3DJoint* joint = (J3DJoint*)node;
+ int jntNo = joint->getJntNo();
+
+ if(i_this != NULL) {
+ MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
+ if (jntNo == i_this->m_head_jnt_num) {
+ temp.setall(0.0f);
+ cMtx_YrotM(*calc_mtx, -i_this->getHead_y());
+ cMtx_ZrotM(*calc_mtx, -i_this->getHead_x() - i_this->mHeadAnm.field_0x00);
+ MtxPosition(&temp, &temp2);
+ i_this->setAttentionBasePos(temp2);
+ temp.set(20.0f, -20.0f, 0.0f);
+
+ MtxPosition(&temp, &temp2);
+ i_this->setEyePos(temp2);
+ i_this->incAttnSetCount();
+
+ } else if (jntNo == i_this->m_backbone_jnt_num) {
+ mDoMtx_XrotM(*calc_mtx, i_this->getBackbone_y());
+ mDoMtx_ZrotM(*calc_mtx, i_this->m_jnt.getBackbone_x());
+ }
+ cMtx_copy(*calc_mtx, J3DSys::mCurrentMtx);
+ model->setAnmMtx(jntNo, *calc_mtx);
+ }
+ }
+ return TRUE;
}
/* 000002D8-00000368 .text setAnmStatus__10daNpc_Tt_cFv */
void daNpc_Tt_c::setAnmStatus() {
- /* Nonmatching */
+ switch(mState) {
+ case 1:
+ case 2:
+ if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_0C40)) {
+ danceInit(0);
+ } else {
+ setAnm(4);
+ }
+ break;
+ case 3:
+ break;
+ default:
+ setAnm(0);
+ break;
+ }
+}
+
+//probably unused JUT_ASSERT
+static void dummy() {
+ OSReport("Tt");
+ OSReport("d_a_npc_tt.cpp");
+ OSReport("0");
+ OSReport("Halt");
}
+#include "d/actor/d_a_npc_tt_anm.inc"
+
/* 00000368-000003DC .text eventOrder__10daNpc_Tt_cFv */
void daNpc_Tt_c::eventOrder() {
- /* Nonmatching */
+ if (ChkOrder(1)) {
+ eventInfo.onCondition(dEvtCnd_CANTALK_e);
+ fopAcM_orderSpeakEvent(this);
+ }
+ if (ChkOrder(2)) {
+ eventInfo.onCondition(dEvtCnd_CANTALK_e);
+ }
+ if (ChkOrder(4)) {
+ eventInfo.onCondition(dEvtCnd_CANTALKITEM_e);
+ }
}
/* 000003DC-00000484 .text checkOrder__10daNpc_Tt_cFv */
void daNpc_Tt_c::checkOrder() {
- /* Nonmatching */
+ if (eventInfo.mCommand != dEvtCmd_INDEMO_e) {
+ if (eventInfo.mCommand == dEvtCmd_INTALK_e && ChkOrder(7)) {
+ if (dComIfGp_event_chkTalkXY()) {
+ setFlag(0x4);
+ } else {
+ setFlag(0x2);
+ }
+ talkInit();
+ }
+ }
+ ClrOrder();
}
/* 00000484-000004F4 .text next_msgStatus__10daNpc_Tt_cFPUl */
-void daNpc_Tt_c::next_msgStatus(unsigned long*) {
- /* Nonmatching */
+u16 daNpc_Tt_c::next_msgStatus(u32* pMsgNo) {
+ u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
+
+ switch (*pMsgNo) {
+ case 0x22C5:
+ case 0x22C7:
+ case 0x22C8:
+ case 0x22D5:
+ case 0x22D6:
+ (*pMsgNo)++;
+ break;
+
+ case 0x22C6:
+ *pMsgNo = 0x22D5;
+ break;
+ case 0x22D7:
+ *pMsgNo = 0x22C7;
+ break;
+
+ default:
+ msgStatus = fopMsgStts_MSG_ENDS_e;
+ break;
+ }
+ return msgStatus;
}
+
/* 000004F4-000005D0 .text getMsg__10daNpc_Tt_cFv */
-void daNpc_Tt_c::getMsg() {
- /* Nonmatching */
+u32 daNpc_Tt_c::getMsg() {
+ u32 msgNo;
+ clrFlag(0x20);
+ switch(mState) {
+ case 2:
+ if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_0C40)) {
+ msgNo = 0x22CB;
+ } else {
+ if(dComIfGs_isEventBit(dSv_event_flag_c::UNK_0B08)) {
+ msgNo = 0x22CA;
+ setFlag(0x20);
+ } else {
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_0B08);
+ msgNo = 0x22C5;
+ setFlag(0x20);
+ }
+ }
+ break;
+ default:
+ msgNo = mMsgNo;
+ switch(msgNo) {
+ case 0x5B3:
+ dComIfGp_setMelodyNum(5);
+ break;
+ }
+ }
+ return msgNo;
}
/* 000005D0-00000650 .text setCollision__10daNpc_Tt_cFv */
void daNpc_Tt_c::setCollision() {
- /* Nonmatching */
+
+ cXyz centerPos(current.pos);
+ f32 cylCollisionRadius = 48.0f;
+ f32 height = 140.0f;
+ mCyl.SetC(centerPos);
+ mCyl.SetR(cylCollisionRadius);
+ mCyl.SetH(height);
+ dComIfG_Ccsp()->Set(&mCyl);
}
/* 00000650-00000664 .text talkInit__10daNpc_Tt_cFv */
void daNpc_Tt_c::talkInit() {
- /* Nonmatching */
+ mTalkState = TALK_INIT;;
+ mMsgAnmIdx = 0xFF;
}
/* 00000664-00000718 .text msgAnm__10daNpc_Tt_cFv */
void daNpc_Tt_c::msgAnm() {
- /* Nonmatching */
+ if(mMsgAnmIdx != dComIfGp_getMesgAnimeAttrInfo()) {
+ mMsgAnmIdx = dComIfGp_getMesgAnimeAttrInfo();
+ switch(mMsgAnmIdx) {
+ case 0:
+ setAnm(0);
+ break;
+ case 1:
+ setAnm(1);
+ break;
+ case 2:
+ setAnm(3);
+ break;
+ case 3:
+ setAnm(4);
+ break;
+ case 4:
+ danceInit(0);
+ break;
+ case 5:
+ setAnm(2);
+ break;
+ }
+ }
}
/* 00000718-00000730 .text msgPushButton__10daNpc_Tt_cFv */
void daNpc_Tt_c::msgPushButton() {
- /* Nonmatching */
+ if ((s32)mCurrMsgNo != 0x22C6) {
+ return;
+ }
+ mNoticeLinkTimer = 0xF;
}
/* 00000730-00000778 .text msgContinue__10daNpc_Tt_cFv */
void daNpc_Tt_c::msgContinue() {
- /* Nonmatching */
+ switch(mCurrMsgNo) {
+ case 0x22D5:
+ if (mNoticeLinkTimer > 0) {
+ mNoticeLinkTimer--;
+ } else {
+ fopMsgM_messageSendOn();
+ }
+ break;
+ }
}
/* 00000778-00000900 .text talk__10daNpc_Tt_cFv */
-void daNpc_Tt_c::talk() {
- /* Nonmatching */
+u16 daNpc_Tt_c::talk() {
+ u16 msgStatus = 0xFF;
+ if (mTalkState == TALK_INIT) {
+ l_msgId = fpcM_ERROR_PROCESS_ID_e;
+ mCurrMsgNo = getMsg();
+ mTalkState = TALK_MSG_CREATE;
+ } else if (mTalkState != TALK_FINISHED) {
+ if(l_msgId == fpcM_ERROR_PROCESS_ID_e) {
+ l_msgId = fopMsgM_messageSet(mCurrMsgNo, this);
+ } else {
+ msgAnm();
+ switch(mTalkState) {
+ case TALK_MSG_CREATE:
+ l_msg = fopMsgM_SearchByID(l_msgId);
+ if (l_msg != NULL) {
+ mTalkState = TALK_ACTIVE;
+ }
+ break;
+
+ case TALK_ACTIVE:
+ if(l_msg != NULL) {
+ msgStatus = l_msg->mStatus;
+ if(msgStatus == fopMsgStts_MSG_CONTINUES_e) {
+ msgContinue();
+ } else if(msgStatus == fopMsgStts_MSG_DISPLAYED_e) {
+ msgPushButton();
+ l_msg->mStatus = next_msgStatus(&mCurrMsgNo);
+ if(l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
+ fopMsgM_messageSet(mCurrMsgNo);
+ }
+ } else if(msgStatus == fopMsgStts_BOX_CLOSED_e) {
+ l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
+ l_msgId = fpcM_ERROR_PROCESS_ID_e;
+ l_msg = NULL;
+ }
+ }
+ break;
+ }
+ }
+ }
+ return msgStatus;
}
/* 00000900-000009EC .text demoInitChange__10daNpc_Tt_cFv */
void daNpc_Tt_c::demoInitChange() {
- /* Nonmatching */
+ int* a_intP = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "prm0");
+ JUT_ASSERT(DEMO_SELECT(758, 758), a_intP);
+
+ if(a_intP != NULL) {
+ mEventIdx = dComIfGp_evmng_getEventIdx("TACT_TT11");
+ setEvFlag(0x1);
+ fopAcM_orderChangeEventId(daPy_getPlayerLinkActorClass(), this, mEventIdx, 0, 0xFFFF);
+ }
}
/* 000009EC-00000B1C .text demoProcTact1__10daNpc_Tt_cFv */
-void daNpc_Tt_c::demoProcTact1() {
- /* Nonmatching */
+bool daNpc_Tt_c::demoProcTact1() {
+ switch(daPy_getPlayerLinkActorClass()->getTactTimerCancel()) {
+ case 1:
+ mEventIdx = dComIfGp_evmng_getEventIdx("TACT_TT12");
+ setEvFlag(0x1);
+ fopAcM_orderChangeEventId(daPy_getPlayerLinkActorClass(), this, mEventIdx, 0, 0xFFFF);
+ break;
+ case 2:
+ mEventIdx = dComIfGp_evmng_getEventIdx("TACT_TT13");
+ setEvFlag(0x1);
+ fopAcM_orderChangeEventId(daPy_getPlayerLinkActorClass(), this, mEventIdx, 0, 0xFFFF);
+ break;
+ default:
+ dComIfGs_onEventBit(dSv_event_flag_c::UNK_0C40);
+ dComIfGp_evmng_cutEnd(mStaffIdx);
+ break;
+ }
+
+ return TRUE;
}
/* 00000B1C-00000BA0 .text demoInitPatten__10daNpc_Tt_cFv */
void daNpc_Tt_c::demoInitPatten() {
- /* Nonmatching */
+ setEvFlag(0x4);
+ mSoundTimer = 0;
+ danceInit(0);
+ int* cnt = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Cnt");
+ if(cnt != NULL) {
+ field_0xE7A = *cnt;
+ } else {
+ field_0xE7A = 2;
+ }
}
/* 00000BA0-00000D40 .text demoProcPatten__10daNpc_Tt_cFv */
-void daNpc_Tt_c::demoProcPatten() {
- /* Nonmatching */
+bool daNpc_Tt_c::demoProcPatten() {
+ if (field_0xE7A == 0) {
+ dComIfGp_evmng_cutEnd(mStaffIdx);
+ clrEvFlag(0x4);
+ } else {
+ if(danceProc()) {
+ field_0xE7A--;
+ }
+ if(mSoundTimer > 0) {
+ mSoundTimer--;
+ if(mSoundTimer == 0) {
+ switch(mCurrAnmIdx) {
+ case 8:
+ fopAcM_seStart(this, JA_SE_CV_TT_DANCE_FIN, 0);
+ break;
+ case 9:
+ fopAcM_seStart(this, JA_SE_CV_TT_DANCE_2, 0);
+ break;
+ case 10:
+ fopAcM_seStart(this, JA_SE_CV_TT_DANCE_1, 0);
+ break;
+ }
+
+ }
+ }
+ }
+ return FALSE;
}
/* 00000D40-00000E04 .text demoInitSpeak__10daNpc_Tt_cFv */
void daNpc_Tt_c::demoInitSpeak() {
- /* Nonmatching */
+ talkInit();
+ int* a_intP = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "MsgNo");
+ JUT_ASSERT(882, a_intP);
+ mMsgNo = *a_intP;
+ switch(mMsgNo) {
+ case 0x22CE:
+ if(dKy_daynight_check() == dKy_TIME_NIGHT_e) {
+ mMsgNo = 0x22CF;
+ }
+ break;
+ }
}
/* 00000E04-00000E5C .text demoProcSpeak__10daNpc_Tt_cFv */
-void daNpc_Tt_c::demoProcSpeak() {
- /* Nonmatching */
+bool daNpc_Tt_c::demoProcSpeak() {
+ u16 temp = talk();
+ if (temp == fopMsgStts_BOX_CLOSED_e || temp == 0xFE) {
+ dComIfGp_evmng_cutEnd(mStaffIdx);
+ }
+ return false;
}
/* 00000E5C-00000EC4 .text demoInitWait__10daNpc_Tt_cFv */
void daNpc_Tt_c::demoInitWait() {
- /* Nonmatching */
+ int* pTimer = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "Timer");
+ if (pTimer != NULL) {
+ mTimer = *pTimer;
+ } else {
+ mTimer = 0;
+ }
}
/* 00000EC4-00000F14 .text demoProcWait__10daNpc_Tt_cFv */
-void daNpc_Tt_c::demoProcWait() {
- /* Nonmatching */
+bool daNpc_Tt_c::demoProcWait() {
+ if (mTimer > 0) {
+ mTimer--;
+ } else {
+ dComIfGp_evmng_cutEnd(mStaffIdx);
+ }
+ return FALSE;
}
/* 00000F14-00001020 .text demoInitCom__10daNpc_Tt_cFv */
void daNpc_Tt_c::demoInitCom() {
- /* Nonmatching */
+ daPy_lk_c* pLink = (daPy_lk_c*)daPy_getPlayerLinkActorClass();
+ int* hidePl = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "HIDE_PL");
+ if (hidePl != NULL) {
+ if (*hidePl != 0) {
+ pLink->onPlayerNoDraw();
+ } else {
+ pLink->offPlayerNoDraw();
+ }
+ }
+
+ int* disp = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "DISP");
+ if (disp != NULL) {
+ if (*disp != 0) {
+ clrEvFlag(0x2);
+ } else {
+ setEvFlag(0x2);
+ }
+ }
+
+ int* anm = dComIfGp_evmng_getMyIntegerP(mStaffIdx,"Anm");
+ if (anm != NULL) {
+ setAnm(*anm & 0xff);
+ }
}
/* 00001020-00001040 .text demoProcCom__10daNpc_Tt_cFv */
void daNpc_Tt_c::demoProcCom() {
- /* Nonmatching */
+ if (chkEvFlag(0x2)) {
+ setFlag(0x8);
+ }
}
/* 00001040-00001088 .text getNowEventAction__10daNpc_Tt_cFv */
-void daNpc_Tt_c::getNowEventAction() {
- /* Nonmatching */
+s32 daNpc_Tt_c::getNowEventAction() {
+ static char* action_table[] = {
+ "WAIT",
+ "SPEAK",
+ "PATTEN",
+ "CHANGE",
+ "TACT0",
+ "TACT1",
+ };
+
+ return dComIfGp_evmng_getMyActIdx(mStaffIdx, action_table, ARRAY_SIZE(action_table), FALSE, 1);
}
/* 00001088-00001238 .text demoProc__10daNpc_Tt_cFv */
-void daNpc_Tt_c::demoProc() {
- /* Nonmatching */
+bool daNpc_Tt_c::demoProc() {
+ bool temp = false;
+
+ if(chkEvFlag(0x1)) {
+ mStaffIdx = dComIfGp_evmng_getMyStaffId("Tt");
+ clrEvFlag(0x1);
+ }
+ s32 eventAction = getNowEventAction();
+ if(dComIfGp_evmng_getIsAddvance(mStaffIdx)) {
+ demoInitCom();
+ setFlag(0x80);
+ switch(eventAction) {
+ case 1:
+ demoInitSpeak();
+ break;
+ case 0:
+ demoInitWait();
+ break;
+ case 2:
+ demoInitPatten();
+ temp = true;
+ break;
+ case 3:
+ demoInitChange();
+ break;
+ }
+ }
+
+ switch(eventAction) {
+ case 1:
+ temp = demoProcSpeak();
+ break;
+ case 0:
+ demoProcWait();
+ break;
+ case 2:
+ demoProcPatten();
+ break;
+ case 3:
+ break;
+ case 4:
+ dComIfGp_evmng_cutEnd(mStaffIdx);
+ break;
+ case 5:
+ demoProcTact1();
+ break;
+ default:
+ dComIfGp_evmng_cutEnd(mStaffIdx);
+ break;
+ }
+
+ demoProcCom();
+ if(eventAction != 2) {
+ danceProc();
+ }
+ return temp;
}
/* 00001238-00001420 .text init__10daNpc_Tt_cFv */
-void daNpc_Tt_c::init() {
- /* Nonmatching */
+BOOL daNpc_Tt_c::init() {
+ attention_info.flags = fopAc_Attn_ACTION_SPEAK_e|fopAc_Attn_LOCKON_TALK_e;
+ attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xAB;
+ attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xAB;
+ gravity = -30.0f;
+ fopAcM_SetStatusMap(this, 0x27);
+ fopAcM_OnStatus(this, fopAcStts_SHOWMAP_e);
+
+ switch(mType) {
+ case 0:
+ if(setAction(&daNpc_Tt_c::wait_action, NULL)) {
+ // nothing?
+ }
+ break;
+ }
+
+ mAttnBasePos.set(current.pos);
+ mEyePos.set(current.pos);
+
+ J3DModel* model = mpMorf->getModel();
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(current.angle.y);
+ model->setBaseTRMtx(mDoMtx_stack_c::get());
+ ke_execute();
+ mStts.Init(0xFF, 0xFF, this);
+ mCyl.Set(dNpc_cyl_src);
+ mCyl.SetStts(&mStts);
+ eventInfo.setXyCheckCB(daNpc_tt_XyCheckCB);
+ eventInfo.setXyEventCB(daNpc_tt_XyEventCB);
+ mMtrlSndId = 0;
+ mReverb = dComIfGp_getReverb(fopAcM_GetRoomNo(this));
+ return TRUE;
}
/* 00001420-00001474 .text setAttention__10daNpc_Tt_cFb */
-void daNpc_Tt_c::setAttention(bool) {
- /* Nonmatching */
+void daNpc_Tt_c::setAttention(bool param_1) {
+ if (!param_1 && mAttnSetCount >= 2) {
+ return;
+ }
+
+ eyePos.set(mEyePos.x, mEyePos.y, mEyePos.z);
+ attention_info.position.set(mAttnBasePos.x, mAttnBasePos.y + 65.0f, mAttnBasePos.z);
}
/* 00001474-000015D8 .text lookBack__10daNpc_Tt_cFv */
void daNpc_Tt_c::lookBack() {
- /* Nonmatching */
+ cXyz temp2;
+ cXyz temp(0.0f, 0.0f, 0.0f);
+ cXyz* dstPos = NULL;
+ s16 desiredYRot = current.angle.y;
+ bool headOnlyFollow = false;
+
+ switch(mState) {
+ case 1:
+ desiredYRot = home.angle.y;
+ if(desiredYRot != current.angle.y) {
+ m_jnt.setTrn();
+ } else {
+ m_jnt.clrTrn();
+ }
+ break;
+
+ default:
+ if (chkFlag(0x20)) {
+ desiredYRot = home.angle.y;
+ m_jnt.clrTrn();
+ } else {
+ m_jnt.setTrn();
+ temp2 = dNpc_playerEyePos(-20.0f);
+ dstPos = &temp2;
+ temp.set(current.pos);
+ temp.y = eyePos.y;
+ }
+ break;
+ }
+
+ if (m_jnt.trnChk()) {
+ cLib_addCalcAngleS2(&mMaxHeadTurnVelocity, 0x800, 4, 0x800);
+ } else {
+ mMaxHeadTurnVelocity = 0;
+ }
+
+ m_jnt.lookAtTarget(&current.angle.y, dstPos, temp, desiredYRot, mMaxHeadTurnVelocity, headOnlyFollow);
+ shape_angle.y = current.angle.y;
}
/* 000015D8-00001734 .text wait01__10daNpc_Tt_cFv */
-void daNpc_Tt_c::wait01() {
- /* Nonmatching */
+bool daNpc_Tt_c::wait01() {
+ if(chkFlag(0x4)) {
+ mReturnToState = mState;
+ mState = 3;
+ setAnmStatus();
+ mTimer = 0x14;
+ setEvFlag(0x1);
+ fopAcM_seStart(this, JA_SE_PRE_TAKT, 0);
+ return demoProc();
+
+ } else if(chkFlag(0x2)) {
+ mReturnToState = mState;
+ mState = 2;
+ setAnmStatus();
+ } else {
+ SetOrder(0x2);
+ if(!dComIfGs_isEventBit(dSv_event_flag_c::UNK_0C40) && dComIfGs_isEventBit(dSv_event_flag_c::UNK_0B08)) {
+ SetOrder(0x4);
+ }
+ }
+ danceProc();
+ return mpMorf->isMorf();
}
/* 00001734-00001804 .text talk01__10daNpc_Tt_cFv */
-void daNpc_Tt_c::talk01() {
- /* Nonmatching */
+bool daNpc_Tt_c::talk01() {
+ u16 temp = talk();
+ if(mCurrMsgNo == 0x22C6 && dComIfGp_checkMesgSendButton()) {
+ clrFlag(0x20);
+ }
+
+ if(temp == fopMsgStts_BOX_CLOSED_e) {
+ mState = mReturnToState;
+ setAnmStatus();
+ dComIfGp_event_reset();
+ clrFlag(0x2);
+ clrFlag(0x4);
+ }
+ danceProc();
+ return mpMorf->isMorf();
}
/* 00001804-00001894 .text tact00__10daNpc_Tt_cFv */
-void daNpc_Tt_c::tact00() {
- /* Nonmatching */
+bool daNpc_Tt_c::tact00() {
+ if(dComIfGp_evmng_endCheck(mEventIdx)) {
+ mState = mReturnToState;
+ setAnmStatus();
+ dComIfGp_event_reset();
+ clrFlag(0x2);
+ clrFlag(0x4);
+ return true;
+ }
+ return demoProc();
}
/* 00001894-00001970 .text wait_action__10daNpc_Tt_cFPv */
-void daNpc_Tt_c::wait_action(void*) {
- /* Nonmatching */
+BOOL daNpc_Tt_c::wait_action(void*) {
+ if(mActionStatus == ACTION_STARTING) {
+ mState = 1;
+ setAnmStatus();
+ mActionStatus++; // set to ACTION_ONGOING
+ } else if(mActionStatus != ACTION_ENDING) {
+ bool temp;
+ clrFlag(0x8);
+ switch(mState) {
+ case 1:
+ temp = wait01();
+ break;
+ case 2:
+ temp = talk01();
+ break;
+ case 3:
+ temp = tact00();
+ break;
+ default:
+ temp = false;
+ break;
+ }
+ lookBack();
+ setAttention(temp);
+ }
+ return TRUE;
}
/* 00001970-00001BAC .text ke_control__7tt_ke_sFf */
-void tt_ke_s::ke_control(float) {
- /* Nonmatching */
+void tt_ke_s::ke_control(f32 param_1) {
+ int i;
+ cXyz* temp2 = &field_0x00[1];
+ cXyz* temp3 = &field_0x78[1];
+ cXyz temp;
+ cXyz temp6;
+ cXyz temp4;
+ temp.set(0.0f, 0.0f, 7.875f);
+
+ f32 _065 = 0.65f;
+
+ for(i = 1; i < 10; i++, temp2++, temp3++) {
+ temp4.x = temp3->x + (temp2->x - (temp2 - 1)->x);
+ temp4.z = temp3->z + (temp2->z - (temp2 - 1)->z);
+
+ f32 temp7 = temp2->y + temp3->y +-3.0f;
+
+ if(temp7 < param_1) {
+ temp7 = param_1;
+ }
+
+ temp4.y = temp7 - (temp2-1)->y;
+ mDoMtx_XrotS(*calc_mtx, -cM_atan2s(temp4.y, temp4.z));
+ mDoMtx_YrotM(*calc_mtx, (s16)cM_atan2s(temp4.x, std::sqrtf(temp4.y * temp4.y + temp4.z * temp4.z)));
+ MtxPosition(&temp, &temp6);
+ *temp3 = *temp2;
+ *temp2 = *(temp2-1) + temp6;
+ temp3->x = (temp2->x - temp3->x) * _065;
+ temp3->y = (temp2->y - temp3->y) * _065;
+ temp3->z = (temp2->z - temp3->z) * _065;
+ }
}
/* 00001BAC-00001BE4 .text ke_pos_set__7tt_ke_sFP4cXyz */
-void tt_ke_s::ke_pos_set(cXyz*) {
- /* Nonmatching */
+void tt_ke_s::ke_pos_set(cXyz* i_param) {
+ for(int i = 0; i < 10; i_param++) {
+ *i_param = field_0x00[i];
+ i++;
+ }
}
/* 00001BE4-00001D48 .text set_ke_root__10daNpc_Tt_cFiii */
-void daNpc_Tt_c::set_ke_root(int, int, int) {
- /* Nonmatching */
+void daNpc_Tt_c::set_ke_root(int param_1, int param_2, int param_3) {
+ cXyz temp(0.0f, 0.0f, 0.0f);
+ MTXCopy(mpMorf->getModel()->getAnmMtx(param_1), *calc_mtx);
+ MtxPosition(&temp, &mLineKe.field_0x6C8[param_3].field_0x00[0]);
+
+ MTXCopy(mpMorf->getModel()->getAnmMtx(param_2), *calc_mtx);
+ MtxPosition(&temp, &mLineKe.field_0x6C8[param_3 + 3].field_0x00[0]);
+
+ mLineKe.field_0x6C8[param_3+1].field_0x00[0] = (mLineKe.field_0x6C8[param_3 + 3].field_0x00[0] - mLineKe.field_0x6C8[param_3].field_0x00[0]) * 0.3333f + mLineKe.field_0x6C8[param_3].field_0x00[0];
+
+ mLineKe.field_0x6C8[param_3+2].field_0x00[0] = (mLineKe.field_0x6C8[param_3 + 3].field_0x00[0] - mLineKe.field_0x6C8[param_3].field_0x00[0]) * 0.6667f + mLineKe.field_0x6C8[param_3].field_0x00[0];
}
/* 00001D48-00001E04 .text ke_execute__10daNpc_Tt_cFv */
void daNpc_Tt_c::ke_execute() {
- /* Nonmatching */
+ mpMorf->calc();
+
+ set_ke_root(6, 7, 0);
+ set_ke_root(10, 11, 4);
+ int i;
+ tt_ke_s* ke = mLineKe.field_0x6C8;
+ f32 y = current.pos.y + 3.0f;
+
+ for (i = 0; i < 8; i++, ke++) {
+ ke->ke_control(y);
+ ke->ke_pos_set(mLineKe.mLineMat.getPos(i));
+ }
}
/* 00001E04-00001F84 .text _draw__10daNpc_Tt_cFv */
BOOL daNpc_Tt_c::_draw() {
- /* Nonmatching */
+ J3DModel* pModel = mpMorf->getModel();
+ J3DModelData* pModelData = pModel->getModelData();
+ if (chkFlag(0x8)) {
+ return TRUE;
+ }
+ g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType(pModel, &tevStr);
+ mBtpAnm.entry(pModelData, mBlinkFrame);
+ mpMorf->entryDL();
+ mBtpAnm.remove(pModelData);
+ f32 _100 = 100.0f;
+ f32 _450 = 450.0f;
+ cXyz shadowPos(current.pos.x, current.pos.y + _100, current.pos.z);
+
+ mShadowId = dComIfGd_setShadow(
+ mShadowId, 1, pModel, &shadowPos, _450, 20.0f,
+ current.pos.y, mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr
+ );
+
+ mLineKe.mLineMat.update(10, 0.8f, (GXColor){0xC9, 0xCA, 0xE4, 0xFF}, 0, &tevStr);
+ dComIfGd_set3DlineMat(&mLineKe.mLineMat);
+
+ dSnap_RegistFig(DSNAP_TYPE_TT, this, 1.0f, 1.0f, 1.0f);
+ return TRUE;
}
/* 00001F84-00002158 .text _execute__10daNpc_Tt_cFv */
BOOL daNpc_Tt_c::_execute() {
- /* Nonmatching */
+ m_jnt.setParam(
+ /* mMaxBackboneX */ 0,
+ /* mMaxBackboneY */ 0x1C70,
+ /* mMinBackboneX */ 0,
+ /* mMinBackboneY */ -0x1C70,
+ /* mMaxHeadX */ 0x1FFE,
+ /* mMaxHeadY */ 9000,
+ /* mMinHeadX */ -0x1FFE,
+ /* mMinHeadY */ -9000,
+ /* mMaxTurnStep */ 0x1000
+ );
+
+ playTexPatternAnm();
+
+ mAnmEnded = mpMorf->play(&eyePos, mMtrlSndId, mReverb);
+ if(mpMorf->getFrame() < mAnmTimer) {
+ mAnmEnded = 1;
+ }
+
+ mAnmTimer = mpMorf->getFrame();
+ if (mAnmEnded != 0) {
+ switch(mCurrAnmIdx) {
+ case 3:
+ if (mAnmLoopCount > 0) {
+ setAnm(0);
+ } else {
+ mAnmLoopCount++;
+ }
+ break;
+ }
+ }
+ mHeadAnm.move();
+ checkOrder();
+ (this->*mCurrActionFunc)(NULL);
+ eventOrder();
+ fopAcM_posMoveF(this, mStts.GetCCMoveP());
+ mObjAcch.CrrPos(*dComIfG_Bgsp());
+ mMtrlSndId = 0;
+
+ if (!mObjAcch.ChkGroundHit()) {
+ mMtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd);
+ }
+
+ tevStr.mRoomNo = dComIfG_Bgsp()->GetRoomId(mObjAcch.m_gnd);
+ tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mObjAcch.m_gnd);
+
+ J3DModel* pModel = mpMorf->getModel();
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(current.angle.y);
+ pModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ setCollision();
+ ke_execute();
+ return TRUE;
}
/* 00002158-000021A8 .text _delete__10daNpc_Tt_cFv */
BOOL daNpc_Tt_c::_delete() {
- /* Nonmatching */
+ dComIfG_resDelete(&mPhs, "Tt");
+ if (mpMorf != NULL) {
+ mpMorf->stopZelAnime();
+ }
+ return TRUE;
}
/* 000021A8-000021C8 .text CheckCreateHeap__FP10fopAc_ac_c */
-static BOOL CheckCreateHeap(fopAc_ac_c*) {
- /* Nonmatching */
+static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
+ return ((daNpc_Tt_c*)i_this)->CreateHeap();
}
/* 000021C8-0000241C .text _create__10daNpc_Tt_cFv */
cPhs_State daNpc_Tt_c::_create() {
- /* Nonmatching */
+ fopAcM_ct_Retail(this, daNpc_Tt_c);
+ cPhs_State state = dComIfG_resLoad(&mPhs, "Tt");
+ if (state == cPhs_COMPLEATE_e) {
+ fopAcM_ct_Demo(this, daNpc_Tt_c);
+ switch(fopAcM_GetName(this)) {
+ case fpcNm_NPC_TT_e:
+ mType = 0;
+ break;
+ default:
+ return cPhs_ERROR_e;
+ }
+
+ if (!fopAcM_entrySolidHeap(this, &CheckCreateHeap, 0xE880)) {
+#if VERSION > VERSION_DEMO
+ mpMorf = NULL;
+#endif
+ return cPhs_ERROR_e;
+ }
+
+ fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
+ if(!init()) {
+#if VERSION > VERSION_DEMO
+ mpMorf = NULL;
+#endif
+ return cPhs_ERROR_e;
+ }
+ }
+ return state;
}
/* 000027D0-00002AB0 .text CreateHeap__10daNpc_Tt_cFv */
-void daNpc_Tt_c::CreateHeap() {
- /* Nonmatching */
+BOOL daNpc_Tt_c::CreateHeap() {
+
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Tt", dRes_INDEX_TT_BDL_TT_e);
+
+ mpMorf = new mDoExt_McaMorf(
+ modelData,
+ NULL, NULL,
+ (J3DAnmTransformKey*)dComIfG_getObjectRes("Tt", dRes_INDEX_TT_BCK_WAIT01_e),
+ J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
+ dComIfG_getObjectRes("Tt", dRes_INDEX_TT_BAS_WAIT01_e),
+ 0x80000,
+ 0x11020022
+ );
+
+ if (mpMorf == NULL || mpMorf->getModel() == NULL) {
+ return FALSE;
+ }
+
+ m_head_jnt_num = modelData->getJointName()->getIndex("head");
+ JUT_ASSERT(DEMO_SELECT(1706, 1708), m_head_jnt_num >= 0);
+
+ m_backbone_jnt_num = modelData->getJointName()->getIndex("backbone1");
+ JUT_ASSERT(DEMO_SELECT(1708, 1710), m_backbone_jnt_num >= 0);
+
+ switch(mType) {
+ case 0:
+ mTexPatternIdx = false;
+ break;
+ }
+
+#if VERSION == VERSION_DEMO
+ initTexPatternAnm(false);
+#else
+ if (!initTexPatternAnm(false)) {
+ return FALSE;
+ }
+#endif
+
+ for(u16 i = 0; i < modelData->getJointNum(); i++) {
+ if(i == m_head_jnt_num || i == m_backbone_jnt_num) {
+ mpMorf->getModel()->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Tt);
+ }
+ }
+
+ mpMorf->getModel()->setUserArea((u32)(this));
+
+ mAcchCir.SetWall(30.0f, 0.0f);
+ mObjAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this));
+ return mLineKe.mLineMat.init(8, 10, 0) == FALSE ? FALSE : TRUE;
}
/* 00002AB0-00002AD0 .text daNpc_Tt_Create__FP10fopAc_ac_c */
@@ -252,7 +971,6 @@ static BOOL daNpc_Tt_IsDelete(daNpc_Tt_c*) {
return TRUE;
}
-#include "d/actor/d_a_npc_tt_anm.inc"
static actor_method_class l_daNpc_Tt_Method = {
(process_method_func)daNpc_Tt_Create,
diff --git a/src/d/actor/d_a_npc_tt_anm.inc b/src/d/actor/d_a_npc_tt_anm.inc
index 8f63442c..52e2fd06 100644
--- a/src/d/actor/d_a_npc_tt_anm.inc
+++ b/src/d/actor/d_a_npc_tt_anm.inc
@@ -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;
}