From 86bf7686658d54b620647b2d92983bbbff7d5e77 Mon Sep 17 00:00:00 2001 From: Carco_21 <144170194+carter-ktb21@users.noreply.github.com> Date: Mon, 15 Dec 2025 20:02:29 -0500 Subject: [PATCH] d_a_obj_bemos debug work (#2947) * debug work * PR cleanup --- include/d/actor/d_a_obj_bemos.h | 94 +- src/d/actor/d_a_obj_bemos.cpp | 1478 +++++++++++++++---------------- 2 files changed, 784 insertions(+), 788 deletions(-) diff --git a/include/d/actor/d_a_obj_bemos.h b/include/d/actor/d_a_obj_bemos.h index 51d5f3029fb..bf28ec9eca6 100644 --- a/include/d/actor/d_a_obj_bemos.h +++ b/include/d/actor/d_a_obj_bemos.h @@ -16,7 +16,8 @@ * * @details * - */ +*/ + class daObjBm_c : public dBgS_MoveBgActor { public: typedef void (daObjBm_c::*procFunc)(); @@ -48,7 +49,7 @@ public: void wall_pos(fopAc_ac_c const*, daObjBm_c::BgcSrc_c const*, int, s16, f32); bool chk_wall_pre(fopAc_ac_c const*, daObjBm_c::BgcSrc_c const*, int, s16); - static daObjBm_c::BgcSrc_c M_lin5[]; + static const daObjBm_c::BgcSrc_c M_lin5[]; static const daObjBm_c::BgcSrc_c M_lin20[]; static dBgS_ObjGndChk M_gnd_work[23]; @@ -132,14 +133,14 @@ public: // private: /* 0x05A0 */ request_of_phase_process_class mPhase; /* 0x05A8 */ J3DModel* mpModel; - /* 0x05AC */ mDoExt_brkAnm* mpBrkAnm; - /* 0x05B0 */ mDoExt_bckAnm* mpBckAnm; - /* 0x05B4 */ J3DModel* mpModel2; - /* 0x05B8 */ mDoExt_btkAnm* mpBtkAnm; - /* 0x05BC */ mDoExt_btkAnm* mpBtkAnm2; - /* 0x05C0 */ mDoExt_bckAnm* mpBckAnm2; - /* 0x05C4 */ J3DModel* mpModel3; - /* 0x05C8 */ mDoExt_bckAnm* mpBckAnm3; + /* 0x05AC */ mDoExt_brkAnm* mSerchBrk; + /* 0x05B0 */ mDoExt_bckAnm* mBeamosBck; + /* 0x05B4 */ J3DModel* mBeamModel; + /* 0x05B8 */ mDoExt_btkAnm* mBeamBtk; + /* 0x05BC */ mDoExt_btkAnm* mBeamEffBtk; + /* 0x05C0 */ mDoExt_bckAnm* mBeamEffBck; + /* 0x05C4 */ J3DModel* mBmfModel; + /* 0x05C8 */ mDoExt_bckAnm* mBmfOffBck; /* 0x05CC */ dBgS_ObjAcch mAcch; /* 0x07A4 */ dBgS_AcchCir mAcchCir; /* 0x07E4 */ dCcD_Stts mStts; @@ -149,63 +150,61 @@ public: /* 0x0F8C */ s16 mJoints[5]; /* 0x0F96 */ s16 field_0xf96; /* 0x0F98 */ s16 field_0xf98; - /* 0x0F9A */ s16 field_0xf9a; - /* 0x0F9C */ s16 field_0xf9c; - /* 0x0F9E */ s16 field_0xf9e; - /* 0x0FA0 */ s16 field_0xfa0; - /* 0x0FA2 */ s16 field_0xfa2; - /* 0x0FA4 */ s16 field_0xfa4; - /* 0x0FA6 */ s16 field_0xfa6; - /* 0x0FA8 */ s16 field_0xfa8; + /* 0x0F9A */ s16 mBigGearRotX; + /* 0x0F9C */ s16 mBigGearRotXTarget; + /* 0x0F9E */ s16 mSmallGear0RotX; + /* 0x0FA0 */ s16 mSmallGear0RotXTarget; + /* 0x0FA2 */ s16 mSmallGear1RotX; + /* 0x0FA4 */ s16 mSmallGear1RotXTarget; + /* 0x0FA6 */ s16 mSmallGear2RotX; + /* 0x0FA8 */ s16 mSmallGear2RotXTarget; /* 0x0FAA */ s16 field_0xfaa; /* 0x0FAC */ s16 field_0xfac; - /* 0x0FAE */ s16 field_0xfae; - /* 0x0FB0 */ s16 field_0xfb0; + /* 0x0FAE */ s16 mGearRotationSpd; + /* 0x0FB0 */ s16 mGearRotSpdTarget; /* 0x0FB2 */ s16 field_0xfb2; /* 0x0FB4 */ J3DMaterial* mpMaterial; /* 0x0FB8 */ cXyz field_0xfb8; /* 0x0FC4 */ csXyz field_0xfc4; - /* 0x0FCA */ u8 field_0xfca[2]; /* 0x0FCC */ cXyz field_0xfcc; /* 0x0FD8 */ cXyz field_0xfd8; - /* 0x0FE4 */ u8 field_0xfe4; + /* 0x0FE4 */ u8 mActionIdx; /* 0x0FE5 */ u8 field_0xfe5; - /* 0x0FE6 */ u8 field_0xfe6; - /* 0x0FE7 */ s8 field_0xfe7; + /* 0x0FE6 */ u8 mSearchAttackTimer; + /* 0x0FE7 */ s8 mFindPlayerFlag; /* 0x0FE8 */ u8 field_0xfe8; /* 0x0FE9 */ u8 field_0xfe9; - /* 0x0FEA */ u8 field_0xfea; - /* 0x0FEB */ u8 field_0xfeb; + /* 0x0FEA */ u8 mActionMode; + /* 0x0FEB */ u8 mActionTypeIdx; /* 0x0FEC */ u8 field_0xfec; /* 0x0FED */ u8 field_0xfed; /* 0x0FF0 */ u32 field_0xff0; /* 0x0FF4 */ u8 field_0xff4; - /* 0x0FF5 */ u8 field_0xff5; - /* 0x0FF6 */ u8 field_0xff6; - /* 0x0FF7 */ u8 field_0xff7; - /* 0x0FF8 */ JPABaseEmitter* field_0xff8[2]; + /* 0x0FF5 */ u8 mEmitterTimer; + /* 0x0FF6 */ u8 mEffFuncIdx; + /* 0x0FF7 */ u8 mShowFlag; + /* 0x0FF8 */ JPABaseEmitter* mBrokenSmokeEmitter[2]; /* 0x1000 */ f32 field_0x1000; - /* 0x1004 */ f32 field_0x1004; - /* 0x1008 */ u16 field_0x1008; + /* 0x1004 */ f32 mPlayerDist; + /* 0x1008 */ u16 mAfterSwitchActivateNoSearchTimer; /* 0x100A */ u16 field_0x100a; /* 0x100C */ u16 field_0x100c; - /* 0x100E */ u8 field_0x100e; - /* 0x100F */ u8 field_0x100f; - /* 0x1010 */ JPABaseEmitter* field_0x1010[2]; - /* 0x1018 */ JPABaseEmitter* field_0x1018[2]; - /* 0x1010 */ JPABaseEmitter* field_0x1020[3]; - /* 0x102C */ JPABaseEmitter* field_0x102c; - /* 0x1030 */ JPABaseEmitter* field_0x1030; - /* 0x1034 */ JPABaseEmitter* field_0x1034; + /* 0x100E */ u8 mCreateFirstFlag; + /* 0x1010 */ JPABaseEmitter* mNessenBurnPrtclEmitter[2]; + /* 0x1018 */ JPABaseEmitter* mNessenSrcPrtclEmitter[2]; + /* 0x1010 */ JPABaseEmitter* mNessenSplashPrtclEmitter[3]; + /* 0x102C */ JPABaseEmitter* mGearSparkEmitter; + /* 0x1030 */ JPABaseEmitter* mGearRockEmitter; + /* 0x1034 */ JPABaseEmitter* mNessenHeatPrtclEmitter; /* 0x1038 */ s8 field_0x1038; /* 0x1039 */ s8 field_0x1039; - /* 0x103C */ cXyz field_0x103c; - /* 0x1048 */ cXyz field_0x1048; - /* 0x1054 */ cXyz field_0x1054; - /* 0x1060 */ Z2SoundObjSimple mSound; - /* 0x1080 */ Z2SoundObjSimple mSound2; - /* 0x10A0 */ cXyz field_0x10a0; - /* 0x10AC */ int field_0x10ac; + /* 0x103C */ cXyz mSparkSePos; + /* 0x1048 */ cXyz mBeamSoundPos; + /* 0x1054 */ cXyz mBurnSoundPos; + /* 0x1060 */ Z2SoundObjSimple mBeamSound; + /* 0x1080 */ Z2SoundObjSimple mBurnSound; + /* 0x10A0 */ cXyz mBeamScale; + /* 0x10AC */ int mModeProcIdx; /* 0x10B0 */ int field_0x10b0; /* 0x10B4 */ int field_0x10b4; /* 0x10B8 */ f32 field_0x10b8; @@ -216,7 +215,6 @@ public: /* 0x10CE */ s16 field_0x10ce; /* 0x10D0 */ s16 field_0x10d0; /* 0x10D2 */ u8 field_0x10d2; - /* 0x10D3 */ u8 field_0x10d3; /* 0x10D4 */ Bgc_c mBgc; }; diff --git a/src/d/actor/d_a_obj_bemos.cpp b/src/d/actor/d_a_obj_bemos.cpp index af4d0ac41c3..c93c0904d88 100644 --- a/src/d/actor/d_a_obj_bemos.cpp +++ b/src/d/actor/d_a_obj_bemos.cpp @@ -7,6 +7,7 @@ #include "SSystem/SComponent/c_lib.h" #include "d/actor/d_a_obj_bemos.h" +#include "res/Object/Obj_bm.h" #include "d/d_camera.h" #include "d/d_cc_d.h" #include "d/d_com_inf_game.h" @@ -16,6 +17,25 @@ #include "d/d_s_play.h" #include "Z2AudioLib/Z2Instances.h" +enum Action_e { + /* 0x0 */ ACTION_SW_WAIT_e, + /* 0x1 */ ACTION_WARNING_e, + /* 0x2 */ ACTION_FIND_PLAYER_e, + /* 0x3 */ ACTION_ATTACK_e, + /* 0x4 */ ACTION_DEAD_e, +}; + +enum Mode_e { + /* 0x0 */ MODE_WAIT_e, + /* 0x1 */ MODE_WALK_e, + /* 0x2 */ MODE_AFL_e, + /* 0x3 */ MODE_DEAD_e, +}; + +#if DEBUG +#pragma nosyminline on +#endif + static Vec const l_eye_offset = {0.0f, 330.0f, 75.0f}; static Vec const l_high_beam_offset = {0.0f, 255.0f, 65.0f}; @@ -38,181 +58,6 @@ s16 const daObjBm_c::M_dir_base[4] = { 0xC000, }; -#if 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 - -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; -} - -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; -} - -void daObjBm_c::initBaseMtx() { - field_0x10a0.set(0.5f, 0.5f, 1.0f); - mpModel->setBaseScale(scale); - mpModel3->setBaseScale(scale); - mpModel2->setBaseScale(field_0x10a0); - setBaseMtx(); -} - -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()); -} - static const char* l_arcName = "Obj_bm"; static const char* l_eye_matName = "bmEye"; @@ -274,9 +119,214 @@ static dCcD_SrcCyl l_cyl_src = { } // mCyl }; + +#if DEBUG +class daObjBm_HIO_c : public mDoHIO_entry_c { +public: + daObjBm_HIO_c(); + + void genMessage(JORMContext*); + + /* 0x08 */ cXyz beam_scale; + /* 0x14 */ f32 beam_lower_dist; + /* 0x18 */ f32 beam_middle_dist; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 search_dist; + /* 0x24 */ f32 target_offset_dist; + /* 0x28 */ s16 search_angle; + /* 0x2A */ s16 patrol_rot_spd; + /* 0x2C */ s16 attack_rot_spd; + /* 0x2E */ s16 after_switch_activate_no_search_time; + /* 0x30 */ s16 detection_angle; + /* 0x32 */ s16 search_spd_on_detect; + /* 0x34 */ f32 body_scale; + /* 0x38 */ f32 sound_pos_move_spd; + /* 0x3C */ u8 no_search_attack_time; + /* 0x3D */ u8 debug_draw; + /* 0x3E */ u8 check_draw; +}; + +daObjBm_HIO_c l_HIO; + +daObjBm_HIO_c::daObjBm_HIO_c() { + beam_scale.set(0.5f, 0.5f, 1.0f); + search_dist = 1000.0f; + search_angle = 30000; + patrol_rot_spd = 500; + attack_rot_spd = 450; + beam_lower_dist = 300.0f; + beam_middle_dist = 600.0f; + field_0x1C = 1000.0f; + target_offset_dist = 0.0f; + after_switch_activate_no_search_time = 20; + detection_angle = 25000; + sound_pos_move_spd = 60.0f; + no_search_attack_time = 0; + search_spd_on_detect = 1000; + body_scale = 1.0f; + debug_draw = 0; + check_draw = 0; +} + +void daObjBm_HIO_c::genMessage(JORMContext* ctx) { + ctx->genLabel("ビーモス", 0, 0, NULL, -1, -1, 512, 24); + ctx->genCheckBox("デバッグ描画", &debug_draw, 1, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("サーチ距離", &search_dist, 100.0f, 5000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("サーチ角度", &search_angle, 0.0f, 32767.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("発見角度", &detection_angle, 0.0f, 32767.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("巡回回転速度", &patrol_rot_spd, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("攻撃回転速度", &attack_rot_spd, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("ビーム発射・下距離", &beam_lower_dist, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("ビーム発射・中距離", &beam_middle_dist, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("目標オフセット距離", &target_offset_dist, 0.0f, 500.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("SW起動後サーチ無し時間", &after_switch_activate_no_search_time, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("発音位置移動速度", &sound_pos_move_spd, 0.0f, 1000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("サーチ無し攻撃時間", &no_search_attack_time, 0.0f, 100.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("発見時のサーチ速度", &search_spd_on_detect, 0.0f, 10000.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("本体スケール", &body_scale, 0.1f, 5.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("ビームXスケール", &beam_scale.x, 0.1f, 10.0f, 0, NULL, -1, -1, 512, 24); + ctx->genSlider("ビームYスケール", &beam_scale.y, 0.1f, 10.0f, 0, NULL, -1, -1, 512, 24); + ctx->genCheckBox("チェック描画", &check_draw, 1, 0, NULL, -1, -1, 512, 24); +} +#define BEAM_SCALE_X l_HIO.beam_scale.x +#define BEAM_SCALE_Y l_HIO.beam_scale.y +#define BEAM_SCALE_Z l_HIO.beam_scale.z +#define BEAM_LOWER_DIST l_HIO.beam_lower_dist +#define BEAM_MIDDLE_DIST l_HIO.beam_middle_dist +#define SEARCH_DIST l_HIO.search_dist +#define TARGET_OFFSET_DIST l_HIO.target_offset_dist +#define SEARCH_ANGLE l_HIO.search_angle +#define PATROL_ROT_SPD l_HIO.patrol_rot_spd +#define ATTACK_ROT_SPD l_HIO.attack_rot_spd +#define AFTER_SWITCH_ACTIVATE_NO_SEARCH_TIME l_HIO.after_switch_activate_no_search_time +#define DETECTION_ANGLE l_HIO.detection_angle +#define SEARCH_SPD_ON_DETECT l_HIO.search_spd_on_detect +#define BODY_SCALE l_HIO.body_scale +#define SOUND_POS_MOVE_SPD l_HIO.sound_pos_move_spd +#define NO_SEARCH_ATTACK_TIME l_HIO.no_search_attack_time +#define DEBUG_DRAW l_HIO.debug_draw +#define CHECK_DRAW l_HIO.check_draw +#else +#define BEAM_SCALE_X 0.5f +#define BEAM_SCALE_Y 0.5f +#define BEAM_SCALE_Z 1.0f +#define BEAM_LOWER_DIST 300.0f +#define BEAM_MIDDLE_DIST 600.0f +#define SEARCH_DIST 1000.0f +#define TARGET_OFFSET_DIST 0.0f +#define SEARCH_ANGLE 30000 +#define PATROL_ROT_SPD 500 +#define ATTACK_ROT_SPD 450 +#define AFTER_SWITCH_ACTIVATE_NO_SEARCH_TIME 20 +#define DETECTION_ANGLE 25000 +#define SEARCH_SPD_ON_DETECT 1000 +#define BODY_SCALE 1.0f +#define SOUND_POS_MOVE_SPD 60.0f +#define NO_SEARCH_ATTACK_TIME 0 +#define DEBUG_DRAW 0 +#define CHECK_DRAW 0 +#endif + +fopAc_ac_c* daObjBm_c::PPCallBack(fopAc_ac_c* i_bgActor, fopAc_ac_c* i_actorP, s16 param_2, dBgW_Base::PushPullLabel pp_field) { + daObjBm_c* actor_p = (daObjBm_c*)i_bgActor; + dBgW::PushPullLabel pp_label = cLib_checkBit(pp_field, dBgW::PPLABEL_3); + u8 l_swNo3 = actor_p->getSwNo3(); + u8 l_moveType = actor_p->getMoveType(); + + if (pp_label != dBgW::PPLABEL_NONE && !fopAcM_isSwitch(actor_p, l_swNo3)) { + s16 spE = cLib_checkBit(pp_label, dBgW::PPLABEL_PULL) ? + (s16)param_2 - 0x8000 : (s16)param_2; + s16 angle = spE - actor_p->home.angle.y; + + JUT_ASSERT(513, pp_label != pp_field); + + actor_p->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) { + actor_p->mMomentCnt[i]++; + } else { + actor_p->mMomentCnt[i] = 0; + } + } + + actor_p->field_0x10d2 = 1; + } + } + + return i_bgActor; +} + +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->mBigGearRotX); + } else if (jnt_no == i_this->getSmallGear0Joint()) { + mDoMtx_stack_c::XrotM(i_this->mSmallGear0RotX); + } else if (jnt_no == i_this->getSmallGear1Joint()) { + mDoMtx_stack_c::XrotM(i_this->mSmallGear1RotX); + } else if (jnt_no == i_this->getSmallGear2Joint()) { + mDoMtx_stack_c::XrotM(i_this->mSmallGear2RotX); + } + + cMtx_copy(mDoMtx_stack_c::get(), model->getAnmMtx(jnt_no)); + } + + return 1; +} + +void daObjBm_c::initBaseMtx() { + mBeamScale.set(0.5f, 0.5f, 1.0f); + mpModel->setBaseScale(scale); + mBmfModel->setBaseScale(scale); + mBeamModel->setBaseScale(mBeamScale); + setBaseMtx(); +} + +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, KREG_F(4) + 1.0f, 1.0f); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); + +#if DEBUG + mBeamScale.x = BEAM_SCALE_X; + mBeamScale.y = BEAM_SCALE_Y; +#endif + + mBeamModel->setBaseScale(mBeamScale); + mDoMtx_stack_c::transS(field_0xfb8); + mDoMtx_stack_c::ZXYrotM(field_0xfc4); + mBeamModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(home.angle); + mBmfModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} + int daObjBm_c::Create() { fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); - mStts.Init(0xff, 0xff, this); + mStts.Init(0xFF, 0xFF, this); mSph.Set(l_sph_src); mSph.SetStts(&mStts); mCps.Set(l_cps_src); @@ -301,7 +351,6 @@ int daObjBm_c::Create() { 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); @@ -309,22 +358,22 @@ int daObjBm_c::Create() { } #if DEBUG - if (field_0xfcc.x == 0) { - OSReport_Error("ブ[モス]。苔のマテリアルがありません"); + if (mpMaterial == NULL) { + OSReport_Error("ビーモス:目のマテリアルがありません\n"); return 0; } #endif - mSound.init(&field_0x1048, 1); - mSound2.init(&field_0x1054, 1); + mBeamSound.init(&mBeamSoundPos, 1); + mBurnSound.init(&mBurnSoundPos, 1); field_0x1039 = 1; if (fopAcM_isSwitch(this, getSwNo2())) { - field_0xff7 = 0x0; + mShowFlag = 0; if (getMoveType() != 1) { - mpBckAnm3->setFrame(mpBckAnm3->getEndFrame()); + mBmfOffBck->setFrame(mBmfOffBck->getEndFrame()); } initActionObjBemos(); @@ -332,13 +381,13 @@ int daObjBm_c::Create() { initActionEnBemos(); if (getSwNo() != 0xFF && !fopAcM_isSwitch(this, getSwNo())) { - field_0xff7 = 0; + mShowFlag = 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()); + mShowFlag = 1; + mSerchBrk->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BRK_TURN_e), + 1, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1); + mBeamosBck->setFrame(mBeamosBck->getEndFrame()); initActionWarning(); } } @@ -347,102 +396,103 @@ int daObjBm_c::Create() { return 1; } +// FAKEMATCH int daObjBm_c::CreateHeap() { - J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 0xd); + J3DModelData* modelData; + + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BMD_BM_e); JUT_ASSERT(767, modelData != NULL); - - mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + mpModel = mDoExt_J3DModel__create(modelData, J3DMdlFlag_DifferedDLBuffer, 0x11000084); if (mpModel == NULL) { return 0; } - J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 0x13); + J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BRK_SERCH_e); JUT_ASSERT(780, pbrk != NULL); - mpBrkAnm = new mDoExt_brkAnm(); - if (mpBrkAnm == NULL || mpBrkAnm->init(modelData, pbrk, 1, 0, 1.0f, 0, -1) == 0) { + mSerchBrk = new mDoExt_brkAnm(); + if (mSerchBrk == NULL || mSerchBrk->init(modelData, pbrk, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1) == 0) { return 0; } - J3DAnmTransform* pbck; #if DEBUG - pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7); - JUT_ASSERT(791, pbck != NULL); + pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BRK_TURN_e); + JUT_ASSERT(791, pbrk != NULL); #endif - pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 7); + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BCK_BM_UP_e); JUT_ASSERT(798, pbck != NULL); - mpBckAnm = new mDoExt_bckAnm(); - if (mpBckAnm == NULL || mpBckAnm->init(pbck, 1, 0, 1.0f, 0, -1, false) == 0) { + mBeamosBck = new mDoExt_bckAnm(); + if (mBeamosBck == NULL || mBeamosBck->init(pbck, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false) == 0) { return 0; } - modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 0xe); + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BMD_EF_BIMOBEAM_e); JUT_ASSERT(813, modelData != NULL); - mpModel2 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284); - if (mpModel2 == NULL) { + mBeamModel = mDoExt_J3DModel__create(modelData, J3DMdlFlag_DifferedDLBuffer, 0x11000284); + if (mBeamModel == NULL) { return 0; } - J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x1a); + J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BTK_EF_BIMOBEAMB_OFF_e); JUT_ASSERT(827, pbtk != NULL); - mpBtkAnm = new mDoExt_btkAnm(); - if (mpBtkAnm == NULL || mpBtkAnm->init(modelData, pbtk, 1, 0, 1.0f, 0, -1) == 0) { + mBeamBtk = new mDoExt_btkAnm(); + if (mBeamBtk == NULL || mBeamBtk->init(modelData, pbtk, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1) == 0) { return 0; } - mpBtkAnm->setFrame(mpBtkAnm->getEndFrame()); + mBeamBtk->setFrame(mBeamBtk->getEndFrame()); #if DEBUG - pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x18); + J3DAnmTextureSRTKey* pbtk2 = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BTK_EF_BIMOBEAM_ON_e); JUT_ASSERT(840, pbtk != NULL); #endif - pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x18); + pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BTK_EF_BIMOBEAM_e); JUT_ASSERT(846, pbtk != NULL); - mpBtkAnm2 = new mDoExt_btkAnm(); - if (mpBtkAnm2 == NULL || mpBtkAnm2->init(modelData, pbtk, 1, 2, 1.0f, 0, -1) == 0) { + mBeamEffBtk = new mDoExt_btkAnm(); + if (mBeamEffBtk == NULL || mBeamEffBtk->init(modelData, pbtk, 1, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1) == 0) { return 0; } - J3DAnmTransform* pbck2 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 9); + J3DAnmTransform* pbck2 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BCK_EF_BIMOBEAM_e); JUT_ASSERT(858, pbck != NULL); - mpBckAnm2 = new mDoExt_bckAnm(); - if (mpBckAnm2 == NULL || mpBckAnm2->init(pbck2, 1, 2, 1.0f, 0, -1, false) == 0) { + mBeamEffBck = new mDoExt_bckAnm(); + if (mBeamEffBck == NULL || mBeamEffBck->init(pbck2, 1, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false) == 0) { return 0; } - modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 0xf); + modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BMD_P_BMF_e); JUT_ASSERT(873, modelData != NULL); - mpModel3 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); - if (mpModel3 == NULL) { + mBmfModel = mDoExt_J3DModel__create(modelData, J3DMdlFlag_DifferedDLBuffer, 0x11000084); + if (mBmfModel == NULL) { return 0; } - J3DAnmTransform* pbck3 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 8); - JUT_ASSERT(885, pbck3 != NULL); - mpBckAnm3 = new mDoExt_bckAnm(); - if (mpBckAnm3 == NULL || mpBckAnm3->init(pbck3, 1, 0, 1.0f, 0, -1, false) == 0) { + J3DAnmTransform* pbck3 = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BCK_BMF_OFF_e); + JUT_ASSERT(885, pbck != NULL); + mBmfOffBck = new mDoExt_bckAnm(); + if (mBmfOffBck == NULL || mBmfOffBck->init(pbck3, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false) == 0) { return 0; } - mpBckAnm3->setPlaySpeed(0.0f); + mBmfOffBck->setPlaySpeed(0.0f); return 1; } int daObjBm_c::create1st() { - if (field_0x100e == 0) { + if (mCreateFirstFlag == 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; + mCreateFirstFlag = 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); + (cPhs__Step)MoveBGCreate(l_arcName, 0x1E, dBgS_MoveBGProc_TypicalRotY, 0x5500, NULL); if (phase_state == cPhs_ERROR_e) { return phase_state; } @@ -456,9 +506,9 @@ int daObjBm_c::create1st() { return phase_state; } -int daObjBm_c::Execute(Mtx** param_0) { +int daObjBm_c::Execute(Mtx** i_mtx) { #if DEBUG - scale.setall(l_HIO.mBodyScale); + scale.setall(BODY_SCALE); mpModel->setBaseScale(scale); daPy_py_c* player = daPy_getPlayerActorClass(); #endif @@ -470,10 +520,10 @@ int daObjBm_c::Execute(Mtx** param_0) { } 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); + cLib_chaseAngleS(&mBigGearRotX, mBigGearRotXTarget, mGearRotationSpd); + cLib_chaseAngleS(&mSmallGear0RotX, mSmallGear0RotXTarget, mGearRotationSpd); + cLib_chaseAngleS(&mSmallGear1RotX, mSmallGear1RotXTarget, mGearRotationSpd); + cLib_chaseAngleS(&mSmallGear2RotX, mSmallGear2RotXTarget, mGearRotationSpd); main_proc_call(); @@ -484,20 +534,20 @@ int daObjBm_c::Execute(Mtx** param_0) { mDoMtx_stack_c::multVec(&eyePos, &eyePos); attention_info.position = eyePos; - *param_0 = &mBgMtx; + *i_mtx = &mBgMtx; setBaseMtx(); - cLib_addCalcAngleS(&field_0xfaa, field_0xfac, 0x1e, 0x14, 10); - cLib_addCalcAngleS(&field_0xfae, field_0xfb0, 0x1e, 0x14, 10); + cLib_addCalcAngleS(&field_0xfaa, field_0xfac, 0x1E, 0x14, 10); + cLib_addCalcAngleS(&mGearRotationSpd, mGearRotSpdTarget, 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) { + if (mBmfOffBck->getFrame() == 0.0f) { setCrawCO(); } - mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); - mSound2.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mBeamSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mBurnSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); return 1; } @@ -507,7 +557,7 @@ void daObjBm_c::main_proc_call() { &daObjBm_c::actionObjBemos, }; - (this->*l_func[field_0xfeb])(); + (this->*l_func[mActionTypeIdx])(); } void daObjBm_c::initActionEnBemos() { @@ -515,7 +565,7 @@ void daObjBm_c::initActionEnBemos() { mpBgW->OffPushPullOk(); } - field_0xfeb = 0; + mActionTypeIdx = 0; } void daObjBm_c::initActionObjBemos() { @@ -534,6 +584,7 @@ void daObjBm_c::initActionObjBemos() { mode_dead_init(); } break; + case 1: if (fopAcM_isSwitch(this, getSwNo2())) { mode_wait(); @@ -542,7 +593,7 @@ void daObjBm_c::initActionObjBemos() { break; } - field_0xfeb = 1; + mActionTypeIdx = 1; } void daObjBm_c::actionEnBemos() { @@ -555,9 +606,7 @@ void daObjBm_c::actionEnBemos() { cCcD_Obj* hitobj = mSph.GetTgHitObj(); if (hitobj) { - if (hitobj->ChkAtType(AT_TYPE_ARROW) || hitobj->ChkAtType(AT_TYPE_BOMB) || - hitobj->ChkAtType(AT_TYPE_IRON_BALL)) - { + 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(); @@ -571,39 +620,39 @@ void daObjBm_c::actionEnBemos() { mSph.ClrTgHit(); calcBeamPos(); effect_proc(); - (this->*l_func[field_0xfe4])(); + (this->*l_func[mActionIdx])(); calcBeamLenAndAt(); - mpBckAnm2->play(); - mpBtkAnm->play(); - mpBtkAnm2->play(); - mpBrkAnm->play(); - mpBckAnm->play(); - mpBckAnm3->play(); + mBeamEffBck->play(); + mBeamBtk->play(); + mBeamEffBtk->play(); + mSerchBrk->play(); + mBeamosBck->play(); + mBmfOffBck->play(); if (field_0xfaa != 0) { fopAcM_seStartLevel(this, Z2SE_EN_BM_TURN, 0); } - if (field_0xfe4 != 4 && field_0xfe4 != 0) { + if (mActionIdx != ACTION_DEAD_e && mActionIdx != ACTION_SW_WAIT_e) { mSph.SetC(eyePos); dComIfG_Ccsp()->Set(&mSph); } - if (field_0xfe4 == 3) { + if (mActionIdx == ACTION_ATTACK_e) { dComIfG_Ccsp()->Set(&mCps); - mSound.startLevelSound(Z2SE_EN_BM_BEAM, 0, -1); + mBeamSound.startLevelSound(Z2SE_EN_BM_BEAM, 0, -1); } } void daObjBm_c::actionObjBemos() { - static daObjBm_c::modeFunc mode_proc[] = { + static const 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])(); + (this->*mode_proc[mModeProcIdx])(); } void daObjBm_c::setCrawCO() { @@ -621,117 +670,107 @@ void daObjBm_c::setCrawCO() { void daObjBm_c::calcBeamPos() { daPy_py_c* player = daPy_getPlayerActorClass(); f32 dist = fopAcM_searchPlayerDistanceXZ(this); - cXyz cStack_30 = l_low_beam_offset; + cXyz offset = 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; - } + if (dist > BEAM_MIDDLE_DIST) { + offset = l_high_beam_offset; + } else if (dist > BEAM_LOWER_DIST) { + offset = l_mid_beam_offset; } s16 sVar2 = field_0xf96; - cLib_chasePos(&field_0xfd8, cStack_30, 5.0f); + cLib_chasePos(&field_0xfd8, offset, 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; + dist = mPlayerDist; + if (dist < 300.0f) + dist = 300.0f; - cXyz cStack_3c(0.0f, 0.0f, fVar1); - mDoMtx_stack_c::multVec(&cStack_3c, &field_0xfcc); + cXyz work(0.0f, 0.0f, dist); + mDoMtx_stack_c::multVec(&work, &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); + if (field_0xfc4.x < cM_deg2s(KREG_F(15) + 20.0f)) { + field_0xfc4.x = cM_deg2s(KREG_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); + mDoMtx_stack_c::multVec(&work, &field_0xfcc); } 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; + cXyz work = field_0xfcc - field_0xfb8; + cXyz end(field_0xfb8); + work.normalizeZP(); + end += work * 1200.0f; + int frame = mBeamBtk->getFrame() + 0.5f; + f32 fVar1 = 360.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; + if (fopAcM_lc_c::lineCheck(&field_0xfb8, &end, this) && fopAcM_lc_c::checkGroundHit()) { + f32 absVal = field_0xfb8.abs(fopAcM_lc_c::getCross()); + mBeamScale.z = absVal / 1200.0f; } else { - field_0x10a0.z = 1.0f; + mBeamScale.z = 1.0f; } - cStack_5c = field_0xfb8 + (cStack_50 * (field_0x10a0.z * 1200.0f)); - mCps.cM3dGCps::Set(field_0xfb8, cStack_5c, 20.0f); + end = field_0xfb8 + (work * (mBeamScale.z * 1200.0f)); + mCps.cM3dGCps::Set(field_0xfb8, end, 20.0f); mCps.CalcAtVec(); if (field_0x1039 > 0) { - cXyz cStack_68(field_0xfcc); + cXyz target(field_0xfcc); - if (fopAcM_lc_c::lineCheck(&field_0xfb8, &cStack_5c, this) && fopAcM_lc_c::checkGroundHit()) - { - cStack_68 = fopAcM_lc_c::getCross(); + if (fopAcM_lc_c::lineCheck(&field_0xfb8, &end, this) && fopAcM_lc_c::checkGroundHit()) { + target = fopAcM_lc_c::getCross(); } - if (cLib_chasePos(&field_0x1048, cStack_68, 60.0f) != 0) { + if (cLib_chasePos(&mBeamSoundPos, target, SOUND_POS_MOVE_SPD) != 0) { field_0x1039 = -1; } - } else { - if (cLib_chasePos(&field_0x1048, cStack_5c, 60.0f) != 0) { - field_0x1039 = 1; - } + } else if (cLib_chasePos(&mBeamSoundPos, end, SOUND_POS_MOVE_SPD) != 0) { + field_0x1039 = 1; } } 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 - + s16 search_angle = DETECTION_ANGLE; s8 ret = -1; field_0xfe8 = 0; f32 playerDistanceXZ = fopAcM_searchPlayerDistanceXZ(this); - f32 fVar1 = current.pos.y - player->current.pos.y; + f32 posDelta = 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 (posDelta < 0.0f) { + if (std::fabs(posDelta) > (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; - } + s16 angle = (fopAcM_searchPlayerAngleY(this) - field_0xf96 - home.angle.y); + angle = abs(angle); + if ((search_angle / 2) > (s16)angle) { + ret = 0; + } - if (ret == 0) { - cXyz eye(eyePos); - cXyz eye2(player->eyePos); + if (ret == 0) { + cXyz eye(eyePos); + cXyz playerEye(player->eyePos); - if (fopAcM_lc_c::lineCheck(&eye, &eye2, this)) { - field_0xfe8 = 1; - } + if (fopAcM_lc_c::lineCheck(&eye, &playerEye, this)) { + field_0xfe8 = 1; } } @@ -741,39 +780,35 @@ s8 daObjBm_c::checkFindPlayer() { 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 + s16 search_angle = SEARCH_ANGLE; s8 ret = -1; field_0xfe8 = 0; f32 playerDistanceXZ = fopAcM_searchPlayerDistanceXZ(this); - f32 fVar1 = current.pos.y - player->current.pos.y; + f32 playerDistanceY = 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) { + if (playerDistanceY < 0.0f) { + if (std::fabs(playerDistanceY) > (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)) - { + s16 angle = (fopAcM_searchPlayerAngleY(this) - field_0xf96 - home.angle.y); + angle = abs(angle); + if ((search_angle / 2) > (s16)angle) { ret = 0; } if (ret == 0) { cXyz eye(eyePos); - cXyz eye2(player->eyePos); + cXyz playerEye(player->eyePos); - if (fopAcM_lc_c::lineCheck(&eye, &eye2, this)) { + if (fopAcM_lc_c::lineCheck(&eye, &playerEye, this)) { field_0xfe8 = 1; } } @@ -782,11 +817,7 @@ s8 daObjBm_c::checkSearchPlayer() { } f32 daObjBm_c::getSearchDistance() { -#if DEBUG - f32 ret = l_HIO.mSearchDistance; -#else - f32 ret = 1000.0f; -#endif + f32 ret = SEARCH_DIST; if (getSearchDist() != 15 && getSearchDist()) { ret -= getSearchDist() * 50.0f; @@ -796,11 +827,7 @@ f32 daObjBm_c::getSearchDistance() { } f32 daObjBm_c::getBeamSearchDistance() { -#if DEBUG - f32 ret = l_HIO.mSearchDistance; -#else - f32 ret = 1000.0f; -#endif + f32 ret = SEARCH_DIST; if (getBeamSearchDist() != 15 && getBeamSearchDist()) { ret -= getBeamSearchDist() * 50.0f; @@ -817,42 +844,37 @@ void daObjBm_c::effect_proc() { &daObjBm_c::effectEnd, }; - (this->*l_eff_func[field_0xff6])(); + (this->*l_eff_func[mEffFuncIdx])(); for (int i = 0; i < 2; i++) { - if (field_0xff8[i] != NULL) { - field_0xff8[i]->setGlobalRTMatrix(mpModel->getAnmMtx(getHeadJoint())); + if (mBrokenSmokeEmitter[i] != NULL) { + mBrokenSmokeEmitter[i]->setGlobalRTMatrix(mpModel->getAnmMtx(getHeadJoint())); - if (cLib_calcTimer(&field_0xff5) == 0) { - field_0xff8[i]->becomeInvalidEmitter(); - field_0xff8[i]->quitImmortalEmitter(); - field_0xff8[i] = NULL; + if (cLib_calcTimer(&mEmitterTimer) == 0) { + mBrokenSmokeEmitter[i]->becomeInvalidEmitter(); + mBrokenSmokeEmitter[i]->quitImmortalEmitter(); + mBrokenSmokeEmitter[i] = NULL; } } } - if (field_0x1034 != NULL) { + if (mNessenHeatPrtclEmitter != 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()); + mNessenHeatPrtclEmitter->setGlobalRTMatrix(mDoMtx_stack_c::get()); } - if (field_0x102c != NULL) { + if (mGearSparkEmitter != 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); + mDoMtx_stack_c::multVecZero(&mSparkSePos); + mDoAud_seStartLevel(Z2SE_EN_BM_SPARK, &mSparkSePos, 0, 0); } } -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}, -}; - void daObjBm_c::effectWait() {} void daObjBm_c::initEffectSet0() { @@ -881,14 +903,14 @@ void daObjBm_c::initEffectSet0() { NULL, NULL); } - field_0xff8[0] = dComIfGp_particle_set(dPa_RM(ID_ZF_S_BM_BROKENSMK_F), ¤t.pos, + mBrokenSmokeEmitter[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(); + if (mBrokenSmokeEmitter[0] != NULL) { + mBrokenSmokeEmitter[0]->becomeImmortalEmitter(); } - field_0xff5 = 200; - field_0xff6 = 1; + mEmitterTimer = 200; + mEffFuncIdx = 1; } void daObjBm_c::effectSet0() {} @@ -899,11 +921,10 @@ void daObjBm_c::effectEnd() {} int daObjBm_c::check_to_walk() { int ret = -1; - bool bVar1 = true; + bool flag = true; if (field_0x10d2) { - dBgW::PushPullLabel iVar2 = - cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL); + dBgW::PushPullLabel iVar2 = cLib_checkBit(mPPLabel, dBgW::PPLABEL_PULL); dBgW::PushPullLabel iVar3 = cLib_checkBit(mPPLabel, dBgW::PPLABEL_4); s16 sVar5; @@ -921,16 +942,17 @@ int daObjBm_c::check_to_walk() { 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])) { + const daObjBm_c::BgcSrc_c* bgcSrc = mBgc.M_lin5; + if (!mBgc.chk_wall_pre(this, bgcSrc, 5, M_dir_base[i])) { ret = i; } } else { - bVar1 = false; + flag = false; } } } - if (bVar1) { + if (flag) { clr_moment_cnt(); } @@ -944,15 +966,13 @@ void daObjBm_c::mode_wait_init() { mpBgW->SetCrrFunc(dBgS_MoveBGProc_Trans); clr_moment_cnt(); field_0x10bc = -1; - field_0x10ac = 0; + mModeProcIdx = MODE_WAIT_e; } void daObjBm_c::mode_wait() { - f32 tmp1 = l_eye_offset.x; - f32 tmp2 = l_eye_offset.z; - - if (field_0x10ce > 0) + if (field_0x10ce > 0) { field_0x10ce--; + } int walk_check = check_to_walk(); cXyz local_38; @@ -979,13 +999,27 @@ void daObjBm_c::mode_wait() { } } +const 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}, +}; + +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}, +}; + void daObjBm_c::mode_walk_init() { fopAcM_SetSpeedF(this, 0.0f); - field_0x10ac = 1; + mModeProcIdx = MODE_WALK_e; } -// static u8 dir_vec[48]; - void daObjBm_c::mode_walk() { static cXyz dir_vec[] = { cXyz(0.0f, 0.0f, 1.0f), @@ -994,7 +1028,7 @@ void daObjBm_c::mode_walk() { cXyz(-1.0f, 0.0f, 0.0f), }; - bool uVar5 = --field_0x10cc <= 0; + bool flag = --field_0x10cc <= 0; f32 fVar6 = (cM_scos(field_0x10cc * field_0x10b8) + 1.0f) * 0.5f; cXyz local_58; @@ -1008,15 +1042,16 @@ void daObjBm_c::mode_walk() { 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]); + if (flag) { + const daObjBm_c::BgcSrc_c* bgcSrc = mBgc.M_lin5; + mBgc.chk_wall_pre(this, bgcSrc, 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 (flag) { if (field_0x10bc == 0) { field_0x10b4++; } else if (field_0x10bc == 1) { @@ -1040,13 +1075,13 @@ void daObjBm_c::mode_walk() { void daObjBm_c::mode_afl() { fopAcM_SetSpeedF(this, 0.0f); - field_0x10ac = 2; + mModeProcIdx = MODE_AFL_e; } void daObjBm_c::mode_dead_init() { mpBgW->OffPushPullOk(); fopAcM_SetSpeedF(this, 0.0f); - field_0x10ac = 3; + mModeProcIdx = MODE_DEAD_e; } void daObjBm_c::mode_dead() {} @@ -1070,17 +1105,6 @@ daObjBm_c::Bgc_c::Bgc_c() { mState = STATE_0_e; } -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 -G_CM3D_F_INF; } @@ -1091,42 +1115,45 @@ dBgS_WtrChk daObjBm_c::Bgc_c::M_wrt_work; dBgS_ObjLinChk daObjBm_c::Bgc_c::M_wall_work[23]; +static dBgS_ObjGndChk dummy_touch_work() { + static dBgS_ObjLinChk touch_work; +} + static f32 dummy_rodata_5158() { // needed for correct rodata ordering: return 200.0f; } -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; +void daObjBm_c::Bgc_c::wall_pos(fopAc_ac_c const* i_actor, daObjBm_c::BgcSrc_c const* i_bgcSrc, int i_num, s16 i_dir, f32 param_4) { + const s16 angle = i_actor->home.angle.y + i_dir; cXyz sp48; cXyz sp54; cXyz sp60; cXyz sp6C; - cXyz sp78; + cXyz work; field_0x178 = -1; field_0x17c = FLT_MAX; - mDoMtx_stack_c::YrotS(sp8C); + mDoMtx_stack_c::YrotS(angle); 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); + work.set(i_bgcSrc->field_0xc, 0.0f, i_bgcSrc->field_0x8); + mDoMtx_stack_c::multVec(&work, &sp60); - mDoMtx_stack_c::YrotS(sp8C); + mDoMtx_stack_c::YrotS(angle); 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); + work.set(i_bgcSrc->field_0x4, 0.0f, i_bgcSrc->field_0x0); + mDoMtx_stack_c::multVec(&work, &sp48); sp48 += i_actor->current.pos; sp54 = sp48 + sp6C; @@ -1136,9 +1163,9 @@ void daObjBm_c::Bgc_c::wall_pos(fopAc_ac_c const* i_actor, daObjBm_c::BgcSrc_c c 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; + f32 absVal = sp48.abs2(field_0x64[i]); + if (absVal < field_0x17c) { + field_0x17c = absVal; field_0x178 = i; } } else { @@ -1147,60 +1174,58 @@ void daObjBm_c::Bgc_c::wall_pos(fopAc_ac_c const* i_actor, daObjBm_c::BgcSrc_c c } } -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); +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 i_dir) { + wall_pos(i_actor, i_bgcSrc, i_num, i_dir, 76.0f); return field_0x178 >= 0; } 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; + mGearRotationSpd = field_0xfaa; + mGearRotationSpd = field_0xfac; + mSerchBrk->setPlaySpeed(0.0f); + mBeamosBck->setPlaySpeed(0.0f); + mActionMode = 0; + mActionIdx = ACTION_SW_WAIT_e; } void daObjBm_c::actionSwWait() { - cXyz i_sePos; - switch (field_0xfea) { + daPy_py_c* player = daPy_getPlayerActorClass(); + + switch (mActionMode) { 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; + mSerchBrk->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BRK_UP_e), + 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); + cXyz 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; + mDoAud_seStart(Z2SE_EN_BM_BOOT, &i_sePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + mShowFlag = 1; + mActionMode = 1; } break; case 1: - if (mpBrkAnm->isStop()) { + if (mSerchBrk->isStop()) { field_0xfe5 = 0; - field_0xfea = 2; + mActionMode = 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); + mBeamBtk->init(mBeamModel->getModelData(), + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_ID_OBJ_BM_BTK_EF_BIMOBEAM_ON_e), 1, + J3DFrameCtrl::EMode_NONE, 0.0f, 0, -1); + mBeamEffBtk->setPlaySpeed(0.0f); + mSerchBrk->init(mpModel->getModelData(), + (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_ID_OBJ_BM_BRK_TURN_e), 1, + J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1); + mBeamosBck->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, dRes_ID_OBJ_BM_BCK_BM_UP_e), 1, + J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true); fopAcM_seStart(this, Z2SE_EN_BM_UP, 0); - field_0x1008 = 20; + mAfterSwitchActivateNoSearchTimer = AFTER_SWITCH_ACTIVATE_NO_SEARCH_TIME; initActionWarning(); } break; @@ -1208,38 +1233,35 @@ void daObjBm_c::actionSwWait() { } void daObjBm_c::initActionWarning() { - if (field_0x102c) { - field_0x102c->becomeInvalidEmitter(); - field_0x102c->quitImmortalEmitter(); - field_0x102c = NULL; + if (mGearSparkEmitter) { + mGearSparkEmitter->becomeInvalidEmitter(); + mGearSparkEmitter->quitImmortalEmitter(); + mGearSparkEmitter = NULL; } - if (field_0x1030) { - field_0x1030->becomeInvalidEmitter(); - field_0x1030->quitImmortalEmitter(); - field_0x1030 = NULL; + if (mGearRockEmitter) { + mGearRockEmitter->becomeInvalidEmitter(); + mGearRockEmitter->quitImmortalEmitter(); + mGearRockEmitter = NULL; } - field_0xfea = 0; - field_0xfe4 = 1; + mActionMode = 0; + mActionIdx = ACTION_WARNING_e; } void daObjBm_c::actionWarning() { -#if DEBUG - field_0xfac = l_HIO.mPatrolRotationSpeed; -#else - field_0xfac = 500; -#endif + daPy_py_c* player = daPy_getPlayerActorClass(); + field_0xfac = PATROL_ROT_SPD; - switch (field_0xfea) { + switch (mActionMode) { case 0: - field_0xfea = 1; + mActionMode = 1; break; case 1: - if (cLib_calcTimer(&field_0x1008) == 0) { - field_0xfe7 = checkFindPlayer(); - if (field_0xfe7 != -1 && field_0xfe8 == 0) { + if (cLib_calcTimer(&mAfterSwitchActivateNoSearchTimer) == 0) { + mFindPlayerFlag = checkFindPlayer(); + if (mFindPlayerFlag != -1 && field_0xfe8 == 0) { field_0xfe5 = 0; initActionFindPlayer(); } @@ -1247,68 +1269,66 @@ void daObjBm_c::actionWarning() { break; } - field_0xfb0 = field_0xfac + 100; + mGearRotSpdTarget = field_0xfac + 100; - if (field_0xfea != 5) { + if (mActionMode != 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; + mBigGearRotXTarget = mBigGearRotX - mGearRotationSpd; + mSmallGear0RotXTarget = mSmallGear0RotX + mGearRotationSpd; + mSmallGear1RotXTarget = mSmallGear1RotX + mGearRotationSpd; + mSmallGear2RotXTarget = mSmallGear2RotX + mGearRotationSpd; } 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, + mSerchBrk->init(mpModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_ID_OBJ_BM_BRK_SERCH_e), + 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); + mNessenHeatPrtclEmitter = 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 + mActionMode = 0; + field_0xfac = SEARCH_SPD_ON_DETECT; field_0xfaa = field_0xfac; - field_0xfb0 = field_0xfac; - field_0xfe4 = 2; + mGearRotSpdTarget = field_0xfac; + mActionIdx = ACTION_FIND_PLAYER_e; } void daObjBm_c::actionFindPlayer() { - switch (field_0xfea) { - case 0: + switch (mActionMode) { + 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; + mBigGearRotXTarget = mBigGearRotX - mGearRotationSpd; + mSmallGear0RotXTarget = mSmallGear0RotX + mGearRotationSpd; + mSmallGear1RotXTarget = mSmallGear1RotX + mGearRotationSpd; + mSmallGear2RotXTarget = mSmallGear2RotX + mGearRotationSpd; - if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - field_0xf96 - home.angle.y)) < - KREG_S(4) + 2000) - { - field_0xfea = 1; + s16 angle = (fopAcM_searchPlayerAngleY(this) - field_0xf96 - home.angle.y); + angle = abs(angle); + if (angle < KREG_S(4) + 2000) { + mActionMode = 1; } break; + } + case 1: field_0xf98 = field_0xf96; - field_0xfac = 0; - field_0xfaa = 0; + field_0xfaa = field_0xfac = 0; field_0x1000 = KREG_F(10) + 300.0f; - field_0xfea = 2; + mActionMode = 2; break; + case 2: field_0xf98 = field_0xf96; - field_0xfac = 0; - field_0xfaa = 0; + field_0xfaa = field_0xfac = 0; if (field_0x1000 == 0.0f) { field_0xfe5 = 0; initActionAttack(); + return; } } } @@ -1323,46 +1343,50 @@ void daObjBm_c::initActionAttack() { dPa_RM(ID_ZF_S_BM_NESSENSRC01), }; - f32 dist = fopAcM_searchPlayerDistanceXZ(this); - field_0x1004 = dist; // debug diff here + #if DEBUG + mPlayerDist = fopAcM_searchPlayerDistanceXZ(this) - TARGET_OFFSET_DIST; + #else + mPlayerDist = fopAcM_searchPlayerDistanceXZ(this); + #endif 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); + mBeamBtk->init(mBeamModel->getModelData(), + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BTK_EF_BIMOBEAM_ON_e), + 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); + mBeamEffBtk->setPlaySpeed(1.0f); - field_0xfe5 = 0x14; - field_0xfe6 = 0; // debug diff here + field_0xfe5 = 20; + mSearchAttackTimer = NO_SEARCH_ATTACK_TIME; - 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 (mGearSparkEmitter == NULL) + mGearSparkEmitter = 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 (mGearRockEmitter == NULL) + mGearRockEmitter = 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 (mGearSparkEmitter != NULL) { + mGearSparkEmitter->setRateStep(9); + mGearSparkEmitter->setLifeTime(6); + mGearSparkEmitter->setRate(6.5f); } - if (field_0x1030 != NULL) { - field_0x1030->setRateStep(2); - field_0x1030->setAwayFromCenterSpeed(32.0f); + if (mGearRockEmitter != NULL) { + mGearRockEmitter->setRateStep(2); + mGearRockEmitter->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, + csXyz rotation(0, 0, 0); + rotation.y = home.angle.y + field_0xf96; + mNessenSrcPrtclEmitter[i] = dComIfGp_particle_set(l_eff_id[i], &field_0xfb8, &rotation, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); } field_0xfed = 0; - field_0xfea = 0; - field_0xfe4 = 3; + mActionMode = 0; + mActionIdx = ACTION_ATTACK_e; } void daObjBm_c::actionAttack() { @@ -1377,86 +1401,91 @@ void daObjBm_c::actionAttack() { dPa_RM(ID_ZF_S_BM_NESSENSPLASH02), }; - f32 dVar17 = fopAcM_searchPlayerDistanceXZ(this); - f32 dVar18 = getBeamSearchDistance(); - - if (dVar17 > dVar18) { - dVar17 = getBeamSearchDistance(); + s8 sVar3 = 0; + f32 playerDistanceXZ = fopAcM_searchPlayerDistanceXZ(this); + if (playerDistanceXZ > getBeamSearchDistance()) { + playerDistanceXZ = getBeamSearchDistance(); + } + s16 sVar1 = 0x7530; + s16 sVar2 = 0x1C2; + bool flag = true; + s8 searchPlayer = checkSearchPlayer(); + if (searchPlayer == -1 && cLib_calcTimer(&field_0xfe5) == 0 || field_0xfe8 != 0) { + flag = false; } - bool bVar4 = true; - - if (checkSearchPlayer() == -1 && cLib_calcTimer(&field_0xfe5) == 0 || field_0xfe8 != 0) { - bVar4 = false; - } - - switch (field_0xfea) { + switch (mActionMode) { case 0: - if (cLib_calcTimer(&field_0xfe6) == 0) { - field_0xfea = 2; + if (cLib_calcTimer(&mSearchAttackTimer) == 0) { + mActionMode = 2; } break; + case 1: - field_0xfac = 200 - KREG_S(0); // debug diff here + field_0xfac = (ATTACK_ROT_SPD - 250) - KREG_S(0); field_0xf98 = fopAcM_searchPlayerAngleY(this) - home.angle.y; - cLib_chaseF(&field_0x1004, dVar17, KREG_F(16) + 5.0f); + cLib_chaseF(&mPlayerDist, playerDistanceXZ, KREG_F(16) + 5.0f); - if (!bVar4) { - field_0xfea = 3; + if (!flag) { + mActionMode = 3; } if (cLib_calcTimer(&field_0xfec) == 0) { - field_0xfea = 2; + mActionMode = 2; } break; + case 2: - field_0xfac = 0x1c2; // debug diff here + field_0xfac = ATTACK_ROT_SPD; field_0xf98 = fopAcM_searchPlayerAngleY(this) - home.angle.y; - cLib_chaseF(&field_0x1004, dVar17, KREG_F(16) + 15.0f); + cLib_chaseF(&mPlayerDist, playerDistanceXZ, KREG_F(16) + 15.0f); - if (!bVar4) { - field_0xfea = 0x3; + if (!flag) { + mActionMode = 3; } 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; + case 3: + mBeamBtk->init(mBeamModel->getModelData(), + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BTK_EF_BIMOBEAMB_OFF_e), + 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1); + mSerchBrk->init(mpModel->getModelData(), + (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BRK_TURN_e), + 1, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1); + field_0x1038 = 20; + + if (mNessenHeatPrtclEmitter != NULL) { + mNessenHeatPrtclEmitter->becomeInvalidEmitter(); + mNessenHeatPrtclEmitter->quitImmortalEmitter(); + mNessenHeatPrtclEmitter = 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; + if (mNessenSrcPrtclEmitter[i] != NULL) { + mNessenSrcPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenSrcPrtclEmitter[i]->quitImmortalEmitter(); + mNessenSrcPrtclEmitter[i] = NULL; } } - field_0xfea = 4; + mActionMode = 4; break; + case 4: - if (mpBtkAnm->isStop()) { + if (mBeamBtk->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; + if (mNessenBurnPrtclEmitter[i] != NULL) { + mNessenBurnPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenBurnPrtclEmitter[i]->quitImmortalEmitter(); + mNessenBurnPrtclEmitter[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 (mNessenSplashPrtclEmitter[i] != NULL) { + mNessenSplashPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenSplashPrtclEmitter[i]->quitImmortalEmitter(); + mNessenSplashPrtclEmitter[i] = NULL; } } @@ -1464,88 +1493,87 @@ void daObjBm_c::actionAttack() { } } - for (int i = 0; i < 2; i++) { // local_a4 - csXyz cStack_8c(0, 0, 0); - cStack_8c.y = home.angle.y + field_0xf96; + for (int i = 0; i < 2; i++) { + csXyz rotation(0, 0, 0); + rotation.y = home.angle.y + field_0xf96; mDoMtx_stack_c::transS(field_0xfb8); - mDoMtx_stack_c::YrotM(cStack_8c.y); + mDoMtx_stack_c::YrotM(rotation.y); - if (field_0x1018[i] != 0) { - field_0x1018[i]->setGlobalRTMatrix(mDoMtx_stack_c::get()); + if (mNessenSrcPrtclEmitter[i] != 0) { + mNessenSrcPrtclEmitter[i]->setGlobalRTMatrix(mDoMtx_stack_c::get()); } } - field_0x1054 = home.pos; + mBurnSoundPos = home.pos; cXyz cStack60 = field_0xfcc - field_0xfb8; - cXyz cStack_6c(field_0xfb8); + cXyz end(field_0xfb8); cStack60.normalizeZP(); - cStack_6c += cStack60 * 1200.0f; + end += cStack60 * 1200.0f; - if (fopAcM_lc_c::lineCheck(&field_0xfb8, &cStack_6c, this) && fopAcM_lc_c::checkGroundHit()) { + if (fopAcM_lc_c::lineCheck(&field_0xfb8, &end, this) && fopAcM_lc_c::checkGroundHit()) { if (field_0xfed == 0) { for (int i = 0; i < 2; i++) { - if (field_0x1010[i] == NULL) { - field_0x1010[i] = + if (mNessenBurnPrtclEmitter[i] == NULL) { + mNessenBurnPrtclEmitter[i] = dComIfGp_particle_set(l_eff_id[i], fopAcM_lc_c::getCrossP(), NULL, NULL, - 0xff, NULL, -1, NULL, NULL, NULL); + 0xFF, NULL, -1, NULL, NULL, NULL); } } for (int i = 0; i < 3; i++) { - if (field_0x1020[i] == NULL) { - field_0x1020[i] = + if (mNessenSplashPrtclEmitter[i] == NULL) { + mNessenSplashPrtclEmitter[i] = dComIfGp_particle_set(l_eff_id2[i], fopAcM_lc_c::getCrossP(), NULL, NULL, - 0xff, NULL, -1, NULL, 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; + f32 y, z; + z = fopAcM_lc_c::getCrossP()->z; + y = fopAcM_lc_c::getCrossP()->y + 2.0f; + mDoMtx_stack_c::transS(fopAcM_lc_c::getCrossP()->x, y, z); + cM3dGPla plane; + csXyz angle; - 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); + if (fopAcM_lc_c::checkGroundHit() && fopAcM_lc_c::getTriPla(&plane)) { + cM3d_CalcVecAngle(plane.mNormal, &angle.x, &angle.z); + mDoMtx_stack_c::XYZrotM(angle.x, 0, angle.z); } for (int i = 0; i < 2; i++) { - if (field_0x1010[i] != NULL) { - field_0x1010[i]->setGlobalRTMatrix(mDoMtx_stack_c::get()); + if (mNessenBurnPrtclEmitter[i] != NULL) { + mNessenBurnPrtclEmitter[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()); + if (mNessenSplashPrtclEmitter[i] != NULL) { + mNessenSplashPrtclEmitter[i]->setGlobalRTMatrix(mDoMtx_stack_c::get()); } } - field_0x1054 = fopAcM_lc_c::getCross(); - field_0x1054.y += 2.0f; + mBurnSoundPos = fopAcM_lc_c::getCross(); + mBurnSoundPos.y += 2.0f; } } - if (field_0x1054 != home.pos) { - mSound2.startLevelSound(Z2SE_EN_BM_BURN, 0, -1); + if (mBurnSoundPos != home.pos) { + mBurnSound.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); + if (mSerchBrk->isStop()) { + mSerchBrk->init(mpModel->getModelData(), + (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, dRes_ID_OBJ_BM_BRK_LOOK_e), 1, + J3DFrameCtrl::EMode_LOOP, 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; + mGearRotSpdTarget = field_0xfac * 3; + mBigGearRotXTarget = mBigGearRotX - mGearRotationSpd; + mSmallGear0RotXTarget = mSmallGear0RotX + mGearRotationSpd; + mSmallGear1RotXTarget = mSmallGear1RotX + mGearRotationSpd; + mSmallGear2RotXTarget = mSmallGear2RotX + mGearRotationSpd; if (checkLockOnCamera() == 0) { dCam_getBody()->ForceLockOn(this); @@ -1559,77 +1587,77 @@ void daObjBm_c::initActionDead() { field_0xf98 = 0x7FFF; } - field_0xfaa = 0; - field_0xfac = 0; + field_0xfac = field_0xfaa = 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); + mBeamosBck->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, dRes_ID_OBJ_BM_BCK_OC_DOWN_e), 1, + J3DFrameCtrl::EMode_NONE, 0.0f, 0, -1, true); + if (mBeamBtk->getBtkAnm() == (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_ID_OBJ_BM_BTK_EF_BIMOBEAM_ON_e)) { + mBeamBtk->init(mBeamModel->getModelData(), + (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, dRes_INDEX_OBJ_BM_BTK_EF_BIMOBEAMB_OFF_e), + 1, J3DFrameCtrl::EMode_NONE, 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 (mNessenSrcPrtclEmitter[i] != NULL) { + mNessenSrcPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenSrcPrtclEmitter[i]->quitImmortalEmitter(); + mNessenSrcPrtclEmitter[i] = NULL; } - if (field_0x1010[i] != NULL) { - field_0x1010[i]->becomeInvalidEmitter(); - field_0x1010[i]->quitImmortalEmitter(); - field_0x1010[i] = NULL; + if (mNessenBurnPrtclEmitter[i] != NULL) { + mNessenBurnPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenBurnPrtclEmitter[i]->quitImmortalEmitter(); + mNessenBurnPrtclEmitter[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 (mNessenSplashPrtclEmitter[i] != NULL) { + mNessenSplashPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenSplashPrtclEmitter[i]->quitImmortalEmitter(); + mNessenSplashPrtclEmitter[i] = NULL; } } - if (field_0x1034 != NULL) { - field_0x1034->becomeInvalidEmitter(); - field_0x1034->quitImmortalEmitter(); - field_0x1034 = NULL; + if (mNessenHeatPrtclEmitter != NULL) { + mNessenHeatPrtclEmitter->becomeInvalidEmitter(); + mNessenHeatPrtclEmitter->quitImmortalEmitter(); + mNessenHeatPrtclEmitter = NULL; } field_0xfe5 = 20; field_0xfe9 = 0; - field_0xff7 = 0; + mShowFlag = 0; fopAcM_OffStatus(this, 0); - field_0xfea = 0; - field_0xfe4 = 4; + mActionMode = 0; + mActionIdx = ACTION_DEAD_e; } void daObjBm_c::actionDead() { - switch (field_0xfea) { + switch (mActionMode) { case 0: if (!cLib_calcTimer(&field_0xfe5)) { - field_0xfea = 1; + mActionMode = 1; } break; case 1: field_0xfac = 500; - if (field_0x102c != NULL) { - field_0x102c->becomeInvalidEmitter(); - field_0x102c->quitImmortalEmitter(); - field_0x102c = NULL; + if (mGearSparkEmitter != NULL) { + mGearSparkEmitter->becomeInvalidEmitter(); + mGearSparkEmitter->quitImmortalEmitter(); + mGearSparkEmitter = NULL; } - if (field_0x1030 != NULL) { - field_0x1030->becomeInvalidEmitter(); - field_0x1030->quitImmortalEmitter(); - field_0x1030 = NULL; + if (mGearRockEmitter != NULL) { + mGearRockEmitter->becomeInvalidEmitter(); + mGearRockEmitter->quitImmortalEmitter(); + mGearRockEmitter = NULL; } - field_0xfea = 2; + mActionMode = 2; break; case 2: @@ -1637,30 +1665,30 @@ void daObjBm_c::actionDead() { if (field_0xf96 == field_0xf98) { field_0xfac = 0; field_0x1000 = 200.0f; - field_0xfea = 3; + mActionMode = 3; fopAcM_seStart(this, Z2SE_EN_BM_TURN_END, 0); } break; case 3: field_0xfe5 = 20; - field_0xfea = 4; + mActionMode = 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, + mBeamosBck->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; + mActionMode = 5; } break; case 5: - if (mpBckAnm->isStop()) { + if (mBeamosBck->isStop()) { field_0xfe5 = 10; fopAcM_seStart(this, Z2SE_EN_BM_DOWN, 0); - field_0xfea = 6; + mActionMode = 6; fopAcM_seStart(this, Z2SE_EN_BM_UNLOCK, 0); } break; @@ -1668,13 +1696,11 @@ void daObjBm_c::actionDead() { case 6: if (getMoveType() == 1) { initActionObjBemos(); - } else { - if (cLib_calcTimer(&field_0xfe5) == 0) { - mpBckAnm3->setPlaySpeed(1.0f); + } else if (cLib_calcTimer(&field_0xfe5) == 0) { + mBmfOffBck->setPlaySpeed(1.0f); - if (mpBckAnm3->isStop()) { - field_0xfea = 7; - } + if (mBmfOffBck->isStop()) { + mActionMode = 7; } } @@ -1683,11 +1709,11 @@ void daObjBm_c::actionDead() { 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; + mGearRotSpdTarget = field_0xfac; + mBigGearRotXTarget = mBigGearRotX - mGearRotationSpd; + mSmallGear0RotXTarget = mSmallGear0RotX + mGearRotationSpd; + mSmallGear1RotXTarget = mSmallGear1RotX + mGearRotationSpd; + mSmallGear2RotXTarget = mSmallGear2RotX + mGearRotationSpd; } int daObjBm_c::Draw() { @@ -1696,29 +1722,29 @@ int daObjBm_c::Draw() { dComIfGd_setListBG(); J3DShape* shape = mpMaterial->getShape(); - if (field_0xff7 == 0) { + if (mShowFlag == 0) { shape->hide(); } - mpBrkAnm->entry(mpModel->getModelData()); - mpBckAnm->entry(mpModel->getModelData()); + mSerchBrk->entry(mpModel->getModelData()); + mBeamosBck->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); + g_env_light.setLightTevColorType_MAJI(mBeamModel, &tevStr); - mpBtkAnm2->entry(mpModel2->getModelData()); - mpBtkAnm->entry(mpModel2->getModelData()); - mpBckAnm2->entry(mpModel2->getModelData()); - mDoExt_modelUpdateDL(mpModel2); - mDoExt_btkAnmRemove(mpModel2->getModelData()); - mDoExt_bckAnmRemove(mpModel2->getModelData()); + mBeamEffBtk->entry(mBeamModel->getModelData()); + mBeamBtk->entry(mBeamModel->getModelData()); + mBeamEffBck->entry(mBeamModel->getModelData()); + mDoExt_modelUpdateDL(mBeamModel); + mDoExt_btkAnmRemove(mBeamModel->getModelData()); + mDoExt_bckAnmRemove(mBeamModel->getModelData()); - g_env_light.setLightTevColorType_MAJI(mpModel3, &tevStr); - mpBckAnm3->entry(mpModel3->getModelData()); - mDoExt_modelUpdateDL(mpModel3); + g_env_light.setLightTevColorType_MAJI(mBmfModel, &tevStr); + mBmfOffBck->entry(mBmfModel->getModelData()); + mDoExt_modelUpdateDL(mBmfModel); #if DEBUG debugDraw(); @@ -1729,7 +1755,7 @@ int daObjBm_c::Draw() { #if DEBUG void daObjBm_c::debugDraw() { - if (l_HIO.mDebugDraw) { + if (DEBUG_DRAW) { GXColor local_4c = { 0xff, 0, @@ -1758,22 +1784,14 @@ void daObjBm_c::debugDraw() { 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; + dDbVw_drawCircleXlu(cStack_3c, BEAM_MIDDLE_DIST, local_4c, 1, 0xc); + dDbVw_drawCircleXlu(cStack_3c, BEAM_LOWER_DIST, local_4c, 1, 0xc); + local_4c = (GXColor){0, 0, 0xFF, 0xFF}; cXyz cStack_48; cStack_48.set(0.0f, 10.0f, getSearchDistance()); - s16 sVar1 = l_HIO.mSearchAngle / 2; + s16 sVar1 = SEARCH_ANGLE / 2; mDoMtx_stack_c::YrotS((home.angle.y + field_0xf96) + sVar1); mDoMtx_stack_c::multVec(&cStack_48, &cStack_48); cStack_48 += cStack_3c; @@ -1784,18 +1802,10 @@ void daObjBm_c::debugDraw() { 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; + local_4c = (GXColor){0, 0xFF, 0xFF, 0xFF}; cStack_48.set(0.0f, 10.0f, getSearchDistance()); - sVar1 = l_HIO.mDetectionAngle / 2; + sVar1 = DETECTION_ANGLE / 2; mDoMtx_stack_c::YrotS((home.angle.y + field_0xf96) + sVar1); mDoMtx_stack_c::multVec(&cStack_48, &cStack_48); cStack_48 += cStack_3c; @@ -1805,19 +1815,11 @@ void daObjBm_c::debugDraw() { 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); + dDbVw_drawLineOpa(cStack_3c, cStack_48, local_4c, 1, 0xC); + dDbVw_drawSphereOpa(field_0xfcc, 30.0f, (GXColor){0x0, 0x0, 0xFF, 0xFF}, 1); } - if (l_HIO.mCheckDraw) { + if (CHECK_DRAW) { mpBgW->CalcPlane(); } } @@ -1825,56 +1827,56 @@ void daObjBm_c::debugDraw() { 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 (mBrokenSmokeEmitter[i]) { + mBrokenSmokeEmitter[i]->becomeInvalidEmitter(); + mBrokenSmokeEmitter[i]->quitImmortalEmitter(); + mBrokenSmokeEmitter[i] = NULL; } } - if (field_0x102c) { - field_0x102c->becomeInvalidEmitter(); - field_0x102c->quitImmortalEmitter(); - field_0x102c = NULL; + if (mGearSparkEmitter) { + mGearSparkEmitter->becomeInvalidEmitter(); + mGearSparkEmitter->quitImmortalEmitter(); + mGearSparkEmitter = NULL; } - if (field_0x1030) { - field_0x1030->becomeInvalidEmitter(); - field_0x1030->quitImmortalEmitter(); - field_0x1030 = NULL; + if (mGearRockEmitter) { + mGearRockEmitter->becomeInvalidEmitter(); + mGearRockEmitter->quitImmortalEmitter(); + mGearRockEmitter = NULL; } - if (field_0x1034) { - field_0x1034->becomeInvalidEmitter(); - field_0x1034->quitImmortalEmitter(); - field_0x1034 = NULL; + if (mNessenHeatPrtclEmitter) { + mNessenHeatPrtclEmitter->becomeInvalidEmitter(); + mNessenHeatPrtclEmitter->quitImmortalEmitter(); + mNessenHeatPrtclEmitter = 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 (mNessenBurnPrtclEmitter[i]) { + mNessenBurnPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenBurnPrtclEmitter[i]->quitImmortalEmitter(); + mNessenBurnPrtclEmitter[i] = NULL; } - if (field_0x1018[i]) { - field_0x1018[i]->becomeInvalidEmitter(); - field_0x1018[i]->quitImmortalEmitter(); - field_0x1018[i] = NULL; + if (mNessenSrcPrtclEmitter[i]) { + mNessenSrcPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenSrcPrtclEmitter[i]->quitImmortalEmitter(); + mNessenSrcPrtclEmitter[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; + if (mNessenSplashPrtclEmitter[i]) { + mNessenSplashPrtclEmitter[i]->becomeInvalidEmitter(); + mNessenSplashPrtclEmitter[i]->quitImmortalEmitter(); + mNessenSplashPrtclEmitter[i] = NULL; } } mpBgW->SetPushPullCallback(NULL); - mSound.deleteObject(); - mSound2.deleteObject(); + mBeamSound.deleteObject(); + mBurnSound.deleteObject(); dComIfG_resDelete(&mPhase, l_arcName); #if DEBUG l_HIO.removeHIO(); @@ -1922,8 +1924,4 @@ extern actor_process_profile_definition g_profile_Obj_Bemos = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -static void dummy_touch_work() { - static dBgS_ObjLinChk touch_work; -} - AUDIO_INSTANCES;