Files
dusklight/src/d/actor/d_a_obj_bemos.cpp
T

2019 lines
64 KiB
C++

/**
* @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<dBgW::PushPullLabel>(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<dBgW::PushPullLabel>(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), &current.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<dBgW::PushPullLabel>(mPPLabel, dBgW::PPLABEL_PULL);
dBgW::PushPullLabel iVar3 = cLib_checkBit<dBgW::PushPullLabel>(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<dBgW::PushPullLabel>(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), &current.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), &current.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), &current.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), &current.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, &current.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;