/** * @file d_a_obj_bemos.cpp * */ #include "d/dolzel_rel.h" #include "SSystem/SComponent/c_lib.h" #include "d/actor/d_a_obj_bemos.h" #include "d/d_camera.h" #include "d/d_cc_d.h" #include "d/d_com_inf_game.h" #if DEBUG #include "d/d_debug_viewer.h" #endif #include "d/d_s_play.h" #include "Z2AudioLib/Z2Instances.h" /* ############################################################################################## */ /* 80BB37B8-80BB37C4 000000 000C+00 13/13 0/0 0/0 .rodata l_eye_offset */ static Vec const l_eye_offset = {0.0f, 330.0f, 75.0f}; /* 80BB37C4-80BB37D0 00000C 000C+00 0/1 0/0 0/0 .rodata l_high_beam_offset */ static Vec const l_high_beam_offset = {0.0f, 255.0f, 65.0f}; /* 80BB37D0-80BB37DC 000018 000C+00 0/1 0/0 0/0 .rodata l_mid_beam_offset */ static Vec const l_mid_beam_offset = {0.0f, 205.0f, 65.0f}; /* 80BB37DC-80BB37E8 000024 000C+00 0/1 0/0 0/0 .rodata l_low_beam_offset */ static Vec const l_low_beam_offset = {0.0f, 160.0f, 65.0f}; /* 80BB37E8-80BB3818 000030 0030+00 1/1 0/0 0/0 .rodata l_craw_offset */ static Vec const l_craw_offset[4] = { {-95.0f, 0.0f, 0.0f}, {95.0f, 0.0f, 0.0f}, {0.0f, 0.0f, -95.0f}, {0.0f, 0.0f, 95.0f}, }; /* 80BB3818-80BB3820 000060 0008+00 1/2 0/0 0/0 .rodata M_dir_base__9daObjBm_c */ s16 const daObjBm_c::M_dir_base[4] = { 0x0000, 0x4000, 0x8000, 0xC000, }; #ifdef DEBUG class daObjBm_HIO_c : public mDoHIO_entry_c { public: daObjBm_HIO_c(); void genMessage(JORMContext*); /* 0x08 */ cXyz mBeamScale; /* 0x14 */ f32 mBeamLowerDistance; /* 0x18 */ f32 mBeamMiddleDistance; /* 0x1C */ f32 field_0x1C; /* 0x20 */ f32 mSearchDistance; /* 0x24 */ f32 mTargetOffsetDistance; /* 0x28 */ s16 mSearchAngle; /* 0x2A */ s16 mPatrolRotationSpeed; /* 0x0C */ s16 mAttackRotationSpeed; /* 0x2E */ s16 mNoSearchTimeAfterSwitchActivation; /* 0x30 */ s16 mDetectionAngle; /* 0x32 */ s16 mSearchSpeedOnDetection; /* 0x34 */ f32 mBodyScale; /* 0x38 */ f32 mSoundPositionMoveSpeed; /* 0x3C */ u8 mNoSearchAttackTime; /* 0x3D */ u8 mDebugDraw; /* 0x3E */ u8 mCheckDraw; }; daObjBm_HIO_c l_HIO; daObjBm_HIO_c::daObjBm_HIO_c() { mBeamScale.set(0.5f, 0.5f, 1.0f); mSearchDistance = 1000.0f; mSearchAngle = 30000; mPatrolRotationSpeed = 500; mAttackRotationSpeed = 450; mBeamLowerDistance = 300.0f; mBeamMiddleDistance = 600.0f; field_0x1C = 1000.0f; mTargetOffsetDistance = 0.0f; mNoSearchTimeAfterSwitchActivation = 20; mDetectionAngle = 25000; mSoundPositionMoveSpeed = 60.0f; mNoSearchAttackTime = 0; mSearchSpeedOnDetection = 1000; mBodyScale = 1.0f; mDebugDraw = 0; mCheckDraw = 0; } void daObjBm_HIO_c::genMessage(JORMContext* ctx) { ctx->genLabel("ビーモス", 0, 0, NULL, -1, -1, 512, 24); ctx->genCheckBox("デバッグ描画", &mDebugDraw, 1, 0, NULL, -1, -1, 512, 24); ctx->genSlider("サーチ距離", &mSearchDistance, 100.0f, 5000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("サーチ角度", &mSearchAngle, 0.0f, 32767.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("発見角度", &mDetectionAngle, 0.0f, 32767.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("巡回回転速度", &mPatrolRotationSpeed, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("攻撃回転速度", &mAttackRotationSpeed, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("ビーム発射・下距離", &mBeamLowerDistance, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("ビーム発射・中距離", &mBeamMiddleDistance, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("目標オフセット距離", &mTargetOffsetDistance, 0.0f, 500.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("SW起動後サーチ無し時間", &mNoSearchTimeAfterSwitchActivation, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("発音位置移動速度", &mSoundPositionMoveSpeed, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("サーチ無し攻撃時間", &mNoSearchAttackTime, 0.0f, 100.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("発見時のサーチ速度", &mSearchSpeedOnDetection, 0.0f, 10000.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("本体スケール", &mBodyScale, 0.1f, 5.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("ビームXスケール", &mBeamScale.x, 0.1f, 10.0f, 0, NULL, -1, -1, 512, 24); ctx->genSlider("ビームYスケール", &mBeamScale.y, 0.1f, 10.0f, 0, NULL, -1, -1, 512, 24); ctx->genCheckBox("チェック描画", &mCheckDraw, 1, 0, NULL, -1, -1, 512, 24); } #endif /* 80BAE36C-80BAE4A8 0000EC 013C+00 1/1 0/0 0/0 .text * PPCallBack__9daObjBm_cFP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */ fopAc_ac_c* daObjBm_c::PPCallBack(fopAc_ac_c* i_bgActor, fopAc_ac_c* i_actorP, s16 param_2, dBgW_Base::PushPullLabel pp_field) { dBgW::PushPullLabel pp_label = cLib_checkBit(pp_field, dBgW::PPLABEL_3); u8 l_swNo3 = ((daObjBm_c*)i_bgActor)->getSwNo3(); u8 l_moveType = ((daObjBm_c*)i_bgActor)->getMoveType(); if (pp_label != dBgW::PPLABEL_NONE && !fopAcM_isSwitch(i_bgActor, l_swNo3)) { s16 spE = cLib_checkBit(pp_label, dBgW::PPLABEL_PULL) ? (s16)param_2 - 0x8000 : (s16)param_2; s16 angle = spE - ((daObjBm_c*)i_bgActor)->home.angle.y; JUT_ASSERT(513, pp_label != pp_field); ((daObjBm_c*)i_bgActor)->mPPLabel = pp_field; if (angle >= -0x2000 && angle < 0x2000) { pp_label = dBgW::PPLABEL_NONE; } else if (angle >= 0x2000 && angle < 0x6000) { pp_label = dBgW::PPLABEL_PUSH; } else if (angle >= 0x6000 || angle < -0x6000) { pp_label = dBgW::PPLABEL_PULL; } else { pp_label = dBgW::PPLABEL_3; } if (l_moveType != 0 || (l_moveType == 0 && pp_label == dBgW::PPLABEL_NONE)) { for (int i = 0; i < 4; i++) { if (i == pp_label) { ((daObjBm_c*)i_bgActor)->mMomentCnt[i]++; } else { ((daObjBm_c*)i_bgActor)->mMomentCnt[i] = 0; } } ((daObjBm_c*)i_bgActor)->field_0x10d2 = 1; } } return i_bgActor; } /* 80BAE4A8-80BAE5FC 000228 0154+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */ static int nodeCallBack(J3DJoint* i_joint, int param_2) { if (param_2 == 0) { int jnt_no = i_joint->getJntNo(); J3DModel* model = j3dSys.getModel(); daObjBm_c* i_this = (daObjBm_c*)model->getUserArea(); cMtx_copy(model->getAnmMtx(jnt_no), mDoMtx_stack_c::get()); s16 sVar1 = i_this->field_0x1000 * cM_scos(i_this->field_0xff0 * 0x2cec + KREG_S(6)); if (jnt_no == i_this->getHeadJoint()) { mDoMtx_stack_c::XrotM(i_this->field_0xf96 + sVar1); } else if (jnt_no == i_this->getBigGearJoint()) { mDoMtx_stack_c::XrotM(i_this->field_0xf9a); } else if (jnt_no == i_this->getSmallGear0Joint()) { mDoMtx_stack_c::XrotM(i_this->field_0xf9e); } else if (jnt_no == i_this->getSmallGear1Joint()) { mDoMtx_stack_c::XrotM(i_this->field_0xfa2); } else if (jnt_no == i_this->getSmallGear2Joint()) { mDoMtx_stack_c::XrotM(i_this->field_0xfa6); } cMtx_copy(mDoMtx_stack_c::get(), model->getAnmMtx(jnt_no)); } return 1; } /* 80BAE5FC-80BAE68C 00037C 0090+00 1/1 0/0 0/0 .text initBaseMtx__9daObjBm_cFv */ void daObjBm_c::initBaseMtx() { field_0x10a0.set(0.5f, 0.5f, 1.0f); mpModel->setBaseScale(scale); mpModel3->setBaseScale(scale); mpModel2->setBaseScale(field_0x10a0); setBaseMtx(); } /* 80BAE68C-80BAE778 00040C 00EC+00 2/2 0/0 0/0 .text setBaseMtx__9daObjBm_cFv */ void daObjBm_c::setBaseMtx() { mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::YrotM(shape_angle.y); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::scaleM(1.0f, 1.0f, 1.0f); PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx); #if DEBUG field_0x10b8 = l_HIO.mBeamScale.x; field_0x10bc = l_HIO.mBeamScale.y; #endif mpModel2->setBaseScale(field_0x10a0); mDoMtx_stack_c::transS(field_0xfb8); mDoMtx_stack_c::ZXYrotM(field_0xfc4); mpModel2->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(home.angle); mpModel3->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 80BB3A94-80BB3A98 -00001 0004+00 8/9 0/0 0/0 .data l_arcName */ static const char* l_arcName = "Obj_bm"; /* 80BB3A98-80BB3A9C -00001 0004+00 0/1 0/0 0/0 .data l_eye_matName */ static const char* l_eye_matName = "bmEye"; /* 80BB3A9C-80BB3AA0 -00001 0004+00 0/1 0/0 0/0 .data l_head_joint */ static char* l_head_joint = "head"; /* 80BB3AA0-80BB3AA4 -00001 0004+00 0/1 0/0 0/0 .data l_bigGear_joint */ static char* l_bigGear_joint = "cogRed"; /* 80BB3AA4-80BB3AA8 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear0_joint */ static char* l_smallGear0_joint = "cogBlue"; /* 80BB3AA8-80BB3AAC -00001 0004+00 0/1 0/0 0/0 .data l_smallGear1_joint */ static char* l_smallGear1_joint = "cogGreen"; /* 80BB3AAC-80BB3AB0 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear2_joint */ static char* l_smallGear2_joint = "cogYellow"; /* 80BB3AB0-80BB3AC4 00003C 0014+00 0/2 0/0 0/0 .data l_joint_table */ static char* l_joint_table[5] = { l_head_joint, l_bigGear_joint, l_smallGear0_joint, l_smallGear1_joint, l_smallGear2_joint, }; /* 80BB3AC4-80BB3ADC 000050 0018+00 0/1 0/0 0/0 .data l_cull_box */ static Vec l_cull_box[2] = { {-1200.0f, -100.0f, -1200.0f}, {1200.0f, 400.0f, 1200.0f}, }; /* 80BB3ADC-80BB3B1C 000068 0040+00 0/1 0/0 0/0 .data l_sph_src */ static dCcD_SrcSph l_sph_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x402020, 0x11}, 0x58}}, // mObj {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph } // mSphAttr }; /* 80BB3B1C-80BB3B68 0000A8 004C+00 0/1 0/0 0/0 .data l_cps_src */ static dCcD_SrcCps l_cps_src = { { {0x0, {{0x100, 0x1, 0x1d}, {0x0, 0x0}, 0x0}}, // mObj {dCcD_SE_SWORD, 0x0, 0x0, 0x1, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x4}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, 20.0f}, // mCps } // mCpsAttr }; /* 80BB3B68-80BB3BAC 0000F4 0044+00 0/1 0/0 0/0 .data l_cyl_src */ static dCcD_SrcCyl l_cyl_src = { { {0x0, {{0x0, 0x0, 0x1f}, {0x0, 0x0}, 0x79}}, // mObj {dCcD_SE_NONE, 0x1, 0x0, 0x0, 0x0}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {0.0f, 0.0f, 0.0f}, // mCenter 15.0f, // mRadius 60.0f // mHeight } // mCyl }; /* 80BAE778-80BAEADC 0004F8 0364+00 1/0 0/0 0/0 .text Create__9daObjBm_cFv */ int daObjBm_c::Create() { fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); mStts.Init(0xff, 0xff, this); mSph.Set(l_sph_src); mSph.SetStts(&mStts); mCps.Set(l_cps_src); mCps.SetStts(&mStts); for (int i = 0; i < 4; i++) { mCyl[i].Set(l_cyl_src); mCyl[i].SetStts(&mStts); } fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x, l_cull_box[1].y, l_cull_box[1].z); JUTNameTab* joint_name = mpModel->getModelData()->getJointTree().getJointName(); for (int i = 0; i < 5; i++) { for (u16 j = 0; j < mpModel->getModelData()->getJointNum(); j++) { if (strcmp(joint_name->getName(j), l_joint_table[i]) == 0) { mJoints[i] = j; mpModel->getModelData()->getJointNodePointer(j)->setCallBack(nodeCallBack); } } } mpModel->setUserArea((uintptr_t)this); JUTNameTab* material_name = mpModel->getModelData()->getMaterialTable().getMaterialName(); for (u16 i = 0; i < mpModel->getModelData()->getMaterialNum(); i++) { if (strcmp(material_name->getName(i), l_eye_matName) == 0) { mpMaterial = mpModel->getModelData()->getMaterialNodePointer(i); } } #if DEBUG if (field_0xfcc.x == 0) { OSReport_Error("ブ[モス]。苔のマテリアルがありません"); return 0; } #endif mSound.init(&field_0x1048, 1); mSound2.init(&field_0x1054, 1); field_0x1039 = 1; if (fopAcM_isSwitch(this, getSwNo2())) { field_0xff7 = 0x0; if (getMoveType() != 1) { mpBckAnm3->setFrame(mpBckAnm3->getEndFrame()); } initActionObjBemos(); } else { initActionEnBemos(); if (getSwNo() != 0xFF && !fopAcM_isSwitch(this, getSwNo())) { field_0xff7 = 0; initActionSwWait(); } else { field_0xff7 = 1; J3DAnmTevRegKey* model_data = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x14); mpBrkAnm->init(mpModel->getModelData(), model_data, 1, 2, 1.0f, 0, -1); mpBckAnm->setFrame(mpBckAnm->getEndFrame()); initActionWarning(); } } initBaseMtx(); return 1; } /* 80BAEADC-80BAEF90 00085C 04B4+00 1/0 0/0 0/0 .text CreateHeap__9daObjBm_cFv */ int daObjBm_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 0xd); JUT_ASSERT(767, modelData != 0); mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (mpModel == NULL) { return 0; } J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x13); JUT_ASSERT(780, pbrk != 0); mpBrkAnm = new mDoExt_brkAnm(); if (mpBrkAnm == NULL || mpBrkAnm->init(modelData, pbrk, 1, 0, 1.0f, 0, -1) == 0) { return 0; } J3DAnmTransform* pbck; #if DEBUG pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7); JUT_ASSERT(791, pbck != 0); #endif pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7); JUT_ASSERT(798, pbck != 0); mpBckAnm = new mDoExt_bckAnm(); if (mpBckAnm == NULL || mpBckAnm->init(pbck, 1, 0, 1.0f, 0, -1, false) == 0) { return 0; } modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 0xe); JUT_ASSERT(813, modelData != 0); mpModel2 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284); if (mpModel2 == NULL) { return 0; } J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x1a); JUT_ASSERT(827, pbtk != 0); mpBtkAnm = new mDoExt_btkAnm(); if (mpBtkAnm == NULL || mpBtkAnm->init(modelData, pbtk, 1, 0, 1.0f, 0, -1) == 0) { return 0; } mpBtkAnm->setFrame(mpBtkAnm->getEndFrame()); #ifdef DEBUG pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x18); JUT_ASSERT(840, pbtk != 0); #endif pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x18); JUT_ASSERT(846, pbtk != 0); mpBtkAnm2 = new mDoExt_btkAnm(); if (mpBtkAnm2 == NULL || mpBtkAnm2->init(modelData, pbtk, 1, 2, 1.0f, 0, -1) == 0) { return 0; } J3DAnmTransform* pbck2 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 9); JUT_ASSERT(858, pbck != 0); mpBckAnm2 = new mDoExt_bckAnm(); if (mpBckAnm2 == NULL || mpBckAnm2->init(pbck2, 1, 2, 1.0f, 0, -1, false) == 0) { return 0; } modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 0xf); JUT_ASSERT(873, modelData != 0); mpModel3 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (mpModel3 == NULL) { return 0; } J3DAnmTransform* pbck3 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 8); JUT_ASSERT(885, pbck3 != 0); mpBckAnm3 = new mDoExt_bckAnm(); if (mpBckAnm3 == NULL || mpBckAnm3->init(pbck3, 1, 0, 1.0f, 0, -1, false) == 0) { return 0; } mpBckAnm3->setPlaySpeed(0.0f); return 1; } /* 80BAEFD8-80BAF09C 000D58 00C4+00 1/1 0/0 0/0 .text create1st__9daObjBm_cFv */ int daObjBm_c::create1st() { if (field_0x100e == 0) { field_0x100a = home.angle.x; field_0x100c = home.angle.z; home.angle.x = home.angle.z = 0; current.angle.x = current.angle.z = 0; shape_angle.x = shape_angle.z = 0; field_0x100e = 1; } cPhs__Step phase_state = (cPhs__Step)dComIfG_resLoad(&mPhase, l_arcName); if (phase_state == cPhs_COMPLEATE_e) { phase_state = (cPhs__Step)MoveBGCreate(l_arcName, 0x1e, dBgS_MoveBGProc_TypicalRotY, 0x5500, NULL); if (phase_state == cPhs_ERROR_e) { return phase_state; } #ifdef DEBUG OS_REPORT("新ビーモス:0x%x\n", fopAcM_GetParam(this)); l_HIO.entryHIO("ビーモス"); #endif } return phase_state; } /* 80BAF09C-80BAF29C 000E1C 0200+00 1/0 0/0 0/0 .text Execute__9daObjBm_cFPPA3_A4_f */ int daObjBm_c::Execute(Mtx** param_0) { #ifdef DEBUG scale.setall(l_HIO.mBodyScale); mpModel->setBaseScale(scale); daPy_py_c* player = daPy_getPlayerActorClass(); #endif field_0xff0++; if (field_0xf96 != field_0xf98 && field_0xfaa == 0) { field_0xfaa = 0xFA; } cLib_chaseAngleS(&field_0xf96, field_0xf98, field_0xfaa); cLib_chaseAngleS(&field_0xf9a, field_0xf9c, field_0xfae); cLib_chaseAngleS(&field_0xf9e, field_0xfa0, field_0xfae); cLib_chaseAngleS(&field_0xfa2, field_0xfa4, field_0xfae); cLib_chaseAngleS(&field_0xfa6, field_0xfa8, field_0xfae); main_proc_call(); eyePos = l_eye_offset; mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(home.angle.y + field_0xf96); mDoMtx_stack_c::multVec(&eyePos, &eyePos); attention_info.position = eyePos; *param_0 = &mBgMtx; setBaseMtx(); cLib_addCalcAngleS(&field_0xfaa, field_0xfac, 0x1e, 0x14, 10); cLib_addCalcAngleS(&field_0xfae, field_0xfb0, 0x1e, 0x14, 10); cLib_addCalc(&field_0x1000, 0.0f, 0.2f, KREG_F(2) + 50.0f, KREG_F(3) + 10.0f); field_0xfb2 = field_0xf96; if (mpBckAnm3->getFrame() == 0.0f) { setCrawCO(); } mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); mSound2.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); return 1; } /* 80BAF29C-80BAF328 00101C 008C+00 1/1 0/0 0/0 .text main_proc_call__9daObjBm_cFv */ void daObjBm_c::main_proc_call() { static daObjBm_c::procFunc l_func[] = { &daObjBm_c::actionEnBemos, &daObjBm_c::actionObjBemos, }; (this->*l_func[field_0xfeb])(); } /* 80BAF328-80BAF37C 0010A8 0054+00 1/1 0/0 0/0 .text initActionEnBemos__9daObjBm_cFv */ void daObjBm_c::initActionEnBemos() { if (mpBgW && mpBgW->ChkUsed()) { mpBgW->OffPushPullOk(); } field_0xfeb = 0; } /* 80BAF37C-80BAF46C 0010FC 00F0+00 2/2 0/0 0/0 .text initActionObjBemos__9daObjBm_cFv */ void daObjBm_c::initActionObjBemos() { if (mpBgW && mpBgW->ChkUsed()) { mpBgW->OnPushPullOk(); } mpBgW->SetPushPullCallback((dBgW_Base::PushPull_CallBack)PPCallBack); u8 move_type = getMoveType(); switch (move_type) { case 0: if (fopAcM_isSwitch(this, getSwNo3())) { field_0x10b4 = 4; mode_wait(); mode_dead_init(); } break; case 1: if (fopAcM_isSwitch(this, getSwNo2())) { mode_wait(); mode_dead_init(); } break; } field_0xfeb = 1; } /* 80BAF46C-80BAF750 0011EC 02E4+00 1/0 0/0 0/0 .text actionEnBemos__9daObjBm_cFv */ void daObjBm_c::actionEnBemos() { static daObjBm_c::procFunc l_func[] = { &daObjBm_c::actionSwWait, &daObjBm_c::actionWarning, &daObjBm_c::actionFindPlayer, &daObjBm_c::actionAttack, &daObjBm_c::actionDead, }; if (mSph.ChkTgHit()) { cCcD_Obj* hitobj = mSph.GetTgHitObj(); if (hitobj) { if (hitobj->ChkAtType(AT_TYPE_ARROW) || hitobj->ChkAtType(AT_TYPE_BOMB) || hitobj->ChkAtType(AT_TYPE_IRON_BALL)) { mDoAud_seStart(Z2SE_EN_BM_EYE_BREAK, &eyePos, 0, dComIfGp_getReverb((int)fopAcM_GetRoomNo(this))); initEffectSet0(); fopAcM_onSwitch(this, getSwNo2()); initActionDead(); OS_REPORT("ビーモス死亡!<%d>\n", getSwNo2()); } } } mSph.ClrTgHit(); calcBeamPos(); effect_proc(); (this->*l_func[field_0xfe4])(); calcBeamLenAndAt(); mpBckAnm2->play(); mpBtkAnm->play(); mpBtkAnm2->play(); mpBrkAnm->play(); mpBckAnm->play(); mpBckAnm3->play(); if (field_0xfaa != 0) { fopAcM_seStartLevel(this, Z2SE_EN_BM_TURN, 0); } if (field_0xfe4 != 4 && field_0xfe4 != 0) { mSph.SetC(eyePos); dComIfG_Ccsp()->Set(&mSph); } if (field_0xfe4 == 3) { dComIfG_Ccsp()->Set(&mCps); mSound.startLevelSound(Z2SE_EN_BM_BEAM, 0, -1); } } /* 80BAF750-80BAF80C 0014D0 00BC+00 1/0 0/0 0/0 .text actionObjBemos__9daObjBm_cFv */ void daObjBm_c::actionObjBemos() { static daObjBm_c::modeFunc mode_proc[] = { &daObjBm_c::mode_wait, &daObjBm_c::mode_walk, &daObjBm_c::mode_afl, &daObjBm_c::mode_dead, }; (this->*mode_proc[field_0x10ac])(); } /* 80BAF80C-80BAF8BC 00158C 00B0+00 1/1 0/0 0/0 .text setCrawCO__9daObjBm_cFv */ void daObjBm_c::setCrawCO() { mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(home.angle.y); cXyz acStack_28; for (int i = 0; i < 4; i++) { mDoMtx_stack_c::multVec(&l_craw_offset[i], &acStack_28); mCyl[i].SetC(acStack_28); dComIfG_Ccsp()->Set(&mCyl[i]); } } /* 80BAF8F8-80BAFC08 001678 0310+00 1/1 0/0 0/0 .text calcBeamPos__9daObjBm_cFv */ void daObjBm_c::calcBeamPos() { daPy_py_c* player = daPy_getPlayerActorClass(); f32 dist = fopAcM_searchPlayerDistanceXZ(this); cXyz cStack_30 = l_low_beam_offset; if (dist > 600.0f) { cStack_30 = l_high_beam_offset; } else { if (dist > 300.0f) { cStack_30 = l_mid_beam_offset; } } s16 sVar2 = field_0xf96; cLib_chasePos(&field_0xfd8, cStack_30, 5.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(sVar2 + current.angle.y); mDoMtx_stack_c::multVec(&field_0xfd8, &field_0xfb8); f32 fVar1 = field_0x1004; if (fVar1 < 300.0f) fVar1 = 300.0f; cXyz cStack_3c(0.0f, 0.0f, fVar1); mDoMtx_stack_c::multVec(&cStack_3c, &field_0xfcc); field_0xfcc = player->current.pos; cXyz cStack_48 = field_0xfb8 - field_0xfcc; field_0xfc4.x = cM_atan2s(cStack_48.y, field_0xfcc.absXZ(field_0xfb8)); field_0xfc4.y = sVar2 + current.angle.y; field_0xfc4.z = 0; if (field_0xfc4.x < cM_deg2s(DREG_F(15) + 20.0f)) field_0xfc4.x = cM_deg2s(DREG_F(15) + 20.0f); mDoMtx_stack_c::transS(field_0xfb8); mDoMtx_stack_c::ZXYrotM(field_0xfc4.x, sVar2 + current.angle.y, 0); mDoMtx_stack_c::multVec(&cStack_3c, &field_0xfcc); } /* 80BAFC08-80BAFF60 001988 0358+00 1/1 0/0 0/0 .text calcBeamLenAndAt__9daObjBm_cFv */ void daObjBm_c::calcBeamLenAndAt() { cXyz cStack_50 = field_0xfcc - field_0xfb8; cXyz cStack_5c(field_0xfb8); cStack_50.normalizeZP(); cStack_5c += cStack_50 * 1200.0f; #if DEBUG f32 dVar4 = mpBtkAnm->getFrame(); #endif if (fopAcM_lc_c::lineCheck(&field_0xfb8, &cStack_5c, this) && fopAcM_lc_c::checkGroundHit()) { field_0x10a0.z = field_0xfb8.abs(fopAcM_lc_c::getCross()) / 1200.0f; } else { field_0x10a0.z = 1.0f; } cStack_5c = field_0xfb8 + (cStack_50 * (field_0x10a0.z * 1200.0f)); mCps.cM3dGCps::Set(field_0xfb8, cStack_5c, 20.0f); mCps.CalcAtVec(); if (field_0x1039 > 0) { cXyz cStack_68(field_0xfcc); if (fopAcM_lc_c::lineCheck(&field_0xfb8, &cStack_5c, this) && fopAcM_lc_c::checkGroundHit()) { cStack_68 = fopAcM_lc_c::getCross(); } if (cLib_chasePos(&field_0x1048, cStack_68, 60.0f) != 0) { field_0x1039 = -1; } } else { if (cLib_chasePos(&field_0x1048, cStack_5c, 60.0f) != 0) { field_0x1039 = 1; } } } /* 80BAFFA8-80BB0104 001D28 015C+00 1/1 0/0 0/0 .text checkFindPlayer__9daObjBm_cFv */ s8 daObjBm_c::checkFindPlayer() { daPy_py_c* player = daPy_getPlayerActorClass(); f32 searchDistance = getSearchDistance(); #if DEBUG s16 search_angle = l_HIO.mDetectionAngle; #else s16 search_angle = 25000; #endif s8 ret = -1; field_0xfe8 = 0; f32 playerDistanceXZ = fopAcM_searchPlayerDistanceXZ(this); f32 fVar1 = current.pos.y - player->current.pos.y; if (playerDistanceXZ > searchDistance) { return ret; } else { if (fVar1 < 0.0f) { if (std::fabs(fVar1) > (1.0f - (playerDistanceXZ / searchDistance)) * l_eye_offset.y) { return ret; } } if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - field_0xf96 - home.angle.y)) < (s16)(search_angle / 2)) { ret = 0; } if (ret == 0) { cXyz eye(eyePos); cXyz eye2(player->eyePos); if (fopAcM_lc_c::lineCheck(&eye, &eye2, this)) { field_0xfe8 = 1; } } } return ret; } /* 80BB0104-80BB0260 001E84 015C+00 1/1 0/0 0/0 .text checkSearchPlayer__9daObjBm_cFv */ s8 daObjBm_c::checkSearchPlayer() { daPy_py_c* player = daPy_getPlayerActorClass(); f32 searchDistance = getSearchDistance(); #if DEBUG s16 search_angle = l_HIO.mSearchAngle; #else s16 search_angle = 30000; #endif s8 ret = -1; field_0xfe8 = 0; f32 playerDistanceXZ = fopAcM_searchPlayerDistanceXZ(this); f32 fVar1 = current.pos.y - player->current.pos.y; if (playerDistanceXZ > searchDistance) { return ret; } if (fVar1 < 0.0f) { if (std::fabs(fVar1) > (1.0f - (playerDistanceXZ / searchDistance)) * l_eye_offset.y) { return ret; } } if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - field_0xf96 - home.angle.y)) < (s16)(search_angle / 2)) { ret = 0; } if (ret == 0) { cXyz eye(eyePos); cXyz eye2(player->eyePos); if (fopAcM_lc_c::lineCheck(&eye, &eye2, this)) { field_0xfe8 = 1; } } return ret; } /* 80BB0260-80BB02B8 001FE0 0058+00 2/2 0/0 0/0 .text getSearchDistance__9daObjBm_cFv */ f32 daObjBm_c::getSearchDistance() { #if DEBUG f32 ret = l_HIO.mSearchDistance; #else f32 ret = 1000.0f; #endif if (getSearchDist() != 15 && getSearchDist()) { ret -= getSearchDist() * 50.0f; } return ret; } /* 80BB02B8-80BB0310 002038 0058+00 1/1 0/0 0/0 .text getBeamSearchDistance__9daObjBm_cFv */ f32 daObjBm_c::getBeamSearchDistance() { #if DEBUG f32 ret = l_HIO.mSearchDistance; #else f32 ret = 1000.0f; #endif if (getBeamSearchDist() != 15 && getBeamSearchDist()) { ret -= getBeamSearchDist() * 50.0f; } return ret; } /* 80BB0310-80BB0580 002090 0270+00 1/1 0/0 0/0 .text effect_proc__9daObjBm_cFv */ void daObjBm_c::effect_proc() { static daObjBm_c::effectFunc l_eff_func[4] = { &daObjBm_c::effectWait, &daObjBm_c::effectSet0, &daObjBm_c::effectSet1, &daObjBm_c::effectEnd, }; (this->*l_eff_func[field_0xff6])(); for (int i = 0; i < 2; i++) { if (field_0xff8[i] != NULL) { field_0xff8[i]->setGlobalRTMatrix(mpModel->getAnmMtx(getHeadJoint())); if (cLib_calcTimer(&field_0xff5) == 0) { field_0xff8[i]->becomeInvalidEmitter(); field_0xff8[i]->quitImmortalEmitter(); field_0xff8[i] = NULL; } } } if (field_0x1034 != NULL) { J3DJoint* joint = mpModel->getModelData()->getJointNodePointer(getHeadJoint()); J3DTransformInfo* info = &joint->getTransformInfo(); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(home.angle.y); mDoMtx_stack_c::transM(info->mTranslate.y, info->mTranslate.x, info->mTranslate.z); mDoMtx_stack_c::YrotM(field_0xf96); field_0x1034->setGlobalRTMatrix(mDoMtx_stack_c::get()); } if (field_0x102c != NULL) { mDoMtx_stack_c::copy(mpModel->getAnmMtx((u16)getBigGearJoint())); mDoMtx_stack_c::multVecZero(&field_0x103c); mDoAud_seStartLevel(Z2SE_EN_BM_SPARK, &field_0x103c, 0, 0); } } /* 80BB3D14-80BB3D64 0002A0 0050+00 2/2 0/0 0/0 .data M_lin5__Q29daObjBm_c5Bgc_c */ daObjBm_c::BgcSrc_c daObjBm_c::Bgc_c::M_lin5[] = { {0.0f, 0.0f, 0.0f, 0.0f}, {-0.5f, -0.5f, -1.0f, -1.0f}, {0.5f, -0.5f, 1.0f, -1.0f}, {0.5f, 0.5f, 1.0f, 1.0f}, {-0.5f, 0.5f, -1.0f, 1.0f}, }; /* 80BB0580-80BB0584 002300 0004+00 1/0 0/0 0/0 .text effectWait__9daObjBm_cFv */ void daObjBm_c::effectWait() {} /* 80BB0584-80BB0718 002304 0194+00 1/1 0/0 0/0 .text initEffectSet0__9daObjBm_cFv */ void daObjBm_c::initEffectSet0() { static u16 const eff_id_f[2] = { dPa_RM(ID_ZF_S_BM_BROKENEYE_F_L), dPa_RM(ID_ZF_S_BM_BROKENEYE_F_S), }; static u16 const hit_eff_id[4] = { dPa_RM(ID_ZF_S_BM_BROKENEYE_HIT01), dPa_RM(ID_ZF_S_BM_BROKENEYE_HIT02), dPa_RM(ID_ZF_S_BM_BROKENEYE_HIT03), dPa_RM(ID_ZF_S_BM_BROKENEYE_HIT04), }; csXyz i_rotation(home.angle); i_rotation.y += field_0xf96; for (int i = 0; i < 2; i++) { dComIfGp_particle_set(eff_id_f[i], &eyePos, &i_rotation, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); } for (int i = 0; i < 4; i++) { dComIfGp_particle_set(hit_eff_id[i], &eyePos, &i_rotation, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); } field_0xff8[0] = dComIfGp_particle_set(dPa_RM(ID_ZF_S_BM_BROKENSMK_F), ¤t.pos, &home.angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); if (field_0xff8[0] != NULL) { field_0xff8[0]->becomeImmortalEmitter(); } field_0xff5 = 200; field_0xff6 = 1; } /* 80BB0718-80BB071C 002498 0004+00 1/0 0/0 0/0 .text effectSet0__9daObjBm_cFv */ void daObjBm_c::effectSet0() {} /* 80BB071C-80BB0720 00249C 0004+00 1/0 0/0 0/0 .text effectSet1__9daObjBm_cFv */ void daObjBm_c::effectSet1() {} /* 80BB0720-80BB0724 0024A0 0004+00 1/0 0/0 0/0 .text effectEnd__9daObjBm_cFv */ void daObjBm_c::effectEnd() {} /* 80BB0724-80BB0824 0024A4 0100+00 1/1 0/0 0/0 .text check_to_walk__9daObjBm_cFv */ int daObjBm_c::check_to_walk() { int ret = -1; bool bVar1 = true; if (field_0x10d2) { dBgW::PushPullLabel iVar2 = cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL); dBgW::PushPullLabel iVar3 = cLib_checkBit(mPPLabel, dBgW::PPLABEL_4); s16 sVar5; if (iVar2) { if (iVar3) { sVar5 = 8; } else { sVar5 = 0x13; } } else if (iVar3) { sVar5 = 8; } else { sVar5 = 0x13; } for (int i = 0; i < 4; i++) { if (mMomentCnt[i] >= sVar5) { if (!mBgc.chk_wall_pre(this, mBgc.M_lin5, 5, M_dir_base[i])) { ret = i; } } else { bVar1 = false; } } } if (bVar1) { clr_moment_cnt(); } field_0x10d2 = 0; return ret; } /* 80BB0824-80BB0888 0025A4 0064+00 1/1 0/0 0/0 .text mode_wait_init__9daObjBm_cFv */ void daObjBm_c::mode_wait_init() { fopAcM_SetSpeedF(this, 0.0f); fopAcM_SetGravity(this, -4.0f); mpBgW->SetCrrFunc(dBgS_MoveBGProc_Trans); clr_moment_cnt(); field_0x10bc = -1; field_0x10ac = 0; } /* 80BB0888-80BB09C8 002608 0140+00 2/1 0/0 0/0 .text mode_wait__9daObjBm_cFv */ void daObjBm_c::mode_wait() { f32 tmp1 = l_eye_offset.x; f32 tmp2 = l_eye_offset.z; if (field_0x10ce > 0) field_0x10ce--; int walk_check = check_to_walk(); cXyz local_38; mDoMtx_stack_c::transS(home.pos); mDoMtx_stack_c::YrotM(home.angle.y); mDoMtx_stack_c::transM(field_0x10b0 * 75.0f, 0.0f, field_0x10b4 * 75.0f); mDoMtx_stack_c::multVecZero(&local_38); current.pos.x = local_38.x; current.pos.z = local_38.z; if (walk_check != -1) { field_0x10bc = walk_check; ((daPy_py_c*)dComIfGp_getPlayer(0))->onPushPullKeep(); mode_walk_init(); if (cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL) != 0) { field_0x10cc = 13; field_0x10b8 = 2520.6155f; } else { field_0x10cc = 13; field_0x10b8 = 2520.6155f; } } } /* 80BB09C8-80BB09E0 002748 0018+00 1/1 0/0 0/0 .text mode_walk_init__9daObjBm_cFv */ void daObjBm_c::mode_walk_init() { fopAcM_SetSpeedF(this, 0.0f); field_0x10ac = 1; } /* 80BB3F60-80BB3F90 000080 0030+00 0/1 0/0 0/0 .bss dir_vec$4972 */ // static u8 dir_vec[48]; /* 80BB09E0-80BB0DA8 002760 03C8+00 1/0 0/0 0/0 .text mode_walk__9daObjBm_cFv */ void daObjBm_c::mode_walk() { static cXyz dir_vec[] = { cXyz(0.0f, 0.0f, 1.0f), cXyz(1.0f, 0.0f, 0.0f), cXyz(0.0f, 0.0f, -1.0f), cXyz(-1.0f, 0.0f, 0.0f), }; bool uVar5 = --field_0x10cc <= 0; f32 fVar6 = (cM_scos(field_0x10cc * field_0x10b8) + 1.0f) * 0.5f; cXyz local_58; mDoMtx_stack_c::transS(home.pos); mDoMtx_stack_c::YrotM(home.angle.y); mDoMtx_stack_c::transM((field_0x10b0 + fVar6 * dir_vec[field_0x10bc].x) * 75.0f, 0.0f, (field_0x10b4 + fVar6 * dir_vec[field_0x10bc].z) * 75.0f); mDoMtx_stack_c::multVecZero(&local_58); current.pos.x = local_58.x; current.pos.z = local_58.z; eyePos = current.pos; if (uVar5 != 0) { mBgc.chk_wall_pre(this, mBgc.M_lin5, 5, M_dir_base[field_0x10bc]); } current.pos.x = local_58.x; current.pos.z = local_58.z; fopAcM_seStartLevel(this, Z2SE_EN_BM_SLIDE, 0); if (uVar5 != 0) { if (field_0x10bc == 0) { field_0x10b4++; } else if (field_0x10bc == 1) { field_0x10b0++; } else if (field_0x10bc == 2) { field_0x10b4--; } else if (field_0x10bc == 3) { field_0x10b0--; } ((daPy_py_c*)dComIfGp_getPlayer(0))->offPushPullKeep(); if (getMoveType() == 0 && field_0x10b4 == 4) { fopAcM_onSwitch(this, getSwNo3()); mode_dead_init(); } else { mode_wait_init(); } } } /* 80BB0DA8-80BB0DC0 002B28 0018+00 1/0 0/0 0/0 .text mode_afl__9daObjBm_cFv */ void daObjBm_c::mode_afl() { fopAcM_SetSpeedF(this, 0.0f); field_0x10ac = 2; } /* 80BB0DC0-80BB0DE4 002B40 0024+00 2/2 0/0 0/0 .text mode_dead_init__9daObjBm_cFv */ void daObjBm_c::mode_dead_init() { mpBgW->OffPushPullOk(); fopAcM_SetSpeedF(this, 0.0f); field_0x10ac = 3; } /* 80BB0DE4-80BB0DE8 002B64 0004+00 1/0 0/0 0/0 .text mode_dead__9daObjBm_cFv */ void daObjBm_c::mode_dead() {} /* 80BB0DE8-80BB0E0C 002B68 0024+00 2/2 0/0 0/0 .text clr_moment_cnt__9daObjBm_cFv */ void daObjBm_c::clr_moment_cnt() { for (int i = 0; i < 4; i++) { mMomentCnt[i] = 0; } } /* 80BB0E0C-80BB0ED0 002B8C 00C4+00 1/1 0/0 0/0 .text __ct__Q29daObjBm_c5Bgc_cFv */ daObjBm_c::Bgc_c::Bgc_c() { for (int i = 0; i < 23; i++) { field_0x0[i] = 0.0f; field_0x64[i] = cXyz::Zero; } field_0x5c = 0xFFFFFFFF; field_0x178 = 0xFFFFFFFF; field_0x17c = FLT_MAX; field_0x60 = 0.0f; mState = STATE_0_e; } /* ############################################################################################## */ /* 80BB3898-80BB3A08 0000E0 0170+00 0/0 0/0 0/0 .rodata M_lin20__Q29daObjBm_c5Bgc_c */ const daObjBm_c::BgcSrc_c daObjBm_c::Bgc_c::M_lin20[] = { {0.0f, 0.0f, 0.0f, 0.0f}, {-0.25f, -0.25f, 0.0f, 0.0f}, {-0.5f, -0.5f, -1.0f, -1.0f}, {0.0f, -0.5f, 1.0f, -1.0f}, {0.0f, 0.0f, 1.0f, 1.0f}, {-0.5f, 0.0f, -1.0f, 1.0f}, {0.25f, -0.25f, 0.0f, 0.0f}, {0.0f, -0.5f, -1.0f, -1.0f}, {0.5f, -0.5f, 1.0f, -1.0f}, {0.5f, 0.0f, 1.0f, 1.0f}, {0.0f, 0.0f, -1.0f, 1.0f}, {0.25f, 0.25f, 0.0f, 0.0f}, {0.0f, 0.0f, -1.0f, -1.0f}, {0.5f, 0.0f, 1.0f, -1.0f}, {0.5f, 0.5f, 1.0f, 1.0f}, {0.0f, 0.5f, -1.0f, 1.0f}, {-0.25f, 0.25f, 0.0f, 0.0f}, {-0.5f, 0.0f, -1.0f, -1.0f}, {0.0f, 0.0f, 1.0f, -1.0f}, {0.0f, 0.5f, 1.0f, 1.0f}, {-0.5f, 0.5f, -1.0f, 1.0f}, {-0.75f, 0.25f, 0.0f, 0.0f}, {-0.75f, -0.25f, 0.0f, 0.0f}, }; static f32 dummy_rodata_5157() { return -1000000000.0f; } /* 80BB3F9C-80BB4728 0000BC 078C+00 1/2 0/0 0/0 .bss M_gnd_work__Q29daObjBm_c5Bgc_c */ dBgS_ObjGndChk daObjBm_c::Bgc_c::M_gnd_work[23]; /* 80BB4734-80BB4788 000854 0054+00 0/1 0/0 0/0 .bss M_wrt_work__Q29daObjBm_c5Bgc_c */ dBgS_WtrChk daObjBm_c::Bgc_c::M_wrt_work; /* 80BB4794-80BB51A4 0008B4 0A10+00 2/3 0/0 0/0 .bss M_wall_work__Q29daObjBm_c5Bgc_c */ dBgS_ObjLinChk daObjBm_c::Bgc_c::M_wall_work[23]; static f32 dummy_rodata_5158() { // needed for correct rodata ordering: return 200.0f; } /* 80BB0ED4-80BB1154 002C54 0280+00 1/1 0/0 0/0 .text * wall_pos__Q29daObjBm_c5Bgc_cFPC10fopAc_ac_cPCQ29daObjBm_c8BgcSrc_cisf */ void daObjBm_c::Bgc_c::wall_pos(fopAc_ac_c const* i_actor, daObjBm_c::BgcSrc_c const* i_bgcSrc, int i_num, s16 param_3, f32 param_4) { const s16 sp8C = i_actor->home.angle.y + param_3; cXyz sp48; cXyz sp54; cXyz sp60; cXyz sp6C; cXyz sp78; field_0x178 = -1; field_0x17c = FLT_MAX; mDoMtx_stack_c::YrotS(sp8C); mDoMtx_stack_c::XrotM(0x4000); mDoMtx_stack_c::multVec(&cXyz::BaseY, &sp6C); sp6C *= param_4 + 100.0f; for (int i = 0; i < i_num; i++, i_bgcSrc++) { mDoMtx_stack_c::XrotS(0x4000); sp78.set(i_bgcSrc->field_0xc, 0.0f, i_bgcSrc->field_0x8); mDoMtx_stack_c::multVec(&sp78, &sp60); mDoMtx_stack_c::YrotS(sp8C); mDoMtx_stack_c::transM(sp60); mDoMtx_stack_c::scaleM(200.0f, 400.0f, 200.0f); mDoMtx_stack_c::transM(0.0f, 0.5f, 0.0f); mDoMtx_stack_c::XrotM(0x4000); sp78.set(i_bgcSrc->field_0x4, 0.0f, i_bgcSrc->field_0x0); mDoMtx_stack_c::multVec(&sp78, &sp48); sp48 += i_actor->current.pos; sp54 = sp48 + sp6C; M_wall_work[i].Set(&sp48, &sp54, i_actor); M_wall_work[i].SetActorPid(i_actor->base.base.id); if (dComIfG_Bgsp().LineCross(&M_wall_work[i])) { field_0x64[i] = M_wall_work[i].GetCross(); f32 var_f31 = sp48.abs2(field_0x64[i]); if (var_f31 < field_0x17c) { field_0x17c = var_f31; field_0x178 = i; } } else { field_0x64[i] = cXyz::Zero; } } } /* 80BB1154-80BB1194 002ED4 0040+00 2/2 0/0 0/0 .text * chk_wall_pre__Q29daObjBm_c5Bgc_cFPC10fopAc_ac_cPCQ29daObjBm_c8BgcSrc_cis */ bool daObjBm_c::Bgc_c::chk_wall_pre(fopAc_ac_c const* i_actor, daObjBm_c::BgcSrc_c const* i_bgcSrc, int i_num, s16 param_3) { wall_pos(i_actor, i_bgcSrc, i_num, param_3, 76.0f); return field_0x178 >= 0; } /* 80BB1194-80BB11D4 002F14 0040+00 1/1 0/0 0/0 .text initActionSwWait__9daObjBm_cFv */ void daObjBm_c::initActionSwWait() { field_0xfaa = 0; field_0xfac = 0; field_0xfae = field_0xfaa; field_0xfae = field_0xfac; mpBrkAnm->setPlaySpeed(0.0f); mpBckAnm->setPlaySpeed(0.0f); field_0xfea = 0; field_0xfe4 = 0; } /* 80BB11D4-80BB14C8 002F54 02F4+00 1/0 0/0 0/0 .text actionSwWait__9daObjBm_cFv */ void daObjBm_c::actionSwWait() { cXyz i_sePos; switch (field_0xfea) { case 0: if (fopAcM_isSwitch(this, getSwNo())) { mpBrkAnm->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x15), 1, 0, 1.0f, 0, -1); i_sePos = home.pos; i_sePos.y += 200.0f; mDoAud_seStart(Z2SE_EN_BM_BOOT, &i_sePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); field_0xff7 = 1; field_0xfea = 1; } break; case 1: if (mpBrkAnm->isStop()) { field_0xfe5 = 0; field_0xfea = 2; } break; case 2: if (cLib_calcTimer(&field_0xfe5) == 0) { mpBtkAnm->init(mpModel2->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x19), 1, 0, 0.0f, 0, -1); mpBtkAnm2->setPlaySpeed(0.0f); mpBrkAnm->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x14), 1, 2, 1.0f, 0, -1); mpBckAnm->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7), 1, 0, 1.0f, 0, -1, true); fopAcM_seStart(this, Z2SE_EN_BM_UP, 0); field_0x1008 = 20; initActionWarning(); } break; } } /* 80BB14C8-80BB154C 003248 0084+00 3/3 0/0 0/0 .text initActionWarning__9daObjBm_cFv */ void daObjBm_c::initActionWarning() { if (field_0x102c) { field_0x102c->becomeInvalidEmitter(); field_0x102c->quitImmortalEmitter(); field_0x102c = NULL; } if (field_0x1030) { field_0x1030->becomeInvalidEmitter(); field_0x1030->quitImmortalEmitter(); field_0x1030 = NULL; } field_0xfea = 0; field_0xfe4 = 1; } /* 80BB154C-80BB1654 0032CC 0108+00 1/0 0/0 0/0 .text actionWarning__9daObjBm_cFv */ void daObjBm_c::actionWarning() { #if DEBUG field_0xfac = l_HIO.mPatrolRotationSpeed; #else field_0xfac = 500; #endif switch (field_0xfea) { case 0: field_0xfea = 1; break; case 1: if (cLib_calcTimer(&field_0x1008) == 0) { field_0xfe7 = checkFindPlayer(); if (field_0xfe7 != -1 && field_0xfe8 == 0) { field_0xfe5 = 0; initActionFindPlayer(); } } break; } field_0xfb0 = field_0xfac + 100; if (field_0xfea != 5) { field_0xf98 = field_0xf96 + field_0xfaa; } field_0xf9c = field_0xf9a - field_0xfae; field_0xfa0 = field_0xf9e + field_0xfae; field_0xfa4 = field_0xfa2 + field_0xfae; field_0xfa8 = field_0xfa6 + field_0xfae; } /* 80BB1654-80BB1814 0033D4 01C0+00 1/1 0/0 0/0 .text initActionFindPlayer__9daObjBm_cFv */ void daObjBm_c::initActionFindPlayer() { mpBrkAnm->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x13), 1, 0, 1.0f, 0, -1); field_0x1034 = dComIfGp_particle_set(dPa_RM(ID_ZF_S_BM_NESSENHEAT), ¤t.pos, 0, 0, 0xff, 0, -1, 0, 0, 0); field_0x1038 = -1; fopAcM_seStart(this, Z2SE_EN_BM_FIND, 0); fopAcM_seStart(this, Z2SE_EN_BM_HEAT, 0); field_0xfe5 = 0; field_0xfea = 0; #if DEBUG field_0xfac = l_HIO.mSearchSpeedOnDetection; #else field_0xfac = 1000; #endif field_0xfaa = field_0xfac; field_0xfb0 = field_0xfac; field_0xfe4 = 2; } /* 80BB1814-80BB1960 003594 014C+00 1/0 0/0 0/0 .text actionFindPlayer__9daObjBm_cFv */ void daObjBm_c::actionFindPlayer() { switch (field_0xfea) { case 0: field_0xf98 = fopAcM_searchPlayerAngleY(this) - home.angle.y; field_0xf9c = field_0xf9a - field_0xfae; field_0xfa0 = field_0xf9e + field_0xfae; field_0xfa4 = field_0xfa2 + field_0xfae; field_0xfa8 = field_0xfa6 + field_0xfae; if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - field_0xf96 - home.angle.y)) < KREG_S(4) + 2000) { field_0xfea = 1; } break; case 1: field_0xf98 = field_0xf96; field_0xfac = 0; field_0xfaa = 0; field_0x1000 = KREG_F(10) + 300.0f; field_0xfea = 2; break; case 2: field_0xf98 = field_0xf96; field_0xfac = 0; field_0xfaa = 0; if (field_0x1000 == 0.0f) { field_0xfe5 = 0; initActionAttack(); } } } static f32 dummy_rodata_5299() { return 110.0f; } /* 80BB1960-80BB1BD0 0036E0 0270+00 1/1 0/0 0/0 .text initActionAttack__9daObjBm_cFv */ void daObjBm_c::initActionAttack() { static u16 const l_eff_id[2] = { dPa_RM(ID_ZF_S_BM_NESSENSRC00), dPa_RM(ID_ZF_S_BM_NESSENSRC01), }; f32 dist = fopAcM_searchPlayerDistanceXZ(this); field_0x1004 = dist; // debug diff here daPy_py_c* player = daPy_getPlayerActorClass(); mpBtkAnm->init(mpModel2->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x19), 1, 0, 1.0f, 0, -1); mpBtkAnm2->setPlaySpeed(1.0f); field_0xfe5 = 0x14; field_0xfe6 = 0; // debug diff here if (field_0x102c == NULL) field_0x102c = dComIfGp_particle_set(dPa_RM(ID_ZF_S_BM_GEARSPARK), ¤t.pos, NULL, NULL, 0xff, NULL, -1, NULL, NULL, NULL); if (field_0x1030 == NULL) field_0x1030 = dComIfGp_particle_set(dPa_RM(ID_ZF_S_BM_GEARROCK), ¤t.pos, NULL, NULL, 0xff, NULL, -1, NULL, NULL, NULL); if (field_0x102c != NULL) { field_0x102c->setRateStep(9); field_0x102c->setLifeTime(6); field_0x102c->setRate(6.5f); } if (field_0x1030 != NULL) { field_0x1030->setRateStep(2); field_0x1030->setAwayFromCenterSpeed(32.0f); } for (int i = 0; i < 2; i++) { csXyz cStack_20(0, 0, 0); cStack_20.y = home.angle.y + field_0xf96; field_0x1018[i] = dComIfGp_particle_set(l_eff_id[i], &field_0xfb8, &cStack_20, NULL, 0xff, NULL, -1, NULL, NULL, NULL); } field_0xfed = 0; field_0xfea = 0; field_0xfe4 = 3; } /* 80BB1BD0-80BB248C 003950 08BC+00 1/0 0/0 0/0 .text actionAttack__9daObjBm_cFv */ void daObjBm_c::actionAttack() { static u16 const l_eff_id[2] = { dPa_RM(ID_ZF_S_BM_NESSENBURN00), dPa_RM(ID_ZF_S_BM_NESSENBURN01), }; static u16 const l_eff_id2[3] = { dPa_RM(ID_ZF_S_BM_NESSENSPLASH00), dPa_RM(ID_ZF_S_BM_NESSENSPLASH01), dPa_RM(ID_ZF_S_BM_NESSENSPLASH02), }; f32 dVar17 = fopAcM_searchPlayerDistanceXZ(this); f32 dVar18 = getBeamSearchDistance(); if (dVar17 > dVar18) { dVar17 = getBeamSearchDistance(); } bool bVar4 = true; if (checkSearchPlayer() == -1 && cLib_calcTimer(&field_0xfe5) == 0 || field_0xfe8 != 0) { bVar4 = false; } switch (field_0xfea) { case 0: if (cLib_calcTimer(&field_0xfe6) == 0) { field_0xfea = 2; } break; case 1: field_0xfac = 200 - KREG_S(0); // debug diff here field_0xf98 = fopAcM_searchPlayerAngleY(this) - home.angle.y; cLib_chaseF(&field_0x1004, dVar17, KREG_F(16) + 5.0f); if (!bVar4) { field_0xfea = 3; } if (cLib_calcTimer(&field_0xfec) == 0) { field_0xfea = 2; } break; case 2: field_0xfac = 0x1c2; // debug diff here field_0xf98 = fopAcM_searchPlayerAngleY(this) - home.angle.y; cLib_chaseF(&field_0x1004, dVar17, KREG_F(16) + 15.0f); if (!bVar4) { field_0xfea = 0x3; } break; case 3: mpBtkAnm->init(mpModel2->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x1a), 1, 0, 1.0f, 0, -1); mpBrkAnm->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x14), 1, 2, 1.0f, 0, -1); field_0x1038 = 0x14; if (field_0x1034 != NULL) { field_0x1034->becomeInvalidEmitter(); field_0x1034->quitImmortalEmitter(); field_0x1034 = NULL; } for (int i = 0; i < 2; i++) { if (field_0x1018[i] != NULL) { field_0x1018[i]->becomeInvalidEmitter(); field_0x1018[i]->quitImmortalEmitter(); field_0x1018[i] = NULL; } } field_0xfea = 4; break; case 4: if (mpBtkAnm->isStop()) { for (int i = 0; i < 2; i++) { if (field_0x1010[i] != NULL) { field_0x1010[i]->becomeInvalidEmitter(); field_0x1010[i]->quitImmortalEmitter(); field_0x1010[i] = NULL; } } for (int i = 0; i < 3; i++) { if (field_0x1020[i] != NULL) { field_0x1020[i]->becomeInvalidEmitter(); field_0x1020[i]->quitImmortalEmitter(); field_0x1020[i] = NULL; } } initActionWarning(); } } for (int i = 0; i < 2; i++) { // local_a4 csXyz cStack_8c(0, 0, 0); cStack_8c.y = home.angle.y + field_0xf96; mDoMtx_stack_c::transS(field_0xfb8); mDoMtx_stack_c::YrotM(cStack_8c.y); if (field_0x1018[i] != 0) { field_0x1018[i]->setGlobalRTMatrix(mDoMtx_stack_c::get()); } } field_0x1054 = home.pos; cXyz cStack60 = field_0xfcc - field_0xfb8; cXyz cStack_6c(field_0xfb8); cStack60.normalizeZP(); cStack_6c += cStack60 * 1200.0f; if (fopAcM_lc_c::lineCheck(&field_0xfb8, &cStack_6c, this) && fopAcM_lc_c::checkGroundHit()) { if (field_0xfed == 0) { for (int i = 0; i < 2; i++) { if (field_0x1010[i] == NULL) { field_0x1010[i] = dComIfGp_particle_set(l_eff_id[i], fopAcM_lc_c::getCrossP(), NULL, NULL, 0xff, NULL, -1, NULL, NULL, NULL); } } for (int i = 0; i < 3; i++) { if (field_0x1020[i] == NULL) { field_0x1020[i] = dComIfGp_particle_set(l_eff_id2[i], fopAcM_lc_c::getCrossP(), NULL, NULL, 0xff, NULL, -1, NULL, NULL, NULL); } } field_0xfed = 1; } else { cXyz* pfVar7 = fopAcM_lc_c::getCrossP(); f32 fVar2 = pfVar7->z; pfVar7 = fopAcM_lc_c::getCrossP(); f32 fVar3 = pfVar7->y; cXyz* pfVar9 = fopAcM_lc_c::getCrossP(); mDoMtx_stack_c::transS(pfVar9->x, fVar3 + 2.0f, fVar2); cM3dGPla cStack_54; csXyz local_94; if (fopAcM_lc_c::checkGroundHit() && fopAcM_lc_c::getTriPla(&cStack_54)) { cM3d_CalcVecAngle(cStack_54.mNormal, &local_94.x, &local_94.z); mDoMtx_stack_c::XYZrotM(local_94.x, 0, local_94.z); } for (int i = 0; i < 2; i++) { if (field_0x1010[i] != NULL) { field_0x1010[i]->setGlobalRTMatrix(mDoMtx_stack_c::get()); } } for (int i = 0; i < 3; i++) { if (field_0x1020[i] != NULL) { field_0x1020[i]->setGlobalRTMatrix(mDoMtx_stack_c::get()); } } field_0x1054 = fopAcM_lc_c::getCross(); field_0x1054.y += 2.0f; } } if (field_0x1054 != home.pos) { mSound2.startLevelSound(Z2SE_EN_BM_BURN, 0, -1); } if (mpBrkAnm->isStop()) { mpBrkAnm->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x12), 1, 2, 1.0f, 0, -1); } field_0xfb0 = field_0xfac * 3; field_0xf9c = field_0xf9a - field_0xfae; field_0xfa0 = field_0xf9e + field_0xfae; field_0xfa4 = field_0xfa2 + field_0xfae; field_0xfa8 = field_0xfa6 + field_0xfae; if (checkLockOnCamera() == 0) { dCam_getBody()->ForceLockOn(this); } } /* 80BB248C-80BB2700 00420C 0274+00 1/1 0/0 0/0 .text initActionDead__9daObjBm_cFv */ void daObjBm_c::initActionDead() { if (field_0xf96 > -0x4000 && field_0xf96 < 0x4000) { field_0xf98 = 0; } else { field_0xf98 = 0x7FFF; } field_0xfaa = 0; field_0xfac = 0; mpBckAnm->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 10), 1, 0, 0.0f, 0, -1, true); if (mpBtkAnm->getBtkAnm() == (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x19)) { mpBtkAnm->init(mpModel2->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x1a), 1, 0, 1.0f, 0, -1); } field_0x1038 = 0x14; for (int i = 0; i < 2; i++) { if (field_0x1018[i] != NULL) { field_0x1018[i]->becomeInvalidEmitter(); field_0x1018[i]->quitImmortalEmitter(); field_0x1018[i] = NULL; } if (field_0x1010[i] != NULL) { field_0x1010[i]->becomeInvalidEmitter(); field_0x1010[i]->quitImmortalEmitter(); field_0x1010[i] = NULL; } } for (int i = 0; i < 3; i++) { if (field_0x1020[i] != NULL) { field_0x1020[i]->becomeInvalidEmitter(); field_0x1020[i]->quitImmortalEmitter(); field_0x1020[i] = NULL; } } if (field_0x1034 != NULL) { field_0x1034->becomeInvalidEmitter(); field_0x1034->quitImmortalEmitter(); field_0x1034 = NULL; } field_0xfe5 = 20; field_0xfe9 = 0; field_0xff7 = 0; fopAcM_OffStatus(this, 0); field_0xfea = 0; field_0xfe4 = 4; } /* 80BB2700-80BB2AB0 004480 03B0+00 2/0 0/0 0/0 .text actionDead__9daObjBm_cFv */ void daObjBm_c::actionDead() { switch (field_0xfea) { case 0: if (!cLib_calcTimer(&field_0xfe5)) { field_0xfea = 1; } break; case 1: field_0xfac = 500; if (field_0x102c != NULL) { field_0x102c->becomeInvalidEmitter(); field_0x102c->quitImmortalEmitter(); field_0x102c = NULL; } if (field_0x1030 != NULL) { field_0x1030->becomeInvalidEmitter(); field_0x1030->quitImmortalEmitter(); field_0x1030 = NULL; } field_0xfea = 2; break; case 2: cLib_addCalcAngleS(&field_0xfac, 0, 0x5A, 10, 5); if (field_0xf96 == field_0xf98) { field_0xfac = 0; field_0x1000 = 200.0f; field_0xfea = 3; fopAcM_seStart(this, Z2SE_EN_BM_TURN_END, 0); } break; case 3: field_0xfe5 = 20; field_0xfea = 4; break; case 4: if (!cLib_calcTimer(&field_0xfe5)) { mpBckAnm->setPlaySpeed(1.0f); dComIfGp_particle_set(dPa_RM(ID_ZF_S_BM_SMOKE), ¤t.pos, NULL, NULL, 0xff, NULL, -1, NULL, NULL, NULL); field_0xfea = 5; } break; case 5: if (mpBckAnm->isStop()) { field_0xfe5 = 10; fopAcM_seStart(this, Z2SE_EN_BM_DOWN, 0); field_0xfea = 6; fopAcM_seStart(this, Z2SE_EN_BM_UNLOCK, 0); } break; case 6: if (getMoveType() == 1) { initActionObjBemos(); } else { if (cLib_calcTimer(&field_0xfe5) == 0) { mpBckAnm3->setPlaySpeed(1.0f); if (mpBckAnm3->isStop()) { field_0xfea = 7; } } } break; case 7: initActionObjBemos(); } field_0xfb0 = field_0xfac; field_0xf9c = field_0xf9a - field_0xfae; field_0xfa0 = field_0xf9e + field_0xfae; field_0xfa4 = field_0xfa2 + field_0xfae; field_0xfa8 = field_0xfa6 + field_0xfae; } /* 80BB2AB0-80BB2C8C 004830 01DC+00 1/0 0/0 0/0 .text Draw__9daObjBm_cFv */ int daObjBm_c::Draw() { g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); dComIfGd_setListBG(); J3DShape* shape = mpMaterial->getShape(); if (field_0xff7 == 0) { shape->hide(); } mpBrkAnm->entry(mpModel->getModelData()); mpBckAnm->entry(mpModel->getModelData()); mDoExt_modelUpdateDL(mpModel); mDoExt_brkAnmRemove(mpModel->getModelData()); mDoExt_bckAnmRemove(mpModel->getModelData()); shape->show(); dComIfGd_setList(); g_env_light.setLightTevColorType_MAJI(mpModel2, &tevStr); mpBtkAnm2->entry(mpModel2->getModelData()); mpBtkAnm->entry(mpModel2->getModelData()); mpBckAnm2->entry(mpModel2->getModelData()); mDoExt_modelUpdateDL(mpModel2); mDoExt_btkAnmRemove(mpModel2->getModelData()); mDoExt_bckAnmRemove(mpModel2->getModelData()); g_env_light.setLightTevColorType_MAJI(mpModel3, &tevStr); mpBckAnm3->entry(mpModel3->getModelData()); mDoExt_modelUpdateDL(mpModel3); #if DEBUG debugDraw(); #endif return 1; } #ifdef DEBUG void daObjBm_c::debugDraw() { if (l_HIO.mDebugDraw) { GXColor local_4c = { 0xff, 0, 0, 0x80, }; GXColor local_50 = { 0xff, 0xff, 0xff, 0x80, }; cXyz* pVVar2 = mCps.GetAtVecP(); if (pVVar2 != NULL) { cXyz cStack_24 = mCps.GetStart(); cXyz cStack_30 = mCps.GetStart(); cStack_30 += *pVVar2; dDbVw_drawArrowXlu(cStack_24, cStack_30, local_4c, 1, 0xc); } cXyz cStack_3c(current.pos); cStack_3c.y += 50.0f; dDbVw_drawCircleXlu(cStack_3c, getSearchDistance(), local_4c, 1, 0xc); dDbVw_drawCircleXlu(cStack_3c, getBeamSearchDistance(), local_50, 1, 0xc); dDbVw_drawCircleXlu(cStack_3c, l_HIO.mBeamMiddleDistance, local_4c, 1, 0xc); dDbVw_drawCircleXlu(cStack_3c, l_HIO.mBeamLowerDistance, local_4c, 1, 0xc); GXColor local_54 = { 0, 0, 0xff, 0xff, }; local_4c = local_54; cXyz cStack_48; cStack_48.set(0.0f, 10.0f, getSearchDistance()); s16 sVar1 = l_HIO.mSearchAngle / 2; mDoMtx_stack_c::YrotS((home.angle.y + field_0xf96) + sVar1); mDoMtx_stack_c::multVec(&cStack_48, &cStack_48); cStack_48 += cStack_3c; dDbVw_drawLineOpa(cStack_3c, cStack_48, local_4c, 1, 0xc); cStack_48.set(0.0f, 10.0f, getSearchDistance()); mDoMtx_stack_c::YrotS((home.angle.y + field_0xf96) - sVar1); mDoMtx_stack_c::multVec(&cStack_48, &cStack_48); cStack_48 += cStack_3c; dDbVw_drawLineOpa(cStack_3c, cStack_48, local_4c, 1, 0xc); GXColor local_58 = { 0, 0xff, 0xff, 0xff, }; local_4c = local_58; cStack_48.set(0.0f, 10.0f, getSearchDistance()); sVar1 = l_HIO.mDetectionAngle / 2; mDoMtx_stack_c::YrotS((home.angle.y + field_0xf96) + sVar1); mDoMtx_stack_c::multVec(&cStack_48, &cStack_48); cStack_48 += cStack_3c; dDbVw_drawLineOpa(cStack_3c, cStack_48, local_4c, 1, 0xc); cStack_48.set(0.0f, 10.0f, getSearchDistance()); mDoMtx_stack_c::YrotS((home.angle.y + field_0xf96) - sVar1); mDoMtx_stack_c::multVec(&cStack_48, &cStack_48); cStack_48 += cStack_3c; dDbVw_drawLineOpa(cStack_3c, cStack_48, local_4c, 1, 0xc); GXColor local_5c = { 0xff, 0xff, 0xff, 0xff, }; dDbVw_drawSphereOpa(field_0xfcc, 0.0f, local_5c, 1); } if (l_HIO.mCheckDraw) { mpBgW->CalcPlane(); } } #endif /* 80BB2C8C-80BB2EB8 004A0C 022C+00 1/0 0/0 0/0 .text Delete__9daObjBm_cFv */ int daObjBm_c::Delete() { for (int i = 0; i < 2; i++) { if (field_0xff8[i]) { field_0xff8[i]->becomeInvalidEmitter(); field_0xff8[i]->quitImmortalEmitter(); field_0xff8[i] = NULL; } } if (field_0x102c) { field_0x102c->becomeInvalidEmitter(); field_0x102c->quitImmortalEmitter(); field_0x102c = NULL; } if (field_0x1030) { field_0x1030->becomeInvalidEmitter(); field_0x1030->quitImmortalEmitter(); field_0x1030 = NULL; } if (field_0x1034) { field_0x1034->becomeInvalidEmitter(); field_0x1034->quitImmortalEmitter(); field_0x1034 = NULL; } for (int i = 0; i < 2; i++) { if (field_0x1010[i]) { field_0x1010[i]->becomeInvalidEmitter(); field_0x1010[i]->quitImmortalEmitter(); field_0x1010[i] = NULL; } if (field_0x1018[i]) { field_0x1018[i]->becomeInvalidEmitter(); field_0x1018[i]->quitImmortalEmitter(); field_0x1018[i] = NULL; } } for (int i = 0; i < 3; i++) { if (field_0x1020[i]) { field_0x1020[i]->becomeInvalidEmitter(); field_0x1020[i]->quitImmortalEmitter(); field_0x1020[i] = NULL; } } mpBgW->SetPushPullCallback(NULL); mSound.deleteObject(); mSound2.deleteObject(); dComIfG_resDelete(&mPhase, l_arcName); #if DEBUG l_HIO.removeHIO(); #endif return 1; } /* 80BB2EB8-80BB3078 004C38 01C0+00 1/0 0/0 0/0 .text daObjBm_create1st__FP9daObjBm_c */ static int daObjBm_create1st(daObjBm_c* i_this) { fopAcM_SetupActor(i_this, daObjBm_c); return i_this->create1st(); } /* 80BB33DC-80BB33FC 00515C 0020+00 1/0 0/0 0/0 .text daObjBm_MoveBGDelete__FP9daObjBm_c */ static int daObjBm_MoveBGDelete(daObjBm_c* i_this) { return i_this->MoveBGDelete(); } /* 80BB33FC-80BB341C 00517C 0020+00 1/0 0/0 0/0 .text daObjBm_MoveBGExecute__FP9daObjBm_c */ static int daObjBm_MoveBGExecute(daObjBm_c* i_this) { return i_this->MoveBGExecute(); } /* 80BB341C-80BB3448 00519C 002C+00 1/0 0/0 0/0 .text daObjBm_MoveBGDraw__FP9daObjBm_c */ static int daObjBm_MoveBGDraw(daObjBm_c* i_this) { return i_this->MoveBGDraw(); } /* 80BB3D84-80BB3DA4 -00001 0020+00 1/0 0/0 0/0 .data daObjBm_METHODS */ static actor_method_class daObjBm_METHODS = { (process_method_func)daObjBm_create1st, (process_method_func)daObjBm_MoveBGDelete, (process_method_func)daObjBm_MoveBGExecute, 0, (process_method_func)daObjBm_MoveBGDraw, }; /* 80BB3DA4-80BB3DD4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Bemos */ extern actor_process_profile_definition g_profile_Obj_Bemos = { fpcLy_CURRENT_e, // mLayerID 3, // mListID fpcPi_CURRENT_e, // mListPrio PROC_Obj_Bemos, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(daObjBm_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 604, // mPriority &daObjBm_METHODS, // sub_method 0x00040100, // mStatus fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; static void dummy_touch_work() { static dBgS_ObjLinChk touch_work; } AUDIO_INSTANCES;