tp/src/d/actor/d_a_npc_moi.cpp

2078 lines
68 KiB
C++

/**
* @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(&current.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<J3DModelData*>(
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<daNpc_Moi_c*>(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<daNpc_Moi_c*>(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(&current.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(&current.pos, &param_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(&current.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<daNpc_Moi_c*>(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<daNpc_Moi_c*>(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<daNpc_Moi_c*>(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<daNpc_Moi_c*>(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