/** * @file d_a_npc_prayer.cpp * */ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_prayer.h" #include "d/d_com_inf_game.h" static NPC_PRAY_HIO_CLASS l_HIO; static struct { int resIdx; int anmMode; int arcnameIdx; } l_bckGetParamList[] = { {5, 0, 0}, // pray {6, 0, 0}, // pray talk {31, 2, 1}, // wait_a {25, 0, 1}, // talk a {26, 2, 1}, // talk b {30, 2, 1}, // to wolf }; enum daNpcPray_MOTION_e { MOTION_WAIT_e, MOTION_PRAY_e, MOTION_PRAYTALK_e, MOTION_WOLF_e, }; static char* l_arcNames[2] = { "Prayer", "Wgeneral", }; static char* l_evtNames[2] = { NULL, "GET_HEART", }; static char* l_myName = "Prayer"; daNpcPray_c::EvtSeq daNpcPray_c::mEvtSeqList[] = { NULL, &daNpcPray_c::_Evt_GetHeart, }; const daNpcPray_HIOParam daNpcPray_Param_c::m = { 55.0f, -3.0f, 1.0f, 500.0f, 255.0f, 140.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, 2, 6, 3, 6, 60.0f, 500.0f, 300.0f, -300.0f, 60, 0, 0, 0, 0, false, false, }; #if DEBUG daNpcPray_HIO_c::daNpcPray_HIO_c() { m = daNpcPray_Param_c::m; } void daNpcPray_HIO_c::genMessage(JORMContext* ctx) { // NONMATCHING } #endif daNpcPray_c::daNpcPray_c() {} daNpcPray_c::~daNpcPray_c() { for (int i = 0; i < 2; i++) { dComIfG_resDelete(&mPhase[i], l_arcNames[i]); } fopAc_ac_c* actor = mActorMngr[1].getActorP(); if (actor != NULL) { fopAcM_delete(actor); mActorMngr[1].remove(); } if (heap != NULL) { mAnm_p->stopZelAnime(); } #if DEBUG if (mpHIO != NULL) { mpHIO->removeHIO(); } #endif } int daNpcPray_c::Create() { fopAcM_ct(this, daNpcPray_c); mMessageNo = getMessageNo(); int phase_state = cPhs_ERROR_e; for (int i = 0; i < 2; i++) { phase_state = dComIfG_resLoad(&mPhase[i], l_arcNames[i]); if (phase_state != cPhs_COMPLEATE_e) { return phase_state; } } if (phase_state == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x1980)) { return cPhs_ERROR_e; } J3DModelData* modelData = mAnm_p->getModel()->getModelData(); fopAcM_SetMtx(this, mAnm_p->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -60.0f, -10.0f, -60.0f, 60.0f, 220.0f, 60.0f); mSound.init(¤t.pos, &eyePos, 3, 1); mSound.setMdlType(25, 0, 0); #if DEBUG mpHIO = &l_HIO; mpHIO->entryHIO("祈祷師"); #endif mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->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.CrrPos(dComIfG_Bgsp()); mCcStts.Init(mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); mCcCyl.SetTgType(0); mCcCyl.SetTgSPrm(0); mCcCyl.SetH(mpHIO->m.common.height); mCcCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); setEnvTevColor(); setRoomNo(); reset(); Execute(); } return phase_state; } int daNpcPray_c::CreateHeap() { J3DModelData* mdlData_p = (J3DModelData*)dComIfG_getObjectRes(l_arcNames[0], 9); JUT_ASSERT(313, NULL != mdlData_p); mAnm_p = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, 0x11000084); if (mAnm_p != NULL && mAnm_p->getModel() == NULL) { mAnm_p->stopZelAnime(); mAnm_p = NULL; } if (mAnm_p == NULL) { return 0; } cXyz scale(1.0f, 1.0999999f, 1.0f); mAnm_p->offTranslate(); mAnm_p->setTranslateScale(scale); J3DModel* model_p = mAnm_p->getModel(); for (u16 i = 0; i < mdlData_p->getJointNum(); i++) { mdlData_p->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); } model_p->setUserArea((uintptr_t)this); setMotion(MOTION_WAIT_e, -1.0f, 0); return 1; } int daNpcPray_c::Delete() { fopAcM_GetID(this); this->~daNpcPray_c(); return 1; } int daNpcPray_c::Execute() { execute(); return 1; } int daNpcPray_c::Draw() { draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); return 1; } int daNpcPray_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { int jnt_no = i_joint->getJntNo(); int spC[] = {1, 2, 3}; if (jnt_no == 0) { mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(1)); mDoMtx_stack_c::multVecZero(&mLookatPos[0]); mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(2)); mDoMtx_stack_c::multVecZero(&mLookatPos[1]); mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(3)); mDoMtx_stack_c::multVecZero(&mLookatPos[2]); } mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no)); switch (jnt_no) { case 1: case 2: case 3: setLookatMtx(jnt_no, spC, mpHIO->m.common.neck_rotation_ratio); break; } i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); return 1; } int daNpcPray_c::createHeapCallBack(fopAc_ac_c* i_this) { return ((daNpcPray_c*)i_this)->CreateHeap(); } int daNpcPray_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { if (param_1 == 0) { J3DModel* model_p = j3dSys.getModel(); daNpcPray_c* a_this = (daNpcPray_c*)model_p->getUserArea(); if (a_this != NULL) { a_this->ctrlJoint(i_joint, model_p); } } return 1; } void daNpcPray_c::setParam() { attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->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(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); attention_info.flags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); #if DEBUG scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); mAcchCir.SetWallR(mpHIO->m.common.width); mAcchCir.SetWallH(mpHIO->m.common.knee_length); gravity = mpHIO->m.common.gravity; #endif } BOOL daNpcPray_c::main() { if (mAction != NULL) { (this->*mAction)(NULL); } playMotion(); return FALSE; } void daNpcPray_c::setAttnPos() { if (mLookMode == LOOK_RESET) { for (int i = 0; i < 3; i++) { mLookatAngle[i].setall(0); } } daNpcF_c::setMtx(); lookat(); cXyz sp14(10.0f, 15.0f, 0.0f); mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(3)); mDoMtx_stack_c::multVecZero(&mHeadPos); mDoMtx_stack_c::multVec(&sp14, &eyePos); sp14.x = 0.0f; mDoMtx_stack_c::multVec(&sp14, &sp14); mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &sp14); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &sp14); attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz cyl_center; mDoMtx_stack_c::copy(mAnm_p->getModel()->getAnmMtx(1)); mDoMtx_stack_c::multVecZero(&cyl_center); cyl_center.y = current.pos.y; mCcCyl.SetC(cyl_center); #if DEBUG mCcCyl.SetH(mpHIO->m.common.height); mCcCyl.SetR(mpHIO->m.common.width); #endif dComIfG_Ccsp()->Set(&mCcCyl); } void daNpcPray_c::setMotionAnm(int i_idx, f32 i_morf) { J3DAnmTransformKey* bck_p = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcnameIdx], l_bckGetParamList[i_idx].resIdx); int anmMode = l_bckGetParamList[i_idx].anmMode; mAnmFlags &= ~(ANM_PLAY_MORF | ANM_PAUSE_MORF); if (bck_p != NULL && setMcaMorfAnm(bck_p, 1.0f, i_morf, anmMode, 0, -1)) { mAnmFlags |= (ANM_PLAY_MORF | ANM_PAUSE_MORF); mMotionLoops = 0; } } void daNpcPray_c::setMotion(int i_motion, f32 i_morf, int param_2) { s16 var_r31 = i_motion; if ((param_2 != 0 || mMotion != var_r31) && i_motion >= 0 && i_motion < 4) { mMotion = var_r31; mMotionMorfOverride = i_morf; mMotionPrevPhase = -1; mMotionPhase = 0; field_0xe0a = 0; } } BOOL daNpcPray_c::drawDbgInfo() { return false; } void daNpcPray_c::reset() { initialize(); mLookat.initialize(); for (int i = 0; i < 2; i++) { mActorMngr[i].initialize(); } field_0xdfc = 0; field_0xe00 = 0; mAction = NULL; mLookMode = -1; mActionMode = 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; setAction(&daNpcPray_c::wait); mMotionMorfOverride = 0.0f; } void daNpcPray_c::playMotion() { daNpcF_anmPlayData wait_phase1 = {2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* wait_m[] = {&wait_phase1}; daNpcF_anmPlayData pray_phase1 = {0, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData pray_phase2 = {2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pray_m[] = {&pray_phase1, &pray_phase2}; daNpcF_anmPlayData praytalk_phase1 = {1, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData praytalk_phase2 = {2, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* praytalk_m[] = {&praytalk_phase1, &praytalk_phase2}; daNpcF_anmPlayData wolf_phase1 = {5, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* wolf_m[] = {&wolf_phase1}; daNpcF_anmPlayData** anmData_p[] = {wait_m, pray_m, praytalk_m, wolf_m}; if (mMotion >= 0 && mMotion < 4) { field_0xe0a = mMotionPhase; playMotionAnm(anmData_p); } } int daNpcPray_c::setAction(bool (daNpcPray_c::*i_action)(void*)) { mActionMode = 3; if (mAction != NULL) { (this->*mAction)(NULL); } mActionMode = 0; mAction = i_action; if (mAction != NULL) { (this->*mAction)(NULL); } return 1; } void daNpcPray_c::setLookMode(int i_mode) { if (i_mode >= 0 && i_mode < 4 && i_mode != mLookMode) { mLookMode = i_mode; } } void daNpcPray_c::lookat() { daPy_py_c* player = NULL; J3DModel* model_p = mAnm_p->getModel(); int var_r28 = 0; f32 body_angleX_min = mpHIO->m.common.body_angleX_min; f32 body_angleX_max = mpHIO->m.common.body_angleX_max; f32 body_angleY_min = mpHIO->m.common.body_angleY_min; f32 body_angleY_max = mpHIO->m.common.body_angleY_max; f32 head_angleX_min = mpHIO->m.common.head_angleX_min; f32 head_angleX_max = mpHIO->m.common.head_angleX_max; f32 head_angleY_min = mpHIO->m.common.head_angleY_min; f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 temp_r26 = mCurAngle.y - mOldAngle.y; cXyz sp30[] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; csXyz* sp24[] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; cXyz sp18; switch (mLookMode) { case LOOK_NONE: break; case LOOK_RESET: var_r28 = 1; break; case LOOK_PLAYER: case LOOK_PLAYER_TALK: player = daPy_getPlayerActorClass(); if (mLookMode == LOOK_PLAYER_TALK) { head_angleY_min = -80.0f; head_angleY_max = 80.0f; } 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(NULL); } mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, 0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, mCurAngle.y, sp30); mLookat.calc(this, model_p->getBaseTRMtx(), sp24, var_r28, temp_r26, 0); } bool daNpcPray_c::step(s16 i_targetAngle, int) { if (mTurnMode == 0) { mTurnTargetAngle = i_targetAngle; mTurnAmount = 0; if (mCurAngle.y == mTurnTargetAngle) { mTurnMode++; } current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; mTurnMode++; } else if (mTurnMode == 1) { if (turn(mTurnTargetAngle, 15.0f, 0)) { shape_angle.y = current.angle.y; mCurAngle.y = current.angle.y; mOldAngle.y = current.angle.y; mTurnMode++; } else { shape_angle.y = current.angle.y; mCurAngle.y = current.angle.y; } } return mTurnMode > 1; } bool daNpcPray_c::chkFindPlayer() { if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); return 0; } bool find_player; if (mActorMngr[0].getActorP() == NULL) { find_player = chkPlayerInSpeakArea(this); } else { find_player = chkPlayerInTalkArea(this); } if (find_player) { mActorMngr[0].entry(daPy_getPlayerActorClass()); } else { mActorMngr[0].remove(); } return find_player; } bool daNpcPray_c::wait(void*) { switch (mActionMode) { case 0: setMotion(MOTION_WAIT_e, -1.0f, 0); speedF = 0.0f; mActionMode = 2; break; case 2: chkFindPlayer(); if (mActorMngr[0].getActorP() != NULL) { setLookMode(2); } else { setLookMode(0); if (home.angle.y != mCurAngle.y && step(home.angle.y, 1)) { setMotion(MOTION_WAIT_e, -1.0f, 0); mTurnMode = 0; } } if (dComIfGp_event_runCheck()) { if (eventInfo.checkCommandTalk()) { if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { setAction(&daNpcPray_c::talk); } } else if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) { setAction(&daNpcPray_c::demo); } } else { if (!dKy_darkworld_check() && daPy_py_c::checkNowWolf()) { f32 search_range = pow(500.0f, 2.0f); if (fopAcM_searchPlayerDistanceXZ2(this) < search_range) { setAction(&daNpcPray_c::fear); break; } } if (mOrderEvtNo != 0) { eventInfo.setArchiveName(l_arcNames[0]); } orderEvent(field_0xe0e, l_evtNames[mOrderEvtNo], 0xFFFF, 40, 0xFF, 1); } break; case 1: case 3: JUT_ASSERT(1076, FALSE); break; } return 1; } bool daNpcPray_c::fear(void*) { switch (mActionMode) { case 0: setMotion(MOTION_WOLF_e, -1.0f, 0); speedF = 0.0f; mSound.playVoice(2); dComIfGs_onSaveDunSwitch(60); mActionMode = 2; break; case 2: OS_REPORT("-------------prayer frame=%f\n", mAnm_p->getFrame()); if (1.0f == mAnm_p->getFrame()) { OS_REPORT("-------------prayer fear se start!!\n"); mSound.playVoice(2); } break; case 1: case 3: JUT_ASSERT(1076, FALSE); break; } return 1; } bool daNpcPray_c::talk(void*) { int sp20 = 0; bool var_r28 = 0; switch (mActionMode) { case 0: initTalk(mMessageNo, NULL); mMsgTimer = 0; field_0xe0e = 0; setLookMode(3); mActionMode = 2; break; case 2: if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { if (talkProc(NULL, TRUE, NULL)) { mActorMngr[0].entry(daPy_getPlayerActorClass()); int itemNo = 0; u16 eventID = mFlow.getEventId(&itemNo); // "at talk end EventID=%d ItemNo=%d\n" OS_REPORT("会話終了時 イベントID=%d アイテムNo=%d\n", eventID, itemNo); if (eventID == 20) { // "full offering amount reached!\n" OS_REPORT("お布施額が満額になりました!\n"); daNpcF_onEvtBit(294); mOrderEvtNo = 1; changeEvent("Prayer", l_evtNames[mOrderEvtNo], 2, 0xFFFF); setAction(&daNpcPray_c::demo); return 1; } setAction(&daNpcPray_c::wait); var_r28 = 1; break; } int expression; int motion; int timer = mMsgTimer; if (ctrlMsgAnm(expression, motion, this, FALSE)) { setMotion(motion, -1.0f, 0); } break; } if (step(fopAcM_searchPlayerAngleY(this), 1)) { setMotion(MOTION_PRAYTALK_e, -1.0f, 0); mTurnMode = 0; } break; case 3: if (field_0x9ec == 0) { dComIfGp_event_reset(); } break; default: JUT_ASSERT(1209, FALSE); } return var_r28; } bool daNpcPray_c::demo(void*) { dEvent_manager_c& evtmgr = dComIfGp_getEventManager(); int var_r25 = 0; switch (mActionMode) { case 0: setMotion(MOTION_WAIT_e, -1.0f, 0); mActionMode = 2; break; case 2: if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) { dEvent_manager_c& evtmgr = dComIfGp_getEventManager(); const int staffID = evtmgr.getMyStaffId(l_myName, NULL, 0); if (staffID != -1) { mStaffID = staffID; JUT_ASSERT(1243, NULL != mEvtSeqList[mOrderEvtNo]); if ((this->*mEvtSeqList[mOrderEvtNo])(staffID)) { evtmgr.cutEnd(staffID); var_r25 = 1; } } if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && evtmgr.endCheck(mEventIdx)) { switch (mOrderEvtNo) { case 1: OS_REPORT("------------------heart remove!!\n"); fopAc_ac_c* heart_actor_p = mActorMngr[1].getActorP(); if (heart_actor_p != NULL) { fopAcM_delete(heart_actor_p); mActorMngr[1].remove(); } } dComIfGp_event_reset(); mOrderEvtNo = 0; mEventIdx = -1; setAction(&daNpcPray_c::wait); } } break; case 3: JUT_ASSERT(1280, FALSE); break; } return 1; } fpc_ProcID daNpcPray_c::createHeart() { cXyz pos(-4142.7036f, 850.0f, -569.3754f); csXyz rot(0, 0, 0); cXyz size(0.3f, 0.3f, 0.3f); cXyz offset(0.0f, 0.0f, 95.0f); mDoMtx_stack_c::ZXYrotS(rot); mDoMtx_stack_c::multVec(&offset, &offset); pos += offset; return fopAcM_createItemForBoss(&pos, fpcNm_ITEM_KAKERA_HEART, fopAcM_GetRoomNo(this), &rot, &size, 0.0f, 0.0f, 0); } BOOL daNpcPray_c::_Evt_GetHeart(int i_staffID) { dEvent_manager_c& evtmgr = dComIfGp_getEventManager(); int cutId = -1; int* cutId_p = dComIfGp_evmng_getMyIntegerP(i_staffID, "cutId"); if (cutId_p != NULL) { cutId = *cutId_p; } else { return 1; } if (evtmgr.getIsAddvance(i_staffID)) { _Evt_GetHeart_CutInit(cutId); } return _Evt_GetHeart_CutMain(cutId); } BOOL daNpcPray_c::_Evt_GetHeart_CutInit(const int& i_cutId) { switch (i_cutId) { case 10: break; case 20: { fopAc_ac_c* heart_actor_p = mActorMngr[1].getActorP(); if (heart_actor_p != NULL) { fopAcM_SetSpeedF(heart_actor_p, 0.0f); fopAcM_SetSpeed(heart_actor_p, 0.0f, 0.0f, 0.0f); fopAcM_SetGravity(heart_actor_p, -3.0f); fopAcM_SetAngle(heart_actor_p, 0, 0, 0); fopAcM_SetMaxFallSpeed(heart_actor_p, -4.0f); } break; } default: JUT_ASSERT(1396, FALSE); break; } return 1; } BOOL daNpcPray_c::_Evt_GetHeart_CutMain(int const& i_cutId) { BOOL var_r28 = 0; switch (i_cutId) { case 10: if (mActorMngr[1].getPId() == fpcM_ERROR_PROCESS_ID_e) { fpc_ProcID heart_pid = createHeart(); if (heart_pid != fpcM_ERROR_PROCESS_ID_e) { mActorMngr[1].entry(heart_pid); fopAc_ac_c* heart_actor_p = mActorMngr[1].getActorP(); if (heart_actor_p != NULL) { fopAcM_SetSpeedF(heart_actor_p, 0.0f); fopAcM_SetSpeed(heart_actor_p, 0.0f, 0.0f, 0.0f); fopAcM_SetGravity(heart_actor_p, 0.0f); fopAcM_SetAngle(heart_actor_p, 0, 0, 0); fopAcM_SetMaxFallSpeed(heart_actor_p, -4.0f); var_r28 = 1; } } } else { fopAc_ac_c* heart_actor_p = mActorMngr[1].getActorP(); if (heart_actor_p != NULL) { fopAcM_SetSpeedF(heart_actor_p, 0.0f); fopAcM_SetSpeed(heart_actor_p, 0.0f, 0.0f, 0.0f); fopAcM_SetGravity(heart_actor_p, 0.0f); fopAcM_SetAngle(heart_actor_p, 0, 0, 0); fopAcM_SetMaxFallSpeed(heart_actor_p, -4.0f); var_r28 = 1; } } break; case 20: { fopAc_ac_c* heart_actor_p = mActorMngr[1].getActorP(); if (heart_actor_p != NULL) { fopAcM_posMoveF(heart_actor_p, NULL); cXyz& heart_pos = fopAcM_GetPosition(heart_actor_p); if (heart_pos.y < 110.0f) { heart_pos.y = -300.0f; var_r28 = 1; } } break; } default: JUT_ASSERT(1474, FALSE); var_r28 = 1; break; } return var_r28; } static int daNpcPray_Create(void* i_this) { return ((daNpcPray_c*)i_this)->Create(); } static int daNpcPray_Delete(void* i_this) { return ((daNpcPray_c*)i_this)->Delete(); } static int daNpcPray_Execute(void* i_this) { return ((daNpcPray_c*)i_this)->Execute(); } static int daNpcPray_Draw(void* i_this) { return ((daNpcPray_c*)i_this)->Draw(); } static int daNpcPray_IsDelete(void* i_this) { return 1; } static actor_method_class daNpcPray_MethodTable = { (process_method_func)daNpcPray_Create, (process_method_func)daNpcPray_Delete, (process_method_func)daNpcPray_Execute, (process_method_func)daNpcPray_IsDelete, (process_method_func)daNpcPray_Draw, }; actor_process_profile_definition g_profile_NPC_PRAYER = { fpcLy_CURRENT_e, // mLayerID 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_NPC_PRAYER, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(daNpcPray_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 419, // mPriority &daNpcPray_MethodTable, // sub_method 0x00044187, // mStatus fopAc_NPC_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType };