mirror of https://github.com/zeldaret/tp.git
2038 lines
65 KiB
C++
2038 lines
65 KiB
C++
/**
|
||
* @file d_a_npc_moir.cpp
|
||
*
|
||
*/
|
||
|
||
#include "d/dolzel_rel.h"
|
||
|
||
#include "d/actor/d_a_npc_moir.h"
|
||
#include "d/actor/d_a_ni.h"
|
||
#include "d/actor/d_a_npc_tk.h"
|
||
|
||
enum MoiR_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x06 */ BCK_MOIR_F_HOLD_S = 0x6,
|
||
/* 0x07 */ BCK_MOIR_F_TALK_A,
|
||
/* 0x08 */ BCK_MOIR_FH_HOLD_S,
|
||
/* 0x09 */ BCK_MOIR_FH_SERIOUS,
|
||
/* 0x0A */ BCK_MOIR_STEP,
|
||
/* 0x0B */ BCK_MOIR_TALK_A,
|
||
/* 0x0C */ BCK_MOIR_WAIT_A,
|
||
|
||
/* BMDR */
|
||
/* 0x0F */ BMDR_MOIR = 0xF,
|
||
/* 0x10 */ BMDR_HEADGEAR,
|
||
|
||
/* BTK */
|
||
/* 0x13 */ BTK_MOIR = 0x13,
|
||
|
||
/* BTP */
|
||
/* 0x16 */ BTP_MOIR = 0x16,
|
||
/* 0x17 */ BTP_MOIR_FH_SERIOUS,
|
||
};
|
||
|
||
enum MoiR1_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x3 */ BCK_MOIR_SIT = 0x3,
|
||
/* 0x4 */ BCK_MOIR_SIT_TALK,
|
||
/* 0x5 */ BCK_MOIR_TAKE_MET_SIT,
|
||
/* 0x6 */ BCK_MOIR_TAKEOFF_SIT,
|
||
/* 0x7 */ BCK_MOIR_TAKING_OFF_SIT,
|
||
/* 0x8 */ BCK_MOIR_TAKING_OFF_SIT_TALK,
|
||
};
|
||
|
||
enum MoiR2_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x04 */ BCK_MOIR_DRIVEAWAY = 0x4,
|
||
/* 0x05 */ BCK_MOIR_F_DRIVEAWAY,
|
||
/* 0x06 */ BCK_MOIR_F_FUE,
|
||
/* 0x07 */ BCK_MOIR_F_SURPRISED,
|
||
/* 0x08 */ BCK_MOIR_FH_DRIVEAWAY,
|
||
/* 0x09 */ BCK_MOIR_FUE,
|
||
/* 0x0A */ BCK_MOIR_LOOK_AROUND,
|
||
/* 0x0B */ BCK_MOIR_SQUAREUP,
|
||
/* 0x0C */ BCK_MOIR_SQUAREUP_STEP,
|
||
/* 0x0D */ BCK_MOIR_SURPRISED,
|
||
/* 0x0E */ BCK_MOIR_TAKAJO_NI,
|
||
/* 0x0F */ BCK_MOIR_TAKAJO_WAIT_NI,
|
||
/* 0x10 */ BCK_MOIR_TAKE_MET,
|
||
/* 0x11 */ BCK_MOIR_TAKEOFF,
|
||
/* 0x12 */ BCK_MOIR_TAKING_OFF,
|
||
/* 0x13 */ BCK_MOIR_TAKING_OFF_TALK,
|
||
/* 0x14 */ BCK_MOIR_WAIT_B,
|
||
/* 0x15 */ BCK_MOIR_WAIT_C,
|
||
|
||
/* EVT */
|
||
/* 0x18 */ EVT_EVENT_LIST = 0x18,
|
||
};
|
||
|
||
enum MoiR3_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x3 */ BCK_MOIR_F_TAKAJO_HI = 0x3,
|
||
/* 0x4 */ BCK_MOIR_FH_TAKAJO_HI,
|
||
/* 0x5 */ BCK_MOIR_RUN,
|
||
/* 0x6 */ BCK_MOIR_TAKAJO,
|
||
/* 0x7 */ BCK_MOIR_TAKAJO_HI,
|
||
/* 0x8 */ BCK_MOIR_TAKAJO_HI_WAIT,
|
||
/* 0x9 */ BCK_MOIR_TAKAJO_WAIT,
|
||
};
|
||
|
||
enum RES_Name {
|
||
/* 0x0 */ MoiR,
|
||
/* 0x1 */ MoiR1,
|
||
/* 0x2 */ MoiR2,
|
||
/* 0x3 */ MoiR3,
|
||
};
|
||
|
||
enum Material {
|
||
/* 0x0 */ MAT_SC_EYE,
|
||
/* 0x1 */ MAT_MOIR_EYEBALL_M,
|
||
/* 0x2 */ MAT_MOIR_FACE_M,
|
||
/* 0x3 */ MAT_MOIR_HEADGEAR_M,
|
||
/* 0x4 */ MAT_MOIR_M,
|
||
};
|
||
|
||
enum Joint {
|
||
/* 0x00 */ JNT_CENTER,
|
||
/* 0x01 */ JNT_BACKBONE1,
|
||
/* 0x02 */ JNT_BACKBONE2,
|
||
/* 0x03 */ JNT_NECK,
|
||
/* 0x04 */ JNT_HEAD,
|
||
/* 0x05 */ JNT_CHIN,
|
||
/* 0x06 */ JNT_MAYU_L,
|
||
/* 0x07 */ JNT_MAYU_R,
|
||
/* 0x08 */ JNT_MOUTH,
|
||
/* 0x09 */ JNT_SHOULDERL,
|
||
/* 0x0A */ JNT_ARML1,
|
||
/* 0x0B */ JNT_ARML2,
|
||
/* 0x0C */ JNT_HANDL,
|
||
/* 0x0D */ JNT_FINGERL,
|
||
/* 0x0E */ JNT_SHOULDERR,
|
||
/* 0x0F */ JNT_ARMR1,
|
||
/* 0x10 */ JNT_ARMR2,
|
||
/* 0x11 */ JNT_HANDR,
|
||
/* 0x12 */ JNT_FINGERR,
|
||
/* 0x13 */ JNT_WAIST,
|
||
/* 0x14 */ JNT_LEGL1,
|
||
/* 0x15 */ JNT_LEGL2,
|
||
/* 0x16 */ JNT_FOOTL,
|
||
/* 0x17 */ JNT_LEGR1,
|
||
/* 0x18 */ JNT_LEGR2,
|
||
/* 0x19 */ JNT_FOOTR
|
||
};
|
||
|
||
/* 80A838D0-80A83AA4 000020 01D4+00 3/4 0/0 0/0 .data l_bckGetParamList */
|
||
static daNpc_GetParam2 l_bckGetParamList[39] = {
|
||
{-1, J3DFrameCtrl::EMode_NONE, MoiR},
|
||
{BCK_MOIR_F_TALK_A, J3DFrameCtrl::EMode_NONE, MoiR},
|
||
{BCK_MOIR_F_HOLD_S, J3DFrameCtrl::EMode_NONE, MoiR},
|
||
{5, J3DFrameCtrl::EMode_NONE, MoiR},
|
||
{BCK_MOIR_F_SURPRISED, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_F_HOLD_S, J3DFrameCtrl::EMode_NONE, MoiR},
|
||
{BCK_MOIR_F_TAKAJO_HI, J3DFrameCtrl::EMode_NONE, MoiR3},
|
||
{BCK_MOIR_FH_HOLD_S, J3DFrameCtrl::EMode_LOOP, MoiR},
|
||
{BCK_MOIR_FH_SERIOUS, J3DFrameCtrl::EMode_LOOP, MoiR},
|
||
{BCK_MOIR_FH_HOLD_S, J3DFrameCtrl::EMode_LOOP, MoiR},
|
||
{BCK_MOIR_FH_TAKAJO_HI, J3DFrameCtrl::EMode_NONE, MoiR3},
|
||
{BCK_MOIR_WAIT_A, J3DFrameCtrl::EMode_LOOP, MoiR},
|
||
{BCK_MOIR_WAIT_B, J3DFrameCtrl::EMode_LOOP, MoiR2},
|
||
{BCK_MOIR_WAIT_C, J3DFrameCtrl::EMode_LOOP, MoiR2},
|
||
{BCK_MOIR_TALK_A, J3DFrameCtrl::EMode_NONE, MoiR},
|
||
{BCK_MOIR_STEP, J3DFrameCtrl::EMode_NONE, MoiR},
|
||
{BCK_MOIR_LOOK_AROUND, J3DFrameCtrl::EMode_LOOP, MoiR2},
|
||
{BCK_MOIR_FUE, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_TAKAJO_NI, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_TAKAJO_WAIT_NI, J3DFrameCtrl::EMode_LOOP, MoiR2},
|
||
{BCK_MOIR_SURPRISED, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_SQUAREUP, J3DFrameCtrl::EMode_LOOP, MoiR2},
|
||
{BCK_MOIR_SQUAREUP_STEP, J3DFrameCtrl::EMode_LOOP, MoiR2},
|
||
{BCK_MOIR_DRIVEAWAY, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_TAKEOFF, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_TAKING_OFF, J3DFrameCtrl::EMode_LOOP, MoiR2},
|
||
{BCK_MOIR_TAKING_OFF_TALK, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_TAKE_MET, J3DFrameCtrl::EMode_NONE, MoiR2},
|
||
{BCK_MOIR_SIT, J3DFrameCtrl::EMode_LOOP, MoiR1},
|
||
{BCK_MOIR_SIT_TALK, J3DFrameCtrl::EMode_NONE, MoiR1},
|
||
{BCK_MOIR_TAKEOFF_SIT, J3DFrameCtrl::EMode_NONE, MoiR1},
|
||
{BCK_MOIR_TAKING_OFF_SIT, J3DFrameCtrl::EMode_LOOP, MoiR1},
|
||
{BCK_MOIR_TAKING_OFF_SIT_TALK, J3DFrameCtrl::EMode_NONE, MoiR1},
|
||
{BCK_MOIR_TAKE_MET_SIT, J3DFrameCtrl::EMode_NONE, MoiR1},
|
||
{BCK_MOIR_TAKAJO, J3DFrameCtrl::EMode_NONE, MoiR3},
|
||
{BCK_MOIR_TAKAJO_WAIT, J3DFrameCtrl::EMode_LOOP, MoiR3},
|
||
{BCK_MOIR_TAKAJO_HI, J3DFrameCtrl::EMode_NONE, MoiR3},
|
||
{BCK_MOIR_TAKAJO_HI_WAIT, J3DFrameCtrl::EMode_LOOP, MoiR3},
|
||
{BCK_MOIR_RUN, J3DFrameCtrl::EMode_LOOP, MoiR3},
|
||
};
|
||
|
||
/* 80A83AA4-80A83ABC 0001F4 0018+00 1/1 0/0 0/0 .data l_btpGetParamList */
|
||
static daNpc_GetParam2 l_btpGetParamList[2] = {
|
||
{BTP_MOIR, J3DFrameCtrl::EMode_LOOP, MoiR},
|
||
{BTP_MOIR_FH_SERIOUS, J3DFrameCtrl::EMode_LOOP, MoiR},
|
||
};
|
||
|
||
/* 80A83ABC-80A83AC8 00020C 000C+00 1/2 0/0 0/0 .data l_btkGetParamList */
|
||
static daNpc_GetParam2 l_btkGetParamList[1] = {
|
||
{BTK_MOIR, J3DFrameCtrl::EMode_LOOP, MoiR},
|
||
};
|
||
|
||
/* 80A83AC8-80A83AD4 000218 000C+00 1/0 0/0 0/0 .data l_loadRes_MOIR0 */
|
||
static int l_loadRes_MOIR0[3] = {
|
||
0, 1, -1,
|
||
};
|
||
|
||
/* 80A83AD4-80A83AE0 000224 000C+00 1/0 0/0 0/0 .data l_loadRes_MOIR1 */
|
||
static int l_loadRes_MOIR1[3] = {
|
||
0, 2, -1,
|
||
};
|
||
|
||
/* 80A83AE0-80A83AEC 000230 000C+00 1/0 0/0 0/0 .data l_loadRes_MOIR2 */
|
||
static int l_loadRes_MOIR2[3] = {
|
||
0, 3, -1,
|
||
};
|
||
|
||
/* 80A83AEC-80A83AF8 -00001 000C+00 2/2 0/0 0/0 .data l_loadRes_list */
|
||
static int* l_loadRes_list[3] = {
|
||
l_loadRes_MOIR0,
|
||
l_loadRes_MOIR1,
|
||
l_loadRes_MOIR2,
|
||
};
|
||
|
||
/* 80A83AF8-80A83B08 -00001 0010+00 8/13 0/0 0/0 .data l_arcNames */
|
||
static char* l_arcNames[4] = {
|
||
"MoiR",
|
||
"MoiR1",
|
||
"MoiR2",
|
||
"MoiR3",
|
||
};
|
||
|
||
/* 80A83B08-80A83B18 -00001 0010+00 0/5 0/0 0/0 .data l_evtNames */
|
||
static char* l_evtNames[4] = {
|
||
"",
|
||
"THE_INTRODUCTION",
|
||
"MOIR_APPEAR",
|
||
"MOIR_APPEAR2",
|
||
};
|
||
|
||
/* 80A83B18-80A83B1C -00001 0004+00 0/3 0/0 0/0 .data l_myName */
|
||
static char* l_myName = "MoiR";
|
||
|
||
/* 80A83D84-80A83D88 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */
|
||
static daNpcMoiR_Param_c l_HIO;
|
||
|
||
/* 80A83B40-80A83B70 000290 0030+00 0/2 0/0 0/0 .data mEvtSeqList__11daNpcMoiR_c */
|
||
daNpcMoiR_c::EventFn daNpcMoiR_c::mEvtSeqList[4] = {
|
||
NULL,
|
||
&daNpcMoiR_c::EvCut_Introduction,
|
||
&daNpcMoiR_c::EvCut_Appear,
|
||
&daNpcMoiR_c::EvCut_Appear2,
|
||
};
|
||
|
||
/* 80A7C380-80A7C580 000300 0200+00 1/0 0/0 0/0 .text __dt__11daNpcMoiR_cFv */
|
||
daNpcMoiR_c::~daNpcMoiR_c() {
|
||
for (int i = 0; l_loadRes_list[mMode][i] >= 0; i++) {
|
||
dComIfG_resDelete(&mPhase[i], l_arcNames[l_loadRes_list[mMode][i]]);
|
||
}
|
||
|
||
if (heap != NULL) {
|
||
mpMorf->stopZelAnime();
|
||
}
|
||
}
|
||
|
||
/* 80A832AC-80A83320 000000 0074+00 17/17 0/0 0/0 .rodata m__17daNpcMoiR_Param_c */
|
||
daNpcMoiR_HIOParam const daNpcMoiR_Param_c::m = {
|
||
35.0f,
|
||
-3.0f,
|
||
1.0f,
|
||
400.0f,
|
||
255.0f,
|
||
200.0f,
|
||
35.0f,
|
||
30.0f,
|
||
0.0f,
|
||
0.0f,
|
||
10.0f,
|
||
-10.0f,
|
||
30.0f,
|
||
-10.0f,
|
||
45.0f,
|
||
-45.0f,
|
||
0.6f,
|
||
12.0f,
|
||
3,
|
||
6,
|
||
5,
|
||
6,
|
||
80.0f,
|
||
500.0f,
|
||
300.0f,
|
||
-300.0f,
|
||
60,
|
||
8,
|
||
0,
|
||
0,
|
||
0,
|
||
false,
|
||
false,
|
||
300.0f,
|
||
0x15CD,
|
||
0,
|
||
};
|
||
|
||
/* 80A7C580-80A7C978 000500 03F8+00 1/1 0/0 0/0 .text Create__11daNpcMoiR_cFv */
|
||
cPhs__Step daNpcMoiR_c::Create() {
|
||
fopAcM_SetupActor(this, daNpcMoiR_c);
|
||
|
||
if (strcmp(dComIfGp_getStartStageName(), "R_SP116") == 0 && dComIfG_play_c::getLayerNo(0) == 4) {
|
||
if (daNpcF_chkEvtBit(0x169) /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */
|
||
&& daNpcF_chkEvtBit(0x10A) /* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */
|
||
&& !daNpcF_chkEvtBit(0x10B) /* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
if (dComIfGs_isStageSwitch(0x18, 0x4B)) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
mMode = MODE_SIT;
|
||
} else if (strcmp(dComIfGp_getStartStageName(), "F_SP108") == 0) {
|
||
if (daNpcF_chkEvtBit(0x10B) /* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
mMode = MODE_STAND;
|
||
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
||
if (dComIfGs_isSaveSwitch(0x14)) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000);
|
||
mMode = MODE_2;
|
||
}
|
||
|
||
mMsgNo = getMessageNo();
|
||
cPhs__Step phase = cPhs_ERROR_e;
|
||
for (int i = 0; l_loadRes_list[mMode][i] >= 0; i++) {
|
||
phase = (cPhs__Step)dComIfG_resLoad(&mPhase[i], l_arcNames[l_loadRes_list[mMode][i]]);
|
||
if (phase != cPhs_COMPLEATE_e) {
|
||
return phase;
|
||
}
|
||
}
|
||
|
||
if (phase == cPhs_COMPLEATE_e) {
|
||
u32 i_size = 0;
|
||
switch (mMode) {
|
||
case MODE_SIT:
|
||
i_size = 0x4850;
|
||
break;
|
||
|
||
case MODE_STAND:
|
||
i_size = 0x4860;
|
||
break;
|
||
|
||
case MODE_2:
|
||
i_size = 0x4850;
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(343, 0);
|
||
break;
|
||
}
|
||
|
||
if (!fopAcM_entrySolidHeap(this, createHeapCallBack, i_size)) {
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
|
||
fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 220.0f, 100.0f);
|
||
mSound.init(¤t.pos, &eyePos, 3, 1);
|
||
|
||
mAcchCir.SetWall(daNpcMoiR_Param_c::m.common.width, daNpcMoiR_Param_c::m.common.knee_length);
|
||
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1,
|
||
&mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
|
||
mAcch.SetRoofNone();
|
||
mAcch.SetWaterNone();
|
||
mAcch.CrrPos(dComIfG_Bgsp());
|
||
|
||
mCcStts.Init(daNpcMoiR_Param_c::m.common.weight, 0, this);
|
||
field_0xca0.Set(mCcDCyl);
|
||
field_0xca0.SetStts(&mCcStts);
|
||
field_0xca0.SetTgType(0);
|
||
field_0xca0.SetTgSPrm(0);
|
||
|
||
mGndChk = mAcch.m_gnd;
|
||
mGroundH = mAcch.GetGroundH();
|
||
|
||
setEnvTevColor();
|
||
setRoomNo();
|
||
mpMorf->modelCalc();
|
||
reset();
|
||
Execute();
|
||
}
|
||
|
||
return phase;
|
||
}
|
||
|
||
/* 80A7C978-80A7CC8C 0008F8 0314+00 1/1 0/0 0/0 .text CreateHeap__11daNpcMoiR_cFv */
|
||
int daNpcMoiR_c::CreateHeap() {
|
||
J3DModelData* mdlData_p = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_arcNames[0], BMDR_MOIR));
|
||
|
||
JUT_ASSERT(403, 0 != mdlData_p);
|
||
|
||
mpMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11020284);
|
||
if (mpMorf != NULL && mpMorf->getModel() == NULL) {
|
||
mpMorf->stopZelAnime();
|
||
mpMorf = NULL;
|
||
}
|
||
|
||
if (mpMorf == NULL) {
|
||
return 0;
|
||
}
|
||
|
||
J3DModel* mdl_p = mpMorf->getModel();
|
||
for (u16 i = 0; i < mdlData_p->getJointNum(); i++) {
|
||
mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack);
|
||
}
|
||
mdl_p->setUserArea((u32)this);
|
||
|
||
mpMatAnm = new daNpcF_MatAnm_c();
|
||
if (mpMatAnm == NULL) {
|
||
return 0;
|
||
}
|
||
|
||
mdlData_p = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_arcNames[0], BMDR_HEADGEAR));
|
||
|
||
JUT_ASSERT(436, mdlData_p != 0);
|
||
|
||
mpHeadgearModel = mDoExt_J3DModel__create(mdlData_p, 0x80000, 0x11000084);
|
||
|
||
if (!setExpressionAnm(ANM_F_TALK_A, false)) {
|
||
return 0;
|
||
}
|
||
|
||
switch (mMode) {
|
||
case MODE_SIT:
|
||
setMotionAnm(ANM_SIT, 0.0f);
|
||
break;
|
||
|
||
case MODE_STAND:
|
||
setMotionAnm(ANM_WAIT_C, 0.0f);
|
||
break;
|
||
|
||
case MODE_2:
|
||
setMotionAnm(ANM_TAKAJO_HI_WAIT, 0.0f);
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(448, 0);
|
||
break;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80A7CE48-80A7CE7C 000DC8 0034+00 1/1 0/0 0/0 .text Delete__11daNpcMoiR_cFv */
|
||
int daNpcMoiR_c::Delete() {
|
||
this->~daNpcMoiR_c();
|
||
return 1;
|
||
}
|
||
|
||
/* 80A7CE7C-80A7CEA0 000DFC 0024+00 2/2 0/0 0/0 .text Execute__11daNpcMoiR_cFv */
|
||
int daNpcMoiR_c::Execute() {
|
||
execute();
|
||
return 1;
|
||
}
|
||
|
||
/* 80A7CEA0-80A7CEFC 000E20 005C+00 1/1 0/0 0/0 .text Draw__11daNpcMoiR_cFv */
|
||
int daNpcMoiR_c::Draw() {
|
||
mpMorf->getModel()->getModelData()->getMaterialNodePointer(MAT_MOIR_EYEBALL_M)->setMaterialAnm(mpMatAnm);
|
||
draw(FALSE, FALSE, daNpcMoiR_Param_c::m.common.real_shadow_size, NULL, FALSE);
|
||
return 1;
|
||
}
|
||
|
||
/* 80A7CEFC-80A7D0CC 000E7C 01D0+00 1/1 0/0 0/0 .text ctrlJoint__11daNpcMoiR_cFP8J3DJointP8J3DModel */
|
||
int daNpcMoiR_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
|
||
int jntNo = i_joint->getJntNo();
|
||
int i_jointList[3] = {JNT_BACKBONE1, JNT_NECK, JNT_HEAD};
|
||
|
||
if (jntNo == 0) {
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_BACKBONE1));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[0]);
|
||
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_NECK));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[1]);
|
||
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HEAD));
|
||
mDoMtx_stack_c::multVecZero(&mLookatPos[2]);
|
||
}
|
||
|
||
mDoMtx_stack_c::copy(i_model->getAnmMtx(jntNo));
|
||
|
||
switch (jntNo) {
|
||
case JNT_BACKBONE1:
|
||
case JNT_NECK:
|
||
case JNT_HEAD:
|
||
setLookatMtx(jntNo, i_jointList, daNpcMoiR_Param_c::m.common.neck_rotation_ratio);
|
||
break;
|
||
|
||
}
|
||
|
||
i_model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
|
||
MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
|
||
|
||
if ((jntNo == JNT_HEAD || jntNo == JNT_MOUTH) && (mAnmFlags & ANM_PLAY_BCK) != 0) {
|
||
J3DAnmTransform* anm = mBckAnm.getBckAnm();
|
||
J3DAnmTransform* i_bck = mpMorf->getAnm();
|
||
mBckAnm.changeBckOnly(i_bck);
|
||
mpMorf->changeAnm(anm);
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80A7D0CC-80A7D0EC 00104C 0020+00 1/1 0/0 0/0 .text createHeapCallBack__11daNpcMoiR_cFP10fopAc_ac_c */
|
||
int daNpcMoiR_c::createHeapCallBack(fopAc_ac_c* a_this) {
|
||
daNpcMoiR_c* i_this = (daNpcMoiR_c*)a_this;
|
||
return i_this->CreateHeap();
|
||
}
|
||
|
||
/* 80A7D0EC-80A7D138 00106C 004C+00 1/1 0/0 0/0 .text ctrlJointCallBack__11daNpcMoiR_cFP8J3DJointi */
|
||
int daNpcMoiR_c::ctrlJointCallBack(J3DJoint* i_joint, int param_2) {
|
||
if (param_2 == 0) {
|
||
J3DModel* model = j3dSys.getModel();
|
||
daNpcMoiR_c* i_this = (daNpcMoiR_c*)model->getUserArea();
|
||
|
||
if (i_this != NULL) {
|
||
i_this->ctrlJoint(i_joint, model);
|
||
}
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
inline void daNpcMoiR_c::searchActors() {
|
||
if (mActorMngr[1].getActorP() == NULL) {
|
||
mActorMngr[1].entry(fopAcM_SearchByName(PROC_NPC_ASH));
|
||
}
|
||
|
||
if (mActorMngr[2].getActorP() == NULL) {
|
||
mActorMngr[2].entry(fopAcM_SearchByName(PROC_NPC_SHAD));
|
||
}
|
||
|
||
if (mActorMngr[3].getActorP() == NULL) {
|
||
mActorMngr[3].entry(fopAcM_SearchByName(PROC_NPC_RAFREL));
|
||
}
|
||
}
|
||
|
||
/* 80A7D138-80A7D394 0010B8 025C+00 2/0 0/0 0/0 .text setExpressionAnm__11daNpcMoiR_cFib */
|
||
bool daNpcMoiR_c::setExpressionAnm(int i_index, bool i_modify) {
|
||
mAnmFlags &= 0xFFFFE03F;
|
||
|
||
J3DAnmTransform* anmTransform;
|
||
if (l_bckGetParamList[i_index].fileIdx >= 0) {
|
||
anmTransform = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_index].arcIdx], l_bckGetParamList[i_index].fileIdx);
|
||
} else {
|
||
anmTransform = NULL;
|
||
}
|
||
|
||
int i_attr = l_bckGetParamList[i_index].attr;
|
||
bool bVar1 = false;
|
||
switch (i_index) {
|
||
case ANM_NONE:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_F_TALK_A:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_F_HOLD_S:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_3:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_F_SURPRISED:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_F_HOLD_S_LOOP:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_F_TAKAJO_HI:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_FH_HOLD_S:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_FH_SERIOUS:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_FH_SERIOUS);
|
||
break;
|
||
|
||
case ANM_FH_HOLD_S_2:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
case ANM_FH_TAKAJO_HI:
|
||
bVar1 = setExpressionBtp(EXPR_BTP_MOIR);
|
||
break;
|
||
|
||
default:
|
||
anmTransform = NULL;
|
||
break;
|
||
}
|
||
|
||
if (!bVar1) {
|
||
return false;
|
||
}
|
||
|
||
if (anmTransform == NULL) {
|
||
return true;
|
||
}
|
||
|
||
if (setBckAnm(anmTransform, 1.0f, i_attr, 0, -1, i_modify)) {
|
||
mAnmFlags |= ANM_PLAY_BCK | ANM_PAUSE_BCK;
|
||
mExpressionLoops = 0;
|
||
return true;
|
||
}
|
||
|
||
OS_REPORT("%s: 表情Bckアニメーションの登録に失敗しました!\n", "d_a_npc_moir.cpp");
|
||
return false;
|
||
}
|
||
|
||
/* 80A7D394-80A7D474 001314 00E0+00 1/0 0/0 0/0 .text setExpressionBtp__11daNpcMoiR_cFi */
|
||
bool daNpcMoiR_c::setExpressionBtp(int i_index) {
|
||
J3DAnmTexPattern* anmTexPattern = getTexPtrnAnmP(l_arcNames[l_btpGetParamList[i_index].arcIdx], l_btpGetParamList[i_index].fileIdx);
|
||
int i_attr = l_btpGetParamList[i_index].attr;
|
||
|
||
mAnmFlags &= 0xFFFFF57F;
|
||
|
||
if (anmTexPattern == NULL) {
|
||
return true;
|
||
}
|
||
|
||
if (setBtpAnm(anmTexPattern, mpMorf->getModel()->getModelData(), 1.0f, i_attr)) {
|
||
mAnmFlags |= ANM_PLAY_BTP | ANM_PAUSE_BTP;
|
||
|
||
if (i_index == EXPR_BTP_MOIR) {
|
||
mAnmFlags |= ANM_FLAG_800;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
OS_REPORT("%s: 表情Btpアニメーションの登録に失敗しました!\n", "d_a_npc_moir.cpp");
|
||
return false;
|
||
}
|
||
|
||
/* 80A7D474-80A7D5C4 0013F4 0150+00 1/0 0/0 0/0 .text setMotionAnm__11daNpcMoiR_cFif */
|
||
void daNpcMoiR_c::setMotionAnm(int i_index, f32 i_morf) {
|
||
if (i_index < 11 || i_index >= 0x27) {
|
||
return;
|
||
}
|
||
|
||
J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_index].arcIdx], l_bckGetParamList[i_index].fileIdx);
|
||
J3DAnmTextureSRTKey* btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx);
|
||
int i_morfAttr = l_bckGetParamList[i_index].attr;
|
||
int i_btkAttr = l_btkGetParamList[0].attr;
|
||
|
||
mAnmFlags &= 0xFFFFFFC0;
|
||
|
||
if (morfAnm != NULL && setMcaMorfAnm(morfAnm, 1.0f, i_morf, i_morfAttr, 0, -1)) {
|
||
mAnmFlags |= ANM_PLAY_MORF | ANM_PAUSE_MORF;
|
||
mMotionLoops = 0;
|
||
}
|
||
|
||
if (btkAnm != NULL) {
|
||
if (setBtkAnm(btkAnm, mpMorf->getModel()->getModelData(), 1.0f, i_btkAttr)) {
|
||
mAnmFlags |= ANM_PLAY_BTK | ANM_PAUSE_BTK;
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 80A7D5C4-80A7D73C 001544 0178+00 1/1 0/0 0/0 .text reset__11daNpcMoiR_cFv */
|
||
void daNpcMoiR_c::reset() {
|
||
initialize();
|
||
mpMatAnm->initialize();
|
||
mLookat.initialize();
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
mActorMngr[i].initialize();
|
||
}
|
||
|
||
field_0xdfc = 0;
|
||
field_0xe00 = 0;
|
||
mAction = NULL;
|
||
mLookMode = -1;
|
||
field_0xe08 = 0;
|
||
current.pos.set(home.pos);
|
||
old.pos.set(current.pos);
|
||
current.angle.set(0, home.angle.y, 0);
|
||
old.angle = current.angle;
|
||
shape_angle = current.angle;
|
||
mCurAngle = current.angle;
|
||
mOldAngle = mCurAngle;
|
||
speedF = 0.0f;
|
||
speed.setall(0.0f);
|
||
field_0xdf8 = -1;
|
||
mOrderEvtNo = 0;
|
||
mExpressionMorfOverride = 0.0f;
|
||
mMotionMorfOverride = 0.0f;
|
||
mWearHelmet = true;
|
||
setWaitAction();
|
||
}
|
||
|
||
/* 80A7D73C-80A7D934 0016BC 01F8+00 1/1 0/0 0/0 .text setWaitAction__11daNpcMoiR_cFv */
|
||
void daNpcMoiR_c::setWaitAction() {
|
||
switch (mMode) {
|
||
case MODE_SIT:
|
||
setAction(&daNpcMoiR_c::wait_type0);
|
||
break;
|
||
|
||
case MODE_STAND:
|
||
setAction(&daNpcMoiR_c::wait_type1);
|
||
break;
|
||
|
||
case MODE_2:
|
||
setAction(&daNpcMoiR_c::wait_type2);
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(1315, 0);
|
||
break;
|
||
}
|
||
}
|
||
|
||
inline void daNpcMoiR_c::playExpression() {
|
||
daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat0[1] = {&dat0};
|
||
daNpcF_anmPlayData dat1 = {ANM_F_HOLD_S_LOOP, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData* pDat1[1] = {&dat1};
|
||
daNpcF_anmPlayData dat2 = {ANM_3, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData* pDat2[1] = {&dat2};
|
||
daNpcF_anmPlayData dat3 = {ANM_FH_SERIOUS, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat3[1] = {&dat3};
|
||
daNpcF_anmPlayData dat4 = {ANM_F_TAKAJO_HI, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat4[1] = {&dat4};
|
||
daNpcF_anmPlayData dat5 = {ANM_FH_TAKAJO_HI, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat5[1] = {&dat5};
|
||
daNpcF_anmPlayData dat6 = {ANM_FH_HOLD_S_2, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat6[1] = {&dat6};
|
||
daNpcF_anmPlayData dat7 = {ANM_F_SURPRISED, 4.0f, 0};
|
||
daNpcF_anmPlayData* pDat7[1] = {&dat7};
|
||
daNpcF_anmPlayData dat8 = {ANM_F_HOLD_S, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat8[1] = {&dat8};
|
||
daNpcF_anmPlayData dat9 = {ANM_FH_HOLD_S, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat9[1] = {&dat9};
|
||
daNpcF_anmPlayData dat10 = {ANM_NONE, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat10[1] = {&dat10};
|
||
daNpcF_anmPlayData* pDat11[1] = {&dat0};
|
||
|
||
daNpcF_anmPlayData** ppDat[19] = {
|
||
pDat0,
|
||
pDat11,
|
||
pDat11,
|
||
pDat1,
|
||
pDat11,
|
||
pDat11,
|
||
pDat11,
|
||
pDat11,
|
||
pDat11,
|
||
pDat11,
|
||
pDat2,
|
||
pDat3,
|
||
pDat4,
|
||
pDat5,
|
||
pDat6,
|
||
pDat7,
|
||
pDat8,
|
||
pDat9,
|
||
pDat10,
|
||
};
|
||
|
||
if (mExpression >= 0 && mExpression < 0x13) {
|
||
playExpressionAnm(ppDat);
|
||
}
|
||
}
|
||
|
||
/* 80A818B4-80A8210C 005834 0858+00 1/1 0/0 0/0 .text playMotion__11daNpcMoiR_cFv */
|
||
void daNpcMoiR_c::playMotion() {
|
||
daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat0[1] = {&dat0};
|
||
daNpcF_anmPlayData dat1a = {ANM_TALK_A, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat1b = {ANM_WAIT_C, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b};
|
||
daNpcF_anmPlayData dat2 = {ANM_WAIT_B, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat2[1] = {&dat2};
|
||
daNpcF_anmPlayData dat3 = {ANM_WAIT_C, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat3[1] = {&dat3};
|
||
daNpcF_anmPlayData dat4a = {ANM_LOOK_AROUND, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat4b = {ANM_WAIT_C, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b};
|
||
daNpcF_anmPlayData dat5 = {ANM_TAKAJO_WAIT_NI, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat5[1] = {&dat5};
|
||
daNpcF_anmPlayData dat6 = {ANM_SIT, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat6[1] = {&dat6};
|
||
daNpcF_anmPlayData dat7a = {ANM_SIT_TALK, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat7b = {ANM_SIT, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b};
|
||
daNpcF_anmPlayData dat8 = {ANM_SQUAREUP, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat8[1] = {&dat8};
|
||
daNpcF_anmPlayData dat9a = {ANM_DRIVEAWAY, 0.0f, 1};
|
||
daNpcF_anmPlayData dat9b = {ANM_SQUAREUP, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b};
|
||
daNpcF_anmPlayData dat10a = {ANM_TAKEOFF, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat10b = {ANM_TAKING_OFF, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b};
|
||
daNpcF_anmPlayData dat11 = {ANM_TAKING_OFF, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat11[1] = {&dat11};
|
||
daNpcF_anmPlayData dat12a = {ANM_TAKING_OFF_TALK, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat12b = {ANM_TAKING_OFF, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat12[2] = {&dat12a, &dat12b};
|
||
daNpcF_anmPlayData dat13a = {ANM_TAKE_MET, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat13b = {ANM_WAIT_C, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat13[2] = {&dat13a, &dat13b};
|
||
daNpcF_anmPlayData dat14a = {ANM_TAKEOFF_SIT, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat14b = {ANM_TAKING_OFF_SIT, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat14[2] = {&dat14a, &dat14b};
|
||
daNpcF_anmPlayData dat15 = {ANM_TAKING_OFF_SIT, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat15[1] = {&dat15};
|
||
daNpcF_anmPlayData dat16a = {ANM_TAKING_OFF_SIT_TALK, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat16b = {ANM_TAKING_OFF_SIT, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat16[2] = {&dat16a, &dat16b};
|
||
daNpcF_anmPlayData dat17a = {ANM_TAKE_MET_SIT, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat17b = {ANM_SIT, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat17[2] = {&dat17a, &dat17b};
|
||
daNpcF_anmPlayData dat18 = {ANM_RUN, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat18[1] = {&dat18};
|
||
daNpcF_anmPlayData dat19 = {ANM_TAKAJO_HI_WAIT, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat19[1] = {&dat19};
|
||
daNpcF_anmPlayData dat20a = {ANM_TAKAJO_HI, 0.0f, 1};
|
||
daNpcF_anmPlayData dat20b = {ANM_TAKAJO_HI_WAIT, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat20[2] = {&dat20a, &dat20b};
|
||
daNpcF_anmPlayData dat21a = {ANM_SURPRISED, 0.0f, 1};
|
||
daNpcF_anmPlayData dat21b = {ANM_SQUAREUP, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat21[2] = {&dat21a, &dat21b};
|
||
daNpcF_anmPlayData dat22 = {ANM_SQUAREUP_STEP, 2.0f, 1};
|
||
daNpcF_anmPlayData* pDat22[1] = {&dat22};
|
||
daNpcF_anmPlayData dat23a = {ANM_TAKAJO_NI, daNpcMoiR_Param_c::m.common.morf_frame, 1};
|
||
daNpcF_anmPlayData dat23b = {ANM_TAKAJO_WAIT_NI, 0.0f, 0};
|
||
daNpcF_anmPlayData* pDat23[2] = {&dat23a, &dat23b};
|
||
daNpcF_anmPlayData dat24 = {ANM_FUE, 0.0f, 1};
|
||
daNpcF_anmPlayData* pDat24[2] = {&dat24};
|
||
daNpcF_anmPlayData dat25 = {ANM_LOOK_AROUND, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat25[1] = {&dat25};
|
||
daNpcF_anmPlayData dat26 = {ANM_STEP, 4.0f, 1};
|
||
daNpcF_anmPlayData* pDat26[1] = {&dat26};
|
||
daNpcF_anmPlayData dat27 = {ANM_NONE, daNpcMoiR_Param_c::m.common.morf_frame, 0};
|
||
daNpcF_anmPlayData* pDat27[1] = {&dat27};
|
||
|
||
daNpcF_anmPlayData** ppDat[43] = {
|
||
pDat0,
|
||
pDat1,
|
||
pDat2,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat3,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat27,
|
||
pDat4,
|
||
pDat5,
|
||
pDat6,
|
||
pDat7,
|
||
pDat8,
|
||
pDat9,
|
||
pDat10,
|
||
pDat11,
|
||
pDat12,
|
||
pDat13,
|
||
pDat14,
|
||
pDat15,
|
||
pDat16,
|
||
pDat17,
|
||
pDat18,
|
||
pDat19,
|
||
pDat20,
|
||
pDat21,
|
||
pDat22,
|
||
pDat23,
|
||
pDat24,
|
||
pDat25,
|
||
pDat26,
|
||
};
|
||
|
||
if (mMotion >= 0 && mMotion < 0x2B) {
|
||
playMotionAnm(ppDat);
|
||
}
|
||
}
|
||
|
||
/* 80A825A0-80A82878 006520 02D8+00 1/1 0/0 0/0 .text lookat__11daNpcMoiR_cFv */
|
||
inline void daNpcMoiR_c::lookat() {
|
||
daPy_py_c* player = NULL;
|
||
J3DModel* model = mpMorf->getModel();
|
||
BOOL bVar1 = FALSE;
|
||
f32 body_angleX_min = daNpcMoiR_Param_c::m.common.body_angleX_min;
|
||
f32 body_angleX_max = daNpcMoiR_Param_c::m.common.body_angleX_max;
|
||
f32 body_angleY_min = daNpcMoiR_Param_c::m.common.body_angleY_min;
|
||
f32 body_angleY_max = daNpcMoiR_Param_c::m.common.body_angleY_max;
|
||
f32 head_angleX_min = daNpcMoiR_Param_c::m.common.head_angleX_min;
|
||
f32 head_angleX_max = daNpcMoiR_Param_c::m.common.head_angleX_max;
|
||
f32 head_angleY_min = daNpcMoiR_Param_c::m.common.head_angleY_min;
|
||
f32 head_angleY_max = daNpcMoiR_Param_c::m.common.head_angleY_max;
|
||
s16 sVar1 = mCurAngle.y - mOldAngle.y;
|
||
cXyz spd0[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
|
||
csXyz* local_dc[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
|
||
cXyz spe8;
|
||
|
||
switch (mLookMode) {
|
||
case LOOK_NONE:
|
||
break;
|
||
|
||
case LOOK_RESET:
|
||
bVar1 = TRUE;
|
||
break;
|
||
|
||
case LOOK_PLAYER:
|
||
case LOOK_PLAYER_TALK:
|
||
player = daPy_getPlayerActorClass();
|
||
|
||
if (mMode == MODE_STAND) {
|
||
if (mLookMode == LOOK_PLAYER_TALK) {
|
||
head_angleY_min = -80.0f;
|
||
head_angleY_max = 80.0f;
|
||
}
|
||
}
|
||
|
||
if (mMode == MODE_SIT) {
|
||
J3DAnmTransform* anm = mpMorf->getAnm();
|
||
if (anm == getTrnsfrmKeyAnmP(l_arcNames[1], l_bckGetParamList[30].fileIdx) ||
|
||
anm == getTrnsfrmKeyAnmP(l_arcNames[1], l_bckGetParamList[33].fileIdx)) {
|
||
player = NULL;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
if (player != NULL) {
|
||
mLookPos = player->attention_info.position;
|
||
|
||
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) {
|
||
mLookPos.y -= 40.0f;
|
||
}
|
||
|
||
mLookat.setAttnPos(&mLookPos);
|
||
} else {
|
||
mLookat.setAttnPos(0);
|
||
}
|
||
|
||
mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, 0.0f, 0.0f,
|
||
head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, mCurAngle.y, spd0);
|
||
mLookat.calc(this, model->getBaseTRMtx(), local_dc, bVar1, sVar1, FALSE);
|
||
}
|
||
|
||
inline BOOL daNpcMoiR_c::chkFindPlayer() {
|
||
BOOL rv;
|
||
f32 fVar1 = mMode == MODE_SIT ? 135.0f : daNpcMoiR_Param_c::m.common.fov;
|
||
|
||
if (!chkActorInSight(daPy_getPlayerActorClass(), fVar1)) {
|
||
mActorMngr[0].remove();
|
||
return FALSE;
|
||
} else {
|
||
BOOL bVar1;
|
||
if (mActorMngr[0].getActorP() == NULL) {
|
||
bVar1 = chkPlayerInSpeakArea(this);
|
||
} else {
|
||
bVar1 = chkPlayerInTalkArea(this);
|
||
}
|
||
|
||
rv = bVar1;
|
||
|
||
if (rv) {
|
||
mActorMngr[0].entry(daPy_getPlayerActorClass());
|
||
} else {
|
||
mActorMngr[0].remove();
|
||
}
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
inline void daNpcMoiR_c::setLookMode(int i_lookMode) {
|
||
if (i_lookMode >= LOOK_NONE && i_lookMode <= LOOK_PLAYER_TALK && i_lookMode != mLookMode) {
|
||
mLookMode = i_lookMode;
|
||
}
|
||
}
|
||
|
||
inline BOOL daNpcMoiR_c::step(s16 param_1, int param_2) {
|
||
if (mTurnMode == 0) {
|
||
if (param_2 != 0) {
|
||
if ((s32)fabsf(cM_sht2d((s16)(param_1 - mCurAngle.y))) > 40) {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
|
||
if (chkAction(&daNpcMoiR_c::fight)) {
|
||
setMotion(MOT_SQUAREUP_STEP, -1.0f, 0);
|
||
} else {
|
||
setMotion(MOT_STEP, -1.0f, 0);
|
||
}
|
||
}
|
||
}
|
||
|
||
mTurnTargetAngle = param_1;
|
||
mTurnAmount = 0;
|
||
|
||
if (mCurAngle.y == mTurnTargetAngle) {
|
||
mTurnMode++;
|
||
}
|
||
|
||
current.angle.y = mCurAngle.y;
|
||
shape_angle.y = current.angle.y;
|
||
mTurnMode++;
|
||
} else if (mTurnMode == 1) {
|
||
if (turn(mTurnTargetAngle, (mMotion == MOT_SURPRISED && mMotionPhase <= 0) ? 8.0f : 15.0f, 0)) {
|
||
shape_angle.y = current.angle.y;
|
||
mCurAngle.y = current.angle.y;
|
||
mOldAngle.y = current.angle.y;
|
||
mTurnMode++;
|
||
} else {
|
||
shape_angle.y = current.angle.y;
|
||
mCurAngle.y = current.angle.y;
|
||
}
|
||
}
|
||
|
||
return mTurnMode > 1;
|
||
}
|
||
|
||
/* 80A7D934-80A7DD94 0018B4 0460+00 1/0 0/0 0/0 .text wait_type0__11daNpcMoiR_cFPv */
|
||
bool daNpcMoiR_c::wait_type0(void* param_1) {
|
||
// NONMATCHING
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_SIT, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
speedF = 0.0f;
|
||
field_0xe08 = 2;
|
||
break;
|
||
|
||
case 2:
|
||
if (mActorMngr[0].getActorP() != NULL) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mActorMngr[0].getActorP() != NULL) {
|
||
setLookMode(LOOK_PLAYER);
|
||
} else {
|
||
setLookMode(LOOK_NONE);
|
||
}
|
||
|
||
if (dComIfGp_event_runCheck()) {
|
||
if (eventInfo.checkCommandTalk()) {
|
||
if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) {
|
||
setAction(&daNpcMoiR_c::talk);
|
||
}
|
||
} else if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) {
|
||
setAction(&daNpcMoiR_c::demo);
|
||
}
|
||
} else {
|
||
if (mOrderEvtNo != 0) {
|
||
eventInfo.setArchiveName(l_arcNames[1]);
|
||
}
|
||
|
||
char* i_evtName;
|
||
if (mOrderEvtNo != 0) {
|
||
i_evtName = l_evtNames[mOrderEvtNo];
|
||
} else {
|
||
i_evtName = NULL;
|
||
}
|
||
|
||
orderEvent(mOrderSpeakEvt, i_evtName, 0xFFFF, 0x28, 0xFF, 1);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(1652, 0);
|
||
break;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/* 80A7DD94-80A7DDD8 001D14 0044+00 1/0 0/0 0/0 .text setMotion__11daNpcMoiR_cFifi */
|
||
void daNpcMoiR_c::setMotion(int i_motion, f32 i_morf, int param_3) {
|
||
s16 motion = i_motion;
|
||
if ((param_3 != 0 || mMotion != motion) && i_motion >= 0 && i_motion < 0x2B) {
|
||
mMotion = motion;
|
||
mMotionMorfOverride = i_morf;
|
||
mMotionPrevPhase = -1;
|
||
mMotionPhase = 0;
|
||
}
|
||
}
|
||
|
||
/* 80A7DDD8-80A7DE04 001D58 002C+00 1/0 0/0 0/0 .text setExpression__11daNpcMoiR_cFif */
|
||
void daNpcMoiR_c::setExpression(int i_expression, f32 i_morf) {
|
||
if (i_expression >= 0 && i_expression < 0x13) {
|
||
mExpression = i_expression;
|
||
mExpressionMorfOverride = i_morf;
|
||
mExpressionPrevPhase = -1;
|
||
mExpressionPhase = 0;
|
||
}
|
||
}
|
||
|
||
/* 80A7DE04-80A7E668 001D84 0864+00 2/0 0/0 0/0 .text wait_type1__11daNpcMoiR_cFPv */
|
||
bool daNpcMoiR_c::wait_type1(void* param_1) {
|
||
// NONMATCHING
|
||
f32 fVar1;
|
||
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_C, -1.0f, 0);
|
||
field_0xe00 = cLib_getRndValue(3, 5);
|
||
mTurnMode = 0;
|
||
speedF = 0.0f;
|
||
field_0xe08 = 2;
|
||
break;
|
||
|
||
case 2:
|
||
if (mActorMngr[0].getActorP() != NULL) {
|
||
if (!chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
} else if (chkFindPlayer()) {
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mActorMngr[0].getActorP() != NULL) {
|
||
setLookMode(LOOK_PLAYER);
|
||
} else {
|
||
setLookMode(LOOK_NONE);
|
||
}
|
||
|
||
if (mOrderEvtNo == 0 && home.angle.y != mCurAngle.y && step(home.angle.y, 1)) {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_C, -1.0f, 0);
|
||
field_0xe00 = cLib_getRndValue(3, 5);
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mMotionLoops >= field_0xe00) {
|
||
if (mMotion == MOT_LOOK_AROUND) {
|
||
setMotion(MOT_WAIT_C, -1.0f, 0);
|
||
field_0xe00 = cLib_getRndValue(3, 5);
|
||
} else {
|
||
setMotion(MOT_LOOK_AROUND, -1.0f, 0);
|
||
field_0xe00 = 1;
|
||
}
|
||
}
|
||
|
||
if (daPy_py_c::checkNowWolf()) {
|
||
fVar1 = pow(300.0, 2.0);
|
||
if (fopAcM_searchPlayerDistanceXZ2(this) < fVar1) {
|
||
setAction(&daNpcMoiR_c::fight);
|
||
}
|
||
} else if (!daNpcF_chkEvtBit(0x21F) /* dSv_event_flag_c::F_0543 - Faron Woods - Met Resistance Rusl again in the woods */
|
||
&& fopAcM_searchPlayerDistance(this) < daNpcMoiR_Param_c::m.demo_start_dist) {
|
||
daNpcF_onEvtBit(0x21F); // dSv_event_flag_c::F_0543 - Faron Woods - Met Resistance Rusl again in the woods
|
||
daNpcF_offTmpBit(0xB); // dSv_event_tmp_flag_c::T_0010 - General use - General use temporary flag (flow control) A
|
||
daNpcF_offTmpBit(0xC); // dSv_event_tmp_flag_c::T_0011 - General use - General use temporary flag (flow control) B
|
||
daNpcF_offTmpBit(0xD); // dSv_event_tmp_flag_c::T_0012 - General use - General use temporary flag (flow control) C
|
||
daNpcF_offTmpBit(0xE); // dSv_event_tmp_flag_c::T_0013 - General use - General use temporary flag (flow control) D
|
||
daNpcF_offTmpBit(0xF); // dSv_event_tmp_flag_c::T_0014 - General use - General use temporary flag (flow control) E
|
||
mOrderEvtNo = 2;
|
||
}
|
||
|
||
if (dComIfGp_event_runCheck()) {
|
||
if (eventInfo.checkCommandTalk()) {
|
||
if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) {
|
||
setAction(&daNpcMoiR_c::talk);
|
||
}
|
||
} else if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) {
|
||
setAction(&daNpcMoiR_c::demo);
|
||
}
|
||
} else {
|
||
if (mOrderEvtNo != 0) {
|
||
eventInfo.setArchiveName(l_arcNames[2]);
|
||
}
|
||
|
||
char* i_eventName;
|
||
if (mOrderEvtNo != 0) {
|
||
i_eventName = l_evtNames[mOrderEvtNo];
|
||
} else {
|
||
i_eventName = NULL;
|
||
}
|
||
|
||
orderEvent(mOrderSpeakEvt, i_eventName, 0xFFFF, 0x28, 0xFF, 1);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(1756, 0);
|
||
break;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/* 80A7E668-80A7E8C0 0025E8 0258+00 1/0 0/0 0/0 .text wait_type2__11daNpcMoiR_cFPv */
|
||
bool daNpcMoiR_c::wait_type2(void* param_1) {
|
||
// NONMATCHING
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
setExpression(EXPR_FH_TAKAJO_HI, -1.0f);
|
||
setMotion(MOT_TAKAJO_HI_WAIT, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
speedF = 0.0f;
|
||
mActorMngr[0].entry(daPy_getPlayerActorClass());
|
||
setLookMode(LOOK_NONE);
|
||
field_0xe08 = 2;
|
||
break;
|
||
|
||
case 2:
|
||
switch (field_0xe00) {
|
||
case 0:
|
||
if (daNpcF_chkTmpBit(0x76) /* dSv_event_tmp_flag_c::MN09_03 - Hyrule Castle - Auru's cannon hits Flag */) {
|
||
current.pos.set(-4080.086f, 0.0f, 8094.616f);
|
||
old.pos = current.pos;
|
||
setAngle(-0x6000);
|
||
field_0xe00++;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
if (daNpcF_chkTmpBit(0x75) /* dSv_event_tmp_flag_c::MN09_02 - Hyrule Castle - Rusl waves at Link Flag */) {
|
||
setExpression(EXPR_F_TAKAJO_HI, -1.0f);
|
||
setMotion(MOT_TAKAJO_HI, -1.0f, 0);
|
||
field_0xe00++;
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
if (daNpcF_chkTmpBit(0x74) /* dSv_event_tmp_flag_c::WXXTO - Hyrule Castle - Resistance leaves Flag */) {
|
||
setAction(&daNpcMoiR_c::leave);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(1805, 0);
|
||
break;
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(1810, 0);
|
||
break;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
inline void daNpcMoiR_c::setExpressionTalkAfter() {
|
||
switch (mExpression) {
|
||
case 3:
|
||
setExpression(EXPR_FH_HOLD_S, -1.0f);
|
||
break;
|
||
|
||
case 10:
|
||
setExpression(EXPR_FH_HOLD_S_LOOP, -1.0f);
|
||
break;
|
||
|
||
default:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
break;
|
||
}
|
||
}
|
||
|
||
/* 80A7EFBC-80A7F40C 002F3C 0450+00 2/0 0/0 0/0 .text multiTalk__11daNpcMoiR_cFPv */
|
||
BOOL daNpcMoiR_c::multiTalk(void* param_1) {
|
||
// NONMATCHING
|
||
BOOL rv = FALSE;
|
||
fopAc_ac_c* speakers[4] = {this, mActorMngr[1].getActorP(), mActorMngr[2].getActorP(), mActorMngr[3].getActorP()};
|
||
|
||
dComIfGp_setMesgCameraInfoActor(speakers[0], speakers[1], speakers[2], speakers[3], NULL, NULL, NULL, NULL, NULL, NULL);
|
||
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
initTalk(mMsgNo, NULL);
|
||
mMsgTimer = 0;
|
||
|
||
if (mLookMode != LOOK_NONE) {
|
||
mLookMode = LOOK_NONE;
|
||
}
|
||
|
||
field_0xe08 = 2;
|
||
break;
|
||
|
||
case 2:
|
||
if (talkProc(NULL, TRUE, (fopAc_ac_c**)&speakers)) {
|
||
switch (mMode) {
|
||
case MODE_SIT:
|
||
setAction(&daNpcMoiR_c::wait_type0);
|
||
break;
|
||
|
||
case MODE_STAND:
|
||
setAction(&daNpcMoiR_c::wait_type1);
|
||
break;
|
||
|
||
case MODE_2:
|
||
setAction(&daNpcMoiR_c::wait_type2);
|
||
break;
|
||
}
|
||
|
||
rv = TRUE;
|
||
} else {
|
||
int msgTimer = mMsgTimer;
|
||
int i_expression, i_motion;
|
||
|
||
if (ctrlMsgAnm(i_expression, i_motion, this, FALSE) != 0) {
|
||
setExpression(i_expression, -1.0f);
|
||
setMotion(i_motion, -1.0f, 0);
|
||
} else if (msgTimer != 0 && mMsgTimer == 0) {
|
||
switch (mExpression) {
|
||
case 3:
|
||
setExpression(EXPR_FH_HOLD_S, -1.0f);
|
||
break;
|
||
|
||
case 10:
|
||
setExpression(EXPR_FH_HOLD_S_LOOP, -1.0f);
|
||
break;
|
||
|
||
default:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
dComIfGp_event_reset();
|
||
break;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 80A7E8C0-80A7EFBC 002840 06FC+00 2/0 0/0 0/0 .text talk__11daNpcMoiR_cFPv */
|
||
bool daNpcMoiR_c::talk(void* param_1) {
|
||
int itemNo, msgTimer, i_expression, i_actionID;
|
||
s16 i_eventID;
|
||
u16 endConversationID;
|
||
bool rv = false;
|
||
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
initTalk(mMsgNo, NULL);
|
||
mTurnMode = 0;
|
||
mMsgTimer = 0;
|
||
speedF = 0.0f;
|
||
setLookMode(LOOK_PLAYER_TALK);
|
||
field_0xe08 = 2;
|
||
break;
|
||
|
||
case 2:
|
||
if (mMode == MODE_SIT || fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
mActorMngr[0].entry(daPy_getPlayerActorClass());
|
||
itemNo = 0;
|
||
endConversationID = mFlow.getEventId(&itemNo);
|
||
|
||
OS_REPORT("会話終了時 イベントID=%d アイテムNo=%d\n", endConversationID, itemNo);
|
||
|
||
if (endConversationID == 1) {
|
||
field_0xdf8 = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, 0, -1, -1, NULL, NULL);
|
||
|
||
if (field_0xdf8 != -1) {
|
||
i_eventID = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xFF);
|
||
dComIfGp_getEvent().reset(this);
|
||
fopAcM_orderChangeEventId(this, i_eventID, 1, 0xFFFF);
|
||
field_0x9ec = true;
|
||
}
|
||
} else if (mMode == MODE_STAND && mFlow.getChoiceNo() == 0) {
|
||
mOrderEvtNo = 3;
|
||
changeEvent(l_arcNames[2], l_evtNames[mOrderEvtNo], 1, 0xFFFF);
|
||
}
|
||
|
||
setWaitAction();
|
||
rv = true;
|
||
|
||
} else {
|
||
msgTimer = mMsgTimer;
|
||
if (ctrlMsgAnm(i_expression, i_actionID, this, FALSE)) {
|
||
OS_REPORT("レジスタンスモイ 表情番号=%d 動作番号=%d\n", i_expression, i_actionID); // "Resistance Moi Expression Number=%d Action Number=%d\n"
|
||
setExpression(i_expression, -1.0f);
|
||
setMotion(i_actionID, -1.0f, 0);
|
||
} else if (msgTimer != 0 && mMsgTimer == 0) {
|
||
setExpressionTalkAfter();
|
||
}
|
||
}
|
||
} else if (step(fopAcM_searchPlayerAngleY(this), 1)) {
|
||
setMotion(MOT_WAIT_C, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
|
||
if (!field_0x9ec) {
|
||
dComIfGp_event_reset();
|
||
}
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(1893, 0);
|
||
break;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 80A7F40C-80A7F9AC 00338C 05A0+00 2/0 0/0 0/0 .text fight__11daNpcMoiR_cFPv */
|
||
bool daNpcMoiR_c::fight(void* param_1) {
|
||
// NONMATCHING
|
||
f32 fVar1;
|
||
int iVar1 = 1;
|
||
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
setExpression(EXPR_F_SURPRISED, -1.0f);
|
||
setMotion(MOT_SURPRISED, -1.0f, 0);
|
||
mSound.startCreatureVoice(Z2SE_MOIR_V_WOLF_SURPRISE, -1);
|
||
setLookMode(LOOK_PLAYER);
|
||
mTurnMode = 0;
|
||
field_0xe08 = 2;
|
||
break;
|
||
|
||
case 2:
|
||
if (mMotion == MOT_SURPRISED && mMotionPhase <= 0) {
|
||
iVar1 = 0;
|
||
}
|
||
|
||
if (step(fopAcM_searchPlayerAngleY(this), iVar1)) {
|
||
if (mMotion == MOT_SQUAREUP_STEP) {
|
||
setMotion(MOT_DRIVEAWAY, -1.0f, 0);
|
||
field_0xe00 = cLib_getRndValue(1, 2);
|
||
}
|
||
|
||
mTurnMode = 0;
|
||
}
|
||
|
||
if (mMotion == MOT_SURPRISED && mMotionPhase > 0) {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_DRIVEAWAY, -1.0f, 0);
|
||
field_0xe00 = cLib_getRndValue(1, 2);
|
||
} else if (mMotion == MOT_SQUAREUP && mMotionLoops >= field_0xe00) {
|
||
setExpression(EXPR_ANM_3, -1.0f);
|
||
setMotion(MOT_DRIVEAWAY, -1.0f, 0);
|
||
} else if (mMotion == MOT_DRIVEAWAY && mMotionPhase > 0) {
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_SQUAREUP, -1.0f, 0);
|
||
field_0xe00 = cLib_getRndValue(1, 2);
|
||
}
|
||
|
||
if (mMotion == MOT_DRIVEAWAY && mMotionPhase == 0 && (mpMorf->checkFrame(11.0f) || mpMorf->checkFrame(36.0f))) {
|
||
mSound.startCreatureVoice(Z2SE_MOIR_V_SHIT_H, -1);
|
||
}
|
||
|
||
if (daPy_py_c::checkNowWolf()) {
|
||
fVar1 = pow(700.0f, 2.0f);
|
||
if (!(fopAcM_searchPlayerDistanceXZ2(this) > fVar1)) {
|
||
break;
|
||
}
|
||
}
|
||
|
||
setAction(&daNpcMoiR_c::wait_type1);
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(2030, 0);
|
||
break;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/* 80A7F9AC-80A7FEE8 00392C 053C+00 2/0 0/0 0/0 .text demo__11daNpcMoiR_cFPv */
|
||
bool daNpcMoiR_c::demo(void* param_1) {
|
||
bool rv = false;
|
||
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_C, -1.0f, 0);
|
||
field_0xe08 = 2;
|
||
// fallthrough
|
||
case 2:
|
||
if (dComIfGp_event_runCheck() != 0 && eventInfo.checkCommandTalk() == 0) {
|
||
s32 staffIdx = dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0);
|
||
if (staffIdx != -1) {
|
||
mStaffID = staffIdx;
|
||
int actIdx = dComIfGp_getEventManager().getMyActIdx(staffIdx, l_evtNames, 4, 0, 0);
|
||
if (actIdx > 0 && actIdx < 4) {
|
||
mOrderEvtNo = actIdx;
|
||
}
|
||
|
||
JUT_ASSERT(2069, mEvtSeqList[mOrderEvtNo] != 0);
|
||
|
||
if ((this->*mEvtSeqList[mOrderEvtNo])(staffIdx)) {
|
||
dComIfGp_getEventManager().cutEnd(staffIdx);
|
||
}
|
||
|
||
rv = true;
|
||
}
|
||
|
||
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && dComIfGp_getEventManager().endCheck(mEventIdx)) {
|
||
dComIfGp_event_reset();
|
||
mOrderEvtNo = 0;
|
||
mEventIdx = -1;
|
||
setWaitAction();
|
||
}
|
||
} else {
|
||
mOrderEvtNo = 0;
|
||
mEventIdx = -1;
|
||
setWaitAction();
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(2101, 0);
|
||
break;
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 80A7FEE8-80A802C4 003E68 03DC+00 1/0 0/0 0/0 .text leave__11daNpcMoiR_cFPv */
|
||
bool daNpcMoiR_c::leave(void* param_1) {
|
||
cXyz sp24(-6253.387, 0.0f, 6251.7603f);
|
||
daNPC_TK_c* actor_p = NULL;
|
||
|
||
switch (field_0xe08) {
|
||
case 0:
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_RUN, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
speedF = 0.0f;
|
||
fopAcM_SearchByName(PROC_NPC_TK, (fopAc_ac_c**)&actor_p);
|
||
|
||
if (actor_p != NULL) {
|
||
actor_p->setAway();
|
||
}
|
||
|
||
field_0xe08 = 2;
|
||
break;
|
||
|
||
case 2:
|
||
step(cLib_targetAngleY(¤t.pos, &sp24), 1);
|
||
speedF = 12.0f;
|
||
|
||
if (mAcch.ChkWallHit() || current.pos.abs(sp24) < speedF) {
|
||
fopAcM_delete(this);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(2143, 0);
|
||
break;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/* 80A802C4-80A803A0 004244 00DC+00 1/0 0/0 0/0 .text EvCut_Introduction__11daNpcMoiR_cFi */
|
||
BOOL daNpcMoiR_c::EvCut_Introduction(int i_cutIndex) {
|
||
dEvent_manager_c* eventManager = &dComIfGp_getEventManager();
|
||
int* prm = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm");
|
||
if (prm == NULL) {
|
||
return FALSE;
|
||
}
|
||
|
||
if (eventManager->getIsAddvance(i_cutIndex)) {
|
||
switch (*prm) {
|
||
case 0:
|
||
case 2:
|
||
setLookMode(LOOK_NONE);
|
||
return TRUE;
|
||
|
||
case 1:
|
||
setLookMode(LOOK_PLAYER);
|
||
return TRUE;
|
||
|
||
default:
|
||
JUT_ASSERT(2178, 0);
|
||
break;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
/* 80A803A0-80A8081C 004320 047C+00 1/0 0/0 0/0 .text EvCut_Appear__11daNpcMoiR_cFi */
|
||
BOOL daNpcMoiR_c::EvCut_Appear(int i_cutIndex) {
|
||
dEvent_manager_c* eventManager = &dComIfGp_getEventManager();
|
||
int* cutName = (int*)eventManager->getMyNowCutName(i_cutIndex);
|
||
|
||
if (eventManager->getIsAddvance(i_cutIndex)) {
|
||
switch (*cutName) {
|
||
case '0001':
|
||
break;
|
||
|
||
case '0002':
|
||
case '0003':
|
||
case '0004':
|
||
case '0005':
|
||
initTalk(mMsgNo, NULL);
|
||
mMsgTimer = 0;
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(2211, 0);
|
||
break;
|
||
}
|
||
}
|
||
|
||
int i_expression, i_motion;
|
||
int msgTimer = mMsgTimer;
|
||
if (ctrlMsgAnm(i_expression, i_motion, this, FALSE)) {
|
||
setExpression(i_expression, -1.0f);
|
||
setMotion(i_motion, -1.0f, 0);
|
||
} else if (msgTimer != 0 && mMsgTimer == 0) {
|
||
setExpressionTalkAfter();
|
||
}
|
||
|
||
switch (*cutName) {
|
||
case '0001':
|
||
return TRUE;
|
||
|
||
case '0002':
|
||
case '0003':
|
||
case '0004':
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
return TRUE;
|
||
}
|
||
break;
|
||
|
||
case '0005':
|
||
if (fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
OS_REPORT("二択分岐 %s\n", mFlow.getChoiceNo() == 0 ? "はい" : "いいえ");
|
||
|
||
if (mFlow.getChoiceNo() == 0) {
|
||
mOrderEvtNo = 3;
|
||
changeEvent(l_arcNames[2], l_evtNames[mOrderEvtNo], 1, 0xFFFF);
|
||
}
|
||
return TRUE;
|
||
}
|
||
} else {
|
||
if (step(fopAcM_searchPlayerAngleY(this), 1)) {
|
||
setMotion(MOT_WAIT_C, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(2259, 0);
|
||
break;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
/* 80A8081C-80A81044 00479C 0828+00 1/0 0/0 0/0 .text EvCut_Appear2__11daNpcMoiR_cFi */
|
||
BOOL daNpcMoiR_c::EvCut_Appear2(int i_cutIndex) {
|
||
ni_class* actor_p;
|
||
dEvent_manager_c* eventManager = &dComIfGp_getEventManager();
|
||
int* cutName = (int*)eventManager->getMyNowCutName(i_cutIndex);
|
||
|
||
if (eventManager->getIsAddvance(i_cutIndex)) {
|
||
switch (*cutName) {
|
||
case '0001':
|
||
case '0005':
|
||
setLookMode(LOOK_PLAYER_TALK);
|
||
initTalk(mMsgNo, NULL);
|
||
mMsgTimer = 0;
|
||
break;
|
||
|
||
case '0002':
|
||
setLookMode(LOOK_NONE);
|
||
break;
|
||
|
||
case '0003':
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_WAIT_B, 0.0f, 0);
|
||
break;
|
||
|
||
case '0004':
|
||
setExpression(EXPR_NONE, -1.0f);
|
||
setMotion(MOT_TAKAJO_NI, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
actor_p = (ni_class*)fopAcM_SearchByName(PROC_NI);
|
||
|
||
if (actor_p != NULL) {
|
||
actor_p->changeMode();
|
||
}
|
||
|
||
field_0xdfc = 90;
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(2305, 0);
|
||
break;
|
||
}
|
||
}
|
||
|
||
int i_expression, i_motion;
|
||
int msgTimer = mMsgTimer;
|
||
if (ctrlMsgAnm(i_expression, i_motion, this, FALSE)) {
|
||
setExpression(i_expression, -1.0f);
|
||
setMotion(i_motion, -1.0f, 0);
|
||
} else if (msgTimer != 0 && mMsgTimer == 0) {
|
||
setExpressionTalkAfter();
|
||
}
|
||
|
||
switch (*cutName) {
|
||
case '0001':
|
||
if (fopAcM_searchPlayerAngleY(this) == mCurAngle.y) {
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
return TRUE;
|
||
}
|
||
break;
|
||
}
|
||
|
||
if (step(fopAcM_searchPlayerAngleY(this), 1)) {
|
||
setMotion(MOT_WAIT_C, -1.0f, 0);
|
||
mTurnMode = 0;
|
||
}
|
||
break;
|
||
|
||
case '0002':
|
||
if (step(0x1221, 1)) {
|
||
setExpression(EXPR_F_HOLD_S, -1.0f);
|
||
setMotion(MOT_FUE, -1.0f, 0);
|
||
}
|
||
|
||
if (mMotion != MOT_FUE) {
|
||
break;
|
||
}
|
||
|
||
if (mMotionPhase == 0 && mpMorf->checkFrame(25.0f)) {
|
||
mDoAud_seStart(Z2SE_PLAY_REED_TOBIKUSA, NULL, 0, 0);
|
||
break;
|
||
}
|
||
|
||
if (mMotionPhase > 0) {
|
||
return TRUE;
|
||
}
|
||
break;
|
||
|
||
case '0003':
|
||
return TRUE;
|
||
|
||
case '0004':
|
||
if (cLib_calcTimer<int>((int*)&field_0xdfc) == 0) {
|
||
return TRUE;
|
||
}
|
||
break;
|
||
|
||
case '0005':
|
||
if (talkProc(NULL, TRUE, NULL)) {
|
||
actor_p = (ni_class*)fopAcM_SearchByName(PROC_NI);
|
||
|
||
if (actor_p != NULL) {
|
||
actor_p->changeMode();
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
JUT_ASSERT(2363, 0);
|
||
break;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
/* 80A81044-80A81064 004FC4 0020+00 1/0 0/0 0/0 .text daNpcMoiR_Create__FPv */
|
||
static int daNpcMoiR_Create(void* a_this) {
|
||
daNpcMoiR_c* i_this = (daNpcMoiR_c*)a_this;
|
||
return i_this->Create();
|
||
}
|
||
|
||
/* 80A81064-80A81084 004FE4 0020+00 1/0 0/0 0/0 .text daNpcMoiR_Delete__FPv */
|
||
static int daNpcMoiR_Delete(void* a_this) {
|
||
daNpcMoiR_c* i_this = (daNpcMoiR_c*)a_this;
|
||
return i_this->Delete();
|
||
}
|
||
|
||
/* 80A81084-80A810A4 005004 0020+00 1/0 0/0 0/0 .text daNpcMoiR_Execute__FPv */
|
||
static int daNpcMoiR_Execute(void* a_this) {
|
||
daNpcMoiR_c* i_this = (daNpcMoiR_c*)a_this;
|
||
return i_this->Execute();
|
||
}
|
||
|
||
/* 80A810A4-80A810C4 005024 0020+00 1/0 0/0 0/0 .text daNpcMoiR_Draw__FPv */
|
||
static int daNpcMoiR_Draw(void* a_this) {
|
||
daNpcMoiR_c* i_this = (daNpcMoiR_c*)a_this;
|
||
return i_this->Draw();
|
||
}
|
||
|
||
/* 80A810C4-80A810CC 005044 0008+00 1/0 0/0 0/0 .text daNpcMoiR_IsDelete__FPv */
|
||
static int daNpcMoiR_IsDelete(void* a_this) {
|
||
return 1;
|
||
}
|
||
|
||
/* 80A810FC-80A81274 00507C 0178+00 1/0 0/0 0/0 .text setParam__11daNpcMoiR_cFv */
|
||
void daNpcMoiR_c::setParam() {
|
||
searchActors();
|
||
|
||
attention_info.flags = 10;
|
||
|
||
if (mMode == MODE_SIT) {
|
||
attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(3, 5);
|
||
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
|
||
attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(2, 5);
|
||
} else {
|
||
attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcMoiR_Param_c::m.common.attention_distance, daNpcMoiR_Param_c::m.common.attention_angle);
|
||
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
|
||
attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcMoiR_Param_c::m.common.talk_distance, daNpcMoiR_Param_c::m.common.talk_angle);
|
||
|
||
if (mMode == MODE_STAND && daPy_py_c::checkNowWolf()) {
|
||
attention_info.flags = 0;
|
||
}
|
||
}
|
||
|
||
#ifdef DEBUG
|
||
scale.set(daNpcMoiR_Param_c::m.common.scale, daNpcMoiR_Param_c::m.common.scale, daNpcMoiR_Param_c::m.common.scale);
|
||
mAcchCir.SetWallR(daNpcMoiR_Param_c::m.common.width);
|
||
mAcchCir.SetWallH(daNpcMoiR_Param_c::m.common.knee_length);
|
||
gravity = daNpcMoiR_Param_c::m.common.gravity;
|
||
#endif
|
||
}
|
||
|
||
/* 80A81274-80A815D4 0051F4 0360+00 1/0 0/0 0/0 .text main__11daNpcMoiR_cFv */
|
||
BOOL daNpcMoiR_c::main() {
|
||
if (mAction) {
|
||
(this->*mAction)(NULL);
|
||
}
|
||
|
||
if (dComIfGp_event_runCheck() != 0 && !eventInfo.checkCommandTalk() && field_0xdf8 != -1) {
|
||
dComIfGp_event_setItemPartnerId(field_0xdf8);
|
||
field_0xdf8 = -1;
|
||
}
|
||
|
||
playExpression();
|
||
playMotion();
|
||
checkHeadGear();
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
/* 80A815D4-80A818B4 005554 02E0+00 1/1 0/0 0/0 .text checkHeadGear__11daNpcMoiR_cFv */
|
||
void daNpcMoiR_c::checkHeadGear() {
|
||
J3DModelData* mdlData_p = mpMorf->getModel()->getModelData();
|
||
J3DAnmTransform* anm = mpMorf->getAnm();
|
||
|
||
if (mMode == MODE_SIT) {
|
||
if (anm == getTrnsfrmKeyAnmP(l_arcNames[1], l_bckGetParamList[30].fileIdx)) {
|
||
if (mpMorf->checkFrame(14.0f)) {
|
||
mWearHelmet = false;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->hide();
|
||
}
|
||
} else if (anm == getTrnsfrmKeyAnmP(l_arcNames[1], l_bckGetParamList[31].fileIdx)) {
|
||
mWearHelmet = false;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->hide();
|
||
} else if (anm == getTrnsfrmKeyAnmP(l_arcNames[1], l_bckGetParamList[32].fileIdx)) {
|
||
mWearHelmet = false;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->hide();
|
||
} else if (anm == getTrnsfrmKeyAnmP(l_arcNames[1], l_bckGetParamList[33].fileIdx) && mpMorf->checkFrame(24.0f)) {
|
||
mWearHelmet = true;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->show();
|
||
}
|
||
} else if (mMode == MODE_STAND) {
|
||
if (anm == getTrnsfrmKeyAnmP(l_arcNames[2], l_bckGetParamList[24].fileIdx)) {
|
||
if (mpMorf->checkFrame(15.0f)) {
|
||
mWearHelmet = false;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->hide();
|
||
}
|
||
} else if (anm == getTrnsfrmKeyAnmP(l_arcNames[2], l_bckGetParamList[25].fileIdx)) {
|
||
mWearHelmet = false;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->hide();
|
||
} else if (anm == getTrnsfrmKeyAnmP(l_arcNames[2], l_bckGetParamList[26].fileIdx)) {
|
||
mWearHelmet = false;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->hide();
|
||
} else if (anm == getTrnsfrmKeyAnmP(l_arcNames[2], l_bckGetParamList[27].fileIdx) && mpMorf->checkFrame(33.0f)) {
|
||
mWearHelmet = true;
|
||
mdlData_p->getMaterialNodePointer(MAT_MOIR_HEADGEAR_M)->getShape()->show();
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 80A8210C-80A821E0 00608C 00D4+00 1/0 0/0 0/0 .text ctrlBtk__11daNpcMoiR_cFv */
|
||
// NONMATCHING inlining issues
|
||
inline BOOL daNpcMoiR_c::ctrlBtk() {
|
||
if (mpMatAnm != NULL) {
|
||
J3DAnmTextureSRTKey* anm = NULL;
|
||
anm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx);
|
||
|
||
if (anm == mBtkAnm.getBtkAnm()) {
|
||
mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f * -1.0f);
|
||
mpMatAnm->setNowOffsetY(cM_ssin(mEyeAngle.x) * 0.2f);
|
||
mpMatAnm->onEyeMoveFlag();
|
||
return TRUE;
|
||
}
|
||
|
||
mpMatAnm->offEyeMoveFlag();
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
/* 80A821E0-80A825A0 006160 03C0+00 1/0 0/0 0/0 .text setAttnPos__11daNpcMoiR_cFv */
|
||
inline void daNpcMoiR_c::setAttnPos() {
|
||
if (mLookMode == LOOK_RESET) {
|
||
for (int i = 0; i < 3; i++) {
|
||
mLookatAngle[i].setall(0);
|
||
}
|
||
}
|
||
|
||
setMtx();
|
||
lookat();
|
||
|
||
cXyz sp40;
|
||
if (mMode == MODE_SIT) {
|
||
sp40.set(-10.0f, -15.0f, -0.15f);
|
||
} else {
|
||
sp40.set(-15.0f, 10.0f, 2.0f);
|
||
}
|
||
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HEAD));
|
||
mDoMtx_stack_c::multVecZero(&mHeadPos);
|
||
mDoMtx_stack_c::multVec(&sp40, &eyePos);
|
||
sp40.x = 0.0f;
|
||
mDoMtx_stack_c::multVec(&sp40, &sp40);
|
||
mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp40);
|
||
mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp40);
|
||
|
||
cXyz* attnPos = mLookat.getAttnPos();
|
||
if (attnPos != NULL) {
|
||
cXyz sp4c = *attnPos - eyePos;
|
||
mEyeAngle.y = -(mLookatAngle[2].y + mCurAngle.y);
|
||
mEyeAngle.y += cM_atan2s(sp4c.x, sp4c.z);
|
||
mEyeAngle.x = mHeadAngle.x - cM_atan2s(sp4c.y, sp4c.absXZ());
|
||
|
||
if (mEyeAngle.y > daNpcMoiR_Param_c::m.horizontal_eye_movement_range) {
|
||
mEyeAngle.y = daNpcMoiR_Param_c::m.horizontal_eye_movement_range;
|
||
} else if (mEyeAngle.y < -daNpcMoiR_Param_c::m.horizontal_eye_movement_range) {
|
||
mEyeAngle.y = -daNpcMoiR_Param_c::m.horizontal_eye_movement_range;
|
||
}
|
||
} else {
|
||
mEyeAngle.y = 0;
|
||
mEyeAngle.x = 0;
|
||
}
|
||
|
||
attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcMoiR_Param_c::m.common.attention_offset, mHeadPos.z);
|
||
cXyz sp58;
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_BACKBONE2));
|
||
mDoMtx_stack_c::multVecZero(&sp58);
|
||
sp58.y = current.pos.y;
|
||
field_0xca0.SetC(sp58);
|
||
field_0xca0.SetH(daNpcMoiR_Param_c::m.common.height);
|
||
|
||
f32 fVar1;
|
||
if (mMode == MODE_SIT) {
|
||
fVar1 = 40.0f;
|
||
} else {
|
||
fVar1 = daNpcMoiR_Param_c::m.common.width;
|
||
}
|
||
|
||
field_0xca0.SetR(fVar1);
|
||
dComIfG_Ccsp()->Set(&field_0xca0);
|
||
}
|
||
|
||
/* 80A82878-80A82900 0067F8 0088+00 1/0 0/0 0/0 .text drawOtherMdls__11daNpcMoiR_cFv */
|
||
void daNpcMoiR_c::drawOtherMdls() {
|
||
if (!mWearHelmet) {
|
||
g_env_light.setLightTevColorType_MAJI(mpHeadgearModel, &tevStr);
|
||
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HANDR));
|
||
mpHeadgearModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||
mDoExt_modelUpdateDL(mpHeadgearModel);
|
||
}
|
||
}
|
||
|
||
/* 80A82900-80A82908 006880 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpcMoiR_cFv */
|
||
BOOL daNpcMoiR_c::drawDbgInfo() {
|
||
return FALSE;
|
||
}
|
||
|
||
/* 80A83C38-80A83C58 -00001 0020+00 1/0 0/0 0/0 .data daNpcMoiR_MethodTable */
|
||
static actor_method_class daNpcMoiR_MethodTable = {
|
||
(process_method_func)daNpcMoiR_Create,
|
||
(process_method_func)daNpcMoiR_Delete,
|
||
(process_method_func)daNpcMoiR_Execute,
|
||
(process_method_func)daNpcMoiR_IsDelete,
|
||
(process_method_func)daNpcMoiR_Draw,
|
||
};
|
||
|
||
/* 80A83C58-80A83C88 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_MOIR */
|
||
extern actor_process_profile_definition g_profile_NPC_MOIR = {
|
||
fpcLy_CURRENT_e, // mLayerID
|
||
7, // mListID
|
||
fpcPi_CURRENT_e, // mListPrio
|
||
PROC_NPC_MOIR, // mProcName
|
||
&g_fpcLf_Method.base, // sub_method
|
||
sizeof(daNpcMoiR_c), // mSize
|
||
0, // mSizeOther
|
||
0, // mParameters
|
||
&g_fopAc_Method.base, // sub_method
|
||
415, // mPriority
|
||
&daNpcMoiR_MethodTable, // sub_method
|
||
0x00040100, // mStatus
|
||
fopAc_NPC_e, // mActorType
|
||
fopAc_CULLBOX_CUSTOM_e, // cullType
|
||
};
|