Files
dusklight/src/d/actor/d_a_npc_tks.cpp
T
LagoLunatic e2fddadf32 Misc matches (#2845)
* Misc debug matches

* Fix d_map weak function order

* Remove old nonmatching comments

* d_menu_dmap and JASAudioThread OK, fix weak func order and rodata alignment

* More misc matches
2025-11-21 15:52:16 -08:00

3104 lines
107 KiB
C++

/**
* @file d_a_npc_tks.cpp
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_tks.h"
#include "d/d_a_obj.h"
#include "d/actor/d_a_npc_tkc.h"
#include "d/d_meter2_info.h"
#include "f_op/f_op_kankyo_mng.h"
enum TKS_RES_File_ID {
/* BCK */
/* 0x07 */ BCK_TKS_F_TALK_A = 0x7,
/* 0x08 */ BCK_TKS_FALL,
/* 0x09 */ BCK_TKS_FLY,
/* 0x0A */ BCK_TKS_HIDE,
/* 0x0B */ BCK_TKS_IN,
/* 0x0C */ BCK_TKS_JUMP_E,
/* 0x0D */ BCK_TKS_JUMP_S,
/* 0x0E */ BCK_TKS_LAND,
/* 0x0F */ BCK_TKS_LOOKAROUND_A,
/* 0x10 */ BCK_TKS_LOOKAROUND_B,
/* 0x11 */ BCK_TKS_RUN,
/* 0x12 */ BCK_TKS_SHAKE,
/* 0x13 */ BCK_TKS_SHOW_UP,
/* 0x14 */ BCK_TKS_SHOW_UP_WAIT,
/* 0x15 */ BCK_TKS_SWIM,
/* 0x16 */ BCK_TKS_TUBO_HIDE,
/* 0x17 */ BCK_TKS_TUBO_IN,
/* 0x18 */ BCK_TKS_TUBO_SHAKE,
/* 0x19 */ BCK_TKS_TUBO_SHOW_UP,
/* 0x1A */ BCK_TKS_WAIT_A,
/* 0x1B */ BCK_TKS_WALK_A,
/* BMDR */
/* 0x1E */ BMDR_TKS = 0x1E,
/* BTK */
/* 0x21 */ BTK_TKS = 0x21,
/* BTP */
/* 0x24 */ BTP_TKS = 0x24,
/* EVT */
/* 0x27 */ EVT_TKS_EVENT_LIST = 0x27,
};
enum J_tubo_00_RES_File_ID {
/* BMDR */
/* 0x3 */ BMDR_J_TUBO_00 = 0x3,
};
enum K_tubo02_RES_File_ID {
/* BMDR */
/* 0x3 */ BMDR_K_TUBO02 = 0x3,
};
enum Animation {
/* 0x00 */ ANM_NONE,
/* 0x01 */ ANM_F_TALK_A,
/* 0x02 */ ANM_WAIT_A,
/* 0x03 */ ANM_WALK_A,
/* 0x04 */ ANM_HIDE,
/* 0x05 */ ANM_SHOW_UP,
/* 0x06 */ ANM_SHOW_UP_WAIT,
/* 0x07 */ ANM_LOOKAROUND_A,
/* 0x08 */ ANM_LOOKAROUND_B,
/* 0x09 */ ANM_IN,
/* 0x0A */ ANM_SHAKE,
/* 0x0B */ ANM_FALL,
/* 0x0C */ ANM_LAND,
/* 0x0D */ ANM_TUBO_HIDE,
/* 0x0E */ ANM_TUBO_SHOW_UP,
/* 0x0F */ ANM_TUBO_IN,
/* 0x10 */ ANM_TUBO_SHAKE,
/* 0x11 */ ANM_JUMP_S,
/* 0x12 */ ANM_FLY,
/* 0x13 */ ANM_JUMP_E,
/* 0x14 */ ANM_RUN,
/* 0x15 */ ANM_SWIM,
};
enum Motion {
/* 0x0 */ MOT_WAIT_A,
/* 0x1 */ MOT_SWIM,
/* 0x2 */ MOT_RUN,
/* 0x3 */ MOT_WALK_A,
/* 0x4 */ MOT_JUMP_S,
/* 0x5 */ MOT_JUMP_E,
/* 0x6 */ MOT_LAND,
/* 0x7 */ MOT_WALK_A_LOOP,
};
enum Expression {
/* 0x0 */ EXPR_TALK_A,
/* 0x1 */ EXPR_NONE,
};
enum Expression_BTP {
/* 0x0 */ EXPR_BTP_TKS,
};
enum Joint {
/* 0x00 */ JNT_CENTER,
/* 0x01 */ JNT_ARML1,
/* 0x02 */ JNT_ARML2,
/* 0x03 */ JNT_HANDL,
/* 0x04 */ JNT_TUBASAL,
/* 0x05 */ JNT_ARMR1,
/* 0x06 */ JNT_ARMR2,
/* 0x07 */ JNT_HANDR,
/* 0x08 */ JNT_TUBASAR,
/* 0x09 */ JNT_LEGL,
/* 0x0A */ JNT_FOOTL1,
/* 0x0B */ JNT_FOOTL2,
/* 0x0C */ JNT_LEGR,
/* 0x0D */ JNT_FOOTR1,
/* 0x0E */ JNT_FOOTR2,
/* 0x0F */ JNT_NECK1,
/* 0x10 */ JNT_NECK2,
/* 0x11 */ JNT_HEAD,
/* 0x12 */ JNT_CHIN,
/* 0x13 */ JNT_MOUTH,
};
enum RES_Name {
/* 0x0 */ TKS,
/* 0x1 */ J_TUBO_00,
/* 0x2 */ K_TUBO02,
};
/* 80B1E554-80B1E558 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */
static daNpcTks_Param_c l_HIO;
/* 80B1E104-80B1E1B4 000020 00B0+00 1/2 0/0 0/0 .data l_bckGetParamList */
static daNpc_GetParam3 l_bckGetParamList[22] = {
{-1, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_F_TALK_A, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_WAIT_A, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_WALK_A, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_HIDE, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_SHOW_UP, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_SHOW_UP_WAIT, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_LOOKAROUND_A, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_LOOKAROUND_B, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_IN, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_SHAKE, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_FALL, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_LAND, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_TUBO_HIDE, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_TUBO_SHOW_UP, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_TUBO_IN, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_TUBO_SHAKE, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_JUMP_S, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_FLY, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_JUMP_E, J3DFrameCtrl::EMode_NONE},
{BCK_TKS_RUN, J3DFrameCtrl::EMode_LOOP},
{BCK_TKS_SWIM, J3DFrameCtrl::EMode_LOOP},
};
/* 80B1E1B4-80B1E1BC 0000D0 0008+00 1/1 0/0 0/0 .data l_btpGetParamList */
static daNpc_GetParam3 l_btpGetParamList[1] = {
{BTP_TKS, J3DFrameCtrl::EMode_LOOP},
};
/* 80B1E1BC-80B1E1C4 0000D8 0008+00 1/2 0/0 0/0 .data l_btkGetParamList */
static daNpc_GetParam3 l_btkGetParamList[1] = {
{BTK_TKS, J3DFrameCtrl::EMode_LOOP},
};
/* 80B1E1C4-80B1E1D0 0000E0 000C+00 1/0 0/0 0/0 .data l_loadRes_TKS0 */
static int l_loadRes_TKS0[3] = {
TKS, J_TUBO_00, -1,
};
/* 80B1E1D0-80B1E1DC 0000EC 000C+00 1/0 0/0 0/0 .data l_loadRes_TKS1 */
static int l_loadRes_TKS1[3] = {
TKS, K_TUBO02, -1,
};
/* 80B1E1DC-80B1E1E8 0000F8 000C+00 1/0 0/0 0/0 .data l_loadRes_TKS2 */
static int l_loadRes_TKS2[3] = {
TKS, -1, -1,
};
/* 80B1E1E8-80B1E1F4 -00001 000C+00 2/2 0/0 0/0 .data l_loadRes_list */
static int* l_loadRes_list[3] = {
l_loadRes_TKS0,
l_loadRes_TKS1,
l_loadRes_TKS2,
};
/* 80B1E1F4-80B1E200 -00001 000C+00 3/3 0/0 0/0 .data l_arcNames */
static char* l_arcNames[3] = {
"TKS",
"J_tubo_00",
"K_tubo02",
};
/* 80B1E200-80B1E208 -00001 0008+00 0/0 0/0 0/0 .data l_evtNames */
static char* l_evtNames[2] = {
NULL,
"TKS_ENCOUNTER",
};
/* 80B1E208-80B1E20C -00001 0004+00 9/11 0/0 0/0 .data l_arcName */
static char* l_arcName = "TKS";
/* 80B1E20C-80B1E210 -00001 0004+00 8/9 0/0 0/0 .data l_myName */
static char* l_myName = "Tks";
/* 80B1462C-80B14844 0000EC 0218+00 1/1 0/0 0/0 .text __ct__10daNpcTks_cFv */
daNpcTks_c::daNpcTks_c() {}
/* 80B14844-80B14AF8 000304 02B4+00 1/0 0/0 0/0 .text __dt__10daNpcTks_cFv */
daNpcTks_c::~daNpcTks_c() {
for (int i = 0; l_loadRes_list[mTksTsubo.mTsuboType][i] >= 0; i++) {
dComIfG_resDelete(&mPhases[i], l_arcNames[l_loadRes_list[mTksTsubo.mTsuboType][i]]);
}
if (heap != NULL) {
mAnm_p->stopZelAnime();
}
if (parentActorID != fpcM_ERROR_PROCESS_ID_e) {
fopAcM_delete(parentActorID);
}
}
/* 80B1DD58-80B1DDF0 000000 0098+00 25/25 0/0 0/0 .rodata m__16daNpcTks_Param_c */
daNpcTks_HIOParam const daNpcTks_Param_c::m = {
90.0f,
-3.0f,
1.0f,
150.0f,
255.0f,
80.0f,
33.0f,
25.0f,
0.0f,
0.0f,
45.0f,
-45.0f,
30.0f,
-10.0f,
45.0f,
-45.0f,
0.8f,
12.0f,
3,
6,
19,
6,
80.0f,
500.0f,
300.0f,
-300.0f,
60,
8,
0,
0,
0,
false,
false,
0x2D,
0x96,
30,
0x5A,
1000.0f,
500.0f,
35.0f,
25.0f,
7.0f,
2.0f,
5.0f,
};
/* 80B14AF8-80B14ED0 0005B8 03D8+00 1/1 0/0 0/0 .text Create__10daNpcTks_cFv */
cPhs__Step daNpcTks_c::Create() {
fopAcM_ct(this, daNpcTks_c);
if (dComIfGs_isStageBossEnemy()) {
return cPhs_ERROR_e;
}
if (getType() == 0 || getType() == 0xFF || getType() == 6) {
if (dComIfGs_isDungeonItemWarp()) {
return cPhs_ERROR_e;
}
} else if (getType() == 3 &&
/* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */
(!daNpcF_chkEvtBit(267) ||
/* dSv_event_flag_c::F_0545 - Sacred Grove - Watched cutscene of Ooccoo Sr. parting (after Temple of Time) */
daNpcF_chkEvtBit(545))) {
return cPhs_ERROR_e;
}
if ((getType() == 0 || getType() == 0xFF) && !fopAcM_isSwitch(this, getSwitchNo())) {
mTksTsubo.mTsuboType = getTsuboType();
} else {
mTksTsubo.mTsuboType = 2;
}
mMessageNo = getMessageNo();
cPhs__Step phase = cPhs_ERROR_e;
for (int i = 0; l_loadRes_list[mTksTsubo.mTsuboType][i] >= 0; i++) {
phase = (cPhs__Step)dComIfG_resLoad(&mPhases[i], l_arcNames[l_loadRes_list[mTksTsubo.mTsuboType][i]]);
if (phase != cPhs_COMPLEATE_e) {
return phase;
}
}
if (phase == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x3870)) {
return cPhs_ERROR_e;
}
fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -80.0f, -30.0f, -80.0f, 80.0f, 10.0f, 80.0f);
mSound.init(&current.pos, &eyePos, 3, 1);
mTksTsubo.mSound.init(&mTksTsubo.mPos, &mTksTsubo.mPos, 3, 1);
mAcchCir.SetWall(daNpcTks_Param_c::m.common.width, daNpcTks_Param_c::m.common.knee_length);
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));
mAcch.SetRoofNone();
mAcch.CrrPos(dComIfG_Bgsp());
mGndChk = mAcch.m_gnd;
mGroundH = mAcch.GetGroundH();
mCcStts.Init(daNpcTks_Param_c::m.common.weight, 0, this);
mCyl.Set(mCcDCyl);
mCyl.SetStts(&mCcStts);
mCyl.SetTgType(0);
mCyl.SetTgSPrm(0);
mCyl.SetH(daNpcTks_Param_c::m.common.height);
mCyl.SetR(daNpcTks_Param_c::m.common.width);
mTksTsubo.mCyl.Set(mCcDCyl);
mTksTsubo.mCyl.SetStts(&mCcStts);
mTksTsubo.mCyl.SetTgType(0xD8FBFDFF);
mTksTsubo.mCyl.SetTgSPrm(17);
mTksTsubo.mCyl.SetH(100.0f);
mTksTsubo.mCyl.SetR(30.0f);
setEnvTevColor();
setRoomNo();
reset();
Execute();
}
return phase;
}
/* 80B14ED0-80B1521C 000990 034C+00 1/1 0/0 0/0 .text CreateHeap__10daNpcTks_cFv */
int daNpcTks_c::CreateHeap() {
J3DModelData* mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDR_TKS);
JUT_ASSERT(410, NULL != mdlData_p);
mAnm_p = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11020284);
if (mAnm_p != NULL && mAnm_p->getModel() == NULL) {
mAnm_p->stopZelAnime();
mAnm_p = NULL;
}
if (mAnm_p == NULL) {
return 0;
}
J3DModel* model = mAnm_p->getModel();
for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
}
model->setUserArea((u32)this);
mpMatAnm = new daNpcF_MatAnm_c();
if (mpMatAnm == NULL) {
return 0;
}
if (!setExpressionAnm(ANM_F_TALK_A, false)) {
return 0;
}
setMotion(MOT_WAIT_A, -1.0f, 0);
if (mTksTsubo.mTsuboType < 2) {
const char* sp30 = mTksTsubo.mTsuboType != 0 ? l_arcNames[2] : l_arcNames[1];
int sp2C = mTksTsubo.mTsuboType != 0 ? 3 : 3;
mdlData_p = static_cast<J3DModelData*>(dComIfG_getObjectRes(sp30, sp2C));
JUT_ASSERT(453, NULL != mdlData_p);
mTksTsubo.mpModelMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, getTrnsfrmKeyAnmP(l_arcName, BCK_TKS_TUBO_HIDE), -1, 1.0f, 0, -1, &mTksTsubo.mSound, 0x80000, 0x11000084);
if (mTksTsubo.mpModelMorf == NULL) {
return 0;
}
}
return 1;
}
/* 80B153D8-80B1540C 000E98 0034+00 1/1 0/0 0/0 .text Delete__10daNpcTks_cFv */
int daNpcTks_c::Delete() {
this->~daNpcTks_c();
return 1;
}
/* 80B1540C-80B15430 000ECC 0024+00 2/2 0/0 0/0 .text Execute__10daNpcTks_cFv */
int daNpcTks_c::Execute() {
execute();
return 1;
}
/* 80B15430-80B1548C 000EF0 005C+00 1/1 0/0 0/0 .text Draw__10daNpcTks_cFv */
int daNpcTks_c::Draw() {
mAnm_p->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm);
draw(FALSE, FALSE, daNpcTks_Param_c::m.common.real_shadow_size, NULL, FALSE);
return 1;
}
/* 80B1548C-80B15650 000F4C 01C4+00 1/1 0/0 0/0 .text ctrlJoint__10daNpcTks_cFP8J3DJointP8J3DModel */
int daNpcTks_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
int jntNo = i_joint->getJntNo();
int i_jointList[3] = {JNT_NECK1, JNT_NECK2, JNT_HEAD};
if (jntNo == 0) {
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(JNT_NECK1));
mDoMtx_stack_c::multVecZero(&mLookatPos[0]);
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(JNT_NECK2));
mDoMtx_stack_c::multVecZero(&mLookatPos[1]);
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(JNT_HEAD));
mDoMtx_stack_c::multVecZero(&mLookatPos[2]);
}
mDoMtx_stack_c::copy(i_model->getAnmMtx(jntNo));
switch (jntNo) {
case JNT_NECK1:
case JNT_NECK2:
case JNT_HEAD:
setLookatMtx(jntNo, i_jointList, daNpcTks_Param_c::m.common.neck_rotation_ratio);
break;
}
i_model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
if ((jntNo == JNT_HEAD || jntNo == JNT_MOUTH) && (mAnmFlags & ANM_PLAY_BCK) != 0) {
J3DAnmTransform* anm = mBckAnm.getBckAnm();
mBckAnm.changeBckOnly(mAnm_p->getAnm());
mAnm_p->changeAnm(anm);
}
return 1;
}
/* 80B15650-80B15670 001110 0020+00 1/1 0/0 0/0 .text createHeapCallBack__10daNpcTks_cFP10fopAc_ac_c */
int daNpcTks_c::createHeapCallBack(fopAc_ac_c* a_this) {
return static_cast<daNpcTks_c*>(a_this)->CreateHeap();
}
/* 80B15670-80B156BC 001130 004C+00 2/2 0/0 0/0 .text ctrlJointCallBack__10daNpcTks_cFP8J3DJointi */
int daNpcTks_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) {
if (param_2 == 0) {
J3DModel* model = j3dSys.getModel();
daNpcTks_c* i_this = (daNpcTks_c*)model->getUserArea();
if (i_this != NULL) {
i_this->ctrlJoint(i_joint, model);
}
}
return 1;
}
/* 80B156BC-80B157C0 00117C 0104+00 1/0 0/0 0/0 .text setMtx__10daNpcTks_cFv */
void daNpcTks_c::setMtx() {
J3DModel* model = mAnm_p->getModel();
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mDoMtx_stack_c::scaleM(scale);
model->setBaseTRMtx(mDoMtx_stack_c::get());
model->setUserArea((u32)this);
if (mTksTsubo.field_0x586 != 0) {
if (field_0x138a) {
mTksTsubo.mPos = current.pos;
} else {
mDoMtx_stack_c::transS(mTksTsubo.mPos);
mDoMtx_stack_c::ZXYrotM(mTksTsubo.mAngle);
}
model = mTksTsubo.mpModelMorf->getModel();
model->setBaseTRMtx(mDoMtx_stack_c::get());
mTksTsubo.mpModelMorf->modelCalc();
mTksTsubo.mpModelMorf->getModel()->getModelData()->getJointNodePointer(0)->setMtxCalc(NULL);
}
if ((mAnmFlags & ANM_PLAY_BCK) != 0) {
mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame());
}
mAnm_p->modelCalc();
}
/* 80B157C0-80B1590C 001280 014C+00 1/0 0/0 0/0 .text setExpressionAnm__10daNpcTks_cFib */
bool daNpcTks_c::setExpressionAnm(int i_index, bool i_modify) {
mAnmFlags &= 0xFFFFE03F;
J3DAnmTransform* i_bck = l_bckGetParamList[i_index].fileIdx >= 0 ? getTrnsfrmKeyAnmP(l_arcName, l_bckGetParamList[i_index].fileIdx) : NULL;
int i_attr = l_bckGetParamList[i_index].attr;
bool bVar1 = FALSE;
switch (i_index) {
case ANM_NONE:
bVar1 = setExpressionBtp(EXPR_BTP_TKS);
break;
case ANM_F_TALK_A:
bVar1 = setExpressionBtp(EXPR_BTP_TKS);
break;
default:
i_bck = NULL;
break;
}
if (!bVar1) {
return false;
}
if (i_bck == NULL) {
return true;
}
if (setBckAnm(i_bck, 1.0f, i_attr, 0, -1, i_modify)) {
mAnmFlags |= ANM_PLAY_BCK | ANM_PAUSE_BCK;
mExpressionLoops = 0;
return true;
}
OS_REPORT("%s: 表情Bckアニメーションの登録に失敗しました!\n", "d_a_npc_tks.cpp");
return false;
}
/* 80B1590C-80B159E0 0013CC 00D4+00 1/0 0/0 0/0 .text setExpressionBtp__10daNpcTks_cFi */
bool daNpcTks_c::setExpressionBtp(int i_index) {
J3DAnmTexPattern* i_btp = getTexPtrnAnmP(l_arcName, l_btpGetParamList[i_index].fileIdx);
int i_attr = l_btpGetParamList[i_index].attr;
mAnmFlags &= 0xFFFFF57F;
if (i_btp == NULL) {
return true;
}
if (setBtpAnm(i_btp, mAnm_p->getModel()->getModelData(), 1.0f, i_attr)) {
mAnmFlags |= ANM_PLAY_BTP | ANM_PAUSE_BTP;
if (i_index == 0) {
mAnmFlags |= ANM_FLAG_800;
}
return true;
}
OS_REPORT("%s: 表情Btpアニメーションの登録に失敗しました!\n", "d_a_npc_tks.cpp");
return false;
}
/* 80B159E0-80B15A24 0014A0 0044+00 1/0 0/0 0/0 .text setMotion__10daNpcTks_cFifi */
void daNpcTks_c::setMotion(int i_motion, f32 i_morf, int param_3) {
s16 motion = i_motion;
if ((param_3 != 0 || mMotion != motion) && i_motion >= 0 && i_motion < 8) {
mMotion = motion;
mMotionMorfOverride = i_morf;
mMotionPrevPhase = -1;
mMotionPhase = 0;
}
}
/* 80B1C4F8-80B1CB4C 007FB8 0654+00 1/0 0/0 0/0 .text main__10daNpcTks_cFv */
BOOL daNpcTks_c::main() {
if (field_0x138a && mTksTsubo.mCyl.ChkTgHit()) {
if (mTksTsubo.mCyl.GetTgHitObj()->ChkAtType(AT_TYPE_BOOMERANG)) {
setAction(&daNpcTks_c::damage);
} else {
setAction(&daNpcTks_c::broken);
}
}
if (cLib_checkBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e) && fopAcM_checkCarryNow(this)) {
setAction(&daNpcTks_c::demo_appear);
}
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk() && mItemID != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(mItemID);
mItemID = fpcM_ERROR_PROCESS_ID_e;
fopAcM_delete(this);
}
if (mAction) {
(this->*mAction)();
}
playExpression();
playMotion();
playTsuboAnm();
mPlayerArea = getPlayerArea();
return TRUE;
}
/* 80B15A24-80B160A8 0014E4 0684+00 1/1 0/0 0/0 .text reset__10daNpcTks_cFv */
void daNpcTks_c::reset() {
initialize();
mpMatAnm->initialize();
mLookat.initialize();
for (int i = 0; i < 1; i++) {
mActorMngr[i].initialize();
}
attention_info.distances[fopAc_attn_CARRY_e] = 43;
attention_info.flags = fopAc_AttnFlag_CARRY_e;
field_0x1370 = 0;
field_0x1374 = 0;
mAction = NULL;
mLookMode = -1;
mMode = 0;
field_0x138a = true;
mPlayerArea = -1;
scale.setall(daNpcTks_Param_c::m.common.scale);
dKy_tevstr_init(&mTksTsubo.mTevStr, fopAcM_GetRoomNo(this), 0xFF);
setAngle(shape_angle.y);
mTksTsubo.mPos = current.pos;
mTksTsubo.mAngle = shape_angle;
speedF = 0.0f;
speed.setall(0.0f);
mItemID = fpcM_ERROR_PROCESS_ID_e;
mExpressionMorfOverride = 0.0f;
mMotionMorfOverride = 0.0f;
switch (getType()) {
case 0:
case 255:
if (fopAcM_isSwitch(this, getSwitchNo())) {
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
field_0x138a = false;
mTksTsubo.field_0x586 = 0;
setAction(&daNpcTks_c::waitNude);
} else {
mTksTsubo.field_0x586 = 1;
setAction(&daNpcTks_c::hide);
}
break;
case 1: {
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
setAction(&daNpcTks_c::demo_scannon);
cXyz i_pos(current.pos);
i_pos.y += 60.0f;
parentActorID = fopAcM_createChild(PROC_NPC_TKC, fopAcM_GetID(this), 3, &i_pos, fopAcM_GetRoomNo(this),
&mCurAngle, NULL, -1, NULL);
break;
}
case 2: {
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
setAction(&daNpcTks_c::demo_Lv6Gate);
cXyz i_pos(current.pos);
i_pos.y += 60.0f;
parentActorID = fopAcM_createChild(PROC_NPC_TKC, fopAcM_GetID(this), 3, &i_pos, fopAcM_GetRoomNo(this),
&mCurAngle, NULL, -1, NULL);
break;
}
case 3: {
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
field_0x1370 = 10;
setAction(&daNpcTks_c::demo_farewell);
cXyz i_pos(current.pos);
csXyz i_angle(0, fopAcM_searchPlayerAngleY(this), 0);
i_pos.y += 60.0f;
parentActorID = fopAcM_createChild(PROC_NPC_TKC, fopAcM_GetID(this), 4, &i_pos, fopAcM_GetRoomNo(this),
&i_angle, NULL, -1, NULL);
break;
}
case 4:
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
setAction(&daNpcTks_c::demo_warpBack);
break;
case 5:
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0) {
field_0x1370 = 5;
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN07") == 0) {
if (fopAcM_GetPosition_p(daPy_getPlayerActorClass())->y < 7500.0f) {
field_0x1370 = 5;
} else {
field_0x1370 = 5;
setAction(&daNpcTks_c::demo_Lv3PickUp);
break;
}
} else {
field_0x1370 = 0;
}
setAction(&daNpcTks_c::demo_walkBack);
break;
case 6: {
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
setAction(&daNpcTks_c::waitLv6);
cXyz i_pos(current.pos);
i_pos.y += 60.0f;
parentActorID = fopAcM_createChild(PROC_NPC_TKC, fopAcM_GetID(this), 4, &i_pos, fopAcM_GetRoomNo(this),
&mCurAngle, NULL, -1, NULL);
break;
}
case 7:
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
gravity = 0.0f;
setAction(&daNpcTks_c::demo_Lv7Start);
break;
case 8:
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
setAction(&daNpcTks_c::demo_Lv3PickUp);
break;
case 9:
mTksTsubo.field_0x586 = 0;
field_0x138a = false;
setAction(&daNpcTks_c::demo_Lv6PickUp);
break;
default:
JUT_ASSERT(1298, FALSE);
break;
}
}
/* 80B160A8-80B16148 001B68 00A0+00 1/1 0/0 0/0 .text setAction__10daNpcTks_cFM10daNpcTks_cFPCvPv_v */
BOOL daNpcTks_c::setAction(actionFunc action) {
mMode = 3;
if (mAction) {
(this->*mAction)();
}
mMode = 0;
mAction = action;
if (mAction) {
(this->*mAction)();
}
return TRUE;
}
int daNpcTks_c::getPlayerArea() {
f32 fVar3, fVar2, fVar1;
fVar1 = std::pow(daNpcTks_Param_c::m.area_a_dist, 2.0f);
fVar2 = std::pow(daNpcTks_Param_c::m.area_b_dist, 2.0f);
fVar3 = fopAcM_searchPlayerDistanceXZ2(this);
if (fVar3 > 0.0f && fVar3 <= fVar2) {
return 1;
}
if (fVar3 > fVar2 && fVar3 <= fVar1) {
return 0;
}
return -1;
};
void daNpcTks_c::playExpression() {
daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcTks_Param_c::m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0};
daNpcF_anmPlayData dat1 = {ANM_NONE, daNpcTks_Param_c::m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat1[1] = {&dat1};
daNpcF_anmPlayData** ppDat[2] = {
pDat0,
pDat1
};
if (mExpression >= 0 && mExpression < 2) {
playExpressionAnm(ppDat);
}
};
void daNpcTks_c::playMotion() {
daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcTks_Param_c::m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0};
daNpcF_anmPlayData dat1 = {ANM_SWIM, daNpcTks_Param_c::m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat1[1] = {&dat1};
daNpcF_anmPlayData dat2 = {ANM_RUN, daNpcTks_Param_c::m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat2[1] = {&dat2};
daNpcF_anmPlayData dat3 = {ANM_WALK_A, daNpcTks_Param_c::m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat3[1] = {&dat3};
daNpcF_anmPlayData dat4a = {ANM_JUMP_S, 4.0f, 1};
daNpcF_anmPlayData dat4b = {ANM_FLY, 0.0f, 0};
daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b};
daNpcF_anmPlayData dat5 = {ANM_JUMP_E, 0.0f, 1};
daNpcF_anmPlayData* pDat5[1] = {&dat5};
daNpcF_anmPlayData dat6a = {ANM_LAND, 0.0f, 1};
daNpcF_anmPlayData dat6b = {ANM_WAIT_A, 4.0f, 0};
daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b};
daNpcF_anmPlayData dat7 = {ANM_WALK_A, 4.0f, 1};
daNpcF_anmPlayData* pDat7[1] = {&dat7};
daNpcF_anmPlayData** ppDat[8] = {
pDat0,
pDat1,
pDat2,
pDat3,
pDat4,
pDat5,
pDat6,
pDat7,
};
if (mMotion >= 0 && mMotion < 8) {
playMotionAnm(ppDat);
}
}
/* 80B1CFD0-80B1D1FC 008A90 022C+00 1/1 0/0 0/0 .text lookat__10daNpcTks_cFv */
void daNpcTks_c::lookat() {
daPy_py_c* player = NULL;
J3DModel* model = mAnm_p->getModel();
BOOL i_snap = FALSE;
f32 body_angleX_min = daNpcTks_Param_c::m.common.body_angleX_min;
f32 body_angleX_max = daNpcTks_Param_c::m.common.body_angleX_max;
f32 body_angleY_min = daNpcTks_Param_c::m.common.body_angleY_min;
f32 body_angleY_max = daNpcTks_Param_c::m.common.body_angleY_max;
f32 head_angleX_min = field_0x138a ? 0.0f : daNpcTks_Param_c::m.common.head_angleX_min;
f32 head_angleX_max = field_0x138a ? 0.0f : daNpcTks_Param_c::m.common.head_angleX_max;
f32 head_angleY_min = daNpcTks_Param_c::m.common.head_angleY_min;
f32 head_angleY_max = daNpcTks_Param_c::m.common.head_angleY_max;
s16 angle_delta = mCurAngle.y - mOldAngle.y;
cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookatAngle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
cXyz spe8;
switch (mLookMode) {
case LOOK_RESET:
i_snap = TRUE;
break;
case LOOK_PLAYER:
case LOOK_PLAYER_TALK:
player = daPy_getPlayerActorClass();
if (mLookMode != LOOK_PLAYER_TALK) {
break;
}
head_angleY_min = -80.0f;
head_angleY_max = 80.0f;
break;
case LOOK_ACTOR:
player = (daPy_py_c*)field_0x1208;
break;
case LOOK_ATTN:
break;
}
if (player != NULL) {
mLookPos = player->attention_info.position;
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) {
mLookPos.y -= 40.0f;
}
mLookat.setAttnPos(&mLookPos);
} else if (mLookMode == LOOK_ATTN) {
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(NULL);
}
mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, 0.0f, 0.0f,
head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, mCurAngle.y, lookatPos);
mLookat.calc(this, model->getBaseTRMtx(), lookatAngle, i_snap, angle_delta, FALSE);
}
void daNpcTks_c::playTsuboAnm() {
if (mTksTsubo.field_0x586 == 0) {
return;
}
if ((mAnmFlags & ANM_PLAY_MORF) != 0) {
f32 playSpeed = mTksTsubo.mpModelMorf->getPlaySpeed();
if ((mTksTsubo.mAnmFlags & ANM_PAUSE_MORF) != 0) {
mTksTsubo.mpModelMorf->setPlaySpeed(0.0f);
mTksTsubo.mpModelMorf->play(0, 0);
mTksTsubo.mpModelMorf->setPlaySpeed(playSpeed);
} else {
mTksTsubo.mpModelMorf->play(0, 0);
}
}
mTksTsubo.mAnmFlags &= 0xFFFFEF38;
};
BOOL daNpcTks_c::checkFindPlayer() {
f32 fVar1 = pow(daNpcTks_Param_c::m.area_a_dist, 2.0);
f32 fVar2 = fopAcM_searchPlayerDistanceXZ2(this);
mActorMngr[0].remove();
if (fVar2 <= fVar1) {
mActorMngr[0].entry(daPy_getPlayerActorClass());
return TRUE;
}
return FALSE;
}
void daNpcTks_c::setLookMode(int i_lookMode, fopAc_ac_c* actor_p) {
if (i_lookMode >= 0 && i_lookMode < 6 && (i_lookMode != mLookMode || actor_p != field_0x1208)) {
mLookMode = i_lookMode;
field_0x1208 = actor_p;
}
}
/* 80B16148-80B16344 001C08 01FC+00 3/0 0/0 0/0 .text wait__10daNpcTks_cFv */
void daNpcTks_c::wait() {
switch (mMode) {
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setMotionAnm(ANM_WAIT_A, 0.0f);
field_0x138a = false;
speedF = 0.0f;
mMode = 2;
break;
case 2:
if (mActorMngr[0].getActorP() != NULL) {
if (!checkFindPlayer()) {
mTurnMode = 0;
}
} else if (checkFindPlayer()) {
mTurnMode = 0;
}
if (mActorMngr[0].getActorP() != NULL) {
setLookMode(LOOK_PLAYER, NULL);
} else {
setLookMode(LOOK_NONE, NULL);
}
break;
case 3:
break;
default:
JUT_ASSERT(1766, FALSE);
break;
}
}
void daNpcTks_c::setTsuboMotionAnm(int i_index, f32 i_morf) {
J3DAnmTransform* i_anm = getTrnsfrmKeyAnmP(l_arcName, l_bckGetParamList[i_index].fileIdx);
int i_attr = l_bckGetParamList[i_index].attr;
mTksTsubo.mAnmFlags &= 0xFFFFFFF6;
if (i_anm != NULL) {
mTksTsubo.mpModelMorf->setAnm(i_anm, i_attr, i_morf, 1.0f, 0.0f, -1.0f);
mTksTsubo.mAnmFlags |= ANM_PLAY_MORF | ANM_PAUSE_MORF;
}
}
/* 80B16344-80B16634 001E04 02F0+00 1/0 0/0 0/0 .text setMotionAnm__10daNpcTks_cFif */
void daNpcTks_c::setMotionAnm(int i_index, f32 i_morf) {
if (i_index < 2 || i_index >= 0x16) {
return;
}
J3DAnmTransformKey* i_anm = getTrnsfrmKeyAnmP(l_arcName, l_bckGetParamList[i_index].fileIdx);
int i_attr = l_bckGetParamList[i_index].attr;
mAnmFlags &= 0xFFFFFFE4;
if (i_anm != NULL && setMcaMorfAnm(i_anm, 1.0f, i_morf, i_attr, 0, -1)) {
mAnmFlags |= ANM_PLAY_MORF | ANM_PAUSE_MORF;
mMotionLoops = 0;
if (i_index == ANM_RUN) {
mAnm_p->setPlaySpeed(speedF / daNpcTks_Param_c::m.walk_spd);
} else {
mAnm_p->setPlaySpeed(1.0f);
}
if (field_0x138a) {
switch (i_index) {
case ANM_SHOW_UP:
setTsuboMotionAnm(ANM_TUBO_SHOW_UP, i_morf);
break;
case ANM_IN:
setTsuboMotionAnm(ANM_TUBO_IN, i_morf);
break;
case ANM_SHAKE:
setTsuboMotionAnm(ANM_TUBO_SHAKE, i_morf);
break;
default:
setTsuboMotionAnm(ANM_TUBO_HIDE, i_morf);
break;
}
}
}
J3DAnmTextureSRTKey* i_btk = getTexSRTKeyAnmP(l_arcName, l_btkGetParamList[0].fileIdx);
i_attr = l_btkGetParamList[0].attr;
if (i_btk != NULL) {
if (setBtkAnm(i_btk, mAnm_p->getModel()->getModelData(), 1.0f, i_attr)) {
mAnmFlags |= ANM_PLAY_BTK | ANM_PAUSE_BTK;
}
}
}
/* 80B16634-80B1682C 0020F4 01F8+00 2/0 0/0 0/0 .text waitNude__10daNpcTks_cFv */
void daNpcTks_c::waitNude() {
switch (mMode) {
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setMotionAnm(ANM_WAIT_A, 0.0f);
field_0x138a = false;
speedF = 0.0f;
mMode = 2;
break;
case 2: {
f32 fVar1 = current.pos.y - fopAcM_GetPosition_p(daPy_getPlayerActorClass())->y;
if (fVar1 > -200.0f && fVar1 < 150.0f && fopAcM_searchPlayerDistanceXZ(this) <= 300.0f) {
if (!fopAcM_otherBgCheck(this, daPy_getPlayerActorClass())) {
eventInfo.onCondition(dEvtCmd_INTALK_e);
fopAcM_orderSpeakEvent(this, 0, 0);
}
}
if (dComIfGp_event_runCheck() && eventInfo.checkCommandTalk()) {
dComIfGs_onDungeonItemWarp();
if (getTBoxNo() != 0xFF) {
dComIfGs_onTbox(getTBoxNo());
}
Z2GetAudioMgr()->subBgmStart(Z2BGM_OBACHAN);
setAction(&daNpcTks_c::talk);
}
break;
}
case 3:
break;
default:
JUT_ASSERT(1805, FALSE);
break;
}
}
/* 80B1682C-80B16B74 0022EC 0348+00 1/0 0/0 0/0 .text waitLv6__10daNpcTks_cFv */
void daNpcTks_c::waitLv6() {
switch (mMode) {
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setMotionAnm(ANM_WAIT_A, 0.0f);
field_0x138a = false;
speedF = 0.0f;
mMode = 2;
break;
case 2:
if (mActorMngr[0].getActorP() != NULL) {
if (!checkFindPlayer()) {
mTurnMode = 0;
}
} else if (checkFindPlayer()) {
mTurnMode = 0;
}
if (mActorMngr[0].getActorP() != NULL) {
setLookMode(LOOK_PLAYER, NULL);
} else {
setLookMode(LOOK_NONE, NULL);
}
if (current.pos.y - fopAcM_GetPosition_p(daPy_getPlayerActorClass())->y < 100.0f && fopAcM_searchPlayerDistanceXZ(this) <= 400.0f) {
attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
eventInfo.onCondition(dEvtCmd_INTALK_e);
fopAcM_orderSpeakEvent(this, 0, 0);
}
if (dComIfGp_event_runCheck() && eventInfo.checkCommandTalk()) {
dComIfGs_onDungeonItemWarp();
if (getTBoxNo() != 0xFF) {
dComIfGs_onTbox(getTBoxNo());
}
Z2GetAudioMgr()->subBgmStart(Z2BGM_OBACHAN);
setAction(&daNpcTks_c::talk);
}
break;
case 3:
break;
default:
JUT_ASSERT(1858, FALSE);
break;
}
}
void daNpcTks_c::setExpressionTalkAfter() {
setExpression(EXPR_NONE, -1.0f);
}
BOOL daNpcTks_c::step(s16 i_turnTargetAngle, int param_2) {
if (mTurnMode == 0) {
if (param_2 != 0) {
if ((int)fabsf(cM_sht2d((s16)(i_turnTargetAngle - mCurAngle.y))) > 40) {
setExpression(EXPR_NONE, -1.0f);
setMotion(MOT_WALK_A_LOOP, -1.0f, 0);
}
}
mTurnTargetAngle = i_turnTargetAngle;
mTurnAmount = 0;
if (mCurAngle.y == mTurnTargetAngle) {
mTurnMode++;
}
current.angle.y = mCurAngle.y;
shape_angle.y = current.angle.y;
mTurnMode++;
} else if (mTurnMode == 1) {
if (turn(mTurnTargetAngle, 15.0f, 0)) {
shape_angle.y = current.angle.y;
mCurAngle.y = current.angle.y;
mOldAngle.y = current.angle.y;
mTurnMode++;
} else {
shape_angle.y = current.angle.y;
mCurAngle.y = current.angle.y;
}
}
return mTurnMode > 1;
};
/* 80B16B74-80B16FDC 002634 0468+00 2/0 0/0 0/0 .text talk__10daNpcTks_cFv */
void daNpcTks_c::talk() {
switch (mMode) {
case 0:
setMotion(MOT_WAIT_A, -1.0f, 0);
initTalk(mMessageNo, NULL);
mMsgTimer = 0;
mTurnMode = 0;
setLookMode(LOOK_PLAYER_TALK, NULL);
mMode = 2;
break;
case 2: {
if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
if (talkProc(NULL, TRUE, NULL)) {
mActorMngr[0].entry(daPy_getPlayerActorClass());
int itemNo = 0;
OS_REPORT("会話終了時 イベントID=%d アイテムNo=%d\n", mFlow.getEventId(&itemNo), itemNo);
if (mFlow.getEventId(&itemNo) == 1) {
mItemID = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, -1, NULL, NULL);
if (mItemID != fpcM_ERROR_PROCESS_ID_e) {
const char* eventName = daPy_py_c::checkNowWolf() ? "WOLF_GET_TKS" : "DEFAULT_GETITEM";
s16 eventIdx = dComIfGp_getEventManager().getEventIdx(this, eventName, 0xFF);
dComIfGp_getEvent().reset(this);
fopAcM_orderChangeEventId(this, eventIdx, 1, 0xFFFF);
}
}
setAction(&daNpcTks_c::wait);
} else {
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, FALSE)) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
}
} else if (step(fopAcM_searchPlayerAngleY(this), 1)) {
setMotion(MOT_WAIT_A, -1.0f, 0);
mTurnMode = 0;
}
break;
}
case 3:
break;
default:
JUT_ASSERT(1920, FALSE);
break;
}
}
/* 80B16FDC-80B17008 002A9C 002C+00 1/0 0/0 0/0 .text setExpression__10daNpcTks_cFif */
void daNpcTks_c::setExpression(int i_expression, f32 i_morf) {
if (i_expression >= 0 && i_expression < 2) {
mExpression = i_expression;
mExpressionMorfOverride = i_morf;
mExpressionPrevPhase = -1;
mExpressionPhase = 0;
}
}
/* 80B17008-80B17420 002AC8 0418+00 4/0 0/0 0/0 .text hide__10daNpcTks_cFv */
void daNpcTks_c::hide() {
switch (mMode) {
case 0:
setMotionAnm(ANM_HIDE, 0.0f);
field_0x138a = true;
field_0x1370 = cLib_getRndValue<int>(daNpcTks_Param_c::m.hide_time_1, daNpcTks_Param_c::m.hide_time_2 - daNpcTks_Param_c::m.hide_time_1);
speedF = 0.0f;
mMode = 2;
break;
case 2: {
int iVar1 = --field_0x1370;
if (iVar1 <= 0) {
if (mPlayerArea == 1) {
setAction(&daNpcTks_c::shake);
} else if (mPlayerArea == 0) {
if (cLib_getRndValue(0, 2) == 0) {
setAction(&daNpcTks_c::shake);
} else {
setAction(&daNpcTks_c::showUp);
}
} else {
if (cLib_getRndValue(0, 2) == 0) {
setAction(&daNpcTks_c::shake);
} else {
setAction(&daNpcTks_c::showUp);
}
}
}
if (mPlayerArea == 0) {
setAction(&daNpcTks_c::showUp);
}
break;
}
case 3:
break;
default:
JUT_ASSERT(1960, FALSE);
break;
}
}
/* 80B17420-80B175F4 002EE0 01D4+00 3/0 0/0 0/0 .text shake__10daNpcTks_cFv */
void daNpcTks_c::shake() {
switch (mMode) {
case 0:
setMotionAnm(ANM_SHAKE, 0.0f);
field_0x138a = true;
speedF = 0.0f;
mMode = 2;
break;
case 2:
if (mAnm_p->isStop()) {
setAction(&daNpcTks_c::hide);
}
if (mPlayerArea == 0) {
setAction(&daNpcTks_c::showUp);
}
break;
case 3:
break;
default:
JUT_ASSERT(1986, FALSE);
break;
}
}
/* 80B175F4-80B17734 0030B4 0140+00 4/0 0/0 0/0 .text showUp__10daNpcTks_cFv */
void daNpcTks_c::showUp() {
switch (mMode) {
case 0:
setMotionAnm(ANM_SHOW_UP, 0.0f);
field_0x138a = true;
speedF = 0.0f;
mMode = 2;
break;
case 2:
if (mAnm_p->isStop()) {
setAction(&daNpcTks_c::showUpWait);
}
break;
case 3:
break;
default:
JUT_ASSERT(2011, FALSE);
break;
}
}
/* 80B17734-80B17B70 0031F4 043C+00 3/0 0/0 0/0 .text showUpWait__10daNpcTks_cFv */
void daNpcTks_c::showUpWait() {
switch (mMode) {
case 0:
setMotionAnm(ANM_SHOW_UP_WAIT, 0.0f);
field_0x138a = true;
field_0x1370 = cLib_getRndValue<int>(daNpcTks_Param_c::m.show_up_wait_time_1, daNpcTks_Param_c::m.show_up_wait_time_2 - daNpcTks_Param_c::m.show_up_wait_time_1);
speedF = 0.0f;
mMode = 2;
break;
case 2: {
int iVar1 = --field_0x1370;
if (iVar1 <= 0) {
if (mPlayerArea == 0) {
switch (cLib_getRndValue(0, 2)) {
case 0:
setAction(&daNpcTks_c::lookAroundA);
break;
case 1:
setAction(&daNpcTks_c::lookAroundB);
break;
}
} else {
switch (cLib_getRndValue(0, 3)) {
case 0:
setAction(&daNpcTks_c::lookAroundA);
break;
case 1:
setAction(&daNpcTks_c::lookAroundB);
break;
case 2:
setAction(&daNpcTks_c::in);
break;
}
}
}
if (mPlayerArea == 1) {
setAction(&daNpcTks_c::in);
}
break;
}
case 3:
break;
default:
JUT_ASSERT(2056, FALSE);
break;
}
}
/* 80B17B70-80B17D44 003630 01D4+00 2/0 0/0 0/0 .text lookAroundA__10daNpcTks_cFv */
void daNpcTks_c::lookAroundA() {
switch (mMode) {
case 0:
setMotionAnm(ANM_LOOKAROUND_A, 0.0f);
field_0x138a = true;
speedF = 0.0f;
mMode = 2;
break;
case 2:
if (mAnm_p->isStop()) {
setAction(&daNpcTks_c::showUpWait);
}
if (mPlayerArea == 1) {
setAction(&daNpcTks_c::in);
}
break;
case 3:
break;
default:
JUT_ASSERT(2082, FALSE);
break;
}
}
/* 80B17D44-80B17F18 003804 01D4+00 2/0 0/0 0/0 .text lookAroundB__10daNpcTks_cFv */
void daNpcTks_c::lookAroundB() {
switch (mMode) {
case 0:
setMotionAnm(ANM_LOOKAROUND_B, 0.0f);
field_0x138a = true;
speedF = 0.0f;
mMode = 2;
break;
case 2:
if (mAnm_p->isStop()) {
setAction(&daNpcTks_c::showUpWait);
}
if (mPlayerArea == 1) {
setAction(&daNpcTks_c::in);
}
break;
case 3:
break;
default:
JUT_ASSERT(2082, FALSE);
break;
}
}
/* 80B17F18-80B18070 0039D8 0158+00 4/0 0/0 0/0 .text in__10daNpcTks_cFv */
void daNpcTks_c::in() {
switch (mMode) {
case 0:
setMotionAnm(ANM_IN, 0.0f);
setLookMode(LOOK_NONE, NULL);
field_0x138a = true;
mMode = 2;
break;
case 2:
if (mAnm_p->isStop()) {
setAction(&daNpcTks_c::hide);
}
break;
case 3:
break;
default:
JUT_ASSERT(2133, FALSE);
break;
}
}
/* 80B18070-80B181EC 003B30 017C+00 1/0 0/0 0/0 .text damage__10daNpcTks_cFv */
void daNpcTks_c::damage() {
switch (mMode) {
case 0:
setMotionAnm(ANM_SHAKE, 0.0f);
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
field_0x138a = true;
speedF = 0.0f;
mMode = 2;
break;
case 2:
if (mAnm_p->isStop()) {
setAction(&daNpcTks_c::hide);
}
if (mTksTsubo.mCyl.ChkTgHit()) {
mMode = 0;
}
break;
case 3:
cLib_onBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
break;
default:
JUT_ASSERT(2162, FALSE);
break;
}
}
/* 80B181EC-80B183E8 003CAC 01FC+00 1/0 0/0 0/0 .text broken__10daNpcTks_cFv */
void daNpcTks_c::broken() {
switch (mMode) {
case 0:
setMotionAnm(ANM_FALL, 0);
if (mTksTsubo.mTsuboType != 0) {
daObj::make_eff_break_kotubo2(this);
} else {
daObj::make_eff_break_kotubo(this);
}
mTksTsubo.mSound.startCreatureSound(Z2SE_TKS_V_OUT_OF_POT, 0, -1);
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
field_0x138a = false;
mTksTsubo.field_0x586 = 0;
fopAcM_onSwitch(this, getSwitchNo());
speedF = 0.0f;
speed.y = daNpcTks_Param_c::m.launch_spd;
mMode = 2;
break;
case 2:
if (mAcch.ChkGroundLanding()) {
setMotion(MOT_LAND, -1.0f, 0);
} else if (mAcch.ChkGroundHit() && mAnm_p->isStop()) {
setAction(&daNpcTks_c::waitNude);
}
break;
case 3:
break;
default:
JUT_ASSERT(2199, FALSE);
}
}
/* 80B183E8-80B18D44 003EA8 095C+00 1/0 0/0 0/0 .text demo_appear__10daNpcTks_cFv */
void daNpcTks_c::demo_appear() {
switch (mMode) {
case 0:
eventInfo.setArchiveName(l_arcName);
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, "TKS_ENCOUNTER", 0xFF);
fopAcM_orderOtherEventId(this, mEventIdx, 0xFF, 0xFFFF, 4, 1);
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotionAnm(ANM_HIDE, 0.0f);
mMode = 2;
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
if (!dComIfGs_isDungeonItemWarp()) {
dComIfGs_onDungeonItemWarp();
if (getTBoxNo() != 0xFF) {
dComIfGs_onTbox(getTBoxNo());
}
Z2GetAudioMgr()->bgmAllMute(60, 0.0f);
}
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
break;
case '0002':
setMotionAnm(ANM_SHAKE, 0.0f);
break;
case '0003':
setMotionAnm(ANM_FALL, 0.0f);
setLookMode(LOOK_NONE, NULL);
if (mTksTsubo.mTsuboType != 0) {
daObj::make_eff_break_kotubo2(this);
} else {
daObj::make_eff_break_kotubo(this);
}
dComIfGp_getVibration().StartShock(2, 15, cXyz(0.0f, 1.0f, 0.0f));
mTksTsubo.mSound.startCreatureSound(Z2SE_TKS_V_OUT_OF_POT, 0, -1);
fopAcM_cancelCarryNow(this);
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
field_0x138a = false;
mTksTsubo.field_0x586 = 0;
speedF = daNpcTks_Param_c::m.movement_spd;
speed.y = daNpcTks_Param_c::m.launch_spd;
break;
case '0004':
setLookMode(LOOK_PLAYER, NULL);
mTurnMode = 0;
Z2GetAudioMgr()->subBgmStart(Z2BGM_OBACHAN);
Z2GetAudioMgr()->bgmAllUnMute(0);
break;
case '0005':
initTalk(mMessageNo, NULL);
mMsgTimer = 0;
setLookMode(LOOK_PLAYER_TALK, NULL);
break;
default:
JUT_ASSERT(2277, FALSE);
break;
}
}
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, TRUE)) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
switch (*cutName) {
case '0001':
eventManager.cutEnd(staffId);
break;
case '0002':
if (mAnm_p->isStop()) {
eventManager.cutEnd(staffId);
}
break;
case '0003':
setAngle(shape_angle.y);
mTksTsubo.mAngle = shape_angle;
if (mAcch.ChkGroundLanding()) {
speedF = 0.0f;
setMotion(MOT_LAND, -1.0f, 0);
} else if (mAcch.ChkGroundHit() && mMotionPhase > 0) {
setMotionAnm(ANM_WAIT_A, 0.0f);
eventManager.cutEnd(staffId);
}
break;
case '0004':
if (step(fopAcM_searchPlayerAngleY(this), 1)) {
setMotionAnm(ANM_WAIT_A, 0.0f);
eventManager.cutEnd(staffId);
}
break;
case '0005':
if (talkProc(NULL, TRUE, NULL)) {
mActorMngr[0].entry(daPy_getPlayerActorClass());
int itemNo = 0;
OS_REPORT("会話終了時 イベントID=%d アイテムNo=%d\n", mFlow.getEventId(&itemNo), itemNo);
if (mFlow.getEventId(&itemNo) == 1) {
mItemID = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, -1, NULL, NULL);
if (mItemID != fpcM_ERROR_PROCESS_ID_e) {
s16 eventIdx = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xFF);
dComIfGp_getEvent().reset(this);
fopAcM_orderChangeEventId(this, eventIdx, 1, 0xFFFF);
field_0x9ec = true;
}
}
setAction(&daNpcTks_c::wait);
eventManager.cutEnd(staffId);
}
break;
default:
JUT_ASSERT(2339, FALSE);
break;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx) != 0) {
if (!field_0x9ec) {
dComIfGp_event_reset();
}
mEventIdx = -1;
setAction(&daNpcTks_c::wait);
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(2356, FALSE);
}
}
/* 80B18D44-80B1926C 004804 0528+00 1/0 0/0 0/0 .text demo_scannon__10daNpcTks_cFv */
void daNpcTks_c::demo_scannon() {
switch (mMode) {
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotion(MOT_WAIT_A, -1.0f, 0);
field_0x138a = false;
mMode = 2;
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
break;
case '0002':
old.pos.set(-98491.23f, -18346.793f, 52057.156f);
current.pos = old.pos;
setAngle(-0x2CA2);
speedF = 25.0f;
setMotion(MOT_RUN, -1.0f, 0);
break;
case '0003':
setMotion(MOT_JUMP_S, 0.0f, 0);
mAnm_p->setPlaySpeed(1.0f);
setAngle(0);
speedF = 0.0f;
speed.y = 0.0f;
break;
default:
JUT_ASSERT(2405, FALSE);
break;
}
}
switch (*cutName) {
case '0001':
eventManager.cutEnd(staffId);
break;
case '0002': {
cXyz sp1c(-102070.93f, -18470.0f, 53544.613f);
setAngle(cLib_targetAngleY(&current.pos, &sp1c));
fopAcM_effSmokeSet2(&field_0x137c[0], &field_0x137c[1], &current.pos, &mCurAngle, 1.0f, &tevStr);
for (int i = 0; i < 2; i++) {
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(field_0x137c[i]);
if (emitter != NULL) {
emitter->setRate(1.0f);
emitter->setLifeTime(30);
emitter->setGlobalAlpha(0x80);
emitter->setGlobalParticleScale(2.5f, 2.5f);
}
}
mSound.startCreatureVoiceLevel(Z2SE_TKS_V_RUNNING_LOOP, -1);
if (current.pos.absXZ(sp1c) < speedF) {
current.pos.set(sp1c);
speedF = 0.0f;
eventManager.cutEnd(staffId);
}
break;
}
case '0003':
if (mMotionPhase == 0 && mAnm_p->checkFrame(9.0f)) {
speedF = 25.0f;
speed.y = 60.0f;
mSound.startCreatureSound(Z2SE_TKS_V_JUMP_UP, 0, -1);
}
if (speedF > 0.0f && mAcch.ChkGroundLanding()) {
speedF = 0.0f;
speed.y = 0.0f;
eventManager.cutEnd(staffId);
fopAcM_delete(this);
}
break;
default:
JUT_ASSERT(2473, FALSE);
break;
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(2479, FALSE);
break;
}
}
/* 80B1926C-80B1946C 004D2C 0200+00 1/0 0/0 0/0 .text demo_Lv6Gate__10daNpcTks_cFv */
void daNpcTks_c::demo_Lv6Gate() {
switch (mMode) {
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotion(MOT_WAIT_A, -1.0f, 0);
field_0x138a = false;
mMode = 2;
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
break;
case '0002':
field_0x1370 = 320;
speedF = 13.0f;
setMotion(MOT_RUN, -1.0f, 0);
dComIfGp_event_setTalkPartner(this);
break;
default:
JUT_ASSERT(2520, FALSE);
break;
}
}
switch (*cutName) {
case '0001':
eventManager.cutEnd(staffId);
break;
case '0002':
mSound.startCreatureVoiceLevel(Z2SE_TKS_V_RUNNING_LOOP, -1);
if (cLib_calcTimer<int>(&field_0x1370) == 0) {
eventManager.cutEnd(staffId);
fopAcM_delete(this);
}
break;
default:
JUT_ASSERT(2535, FALSE);
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(2541, FALSE);
break;
}
}
/* 80B1946C-80B19DAC 004F2C 0940+00 1/0 0/0 0/0 .text demo_farewell__10daNpcTks_cFv */
void daNpcTks_c::demo_farewell() {
switch (mMode) {
case 0:
if (cLib_calcTimer<int>(&field_0x1370) > 0 || dComIfGp_event_runCheck() != FALSE) {
return;
}
eventInfo.setArchiveName(l_arcName);
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, "TKS_FAREWELL", 0xFF);
fopAcM_orderOtherEventId(this, mEventIdx, 0xFF, 0xFFFF, 4, 1);
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotionAnm(ANM_WAIT_A, 0.0f);
/* dSv_event_flag_c::F_0545 - Sacred Grove - Watched cutscene of Ooccoo Sr. parting (after Temple of Time) */
daNpcF_onEvtBit(545);
Z2GetAudioMgr()->subBgmStart(Z2BGM_OBACHAN);
mMode = 2;
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
dComIfGp_getEvent().setSkipZev(this, "TKS_FAREWELL_SKIP");
// fallthrough
case '0006':
case '0007':
case '0008':
case '0009':
initTalk(mMessageNo, NULL);
mMsgTimer = 0;
setLookMode(LOOK_PLAYER_TALK, NULL);
setAngle(fopAcM_searchPlayerAngleY(this));
break;
case '0002':
setLookMode(LOOK_NONE, NULL);
break;
case '0003': {
daNpcTkc_c* actor_p = NULL;
fopAcM_SearchByID(parentActorID, (fopAc_ac_c**)&actor_p);
if (actor_p != NULL) {
actor_p->setActionFollow();
}
setMotion(MOT_RUN, -1.0f, 0);
speedF = 10.0f;
break;
}
case '0004':
setMotion(MOT_JUMP_S, -1.0f, 0);
setAngle(0x16EA);
break;
case '0005':
break;
case '0010':
break;
case '0011':
Z2GetAudioMgr()->subBgmStop();
fopAcM_delete(this);
break;
default:
JUT_ASSERT(2627, FALSE);
break;
}
}
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, TRUE)) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
switch (*cutName) {
case '0001':
case '0006':
case '0007':
case '0008':
case '0009':
if (talkProc(NULL, TRUE, NULL)) {
eventManager.cutEnd(staffId);
}
break;
case '0002': {
cXyz* pos = dComIfGp_evmng_getMyXyzP(staffId, "pos");
if (pos != NULL) {
if (step(cLib_targetAngleY(&current.pos, pos), 1)) {
mTurnMode = 0;
eventManager.cutEnd(staffId);
}
}
break;
}
case '0003': {
cXyz* pos = dComIfGp_evmng_getMyXyzP(staffId, "pos");
if (pos != NULL && current.pos.abs(*pos) <= speedF) {
setMotion(MOT_WAIT_A, -1.0f, 0);
current.pos = *pos;
speedF = 0.0f;
eventManager.cutEnd(staffId);
}
mSound.startCreatureVoiceLevel(Z2SE_TKS_V_RUNNING_LOOP, -1);
break;
}
case '0004': {
cXyz* pos = dComIfGp_evmng_getMyXyzP(staffId, "pos");
if (mMotion == 4) {
if (mMotionPhase == 0 && mAnm_p->checkFrame(9.0f)) {
speedF = 15.0f;
speed.y = 60.0f;
mSound.startCreatureSound(Z2SE_TKS_V_JUMP_UP, 0, -1);
} else if (speedF > 0.0f && mAcch.ChkGroundLanding()) {
setMotion(MOT_JUMP_E, -1.0f, 0);
speedF = 0.0f;
speed.y = 0.0f;
}
} else if (mMotion == 5 && mAnm_p->isStop()) {
Z2GetAudioMgr()->subBgmStop();
eventManager.cutEnd(staffId);
}
break;
}
case '0005':
break;
case '0010':
case '0011':
eventManager.cutEnd(staffId);
break;
default:
JUT_ASSERT(2711, FALSE);
break;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) {
dComIfGp_event_reset();
fopAcM_delete(this);
mEventIdx = -1;
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(2737, FALSE);
}
}
/* 80B19DAC-80B1A30C 00586C 0560+00 1/0 0/0 0/0 .text demo_warpBack__10daNpcTks_cFv */
void daNpcTks_c::demo_warpBack() {
switch (mMode){
case 0:
eventInfo.setArchiveName(l_arcName);
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, "TKS_WARPBACK", 0xFF);
fopAcM_orderOtherEventId(this, mEventIdx, 0xFF, 0xFFFF, 4, 1);
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotionAnm(ANM_WAIT_A, 0.0f);
setLookMode(LOOK_PLAYER_TALK, NULL);
if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0 && dComIfGp_getStartStageRoomNo() == 3) {
cXyz* pcVar1 = fopAcM_GetPosition_p(daPy_getPlayerActorClass());
if (pcVar1->y >= 950.0f) {
if (pcVar1->x == 3700.0f && pcVar1->z == -4220.0f) {
current.pos.set(3500.0f, 950.0f, -4220.0f);
setAngle(0x4000);
} else if (pcVar1->x == 3360.0f && pcVar1->z == -2010.0f) {
current.pos.set(3360.0f, 950.0f, -1810.0f);
setAngle(0x7FFF);
}
old.pos = current.pos;
}
}
mMode = 2;
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
dComIfGs_resetLastWarpAcceptStage();
break;
case '0002':
initTalk(3, NULL);
mMsgTimer = 0;
setAngle(fopAcM_searchPlayerAngleY(this));
break;
case '0003':
mCyl.OffCoSetBit();
setMotion(MOT_JUMP_S, -1.0f, 0);
speedF = 0.0f;
speed.y = 0.0f;
scale.setall(1.0f);
break;
default:
JUT_ASSERT(2809, FALSE);
}
}
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, TRUE)) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
switch (*cutName) {
case '0001':
eventManager.cutEnd(staffId);
break;
case '0002':
if (talkProc(NULL, TRUE, NULL)) {
eventManager.cutEnd(staffId);
}
break;
case '0003':
if (mMotionPhase == 0 && mAnm_p->checkFrame(9.0f)) {
speedF = 12.0f;
speed.y = 33.0f;
field_0x1370 = 200.0f / speedF;
mSound.startCreatureSound(Z2SE_TKS_V_JUMP_UP, 0, -1);
}
if (speedF > 0.0f) {
cLib_chaseF(&scale.x, 0.15f, 0.85f / (200.0f / speedF));
scale.setall(scale.x);
if (cLib_calcTimer<int>(&field_0x1370) == 0) {
speedF = 0.0f;
speed.y = 0.0f;
eventManager.cutEnd(staffId);
}
}
break;
default:
JUT_ASSERT(2853, FALSE);
break;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) {
mEventIdx = -1;
dComIfGp_event_reset();
fopAcM_delete(this);
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(2870, FALSE);
}
}
/* 80B1A30C-80B1A888 005DCC 057C+00 1/0 0/0 0/0 .text demo_walkBack__10daNpcTks_cFv */
void daNpcTks_c::demo_walkBack() {
switch (mMode){
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotionAnm(ANM_WAIT_A, 0.0f);
setLookMode(LOOK_PLAYER_TALK, NULL);
if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0) {
current.pos.set(0.0f, -150.0f, 6600.0f);
old.pos = current.pos;
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN07") == 0) {
current.pos.set(4955.0f, -200.0f, 5480.0f);
old.pos = current.pos;
}
if (cLib_calcTimer<int>(&field_0x1370) > 0) {
return;
}
if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) {
if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) {
mMode = 2;
} else {
break;
}
} else {
eventInfo.setArchiveName(l_arcName);
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, "TKS_WARPBACK", 0xFF);
fopAcM_orderOtherEventId(this, mEventIdx, 0xFF, 0xFFFF, 4, 1);
}
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
dComIfGs_resetLastWarpAcceptStage();
break;
case '0002':
initTalk(3, NULL);
mMsgTimer = 0;
setAngle(fopAcM_searchPlayerAngleY(this));
break;
case '0003':
mCyl.OffCoSetBit();
setMotion(MOT_JUMP_S, -1.0f, 0);
speedF = 0.0f;
speed.y = 0.0f;
scale.setall(1.0f);
break;
default:
JUT_ASSERT(2809, FALSE);
}
}
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, TRUE)) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
switch (*cutName) {
case '0001':
eventManager.cutEnd(staffId);
break;
case '0002':
if (talkProc(NULL, TRUE, NULL)) {
eventManager.cutEnd(staffId);
}
break;
case '0003':
if (mMotionPhase == 0 && mAnm_p->checkFrame(9.0f)) {
speedF = 12.0f;
speed.y = 31.0f;
field_0x1370 = 200.0f / speedF;
mSound.startCreatureSound(Z2SE_TKS_V_JUMP_UP, 0, -1);
}
if (speedF > 0.0f) {
cLib_chaseF(&scale.x, 0.15f, 0.85f / (200.0f / speedF));
scale.setall(scale.x);
if (cLib_calcTimer<int>(&field_0x1370) == 0) {
speedF = 0.0f;
speed.y = 0.0f;
eventManager.cutEnd(staffId);
}
}
break;
default:
JUT_ASSERT(2986, FALSE);
break;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) {
dComIfGp_event_reset();
mEventIdx = -1;
dMeter2Info_warpInProc();
fopAcM_delete(this);
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(3004, FALSE);
}
}
/* 80B1A888-80B1B6A0 006348 0E18+00 1/0 0/0 0/0 .text demo_Lv7Start__10daNpcTks_cFv */
void daNpcTks_c::demo_Lv7Start() {
switch (mMode) {
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotion(MOT_JUMP_S, -1.0f, 0);
mMode = 2;
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0000':
break;
case '0002':
current.pos.set(120.0f, 3000.0f, 5500.0f);
old.pos = current.pos;
setAngle(fopAcM_searchPlayerAngleY(this));
parentActorID = fopAcM_createChild(PROC_NPC_TKC, fopAcM_GetID(this), 3, &current.pos, fopAcM_GetRoomNo(this),
&mCurAngle, NULL, -1, NULL);
dComIfGp_event_setTalkPartner(this);
field_0x138b = false;
field_0x1370 = 143;
break;
case '0003': {
daNpcTkc_c* actor_p = NULL;
fopAcM_SearchByID(parentActorID, (fopAc_ac_c**)&actor_p);
if (actor_p != NULL) {
actor_p->setActionWait();
}
setMotion(MOT_SWIM, -1.0f, 0);
field_0x1370 = 60;
break;
}
case '0004':
case '0008':
initTalk(mMessageNo, NULL);
mMsgTimer = 0;
setLookMode(LOOK_PLAYER_TALK, NULL);
break;
case '0005':
break;
case '0007': {
daNpcTkc_c* actor_p = NULL;
fopAcM_SearchByID(parentActorID, (fopAc_ac_c**)&actor_p);
if (actor_p != NULL) {
actor_p->setActionWait();
}
break;
}
case '0009':
setLookMode(LOOK_NONE, NULL);
break;
case '0010': {
daNpcTkc_c* actor_p = NULL;
fopAcM_SearchByID(parentActorID, (fopAc_ac_c**)&actor_p);
if (actor_p != NULL) {
actor_p->setActionFollow();
}
setMotion(MOT_JUMP_S, -1.0f, 0);
break;
}
case '0011':
setMotion(MOT_RUN, -1.0f, 0);
speedF = 10.0f;
break;
case '0012':
fopAcM_delete(this);
break;
default:
JUT_ASSERT(3091, FALSE);
break;
}
}
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, TRUE)) {
setExpression(i_expression, -1.0f);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
switch (*cutName) {
case '0001':
gravity = 0.0f;
if (!daPy_getPlayerActorClass()->checkSwimUp()) {
eventManager.cutEnd(staffId);
}
break;
case '0002':
if (cLib_calcTimer<int>(&field_0x1370) == 0) {
eventManager.cutEnd(staffId);
}
if (mAcch.ChkWaterIn()) {
f32 fVar3 = mAcch.m_wtr.GetHeight();
if (current.pos.y < fVar3) {
cXyz i_pos(current.pos.x, fVar3, current.pos.z);
if (!field_0x138b) {
fopKyM_createWpillar(&i_pos, 1.0f, 0);
Z2GetAudioMgr()->seStart(Z2SE_CM_BODYFALL_WATER_S, &i_pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
if (speed.y < 0.0f) {
speed.y *= 0.7;
}
speed.y -= gravity - 1.0f;
setMotion(MOT_SWIM, -1.0f, 0);
fopAcM_effHamonSet(&field_0x137c[0], &i_pos, 0.7f, 0.08f);
field_0x138b = true;
} else {
field_0x138b = false;
}
}
if (!field_0x138b) {
mSound.startCreatureVoiceLevel(Z2SE_TKS_V_FALLING_LOOP, -1);
}
break;
case '0003':
if (cLib_calcTimer<int>(&field_0x1370) == 0) {
eventManager.cutEnd(staffId);
}
if (mAcch.ChkWaterIn()) {
f32 fVar2 = mAcch.m_wtr.GetHeight();
if (current.pos.y < fVar2) {
current.pos.y = fVar2;
speed.y = 0.0f;
fopAcM_effHamonSet(&field_0x137c[0], &current.pos, 0.7f, 0.08f);
field_0x138b = true;
} else {
field_0x138b = false;
}
}
break;
case '0008':
if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
if (talkProc(NULL, TRUE, NULL)) {
eventManager.cutEnd(staffId);
}
} else {
if (step(fopAcM_searchPlayerAngleY(this), 0)) {
mTurnMode = 0;
}
}
if (mAcch.ChkWaterIn()) {
f32 fVar1 = mAcch.m_wtr.GetHeight();
if (current.pos.y < fVar1) {
current.pos.y = fVar1;
speed.y = 0.0f;
fopAcM_effHamonSet(&field_0x137c[0], &current.pos, 0.7f, 0.08f);
field_0x138b = true;
} else {
field_0x138b = false;
}
}
break;
case '0007': {
case '0005':
mSound.startCreatureVoiceLevel(Z2SE_TKJ_V_ODOROKI_LOOP, -1);
daNpcTkc_c* actor_p = NULL;
fopAcM_SearchByID(parentActorID, (fopAc_ac_c**)&actor_p);
if (actor_p != NULL) {
actor_p->callOdorokiSound();
}
// fallthrough
}
case '0012':
eventManager.cutEnd(staffId);
if (mAcch.ChkWaterIn()) {
f32 fVar1 = mAcch.m_wtr.GetHeight();
if (current.pos.y < fVar1) {
current.pos.y = fVar1;
speed.y = 0.0f;
fopAcM_effHamonSet(&field_0x137c[0], &current.pos, 0.7f, 0.08f);
field_0x138b = true;
} else {
field_0x138b = false;
}
}
break;
case '0004': {
int iVar1[2] = {0x2520, -1};
if (talkProc(iVar1, TRUE, NULL)) {
if (!mFlow.checkEndFlow()) {
fopAc_ac_c* actor_p = fopAcM_SearchByName(PROC_Tag_Lv7Gate);
if (actor_p != NULL) {
setLookMode(LOOK_ACTOR, actor_p);
}
} else {
eventManager.cutEnd(staffId);
current.pos.set(1627.059f, -250.0f, 5621.671f);
old.pos = current.pos;
setAngle(0x6024);
setExpression(EXPR_NONE, -1.0f);
setMotion(MOT_WAIT_A, -1.0f, 0);
setLookMode(LOOK_NONE, NULL);
daNpcTkc_c* actor_p = NULL;
fopAcM_SearchByID(parentActorID, (fopAc_ac_c**)&actor_p);
if (actor_p != NULL) {
actor_p->setActionFollow();
}
}
}
if (mAcch.ChkWaterIn()) {
f32 fVar2 = mAcch.m_wtr.GetHeight();
if (current.pos.y < fVar2) {
current.pos.y = fVar2;
speed.y = 0.0f;
fopAcM_effHamonSet(&field_0x137c[0], &current.pos, 0.7f, 0.08f);
field_0x138b = true;
} else {
field_0x138b = false;
}
}
break;
}
case '0009': {
cXyz sp8c(3453.1926f, -200.0f, 5485.9224f);
if (step(cLib_targetAngleY(&current.pos, &sp8c), 1)) {
eventManager.cutEnd(staffId);
}
break;
}
case '0010':
if (mMotion == 4) {
if (mMotionPhase == 0 && mAnm_p->checkFrame(9.0f)) {
speedF = 8.0f;
speed.y = 30.0f;
mSound.startCreatureSound(Z2SE_TKS_V_JUMP_UP, 0, -1);
break;
}
if (speedF > 0.0f && mAcch.ChkGroundLanding()) {
setMotion(MOT_JUMP_E, -1.0f, 0);
speedF = 0.0f;
speed.y = 0.0f;
}
} else if (mMotion == 5) {
if (mAnm_p->isStop()) {
eventManager.cutEnd(staffId);
}
}
break;
case '0011': {
mSound.startCreatureVoiceLevel(Z2SE_TKS_V_RUNNING_LOOP, -1);
cXyz sp98(3453.1926f, -200.0f, 5485.9224f);
step(cLib_targetAngleY(&current.pos, &sp98), 0);
eventManager.cutEnd(staffId);
break;
}
default:
JUT_ASSERT(3263, FALSE);
break;
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(3269, FALSE);
break;
}
}
/* 80B1B6A0-80B1BD64 007160 06C4+00 2/0 0/0 0/0 .text demo_Lv3PickUp__10daNpcTks_cFv */
void daNpcTks_c::demo_Lv3PickUp() {
switch (mMode) {
case 0:
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotion(MOT_WAIT_A, -1.0f, 0);
setLookMode(LOOK_PLAYER, NULL);
if (strcmp(dComIfGp_getStartStageName(), "D_MN01") == 0) {
current.pos.set(0.0f, 1225.0f, 14737.291f);
setAngle(0);
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN07") == 0) {
current.pos.set(0.0f, -250.0f, 3885.7244f);
setAngle(0);
}
old.pos = current.pos;
if (cLib_calcTimer<int>(&field_0x1370) <= 0) {
if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) {
if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) {
mMode = 2;
}
break;
}
if (daPy_getPlayerActorClass()->checkSwimUp()) {
eventInfo.setArchiveName(l_arcName);
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, "TKS_WARPBACK", 0xFF);
fopAcM_orderOtherEventId(this, mEventIdx, 0xFF, 0xFFFF, 4, 1);
}
}
break;
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
dComIfGs_resetLastWarpAcceptStage();
break;
case '0002':
initTalk(3, NULL);
mMsgTimer = 0;
mTurnMode = 0;
setLookMode(LOOK_PLAYER_TALK, NULL);
break;
case '0003':
mCyl.OffCoSetBit();
setMotion(MOT_JUMP_S, -1.0f, 0);
speedF = 0.0f;
speed.y = 0.0f;
scale.setall(1.0f);
break;
default:
JUT_ASSERT(3348, FALSE);
break;
}
}
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, TRUE)) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
switch (*cutName) {
case '0001':
eventManager.cutEnd(staffId);
break;
case '0002':
if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
if (talkProc(NULL, TRUE, NULL)) {
eventManager.cutEnd(staffId);
}
} else if (step(fopAcM_searchPlayerAngleY(this), 0)) {
mTurnMode = 0;
}
break;
case '0003':
if (mMotionPhase == 0 && mAnm_p->checkFrame(9.0f)) {
speed.y = 33.0f;
field_0x136c = speed.y * -2.0f / gravity;
field_0x1370 = field_0x136c;
speedF = fopAcM_searchPlayerDistanceXZ(this) / field_0x136c;
mSound.startCreatureSound(Z2SE_TKS_V_JUMP_UP, 0, -1);
}
if (speedF > 0.0f) {
cLib_chaseF(&scale.x, 0.15f, 0.85f / field_0x136c);
scale.setall(scale.x);
if (cLib_calcTimer<int>(&field_0x1370) == 0) {
speedF = 0.0f;
speed.y = 0.0f;
eventManager.cutEnd(staffId);
}
}
break;
default:
JUT_ASSERT(3406, FALSE);
break;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) {
dComIfGp_event_reset();
mEventIdx = -1;
dMeter2Info_warpInProc();
fopAcM_delete(this);
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(3424, FALSE);
break;
}
}
/* 80B1BD64-80B1C3C8 007824 0664+00 1/0 0/0 0/0 .text demo_Lv6PickUp__10daNpcTks_cFv */
void daNpcTks_c::demo_Lv6PickUp() {
switch (mMode) {
case 0:
if (strcmp(dComIfGp_getStartStageName(), "D_MN05") == 0) {
current.pos.set(-11.226944f, 2204.15f, 17357.205f);
setAngle(0);
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN06") == 0) {
current.pos.set(0.0f, -275.0f, 1900.0f);
setAngle(0);
}
old.pos = current.pos;
if (fopAcM_searchPlayerDistance(this) <= 300.0f) {
eventInfo.setArchiveName(l_arcName);
mEventIdx = dComIfGp_getEventManager().getEventIdx(this, "TKS_WARPBACK", 0xFF);
fopAcM_orderOtherEventId(this, mEventIdx, 0xFF, 0xFFFF, 4, 1);
mMode = 2;
} else {
cLib_offBit<u32>(attention_info.flags, fopAc_AttnFlag_CARRY_e);
setExpression(EXPR_NONE, -1.0f);
setMotion(MOT_WAIT_A, -1.0f, 0);
setLookMode(LOOK_PLAYER, NULL);
break;
}
// fallthrough
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staffId = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staffId != -1) {
int* cutName = (int*)eventManager.getMyNowCutName(staffId);
if (eventManager.getIsAddvance(staffId)) {
switch (*cutName) {
case '0001':
dComIfGs_resetLastWarpAcceptStage();
break;
case '0002':
initTalk(3, NULL);
mMsgTimer = 0;
mTurnMode = 0;
setLookMode(LOOK_PLAYER_TALK, NULL);
break;
case '0003':
mCyl.OffCoSetBit();
setMotion(MOT_JUMP_S, -1.0f, 0);
speedF = 0.0f;
speed.y = 0.0f;
scale.setall(1.0f);
break;
default:
JUT_ASSERT(3499, FALSE);
break;
}
}
int msgTimer = mMsgTimer;
int i_expression, i_motion;
if (ctrlMsgAnm(i_expression, i_motion, this, TRUE)) {
setExpression(i_expression, -1.0f);
setMotion(i_motion, -1.0f, 0);
} else if (msgTimer != 0 && mMsgTimer == 0) {
setExpressionTalkAfter();
}
switch (*cutName) {
case '0001':
eventManager.cutEnd(staffId);
break;
case '0002':
if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) {
if (talkProc(NULL, TRUE, NULL)) {
eventManager.cutEnd(staffId);
}
} else if (step(fopAcM_searchPlayerAngleY(this), 0)) {
mTurnMode = 0;
}
break;
case '0003':
if (mMotionPhase == 0 && mAnm_p->checkFrame(9.0f)) {
speedF = 16.0f;
speed.y = 36.0f;
field_0x1370 = 300.0f / speedF;
mSound.startCreatureSound(Z2SE_TKS_V_JUMP_UP, 0, -1);
}
if (speedF > 0.0f) {
cLib_chaseF(&scale.x, 0.15f, 0.85f / (300.0f / speedF));
scale.setall(scale.x);
if (cLib_calcTimer<int>(&field_0x1370) == 0) {
speedF = 0.0f;
speed.y = 0.0f;
eventManager.cutEnd(staffId);
}
}
break;
default:
JUT_ASSERT(3650, FALSE);
break;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) {
dComIfGp_event_reset();
mEventIdx = -1;
dMeter2Info_warpInProc();
fopAcM_delete(this);
}
}
}
break;
case 3:
break;
default:
JUT_ASSERT(3568, FALSE);
break;
}
}
/* 80B1C3C8-80B1C3E8 007E88 0020+00 1/0 0/0 0/0 .text daNpcTks_Create__FPv */
static int daNpcTks_Create(void* a_this) {
return static_cast<daNpcTks_c*>(a_this)->Create();
}
/* 80B1C3E8-80B1C408 007EA8 0020+00 1/0 0/0 0/0 .text daNpcTks_Delete__FPv */
static int daNpcTks_Delete(void* a_this) {
return static_cast<daNpcTks_c*>(a_this)->Delete();
}
/* 80B1C408-80B1C428 007EC8 0020+00 1/0 0/0 0/0 .text daNpcTks_Execute__FPv */
static int daNpcTks_Execute(void* a_this) {
return static_cast<daNpcTks_c*>(a_this)->Execute();
}
/* 80B1C428-80B1C448 007EE8 0020+00 1/0 0/0 0/0 .text daNpcTks_Draw__FPv */
static int daNpcTks_Draw(void* a_this) {
return static_cast<daNpcTks_c*>(a_this)->Draw();
}
/* 80B1C448-80B1C450 007F08 0008+00 1/0 0/0 0/0 .text daNpcTks_IsDelete__FPv */
static int daNpcTks_IsDelete(void* a_this) {
return 1;
}
/* 80B1C480-80B1C4F8 007F40 0078+00 1/0 0/0 0/0 .text setParam__10daNpcTks_cFv */
void daNpcTks_c::setParam() {
mAcchCir.SetWallR(daNpcTks_Param_c::m.common.width);
mAcchCir.SetWallH(daNpcTks_Param_c::m.common.knee_length);
gravity = fopAcM_checkCarryNow(this) != 0 ? 0.0f: daNpcTks_Param_c::m.common.gravity;
maxFallSpeed = -50.0f;
}
/* 80B1CB54-80B1CC28 008614 00D4+00 1/0 0/0 0/0 .text ctrlBtk__10daNpcTks_cFv */
BOOL daNpcTks_c::ctrlBtk() {
if (mpMatAnm != NULL) {
J3DAnmTextureSRTKey* i_anm = getTexSRTKeyAnmP(l_arcName, l_btkGetParamList[0].fileIdx);
J3DAnmTextureSRTKey* i_btk = mBtkAnm.getBtkAnm();
if (i_anm == i_btk) {
mpMatAnm->setNowOffsetX((f32)cM_ssin(mEyeAngle.y) * 0.2f * -1.0f);
mpMatAnm->setNowOffsetY((f32)cM_ssin(mEyeAngle.x) * 0.2f);
mpMatAnm->onEyeMoveFlag();
return TRUE;
}
mpMatAnm->offEyeMoveFlag();
}
return FALSE;
}
/* 80B1CC28-80B1CFD0 0086E8 03A8+00 1/0 0/0 0/0 .text setAttnPos__10daNpcTks_cFv */
void daNpcTks_c::setAttnPos() {
if(mLookMode == 1) {
for (int i = 0; i < 3; i++) {
mLookatAngle[i].setall(0);
}
}
J3DModelData* mdlData_p = mAnm_p->getModel()->getModelData();
for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
}
setMtx();
lookat();
if (field_0x138a) {
eyePos = current.pos;
eyePos.y += 80.0f;
} else {
cXyz sp2c(10.0f, 10.0f, 0.0f);
mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(0x11));
mDoMtx_stack_c::multVecZero(&mHeadPos);
mDoMtx_stack_c::multVec(&sp2c, &eyePos);
sp2c.x = 0.0f;
mDoMtx_stack_c::multVec(&sp2c, &sp2c);
mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp2c);
mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp2c);
}
cXyz* attnPos = mLookat.getAttnPos();
if (attnPos != NULL) {
cXyz sp38(*attnPos - eyePos);
mEyeAngle.y = -(mLookatAngle[2].y + mCurAngle.y);
mEyeAngle.y += cM_atan2s(sp38.x, sp38.z);
mEyeAngle.x = -cM_atan2s(sp38.y, sp38.absXZ());
} else {
mEyeAngle.y = 0;
mEyeAngle.x = 0;
}
attention_info.position.set(current.pos.x, current.pos.y + daNpcTks_Param_c::m.common.attention_offset, current.pos.z);
if (!fopAcM_checkCarryNow(this)) {
if (!field_0x138a) {
mCyl.SetC(current.pos);
#ifdef DEBUG
mCyl.SetH(daNpcTks_Param_c::m.common.height);
mCyl.SetR(daNpcTks_Param_c::m.common.width);
#endif
dComIfG_Ccsp()->Set(&mCyl);
}
if (mTksTsubo.field_0x586 != 0) {
mTksTsubo.mCyl.SetC(mTksTsubo.mPos);
dComIfG_Ccsp()->Set(&mTksTsubo.mCyl);
}
}
}
/* 80B1D1FC-80B1D204 008CBC 0008+00 1/0 0/0 0/0 .text drawDbgInfo__10daNpcTks_cFv */
BOOL daNpcTks_c::drawDbgInfo() {
return FALSE;
}
/* 80B1D204-80B1D35C 008CC4 0158+00 1/0 0/0 0/0 .text drawOtherMdls__10daNpcTks_cFv */
void daNpcTks_c::drawOtherMdls() {
if (mTksTsubo.field_0x586 != 0) {
J3DModel* model = mTksTsubo.mpModelMorf->getModel();
if (mTwilight) {
g_env_light.settingTevStruct(4, &mTksTsubo.mPos, &mTksTsubo.mTevStr);
} else {
g_env_light.settingTevStruct(8, &mTksTsubo.mPos, &mTksTsubo.mTevStr);
}
g_env_light.setLightTevColorType_MAJI(model, &mTksTsubo.mTevStr);
dComIfGd_setListBG();
mTksTsubo.mpModelMorf->entryDL();
dComIfGd_setList();
cXyz* pcVar1;
if (field_0x138a) {
pcVar1 = &current.pos;
} else {
pcVar1 = &mTksTsubo.mPos;
}
f32 fVar1;
if (field_0x138a) {
fVar1 = mGroundH;
} else {
fVar1 = mTksTsubo.mGroundH;
}
cBgS_PolyInfo* polyBase;
if (field_0x138a) {
polyBase = &mGndChk;
} else {
polyBase = &mTksTsubo.polyBase;
}
mTksTsubo.mShadowKey = dComIfGd_setShadow(mTksTsubo.mShadowKey, 1, model,
pcVar1, daNpcTks_Param_c::m.common.real_shadow_size,
30.0f, pcVar1->y, fVar1, *polyBase, &mTksTsubo.mTevStr, 0, 1.0f,
dDlst_shadowControl_c::getSimpleTex());
}
}
/* 80B1E408-80B1E428 -00001 0020+00 1/0 0/0 0/0 .data daNpcTks_MethodTable */
static actor_method_class daNpcTks_MethodTable = {
(process_method_func)daNpcTks_Create,
(process_method_func)daNpcTks_Delete,
(process_method_func)daNpcTks_Execute,
(process_method_func)daNpcTks_IsDelete,
(process_method_func)daNpcTks_Draw,
};
/* 80B1E428-80B1E458 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_TKS */
extern actor_process_profile_definition g_profile_NPC_TKS = {
fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_NPC_TKS, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daNpcTks_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
374, // mPriority
&daNpcTks_MethodTable, // sub_method
0x08044108, // mStatus
fopAc_NPC_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};