/** * @file d_a_e_df.cpp * */ #include "d/dolzel_rel.h" #include "d/actor/d_a_e_df.h" #include "d/actor/d_a_obj_carry.h" #include "f_op/f_op_actor_enemy.h" #include "f_op/f_op_camera_mng.h" class daE_DF_HIO_c : public JORReflexible { public: /* 806A76EC */ daE_DF_HIO_c(); /* 806A9A84 */ virtual ~daE_DF_HIO_c() {}; void genMessage(JORMContext*); /* 0x4 */ s8 mNo; /* 0x8 */ f32 field_0x8; }; STATIC_ASSERT(sizeof(daE_DF_HIO_c) == 0xC); #ifdef DEBUG inline void daE_DF_HIO_c::genMessage(JORMContext* i_ctx) { i_ctx->genLabel("デクレシア", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); i_ctx->genSlider("速度", &field_0x8, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); } #endif /* 806A76EC-806A7710 0000EC 0024+00 1/1 0/0 0/0 .text __ct__12daE_DF_HIO_cFv */ daE_DF_HIO_c::daE_DF_HIO_c() { mNo = -1; field_0x8 = 0.0f; } /* 806A7710-806A7808 000110 00F8+00 1/1 0/0 0/0 .text CreateHeap__8daE_DF_cFv */ int daE_DF_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_DF", 0xD); JUT_ASSERT(161, modelData != 0); mpMorfSO = new mDoExt_McaMorfSO(modelData, NULL, NULL, (J3DAnmTransform*)dComIfG_getObjectRes("E_DF", 10), 2, 1.0f, 0, -1, &mCreatureSound, 0x80000, 0x11000084); if (mpMorfSO == NULL || mpMorfSO->getModel() == NULL) { return 0; } return 1; } /* 806A7808-806A7828 000208 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ static int useHeapInit(fopAc_ac_c* i_this) { daE_DF_c* actor = static_cast(i_this); actor->CreateHeap(); } /* 806A7828-806A78A0 000228 0078+00 1/1 0/0 0/0 .text initCcCylinder__8daE_DF_cFv */ void daE_DF_c::initCcCylinder() { const static dCcD_SrcCyl ccCylSrc = { { {0x0, {{0x0, 0x0, 0xd}, {0xd8fbfdff, 0x3}, 0x75}}, // mObj {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x1}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {0.0f, 0.0f, 0.0f}, // mCenter 150.0f, // mRadius 158.0f // mHeight } // mCyl }; mStts.Init(0xff, 0xff, this); mCyl.Set(ccCylSrc); mCyl.SetStts(&mStts); mCyl.SetC(current.pos); mCyl.OnTgNoHitMark(); mCyl.OnTgIronBallRebound(); } /* 806A78A0-806A78D4 0002A0 0034+00 1/1 0/0 0/0 .text setCcCylinder__8daE_DF_cFv */ void daE_DF_c::setCcCylinder() { dComIfG_Ccsp()->Set(&mCyl); } /* 806A78D4-806A7980 0002D4 00AC+00 6/6 0/0 0/0 .text SetAnm__8daE_DF_cFiiff */ void daE_DF_c::SetAnm(int i_index, int i_attr, f32 i_morf, f32 i_rate) { mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_DF", i_index), i_attr, i_morf, i_rate, 0.0f, -1.0f); mAnim = i_index; } /* 806A7980-806A7B40 000380 01C0+00 2/2 0/0 0/0 .text CameraSet__8daE_DF_cFf */ void daE_DF_c::CameraSet(f32 i_posz) { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); cXyz center = current.pos; center.y += 100.0f; cXyz end; cXyz start = current.pos; start.y += 600.0f; cXyz vec(0.0f, 0.0f, i_posz); dBgS_LinChk line_chk; u16 angle = 0; for (s16 i = 0; i < 4; i++) { cLib_offsetPos(&end, &start, angle, &vec); line_chk.Set(&start, &end, NULL); if (dComIfG_Bgsp().LineCross(&line_chk) == 0) { cLib_offsetPos(&end, ¢er, angle, &vec); end.y += 400.0f; camera->mCamera.Set(center, end, mFovY, 0); mEyePos = end; mCenterPos = center; break; } angle += 0x10000 - 0x8000; } } /* 806A7B40-806A7C3C 000540 00FC+00 2/2 0/0 0/0 .text DemoStart__8daE_DF_cFv */ bool daE_DF_c::DemoStart() { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); dCamera_c* body = dCam_getBody(); if (eventInfo.checkCommandDemoAccrpt() == 0) { fopAcM_orderPotentialEvent(this, 2, 0xffef, 0); eventInfo.onCondition(dEvtCnd_CANDEMO_e); return false; } camera->mCamera.Stop(); mFovY = body->Fovy(); mCenterPos = body->Center(); mEyePos = body->Eye(); camera->mCamera.SetTrimSize(3); return true; } /* 806A7C3C-806A7CE0 00063C 00A4+00 2/2 0/0 0/0 .text SetReleaseCam__8daE_DF_cFv */ void daE_DF_c::SetReleaseCam() { camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); camera->mCamera.Reset(mCenterPos, mEyePos); camera->mCamera.Start(); camera->mCamera.SetTrimSize(0); dComIfGp_event_reset(); } /* 806A7CE0-806A7E30 0006E0 0150+00 1/1 0/0 0/0 .text ctrlJoint__8daE_DF_cFP8J3DJointP8J3DModel */ int daE_DF_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { J3DJoint* joint = i_joint; int jnt_no = joint->getJntNo(); mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no)); switch (jnt_no) { case 0: mDoMtx_stack_c::YrotM(mChaseAngle.x * 0.8f); mDoMtx_stack_c::ZrotM(mChaseAngle.z * 0.8f); break; case 1: mDoMtx_stack_c::YrotM(mChaseAngle.x); mDoMtx_stack_c::ZrotM(mChaseAngle.z); break; } i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); return 1; } /* 806AA0D0-806AA0D4 000008 0004+00 2/2 0/0 0/0 .bss None */ static u8 l_initHIO; /* 806AA0E0-806AA0EC 000018 000C+00 2/2 0/0 0/0 .bss l_HIO */ static daE_DF_HIO_c l_HIO; /* 806A7E30-806A7E7C 000830 004C+00 1/1 0/0 0/0 .text JointCallBack__FP8J3DJointi */ static int JointCallBack(J3DJoint* i_joint, int i_inactive) { if (i_inactive == 0) { J3DModel* model = j3dSys.getModel(); daE_DF_c* actor = (daE_DF_c*)model->getUserArea(); if (actor != NULL) { actor->ctrlJoint(i_joint, model); } } return 1; } /* 806A7E7C-806A8030 00087C 01B4+00 1/1 0/0 0/0 .text s_obj_sub__FPvPv */ static void* s_obj_sub(void* param_1, void* param_2) { cXyz* pos_1 = &fopAcM_GetPosition((fopAc_ac_c*)param_1); cXyz* pos_2 = &fopAcM_GetPosition((fopAc_ac_c*)param_2); cXyz* speed = &fopAcM_GetSpeed((fopAc_ac_c*)param_1); void* actor_2 = param_2; if (fopAcM_IsActor(param_1) && pos_2->absXZ(*pos_1) <= 300.0f + yREG_F(1) && speed->y < -10.0f && pos_1->y - pos_2->y > 170.0f + yREG_F(2) && pos_1->y - pos_2->y < 320.0f + yREG_F(3)) { return param_1; } return NULL; } /* 806A8030-806A8098 000A30 0068+00 1/1 0/0 0/0 .text Link_Eat_Pos__8daE_DF_cFv */ void daE_DF_c::Link_Eat_Pos() { cXyz pos(current.pos.x, current.pos.y + 400.0f + nREG_F(5), current.pos.z); daPy_py_c* player = daPy_getPlayerActorClass(); s16 angle = 0; player->setPlayerPosAndAngle(&pos, angle, 0); } /* 806A8098-806A816C 000A98 00D4+00 1/1 0/0 0/0 .text Set_Angle__8daE_DF_cFP4cXyz */ void daE_DF_c::Set_Angle(cXyz* i_angle) { s16 sVar1 = (s16)cLib_targetAngleY(¤t.pos, i_angle); s16 sVar2 = (0x4000 - cLib_targetAngleX(¤t.pos, i_angle)); sVar1 -= shape_angle.y; mChaseAngle.x = -sVar2 * cM_ssin(sVar1); mChaseAngle.z = sVar2 * cM_scos(sVar1); } /* 806A816C-806A8244 000B6C 00D8+00 1/1 0/0 0/0 .text Obj_Damage__8daE_DF_cFv */ void daE_DF_c::Obj_Damage() { cCcD_ObjHitInf* hit_obj; if (mInvincibilityTimer == 0) { mStts.Move(); if (mCyl.ChkTgHit()) { mAtInfo.mpCollider = mCyl.GetTgHitObj(); if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_UNK)) { mInvincibilityTimer = 20; } else { mInvincibilityTimer = 10; } if (mAtInfo.mAttackPower <= 1) { mInvincibilityTimer = 10 + KREG_S(8); } dCcD_GObjInf* coll = (dCcD_GObjInf*)mAtInfo.mpCollider; mCreatureSound.startCollisionSE(coll->getHitSeID(coll->GetAtSe(), 0), 0x2d); hit_obj = mCyl.GetTgHitObj(); if (!hit_obj->ChkAtType(AT_TYPE_ARROW) && !hit_obj->ChkAtType(AT_TYPE_NORMAL_SWORD) && !hit_obj->ChkAtType(AT_TYPE_SHIELD_ATTACK)) { hit_obj->ChkAtType(AT_TYPE_HOOKSHOT); } mAction = ACT_DAMAGE; mEatObjType = EAT_TYPE_OBJ; mEatStep = 0; } } } /* 806A8244-806A8368 000C44 0124+00 1/1 0/0 0/0 .text DamageAction__8daE_DF_cFv */ void daE_DF_c::DamageAction() { switch (mEatObjType) { case EAT_TYPE_OBJ: SetAnm(ANIM_BOUND, 0, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_BOUND, 0, -1); mEatObjType++; // EAT_TYPE_LINK break; case EAT_TYPE_LINK: if (mpMorfSO->isStop()) { SetAnm(ANIM_WAIT, 2, 1.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_WAIT, 0, -1); mAction = ACT_WAIT; mEatObjType = EAT_TYPE_LINK; mEatStep = 0; } break; } } /* 806A8368-806A8790 000D68 0428+00 1/1 0/0 0/0 .text BombEatAction__8daE_DF_cFv */ void daE_DF_c::BombEatAction() { switch (mEatStep) { case 0: mCarryType = 100; if (DemoStart()) { CameraSet(400.0f); SetAnm(ANIM_EAT, 0, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_EAT, 0, -1); mEatStep++; } break; case 1: if (mpMorfSO->isStop()) { mEatStep++; SetAnm(ANIM_EAT_WAIT, 2, 5.0f, 1.0f); } break; case 2: if (Mogu_Mogu()) { SetAnm(ANIM_BURST, 0, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_BURST, 0, -1); dComIfGp_particle_set(0x83b9, ¤t.pos, &tevStr, &shape_angle, 0); dComIfGp_particle_set(0x83ba, ¤t.pos, &tevStr, &shape_angle, 0); dComIfGp_particle_set(0x83bb, ¤t.pos, &tevStr, &shape_angle, 0); dComIfGp_particle_set(0x83bc, ¤t.pos, &tevStr, &shape_angle, 0); mEatStep++; } break; case 3: if (mpMorfSO->isStop() && mAnim == ANIM_BURST) { SetAnm(ANIM_DIE, 0, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_DIE, 0, -1); } else if (mpMorfSO->isStop() && mAnim == ANIM_DIE) { if (mArg0 != 0xff && dComIfGs_isSwitch(mArg0, fopAcM_GetRoomNo(this)) == 0) { dComIfGs_onSwitch(mArg0, fopAcM_GetRoomNo(this)); } fopAcM_createDisappear(this, ¤t.pos, 10, 0, 0x30); mTimer = 10; attention_info.flags = 0; mEatStep++; } break; case 4: if (mTimer == 0) { SetReleaseCam(); fopAcM_delete(this); } break; } cLib_chaseAngleS(&mChaseAngle.x, 0, 0x100); cLib_chaseAngleS(&mChaseAngle.z, 0, 0x100); } /* 806A8790-806A8938 001190 01A8+00 1/1 0/0 0/0 .text Spid_Out__8daE_DF_cFv */ void daE_DF_c::Spid_Out() { daPy_py_c* player = daPy_getPlayerActorClass(); if (mpMorfSO->checkFrame(24.0f)) { fopAcM_SetSpeed(player, 0, 0, 0); SetReleaseCam(); Link_Eat_Pos(); } else if (mpMorfSO->checkFrame(25.0f)) { fopAcM_SetSpeed(player, 0, 0, 0); player->setThrowDamage(cLib_targetAngleY(¤t.pos, &mEyePos), 25.0f, 60.0f, 2, 0, 0); mTimer = 40; } else if (mpMorfSO->checkFrame(2.0f + nREG_F(2))) { dComIfGp_getVibration().StartQuake(3, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } else if (mpMorfSO->checkFrame(15.0f + nREG_F(3))) { dComIfGp_getVibration().StopQuake(0x1f); } else if (mpMorfSO->isStop()) { mAction = ACT_WAIT; mEatObjType = EAT_TYPE_OBJ; mEatStep = 0; } } /* 806A8938-806A8C80 001338 0348+00 1/1 0/0 0/0 .text LinkEatAction__8daE_DF_cFv */ void daE_DF_c::LinkEatAction() { daPy_py_c* player = daPy_getPlayerActorClass(); cXyz pos(current.pos.x, (current.pos.y - 4000.0f) + nREG_F(5), current.pos.z); s16 angle = 0; switch (mEatStep) { case 0: mCarryType = 100; player->setPlayerPosAndAngle(&pos, angle, 0); if (DemoStart()) { SetAnm(ANIM_EAT, 0, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_EAT, 0, -1); mEatStep++; CameraSet(400.0f); player->changeOriginalDemo(); player->changeDemoMode(4, 7, 0, 0); } break; case 1: player->setPlayerPosAndAngle(&pos, angle, 0); player->changeDemoMode(4, 7, 0, 0); if (mpMorfSO->isStop()) { mEatStep++; SetAnm(ANIM_EAT_WAIT, 2, 5.0f, 1.0f); } break; case 2: if (Mogu_Mogu()) { mEatStep++; SetAnm(ANIM_SPITOUT, 0, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_SPITOUT, 0, -1); dComIfGp_particle_set(0x83bd, ¤t.pos, &tevStr, &shape_angle, 0); dComIfGp_particle_set(0x83be, ¤t.pos, &tevStr, &shape_angle, 0); } if (mpMorfSO->checkFrame(10.0f + nREG_F(1))) { dComIfGp_getVibration().StartShock(2, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } break; case 3: Spid_Out(); break; } cLib_chaseAngleS(&mChaseAngle.x, 0, 0x100); cLib_chaseAngleS(&mChaseAngle.z, 0, 0x100); } /* 806A8C80-806A8D98 001680 0118+00 3/3 0/0 0/0 .text Mogu_Mogu__8daE_DF_cFv */ bool daE_DF_c::Mogu_Mogu() { if (mMoguCount > 4) { mMoguCount = 0; return true; } if (mpMorfSO->isLoop()) { mMoguCount++; if (mCarryType == daObjCarry_c::TYPE_TSUBO || mCarryType == daObjCarry_c::TYPE_OOTSUBO || mCarryType == daObjCarry_c::TYPE_TSUBO_2 || mCarryType == daObjCarry_c::TYPE_AOTSUBO || mCarryType == daObjCarry_c::TYPE_TSUBO_S || mCarryType == daObjCarry_c::TYPE_TSUBO_B) { mCreatureSound.startCreatureSound(Z2SE_EN_DF_EAT_POT, 0, -1); } else if (mCarryType == daObjCarry_c::TYPE_BOKKURI) { mCreatureSound.startCreatureSound(Z2SE_EN_DF_EAT_BOKKURI, 0, -1); } else { mCreatureSound.startCreatureSound(Z2SE_EN_DF_EAT_WAIT, 0, -1); } return false; } return false; } /* 806A8D98-806A8ED4 001798 013C+00 1/1 0/0 0/0 .text ObjEatAction__8daE_DF_cFv */ void daE_DF_c::ObjEatAction() { switch (mEatStep) { case 0: SetAnm(ANIM_EAT, 0, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_EAT, 0, -1); mEatStep++; break; case 1: if (mpMorfSO->isStop()) { mEatStep++; SetAnm(ANIM_EAT_WAIT, 2, 5.0f, 1.0f); } break; case 2: if (Mogu_Mogu()) { mAction = ACT_WAIT; mEatObjType = EAT_TYPE_OBJ; mEatStep = 0; } break; } cLib_chaseAngleS(&mChaseAngle.x, 0, 0x100); cLib_chaseAngleS(&mChaseAngle.z, 0, 0x100); } /* 806A8ED4-806A8F2C 0018D4 0058+00 1/1 0/0 0/0 .text EatAction__8daE_DF_cFv */ void daE_DF_c::EatAction() { switch (mEatObjType) { case EAT_TYPE_OBJ: ObjEatAction(); break; case EAT_TYPE_LINK: LinkEatAction(); break; case EAT_TYPE_BOMB: BombEatAction(); break; } } /* 806A8F2C-806A91B4 00192C 0288+00 1/1 0/0 0/0 .text SearchAction__8daE_DF_cFv */ void daE_DF_c::SearchAction() { daPy_py_c* player = daPy_getPlayerActorClass(); cXyz* player_pos = &fopAcM_GetPosition(player); cXyz* speed = fopAcM_GetSpeed_p(player); if (dComIfGp_checkPlayerStatus0(0, 0x100) && player_pos->abs(current.pos) < 400.0f && player_pos->y > current.pos.y + 200.0f) { mEatObjType = EAT_TYPE_LINK; Set_Angle(player_pos); mTargetAngle = cLib_targetAngleY(¤t.pos, player_pos); mAction = ACT_EAT; } daObjCarry_c* obj_carry = (daObjCarry_c*)fpcM_Search(s_obj_sub, this); if (obj_carry != NULL) { if (fopAcM_GetName(obj_carry) == PROC_Obj_Carry) { mEatObjType = EAT_TYPE_OBJ; mCarryType = obj_carry->getType(); fopAcM_delete(obj_carry); cXyz* obj_pos = &fopAcM_GetPosition(obj_carry); Set_Angle(obj_pos); mAction = ACT_EAT; } else if (fopAcM_GetName(obj_carry) == PROC_ALINK && mTimer == 0) { mEatObjType = EAT_TYPE_LINK; Set_Angle(player_pos); mTargetAngle = cLib_targetAngleY(¤t.pos, player_pos); mAction = ACT_EAT; dComIfGp_getVibration().StartShock(5, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); } else if (fopAcM_GetName(obj_carry) == PROC_NBOMB) { cXyz* obj_pos = &fopAcM_GetPosition(obj_carry); Set_Angle(obj_pos); mEatObjType = EAT_TYPE_BOMB; fopAcM_delete(obj_carry); mAction = ACT_EAT; } } } /* 806A91B4-806A9254 001BB4 00A0+00 1/1 0/0 0/0 .text WaitAction__8daE_DF_cFv */ void daE_DF_c::WaitAction() { switch (mEatObjType) { case EAT_TYPE_OBJ: SetAnm(ANIM_WAIT, 2, 5.0f, 1.0f); mCreatureSound.startCreatureSound(Z2SE_EN_DF_WAIT, 0, -1); mEatObjType++; // EAT_TYPE_LINK break; case EAT_TYPE_LINK: SearchAction(); break; } } /* 806A9254-806A9304 001C54 00B0+00 1/1 0/0 0/0 .text MissAction__8daE_DF_cFv */ void daE_DF_c::MissAction() { switch (mEatObjType) { case EAT_TYPE_OBJ: SetAnm(ANIM_EAT, 0, 5.0f, 1.0f); mEatObjType++; // EAT_TYPE_LINK break; case EAT_TYPE_LINK: if (mpMorfSO->isStop()) { mAction = ACT_WAIT; mEatObjType = EAT_TYPE_OBJ; mEatStep = 0; } break; } } /* 806A9304-806A9384 001D04 0080+00 1/1 0/0 0/0 .text Action__8daE_DF_cFv */ void daE_DF_c::Action() { switch (mAction) { case ACT_WAIT: WaitAction(); Obj_Damage(); break; case ACT_EAT: EatAction(); break; case ACT_DAMAGE: DamageAction(); Obj_Damage(); break; case ACT_MISS: MissAction(); break; } } /* 806A9384-806A949C 001D84 0118+00 1/1 0/0 0/0 .text Execute__8daE_DF_cFv */ int daE_DF_c::Execute() { mTimer--; if (mTimer <= 0) { mTimer = 0; } Yazirushi(); Action(); cXyz eff_size(1.5f, 1.5f, 1.5f); setMidnaBindEffect(this, &mCreatureSound, ¤t.pos, &eff_size); if (mAnim == ANIM_WAIT && mpMorfSO->checkFrame(38.0f)) { mCreatureSound.startCreatureSound(Z2SE_EN_DF_WAIT, 0, -1); } if (mInvincibilityTimer != 0) { mInvincibilityTimer--; } mpMorfSO->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); setBaseMtx(); setCcCylinder(); return 1; } /* 806A949C-806A94E0 001E9C 0044+00 1/1 0/0 0/0 .text Yazirushi__8daE_DF_cFv */ void daE_DF_c::Yazirushi() { eyePos.y = current.pos.y; eyePos.y += 80.0f; attention_info.position.y = eyePos.y; attention_info.position.y += 80.0f; attention_info.position.x = current.pos.x; attention_info.position.z = current.pos.z; } /* 806A94E0-806A9550 001EE0 0070+00 1/1 0/0 0/0 .text Draw__8daE_DF_cFv */ int daE_DF_c::Draw() { J3DModel* model = mpMorfSO->getModel(); g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(model, &tevStr); mpMorfSO->entryDL(); return 1; } /* 806A9550-806A95B8 001F50 0068+00 1/1 0/0 0/0 .text Delete__8daE_DF_cFv */ int daE_DF_c::Delete() { dComIfG_resDelete(&mPhaseReq, "E_DF"); if (mHIOInit) { l_initHIO = FALSE; mDoHIO_DELETE_CHILD(l_HIO.mNo); } if (heap != NULL) { mpMorfSO->stopZelAnime(); } return 1; } /* 806A95B8-806A9610 001FB8 0058+00 1/1 0/0 0/0 .text setBaseMtx__8daE_DF_cFv */ void daE_DF_c::setBaseMtx() { J3DModel* this_00; mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle); mpMorfSO->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); mpMorfSO->modelCalc(); } /* 806A9610-806A9630 002010 0020+00 1/0 0/0 0/0 .text daE_DF_Draw__FP8daE_DF_c */ static int daE_DF_Draw(daE_DF_c* i_this) { return i_this->Draw(); } /* 806A9630-806A9650 002030 0020+00 2/1 0/0 0/0 .text daE_DF_Execute__FP8daE_DF_c */ static int daE_DF_Execute(daE_DF_c* i_this) { return i_this->Execute(); } /* 806A9650-806A9658 002050 0008+00 1/0 0/0 0/0 .text daE_DF_IsDelete__FP8daE_DF_c */ static int daE_DF_IsDelete(daE_DF_c* i_this) { return 1; } /* 806A9658-806A9678 002058 0020+00 1/0 0/0 0/0 .text daE_DF_Delete__FP8daE_DF_c */ static int daE_DF_Delete(daE_DF_c* i_this) { fpc_ProcID proc_id = fopAcM_GetID(i_this); return i_this->Delete(); } /* 806A9678-806A9930 002078 02B8+00 1/1 0/0 0/0 .text Create__8daE_DF_cFv */ int daE_DF_c::Create() { fopAcM_SetupActor(this, daE_DF_c); cPhs__Step rv = (cPhs__Step)dComIfG_resLoad(&mPhaseReq, "E_DF"); if (rv == cPhs_COMPLEATE_e) { OS_REPORT("E_DF PARAM %x\n", fopAcM_GetParam(this)); mArg0 = (u8)fopAcM_GetParam(this); if (mArg0 != 0xff && dComIfGs_isSwitch(mArg0, fopAcM_GetRoomNo(this))) { OS_REPORT("E_WS やられ後なので再セットしません"); return cPhs_ERROR_e; } if (fopAcM_entrySolidHeap(this, useHeapInit, 0x1a40) == NULL) { return cPhs_ERROR_e; } if (!l_initHIO) { l_initHIO = TRUE; mHIOInit = TRUE; l_HIO.mNo = mDoHIO_CREATE_CHILD("デクレシア", &l_HIO); } attention_info.flags = fopAc_AttnFlag_BATTLE_e; fopAcM_SetMtx(this, mpMorfSO->getModel()->getBaseTRMtx()); fopAcM_SetMin(this, -200.0f, -200.0f, -200.0f); fopAcM_SetMax(this, 200.0f, 200.0f, 200.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); mCreatureSound.setEnemyName("E_DF"); mAtInfo.mpSound = &mCreatureSound; mAtInfo.mPowerType = 1; cXyz gnd_check_pos; gnd_check_pos = current.pos; gnd_check_pos.y += 100.0f; if (fopAcM_gc_c::gndCheck(&gnd_check_pos)) { current.pos.y = fopAcM_gc_c::getGroundY(); } initCcCylinder(); J3DModel* model = mpMorfSO->getModel(); model->setUserArea((uintptr_t)this); for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { if (i != 0) { model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); } } fopAcM_OffStatus(this, 0x4000); daE_DF_Execute(this); } return rv; } /* 806A9A1C-806A9A3C 00241C 0020+00 1/0 0/0 0/0 .text daE_DF_Create__FP10fopAc_ac_c */ static int daE_DF_Create(fopAc_ac_c* i_this) { daE_DF_c* a_this = (daE_DF_c*)i_this; fpc_ProcID proc_id = fopAcM_GetID(i_this); return a_this->Create(); } /* 806AA03C-806AA05C -00001 0020+00 1/0 0/0 0/0 .data l_daE_DF_Method */ static actor_method_class l_daE_DF_Method = { (process_method_func)daE_DF_Create, (process_method_func)daE_DF_Delete, (process_method_func)daE_DF_Execute, (process_method_func)daE_DF_IsDelete, (process_method_func)daE_DF_Draw, }; /* 806AA05C-806AA08C -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_DF */ extern actor_process_profile_definition g_profile_E_DF = { fpcLy_CURRENT_e, // mLayerID 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_E_DF, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(daE_DF_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 130, // mPriority &l_daE_DF_Method, // sub_method 0x00040100, // mStatus fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType };