summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarco_21 <144170194+carter-ktb21@users.noreply.github.com>2025-07-15 16:05:04 -0400
committerGitHub <noreply@github.com>2025-07-15 23:05:04 +0300
commitc0717e1e56131bc318cc9887e312c18f07f6dfd9 (patch)
tree3371fd315338cf70292fc6ce84e21ee0cf827527 /src
parent5c86d6d26f15ae2b60f150cecbbf946d17c20595 (diff)
d_a_obj_lv6bemos2 and d_a_obj_lv6bemos almost equivalent (#2527)
* initial work * All but one function equivalent * Missed comment that needed to be removed * initial work * got to CreateHeap * d_a_obj_lv6bemos almost equivalent
Diffstat (limited to 'src')
-rw-r--r--src/d/actor/d_a_obj_lv6bemos.cpp850
-rw-r--r--src/d/actor/d_a_obj_lv6bemos2.cpp1845
2 files changed, 1387 insertions, 1308 deletions
diff --git a/src/d/actor/d_a_obj_lv6bemos.cpp b/src/d/actor/d_a_obj_lv6bemos.cpp
index c928a93269..0cd94d3f97 100644
--- a/src/d/actor/d_a_obj_lv6bemos.cpp
+++ b/src/d/actor/d_a_obj_lv6bemos.cpp
@@ -4,133 +4,31 @@
*/
#include "d/actor/d_a_obj_lv6bemos.h"
+#include "SSystem/SComponent/c_lib.h"
+#include "d/actor/d_a_player.h"
#include "d/d_cc_d.h"
-#include "dol2asm.h"
-
-
-//
-// Forward References:
-//
-
-extern "C" static void nodeCallBack__FP8J3DJointi();
-extern "C" void initBaseMtx__11daObjL6Bm_cFv();
-extern "C" void setBaseMtx__11daObjL6Bm_cFv();
-extern "C" void Create__11daObjL6Bm_cFv();
-extern "C" void CreateHeap__11daObjL6Bm_cFv();
-extern "C" void __dt__12J3DFrameCtrlFv();
-extern "C" void create1st__11daObjL6Bm_cFv();
-extern "C" void Execute__11daObjL6Bm_cFPPA3_A4_f();
-extern "C" void action__11daObjL6Bm_cFv();
-extern "C" void actionWait__11daObjL6Bm_cFv();
-extern "C" void actionFindPlayer__11daObjL6Bm_cFv();
-extern "C" void actionAttack__11daObjL6Bm_cFv();
-extern "C" void Draw__11daObjL6Bm_cFv();
-extern "C" void __dt__8cM3dGPlaFv();
-extern "C" void Delete__11daObjL6Bm_cFv();
-extern "C" static void daObjL6Bm_create1st__FP11daObjL6Bm_c();
-extern "C" void __dt__14dBgS_ObjGndChkFv();
-extern "C" void __dt__8cM3dGSphFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" static void daObjL6Bm_MoveBGDelete__FP11daObjL6Bm_c();
-extern "C" static void daObjL6Bm_MoveBGExecute__FP11daObjL6Bm_c();
-extern "C" static void daObjL6Bm_MoveBGDraw__FP11daObjL6Bm_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void func_80C7DE90(void* _this, u8*);
-extern "C" static void func_80C7DEAC();
-extern "C" static void func_80C7DEB4();
-extern "C" static void func_80C7DEBC();
-extern "C" extern char const* const d_a_obj_lv6bemos__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_XrotM__FPA4_fs();
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void push__14mDoMtx_stack_cFv();
-extern "C" void pop__14mDoMtx_stack_cFv();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void play__14mDoExt_baseAnmFv();
-extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
-extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb();
-extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void fopAcM_delete__FP10fopAc_ac_c();
-extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
-extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
-extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void
-set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void setSimple__21dDlst_shadowControl_cFP4cXyzffP4cXyzsfP9_GXTexObj();
-extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
-extern "C" void __ct__11dBgS_GndChkFv();
-extern "C" void __dt__11dBgS_GndChkFv();
-extern "C" void __ct__16dBgS_MoveBgActorFv();
-extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
-extern "C" bool ToFore__16dBgS_MoveBgActorFv();
-extern "C" bool ToBack__16dBgS_MoveBgActorFv();
-extern "C" void
-MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
-extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
-extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CpsFRC11dCcD_SrcCps();
-extern "C" void CalcAtVec__8dCcD_CpsFv();
-extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void cM_atan2s__Fff();
-extern "C" void __ct__8cM3dGCpsFv();
-extern "C" void Set__8cM3dGCpsFRC9cM3dGCpsS();
-extern "C" void SetC__8cM3dGSphFRC4cXyz();
-extern "C" void cLib_addCalc0__FPfff();
-extern "C" void cLib_addCalcAngleS2__FPssss();
-extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
-extern "C" void* __nw__FUl();
-extern "C" void __dl__FPv();
-extern "C" void init__12J3DFrameCtrlFs();
-extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_25();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_25();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Sph[36];
-extern "C" extern void* __vt__8dCcD_Cps[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_SphAttr[25];
-extern "C" extern void* __vt__12cCcD_CpsAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32];
-extern "C" u8 mCurrentMtx__6J3DSys[48];
-extern "C" extern u8 data_80C7E138[4];
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
+
+enum Obj_lv6bm_RES_File_ID {
+ /* BCK */
+ /* 0x07 */ BCK_EF_BIMOBEAM = 0x07,
+
+ /* BMDE */
+ /* 0x0A */ BMDE_BM6 = 0xA,
+
+ /* BMDR */
+ /* 0x0D */ BMDR_EF_BIMOBEAM = 0xD,
+ /* 0x0E */ BMDR_K_BIMO00,
+
+ /* BTK */
+ /* 0x11 */ BTK_EF_BIMOBEAM = 0x11,
+ /* 0x12 */ BTK_EF_BIMOBEAM_0FF,
+ /* 0x13 */ BTK_EF_BIMOBEAM_ON,
+
+ /* DZB */
+ /* 0x16 */ DZB_K_BIMO00 = 0x16,
+ /* 0x17 */ DZB_LV6_OBJ_BEMOS,
+};
+
/* 80C7DECC-80C7DF0C 000000 0040+00 5/5 0/0 0/0 .rodata l_sph_src */
const static dCcD_SrcSph l_sph_src = {
{
@@ -144,120 +42,83 @@ const static dCcD_SrcSph l_sph_src = {
} // mSphAttr
};
-/* 80C7DF0C-80C7DF10 000040 0004+00 0/1 0/0 0/0 .rodata @3728 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3728 = 1.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80C7DF0C, &lit_3728);
-#pragma pop
-
-/* 80C7DF10-80C7DF14 000044 0004+00 0/1 0/0 0/0 .rodata @3729 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3729 = 20.0f;
-COMPILER_STRIP_GATE(0x80C7DF10, &lit_3729);
-#pragma pop
-
-/* 80C7DF14-80C7DF18 000048 0004+00 0/1 0/0 0/0 .rodata @3730 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3730 = 200.0f;
-COMPILER_STRIP_GATE(0x80C7DF14, &lit_3730);
-#pragma pop
-
-/* 80C7DF18-80C7DF1C 00004C 0004+00 0/3 0/0 0/0 .rodata @3731 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3731[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80C7DF18, &lit_3731);
-#pragma pop
-
-/* 80C7DF1C-80C7DF24 000050 0008+00 0/1 0/0 0/0 .rodata @3732 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3732[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C7DF1C, &lit_3732);
-#pragma pop
-
-/* 80C7DF24-80C7DF2C 000058 0008+00 0/1 0/0 0/0 .rodata @3733 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3733[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C7DF24, &lit_3733);
-#pragma pop
-
-/* 80C7DF2C-80C7DF34 000060 0008+00 0/1 0/0 0/0 .rodata @3734 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3734[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C7DF2C, &lit_3734);
-#pragma pop
-
-/* 80C7DF34-80C7DF38 000068 0004+00 0/1 0/0 0/0 .rodata @3735 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3735 = 1200.0f;
-COMPILER_STRIP_GATE(0x80C7DF34, &lit_3735);
-#pragma pop
-
/* 80C7CB18-80C7CE24 000078 030C+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
-static void nodeCallBack(J3DJoint* param_0, int param_1) {
+static int nodeCallBack(J3DJoint* i_joint, int param_2) {
// NONMATCHING
+ if (param_2 == 0) {
+ int jntNo = i_joint->getJntNo();
+ J3DModel* model = j3dSys.getModel();
+ daObjL6Bm_c* i_this = (daObjL6Bm_c*)model->getUserArea();
+
+ mDoMtx_stack_c::copy(model->getAnmMtx(jntNo));
+
+ if (jntNo == 1) {
+ mDoMtx_stack_c::XrotM(i_this->field_0x892);
+ } else if (jntNo == 2) {
+ mDoMtx_stack_c::push();
+ mDoMtx_stack_c::multVecZero(&i_this->field_0x894);
+ daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
+
+ if (i_this->field_0x891 != 0) {
+ cLib_addCalc0(&i_this->field_0x914, 0.1f, 20.0f);
+ } else {
+ i_this->field_0x914 = 200.0f;
+ }
+
+ f32 fVar1 = player->current.pos.absXZ(i_this->field_0x894);
+ if (fVar1 > i_this->field_0x914) {
+ fVar1 -= i_this->field_0x914;
+ }
+
+ s16 sVar1 = cM_atan2s(i_this->field_0x894.y - player->current.pos.y, fVar1);
+ if (sVar1 > 8000) {
+ sVar1 = 8000;
+ }
+
+ mDoMtx_stack_c::transS(i_this->field_0x894);
+ mDoMtx_stack_c::YrotM(i_this->field_0x892);
+ mDoMtx_stack_c::XrotM(sVar1);
+ i_this->mBeamEffectModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ cXyz sp40(0.0f, 0.0f, 1200.0f);
+ mDoMtx_stack_c::multVec(&sp40, &i_this->field_0x72c.mEnd);
+ i_this->field_0x72c.mStart = i_this->field_0x894;
+ i_this->field_0x72c.mRadius = 20.0f;
+
+ i_this->field_0x5e8.cM3dGCps::Set(i_this->field_0x72c);
+ i_this->field_0x5e8.CalcAtVec();
+ mDoMtx_stack_c::pop();
+ }
+
+ model->setAnmMtx(jntNo, mDoMtx_stack_c::get());
+ mDoMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
+ }
+
+ return 1;
}
/* 80C7CE24-80C7CE60 000384 003C+00 1/1 0/0 0/0 .text initBaseMtx__11daObjL6Bm_cFv */
void daObjL6Bm_c::initBaseMtx() {
- // NONMATCHING
+ mBeamosModel->setBaseScale(scale);
+ setBaseMtx();
}
/* 80C7CE60-80C7CED4 0003C0 0074+00 2/2 0/0 0/0 .text setBaseMtx__11daObjL6Bm_cFv */
void daObjL6Bm_c::setBaseMtx() {
- // NONMATCHING
+ 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());
+ MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
-/* ############################################################################################## */
-/* 80C7DF6C-80C7DF6C 0000A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80C7DF6C = "Obj_lv6bm";
-#pragma pop
-
-/* 80C7DF78-80C7DF84 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80C7DF84-80C7DF98 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
+UNK_REL_DATA;
/* 80C7DF98-80C7DF9C -00001 0004+00 4/4 0/0 0/0 .data l_arcName */
-SECTION_DATA static void* l_arcName = (void*)&d_a_obj_lv6bemos__stringBase0;
+static char* l_arcName = "Obj_lv6bm";
/* 80C7DF9C-80C7DFB4 000024 0018+00 1/1 0/0 0/0 .data l_cull_box */
-SECTION_DATA static u8 l_cull_box[24] = {
- 0xC3, 0x48, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC3, 0x48, 0x00, 0x00,
- 0x43, 0x48, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00,
+static f32 l_cull_box[6] = {
+ -200.0f, -100.0f, -200.0f,
+ 200.0f, 100.0f, 200.0f,
};
/* 80C7DFB4-80C7E000 00003C 004C+00 1/1 0/0 0/0 .data l_cps_src */
@@ -274,216 +135,219 @@ static dCcD_SrcCps l_cps_src = {
};
/* 80C7CED4-80C7CFD0 000434 00FC+00 1/0 0/0 0/0 .text Create__11daObjL6Bm_cFv */
-void daObjL6Bm_c::Create() {
- // NONMATCHING
+int daObjL6Bm_c::Create() {
+ initBaseMtx();
+ fopAcM_SetMtx(this, mBeamosModel->getBaseTRMtx());
+ mStts.Init(0xFF, 0xFF, this);
+ field_0x5e8.Set(l_cps_src);
+ field_0x5e8.SetStts(&mStts);
+ field_0x748.Set(l_sph_src);
+ field_0x748.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]);
+
+ J3DJoint* neckJnt = mBeamosModel->getModelData()->getJointNodePointer(1);
+ if (neckJnt != NULL) {
+ neckJnt->setCallBack(nodeCallBack);
+ }
+
+ J3DJoint* eyeJnt = mBeamosModel->getModelData()->getJointNodePointer(2);
+ if (eyeJnt != NULL) {
+ eyeJnt->setCallBack(nodeCallBack);
+ }
+
+ mBeamosModel->setUserArea((u32)this);
+
+ if (neckJnt == NULL) {
+ OS_REPORT_ERROR("表ビーモス:首ジョイントが見つかりませんでした!\n"); // Table Beamos : Neck joint not found!
+ }
+
+ if (eyeJnt == NULL) {
+ OS_REPORT_ERROR("表ビーモス:目ジョイントが見つかりませんでした!\n"); // Table Beamos: Eye joint not found!
+ }
+
+ setAction(0);
+ return 1;
}
-/* ############################################################################################## */
-/* 80C7DF38-80C7DF3C 00006C 0004+00 2/4 0/0 0/0 .rodata @3880 */
-SECTION_RODATA static f32 const lit_3880 = 1.0f;
-COMPILER_STRIP_GATE(0x80C7DF38, &lit_3880);
-
-/* 80C7DF3C-80C7DF44 000070 0008+00 1/1 0/0 0/0 .rodata @3882 */
-SECTION_RODATA static u8 const lit_3882[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C7DF3C, &lit_3882);
-
-/* 80C7E000-80C7E00C -00001 000C+00 0/1 0/0 0/0 .data @3939 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3939[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionWait__11daObjL6Bm_cFv,
-};
-#pragma pop
-
-/* 80C7E00C-80C7E018 -00001 000C+00 0/1 0/0 0/0 .data @3940 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3940[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionFindPlayer__11daObjL6Bm_cFv,
-};
-#pragma pop
-
-/* 80C7E018-80C7E024 -00001 000C+00 0/1 0/0 0/0 .data @3941 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3941[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionAttack__11daObjL6Bm_cFv,
-};
-#pragma pop
-
-/* 80C7E024-80C7E048 0000AC 0024+00 0/1 0/0 0/0 .data l_func$3938 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_func[36] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
-
-/* 80C7E048-80C7E068 -00001 0020+00 1/0 0/0 0/0 .data daObjL6Bm_METHODS */
-static actor_method_class daObjL6Bm_METHODS = {
- (process_method_func)daObjL6Bm_create1st__FP11daObjL6Bm_c,
- (process_method_func)daObjL6Bm_MoveBGDelete__FP11daObjL6Bm_c,
- (process_method_func)daObjL6Bm_MoveBGExecute__FP11daObjL6Bm_c,
- 0,
- (process_method_func)daObjL6Bm_MoveBGDraw__FP11daObjL6Bm_c,
-};
-
-/* 80C7E068-80C7E098 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv6bemos */
-extern actor_process_profile_definition g_profile_Obj_Lv6bemos = {
- fpcLy_CURRENT_e, // mLayerID
- 3, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_Obj_Lv6bemos, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daObjL6Bm_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 630, // mPriority
- &daObjL6Bm_METHODS, // sub_method
- 0x00040100, // mStatus
- fopAc_ACTOR_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
-
-/* 80C7E098-80C7E0A4 000120 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
-
-/* 80C7E0A4-80C7E0B0 00012C 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
-};
-
-/* 80C7E0B0-80C7E0E0 000138 0030+00 2/2 0/0 0/0 .data __vt__14dBgS_ObjGndChk */
-SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14dBgS_ObjGndChkFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80C7DEAC,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80C7DEBC,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80C7DEB4,
-};
-
-/* 80C7E0E0-80C7E0EC 000168 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */
-SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGSphFv,
-};
-
-/* 80C7E0EC-80C7E0F8 000174 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 80C7E0F8-80C7E104 000180 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */
-SECTION_DATA extern void* __vt__8cM3dGPla[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGPlaFv,
-};
-
-/* 80C7E104-80C7E110 00018C 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */
-SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12J3DFrameCtrlFv,
-};
-
/* 80C7CFD0-80C7D2B0 000530 02E0+00 1/0 0/0 0/0 .text CreateHeap__11daObjL6Bm_cFv */
-void daObjL6Bm_c::CreateHeap() {
- // NONMATCHING
-}
-
-/* 80C7D2B0-80C7D2F8 000810 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */
-// J3DFrameCtrl::~J3DFrameCtrl() {
-extern "C" void __dt__12J3DFrameCtrlFv() {
- // NONMATCHING
+int daObjL6Bm_c::CreateHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDR_K_BIMO00);
+ JUT_ASSERT(620, modelData != 0);
+ mBeamosModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (mBeamosModel == NULL) {
+ return 0;
+ }
+
+ modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, BMDR_EF_BIMOBEAM);
+ JUT_ASSERT(634, modelData != 0);
+ mBeamEffectModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284);
+ if (mBeamEffectModel == NULL) {
+ return 0;
+ }
+
+ J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_ON);
+ JUT_ASSERT(648, pbtk != 0);
+ mpBtkAnm = new mDoExt_btkAnm();
+ if (mpBtkAnm == NULL || mpBtkAnm->init(modelData, pbtk, 1, 0, 1.0f, 0, -1) == 0) {
+ return 0;
+ }
+
+ #ifdef DEBUG
+ pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_OFF);
+ JUT_ASSERT(660, pbtk != 0);
+ #endif
+
+ pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM);
+ JUT_ASSERT(0x29A, pbtk != 0);
+ mpBtkAnm2 = new mDoExt_btkAnm();
+ if (mpBtkAnm2 == NULL || mpBtkAnm2->init(modelData, pbtk, 1, 2, 1.0f, 0, -1) == 0) {
+ return 0;
+ }
+
+ J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, BCK_EF_BIMOBEAM);
+ JUT_ASSERT(678, pbck != 0);
+ mBeamBck = new mDoExt_bckAnm();
+ if (mBeamBck == NULL || mBeamBck->init(pbck, 1, 2, 1.0f, 0, -1, false) == 0) {
+ return 0;
+ }
+
+ if (field_0x891 != 0) {
+ mpBtkAnm->setFrame(mpBtkAnm->getEndFrame());
+ mpBtkAnm2->setPlaySpeed(1.0f);
+ field_0x8b2 = 0x1000;
+ field_0x8b4 = 4;
+ field_0x890 = 5;
+ }
+
+ return 1;
}
/* 80C7D2F8-80C7D3A4 000858 00AC+00 1/1 0/0 0/0 .text create1st__11daObjL6Bm_cFv */
-void daObjL6Bm_c::create1st() {
- // NONMATCHING
+cPhs__Step daObjL6Bm_c::create1st() {
+ if (fopAcM_isSwitch(this, getSwBit())) {
+ OS_REPORT("ビーモス破壊済み!<%d>\n", getSwBit() & 0xFF); // Beamos has been destroyed! <%d>\n
+ return cPhs_ERROR_e;
+ }
+
+ cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&mPhase, l_arcName);
+ if (phase == cPhs_COMPLEATE_e) {
+ phase = (cPhs__Step)MoveBGCreate(l_arcName, DZB_K_BIMO00, NULL, 0x4000, NULL);
+ if (phase == cPhs_ERROR_e) {
+ return phase;
+ }
+ }
+
+ return phase;
}
-/* ############################################################################################## */
-/* 80C7DF44-80C7DF50 000078 000C+00 1/1 0/0 0/0 .rodata l_particle_id$3914 */
-SECTION_RODATA static u8 const l_particle_id[12] = {
- 0x82, 0x8F, 0x82, 0x90, 0x82, 0x91, 0x82, 0x92, 0x82, 0x93, 0x82, 0x94,
-};
-COMPILER_STRIP_GATE(0x80C7DF44, &l_particle_id);
-
/* 80C7D3A4-80C7D4F4 000904 0150+00 1/0 0/0 0/0 .text Execute__11daObjL6Bm_cFPPA3_A4_f */
-void daObjL6Bm_c::Execute(f32 (**param_0)[3][4]) {
- // NONMATCHING
+int daObjL6Bm_c::Execute(f32 (**param_1)[3][4]) {
+ static u16 const l_particle_id[6] = {
+ 0x828F, 0x8290, 0x8291, 0x8292, 0x8293, 0x8294,
+ };
+
+ if (field_0x891 != 0) {
+ mBeamBck->play();
+ dComIfG_Ccsp()->Set(&field_0x5e8);
+ }
+
+ if (field_0x748.ChkTgHit() && field_0x748.GetTgHitObj() != NULL) {
+ for (int i = 0; i < 5; i++) {
+ dComIfGp_particle_set(l_particle_id[i], &current.pos, NULL, &scale, 0xFF, NULL, -1, NULL, NULL, NULL);
+ }
+
+ fopAcM_delete(this);
+ fopAcM_onSwitch(this, getSwBit());
+ }
+
+ field_0x748.SetC(field_0x894);
+ dComIfG_Ccsp()->Set(&field_0x748);
+ action();
+ *param_1 = &mBgMtx;
+ setBaseMtx();
+ return 1;
}
/* 80C7D4F4-80C7D598 000A54 00A4+00 1/1 0/0 0/0 .text action__11daObjL6Bm_cFv */
void daObjL6Bm_c::action() {
- // NONMATCHING
-}
+ static daObjL6Bm_c::actionFunc l_func[3] = {
+ &daObjL6Bm_c::actionWait,
+ &daObjL6Bm_c::actionFindPlayer,
+ &daObjL6Bm_c::actionAttack,
+ };
-/* ############################################################################################## */
-/* 80C7DF50-80C7DF54 000084 0004+00 0/2 0/0 0/0 .rodata @3993 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3993 = 50.0f;
-COMPILER_STRIP_GATE(0x80C7DF50, &lit_3993);
-#pragma pop
-
-/* 80C7DF54-80C7DF5C 000088 0004+04 0/2 0/0 0/0 .rodata @3994 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3994[1 + 1 /* padding */] = {
- 1000.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x80C7DF54, &lit_3994);
-#pragma pop
-
-/* 80C7DF5C-80C7DF64 000090 0008+00 0/2 0/0 0/0 .rodata @3996 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_3996[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C7DF5C, &lit_3996);
-#pragma pop
+ (this->*l_func[mAction])();
+}
/* 80C7D598-80C7D6CC 000AF8 0134+00 1/0 0/0 0/0 .text actionWait__11daObjL6Bm_cFv */
void daObjL6Bm_c::actionWait() {
// NONMATCHING
+ f32 fVar1;
+ f32 playerDistance = fopAcM_searchPlayerDistanceXZ(this);
+
+ if (getArg0() != 0xFF) {
+ fVar1 = getArg0() * 50.0f;
+ } else {
+ fVar1 = 1000.0f;
+ }
+
+ if (playerDistance < fVar1 && (s16)abs((s16)(cLib_targetAngleY(fopAcM_GetPosition_p(this), fopAcM_GetPosition_p(dComIfGp_getPlayer(0))) - current.angle.y)) < 0x1000) {
+ setAction(1);
+ field_0x911 = 20;
+ } else {
+ s16 sVar1;
+ if (getArg1() == 0xFF) {
+ sVar1 = 0x4B0;
+ } else {
+ sVar1 = (u16)getArg1() * 100;
+ }
+ current.angle.y += sVar1;
+ }
+
+ field_0x892 = current.angle.y;
+ if (mpBtkAnm->play() != 0) {
+ mpBtkAnm->setPlaySpeed(0.0f);
+ }
}
-/* 80C7D6CC-80C7D894 000C2C 01C8+00 1/0 0/0 0/0 .text actionFindPlayer__11daObjL6Bm_cFv
- */
+/* 80C7D6CC-80C7D894 000C2C 01C8+00 1/0 0/0 0/0 .text actionFindPlayer__11daObjL6Bm_cFv */
void daObjL6Bm_c::actionFindPlayer() {
// NONMATCHING
+ f32 fVar1;
+ f32 playerDistance = fopAcM_searchPlayerDistanceXZ(this);
+
+ if (getArg0() != 0xFF) {
+ fVar1 = getArg0() * 50.0f;
+ } else {
+ fVar1 = 1000.0f;
+ }
+
+ if (playerDistance < fVar1) {
+ OS_REPORT("プレイヤー離れました!\n"); // Player has left!\n
+ setAction(0);
+
+ if (field_0x891 != 0) {
+ mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_0FF),
+ 1, 0, 1.0f, 0, -1);
+ field_0x891 = 0;
+ }
+ } else {
+ cLib_addCalcAngleS2(&current.angle.y, fopAcM_searchPlayerAngleY(this), 10, 0x400);
+ if (cLib_calcTimer(&field_0x911) == 0) {
+ if (field_0x891 == 0) {
+ mpBtkAnm->init(mBeamEffectModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, BTK_EF_BIMOBEAM_ON),
+ 1, 0, 0.0f, 0, -1);
+ field_0x891 = 1;
+ mpBtkAnm->setPlaySpeed(1.0f);
+ }
+
+ mpBtkAnm->play();
+ mpBtkAnm2->play();
+ }
+ }
+
+ field_0x892 = current.angle.y;
}
/* 80C7D894-80C7D898 000DF4 0004+00 1/0 0/0 0/0 .text actionAttack__11daObjL6Bm_cFv */
@@ -491,120 +355,86 @@ void daObjL6Bm_c::actionAttack() {
/* empty function */
}
-/* ############################################################################################## */
-/* 80C7DF64-80C7DF68 000098 0004+00 0/1 0/0 0/0 .rodata @4160 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4160 = -1000000000.0f;
-COMPILER_STRIP_GATE(0x80C7DF64, &lit_4160);
-#pragma pop
-
-/* 80C7DF68-80C7DF6C 00009C 0004+00 0/1 0/0 0/0 .rodata @4161 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4161 = 120.0f;
-COMPILER_STRIP_GATE(0x80C7DF68, &lit_4161);
-#pragma pop
-
/* 80C7D898-80C7DA74 000DF8 01DC+00 1/0 0/0 0/0 .text Draw__11daObjL6Bm_cFv */
-void daObjL6Bm_c::Draw() {
- // NONMATCHING
-}
-
-/* 80C7DA74-80C7DABC 000FD4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */
-// cM3dGPla::~cM3dGPla() {
-extern "C" void __dt__8cM3dGPlaFv() {
- // NONMATCHING
+int daObjL6Bm_c::Draw() {
+ g_env_light.settingTevStruct(16, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mBeamosModel, &tevStr);
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mBeamosModel);
+ dComIfGd_setList();
+
+ if (field_0x891 != 0) {
+ g_env_light.setLightTevColorType_MAJI(mBeamEffectModel, &tevStr);
+ mpBtkAnm->entry(mBeamEffectModel->getModelData());
+ mpBtkAnm2->entry(mBeamEffectModel->getModelData());
+ mBeamBck->entry(mBeamEffectModel->getModelData());
+ mDoExt_modelUpdateDL(mBeamEffectModel);
+ mBeamBck->remove(mBeamEffectModel->getModelData());
+ mpBtkAnm->remove(mBeamEffectModel->getModelData());
+ mpBtkAnm2->remove(mBeamEffectModel->getModelData());
+ }
+
+ if (field_0x90c != -1000000000.0f) {
+ cM3dGPla plane;
+ if (dComIfG_Bgsp().GetTriPla(mObjGndChk, &plane)) {
+ dComIfGd_setSimpleShadow(&current.pos, field_0x90c, 120.0f, &plane.mNormal, 0,
+ 1.0f, dDlst_shadowControl_c::getSimpleTex());
+ }
+ }
+
+ return 1;
}
/* 80C7DABC-80C7DAF0 00101C 0034+00 1/0 0/0 0/0 .text Delete__11daObjL6Bm_cFv */
-void daObjL6Bm_c::Delete() {
- // NONMATCHING
+int daObjL6Bm_c::Delete() {
+ dComIfG_resDelete(&mPhase, l_arcName);
+ return 1;
}
-/* ############################################################################################## */
-/* 80C7E110-80C7E138 000198 0028+00 1/1 0/0 0/0 .data __vt__11daObjL6Bm_c */
-SECTION_DATA extern void* __vt__11daObjL6Bm_c[10] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)CreateHeap__11daObjL6Bm_cFv,
- (void*)Create__11daObjL6Bm_cFv,
- (void*)Execute__11daObjL6Bm_cFPPA3_A4_f,
- (void*)Draw__11daObjL6Bm_cFv,
- (void*)Delete__11daObjL6Bm_cFv,
- (void*)IsDelete__16dBgS_MoveBgActorFv,
- (void*)ToFore__16dBgS_MoveBgActorFv,
- (void*)ToBack__16dBgS_MoveBgActorFv,
-};
-
/* 80C7DAF0-80C7DC78 001050 0188+00 1/0 0/0 0/0 .text daObjL6Bm_create1st__FP11daObjL6Bm_c */
-static void daObjL6Bm_create1st(daObjL6Bm_c* param_0) {
- // NONMATCHING
-}
-
-/* 80C7DC78-80C7DCF0 0011D8 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */
-// dBgS_ObjGndChk::~dBgS_ObjGndChk() {
-extern "C" void __dt__14dBgS_ObjGndChkFv() {
- // NONMATCHING
-}
-
-/* 80C7DCF0-80C7DD38 001250 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
-// cM3dGSph::~cM3dGSph() {
-extern "C" void __dt__8cM3dGSphFv() {
- // NONMATCHING
-}
-
-/* 80C7DD38-80C7DD80 001298 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
-
-/* 80C7DD80-80C7DDDC 0012E0 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
+static int daObjL6Bm_create1st(daObjL6Bm_c* i_this) {
+ fopAcM_SetupActor(i_this, daObjL6Bm_c);
+ return i_this->create1st();
}
/* 80C7DDDC-80C7DDFC 00133C 0020+00 1/0 0/0 0/0 .text daObjL6Bm_MoveBGDelete__FP11daObjL6Bm_c */
-static void daObjL6Bm_MoveBGDelete(daObjL6Bm_c* param_0) {
- // NONMATCHING
+static int daObjL6Bm_MoveBGDelete(daObjL6Bm_c* i_this) {
+ return i_this->MoveBGDelete();
}
/* 80C7DDFC-80C7DE1C 00135C 0020+00 1/0 0/0 0/0 .text daObjL6Bm_MoveBGExecute__FP11daObjL6Bm_c */
-static void daObjL6Bm_MoveBGExecute(daObjL6Bm_c* param_0) {
- // NONMATCHING
+static int daObjL6Bm_MoveBGExecute(daObjL6Bm_c* i_this) {
+ return i_this->MoveBGExecute();
}
/* 80C7DE1C-80C7DE48 00137C 002C+00 1/0 0/0 0/0 .text daObjL6Bm_MoveBGDraw__FP11daObjL6Bm_c */
-static void daObjL6Bm_MoveBGDraw(daObjL6Bm_c* param_0) {
- // NONMATCHING
-}
-
-/* 80C7DE48-80C7DE90 0013A8 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80C7DE90-80C7DEAC 0013F0 001C+00 1/1 0/0 0/0 .text cLib_calcTimer<Uc>__FPUc */
-extern "C" void func_80C7DE90(void* _this, u8* param_0) {
- // NONMATCHING
+static int daObjL6Bm_MoveBGDraw(daObjL6Bm_c* i_this) {
+ return i_this->MoveBGDraw();
}
-/* 80C7DEAC-80C7DEB4 00140C 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */
-static void func_80C7DEAC() {
- // NONMATCHING
-}
-
-/* 80C7DEB4-80C7DEBC 001414 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */
-static void func_80C7DEB4() {
- // NONMATCHING
-}
-
-/* 80C7DEBC-80C7DEC4 00141C 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */
-static void func_80C7DEBC() {
- // NONMATCHING
-}
+/* 80C7E048-80C7E068 -00001 0020+00 1/0 0/0 0/0 .data daObjL6Bm_METHODS */
+static actor_method_class daObjL6Bm_METHODS = {
+ (process_method_func)daObjL6Bm_create1st,
+ (process_method_func)daObjL6Bm_MoveBGDelete,
+ (process_method_func)daObjL6Bm_MoveBGExecute,
+ 0,
+ (process_method_func)daObjL6Bm_MoveBGDraw,
+};
-/* 80C7DF6C-80C7DF6C 0000A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 80C7E068-80C7E098 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv6bemos */
+extern actor_process_profile_definition g_profile_Obj_Lv6bemos = {
+ fpcLy_CURRENT_e, // mLayerID
+ 3, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Obj_Lv6bemos, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daObjL6Bm_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 630, // mPriority
+ &daObjL6Bm_METHODS, // sub_method
+ 0x00040100, // mStatus
+ fopAc_ACTOR_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};
diff --git a/src/d/actor/d_a_obj_lv6bemos2.cpp b/src/d/actor/d_a_obj_lv6bemos2.cpp
index 0044e18e2a..aa49f08c93 100644
--- a/src/d/actor/d_a_obj_lv6bemos2.cpp
+++ b/src/d/actor/d_a_obj_lv6bemos2.cpp
@@ -4,322 +4,149 @@
*/
#include "d/actor/d_a_obj_lv6bemos2.h"
+#include "d/actor/d_a_player.h"
#include "d/d_cc_d.h"
-#include "dol2asm.h"
+#include "d/d_com_inf_game.h"
#include "d/d_camera.h"
+enum E_bm6_RES_File_ID {
+ /* BCK */
+ /* 0x08 */ BCK_BM6_DOWN = 0x8,
+ /* 0x09 */ BCK_BM6_UP,
+ /* 0x0A */ BCK_EF_BIMOL6,
-//
-// Forward References:
-//
-
-extern "C" static void nodeCallBack__FP8J3DJointi();
-extern "C" void initBaseMtx__12daObjLv6Bm_cFv();
-extern "C" void setBaseMtx__12daObjLv6Bm_cFv();
-extern "C" void Create__12daObjLv6Bm_cFv();
-extern "C" void CreateHeap__12daObjLv6Bm_cFv();
-extern "C" void __dt__12J3DFrameCtrlFv();
-extern "C" void create1st__12daObjLv6Bm_cFv();
-extern "C" void Execute__12daObjLv6Bm_cFPPA3_A4_f();
-extern "C" void action__12daObjLv6Bm_cFv();
-extern "C" void calcBeam__12daObjLv6Bm_cFv();
-extern "C" void __dt__8cM3dGPlaFv();
-extern "C" void checkFindPlayer__12daObjLv6Bm_cFv();
-extern "C" void checkSearchPlayer__12daObjLv6Bm_cFv();
-extern "C" void getSearchDistance__12daObjLv6Bm_cFv();
-extern "C" void getBeamSearchDistance__12daObjLv6Bm_cFv();
-extern "C" void effect_proc__12daObjLv6Bm_cFv();
-extern "C" void effectWait__12daObjLv6Bm_cFv();
-extern "C" void initEffectSet0__12daObjLv6Bm_cFv();
-extern "C" void effectSet0__12daObjLv6Bm_cFv();
-extern "C" void initActionSwWait__12daObjLv6Bm_cFv();
-extern "C" void actionSwWait__12daObjLv6Bm_cFv();
-extern "C" void initActionWarning__12daObjLv6Bm_cFv();
-extern "C" void actionWarning__12daObjLv6Bm_cFv();
-extern "C" void initActionFindPlayer__12daObjLv6Bm_cFv();
-extern "C" void actionFindPlayer__12daObjLv6Bm_cFv();
-extern "C" void initActionAttack__12daObjLv6Bm_cFv();
-extern "C" void actionAttack__12daObjLv6Bm_cFv();
-extern "C" void initActionDead__12daObjLv6Bm_cFv();
-extern "C" void actionDead__12daObjLv6Bm_cFv();
-extern "C" void initActionEnd__12daObjLv6Bm_cFv();
-extern "C" void actionEnd__12daObjLv6Bm_cFv();
-extern "C" void Draw__12daObjLv6Bm_cFv();
-extern "C" void Delete__12daObjLv6Bm_cFv();
-extern "C" static void daObjLv6Bm_create1st__FP12daObjLv6Bm_c();
-extern "C" void __dt__8cM3dGCylFv();
-extern "C" void __dt__8cM3dGSphFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" static void daObjLv6Bm_MoveBGDelete__FP12daObjLv6Bm_c();
-extern "C" static void daObjLv6Bm_MoveBGExecute__FP12daObjLv6Bm_c();
-extern "C" static void daObjLv6Bm_MoveBGDraw__FP12daObjLv6Bm_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void func_80C81BB0(void* _this, u16*);
-extern "C" void func_80C81BCC(void* _this, u8*);
-extern "C" void __sinit_d_a_obj_lv6bemos2_cpp();
-extern "C" extern char const* const d_a_obj_lv6bemos2__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_XrotM__FPA4_fs();
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void transM__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void scaleM__14mDoMtx_stack_cFfff();
-extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
-extern "C" void play__14mDoExt_baseAnmFv();
-extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
-extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss();
-extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb();
-extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_btkAnmRemove__FP12J3DModelData();
-extern "C" void mDoExt_brkAnmRemove__FP12J3DModelData();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void fopAcM_delete__FP10fopAc_ac_c();
-extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
-extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
-extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c();
-extern "C" void lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void
-set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
-extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
-extern "C" void __ct__16dBgS_MoveBgActorFv();
-extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
-extern "C" bool ToFore__16dBgS_MoveBgActorFv();
-extern "C" bool ToBack__16dBgS_MoveBgActorFv();
-extern "C" void
-MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
-extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
-extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
-extern "C" void GetAc__22dCcD_GAtTgCoCommonBaseFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CpsFRC11dCcD_SrcCps();
-extern "C" void CalcAtVec__8dCcD_CpsFv();
-extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
-extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph();
-extern "C" void ForceLockOn__9dCamera_cFP10fopAc_ac_c();
-extern "C" void dCam_getBody__Fv();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __pl__4cXyzCFRC3Vec();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void __ml__4cXyzCFf();
-extern "C" void normalizeZP__4cXyzFv();
-extern "C" bool __ne__4cXyzCFRC3Vec();
-extern "C" void cM_atan2s__Fff();
-extern "C" void cBgW_CheckBGround__Ff();
-extern "C" void __ct__8cM3dGCpsFv();
-extern "C" void Set__8cM3dGCpsFRC4cXyzRC4cXyzf();
-extern "C" void SetC__8cM3dGCylFRC4cXyz();
-extern "C" void SetC__8cM3dGSphFRC4cXyz();
-extern "C" void cLib_addCalc__FPfffff();
-extern "C" void cLib_addCalcAngleS__FPsssss();
-extern "C" void cLib_chaseUC__FPUcUcUc();
-extern "C" void cLib_chaseF__FPfff();
-extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf();
-extern "C" void cLib_chaseAngleS__FPsss();
-extern "C" void func_802807E0();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void deleteObject__14Z2SoundObjBaseFv();
-extern "C" void __ct__16Z2SoundObjSimpleFv();
-extern "C" void* __nw__FUl();
-extern "C" void __dl__FPv();
-extern "C" void getName__10JUTNameTabCFUs();
-extern "C" void init__12J3DFrameCtrlFs();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_23();
-extern "C" void _savegpr_24();
-extern "C" void _savegpr_25();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_23();
-extern "C" void _restgpr_24();
-extern "C" void _restgpr_25();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Sph[36];
-extern "C" extern void* __vt__8dCcD_Cyl[36];
-extern "C" extern void* __vt__8dCcD_Cps[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_SphAttr[25];
-extern "C" extern void* __vt__12cCcD_CylAttr[25];
-extern "C" extern void* __vt__12cCcD_CpsAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" u8 mLineCheck__11fopAcM_lc_c[112];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" extern u8 struct_80C81FE8[4];
-
-//
-// Declarations:
-//
+ /* BMDE */
+ /* 0x0D */ BMDE_BM6 = 0xD,
-/* 80C7E1B8-80C7E30C 000078 0154+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
-static void nodeCallBack(J3DJoint* param_0, int param_1) {
- // NONMATCHING
-}
+ /* BMDR */
+ /* 0x10 */ BMDR_EF_BIMOL6 = 0x10,
-/* ############################################################################################## */
-/* 80C81C2C-80C81C38 000000 000C+00 9/9 0/0 0/0 .rodata l_eye_offset */
-SECTION_RODATA static u8 const l_eye_offset[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x43, 0xD7, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00,
+ /* 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,
};
-COMPILER_STRIP_GATE(0x80C81C2C, &l_eye_offset);
-/* 80C81C38-80C81C44 00000C 000C+00 0/1 0/0 0/0 .rodata l_beam_offsetPos */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_beam_offsetPos[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x42, 0xC4, 0x00, 0x00, 0x42, 0xFA, 0x00, 0x00,
+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,
};
-COMPILER_STRIP_GATE(0x80C81C38, &l_beam_offsetPos);
-#pragma pop
-/* 80C81C44-80C81C48 000018 0004+00 2/3 0/0 0/0 .rodata @3854 */
-SECTION_RODATA static f32 const lit_3854 = 0.5f;
-COMPILER_STRIP_GATE(0x80C81C44, &lit_3854);
+/* 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};
-/* 80C81C48-80C81C4C 00001C 0004+00 10/15 0/0 0/0 .rodata @3855 */
-SECTION_RODATA static f32 const lit_3855 = 1.0f;
-COMPILER_STRIP_GATE(0x80C81C48, &lit_3855);
+/* 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() {
- // NONMATCHING
+ 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() {
- // NONMATCHING
+ 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());
}
-/* ############################################################################################## */
-/* 80C81C4C-80C81C54 000020 0008+00 3/4 0/0 0/0 .rodata @4012 */
-SECTION_RODATA static u8 const lit_4012[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C81C4C, &lit_4012);
-
-/* 80C81CCC-80C81CCC 0000A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80C81CCC = "E_bm6";
-SECTION_DEAD static char const* const stringBase_80C81CD2 = "bm6_eye";
-SECTION_DEAD static char const* const stringBase_80C81CDA = "head";
-SECTION_DEAD static char const* const stringBase_80C81CDF = "cogRed";
-SECTION_DEAD static char const* const stringBase_80C81CE6 = "cogBlue";
-SECTION_DEAD static char const* const stringBase_80C81CEE = "cogGreen";
-SECTION_DEAD static char const* const stringBase_80C81CF7 = "cogYellow";
-#pragma pop
-
-/* 80C81D04-80C81D10 000000 000C+00 4/4 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80C81D10-80C81D24 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
+UNK_REL_DATA;
/* 80C81D24-80C81D28 -00001 0004+00 9/10 0/0 0/0 .data l_arcName */
-SECTION_DATA static void* l_arcName = (void*)&d_a_obj_lv6bemos2__stringBase0;
+static char* l_arcName = "E_bm6";
/* 80C81D28-80C81D2C -00001 0004+00 0/1 0/0 0/0 .data l_eye_matName */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* l_eye_matName = (void*)(((char*)&d_a_obj_lv6bemos2__stringBase0) + 0x6);
-#pragma pop
+static char* l_eye_matName = "bm6_eye";
/* 80C81D2C-80C81D30 -00001 0004+00 0/1 0/0 0/0 .data l_head_joint */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* l_head_joint = (void*)(((char*)&d_a_obj_lv6bemos2__stringBase0) + 0xE);
-#pragma pop
+static char* l_head_joint = "head";
/* 80C81D30-80C81D34 -00001 0004+00 0/1 0/0 0/0 .data l_bigGear_joint */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* l_bigGear_joint =
- (void*)(((char*)&d_a_obj_lv6bemos2__stringBase0) + 0x13);
-#pragma pop
+static char* l_bigGear_joint = "cogRed";
/* 80C81D34-80C81D38 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear0_joint */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* l_smallGear0_joint =
- (void*)(((char*)&d_a_obj_lv6bemos2__stringBase0) + 0x1A);
-#pragma pop
+static char* l_smallGear0_joint = "cogBlue";
/* 80C81D38-80C81D3C -00001 0004+00 0/1 0/0 0/0 .data l_smallGear1_joint */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* l_smallGear1_joint =
- (void*)(((char*)&d_a_obj_lv6bemos2__stringBase0) + 0x22);
-#pragma pop
+static char* l_smallGear1_joint = "cogGreen";
/* 80C81D3C-80C81D40 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear2_joint */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* l_smallGear2_joint =
- (void*)(((char*)&d_a_obj_lv6bemos2__stringBase0) + 0x2B);
-#pragma pop
+static char* l_smallGear2_joint = "cogYellow";
/* 80C81D40-80C81D54 00003C 0014+00 0/2 0/0 0/0 .data l_joint_table */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_joint_table[20] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+static char* l_joint_table[5] = {
+ l_head_joint,
+ l_bigGear_joint,
+ l_smallGear0_joint,
+ l_smallGear1_joint,
+ l_smallGear2_joint,
};
-#pragma pop
/* 80C81D54-80C81D6C 000050 0018+00 0/1 0/0 0/0 .data l_cull_box */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_cull_box[24] = {
- 0xC4, 0x96, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC4, 0x96, 0x00, 0x00,
- 0x44, 0x96, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00, 0x44, 0x96, 0x00, 0x00,
+static f32 l_cull_box[6] = {
+ -1200.0f, -100.0f, -1200.0f,
+ 1200.0f, 400.0f, 1200.0f,
};
-#pragma pop
/* 80C81D6C-80C81DAC 000068 0040+00 0/1 0/0 0/0 .data l_sph_src */
-#pragma push
-#pragma force_active on
static dCcD_SrcSph l_sph_src = {
{
{0x0, {{0x0, 0x0, 0x0}, {0x402420, 0x11}, 0x58}}, // mObj
@@ -331,11 +158,8 @@ static dCcD_SrcSph l_sph_src = {
{{0.0f, 0.0f, 0.0f}, 50.0f} // mSph
} // mSphAttr
};
-#pragma pop
/* 80C81DAC-80C81DF8 0000A8 004C+00 0/1 0/0 0/0 .data l_cps_src */
-#pragma push
-#pragma force_active on
static dCcD_SrcCps l_cps_src = {
{
{0x0, {{0x100, 0x1, 0x1d}, {0x0, 0x0}, 0x0}}, // mObj
@@ -347,11 +171,8 @@ static dCcD_SrcCps l_cps_src = {
{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, 20.0f}, // mCps
} // mCpsAttr
};
-#pragma pop
/* 80C81DF8-80C81E3C 0000F4 0044+00 0/1 0/0 0/0 .data l_cyl_src */
-#pragma push
-#pragma force_active on
static dCcD_SrcCyl l_cyl_src = {
{
{0x0, {{0x0, 0x0, 0x1e}, {0x400, 0x11}, 0x18}}, // mObj
@@ -365,394 +186,443 @@ static dCcD_SrcCyl l_cyl_src = {
200.0f // mHeight
} // mCyl
};
-#pragma pop
/* 80C7E448-80C7E764 000308 031C+00 1/0 0/0 0/0 .text Create__12daObjLv6Bm_cFv */
-void daObjLv6Bm_c::Create() {
- // NONMATCHING
+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((u32)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;
}
-/* ############################################################################################## */
-/* 80C81E3C-80C81E48 -00001 000C+00 0/1 0/0 0/0 .data @4181 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4181[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionSwWait__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81E48-80C81E54 -00001 000C+00 0/1 0/0 0/0 .data @4182 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4182[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionWarning__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81E54-80C81E60 -00001 000C+00 0/1 0/0 0/0 .data @4183 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4183[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionFindPlayer__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81E60-80C81E6C -00001 000C+00 0/1 0/0 0/0 .data @4184 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4184[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionAttack__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81E6C-80C81E78 -00001 000C+00 0/1 0/0 0/0 .data @4185 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4185[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionDead__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81E78-80C81E84 -00001 000C+00 0/1 0/0 0/0 .data @4186 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4186[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)actionEnd__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81E84-80C81ECC 000180 0048+00 0/1 0/0 0/0 .data l_func$4180 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_func[72] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
-
-/* 80C81ECC-80C81ED8 -00001 000C+00 0/1 0/0 0/0 .data @4562 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4562[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)effectWait__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81ED8-80C81EE4 -00001 000C+00 0/1 0/0 0/0 .data @4563 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4563[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)effectSet0__12daObjLv6Bm_cFv,
-};
-#pragma pop
-
-/* 80C81EE4-80C81EFC 0001E0 0018+00 0/1 0/0 0/0 .data l_eff_func$4561 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_eff_func[24] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
-
-/* 80C81EFC-80C81F18 -00001 001C+00 1/1 0/0 0/0 .data @5281 */
-SECTION_DATA static void* lit_5281[7] = {
- (void*)(((char*)actionDead__12daObjLv6Bm_cFv) + 0x44),
- (void*)(((char*)actionDead__12daObjLv6Bm_cFv) + 0x60),
- (void*)(((char*)actionDead__12daObjLv6Bm_cFv) + 0xE4),
- (void*)(((char*)actionDead__12daObjLv6Bm_cFv) + 0x174),
- (void*)(((char*)actionDead__12daObjLv6Bm_cFv) + 0x188),
- (void*)(((char*)actionDead__12daObjLv6Bm_cFv) + 0x1B0),
- (void*)(((char*)actionDead__12daObjLv6Bm_cFv) + 0x274),
-};
-
-/* 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__FP12daObjLv6Bm_c,
- (process_method_func)daObjLv6Bm_MoveBGDelete__FP12daObjLv6Bm_c,
- (process_method_func)daObjLv6Bm_MoveBGExecute__FP12daObjLv6Bm_c,
- 0,
- (process_method_func)daObjLv6Bm_MoveBGDraw__FP12daObjLv6Bm_c,
-};
-
-/* 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
-};
-
-/* 80C81F68-80C81F74 000264 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
-
-/* 80C81F74-80C81F80 000270 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
-};
-
-/* 80C81F80-80C81F8C 00027C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */
-SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGCylFv,
-};
-
-/* 80C81F8C-80C81F98 000288 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */
-SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGSphFv,
-};
-
-/* 80C81F98-80C81FA4 000294 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 80C81FA4-80C81FB0 0002A0 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGPla */
-SECTION_DATA extern void* __vt__8cM3dGPla[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGPlaFv,
-};
-
-/* 80C81FB0-80C81FBC 0002AC 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */
-SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12J3DFrameCtrlFv,
-};
-
/* 80C7E764-80C7EB34 000624 03D0+00 1/0 0/0 0/0 .text CreateHeap__12daObjLv6Bm_cFv */
-void daObjLv6Bm_c::CreateHeap() {
- // NONMATCHING
-}
-
-/* 80C7EB34-80C7EB7C 0009F4 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */
-// J3DFrameCtrl::~J3DFrameCtrl() {
-extern "C" void __dt__12J3DFrameCtrlFv() {
- // NONMATCHING
+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 */
-void daObjLv6Bm_c::create1st() {
- // NONMATCHING
+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;
}
-/* ############################################################################################## */
-/* 80C81C54-80C81C58 000028 0004+00 4/10 0/0 0/0 .rodata @4173 */
-SECTION_RODATA static u8 const lit_4173[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80C81C54, &lit_4173);
-
-/* 80C81C58-80C81C5C 00002C 0004+00 0/1 0/0 0/0 .rodata @4174 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4174 = 1.0f / 5.0f;
-COMPILER_STRIP_GATE(0x80C81C58, &lit_4174);
-#pragma pop
-
-/* 80C81C5C-80C81C60 000030 0004+00 2/3 0/0 0/0 .rodata @4175 */
-SECTION_RODATA static f32 const lit_4175 = 50.0f;
-COMPILER_STRIP_GATE(0x80C81C5C, &lit_4175);
-
-/* 80C81C60-80C81C64 000034 0004+00 0/1 0/0 0/0 .rodata @4176 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4176 = 10.0f;
-COMPILER_STRIP_GATE(0x80C81C60, &lit_4176);
-#pragma pop
-
-/* 80C7EC6C-80C7EE50 000B2C 01E4+00 1/0 0/0 0/0 .text Execute__12daObjLv6Bm_cFPPA3_A4_f
- */
-void daObjLv6Bm_c::Execute(f32 (**param_0)[3][4]) {
- // NONMATCHING
+/* 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;
}
-/* ############################################################################################## */
-/* 80C81C64-80C81C6C 000038 0006+02 0/1 0/0 0/0 .rodata l_particle_id$4205 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_particle_id[6 + 2 /* padding */] = {
- 0x88,
- 0xDB,
- 0x88,
- 0xDC,
- 0x88,
- 0xDD,
- /* padding */
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80C81C64, &l_particle_id);
-#pragma pop
-
-/* 80C81C6C-80C81C70 000040 0004+00 2/4 0/0 0/0 .rodata @4276 */
-SECTION_RODATA static f32 const lit_4276 = -1.0f;
-COMPILER_STRIP_GATE(0x80C81C6C, &lit_4276);
-
-/* 80C81C70-80C81C74 000044 0004+00 1/2 0/0 0/0 .rodata @4277 */
-SECTION_RODATA static f32 const lit_4277 = 300.0f;
-COMPILER_STRIP_GATE(0x80C81C70, &lit_4277);
-
/* 80C7EE50-80C7F2A4 000D10 0454+00 1/1 0/0 0/0 .text action__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::action() {
- // NONMATCHING
+ 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], &current.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);
}
-/* ############################################################################################## */
-/* 80C81C74-80C81C7C 000048 0008+00 0/1 0/0 0/0 .rodata @4452 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4452[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C81C74, &lit_4452);
-#pragma pop
-
-/* 80C81C7C-80C81C84 000050 0008+00 0/1 0/0 0/0 .rodata @4453 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4453[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C81C7C, &lit_4453);
-#pragma pop
-
-/* 80C81C84-80C81C8C 000058 0008+00 0/1 0/0 0/0 .rodata @4454 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4454[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C81C84, &lit_4454);
-#pragma pop
-
-/* 80C81C8C-80C81C90 000060 0004+00 0/1 0/0 0/0 .rodata @4455 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4455 = 360.0f;
-COMPILER_STRIP_GATE(0x80C81C8C, &lit_4455);
-#pragma pop
-
-/* 80C81C90-80C81C94 000064 0004+00 0/1 0/0 0/0 .rodata @4456 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4456 = 1200.0f;
-COMPILER_STRIP_GATE(0x80C81C90, &lit_4456);
-#pragma pop
-
-/* 80C81C94-80C81C98 000068 0004+00 0/1 0/0 0/0 .rodata @4457 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4457 = 1.0f / 100.0f;
-COMPILER_STRIP_GATE(0x80C81C94, &lit_4457);
-#pragma pop
-
-/* 80C81C98-80C81C9C 00006C 0004+00 0/1 0/0 0/0 .rodata @4458 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4458 = 20.0f;
-COMPILER_STRIP_GATE(0x80C81C98, &lit_4458);
-#pragma pop
-
-/* 80C81C9C-80C81CA0 000070 0004+00 0/1 0/0 0/0 .rodata @4459 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4459 = 60.0f;
-COMPILER_STRIP_GATE(0x80C81C9C, &lit_4459);
-#pragma pop
-
/* 80C7F2A4-80C7F8BC 001164 0618+00 1/1 0/0 0/0 .text calcBeam__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::calcBeam() {
- // NONMATCHING
-}
+ 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;
+ }
-/* 80C7F8BC-80C7F904 00177C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */
-// cM3dGPla::~cM3dGPla() {
-extern "C" void __dt__8cM3dGPlaFv() {
- // NONMATCHING
}
-/* 80C7F904-80C7FA54 0017C4 0150+00 1/1 0/0 0/0 .text checkFindPlayer__12daObjLv6Bm_cFv
- */
-void daObjLv6Bm_c::checkFindPlayer() {
- // NONMATCHING
+/* 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
- */
-void daObjLv6Bm_c::checkSearchPlayer() {
- // NONMATCHING
+/* 80C7FA54-80C7FBA4 001914 0150+00 1/1 0/0 0/0 .text checkSearchPlayer__12daObjLv6Bm_cFv */
+int daObjLv6Bm_c::checkSearchPlayer() {
+ 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)) < 0x3A98) {
+ 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;
}
-/* ############################################################################################## */
-/* 80C81CA0-80C81CA4 000074 0004+00 2/2 0/0 0/0 .rodata @4543 */
-SECTION_RODATA static f32 const lit_4543 = 1000.0f;
-COMPILER_STRIP_GATE(0x80C81CA0, &lit_4543);
-
-/* 80C81CA4-80C81CAC 000078 0008+00 2/2 0/0 0/0 .rodata @4545 */
-SECTION_RODATA static u8 const lit_4545[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80C81CA4, &lit_4545);
-
-/* 80C7FBA4-80C7FBFC 001A64 0058+00 2/2 0/0 0/0 .text getSearchDistance__12daObjLv6Bm_cFv
- */
-void daObjLv6Bm_c::getSearchDistance() {
- // NONMATCHING
+/* 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 */
-void daObjLv6Bm_c::getBeamSearchDistance() {
- // NONMATCHING
+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() {
- // NONMATCHING
+ 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 */
@@ -760,128 +630,498 @@ void daObjLv6Bm_c::effectWait() {
/* empty function */
}
-/* ############################################################################################## */
-/* 80C81CAC-80C81CB0 000080 0004+00 1/1 0/0 0/0 .rodata eff_id$4596 */
-SECTION_RODATA static u8 const eff_id_4596[4] = {
- 0x88,
- 0xD9,
- 0x88,
- 0xDA,
-};
-COMPILER_STRIP_GATE(0x80C81CAC, &eff_id_4596);
-
/* 80C7FD90-80C7FEC4 001C50 0134+00 1/1 0/0 0/0 .text initEffectSet0__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::initEffectSet0() {
- // NONMATCHING
+ 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() {
- // NONMATCHING
+ 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
- */
+/* 80C7FF78-80C7FFB8 001E38 0040+00 1/1 0/0 0/0 .text initActionSwWait__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::initActionSwWait() {
- // NONMATCHING
+ 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;
}
-/* ############################################################################################## */
-/* 80C81CB0-80C81CB4 000084 0004+00 0/1 0/0 0/0 .rodata @4764 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4764 = 200.0f;
-COMPILER_STRIP_GATE(0x80C81CB0, &lit_4764);
-#pragma pop
-
/* 80C7FFB8-80C802AC 001E78 02F4+00 1/0 0/0 0/0 .text actionSwWait__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::actionSwWait() {
- // NONMATCHING
+ 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
- */
+/* 80C802AC-80C802C0 00216C 0014+00 3/3 0/0 0/0 .text initActionWarning__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::initActionWarning() {
- // NONMATCHING
+ mMode = 0;
+ field_0xa10 = 1;
}
/* 80C802C0-80C803D8 002180 0118+00 1/0 0/0 0/0 .text actionWarning__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::actionWarning() {
- // NONMATCHING
+ 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() {
- // NONMATCHING
+ 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
- */
+/* 80C80538-80C80684 0023F8 014C+00 1/0 0/0 0/0 .text actionFindPlayer__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::actionFindPlayer() {
- // NONMATCHING
+ 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;
+ }
}
-/* ############################################################################################## */
-/* 80C81CB4-80C81CBC 000088 0008+00 0/1 0/0 0/0 .rodata eff_id$4844 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const eff_id_4844[8] = {
- 0x88, 0xD5, 0x88, 0xD6, 0x88, 0xD7, 0x88, 0xD8,
-};
-COMPILER_STRIP_GATE(0x80C81CB4, &eff_id_4844);
-#pragma pop
-
-/* 80C80684-80C8082C 002544 01A8+00 1/1 0/0 0/0 .text initActionAttack__12daObjLv6Bm_cFv
- */
+/* 80C80684-80C8082C 002544 01A8+00 1/1 0/0 0/0 .text initActionAttack__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::initActionAttack() {
- // NONMATCHING
+ 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], &current.pos, &current.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;
}
-/* ############################################################################################## */
-/* 80C81CBC-80C81CC0 000090 0004+00 0/1 0/0 0/0 .rodata l_eff_id$4949 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_eff_id[4] = {
- 0x88,
- 0xD3,
- 0x88,
- 0xD4,
-};
-COMPILER_STRIP_GATE(0x80C81CBC, &l_eff_id);
-#pragma pop
-
-/* 80C81CC0-80C81CC4 000094 0004+00 0/1 0/0 0/0 .rodata @5133 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5133 = 5.0f;
-COMPILER_STRIP_GATE(0x80C81CC0, &lit_5133);
-#pragma pop
-
-/* 80C81CC4-80C81CC8 000098 0004+00 0/1 0/0 0/0 .rodata @5134 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5134 = 15.0f;
-COMPILER_STRIP_GATE(0x80C81CC4, &lit_5134);
-#pragma pop
-
/* 80C8082C-80C80F48 0026EC 071C+00 1/0 0/0 0/0 .text actionAttack__12daObjLv6Bm_cFv */
void daObjLv6Bm_c::actionAttack() {
// NONMATCHING
+ static u16 const l_eff_id[2] = {
+ ZL2_GLOW02_1,
+ ZL2_GLOW02_2,
+ };
+
+ f32 fVar1 = fopAcM_searchPlayerDistanceXZ(this);
+ if (fVar1 > getBeamSearchDistance()) {
+ fVar1 = getBeamSearchDistance();
+ }
+
+ bool bVar1 = true;
+ if (((s8)checkSearchPlayer() == -1 && cLib_calcTimer(&field_0xa11) == 0) || field_0xa15 != 0) {
+ bVar1 = false;
+ }
+
+ bool bVar2;
+ switch (mMode) {
+ case 0:
+ if (cLib_calcTimer(&field_0xa12) == 0) {
+ mMode = 2;
+ }
+ break;
+
+ case 1:
+ field_0x9d8 = 200;
+ field_0x9c4 = fopAcM_searchPlayerAngleY(this) - home.angle.y;
+
+ cLib_chaseF(&field_0xa2c, fVar1, 5.0f);
+ 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);
+ 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 = false;
+ if (cLib_chaseUC(&field_0xa1c, 0, 26) == 1) {
+ if (mpBtkAnm->isStop()) {
+ bVar2 = true;
+ }
+ }
+
+ 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();
+ }
+ break;
+ }
+
+ field_0xa70 = home.pos;
+ bVar1 = 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();
+ }
+ bVar1 = true;
+ }
+
+ if (!bVar1) {
+ 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() {
- // NONMATCHING
+ 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() {
- // NONMATCHING
+ 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() {
- // NONMATCHING
+ 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 */
@@ -890,107 +1130,116 @@ void daObjLv6Bm_c::actionEnd() {
}
/* 80C81500-80C816A8 0033C0 01A8+00 1/0 0/0 0/0 .text Draw__12daObjLv6Bm_cFv */
-void daObjLv6Bm_c::Draw() {
- // NONMATCHING
+int daObjLv6Bm_c::Draw() {
+ g_env_light.settingTevStruct(0x10, &current.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 */
-void daObjLv6Bm_c::Delete() {
- // NONMATCHING
+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;
}
-/* ############################################################################################## */
-/* 80C81FBC-80C81FE4 0002B8 0028+00 1/1 0/0 0/0 .data __vt__12daObjLv6Bm_c */
-SECTION_DATA extern void* __vt__12daObjLv6Bm_c[10] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)CreateHeap__12daObjLv6Bm_cFv,
- (void*)Create__12daObjLv6Bm_cFv,
- (void*)Execute__12daObjLv6Bm_cFPPA3_A4_f,
- (void*)Draw__12daObjLv6Bm_cFv,
- (void*)Delete__12daObjLv6Bm_cFv,
- (void*)IsDelete__16dBgS_MoveBgActorFv,
- (void*)ToFore__16dBgS_MoveBgActorFv,
- (void*)ToBack__16dBgS_MoveBgActorFv,
-};
-
/* 80C81808-80C819C8 0036C8 01C0+00 1/0 0/0 0/0 .text daObjLv6Bm_create1st__FP12daObjLv6Bm_c */
-static void daObjLv6Bm_create1st(daObjLv6Bm_c* param_0) {
- // NONMATCHING
-}
-
-/* 80C819C8-80C81A10 003888 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
-// cM3dGCyl::~cM3dGCyl() {
-extern "C" void __dt__8cM3dGCylFv() {
- // NONMATCHING
-}
-
-/* 80C81A10-80C81A58 0038D0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
-// cM3dGSph::~cM3dGSph() {
-extern "C" void __dt__8cM3dGSphFv() {
- // NONMATCHING
-}
-
-/* 80C81A58-80C81AA0 003918 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
-
-/* 80C81AA0-80C81AFC 003960 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
+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 void daObjLv6Bm_MoveBGDelete(daObjLv6Bm_c* param_0) {
- // NONMATCHING
+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 void daObjLv6Bm_MoveBGExecute(daObjLv6Bm_c* param_0) {
- // NONMATCHING
+/* 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 void daObjLv6Bm_MoveBGDraw(daObjLv6Bm_c* param_0) {
- // NONMATCHING
-}
-
-/* 80C81B68-80C81BB0 003A28 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80C81BB0-80C81BCC 003A70 001C+00 1/1 0/0 0/0 .text cLib_calcTimer<Us>__FPUs */
-extern "C" void func_80C81BB0(void* _this, u16* param_0) {
- // NONMATCHING
+static int daObjLv6Bm_MoveBGDraw(daObjLv6Bm_c* i_this) {
+ return i_this->MoveBGDraw();
}
-/* 80C81BCC-80C81BE8 003A8C 001C+00 3/3 0/0 0/0 .text cLib_calcTimer<Uc>__FPUc */
-extern "C" void func_80C81BCC(void* _this, u8* param_0) {
- // NONMATCHING
-}
-
-/* 80C81BE8-80C81C20 003AA8 0038+00 0/0 1/0 0/0 .text __sinit_d_a_obj_lv6bemos2_cpp */
-void __sinit_d_a_obj_lv6bemos2_cpp() {
- // NONMATCHING
-}
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80C81BE8, __sinit_d_a_obj_lv6bemos2_cpp);
-#pragma pop
-
-/* ############################################################################################## */
-/* 80C81CC8-80C81CCC 00009C 0004+00 0/0 0/0 0/0 .rodata @5280 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5280 = 6.0f;
-COMPILER_STRIP_GATE(0x80C81CC8, &lit_5280);
-#pragma pop
+/* 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,
+};
-/* 80C81CCC-80C81CCC 0000A0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+/* 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
+};