mirror of https://github.com/zeldaret/tp.git
1242 lines
40 KiB
C++
1242 lines
40 KiB
C++
/**
|
||
* @file d_a_obj_lv6bemos2.cpp
|
||
*
|
||
*/
|
||
|
||
#include "d/dolzel_rel.h"
|
||
|
||
#include "d/actor/d_a_obj_lv6bemos2.h"
|
||
#include "d/actor/d_a_player.h"
|
||
#include "d/d_cc_d.h"
|
||
#include "d/d_com_inf_game.h"
|
||
#include "d/d_camera.h"
|
||
#include "d/d_s_play.h"
|
||
|
||
enum E_bm6_RES_File_ID {
|
||
/* BCK */
|
||
/* 0x08 */ BCK_BM6_DOWN = 0x8,
|
||
/* 0x09 */ BCK_BM6_UP,
|
||
/* 0x0A */ BCK_EF_BIMOL6,
|
||
|
||
/* BMDE */
|
||
/* 0x0D */ BMDE_BM6 = 0xD,
|
||
|
||
/* BMDR */
|
||
/* 0x10 */ BMDR_EF_BIMOL6 = 0x10,
|
||
|
||
/* BRK */
|
||
/* 0x13 */ BRK_BM6_LOOK = 0x13,
|
||
/* 0x14 */ BRK_BM6_SERCH,
|
||
/* 0x15 */ BRK_BM6_TURN,
|
||
/* 0x16 */ BRK_BM6_UP,
|
||
|
||
/* BTK */
|
||
/* 0x19 */ BTK_EF_BIMOL6 = 0x19,
|
||
/* 0x1A */ BTK_EF_BIMOL6_OFF,
|
||
/* 0x1B */ BTK_EF_BIMOL6_ON,
|
||
|
||
/* DZB */
|
||
/* 0x1E */ DZB_BM6 = 0x1E,
|
||
};
|
||
|
||
enum Particle {
|
||
/* 0x88D3 */ ZL2_GLOW02_1 = 0x88D3,
|
||
/* 0x88D4 */ ZL2_GLOW02_2,
|
||
/* 0x88D5 */ ZL2_GLOW02_3,
|
||
/* 0x88D6 */ ZLF_RING00,
|
||
/* 0x88D7 */ ZL2_SENKO01,
|
||
/* 0x88D8 */ ZL2_GLOWLINE01,
|
||
/* 0x88D9 */ ZL2_ICEROCK_1,
|
||
/* 0x88DA */ ZL2_ICEROCK_2,
|
||
/* 0x88DB */ ZL2_ROCK02_1,
|
||
/* 0x88DC */ ZL2_ROCK02_2,
|
||
/* 0x88DD */ NW_SMOKE,
|
||
/* 0x890C */ ZL2_SMOKE00_IA8 = 0x890C,
|
||
};
|
||
|
||
/* 80C7E1B8-80C7E30C 000078 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 jntNo = i_joint->getJntNo();
|
||
J3DModel* model = j3dSys.getModel();
|
||
daObjLv6Bm_c* i_this = (daObjLv6Bm_c*)model->getUserArea();
|
||
|
||
MTXCopy(model->getAnmMtx(jntNo), mDoMtx_stack_c::get());
|
||
s16 sVar1 = i_this->field_0xa28 * cM_scos(i_this->field_0xa20 * 0x2CEC);
|
||
|
||
if (jntNo == i_this->getHeadJoint()) {
|
||
mDoMtx_stack_c::XrotM(i_this->field_0x9c2 + sVar1);
|
||
} else if (jntNo == i_this->getBigGearJoint()) {
|
||
mDoMtx_stack_c::XrotM(i_this->field_0x9c6);
|
||
} else if (jntNo == i_this->getSmallGear0Joint()) {
|
||
mDoMtx_stack_c::XrotM(i_this->field_0x9ca);
|
||
} else if (jntNo == i_this->getSmallGear1Joint()) {
|
||
mDoMtx_stack_c::XrotM(i_this->field_0x9ce);
|
||
} else if (jntNo == i_this->getSmallGear2Joint()) {
|
||
mDoMtx_stack_c::XrotM(i_this->field_0x9d2);
|
||
}
|
||
|
||
MTXCopy(mDoMtx_stack_c::get(), model->getAnmMtx(jntNo));
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80C81C2C-80C81C38 000000 000C+00 9/9 0/0 0/0 .rodata l_eye_offset */
|
||
static f32 const l_eye_offset[3] = {0.0f, 430.0f, 80.0f};
|
||
|
||
/* 80C81C38-80C81C44 00000C 000C+00 0/1 0/0 0/0 .rodata l_beam_offsetPos */
|
||
static f32 const l_beam_offsetPos[3] = {0.0f, 98.0f, 125.0f};
|
||
|
||
/* 80C7E30C-80C7E374 0001CC 0068+00 1/1 0/0 0/0 .text initBaseMtx__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initBaseMtx() {
|
||
cXyz sp18(0.5f, 0.5f, 1.0f);
|
||
mBeamosModel->setBaseScale(scale);
|
||
mBeamEffectModel->setBaseScale(sp18);
|
||
setBaseMtx();
|
||
}
|
||
|
||
/* 80C7E374-80C7E448 000234 00D4+00 2/2 0/0 0/0 .text setBaseMtx__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::setBaseMtx() {
|
||
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
||
mDoMtx_stack_c::YrotM(shape_angle.y);
|
||
mBeamosModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||
mDoMtx_stack_c::scaleM(1.0f, 1.0f, 1.0f);
|
||
MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
|
||
|
||
cXyz sp18(0.5f, 0.5f, field_0xa0c);
|
||
mBeamEffectModel->setBaseScale(sp18);
|
||
mDoMtx_stack_c::transS(field_0x9e4);
|
||
mDoMtx_stack_c::ZXYrotM(field_0x9f0);
|
||
mBeamEffectModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||
}
|
||
|
||
/* 80C81D24-80C81D28 -00001 0004+00 9/10 0/0 0/0 .data l_arcName */
|
||
static char* l_arcName = "E_bm6";
|
||
|
||
/* 80C81D28-80C81D2C -00001 0004+00 0/1 0/0 0/0 .data l_eye_matName */
|
||
static char* l_eye_matName = "bm6_eye";
|
||
|
||
/* 80C81D2C-80C81D30 -00001 0004+00 0/1 0/0 0/0 .data l_head_joint */
|
||
static char* l_head_joint = "head";
|
||
|
||
/* 80C81D30-80C81D34 -00001 0004+00 0/1 0/0 0/0 .data l_bigGear_joint */
|
||
static char* l_bigGear_joint = "cogRed";
|
||
|
||
/* 80C81D34-80C81D38 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear0_joint */
|
||
static char* l_smallGear0_joint = "cogBlue";
|
||
|
||
/* 80C81D38-80C81D3C -00001 0004+00 0/1 0/0 0/0 .data l_smallGear1_joint */
|
||
static char* l_smallGear1_joint = "cogGreen";
|
||
|
||
/* 80C81D3C-80C81D40 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear2_joint */
|
||
static char* l_smallGear2_joint = "cogYellow";
|
||
|
||
/* 80C81D40-80C81D54 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,
|
||
};
|
||
|
||
/* 80C81D54-80C81D6C 000050 0018+00 0/1 0/0 0/0 .data l_cull_box */
|
||
static f32 l_cull_box[6] = {
|
||
-1200.0f, -100.0f, -1200.0f,
|
||
1200.0f, 400.0f, 1200.0f,
|
||
};
|
||
|
||
/* 80C81D6C-80C81DAC 000068 0040+00 0/1 0/0 0/0 .data l_sph_src */
|
||
static dCcD_SrcSph l_sph_src = {
|
||
{
|
||
{0x0, {{0x0, 0x0, 0x0}, {0x402420, 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
|
||
};
|
||
|
||
/* 80C81DAC-80C81DF8 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, 0x0, 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
|
||
};
|
||
|
||
/* 80C81DF8-80C81E3C 0000F4 0044+00 0/1 0/0 0/0 .data l_cyl_src */
|
||
static dCcD_SrcCyl l_cyl_src = {
|
||
{
|
||
{0x0, {{0x0, 0x0, 0x1e}, {0x400, 0x11}, 0x18}}, // mObj
|
||
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
||
{dCcD_SE_METAL, 0x2, 0x0, 0x0, 0x3}, // mGObjTg
|
||
{0x0}, // mGObjCo
|
||
}, // mObjInf
|
||
{
|
||
{0.0f, 0.0f, 0.0f}, // mCenter
|
||
120.0f, // mRadius
|
||
200.0f // mHeight
|
||
} // mCyl
|
||
};
|
||
|
||
/* 80C7E448-80C7E764 000308 031C+00 1/0 0/0 0/0 .text Create__12daObjLv6Bm_cFv */
|
||
int daObjLv6Bm_c::Create() {
|
||
fopAcM_SetMtx(this, mBeamosModel->getBaseTRMtx());
|
||
mStts.Init(0xFF, 0xFF, this);
|
||
field_0x600.Set(l_sph_src);
|
||
field_0x600.SetStts(&mStts);
|
||
field_0x738.Set(l_cps_src);
|
||
field_0x738.SetStts(&mStts);
|
||
field_0x87c.Set(l_cyl_src);
|
||
field_0x87c.SetStts(&mStts);
|
||
|
||
fopAcM_setCullSizeBox(this, l_cull_box[0], l_cull_box[1], l_cull_box[2], l_cull_box[3], l_cull_box[4], l_cull_box[5]);
|
||
|
||
JUTNameTab* name = mBeamosModel->getModelData()->getJointTree().getJointName();
|
||
for (int i = 0; i < 5; i++) {
|
||
for (u16 j = 0; j < mBeamosModel->getModelData()->getJointNum(); j++) {
|
||
if (strcmp(name->getName(j), l_joint_table[i]) == 0) {
|
||
mJoints[i] = j;
|
||
mBeamosModel->getModelData()->getJointNodePointer(j)->setCallBack(nodeCallBack);
|
||
}
|
||
}
|
||
}
|
||
|
||
mBeamosModel->setUserArea((uintptr_t)this);
|
||
name = mBeamosModel->getModelData()->getMaterialTable().getMaterialName();
|
||
for (u16 i = 0; i < mBeamosModel->getModelData()->getMaterialNum(); i++) {
|
||
if (strcmp(name->getName(i), l_eye_matName) == 0) {
|
||
mEyeMaterial = mBeamosModel->getModelData()->getMaterialNodePointer(i);
|
||
}
|
||
}
|
||
|
||
#ifdef DEBUG
|
||
if (mEyeMaterial == NULL) {
|
||
OS_REPORT("Lv6ビーモス:目のマテリアル<%s>がありません\n", l_eye_matName); // Lv6 Beamos: Eye material <%s> is not available.
|
||
return 0;
|
||
}
|
||
#endif
|
||
|
||
field_0xa7c.init(&field_0xa64, 1);
|
||
field_0xa9c.init(&field_0xa70, 1);
|
||
|
||
field_0xa19 = 1;
|
||
if (fopAcM_isSwitch(this, getSwNo2())) {
|
||
field_0xa1b = 0;
|
||
initActionEnd();
|
||
} else if (getSwNo() != 0xFF && !fopAcM_isSwitch(this, getSwNo())) {
|
||
field_0xa1b = 0;
|
||
initActionSwWait();
|
||
} else {
|
||
field_0xa1b = 1;
|
||
mpBrkAnm->init(mBeamosModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_TURN), 1, 2, 1.0f, 0, -1);
|
||
mpBckAnm->setFrame(mpBckAnm->getEndFrame());
|
||
initActionWarning();
|
||
}
|
||
|
||
|
||
initBaseMtx();
|
||
mBeamosModel->calc();
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80C7E764-80C7EB34 000624 03D0+00 1/0 0/0 0/0 .text CreateHeap__12daObjLv6Bm_cFv */
|
||
int daObjLv6Bm_c::CreateHeap() {
|
||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDE_BM6);
|
||
JUT_ASSERT(620, modelData != 0);
|
||
|
||
mBeamosModel = mDoExt_J3DModel__create(modelData, 0, 0x11000084);
|
||
if (mBeamosModel == NULL) {
|
||
return 0;
|
||
}
|
||
|
||
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_SERCH);
|
||
JUT_ASSERT(633, pbrk != 0);
|
||
mpBrkAnm = new mDoExt_brkAnm();
|
||
if (mpBrkAnm == NULL || mpBrkAnm->init(modelData, pbrk, 1, 0, 1.0f, 0, -1) == 0) {
|
||
return 0;
|
||
}
|
||
|
||
#ifdef DEBUG
|
||
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_TURN);
|
||
JUT_ASSERT(644, pbrk != 0);
|
||
#endif
|
||
|
||
J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_BM6_UP);
|
||
JUT_ASSERT(651, 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, BMDR_EF_BIMOL6);
|
||
JUT_ASSERT(0x29A, modelData != 0);
|
||
mBeamEffectModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284);
|
||
if (mBeamEffectModel == NULL) {
|
||
return 0;
|
||
}
|
||
|
||
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOL6_OFF);
|
||
JUT_ASSERT(680, 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, BTK_EF_BIMOL6_ON);
|
||
JUT_ASSERT(693, pbtk != 0);
|
||
#endif
|
||
|
||
pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOL6);
|
||
JUT_ASSERT(699, 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, BCK_EF_BIMOL6);
|
||
JUT_ASSERT(711, pbck != 0);
|
||
mpBckAnm2 = new mDoExt_bckAnm();
|
||
if (mpBckAnm2 == NULL || mpBckAnm2->init(pbck2, 1, 2, 1.0f, 0, -1, false) == 0) {
|
||
return 0;
|
||
}
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80C7EB7C-80C7EC6C 000A3C 00F0+00 1/1 0/0 0/0 .text create1st__12daObjLv6Bm_cFv */
|
||
cPhs__Step daObjLv6Bm_c::create1st() {
|
||
if (fopAcM_isSwitch(this, (u8)getSwNo3())) {
|
||
OS_REPORT("Lv6ビーモス:既に破壊!<%d>\n", getSwNo3()); // Lv6 Beamos: Already destroyed! <%d>
|
||
return cPhs_ERROR_e;
|
||
}
|
||
|
||
if (field_0xa36 == 0) {
|
||
field_0xa32 = home.angle.x;
|
||
field_0xa34 = home.angle.z;
|
||
home.angle.z = 0;
|
||
home.angle.x = 0;
|
||
current.angle.z = 0;
|
||
current.angle.x = 0;
|
||
shape_angle.z = 0;
|
||
shape_angle.x = 0;
|
||
field_0xa36 = 1;
|
||
}
|
||
|
||
cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&mPhase, l_arcName);
|
||
if (phase == cPhs_COMPLEATE_e) {
|
||
phase = (cPhs__Step)MoveBGCreate(l_arcName, DZB_BM6, dBgS_MoveBGProc_TypicalRotY, 0x2FA0, NULL);
|
||
|
||
if (phase == cPhs_ERROR_e) {
|
||
return phase;
|
||
}
|
||
}
|
||
|
||
return phase;
|
||
}
|
||
|
||
/* 80C7EC6C-80C7EE50 000B2C 01E4+00 1/0 0/0 0/0 .text Execute__12daObjLv6Bm_cFPPA3_A4_f */
|
||
int daObjLv6Bm_c::Execute(f32 (**param_1)[3][4]) {
|
||
field_0xa20++;
|
||
|
||
if (field_0x9c2 != field_0x9c4 && field_0x9d6 == 0) {
|
||
field_0x9d6 = 0xFA;
|
||
}
|
||
|
||
cLib_chaseAngleS(&field_0x9c2, field_0x9c4, field_0x9d6);
|
||
cLib_chaseAngleS(&field_0x9c6, field_0x9c8, field_0x9da);
|
||
cLib_chaseAngleS(&field_0x9ca, field_0x9cc, field_0x9da);
|
||
cLib_chaseAngleS(&field_0x9ce, field_0x9d0, field_0x9da);
|
||
cLib_chaseAngleS(&field_0x9d2, field_0x9d4, field_0x9da);
|
||
|
||
action();
|
||
|
||
eyePos.x = l_eye_offset[0];
|
||
eyePos.y = l_eye_offset[1];
|
||
eyePos.z = l_eye_offset[2];
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(home.angle.y + field_0x9c2);
|
||
mDoMtx_stack_c::multVec(&eyePos, &eyePos);
|
||
attention_info.position = eyePos;
|
||
|
||
*param_1 = &mBgMtx;
|
||
setBaseMtx();
|
||
|
||
cLib_addCalcAngleS(&field_0x9d6, field_0x9d8, 0x1E, 0x14, 10);
|
||
cLib_addCalcAngleS(&field_0x9da, field_0x9dc, 0x1E, 0x14, 10);
|
||
cLib_addCalc(&field_0xa28, 0.0f, 0.2f, 50.0f, 10.0f);
|
||
field_0x9de = field_0x9c2;
|
||
|
||
field_0xa7c.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
|
||
field_0xa9c.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80C7EE50-80C7F2A4 000D10 0454+00 1/1 0/0 0/0 .text action__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::action() {
|
||
static daObjLv6Bm_c::actionFunc l_func[6] = {
|
||
&daObjLv6Bm_c::actionSwWait,
|
||
&daObjLv6Bm_c::actionWarning,
|
||
&daObjLv6Bm_c::actionFindPlayer,
|
||
&daObjLv6Bm_c::actionAttack,
|
||
&daObjLv6Bm_c::actionDead,
|
||
&daObjLv6Bm_c::actionEnd
|
||
};
|
||
|
||
static u16 const l_particle_id[3] = {
|
||
ZL2_ROCK02_1,
|
||
ZL2_ROCK02_2,
|
||
NW_SMOKE,
|
||
};
|
||
|
||
cCcD_Obj* hitObj;
|
||
if (field_0x600.ChkTgHit()) {
|
||
hitObj = field_0x600.GetTgHitObj();
|
||
if (hitObj != NULL && (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(fopAcM_GetRoomNo(this)));
|
||
initEffectSet0();
|
||
fopAcM_onSwitch(this, getSwNo2());
|
||
initActionDead();
|
||
OS_REPORT("Lv6ビーモス:目破壊されました!<%d>\n", getSwNo2()); // Lv6 Beamos: Eye destroyed! <%d>
|
||
}
|
||
}
|
||
|
||
field_0x600.ClrTgHit();
|
||
|
||
if (field_0x87c.ChkTgHit()) {
|
||
hitObj = field_0x87c.GetTgHitObj();
|
||
if (hitObj != NULL && hitObj->ChkAtType(AT_TYPE_CSTATUE_SWING)) {
|
||
if (fopAcM_GetName(field_0x87c.GetTgHitAc()) == PROC_CSTATUE) {
|
||
for (int i = 0; i < 3; i++) {
|
||
dComIfGp_particle_set(l_particle_id[i], ¤t.pos, NULL, &scale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
||
}
|
||
|
||
fopAcM_seStart(this, Z2SE_EN_BM_BREAK, 0);
|
||
fopAcM_delete(this);
|
||
fopAcM_onSwitch(this, getSwNo3());
|
||
OS_REPORT_ERROR("Lv6ビーモス:本体破壊されました!<%d>\n", getSwNo2()); // Lv6 Beamos: The main body has been destroyed! <%d>
|
||
}
|
||
}
|
||
}
|
||
|
||
effect_proc();
|
||
calcBeam();
|
||
|
||
if (field_0xa10 == 3) {
|
||
dComIfG_Ccsp()->Set(&field_0x738);
|
||
if (mpBtkAnm != NULL && mpBtkAnm->getFrame() != 0.0f) {
|
||
field_0xa7c.startLevelSound(Z2SE_EN_BM_BEAM2, 0, -1);
|
||
}
|
||
}
|
||
|
||
(this->*l_func[field_0xa10])();
|
||
|
||
mpBckAnm2->play();
|
||
mpBtkAnm->play();
|
||
mpBtkAnm2->play();
|
||
mpBrkAnm->play();
|
||
mpBckAnm->play();
|
||
|
||
if (field_0x9d6 != 0) {
|
||
fopAcM_seStartLevel(this, Z2SE_EN_BM_TURN, 0);
|
||
}
|
||
|
||
if (field_0xa10 != 0) {
|
||
field_0x600.SetC(eyePos);
|
||
dComIfG_Ccsp()->Set(&field_0x600);
|
||
}
|
||
|
||
cXyz sp2c(current.pos);
|
||
sp2c.y += 300.0f;
|
||
field_0x87c.SetC(sp2c);
|
||
dComIfG_Ccsp()->Set(&field_0x87c);
|
||
}
|
||
|
||
/* 80C7F2A4-80C7F8BC 001164 0618+00 1/1 0/0 0/0 .text calcBeam__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::calcBeam() {
|
||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||
fopAcM_searchPlayerDistanceXZ(this);
|
||
|
||
mDoMtx_stack_c::copy(mBeamosModel->getAnmMtx(getHeadJoint()));
|
||
mDoMtx_stack_c::multVecZero(&field_0x9e4);
|
||
mDoMtx_stack_c::transS(field_0x9e4);
|
||
mDoMtx_stack_c::YrotM(shape_angle.y + field_0x9c2);
|
||
mDoMtx_stack_c::transM(cXyz(l_beam_offsetPos[0], l_beam_offsetPos[1], l_beam_offsetPos[2]));
|
||
mDoMtx_stack_c::multVecZero(&field_0x9e4);
|
||
|
||
cXyz sp6c(0.0f, 0.0f, field_0xa2c);
|
||
mDoMtx_stack_c::transS(current.pos);
|
||
mDoMtx_stack_c::YrotM(shape_angle.y + field_0x9c2);
|
||
mDoMtx_stack_c::multVec(&sp6c, &field_0x9f8);
|
||
field_0x9f8.y += player->current.pos.y - current.pos.y;
|
||
|
||
cXyz sp78(field_0x9e4 - field_0x9f8);
|
||
field_0x9f0.x = cM_atan2s(sp78.y, field_0x9f8.absXZ(field_0x9e4));
|
||
if (field_0x9f0.x < cM_deg2s(20.0f)) {
|
||
field_0x9f0.x = cM_deg2s(20.0f);
|
||
}
|
||
field_0x9f0.y = field_0x9c2 + current.angle.y;
|
||
field_0x9f0.z = 0;
|
||
|
||
sp6c = field_0x9f8 - field_0x9e4;
|
||
sp6c.normalizeZP();
|
||
|
||
f32 fVar1 = (int)(mpBtkAnm->getFrame() + 0.5f) * 360.0f;
|
||
|
||
if (fVar1 > 1200.0f) {
|
||
fVar1 = 1200.0f;
|
||
}
|
||
|
||
field_0x9f8 = field_0x9e4 + (sp6c * fVar1);
|
||
if (fopAcM_lc_c::lineCheck(&field_0x9e4, &field_0x9f8, this)) {
|
||
field_0xa0c = field_0x9e4.abs(fopAcM_lc_c::getCross()) / fVar1;
|
||
} else {
|
||
field_0xa0c = 1.0f;
|
||
}
|
||
|
||
field_0xa0c += 0.01f;
|
||
field_0x9f8 = field_0x9e4 + (sp6c * (fVar1 * field_0xa0c));
|
||
field_0x738.cCcD_CpsAttr::Set(field_0x9e4, field_0x9f8, 20.0f);
|
||
field_0x738.CalcAtVec();
|
||
|
||
if (field_0xa19 > 0) {
|
||
cXyz sp84(field_0x9f8);
|
||
if (fopAcM_lc_c::lineCheck(&field_0x9e4, &field_0x9f8, this) != NULL && fopAcM_lc_c::checkGroundHit()) {
|
||
sp84 = fopAcM_lc_c::getCross();
|
||
}
|
||
|
||
if (cLib_chasePos(&field_0xa64, sp84, 60.0f)) {
|
||
field_0xa19 = -1;
|
||
}
|
||
} else if (cLib_chasePos(&field_0xa64, field_0x9e4, 60.0f)) {
|
||
field_0xa19 = 1;
|
||
}
|
||
|
||
}
|
||
|
||
/* 80C7F904-80C7FA54 0017C4 0150+00 1/1 0/0 0/0 .text checkFindPlayer__12daObjLv6Bm_cFv */
|
||
int daObjLv6Bm_c::checkFindPlayer() {
|
||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||
f32 searchDistance = getSearchDistance();
|
||
int rv = -1;
|
||
|
||
field_0xa15 = 0;
|
||
f32 playerDistanceXZ = fopAcM_searchPlayerDistanceXZ(this);
|
||
f32 fVar1 = current.pos.y - player->current.pos.y;
|
||
if (playerDistanceXZ > searchDistance) {
|
||
return -1;
|
||
}
|
||
|
||
if (fabsf(fVar1) > (1.0f - (playerDistanceXZ / searchDistance)) * l_eye_offset[1]) {
|
||
return -1;
|
||
}
|
||
|
||
if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - field_0x9c2 - home.angle.y)) < 0x30D4) {
|
||
rv = 0;
|
||
}
|
||
|
||
if ((s8)rv == 0) {
|
||
cXyz sp5c(eyePos);
|
||
cXyz sp68(player->eyePos);
|
||
if (fopAcM_lc_c::lineCheck(&sp5c, &sp68, this)) {
|
||
field_0xa15 = 1;
|
||
}
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 80C7FA54-80C7FBA4 001914 0150+00 1/1 0/0 0/0 .text checkSearchPlayer__12daObjLv6Bm_cFv */
|
||
s8 daObjLv6Bm_c::checkSearchPlayer() {
|
||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||
f32 searchDistance = getSearchDistance();
|
||
s8 rv = -1;
|
||
|
||
field_0xa15 = 0;
|
||
|
||
f32 playerDistanceXZ = fopAcM_searchPlayerDistanceXZ(this);
|
||
f32 fVar1 = current.pos.y - player->current.pos.y;
|
||
if (playerDistanceXZ > searchDistance) {
|
||
return -1;
|
||
}
|
||
|
||
if (fabsf(fVar1) > (1.0f - (playerDistanceXZ / searchDistance)) * l_eye_offset[1]) {
|
||
return -1;
|
||
}
|
||
|
||
if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - field_0x9c2 - home.angle.y)) < 0x3A98) {
|
||
rv = 0;
|
||
}
|
||
|
||
if (rv == 0) {
|
||
cXyz sp5c(eyePos);
|
||
cXyz sp68(player->eyePos);
|
||
if (fopAcM_lc_c::lineCheck(&sp5c, &sp68, this)) {
|
||
field_0xa15 = 1;
|
||
}
|
||
}
|
||
|
||
return rv;
|
||
}
|
||
|
||
/* 80C7FBA4-80C7FBFC 001A64 0058+00 2/2 0/0 0/0 .text getSearchDistance__12daObjLv6Bm_cFv */
|
||
f32 daObjLv6Bm_c::getSearchDistance() {
|
||
f32 rv = 1000.0f;
|
||
if (getSearchDist() != 15 && getSearchDist() != 0) {
|
||
rv -= getSearchDist() * 50.0f;
|
||
}
|
||
return rv;
|
||
}
|
||
|
||
/* 80C7FBFC-80C7FC54 001ABC 0058+00 1/1 0/0 0/0 .text getBeamSearchDistance__12daObjLv6Bm_cFv */
|
||
f32 daObjLv6Bm_c::getBeamSearchDistance() {
|
||
f32 rv = 1000.0f;
|
||
if (getBeamSearchDist() != 15 && getBeamSearchDist() != 0) {
|
||
rv -= getBeamSearchDist() * 50.0f;
|
||
}
|
||
return rv;
|
||
}
|
||
|
||
/* 80C7FC54-80C7FD8C 001B14 0138+00 1/1 0/0 0/0 .text effect_proc__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::effect_proc() {
|
||
static daObjLv6Bm_c::effectFunc l_eff_func[2] = {
|
||
&daObjLv6Bm_c::effectWait,
|
||
&daObjLv6Bm_c::effectSet0,
|
||
};
|
||
|
||
(this->*l_eff_func[field_0xa1a])();
|
||
|
||
if (field_0xa50 != NULL) {
|
||
mDoMtx_stack_c::copy(mBeamosModel->getAnmMtx((u16)getBigGearJoint()));
|
||
mDoMtx_stack_c::multVecZero(&field_0xa58);
|
||
mDoAud_seStartLevel(Z2SE_EN_BM_SPARK, &field_0xa58, 0, 0);
|
||
}
|
||
}
|
||
|
||
/* 80C7FD8C-80C7FD90 001C4C 0004+00 1/0 0/0 0/0 .text effectWait__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::effectWait() {
|
||
/* empty function */
|
||
}
|
||
|
||
/* 80C7FD90-80C7FEC4 001C50 0134+00 1/1 0/0 0/0 .text initEffectSet0__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initEffectSet0() {
|
||
static u16 const eff_id[2] = {
|
||
ZL2_ICEROCK_1,
|
||
ZL2_ICEROCK_2,
|
||
};
|
||
|
||
csXyz i_rotation(home.angle);
|
||
i_rotation.y += field_0x9c2;
|
||
|
||
for (int i = 0; i < 2; i++) {
|
||
dComIfGp_particle_set(eff_id[i], &eyePos, &i_rotation, &scale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
||
}
|
||
|
||
field_0xa24 = dComIfGp_particle_set(ZL2_SMOKE00_IA8, &eyePos, &i_rotation, &scale, 0xFF, NULL, -1, NULL, NULL, NULL);
|
||
if (field_0xa24 != NULL) {
|
||
field_0xa24->becomeImmortalEmitter();
|
||
}
|
||
|
||
field_0xa1a = 1;
|
||
}
|
||
|
||
/* 80C7FEC4-80C7FF78 001D84 00B4+00 1/0 0/0 0/0 .text effectSet0__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::effectSet0() {
|
||
if (field_0xa24 != NULL) {
|
||
if (field_0xa24->isEnableDeleteEmitter()) {
|
||
field_0xa24->quitImmortalEmitter();
|
||
field_0xa24 = NULL;
|
||
} else {
|
||
mDoMtx_stack_c::copy(mBeamosModel->getAnmMtx(getHeadJoint()));
|
||
field_0xa24->setGlobalRTMatrix(mDoMtx_stack_c::get());
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 80C7FF78-80C7FFB8 001E38 0040+00 1/1 0/0 0/0 .text initActionSwWait__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initActionSwWait() {
|
||
field_0x9d6 = 0;
|
||
field_0x9d8 = 0;
|
||
field_0x9da = field_0x9d6;
|
||
field_0x9da = field_0x9d8;
|
||
mpBrkAnm->setPlaySpeed(0.0f);
|
||
mpBckAnm->setPlaySpeed(0.0f);
|
||
mMode = 0;
|
||
field_0xa10 = 0;
|
||
}
|
||
|
||
/* 80C7FFB8-80C802AC 001E78 02F4+00 1/0 0/0 0/0 .text actionSwWait__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::actionSwWait() {
|
||
cXyz i_sePos;
|
||
switch (mMode) {
|
||
case 0:
|
||
if (fopAcM_isSwitch(this, getSwNo())) {
|
||
mpBrkAnm->init(mBeamosModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_UP),
|
||
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_0xa1b = 1;
|
||
mMode = 1;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
if (mpBrkAnm->isStop()) {
|
||
field_0xa11 = 0;
|
||
mMode = 2;
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
if (cLib_calcTimer(&field_0xa11) == 0) {
|
||
mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOL6_ON),
|
||
1, 0, 0.0f, 0, -1);
|
||
mpBtkAnm2->setPlaySpeed(0.0f);
|
||
mpBrkAnm->init(mBeamosModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_TURN),
|
||
1, 2, 1.0f, 0, -1);
|
||
mpBckAnm->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_BM6_UP), 1, 0, 1.0f, 0, -1, true);
|
||
fopAcM_seStart(this, Z2SE_EN_BM_UP, 0);
|
||
field_0xa30 = 20;
|
||
initActionWarning();
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
/* 80C802AC-80C802C0 00216C 0014+00 3/3 0/0 0/0 .text initActionWarning__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initActionWarning() {
|
||
mMode = 0;
|
||
field_0xa10 = 1;
|
||
}
|
||
|
||
/* 80C802C0-80C803D8 002180 0118+00 1/0 0/0 0/0 .text actionWarning__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::actionWarning() {
|
||
field_0x9d8 = 500;
|
||
fopAcM_searchPlayerAngleY(this);
|
||
|
||
switch (mMode) {
|
||
case 0:
|
||
mMode = 1;
|
||
break;
|
||
|
||
case 1:
|
||
if (cLib_calcTimer(&field_0xa30) == 0) {
|
||
field_0xa14 = checkFindPlayer();
|
||
if (field_0xa14 != -1 && field_0xa15 == 0) {
|
||
field_0xa11 = 0;
|
||
initActionFindPlayer();
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
field_0x9dc = field_0x9d8 + 100;
|
||
if (mMode != 5) {
|
||
field_0x9c4 = field_0x9c2 + field_0x9d6;
|
||
}
|
||
|
||
field_0x9c8 = field_0x9c6 - field_0x9da;
|
||
field_0x9cc = field_0x9ca + field_0x9da;
|
||
field_0x9d0 = field_0x9ce + field_0x9da;
|
||
field_0x9d4 = field_0x9d2 + field_0x9da;
|
||
}
|
||
|
||
/* 80C803D8-80C80538 002298 0160+00 1/1 0/0 0/0 .text initActionFindPlayer__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initActionFindPlayer() {
|
||
mpBrkAnm->init(mBeamosModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_SERCH),
|
||
1, 0, 1.0f, 0, -1);
|
||
fopAcM_seStart(this, Z2SE_EN_BM_FIND, 0);
|
||
fopAcM_seStart(this, Z2SE_EN_BM_HEAT, 0);
|
||
field_0xa11 = 0;
|
||
mMode = 0;
|
||
field_0x9d8 = 1000;
|
||
field_0x9d6 = field_0x9d8;
|
||
field_0x9dc = field_0x9d8;
|
||
field_0xa10 = 2;
|
||
}
|
||
|
||
/* 80C80538-80C80684 0023F8 014C+00 1/0 0/0 0/0 .text actionFindPlayer__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::actionFindPlayer() {
|
||
switch (mMode) {
|
||
case 0:
|
||
field_0x9c4 = fopAcM_searchPlayerAngleY(this) - home.angle.y;
|
||
field_0x9c8 = field_0x9c6 - field_0x9da;
|
||
field_0x9cc = field_0x9ca + field_0x9da;
|
||
field_0x9d0 = field_0x9ce + field_0x9da;
|
||
field_0x9d4 = field_0x9d2 + field_0x9da;
|
||
|
||
if ((s16)abs((s16)(fopAcM_searchPlayerAngleY(this) - field_0x9c2 - home.angle.y)) < 2000) {
|
||
mMode = 1;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
field_0x9c4 = field_0x9c2;
|
||
field_0x9d8 = 0;
|
||
field_0x9d6 = 0;
|
||
field_0xa28 = 300.0f;
|
||
mMode = 2;
|
||
break;
|
||
|
||
case 2:
|
||
field_0x9c4 = field_0x9c2;
|
||
field_0x9d8 = 0;
|
||
field_0x9d6 = 0;
|
||
|
||
if (field_0xa28 == 0.0f) {
|
||
field_0xa11 = 0;
|
||
initActionAttack();
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
/* 80C80684-80C8082C 002544 01A8+00 1/1 0/0 0/0 .text initActionAttack__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initActionAttack() {
|
||
static u16 const eff_id[4] = {
|
||
ZL2_GLOW02_3,
|
||
ZLF_RING00,
|
||
ZL2_SENKO01,
|
||
ZL2_GLOWLINE01,
|
||
};
|
||
|
||
f32 fVar1 = 0.0f;
|
||
field_0xa2c = fopAcM_searchPlayerDistanceXZ(this) - fVar1;
|
||
|
||
mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOL6_ON),
|
||
1, 0, 0.0f, 0, -1);
|
||
mpBtkAnm->setFrame(0.0f);
|
||
mpBtkAnm2->setPlaySpeed(1.0f);
|
||
|
||
field_0xa13 = 16;
|
||
field_0xa11 = 20;
|
||
field_0xa12 = 0;
|
||
|
||
mDoMtx_stack_c::copy(mBeamosModel->getAnmMtx(getHeadJoint()));
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
field_0xa40[i] = dComIfGp_particle_set(eff_id[i], ¤t.pos, ¤t.angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL);
|
||
if (field_0xa40[i] != NULL) {
|
||
field_0xa40[i]->setGlobalRTMatrix(mDoMtx_stack_c::get());
|
||
}
|
||
}
|
||
|
||
field_0xa18 = 0;
|
||
mMode = 0;
|
||
field_0xa10 = 3;
|
||
}
|
||
|
||
/* 80C8082C-80C80F48 0026EC 071C+00 1/0 0/0 0/0 .text actionAttack__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::actionAttack() {
|
||
static u16 const l_eff_id[2] = {
|
||
ZL2_GLOW02_1,
|
||
ZL2_GLOW02_2,
|
||
};
|
||
|
||
bool sp_0x15 = false;
|
||
bool bVar2 = false;
|
||
f32 fVar1 = fopAcM_searchPlayerDistanceXZ(this);
|
||
if (fVar1 > getBeamSearchDistance()) {
|
||
fVar1 = getBeamSearchDistance();
|
||
}
|
||
|
||
s16 sp_0x18 = 30000;
|
||
s16 sp_0x16 = 200;
|
||
bool bVar1 = true;
|
||
s8 is_srch_ply = checkSearchPlayer();
|
||
if ((is_srch_ply == -1 && cLib_calcTimer(&field_0xa11) == 0) || field_0xa15 != 0) {
|
||
bVar1 = false;
|
||
}
|
||
|
||
switch (mMode) {
|
||
case 0:
|
||
if (cLib_calcTimer(&field_0xa12) == 0) {
|
||
mMode = 2;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
field_0x9d8 = sp_0x16;
|
||
field_0x9c4 = fopAcM_searchPlayerAngleY(this) - home.angle.y;
|
||
|
||
cLib_chaseF(&field_0xa2c, fVar1, 5.0f + KREG_F(16));
|
||
if (!bVar1) {
|
||
mMode = 3;
|
||
}
|
||
|
||
if (cLib_calcTimer(&field_0xa17) == 0) {
|
||
mMode = 2;
|
||
}
|
||
break;
|
||
|
||
case 2:
|
||
field_0x9d8 = 450;
|
||
field_0x9c4 = fopAcM_searchPlayerAngleY(this) - home.angle.y;
|
||
cLib_chaseF(&field_0xa2c, fVar1, 15.0f + KREG_F(16));
|
||
if (!bVar1) {
|
||
mMode = 3;
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOL6_OFF),
|
||
1, 0, 1.0f, 0, -1);
|
||
mpBrkAnm->init(mBeamosModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_TURN),
|
||
1, 2, 1.0f, 0, -1);
|
||
field_0xa1c = 0xFF;
|
||
mMode = 4;
|
||
break;
|
||
|
||
case 4:
|
||
bVar2 = (cLib_chaseUC(&field_0xa1c, 0, 26) == 1) && (mpBtkAnm->isStop());
|
||
for (int i = 0; i < 4; i++) {
|
||
if (field_0xa40[i] != NULL) {
|
||
field_0xa40[i]->setGlobalAlpha(field_0xa1c);
|
||
}
|
||
}
|
||
|
||
if (bVar2) {
|
||
for (int i = 0; i < 2; i++) {
|
||
if (field_0xa38[i] != NULL) {
|
||
field_0xa38[i]->becomeInvalidEmitter();
|
||
field_0xa38[i]->quitImmortalEmitter();
|
||
field_0xa38[i] = NULL;
|
||
}
|
||
}
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
if (field_0xa40[i] != NULL) {
|
||
field_0xa40[i]->becomeInvalidEmitter();
|
||
field_0xa40[i]->quitImmortalEmitter();
|
||
field_0xa40[i] = NULL;
|
||
}
|
||
}
|
||
|
||
initActionWarning();
|
||
}
|
||
}
|
||
|
||
field_0xa70 = home.pos;
|
||
bool sp_0x11 = false;
|
||
if (fopAcM_lc_c::lineCheck(&field_0x9e4, &field_0x9f8, this) && fopAcM_lc_c::checkGroundHit()) {
|
||
if (field_0xa18 == 0) {
|
||
for (int i = 0; i < 2; i++) {
|
||
if (field_0xa38[i] == NULL) {
|
||
field_0xa38[i] = dComIfGp_particle_set(l_eff_id[i], fopAcM_lc_c::getCrossP(), NULL, NULL, 0xFF,
|
||
NULL, -1, NULL, NULL, NULL);
|
||
}
|
||
}
|
||
|
||
field_0xa18 = 1;
|
||
} else {
|
||
mDoMtx_stack_c::transS(fopAcM_lc_c::getCross());
|
||
for (int i = 0; i < 2; i++) {
|
||
if (field_0xa38[i] != NULL) {
|
||
field_0xa38[i]->setGlobalRTMatrix(mDoMtx_stack_c::get());
|
||
}
|
||
}
|
||
|
||
field_0xa70 = fopAcM_lc_c::getCross();
|
||
}
|
||
sp_0x11 = true;
|
||
}
|
||
|
||
if (!sp_0x11) {
|
||
for (int i = 0; i < 2; i++) {
|
||
if (field_0xa38[i] != NULL) {
|
||
field_0xa38[i]->becomeInvalidEmitter();
|
||
field_0xa38[i]->quitImmortalEmitter();
|
||
field_0xa38[i] = NULL;
|
||
}
|
||
}
|
||
|
||
field_0xa18 = 0;
|
||
}
|
||
|
||
if (field_0xa70 != home.pos) {
|
||
field_0xa9c.startLevelSound(Z2SE_EN_BM_BURN2, 0, -1);
|
||
}
|
||
|
||
if (mpBrkAnm->isStop()) {
|
||
mpBrkAnm->init(mBeamosModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, BRK_BM6_LOOK),
|
||
1, 2, 1.0f, 0, -1);
|
||
}
|
||
|
||
if (cLib_calcTimer(&field_0xa13) == 1) {
|
||
mpBtkAnm->setPlaySpeed(1.0f);
|
||
}
|
||
|
||
mDoMtx_stack_c::copy(mBeamosModel->getAnmMtx(getHeadJoint()));
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
if (field_0xa40[i] != NULL) {
|
||
field_0xa40[i]->setGlobalRTMatrix(mDoMtx_stack_c::get());
|
||
}
|
||
}
|
||
|
||
field_0x9dc = field_0x9d8 * 3;
|
||
field_0x9c8 = field_0x9c6 - field_0x9da;
|
||
field_0x9cc = field_0x9ca + field_0x9da;
|
||
field_0x9d0 = field_0x9ce + field_0x9da;
|
||
field_0x9d4 = field_0x9d2 + field_0x9da;
|
||
|
||
if (!checkLockOnCamera()) {
|
||
dCam_getBody()->ForceLockOn(this);
|
||
}
|
||
}
|
||
|
||
/* 80C80F48-80C81154 002E08 020C+00 1/1 0/0 0/0 .text initActionDead__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initActionDead() {
|
||
if (field_0x9c2 > -0x4000 && field_0x9c2 < 0x4000) {
|
||
field_0x9c4 = 0;
|
||
} else {
|
||
field_0x9c4 = 0x7FFF;
|
||
}
|
||
|
||
field_0x9d6 = 0;
|
||
field_0x9d8 = 0;
|
||
|
||
mpBckAnm->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_BM6_DOWN), 1, 0, 0.0f, 0, -1, true);
|
||
if (mpBtkAnm->getBtkAnm() == (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOL6_ON)) {
|
||
mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOL6_OFF),
|
||
1, 0, 1.0f, 0, -1);
|
||
}
|
||
|
||
for (int i = 0; i < 2; i++) {
|
||
if (field_0xa38[i] != NULL) {
|
||
field_0xa38[i]->becomeInvalidEmitter();
|
||
field_0xa38[i]->quitImmortalEmitter();
|
||
field_0xa38[i] = NULL;
|
||
}
|
||
}
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
if (field_0xa40[i] != NULL) {
|
||
field_0xa40[i]->becomeInvalidEmitter();
|
||
field_0xa40[i]->quitImmortalEmitter();
|
||
field_0xa40[i] = NULL;
|
||
}
|
||
}
|
||
|
||
field_0xa11 = 20;
|
||
field_0xa1b = 0;
|
||
fopAcM_OffStatus(this, 0);
|
||
field_0x600.SetTgType(field_0x600.GetTgType() & 0xFFBFDFDF);
|
||
mMode = 0;
|
||
field_0xa10 = 4;
|
||
}
|
||
|
||
/* 80C81154-80C81428 003014 02D4+00 2/0 0/0 0/0 .text actionDead__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::actionDead() {
|
||
switch (mMode) {
|
||
case 0:
|
||
if (!cLib_calcTimer(&field_0xa11)) {
|
||
mMode = 1;
|
||
}
|
||
break;
|
||
|
||
case 1:
|
||
field_0x9d8 = 500;
|
||
if (field_0xa50 != NULL) {
|
||
field_0xa50->becomeInvalidEmitter();
|
||
field_0xa50->quitImmortalEmitter();
|
||
field_0xa50 = NULL;
|
||
}
|
||
|
||
if (field_0xa54 != NULL) {
|
||
field_0xa54->becomeInvalidEmitter();
|
||
field_0xa54->quitImmortalEmitter();
|
||
field_0xa54 = NULL;
|
||
}
|
||
|
||
mMode = 2;
|
||
break;
|
||
|
||
case 2:
|
||
cLib_addCalcAngleS(&field_0x9d8, 0, 0x5A, 10, 5);
|
||
if (field_0x9c2 == field_0x9c4) {
|
||
field_0x9d8 = 0;
|
||
field_0xa28 = 200.0f;
|
||
mMode = 3;
|
||
fopAcM_seStart(this, Z2SE_EN_BM_TURN_END, 0);
|
||
}
|
||
break;
|
||
|
||
case 3:
|
||
field_0xa11 = 20;
|
||
mMode = 4;
|
||
break;
|
||
|
||
case 4:
|
||
if (!cLib_calcTimer(&field_0xa11)) {
|
||
mpBckAnm->setPlaySpeed(1.0f);
|
||
mMode = 5;
|
||
}
|
||
break;
|
||
|
||
case 5:
|
||
if (mpBckAnm->getFrame() == mpBckAnm->getEndFrame() - 6.0f) {
|
||
fopAcM_seStart(this, Z2SE_EN_BM_DOWN, 0);
|
||
}
|
||
|
||
if (mpBckAnm->isStop()) {
|
||
field_0xa11 = 10;
|
||
mMode = 6;
|
||
}
|
||
break;
|
||
|
||
case 6:
|
||
break;
|
||
}
|
||
|
||
field_0x9dc = field_0x9d8;
|
||
field_0x9c8 = field_0x9c6 - field_0x9da;
|
||
field_0x9cc = field_0x9ca + field_0x9da;
|
||
field_0x9d0 = field_0x9ce + field_0x9da;
|
||
field_0x9d4 = field_0x9d2 + field_0x9da;
|
||
}
|
||
|
||
/* 80C81428-80C814FC 0032E8 00D4+00 1/1 0/0 0/0 .text initActionEnd__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::initActionEnd() {
|
||
mpBckAnm->init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_BM6_DOWN), 1, 0, 0.0f, 0, -1, true);
|
||
mpBckAnm->setFrame(mpBckAnm->getEndFrame());
|
||
field_0xa1b = 0;
|
||
fopAcM_OffStatus(this, 0);
|
||
field_0x600.SetTgType(field_0x600.GetTgType() & 0xFFBFDFDF);
|
||
field_0xa10 = 5;
|
||
}
|
||
|
||
/* 80C814FC-80C81500 0033BC 0004+00 1/0 0/0 0/0 .text actionEnd__12daObjLv6Bm_cFv */
|
||
void daObjLv6Bm_c::actionEnd() {
|
||
/* empty function */
|
||
}
|
||
|
||
/* 80C81500-80C816A8 0033C0 01A8+00 1/0 0/0 0/0 .text Draw__12daObjLv6Bm_cFv */
|
||
int daObjLv6Bm_c::Draw() {
|
||
g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr);
|
||
g_env_light.setLightTevColorType_MAJI(mBeamosModel, &tevStr);
|
||
dComIfGd_setListBG();
|
||
|
||
J3DShape* shape = mEyeMaterial->getShape();
|
||
if (field_0xa1b == 0) {
|
||
shape->hide();
|
||
}
|
||
|
||
mpBrkAnm->entry(mBeamosModel->getModelData());
|
||
mpBckAnm->entry(mBeamosModel->getModelData());
|
||
mDoExt_modelUpdateDL(mBeamosModel);
|
||
mDoExt_brkAnmRemove(mBeamosModel->getModelData());
|
||
mDoExt_bckAnmRemove(mBeamosModel->getModelData());
|
||
shape->show();
|
||
dComIfGd_setList();
|
||
g_env_light.setLightTevColorType_MAJI(mBeamEffectModel, &tevStr);
|
||
|
||
mpBtkAnm2->entry(mBeamEffectModel->getModelData());
|
||
mpBtkAnm->entry(mBeamEffectModel->getModelData());
|
||
mpBckAnm2->entry(mBeamEffectModel->getModelData());
|
||
mDoExt_modelUpdateDL(mBeamEffectModel);
|
||
mDoExt_btkAnmRemove(mBeamEffectModel->getModelData());
|
||
mDoExt_bckAnmRemove(mBeamEffectModel->getModelData());
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80C816A8-80C81808 003568 0160+00 1/0 0/0 0/0 .text Delete__12daObjLv6Bm_cFv */
|
||
int daObjLv6Bm_c::Delete() {
|
||
if (field_0xa50 != NULL) {
|
||
field_0xa50->becomeInvalidEmitter();
|
||
field_0xa50->quitImmortalEmitter();
|
||
field_0xa50 = NULL;
|
||
}
|
||
|
||
if (field_0xa54 != NULL) {
|
||
field_0xa54->becomeInvalidEmitter();
|
||
field_0xa54->quitImmortalEmitter();
|
||
field_0xa54 = NULL;
|
||
}
|
||
|
||
for (int i = 0; i < 2; i++) {
|
||
if (field_0xa38[i] != NULL) {
|
||
field_0xa38[i]->becomeInvalidEmitter();
|
||
field_0xa38[i]->quitImmortalEmitter();
|
||
field_0xa38[i] = NULL;
|
||
}
|
||
}
|
||
|
||
for (int i = 0; i < 4; i++) {
|
||
if (field_0xa40[i] != NULL) {
|
||
field_0xa40[i]->becomeInvalidEmitter();
|
||
field_0xa40[i]->quitImmortalEmitter();
|
||
field_0xa40[i] = NULL;
|
||
}
|
||
}
|
||
|
||
field_0xa7c.deleteObject();
|
||
field_0xa9c.deleteObject();
|
||
dComIfG_resDelete(&mPhase, l_arcName);
|
||
|
||
return 1;
|
||
}
|
||
|
||
/* 80C81808-80C819C8 0036C8 01C0+00 1/0 0/0 0/0 .text daObjLv6Bm_create1st__FP12daObjLv6Bm_c */
|
||
static int daObjLv6Bm_create1st(daObjLv6Bm_c* i_this) {
|
||
fopAcM_SetupActor(i_this, daObjLv6Bm_c);
|
||
return i_this->create1st();
|
||
}
|
||
|
||
/* 80C81AFC-80C81B1C 0039BC 0020+00 1/0 0/0 0/0 .text daObjLv6Bm_MoveBGDelete__FP12daObjLv6Bm_c */
|
||
static int daObjLv6Bm_MoveBGDelete(daObjLv6Bm_c* i_this) {
|
||
return i_this->MoveBGDelete();
|
||
}
|
||
|
||
/* 80C81B1C-80C81B3C 0039DC 0020+00 1/0 0/0 0/0 .text daObjLv6Bm_MoveBGExecute__FP12daObjLv6Bm_c */
|
||
static int daObjLv6Bm_MoveBGExecute(daObjLv6Bm_c* i_this) {
|
||
return i_this->MoveBGExecute();
|
||
}
|
||
|
||
/* 80C81B3C-80C81B68 0039FC 002C+00 1/0 0/0 0/0 .text daObjLv6Bm_MoveBGDraw__FP12daObjLv6Bm_c */
|
||
static int daObjLv6Bm_MoveBGDraw(daObjLv6Bm_c* i_this) {
|
||
return i_this->MoveBGDraw();
|
||
}
|
||
|
||
/* 80C81F18-80C81F38 -00001 0020+00 1/0 0/0 0/0 .data daObjLv6Bm_METHODS */
|
||
static actor_method_class daObjLv6Bm_METHODS = {
|
||
(process_method_func)daObjLv6Bm_create1st,
|
||
(process_method_func)daObjLv6Bm_MoveBGDelete,
|
||
(process_method_func)daObjLv6Bm_MoveBGExecute,
|
||
0,
|
||
(process_method_func)daObjLv6Bm_MoveBGDraw,
|
||
};
|
||
|
||
/* 80C81F38-80C81F68 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv6bemos2 */
|
||
extern actor_process_profile_definition g_profile_Obj_Lv6bemos2 = {
|
||
fpcLy_CURRENT_e, // mLayerID
|
||
3, // mListID
|
||
fpcPi_CURRENT_e, // mListPrio
|
||
PROC_Obj_Lv6bemos2, // mProcName
|
||
&g_fpcLf_Method.base, // sub_method
|
||
sizeof(daObjLv6Bm_c), // mSize
|
||
0, // mSizeOther
|
||
0, // mParameters
|
||
&g_fopAc_Method.base, // sub_method
|
||
631, // mPriority
|
||
&daObjLv6Bm_METHODS, // sub_method
|
||
0x00040100, // mStatus
|
||
fopAc_ACTOR_e, // mActorType
|
||
fopAc_CULLBOX_CUSTOM_e, // cullType
|
||
};
|