/** * @file d_a_npc_moi.cpp * */ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_ep.h" #include "d/actor/d_a_npc_moi.h" #include "d/actor/d_a_npc_uri.h" /* 80A7AEF0-80A7AFAC 000000 00BC+00 19/19 0/0 0/0 .rodata m__17daNpc_Moi_Param_c */ const daNpc_Moi_HIOParam daNpc_Moi_Param_c::m = { 200.0f, // attention_offset -3.0f, // gravity 1.0f, // scale 400.0f, // real_shadow_size 255.0f, // weight 180.0f, // height 35.0f, // knee_length 30.0f, // width 0.0f, // body_angleX_max 0.0f, // body_angleX_min 10.0f, // body_angleY_max -10.0f, // body_angleY_min 30.0f, // head_angleX_max -10.0f, // head_angleX_min 45.0f, // head_angleY_max -45.0f, // head_angleY_min 0.6f, // neck_rotation_ratio 12.0f, // morf_frame 3, // talk_distance 6, // talk_angle 5, // attention_distance 6, // attention_angle 110.0f, // fov 0.0f, // search_distance 0.0f, // search_height 0.0f, // search_depth 60, // attention_time 8, // damage_time 0, // face_expression 0, // motion 0, // look_mode 0, // debug_mode_ON 0, // debug_info_ON 4.0f, // expression_morf_frame 0.0f, // box_min_x 0.0f, // box_min_y 0.0f, // box_min_z 0.0f, // box_max_x 0.0f, // box_max_y 0.0f, // box_max_z 0.0f, // box_offset 350.0f, // field_0x8c 300.0f, // field_0x90 -100.0f, // field_0x94 90, // field_0x98 200, // field_0x9a 235, // field_0x9c 125, // field_0x9e 0, // field_0xa0 0, // field_0xa2 1.0f, // field_0xa4 1000.0f, // field_0xa8 300.0f, // field_0xac -300.0f, // field_0xb0 30.0f, // field_0xb4 60.0f, // field_0xb8 }; #if DEBUG daNpc_Moi_HIO_c::daNpc_Moi_HIO_c() { m = daNpc_Moi_Param_c::m; } void daNpc_Moi_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { // TODO } void daNpc_Moi_HIO_c::genMessage(JORMContext* ctext) { // TODO } #endif /* 80A7B17C-80A7B1BC 000020 0040+00 1/1 0/0 0/0 .data l_bmdData */ static int l_bmdData[8][2] = { {11, 1}, {29, 3}, {30, 3}, {31, 3}, {13, 1}, {33, 3}, {12, 1}, {32, 3}, }; /* 80A7B1BC-80A7B1DC -00001 0020+00 0/1 0/0 0/0 .data l_evtList */ static daNpcT_evtData_c l_evtList[4] = { {"", 0}, {"DEFAULT_GETITEM", 0}, {"NO_RESPONSE", 0}, {"DELIVERED_SW", 2}, }; /* 80A7B1DC-80A7B1F4 -00001 0018+00 5/6 0/0 0/0 .data l_resNameList */ static char* l_resNameList[6] = { "", "Moi", "Moi1", "Moi2", "Moi3", "Moi_p1", }; /* 80A7B1F4-80A7B1F8 000098 0003+01 1/0 0/0 0/0 .data l_loadResPtrn0 */ static s8 l_loadResPtrn0[3] = { 1, 2, -1, }; /* 80A7B1F8-80A7B1FC 00009C 0003+01 1/0 0/0 0/0 .data l_loadResPtrn1 */ static s8 l_loadResPtrn1[3] = { 1, 3, -1, }; /* 80A7B1FC-80A7B200 0000A0 0004+00 1/0 0/0 0/0 .data l_loadResPtrn3 */ static s8 l_loadResPtrn3[4] = { 1, 3, 4, -1, }; /* 80A7B200-80A7B204 0000A4 0003+01 1/0 0/0 0/0 .data l_loadResPtrn4 */ static s8 l_loadResPtrn4[3] = { 1, 5, -1, }; /* 80A7B204-80A7B20C 0000A8 0005+03 1/0 0/0 0/0 .data l_loadResPtrn9 */ static s8 l_loadResPtrn9[5] = { 1, 2, 3, 4, -1, }; /* 80A7B20C-80A7B228 -00001 001C+00 1/2 0/0 0/0 .data l_loadResPtrnList */ static s8* l_loadResPtrnList[7] = { l_loadResPtrn0, l_loadResPtrn4, l_loadResPtrn1, l_loadResPtrn3, l_loadResPtrn0, l_loadResPtrn0, l_loadResPtrn9, }; /* 80A7B228-80A7B458 0000CC 0230+00 0/1 0/0 0/0 .data l_faceMotionAnmData */ static daNpcT_faceMotionAnmData_c l_faceMotionAnmData[20] = { {-1, 0, 0, 19, 2, 1, TRUE}, {6, 0, 1, 19, 2, 1, TRUE}, {9, 0, 2, 41, 0, 2, FALSE}, {10, 0, 2, 42, 0, 2, FALSE}, {8, 0, 2, 40, 0, 2, FALSE}, {7, 0, 2, 39, 0, 2, FALSE}, {11, 0, 2, 43, 0, 2, FALSE}, {7, 0, 3, 40, 0, 3, FALSE}, {8, 0, 3, 41, 0, 3, FALSE}, {12, 2, 2, 44, 2, 2, FALSE}, {16, 2, 2, 48, 2, 2, FALSE}, {-1, 0, 0, -1, 0, 0, FALSE}, {14, 2, 2, 46, 2, 2, FALSE}, {15, 2, 2, 47, 2, 2, FALSE}, {13, 2, 2, 45, 2, 2, FALSE}, {10, 2, 3, 43, 2, 3, FALSE}, {11, 2, 3, 44, 2, 3, FALSE}, {9, 2, 3, 42, 2, 3, FALSE}, {6, 2, 3, 39, 2, 3, FALSE}, {18, 0, 2, 49, 0, 2, FALSE}, }; /* 80A7B458-80A7B82C 0002FC 03D4+00 3/4 0/0 0/0 .data l_motionAnmData */ static daNpcT_motionAnmData_c l_motionAnmData[35] = { {8, 2, 1, 16, 0, 1, 1, 0}, {29, 2, 2, 16, 0, 1, 1, 0}, {30, 2, 2, 16, 0, 1, 1, 0}, {6, 0, 2, 16, 0, 1, 1, 0}, {17, 2, 2, 35, 2, 2, 0, 0}, {31, 2, 2, 16, 0, 1, 1, 0}, {23, 0, 2, 16, 0, 1, 1, 0}, {28, 0, 2, 16, 0, 1, 1, 0}, {24, 0, 2, 16, 0, 1, 1, 0}, {25, 0, 2, 16, 0, 1, 1, 0}, {26, 0, 2, 16, 0, 1, 1, 0}, {27, 0, 2, 16, 0, 1, 1, 0}, {32, 2, 2, 16, 0, 1, 1, 0}, {7, 0, 1, 16, 0, 1, 1, 0}, {20, 2, 3, 16, 0, 1, 1, 0}, {17, 0, 3, 16, 0, 1, 1, 0}, {18, 0, 3, 16, 0, 1, 1, 0}, {19, 0, 3, 16, 0, 1, 1, 0}, {21, 2, 3, 16, 0, 1, 1, 0}, {-1, 0, 0, -1, 0, 0, 0, 0}, {12, 0, 3, 16, 0, 1, 1, 0}, {13, 0, 3, 16, 0, 1, 1, 0}, {26, 2, 3, 16, 0, 1, 1, 0}, {25, 0, 3, 16, 0, 1, 1, 0}, {22, 0, 3, 16, 0, 1, 1, 0}, {23, 0, 3, 16, 0, 1, 1, 0}, {24, 0, 3, 16, 0, 1, 1, 0}, {14, 0, 3, 16, 0, 1, 1, 0}, {15, 2, 3, 16, 0, 1, 1, 0}, {16, 2, 3, 16, 0, 1, 1, 0}, {19, 0, 2, 16, 0, 1, 1, 0}, {21, 0, 2, 16, 0, 1, 1, 0}, {20, 2, 2, 16, 0, 1, 1, 0}, {3, 2, 4, 16, 0, 1, 1, 0}, {21, 2, 3, 16, 0, 1, 1, 0}, }; /* 80A7B82C-80A7B98C 0006D0 0160+00 0/1 0/0 0/0 .data l_faceMotionSequenceData */ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_faceMotionSequenceData[88] = { {1, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {2, -1, 1}, {12, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {3, -1, 1}, {13, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {4, -1, 1}, {14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {5, -1, 1}, {9, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {6, -1, 1}, {10, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {7, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {18, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {8, -1, 1}, {16, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {17, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {16, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {15, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {9, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {10, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {14, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {11, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {12, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {13, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {19, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, }; /* 80A7B98C-80A7BC9C 000830 0310+00 0/1 0/0 0/0 .data l_motionSequenceData */ static daNpcT_MotionSeqMngr_c::sequenceStepData_c l_motionSequenceData[196] = { {0, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {8, -1, 1}, {2, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {1, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {9, -1, 1}, {1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {4, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {10, -1, 1}, {1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {11, -1, 1}, {5, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {2, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {7, -1, 1}, {1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {6, -1, 1}, {0, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {22, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {25, -1, 1}, {22, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {28, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {27, 0, 1}, {29, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {14, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {15, -1, 1}, {14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {23, -1, 1}, {22, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {16, -1, 1}, {14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {17, -1, 1}, {14, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {33, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {31, -1, 1}, {32, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {32, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {29, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {20, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {21, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {26, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {18, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {25, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {24, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {13, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {12, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {3, -1, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {30, -1, 1}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {18, 4, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, }; /* 80A7BC9C-80A7BCB0 -00001 0014+00 1/1 0/0 0/0 .data mCutNameList__11daNpc_Moi_c */ char* daNpc_Moi_c::mCutNameList[5] = { "", "DELIVERED_SW", "APPEARANCE_MOI", "CONVERSATION_WITH_URI", "FIND_WOLF", }; /* 80A7BCE0-80A7BD1C 000B84 003C+00 1/2 0/0 0/0 .data mCutList__11daNpc_Moi_c */ daNpc_Moi_c::cutFunc daNpc_Moi_c::mCutList[5] = { NULL, &daNpc_Moi_c::cutDeliveredSw, &daNpc_Moi_c::cutAppearanceMoi, &daNpc_Moi_c::cutConversationWithUri, &daNpc_Moi_c::cutFindWolf, }; enum Motion { /* 0x00 */ MOT_UNK_0 = 0, /* 0x01 */ MOT_UNK_1 = 1, /* 0x02 */ MOT_UNK_2 = 2, /* 0x03 */ MOT_UNK_3 = 3, /* 0x04 */ MOT_UNK_4 = 4, /* 0x05 */ MOT_UNK_5 = 5, /* 0x08 */ MOT_UNK_8 = 8, /* 0x09 */ MOT_UNK_9 = 9, /* 0x0A */ MOT_UNK_10 = 10, /* 0x0B */ MOT_UNK_11 = 11, /* 0x0E */ MOT_UNK_14 = 14, /* 0x0F */ MOT_UNK_15 = 15, /* 0x10 */ MOT_UNK_16 = 16, /* 0x12 */ MOT_UNK_18 = 18, /* 0x13 */ MOT_UNK_19 = 19, /* 0x15 */ MOT_UNK_21 = 21, /* 0x25 */ MOT_UNK_37 = 37, /* 0x26 */ MOT_UNK_38 = 38, /* 0x27 */ MOT_UNK_39 = 39, /* 0x28 */ MOT_UNK_40 = 40, /* 0x2B */ MOT_UNK_43 = 43, /* 0x2D */ MOT_UNK_45 = 45, /* 0x2F */ MOT_UNK_47 = 47, }; /* 80A73F4C-80A74150 0000EC 0204+00 1/0 0/0 0/0 .text __dt__11daNpc_Moi_cFv */ daNpc_Moi_c::~daNpc_Moi_c() { if (mpMorf[0] != 0) { mpMorf[0]->stopZelAnime(); } deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } /* 80A74150-80A74474 0002F0 0324+00 1/1 0/0 0/0 .text create__11daNpc_Moi_cFv */ int daNpc_Moi_c::create() { static const int heapSize[] = {0, 0x5C70, 0x7CB0, 0x7CA0, 0x5C70, 0x5C80, 0}; daNpcT_ct(this, daNpc_Moi_c, (daNpcT_faceMotionAnmData_c const*)l_faceMotionAnmData, (const daNpcT_motionAnmData_c*)l_motionAnmData, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_faceMotionSequenceData, 4, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_motionSequenceData, 4, (const daNpcT_evtData_c*)l_evtList, (char**)l_resNameList); mType = getType(); mFlowNodeNo = getFlowNodeNo(); mTwilight = 0; int phase = loadRes(l_loadResPtrnList[mType], (const char**)l_resNameList); if (phase == cPhs_COMPLEATE_e) { if (isDelete()) { return cPhs_ERROR_e; } if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize[mType])) { return cPhs_ERROR_e; } J3DModelData* modelData = mpMorf[0]->getModel()->getModelData(); fopAcM_SetMtx(this, mpMorf[0]->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -200.0f, -100.0f, -200.0f, 200.0f, 300.0f, 200.0f); mSound.init(¤t.pos, &eyePos, 3, 1); field_0x9c0.init(&mAcch, 0.0f, 0.0f); reset(); 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)); mCcStts.Init(mpHIO->m.common.weight, 0, this); for (int i = 0; i < 4; i++) { mCyl[i].Set(mCcDCyl); mCyl[i].SetStts(&mCcStts); mCyl[i].SetTgHitCallback(tgHitCallBack); } mSph.Set(mCcDSph); mSph.SetStts(&mCcStts); if (mType == TYPE_3) { mAcch.SetGrndNone(); mAcch.SetWallNone(); } mAcch.CrrPos(dComIfG_Bgsp()); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); if (mGroundH != -G_CM3D_F_INF) { setEnvTevColor(); setRoomNo(); } mCreating = 1; Execute(); mCreating = 0; } return phase; } /* 80A74474-80A7483C 000614 03C8+00 1/1 0/0 0/0 .text CreateHeap__11daNpc_Moi_cFv */ int daNpc_Moi_c::CreateHeap() { static int const bmdTypeList[6] = {6, 4, 1, 2, 3, 5}; int idx = 0; if (chkMoiN()) { idx = 7; } J3DModelData* modelData = static_cast( dComIfG_getObjectRes(l_resNameList[l_bmdData[idx][1]], l_bmdData[idx][0])); if (modelData == NULL) { return 1; } mpMorf[0] = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11020284); if (mpMorf[0] == NULL || mpMorf[0]->getModel() == NULL) { return 0; } J3DModel* model = mpMorf[0]->getModel(); for (u16 i = 0; i < modelData->getJointNum(); i++) { modelData->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); } model->setUserArea((uintptr_t)this); mpMatAnm[0] = new daNpcT_MatAnm_c(); if (mpMatAnm[0] == NULL) { return 0; } for (int i = 0; i < 2; i++) { if (l_bmdData[bmdTypeList[i]][0] >= 0) { modelData = (J3DModelData*)dComIfG_getObjectRes( l_resNameList[l_bmdData[bmdTypeList[i]][1]], l_bmdData[bmdTypeList[i]][0]); } else { modelData = NULL; } if (modelData != NULL) { mpModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); } else { mpModel[i] = NULL; } } if (chkMoiN()) { for (int i = 2; i < 6; i++) { if (l_bmdData[bmdTypeList[i]][0] >= 0) { modelData = (J3DModelData*)dComIfG_getObjectRes( l_resNameList[l_bmdData[bmdTypeList[i]][1]], l_bmdData[bmdTypeList[i]][0]); } else { modelData = NULL; } if (modelData != NULL) { mpModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); } else { mpModel[i] = NULL; } } } if (setFaceMotionAnm(1, false) && setMotionAnm(0, 0.0f, 0)) { return 1; } return 0; } /* 80A749F8-80A74A2C 000B98 0034+00 1/1 0/0 0/0 .text Delete__11daNpc_Moi_cFv */ int daNpc_Moi_c::Delete() { fopAcM_GetID(this); this->~daNpc_Moi_c(); return 1; } /* 80A74A2C-80A74A4C 000BCC 0020+00 2/2 0/0 0/0 .text Execute__11daNpc_Moi_cFv */ int daNpc_Moi_c::Execute() { return daNpcT_c::execute(); } /* 80A74A4C-80A74B80 000BEC 0134+00 1/1 0/0 0/0 .text Draw__11daNpc_Moi_cFv */ int daNpc_Moi_c::Draw() { J3DModelData* modelData; if (mpMatAnm[0] != NULL) { modelData = mpMorf[0]->getModel()->getModelData(); modelData->getMaterialNodePointer(getEyeballMaterialNo())->setMaterialAnm(mpMatAnm[0]); } if (mpModel[5] && field_0x1668) { ep_class* actor = (ep_class*)mActorMngr[0].getActorP(); if (actor) { actor->field_0x634 = field_0x1628; actor->current.pos = field_0x1628; GXColor color; color.r = mpHIO->m.field_0x9c; color.g = mpHIO->m.field_0x9e; color.b = mpHIO->m.field_0xa0; color.a = (u8)actor->field_0x5c0; dKy_BossLight_set(&field_0x1628, &color, mpHIO->m.field_0xa4, 1); } } return daNpcT_c::draw(0, 0, mRealShadowSize, NULL, 100.0f, 0, 0, 0); } /* 80A74B80-80A74BA0 000D20 0020+00 1/1 0/0 0/0 .text * createHeapCallBack__11daNpc_Moi_cFP10fopAc_ac_c */ int daNpc_Moi_c::createHeapCallBack(fopAc_ac_c* i_this) { return static_cast(i_this)->CreateHeap(); } /* 80A74BA0-80A74BF8 000D40 0058+00 1/1 0/0 0/0 .text ctrlJointCallBack__11daNpc_Moi_cFP8J3DJointi */ int daNpc_Moi_c::ctrlJointCallBack(J3DJoint* param_0, int param_1) { if (param_1 == 0) { J3DModel* model = j3dSys.getModel(); daNpc_Moi_c* i_this = reinterpret_cast(model->getUserArea()); if (i_this != 0) { i_this->ctrlJoint(param_0, model); } } return 1; } /* 80A74BF8-80A74C6C 000D98 0074+00 1/1 0/0 0/0 .text getType__11daNpc_Moi_cFv */ u8 daNpc_Moi_c::getType() { switch (fopAcM_GetParam(this) & 0xFF) { case 0: return TYPE_0; break; case 1: return TYPE_1; break; case 2: return TYPE_2; break; case 3: return TYPE_3; break; case 4: return TYPE_4; break; case 5: return TYPE_5; } return TYPE_6; } /* 80A74C6C-80A74D8C 000E0C 0120+00 1/1 0/0 0/0 .text isDelete__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::isDelete() { bool ret; switch (mType) { case TYPE_0: return FALSE; case TYPE_1: return FALSE; case TYPE_2: return !chkPlayerGetWoodShield(); case TYPE_3: return FALSE; case TYPE_4: ret = TRUE; if (daNpcT_chkEvtBit(0x258)) { bool bVar2 = false; if (getBitSW() != 0xFF) { if (dComIfGs_isSwitch(getBitSW(), fopAcM_GetRoomNo(this))) { bVar2 = true; } } if (!bVar2) { ret = FALSE; } } return ret; case TYPE_5: ret = FALSE; if (!daNpcT_chkEvtBit(0x271) || daNpcT_chkEvtBit(0xb8)) { ret = TRUE; } return ret; default: return FALSE; } } /* 80A74D8C-80A7513C 000F2C 03B0+00 1/1 0/0 0/0 .text reset__11daNpc_Moi_cFv */ void daNpc_Moi_c::reset() { int iVar8; cXyz cStack_30; csXyz cStack_80; int iVar1 = (u8*)&field_0x1670 - (u8*)&field_0x1610; if (mpMatAnm[0] != NULL) { mpMatAnm[0]->initialize(); } initialize(); for (int i = 0; i < 4; i++) { mActorMngr[i].initialize(); } if (getPathID() != 0xFF) { mPath.initialize(); mPath.setPathInfo(getPathID(), fopAcM_GetRoomNo(this), 0); } memset(&field_0x1610, 0, iVar1); cStack_80.setall(0.0f); cStack_80.y = home.angle.y; switch (mType) { case TYPE_0: break; case TYPE_1: if (mPath.getPathInfo()) { home.pos = mPath.getPntPos(0); cStack_30 = mPath.getPntPos(1); home.angle.y = cLib_targetAngleY(&home.pos, &cStack_30); cStack_80.y = home.angle.y; } setPos(home.pos); field_0x166b = 1; break; case TYPE_2: if (daNpcT_chkEvtBit(0xcd)) { JUT_ASSERT(1932, 0 != mPath.getPathInfo()); iVar8 = g_Counter.mCounter0 % mPath.getNumPnts(); cStack_30 = mPath.getPntPos(iVar8); setPos(cStack_30); mPath.setIdx(iVar8); mPath.setNextIdx(); cStack_30 = mPath.getPntPos(mPath.getIdx()); cStack_80.y = cLib_targetAngleY(¤t.pos, &cStack_30); } field_0x1666 = 1; field_0x1668 = 1; break; case TYPE_3: field_0x166f = 1; break; case TYPE_4: case TYPE_5: break; } field_0x15c0 = -1; setAngle(cStack_80); } /* 80A7513C-80A75160 0012DC 0024+00 4/4 0/0 0/0 .text chkMoiN__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::chkMoiN() { return (mType == TYPE_2 || mType == TYPE_3); } /* 80A75160-80A751E4 001300 0084+00 1/0 0/0 0/0 .text afterJntAnm__11daNpc_Moi_cFi */ void daNpc_Moi_c::afterJntAnm(int param_1) { if (param_1 == 1) { mDoMtx_stack_c::YrotM(mStagger.getAngleZ(1)); mDoMtx_stack_c::ZrotM(-mStagger.getAngleX(1)); } else if (param_1 == 4) { mDoMtx_stack_c::YrotM(mStagger.getAngleZ(0)); mDoMtx_stack_c::ZrotM(mStagger.getAngleX(0)); } } /* 80A751E4-80A75460 001384 027C+00 1/0 0/0 0/0 .text setParam__11daNpc_Moi_cFv */ void daNpc_Moi_c::setParam() { selectAction(); srchActors(); int uVar5 = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); s16 talk_distance = mpHIO->m.common.talk_distance; s16 talk_angle = mpHIO->m.common.talk_angle; s16 attention_distance = mpHIO->m.common.attention_distance; s16 attention_angle = mpHIO->m.common.attention_angle; if (mType == TYPE_2) { if (field_0x166d) { talk_distance = 1; talk_angle = 6; attention_distance = 1; attention_angle = 6; uVar5 = fopAc_AttnFlag_UNK_0x800000 | fopAc_AttnFlag_SPEAK_e; } else { talk_distance = 6; talk_angle = 6; attention_distance = 19; attention_angle = 6; uVar5 = fopAc_AttnFlag_LOCK_e; } } else if (mType == TYPE_1) { talk_distance = 5; attention_distance = 7; } if (daPy_getPlayerActorClass()->checkHorseRide()) { if (talk_distance < 7) { talk_distance = 7; } if (attention_distance < 9) { attention_distance = 9; } } if (mType == TYPE_2) { attention_info.distances[fopAc_attn_LOCK_e] = 0x35; attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = 0; fopAcM_OffStatus(this, 0x100); } else { attention_info.distances[fopAc_attn_LOCK_e] = daNpcT_getDistTableIdx(attention_distance, attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = uVar5; } scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); mCcStts.SetWeight(mpHIO->m.common.weight); mCylH = mpHIO->m.common.height; mWallR = mpHIO->m.common.width; mAttnFovY = mpHIO->m.common.fov; if (mType == TYPE_2) { mAttnFovY = 135.0f; } mAcchCir.SetWallR(mWallR); mAcchCir.SetWallH(mpHIO->m.common.knee_length); mRealShadowSize = mpHIO->m.common.real_shadow_size; if (mType == TYPE_1) { mRealShadowSize = 600.0f; } else if (mType == TYPE_2) { mRealShadowSize = 600.0f; if (field_0x166d) { mRealShadowSize = 800.0f; } } gravity = mpHIO->m.common.gravity; mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; mMorfFrames = mpHIO->m.common.morf_frame; if (mType == TYPE_3) { mAcch.SetGrndNone(); mAcch.SetWallNone(); gravity = 0.0f; } setInSw(); pullOutSw(); setSwAT(); } /* 80A75460-80A75514 001600 00B4+00 1/0 0/0 0/0 .text checkChangeEvt__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::checkChangeEvt() { if (!chkAction(&daNpc_Moi_c::talk)) { mPreItemNo = 0; if (dComIfGp_event_chkTalkXY()) { if (dComIfGp_evmng_ChkPresentEnd()) { mEvtNo = 2; evtChange(); } return TRUE; } } return FALSE; } /* 80A75514-80A755C8 0016B4 00B4+00 2/0 0/0 0/0 .text setAfterTalkMotion__11daNpc_Moi_cFv */ void daNpc_Moi_c::setAfterTalkMotion() { int iVar2 = MOT_UNK_21; switch (mFaceMotionSeqMngr.getNo()) { case MOT_UNK_1: iVar2 = MOT_UNK_18; break; case MOT_UNK_2: iVar2 = MOT_UNK_19; break; case MOT_UNK_3: iVar2 = MOT_UNK_16; break; case MOT_UNK_4: iVar2 = MOT_UNK_14; break; case MOT_UNK_5: iVar2 = MOT_UNK_15; break; case MOT_UNK_9: return; } mFaceMotionSeqMngr.setNo(iVar2, -1.0f, 0, 0); } /* 80A755C8-80A75664 001768 009C+00 1/1 0/0 0/0 .text srchActors__11daNpc_Moi_cFv */ void daNpc_Moi_c::srchActors() { switch (mType) { case TYPE_1: break; case TYPE_2: if (mActorMngr[2].getActorP() == NULL) { mActorMngr[2].entry(getNearestActorP(0x15a)); } break; case TYPE_5: if (mActorMngr[3].getActorP() == NULL) { mActorMngr[3].entry(getNearestActorP(0x26e)); } } } /* 80A75664-80A75704 001804 00A0+00 1/0 0/0 0/0 .text evtTalk__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::evtTalk() { if (chkAction(&daNpc_Moi_c::talk)) { (this->*field_0x161c)(NULL); } else { setAction(&daNpc_Moi_c::talk); } return TRUE; } /* 80A75704-80A757CC 0018A4 00C8+00 1/0 0/0 0/0 .text evtCutProc__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::evtCutProc() { int staffId = dComIfGp_getEventManager().getMyStaffId("Moi", this, -1); if (staffId != -1) { mStaffId = staffId; int actIdx = dComIfGp_getEventManager().getMyActIdx(mStaffId, (char**)mCutNameList, 5, 0, 0); if ((this->*(mCutList[actIdx]))(mStaffId) != 0) { dComIfGp_getEventManager().cutEnd(mStaffId); } return true; } return false; } /* 80A757CC-80A759F4 00196C 0228+00 1/0 0/0 0/0 .text action__11daNpc_Moi_cFv */ void daNpc_Moi_c::action() { fopAc_ac_c* hitActor = NULL; int i; for (i = 0; i < 4; i++) { hitActor = hitChk(&mCyl[i], 0xffffffff); if (hitActor) { break; } } if (hitActor) { if (mType == TYPE_2) { if (field_0x166d == 0 && field_0x166c == 0) { setSSlash(field_0x1669 == 0); } } else { cCcD_ObjHitInf* hit_obj = mCyl[i].GetTgHitObj(); if (hit_obj->ChkAtType(AT_TYPE_THROW_OBJ)) { mStagger.setParam(this, hitActor, mCurAngle.y); setDamage(0, 21, 0); mDamageTimerStart = 0; mJntAnm.lookNone(1); } } } if (mStagger.checkRebirth()) { mStagger.initialize(); mMode = MODE_INIT; } if (field_0x1610 != NULL) { if (field_0x161c == field_0x1610) { (this->*field_0x161c)(NULL); } else { setAction(field_0x1610); } } if (mSph.ChkAtHit() && fopAcM_GetProfName(mSph.GetAtHitAc()) == PROC_ALINK) { /* dSv_event_tmp_flag_c::T_0047 - Ordon Village - Right after wrestling with Bo (Used to connect with conversation after wearing clothes) */ daNpcF_onTmpBit(0x47); } } /* 80A759F4-80A75AB8 001B94 00C4+00 1/0 0/0 0/0 .text beforeMove__11daNpc_Moi_cFv */ void daNpc_Moi_c::beforeMove() { fopAcM_OffStatus(this, 0x8000000); if (checkHide()) { fopAcM_OnStatus(this, 0x8000000); } if (checkHide() || mNoDraw != 0) { attention_info.flags = 0; } } /* 80A7BFF4-80A7BFF8 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */ NPC_MOI_HIO_CLASS l_HIO; /* 80A75AB8-80A75E68 001C58 03B0+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_Moi_cFv */ void daNpc_Moi_c::setAttnPos() { cXyz acStack_3c(-30.0f, 10.0f, 0.0f); mStagger.calc(0); f32 dVar6 = cM_s2rad(mCurAngle.y - field_0xd7e.y); if (mType == 3) { mJntAnm.setParam(this, mpMorf[0]->getModel(), &acStack_3c, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, mpHIO->m.common.neck_rotation_ratio, dVar6, NULL); } else { mJntAnm.setParam(this, mpMorf[0]->getModel(), &acStack_3c, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), mpHIO->m.common.body_angleX_min, mpHIO->m.common.body_angleX_max, mpHIO->m.common.body_angleY_min, mpHIO->m.common.body_angleY_max, mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, mpHIO->m.common.neck_rotation_ratio, dVar6, NULL); } mJntAnm.calcJntRad(0.2f, 1.0f, dVar6); setMtx(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(getHeadJointNo())); mDoMtx_stack_c::multVec(&acStack_3c, &eyePos); mJntAnm.setEyeAngleX(eyePos, 1.0f, 0); mJntAnm.setEyeAngleY(eyePos, mCurAngle.y + field_0xd8a.y, 1, 1.0f, 0); acStack_3c.set(0.0f, 0.0f, 0.0f); acStack_3c.y = mpHIO->m.common.attention_offset; if (mType == TYPE_3) { acStack_3c.set(0.0f, 140.0f, -60.0f); } else if (field_0x166d != 0) { acStack_3c.set(0.0f, 40.0f, 230.0f); } mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&acStack_3c, &acStack_3c); attention_info.position = current.pos + acStack_3c; if (field_0x166d != 0) { ep_class* actor = (ep_class*)mActorMngr[0].getActorP(); if (actor) { actor->field_0x5a4 = 10; } } else { torch(); } setFootPos(); } /* 80A75E68-80A760E0 002008 0278+00 1/0 0/0 0/0 .text setCollision__11daNpc_Moi_cFv */ void daNpc_Moi_c::setCollision() { cXyz cStack_50; cXyz cStack_5c; cXyz cStack_68; if (mHide == 0) { u32 tgType = 0xd8fbfdff; u32 tgSPrm = 0x1f; if (mTwilight != 0) { tgType = 0; tgSPrm = 0; } else { if (mStagger.checkStagger()) { tgType = 0; tgSPrm = 0; } } mCyl[0].SetCoSPrm(0x79); mCyl[0].SetTgType(tgType); mCyl[0].SetTgSPrm(tgSPrm); mCyl[0].OnTgNoHitMark(); cStack_50.set(0.0f, 0.0f, 0.0f); f32 cylHeight = mCylH; f32 cylRadius = mWallR; if (&daNpc_Moi_c::rest == field_0x1610) { cStack_50.set(0.0f, 0.0f, 60.0f); cylHeight = 80.0f; cylRadius = 50.0f; } mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&cStack_50, &cStack_50); cStack_50 += current.pos; mCyl[0].SetH(cylHeight); mCyl[0].SetR(cylRadius); mCyl[0].SetC(cStack_50); dComIfG_Ccsp()->Set(&mCyl[0]); } if (field_0x166a) { cStack_5c.set(0.0f, 0.0f, -70.0f); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(17)); mDoMtx_stack_c::multVec(&cStack_5c, &cStack_68); mSph.SetAtType(0x400); mSph.SetAtSPrm(13); mSph.SetAtAtp(1); mSph.SetAtSe(dCcD_SE_METAL); mSph.SetTgSPrm(0); mSph.SetCoSPrm(0); mSph.SetC(cStack_68); mSph.SetR(60.0f); dComIfG_Ccsp()->Set(&mSph); } for (int i = 0; i < 4; i++) { mCyl[i].ClrCoHit(); mCyl[i].ClrTgHit(); } mCyl2.ClrCoHit(); } /* 80A760E0-80A760E8 002280 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_Moi_cFv */ int daNpc_Moi_c::drawDbgInfo() { return 0; } /* 80A760E8-80A762A8 002288 01C0+00 1/0 0/0 0/0 .text drawOtherMdl__11daNpc_Moi_cFv */ void daNpc_Moi_c::drawOtherMdl() { static int const jointNo[6] = {2, 17, 23, 24, 25, 12}; Mtx mtx; J3DModel* model = mpMorf[0]->getModel(); for (int i = 0; i < 6; i++) { if ((field_0x166f == 0 || (u32)i > 1) && mpModel[i] != NULL) { if ((i == 2 && field_0x1666 != 0) || (i == 3 && field_0x1666 != 0) || (i == 4 && field_0x1666 != 0) || (i == 1 && field_0x166b != 0) || (i == 5 && field_0x1668 != 0) || i == 0) { g_env_light.setLightTevColorType_MAJI(mpModel[i], &tevStr); mDoMtx_stack_c::copy(model->getAnmMtx(jointNo[i])); cMtx_copy(mDoMtx_stack_c::get(), mtx); mpModel[i]->setBaseTRMtx(mtx); if (i == 0 && field_0x166b != 0) { mpModel[i]->getModelData()->getMaterialNodePointer(0)->getShape()->hide(); mDoExt_modelUpdateDL(mpModel[i]); mpModel[i]->getModelData()->getMaterialNodePointer(0)->getShape()->show(); } else { mDoExt_modelUpdateDL(mpModel[i]); } dComIfGd_addRealShadow(mShadowKey, mpModel[i]); } } } } /* 80A762A8-80A762CC 002448 0024+00 1/0 0/0 0/0 .text afterSetMotionAnm__11daNpc_Moi_cFiifi */ bool daNpc_Moi_c::afterSetMotionAnm(int param_1, int param_2, f32 param_3, int param_4) { switch (param_1) { case 0x22: mpMorf[0]->setPlaySpeed(2.0f); } return true; } /* 80A762CC-80A7633C 00246C 0070+00 1/0 0/0 0/0 .text changeAnm__11daNpc_Moi_cFPiPi */ void daNpc_Moi_c::changeAnm(int* param_1, int* param_2) { if (mType == TYPE_1) { switch (*param_1) { case 19: *param_1 = 6; *param_2 = 5; break; case 20: *param_1 = 7; *param_2 = 5; break; case 21: *param_1 = 8; *param_2 = 5; } } } /* 80A7633C-80A76384 0024DC 0048+00 1/0 0/0 0/0 .text changeBck__11daNpc_Moi_cFPiPi */ void daNpc_Moi_c::changeBck(int* param_1, int* param_2) { if (mType == TYPE_1) { switch (*param_1) { case 8: *param_1 = 4; *param_2 = 5; break; case 13: *param_1 = 5; *param_2 = 5; } } } /* 80A76384-80A7643C 002524 00B8+00 1/0 0/0 0/0 .text changeBtp__11daNpc_Moi_cFPiPi */ void daNpc_Moi_c::changeBtp(int* param_1, int* param_2) { if (mType == TYPE_1) { switch (*param_1) { case 40: *param_1 = 11; *param_2 = 5; break; case 45: *param_1 = 12; *param_2 = 5; } } else if (chkMoiN() && *param_1 == 19 && *param_2 == 1) { *param_1 = 45; *param_2 = 3; } } /* 80A7643C-80A764B0 0025DC 0074+00 1/0 0/0 0/0 .text changeBtk__11daNpc_Moi_cFPiPi */ void daNpc_Moi_c::changeBtk(int* param_1, int* param_2) { if (mType != TYPE_1 && chkMoiN() && *param_1 == 16 && *param_2 == 3) { *param_1 = 36; *param_2 = 3; } } /* 80A764B0-80A765CC 002650 011C+00 1/1 0/0 0/0 .text selectAction__11daNpc_Moi_cFv */ int daNpc_Moi_c::selectAction() { field_0x1610 = NULL; switch (mType) { case TYPE_2: if (daNpcT_chkEvtBit(0xcd)) { field_0x1610 = &daNpc_Moi_c::walkOnEggshell; } else { field_0x1610 = &daNpc_Moi_c::wait; } break; case TYPE_3: field_0x1610 = &daNpc_Moi_c::rest; break; case TYPE_4: field_0x1610 = &daNpc_Moi_c::walk; break; default: field_0x1610 = &daNpc_Moi_c::wait; } return 1; } /* 80A765CC-80A765F8 00276C 002C+00 2/2 0/0 0/0 .text * chkAction__11daNpc_Moi_cFM11daNpc_Moi_cFPCvPvPv_i */ BOOL daNpc_Moi_c::chkAction(actionFunc param_1) { return field_0x161c == param_1; } /* 80A765F8-80A766A0 002798 00A8+00 2/2 0/0 0/0 .text * setAction__11daNpc_Moi_cFM11daNpc_Moi_cFPCvPvPv_i */ int daNpc_Moi_c::setAction(int (daNpc_Moi_c::*param_0)(void*)) { mMode = MODE_EXIT; if (field_0x161c != NULL) { (this->*field_0x161c)(NULL); } mMode = MODE_ENTER; field_0x161c = param_0; if (field_0x161c != NULL) { (this->*field_0x161c)(NULL); } return 1; } /* 80A766A0-80A766DC 002840 003C+00 1/1 0/0 0/0 .text chkPlayerGetWoodShield__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::chkPlayerGetWoodShield() { return (u8)(dComIfGs_isItemFirstBit(fpcNm_ITEM_WOOD_SHIELD) ? 1 : 0); } /* 80A766DC-80A76888 00287C 01AC+00 2/2 0/0 0/0 .text setSSlash__11daNpc_Moi_cFi */ void daNpc_Moi_c::setSSlash(int param_1) { mMotionSeqMngr.setNo(MOT_UNK_43, 0.0f, 1, 0); /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */ if (dComIfGs_isTmpBit(0x1308)) { mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_GUARD_SWING), -1); } else { mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_WOUND_SWING), -1); } field_0x1664 = fopAcM_searchPlayerAngleY(this); s16 iVar3 = cM_deg2s(mpHIO->m.field_0xb8); daPy_getPlayerActorClass()->setThrowDamage(fopAcM_searchPlayerAngleY(this), mpHIO->m.field_0xb4 * cM_scos(iVar3), mpHIO->m.field_0xb4 * cM_ssin(iVar3), 1, 0, 0); if (param_1 != 0) { field_0x1660 = 1; field_0x165c = 202; } field_0x1658 = 0; field_0x166b = 1; field_0x166c = 1; /* dSv_event_tmp_flag_c::T_0047 - Ordon Village - Right after wrestling with Bo (Used to connect with conversation after wearing clothes) */ daNpcT_onTmpBit(0x47); } /* 80A76888-80A768FC 002A28 0074+00 1/1 0/0 0/0 .text chkPullOutSw__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::chkPullOutSw() { if (mType == TYPE_2) { J3DAnmTransform* anmTransform = getTrnsfrmAnmP( l_resNameList[l_motionAnmData[25].mBckArcIdx], l_motionAnmData[25].mBckFileIdx); return anmTransform == mpMorf[0]->getAnm(); } return FALSE; } /* 80A768FC-80A76954 002A9C 0058+00 1/1 0/0 0/0 .text pullOutSw__11daNpc_Moi_cFv */ void daNpc_Moi_c::pullOutSw() { if (chkPullOutSw() && mpMorf[0]->checkFrame(4.0f)) { field_0x166b = 1; } } /* 80A76954-80A769C8 002AF4 0074+00 1/1 0/0 0/0 .text chkSetInSw__11daNpc_Moi_cFv */ BOOL daNpc_Moi_c::chkSetInSw() { if (mType == TYPE_2) { J3DAnmTransform* anmTransform = getTrnsfrmAnmP( l_resNameList[l_motionAnmData[26].mBckArcIdx], l_motionAnmData[26].mBckFileIdx); return anmTransform == mpMorf[0]->getAnm(); } return FALSE; } /* 80A769C8-80A76A20 002B68 0058+00 1/1 0/0 0/0 .text setInSw__11daNpc_Moi_cFv */ void daNpc_Moi_c::setInSw() { if (chkSetInSw() && mpMorf[0]->checkFrame(6.0f)) { field_0x166b = 0; } } /* 80A76A20-80A76AFC 002BC0 00DC+00 1/1 0/0 0/0 .text setSwAT__11daNpc_Moi_cFv */ void daNpc_Moi_c::setSwAT() { field_0x166a = 0; if (mType == TYPE_2) { J3DAnmTransform* anmTransform = getTrnsfrmAnmP( l_resNameList[l_motionAnmData[24].mBckArcIdx], l_motionAnmData[24].mBckFileIdx); if (anmTransform == mpMorf[0]->getAnm()) { if (5.0f <= mpMorf[0]->getFrame() && mpMorf[0]->getFrame() <= 7.0f) { field_0x166a = 1; } if (20.0f <= mpMorf[0]->getFrame() && mpMorf[0]->getFrame() <= 22.0f) { field_0x166a = 1; } } } } /* 80A76AFC-80A76C7C 002C9C 0180+00 1/1 0/0 0/0 .text torch__11daNpc_Moi_cFv */ void daNpc_Moi_c::torch() { fopAc_ac_c* actor = NULL; static cXyz lightOffset(10.0f, 0.0f, 40.0f); if (mpModel[5] && field_0x1668 != 0) { actor = mActorMngr[0].getActorP(); mDoMtx_stack_c::copy(mpMorf[0]->getModel()->getAnmMtx(12)); mDoMtx_stack_c::multVec(&lightOffset, &field_0x1628); if (actor == NULL && field_0x166f == 0) { if (field_0x15c0 == 0xFFFFFFFF) { field_0x15c0 = fopAcM_createChild(PROC_EP, fopAcM_GetID(this), -247, &field_0x1628, fopAcM_GetRoomNo(this), &mCurAngle, NULL, -1, NULL); } if (fopAcM_SearchByID(field_0x15c0, &actor) && actor != NULL) { mActorMngr[0].entry(actor); dKy_plight_cut(&((ep_class*)actor)->mLightInf); } } } } /* 80A76C7C-80A76E10 002E1C 0194+00 1/1 0/0 0/0 .text injuryCheck__11daNpc_Moi_cFv */ int daNpc_Moi_c::injuryCheck() { BOOL bVar1 = TRUE; int timer = field_0x1658; if (mMotionSeqMngr.getNo() == MOT_UNK_37 || mMotionSeqMngr.getNo() == MOT_UNK_38) { if (mMotionSeqMngr.checkEndSequence()) { cLib_calcTimer(&timer); } else { bVar1 = false; } } if (bVar1 && timer != 0) { if (field_0x1667 != 0) { if (timer & 1 != 0) { mMotionSeqMngr.setNo(MOT_UNK_38, -1.0f, 0, 0); } else { mMotionSeqMngr.setNo(MOT_UNK_37, -1.0f, 0, 0); } } else { f32 fVar3 = cM_rnd(); fVar3 -= 0.5f; if (mMotionSeqMngr.getNo() == MOT_UNK_38) { fVar3 += 0.25f; } if (mMotionSeqMngr.getNo() == MOT_UNK_37) { fVar3 -= 0.25f; } if (0.0f < fVar3) { mMotionSeqMngr.setNo(MOT_UNK_38, -1.0f, 0, 0); } else { mMotionSeqMngr.setNo(MOT_UNK_37, -1.0f, 0, 0); } } } return timer; } /* 80A76E10-80A76F3C 002FB0 012C+00 1/1 0/0 0/0 .text injuryTurn__11daNpc_Moi_cF4cXyz */ int daNpc_Moi_c::injuryTurn(cXyz param_1) { BOOL bVar1 = FALSE; switch (field_0x1654) { case 0: s16 iVar1 = cLib_targetAngleY(¤t.pos, ¶m_1) - mCurAngle.y; if (abs(iVar1) < 0x2000) { bVar1 = TRUE; } else { mMotionSeqMngr.setNo(MOT_UNK_40, 4.0f, 1, 0); field_0x1664 = mCurAngle.y + 0x4000; mTurnAmount = 0; mStartAngle = current.angle.y; current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; field_0x1654 = 1; } break; case 1: if (turn(field_0x1664, 40, 1)) { current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; field_0xd7e.y = mCurAngle.y; field_0x1654 = 0; } else { current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; } break; default: bVar1 = TRUE; } return bVar1; } /* 80A76F3C-80A770FC 0030DC 01C0+00 1/1 0/0 0/0 .text injuryWalk__11daNpc_Moi_cFv */ int daNpc_Moi_c::injuryWalk() { /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */ dComIfGs_offTmpBit(0x1308); cXyz cStack_40; int iVar2 = mPath.getDstPosH(current.pos, &cStack_40, mPath.getNumPnts(), 4); int iVar4 = iVar2 != 0 || field_0x164c == 0; if (field_0x1667) { if (injuryTurn(cStack_40)) { field_0x1667 = 0; mMode = MODE_INIT; } } else { calcSpeedAndAngle(cStack_40, iVar4, 6, 0x800); if (iVar4 != 0 && cM3d_IsZero(speedF) && (field_0x1658 = 2, iVar2 != 0)) { field_0x1667 = 1; field_0x1654 = 0; if (mPath.chkReverse()) { mPath.setIdx(0); } else { mPath.setIdx(mPath.getNumPnts() - 1); } mPath.reverse(); mPath.setNextIdx(mPath.getNumPnts()); } if ((int)mPath.getIdx() > 1 && (int)mPath.getIdx() < mPath.getNumPnts() - 2) { cLib_calcTimer(&field_0x164c); } } return 1; } /* 80A770FC-80A7772C 00329C 0630+00 2/2 0/0 0/0 .text poise__11daNpc_Moi_cFv */ int daNpc_Moi_c::poise() { int iVar13 = daNpc_Moi_Param_c::m.field_0x98; if (field_0x1669 != 0) { if (field_0x166c != 0) { if (field_0x1664 == mCurAngle.y) { if (mMotionSeqMngr.getNo() == MOT_UNK_43) { if (mMotionSeqMngr.checkEndSequence()) { mMotionSeqMngr.setNo(MOT_UNK_10, -1.0f, 0, 0); field_0x166c = 0; } } else if (mMotionSeqMngr.getNo() == MOT_UNK_10) { mMotionSeqMngr.setNo(MOT_UNK_10, -1.0f, 0, 0); field_0x166c = 0; } } else { step(field_0x1664, -1, -1, 10, 0); } } else { if (mMotionSeqMngr.getNo() == MOT_UNK_43) { if (mMotionSeqMngr.checkEndSequence()) { mMotionSeqMngr.setNo(MOT_UNK_10, -1.0f, 0, 0); field_0x166c = 0; } } else { if (daPy_getPlayerActorClass()->current.pos.absXZ(current.pos) < 150.0f && !daPy_getPlayerActorClass()->checkPlayerFly()) { setSSlash(0); } else if (field_0x166e) { if (step(field_0x1664, -1, -1, 10, 0)) { mMotionSeqMngr.setNo(MOT_UNK_10, -1.0f, 0, 0); field_0x166e = 0; } } else if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - mCurAngle.y)) < cM_deg2s(60.0)) { cXyz cStack_74 = getAttnPos(daPy_getPlayerActorClass()); int speak_dist = attention_info.distances[fopAc_attn_SPEAK_e]; f32 fVar2 = dComIfGp_getAttention()->getDistTable(speak_dist).mDistMax; f32 fVar3 = dComIfGp_getAttention()->getDistTable(speak_dist).mLowerY * -1.0f; f32 fVar4 = dComIfGp_getAttention()->getDistTable(speak_dist).mUpperY * -1.0f; if (chkPointInArea(cStack_74, attention_info.position, fVar2, fVar3, fVar4, 0)) { if (field_0x1648 == 0) { field_0x1648 = cLib_getRndValue(iVar13 * 0.5f, iVar13 * 1.5f); } else if (!cLib_calcTimer(&field_0x1648)) { mMotionSeqMngr.setNo(MOT_UNK_43, 0.0f, 1, 0); /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding * Uli, Ordon village night */ if (dComIfGs_isTmpBit(0x1308)) { mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_GUARD_SWING), -1); } else { mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_WOUND_SWING), -1); } } } else { field_0x1648 = 0; } } else { field_0x1664 = fopAcM_searchPlayerAngleY(this); if (field_0x166b != 0) { mMotionSeqMngr.setNo(MOT_UNK_10, -1.0f, 0, 0); } else { mMotionSeqMngr.setNo(MOT_UNK_11, -1.0f, 0, 0); } field_0x1648 = 0; field_0x166e = 1; } } } } else { if (field_0x166c == 0) { field_0x165c = 202; } speedF = 0.0f; speed.setall(0.0f); field_0x166e = 0; field_0x1669 = 1; } if (field_0x1660 == 0) { if (field_0x165c != 0) { attention_info.flags = fopAc_AttnFlag_TALK_e; mSpeakEvent = true; } } else { field_0x1660 -= 1; } return 1; } /* 80A77740-80A77BA0 0038E0 0460+00 1/0 0/0 0/0 .text cutDeliveredSw__11daNpc_Moi_cFi */ int daNpc_Moi_c::cutDeliveredSw(int param_1) { int rv = 0; int iVar6 = -1; int uVar5 = 0; BOOL bVar1 = FALSE; int* piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "prm"); if (piVar1) { iVar6 = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "timer"); if (piVar1) { uVar5 = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(param_1)) { switch (iVar6) { case 0: mFaceMotionSeqMngr.setNo(MOT_UNK_21, 0.0f, 0, 0); mMotionSeqMngr.setNo(45, 0.0f, 1, 0); mEventTimer = uVar5; break; case 1: mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(45, -1.0f, 0, 0); mEventTimer = uVar5; break; case 2: mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_0, -1.0f, 0, 0); mEventTimer = uVar5; break; case 3: initTalk(mFlowNodeNo, NULL); break; case 4: mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_0, -1.0f, 0, 0); } } switch (iVar6) { case 0: case 1: mJntAnm.lookNone(0); if (cLib_calcTimer(&mEventTimer) == 0) { if (iVar6 == 1) { speedF = 0.0f; speed.setall(0.0f); rv = 1; } bVar1 = TRUE; } cXyz cStack_3c(0.0f, 0.0f, 500.0f); mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&cStack_3c, &cStack_3c); cStack_3c = current.pos + cStack_3c; if (2500.0f < current.pos.abs2(cStack_3c) && !bVar1) { cLib_chaseF(&speedF, 4.0f, 0.55f); } else { speedF = 0.0f; } if (bVar1 && cM3d_IsZero(speedF)) { speedF = 0.0f; speed.setall(0.0f); rv = 1; } break; case 2: mJntAnm.lookPlayer(0); if (cLib_calcTimer(&mEventTimer) == 0) { rv = 1; } break; case 3: if (talkProc(NULL, 0, NULL, 0) && mFlow.checkEndFlow()) { rv = 1; } break; case 4: rv = 1; } return rv; } /* 80A77BA0-80A7838C 003D40 07EC+00 2/0 0/0 0/0 .text cutAppearanceMoi__11daNpc_Moi_cFi */ int daNpc_Moi_c::cutAppearanceMoi(int param_1) { s16 sVar5; cXyz cStack_30; int rv = 0; int iVar8 = -1; int local_78 = 0; int iVar7 = 0; int* piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "prm"); if (piVar1) { iVar8 = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "timer"); if (piVar1) { local_78 = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "msgNo"); if (piVar1) { iVar7 = *piVar1; } fopAc_ac_c* local_68[2] = {mActorMngr[3].getActorP(), (fopAc_ac_c*)this}; dComIfGp_setMesgCameraInfoActor(local_68[0], local_68[1], 0, 0, 0, 0, 0, 0, 0, 0); if (dComIfGp_getEventManager().getIsAddvance(param_1)) { switch (iVar8) { case 0: break; case 1: initTalk(120, &local_68[0]); home.angle.y = mPlayerAngle; setAngle(home.angle.y); break; case 2: mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_45, -1.0f, 0, 0); dComIfGp_getEvent().setPt2(this); mEventTimer = local_78; break; case 3: cStack_30.set(0.0f, 0.0f, 200.0f); mDoMtx_stack_c::YrotS(home.angle.y); mDoMtx_stack_c::multVec(&cStack_30, &cStack_30); cStack_30 = daPy_getPlayerActorClass()->current.pos - cStack_30; setPos(cStack_30); break; case 4: mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_0, -1.0f, 0, 0); initTalk(120, &local_68[0]); break; case 6: daNpcT_onEvtBit(0xb8); } } int local_70[2] = {-1, -1}; switch (iVar8) { case 0: rv = 1; break; case 1: mJntAnm.lookPlayer(0); if (talkProc(NULL, 0, &local_68[0], 0) && mFlow.checkEndFlow()) { rv = 1; } break; case 2: case 3: mJntAnm.lookPlayer(0); cStack_30.set(0.0f, 0.0f, 100.0f); mDoMtx_stack_c::YrotS(home.angle.y); mDoMtx_stack_c::multVec(&cStack_30, &cStack_30); cStack_30 = daPy_getPlayerActorClass()->current.pos - cStack_30; calcSpeedAndAngle(cStack_30, current.pos.absXZ(cStack_30) < 50.0f, 4, 0x800); if (iVar8 == 2) { if (mEventTimer != 0 && !cLib_calcTimer(&mEventTimer)) { cStack_30 = daPy_getPlayerActorClass()->current.pos; sVar5 = fopAcM_searchActorAngleY(daPy_getPlayerActorClass(), this); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&cStack_30, sVar5, 0); } if (mEventTimer == 0) { rv = 1; } } else if (current.pos.absXZ(cStack_30) < 50.0f && cM3d_IsZero(speedF)) { rv = 1; } break; case 4: case 5: mJntAnm.lookPlayer(0); local_70[0] = iVar7; if (talkProc(local_70, 0, &local_68[0], 0)) { if (!iVar7) { if (mFlow.checkEndFlow()) { rv = 1; } } else { rv = 1; } } break; case 6: dStage_changeScene(1, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); } return rv; } /* 80A7838C-80A785FC 00452C 0270+00 1/0 0/0 0/0 .text cutConversationWithUri__11daNpc_Moi_cFi */ int daNpc_Moi_c::cutConversationWithUri(int param_1) { cXyz cStack_34; int rv = 0; int iVar6 = -1; int* piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "prm"); if (piVar1) { iVar6 = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(param_1)) { switch (iVar6) { case 0: break; case 1: cStack_34 = mPath.getPntPos(0); setPos(cStack_34); mPath.setIdx(0); mPath.setNextIdx(mPath.getNumPnts()); cStack_34 = mPath.getPntPos(mPath.getIdx()); setAngle(cLib_targetAngleY(¤t.pos, &cStack_34)); break; case 2: break; } } switch (iVar6) { case 0: mJntAnm.lookNone(0); rv = 1; break; case 1: rv = 1; break; case 2: daNpc_Uri_c* uri_p = (daNpc_Uri_c*)mActorMngr[2].getActorP(); if (uri_p) { mJntAnm.lookActor(uri_p, 0.0f, 0); } rv = 1; } return rv; } /* 80A785FC-80A789D8 00479C 03DC+00 1/0 0/0 0/0 .text cutFindWolf__11daNpc_Moi_cFi */ int daNpc_Moi_c::cutFindWolf(int param_1) { cXyz cStack_30; int rv = 0; int iVar9 = -1; int uVar8 = 0; int* piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "prm"); if (piVar1) { iVar9 = *piVar1; } piVar1 = dComIfGp_evmng_getMyIntegerP(param_1, "timer"); if (piVar1) { uVar8 = *piVar1; } if (dComIfGp_getEventManager().getIsAddvance(param_1)) { switch (iVar9) { case 0: mMotionSeqMngr.setNo(MOT_UNK_10, 0.0f, 0, 0); speedF = 0.0f; speed.setall(0.0f); break; case 1: mFaceMotionSeqMngr.setNo(MOT_UNK_8, 0.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_16, 0.0f, 0, 0); mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_KUTT), -1); field_0x166b = 1; cStack_30 = mPath.getPntPos(0); setPos(cStack_30); mPath.offReverse(); mPath.setIdx(0); mPath.setNextIdx(mPath.getNumPnts()); cStack_30 = mPath.getPntPos(mPath.getIdx()); field_0x1664 = fopAcM_searchPlayerAngleY(this); setAngle(field_0x1664); mPlayerActorMngr.entry(daPy_getPlayerActorClass()); mEventTimer = uVar8; break; case 2: mEventTimer = uVar8; break; } } switch (iVar9) { case 0: mJntAnm.lookNone(0); rv = 1; break; case 1: mJntAnm.lookPlayer(0); if (!cLib_calcTimer(&mEventTimer)) { field_0x1660 = 1; poise(); field_0x165c = 0; rv = 1; break; } break; case 2: mJntAnm.lookPlayer(0); field_0x1660 = 1; poise(); field_0x165c = 0; if (!cLib_calcTimer(&mEventTimer)) { rv = 1; } } return rv; } /* 80A789D8-80A78E0C 004B78 0434+00 2/0 0/0 0/0 .text wait__11daNpc_Moi_cFPv */ int daNpc_Moi_c::wait(void* param_1) { int iVar4 = mpHIO->m.field_0x98; switch (mMode) { case MODE_ENTER: case MODE_INIT: if (!mStagger.checkStagger()) { mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_0, -1.0f, 0, 0); field_0x1648 = cLib_getRndValue(iVar4 * 0.5f, iVar4 * 1.5f); mMode = MODE_RUN; } case MODE_RUN: if (mType == 5 && daNpcT_chkEvtBit(0xb8) && mHide) { fopAcM_delete(this); return 1; } else if (!mStagger.checkStagger()) { if (mPlayerActorMngr.getActorP() && !mTwilight) { mJntAnm.lookPlayer(0); if (!chkActorInSight(mPlayerActorMngr.getActorP(), mAttnFovY, mCurAngle.y)) { mJntAnm.lookNone(0); } if (!srchPlayerActor() && home.angle.y == mCurAngle.y) { mMode = MODE_INIT; } } else { mJntAnm.lookNone(0); if (home.angle.y != mCurAngle.y) { if (field_0xe34) { if (step(home.angle.y, 21, 44, 15, 0)) { mMode = MODE_INIT; } } else { setAngle(home.angle.y); mMode = MODE_INIT; } attention_info.flags = 0; } else { if (mType == 1) { if (field_0x1648) { if (!cLib_calcTimer(&field_0x1648)) { mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_47, -1.0f, 0, 0); } } else { if (mMotionSeqMngr.checkEndSequence() || srchPlayerActor()) { mMode = MODE_INIT; break; } if (mpMorf[0]->checkFrame(13.0f) || mpMorf[0]->checkFrame(29.0f)) { mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_SWING_S), -1); } else if (mpMorf[0]->checkFrame(35.0f)) { mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_SWING_L), -1); } } } if (!mTwilight) { srchPlayerActor(); } } } mJntAnm.getMode(); } break; case MODE_EXIT: break; } return 1; } /* 80A78E0C-80A78FF4 004FAC 01E8+00 1/0 0/0 0/0 .text walk__11daNpc_Moi_cFPv */ int daNpc_Moi_c::walk(void* param_1) { cXyz cStack_1c; switch (mMode) { case MODE_ENTER: case MODE_INIT: if (!mStagger.checkStagger()) { mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_45, -1.0f, 0, 0); mMode = MODE_RUN; } case MODE_RUN: if (mType == TYPE_4 && getBitSW() != 0xFF) { if (dComIfGs_isSwitch(getBitSW(), fopAcM_GetRoomNo(this))) { fopAcM_delete(this); return 1; } mEvtNo = 3; field_0xe33 = 1; } if (!mStagger.checkStagger()) { mJntAnm.lookNone(0); cStack_1c.set(0.0f, 0.0f, 500.0f); mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&cStack_1c, &cStack_1c); cStack_1c = current.pos + cStack_1c; if (2500.0f < current.pos.abs2(cStack_1c)) { cLib_chaseF(&speedF, 4.0f, 0.55f); } mJntAnm.getMode(); } break; case MODE_EXIT: break; } return 1; } /* 80A78FF4-80A794C0 005194 04CC+00 1/0 0/0 0/0 .text walkOnEggshell__11daNpc_Moi_cFPv */ int daNpc_Moi_c::walkOnEggshell(void* param_1) { int sVar1 = mpHIO->m.field_0x9a; switch (mMode) { case MODE_ENTER: case MODE_INIT: if (!mStagger.checkStagger()) { if (field_0x1669) { mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); Motion motion_no; if (field_0x166b) { motion_no = MOT_UNK_10; } else { motion_no = MOT_UNK_11; } mMotionSeqMngr.setNo(motion_no, -1.0f, 0, 0); } else { mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_40, -1.0f, 0, 0); mJntAnm.lookNone(0); field_0x164c = cLib_getRndValue(sVar1 * 0.5f, sVar1 * 1.5f); } mMode = MODE_RUN; } case MODE_RUN: if (!mStagger.checkStagger()) { if (mPlayerActorMngr.getActorP()) { mJntAnm.lookPlayer(0); if (field_0x1658 != 0) { if (chkActorInSight(mPlayerActorMngr.getActorP(), mAttnFovY, mCurAngle.y)) { field_0x1658 = 0; } else { mJntAnm.lookNone(0); } } } if (field_0x166c) { mJntAnm.lookPlayer(0); poise(); } else { if (field_0x1658) { field_0x1658 = injuryCheck(); if (field_0x1658) { if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != 0) { f32 fVar = daPy_getPlayerActorClass()->attention_info.position.absXZ( attention_info.position); } } else { if (!field_0x1667) { mMode = MODE_INIT; mPlayerActorMngr.remove(); } } } else { if (mPlayerActorMngr.getActorP()) { mJntAnm.lookPlayer(0); poise(); } else { if (field_0x1669) { mMotionSeqMngr.setNo(MOT_UNK_39, -1.0f, 0, 0); field_0x1669 = 0; field_0x165c = 0; } else { if (mMotionSeqMngr.getNo() == MOT_UNK_39) { if (mMotionSeqMngr.checkEndSequence()) { mMode = MODE_INIT; } } else { injuryWalk(); } } } } } srchPlayerActor(); } break; case MODE_EXIT: break; } return 1; } /* 80A794C0-80A79608 005660 0148+00 2/0 0/0 0/0 .text rest__11daNpc_Moi_cFPv */ int daNpc_Moi_c::rest(void* param_1) { switch (mMode) { case MODE_ENTER: case MODE_INIT: if (!mStagger.checkStagger()) { mFaceMotionSeqMngr.setNo(MOT_UNK_9, -1.0f, 0, 0); mMotionSeqMngr.setNo(MOT_UNK_19, -1.0f, 0, 0); mMode = MODE_RUN; } case MODE_RUN: if (!mStagger.checkStagger()) { if (!dComIfGp_event_runCheck()) { mSound.startCreatureVoiceLevel(JAISoundID(Z2SE_MOI_V_SLEEP_UNASARE), -1); } mJntAnm.lookNone(0); } break; case MODE_EXIT: break; } return 1; } /* 80A79608-80A798D0 0057A8 02C8+00 3/0 0/0 0/0 .text talk__11daNpc_Moi_cFPv */ int daNpc_Moi_c::talk(void* param_1) { switch (mMode) { case MODE_ENTER: case MODE_INIT: if (!mStagger.checkStagger()) { if (field_0x165c) { if (field_0x1669) { mFaceMotionSeqMngr.setNo(MOT_UNK_21, -1.0f, 0, 0); Motion motion_no; if (field_0x166b) { motion_no = MOT_UNK_10; } else { motion_no = MOT_UNK_11; } mMotionSeqMngr.setNo(motion_no, -1.0f, 0, 0); } initTalk(field_0x165c, NULL); } else { initTalk(mFlowNodeNo, NULL); } mMode = MODE_RUN; } case MODE_RUN: if (!mStagger.checkStagger()) { if (mTwilight || mPlayerAngle == mCurAngle.y || mType == TYPE_3) { if (talkProc(NULL, 0, NULL, 0) && mFlow.checkEndFlow()) { if (field_0x1669) { field_0x166c = 0; field_0x165c = 0; } else { mPlayerActorMngr.entry(daPy_getPlayerActorClass()); } dComIfGp_event_reset(); mMode = MODE_EXIT; } mJntAnm.lookPlayer(0); if (mTwilight) { mJntAnm.lookNone(0); } } else { mJntAnm.lookPlayer(0); if (field_0x1669) { step(mPlayerAngle, -1, -1, 15, 0); } else { step(mPlayerAngle, 21, 44, 15, 0); } } } break; case MODE_EXIT: break; } return 0; } /* 80A798D0-80A798F0 005A70 0020+00 1/0 0/0 0/0 .text daNpc_Moi_Create__FPv */ static int daNpc_Moi_Create(void* i_this) { return static_cast(i_this)->create(); } /* 80A798F0-80A79910 005A90 0020+00 1/0 0/0 0/0 .text daNpc_Moi_Delete__FPv */ static int daNpc_Moi_Delete(void* i_this) { return static_cast(i_this)->Delete(); } /* 80A79910-80A79930 005AB0 0020+00 1/0 0/0 0/0 .text daNpc_Moi_Execute__FPv */ static int daNpc_Moi_Execute(void* i_this) { return static_cast(i_this)->Execute(); } /* 80A79930-80A79950 005AD0 0020+00 1/0 0/0 0/0 .text daNpc_Moi_Draw__FPv */ static int daNpc_Moi_Draw(void* i_this) { return static_cast(i_this)->Draw(); } /* 80A79950-80A79958 005AF0 0008+00 1/0 0/0 0/0 .text daNpc_Moi_IsDelete__FPv */ static int daNpc_Moi_IsDelete(void* i_this) { return 1; } /* 80A7BDCC-80A7BDEC -00001 0020+00 1/0 0/0 0/0 .data daNpc_Moi_MethodTable */ static actor_method_class daNpc_Moi_MethodTable = { (process_method_func)daNpc_Moi_Create, (process_method_func)daNpc_Moi_Delete, (process_method_func)daNpc_Moi_Execute, (process_method_func)daNpc_Moi_IsDelete, (process_method_func)daNpc_Moi_Draw, }; /* 80A7BDEC-80A7BE1C -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_MOI */ extern actor_process_profile_definition g_profile_NPC_MOI = { fpcLy_CURRENT_e, // mLayerID 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_NPC_MOI, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(daNpc_Moi_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 355, // mPriority &daNpc_Moi_MethodTable, // sub_method 0x00040107, // mStatus fopAc_NPC_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; AUDIO_INSTANCES