mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
b97eeed779
See https://github.com/zeldaret/tp/pull/2327/commits/2a284165cf35a2324d36d825add5c06ffa864398
499 lines
16 KiB
C++
499 lines
16 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_obj_vgnfd.cpp
|
|
//
|
|
|
|
#include "d/actor/d_a_obj_vgnfd.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/res/res_vgnfd.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
|
|
#include "weak_data_1811.h" // IWYU pragma: keep
|
|
|
|
const s32 daObjVgnfd_c::M_bdl_table[] = {
|
|
VGNFD_BDL_VGNFD0,
|
|
VGNFD_BDL_VGNFD1,
|
|
VGNFD_BDL_VGNFD2,
|
|
VGNFD_BDL_VGNFD3,
|
|
VGNFD_BDL_VGNFD4,
|
|
};
|
|
const s32 daObjVgnfd_c::M_brk_table[] = {
|
|
VGNFD_BRK_VGNFD0,
|
|
VGNFD_BRK_VGNFD1,
|
|
VGNFD_BRK_VGNFD2,
|
|
VGNFD_BRK_VGNFD3,
|
|
VGNFD_BRK_VGNFD4,
|
|
};
|
|
const s32 daObjVgnfd_c::M_door_bdl_table[] = {
|
|
VGNFD_BDL_VGNFD5,
|
|
VGNFD_BDL_YGCBD00,
|
|
};
|
|
const u16 daObjVgnfd_c::M_door_ev_table[] = {
|
|
0x3904, 0x3902, 0x3901, 0x3A80,
|
|
};
|
|
const u16 daObjVgnfd_c::M_boss_ev_table[] = {
|
|
0x3240, 0x3220, 0x3210, 0x3208,
|
|
};
|
|
const char daObjVgnfd_c::M_arcname[6] = "VgnFD";
|
|
|
|
static const char* l_daObjVgnfd_demo_name[] = {
|
|
"4_door_dn",
|
|
"4_door_mr",
|
|
"4_door_dc",
|
|
"4_door_kz",
|
|
};
|
|
|
|
static char* l_daObjVgnfd_act_name[] = {
|
|
"wait0",
|
|
"wait1",
|
|
};
|
|
|
|
static char* l_daObjVgnfd_break_act_name[] = {
|
|
"wait0",
|
|
"gannon",
|
|
"vib0",
|
|
"vib1",
|
|
"break",
|
|
"burst",
|
|
};
|
|
|
|
static u16 l_daObjVgnfd_pt_table[] = {
|
|
dPa_name::ID_SCENE_833E,
|
|
dPa_name::ID_SCENE_833F,
|
|
dPa_name::ID_SCENE_8340,
|
|
dPa_name::ID_SCENE_8341,
|
|
dPa_name::ID_SCENE_8342,
|
|
dPa_name::ID_SCENE_8343,
|
|
};
|
|
|
|
enum {
|
|
STATE_WAIT,
|
|
STATE_DEMO,
|
|
STATE_DEMO_FIN,
|
|
};
|
|
|
|
/* 00000078-00000098 .text solidHeapCB__12daObjVgnfd_cFP10fopAc_ac_c */
|
|
BOOL daObjVgnfd_c::solidHeapCB(fopAc_ac_c* i_ac) {
|
|
/* Nonmatching */
|
|
return ((daObjVgnfd_c*)i_ac)->create_heap();
|
|
}
|
|
|
|
/* 00000098-0000022C .text create_bdl_brk__12daObjVgnfd_cFi */
|
|
BOOL daObjVgnfd_c::create_bdl_brk(int i) {
|
|
/* Nonmatching */
|
|
BOOL ret = FALSE;
|
|
J3DModelData* mdl_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, M_door_bdl_table[i]);
|
|
JUT_ASSERT(0xfe, mdl_data != NULL);
|
|
if (mdl_data != NULL) {
|
|
mModel[i] = mDoExt_J3DModel__create(mdl_data, 0, 0x11020203);
|
|
if (mModel[i] != NULL) {
|
|
if (M_brk_table[i] != -1) {
|
|
J3DAnmTevRegKey* brk_p = (J3DAnmTevRegKey*)dComIfG_getObjectRes(M_arcname, M_brk_table[i]);
|
|
JUT_ASSERT(0x105, brk_p != NULL);
|
|
if (brk_p != NULL) {
|
|
if (mBrkAnm[i].init(mdl_data, brk_p, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, FALSE))
|
|
ret = TRUE;
|
|
}
|
|
} else {
|
|
ret = TRUE;
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 0000022C-000004A4 .text create_heap__12daObjVgnfd_cFv */
|
|
BOOL daObjVgnfd_c::create_heap() {
|
|
/* Nonmatching */
|
|
BOOL ret = TRUE;
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(mModel); i++) {
|
|
if (!create_bdl_brk(i)) {
|
|
ret = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (ret) {
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(mModel2); i++) {
|
|
J3DModelData* mdl_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, M_door_bdl_table[i]);
|
|
JUT_ASSERT(0x133, mdl_data != NULL);
|
|
|
|
if (mdl_data != NULL) {
|
|
mModel2[i] = mDoExt_J3DModel__create(mdl_data, 0, 0x11020203);
|
|
if (mModel2[i] == NULL) {
|
|
ret = FALSE;
|
|
break;
|
|
}
|
|
} else {
|
|
ret = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (ret) {
|
|
J3DAnmTextureSRTKey* btk_data = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(M_arcname, VGNFD_BTK_YGCBD00);
|
|
JUT_ASSERT(0x144, btk_data != NULL);
|
|
|
|
if (btk_data == NULL || !mBtkAnm.init(mModel2[1]->getModelData(), btk_data, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, FALSE)) {
|
|
ret = FALSE;
|
|
}
|
|
}
|
|
|
|
if (ret) {
|
|
Mtx* mtx = &mModel[0]->getBaseTRMtx();
|
|
cBgD_t* dzb_data = (cBgD_t*)dComIfG_getObjectRes(M_arcname, VGNFD_DZB_VGNFD);
|
|
M_bgw = dBgW_NewSet(dzb_data, dBgW::MOVE_BG_e, mtx);
|
|
JUT_ASSERT(0x151, M_bgw != NULL);
|
|
|
|
if (M_bgw == NULL)
|
|
ret = FALSE;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 000004A4-00000704 .text _create__12daObjVgnfd_cFv */
|
|
s32 daObjVgnfd_c::_create() {
|
|
s32 ret = cPhs_ERROR_e;
|
|
|
|
fopAcM_SetupActor(this, daObjVgnfd_c);
|
|
|
|
if (!check_fin()) {
|
|
ret = dComIfG_resLoad(&mPhs, M_arcname);
|
|
if (ret == cPhs_COMPLEATE_e) {
|
|
ret = cPhs_ERROR_e;
|
|
if (fopAcM_entrySolidHeap(this, solidHeapCB, 0)) {
|
|
fopAcM_SetMtx(this, mModel[0]->getBaseTRMtx());
|
|
init_mtx();
|
|
mBrkAnm[0].setPlaySpeed(0.0f);
|
|
|
|
for (s32 i = 1; i < 5; i++) {
|
|
mBrkAnm[i].setPlaySpeed(0.0f);
|
|
if (check_ev_init(i - 1)) {
|
|
mBrkAnm[i].setFrame(mBrkAnm[i].getEndFrame());
|
|
}
|
|
}
|
|
|
|
mBtkAnm.setPlaySpeed(0.0f);
|
|
M_demo_idx = get_start_demo_idx();
|
|
if (M_demo_idx != -1) {
|
|
mState = STATE_DEMO;
|
|
mEventIdx = dComIfGp_evmng_getEventIdx(l_daObjVgnfd_demo_name[M_demo_idx]);
|
|
}
|
|
|
|
fopAcM_setCullSizeBox(this, -260.0f, -10.0f, -50.0f, 260.0f, 510.0f, 100.0f);
|
|
mSmoke.setTevStr(&tevStr);
|
|
mSmoke.setRateOff(0);
|
|
mSmoke.field_0x15 = 1;
|
|
mSmoke.field_0x12 = 1;
|
|
|
|
dComIfG_Bgsp()->Regist(M_bgw, this);
|
|
M_bgw->Move();
|
|
mInit = true;
|
|
ret = cPhs_COMPLEATE_e;
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 00000830-000008D8 .text _delete__12daObjVgnfd_cFv */
|
|
bool daObjVgnfd_c::_delete() {
|
|
if (heap != NULL) {
|
|
if (M_bgw != NULL && M_bgw->ChkUsed()) {
|
|
dComIfG_Bgsp()->Release(M_bgw);
|
|
M_bgw = NULL;
|
|
}
|
|
}
|
|
|
|
mSmoke.end();
|
|
dComIfG_resDelete(&mPhs, M_arcname);
|
|
return true;
|
|
}
|
|
|
|
/* 000008D8-00000914 .text check_ev_init__12daObjVgnfd_cFi */
|
|
BOOL daObjVgnfd_c::check_ev_init(int i) {
|
|
return dComIfGs_isEventBit(M_door_ev_table[i]);
|
|
}
|
|
|
|
/* 00000914-000009AC .text get_start_demo_idx__12daObjVgnfd_cFv */
|
|
s32 daObjVgnfd_c::get_start_demo_idx() {
|
|
s32 ret = -1;
|
|
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(M_door_ev_table); i++) {
|
|
if (!dComIfGs_isEventBit(M_door_ev_table[i]) && dComIfGs_isEventBit(M_boss_ev_table[i])) {
|
|
ret = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 000009AC-00000A28 .text check_fin__12daObjVgnfd_cFv */
|
|
BOOL daObjVgnfd_c::check_fin() {
|
|
/* Nonmatching */
|
|
BOOL ret = TRUE;
|
|
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(M_door_ev_table); i++) {
|
|
if (!dComIfGs_isEventBit(M_door_ev_table[i])) {
|
|
ret = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 00000A28-00000A58 .text on_fin__12daObjVgnfd_cFv */
|
|
void daObjVgnfd_c::on_fin() {
|
|
dComIfGs_onEventBit(0x3204);
|
|
}
|
|
|
|
/* 00000A58-00000B3C .text init_mtx__12daObjVgnfd_cFv */
|
|
void daObjVgnfd_c::init_mtx() {
|
|
mModel[0]->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(mModel); i++)
|
|
mModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(mModel2); i++)
|
|
mModel2[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
/* 00000B3C-00000BA0 .text set_timer__12daObjVgnfd_cFv */
|
|
void daObjVgnfd_c::set_timer() {
|
|
u32* int_p = dComIfGp_evmng_getMyIntegerP(mStaffId, "Timer");
|
|
mTimer = 0;
|
|
if (int_p != NULL)
|
|
mTimer = *int_p;
|
|
}
|
|
|
|
/* 00000BA0-00001298 .text _execute__12daObjVgnfd_cFv */
|
|
bool daObjVgnfd_c::_execute() {
|
|
/* Nonmatching */
|
|
BOOL done = FALSE;
|
|
|
|
switch (mState) {
|
|
case STATE_WAIT:
|
|
break;
|
|
case STATE_DEMO:
|
|
JUT_ASSERT(0x253, M_demo_idx != -1);
|
|
if (!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderOtherEventId(this, mEventIdx);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
} else {
|
|
if (dComIfGp_evmng_endCheck(mEventIdx)) {
|
|
dComIfGp_event_reset();
|
|
if (check_fin()) {
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("4_door_fin");
|
|
fopAcM_orderOtherEventId(this, mEventIdx);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
mState = STATE_DEMO_FIN;
|
|
} else {
|
|
mState = STATE_WAIT;
|
|
}
|
|
} else {
|
|
mStaffId = dComIfGp_evmng_getMyStaffId(M_arcname);
|
|
if (mStaffId != -1) {
|
|
enum {
|
|
ACT_WAIT0,
|
|
ACT_WAIT1,
|
|
};
|
|
|
|
s32 actIdx = dComIfGp_evmng_getMyActIdx(mStaffId, l_daObjVgnfd_act_name, ARRAY_SIZE(l_daObjVgnfd_act_name), FALSE, 0);
|
|
if (dComIfGp_evmng_getIsAddvance(mStaffId)) {
|
|
switch (actIdx) {
|
|
case ACT_WAIT0:
|
|
dComIfGs_onEventBit(M_door_ev_table[M_demo_idx]);
|
|
set_timer();
|
|
break;
|
|
case ACT_WAIT1:
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (actIdx) {
|
|
case ACT_WAIT0:
|
|
mTimer--;
|
|
if (mTimer <= 0) {
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
mBrkAnm[M_demo_idx + 1].setPlaySpeed(1.0f);
|
|
mDoAud_seStart(JA_SE_OBJ_B_BOSS_DR_LT_1);
|
|
if (check_fin()) {
|
|
mDoAud_seStart(JA_SE_READ_RIDDLE_1);
|
|
}
|
|
}
|
|
break;
|
|
case ACT_WAIT1:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case STATE_DEMO_FIN:
|
|
if (!eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderOtherEventId(this, mEventIdx);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
} else {
|
|
if (dComIfGp_evmng_endCheck(mEventIdx)) {
|
|
dComIfGp_event_reset();
|
|
on_fin();
|
|
done = TRUE;
|
|
mState = STATE_WAIT;
|
|
} else {
|
|
mStaffId = dComIfGp_evmng_getMyStaffId(M_arcname);
|
|
if (mStaffId != -1) {
|
|
enum {
|
|
ACT_WAIT0,
|
|
ACT_GANNON,
|
|
ACT_VIB0,
|
|
ACT_VIB1,
|
|
ACT_BREAK,
|
|
ACT_BURST,
|
|
};
|
|
|
|
s32 actIdx = dComIfGp_evmng_getMyActIdx(mStaffId, l_daObjVgnfd_break_act_name, ARRAY_SIZE(l_daObjVgnfd_break_act_name), FALSE, 0);
|
|
if (dComIfGp_evmng_getIsAddvance(mStaffId)) {
|
|
set_timer();
|
|
switch (actIdx) {
|
|
case ACT_WAIT0:
|
|
break;
|
|
case ACT_GANNON:
|
|
mBrkAnm[0].setPlaySpeed(1.0f);
|
|
for (s32 i = 1; i < ARRAY_SIZE(mBrkAnm); i++)
|
|
mBrkAnm[i].setPlaySpeed(-1.0f);
|
|
break;
|
|
case ACT_VIB0:
|
|
dComIfGp_getVibration().StartShock(8, 23, cXyz(0.0f, 1.0f, 0.0f));
|
|
fopAcM_seStartCurrent(this, JA_SE_OBJ_B_BOSS_DR_BRK_1, 0);
|
|
break;
|
|
case ACT_VIB1:
|
|
dComIfGp_getVibration().StartQuake(2, 11, cXyz(0.0f, 1.0f, 0.0f));
|
|
break;
|
|
case ACT_BREAK:
|
|
mCurModel = 1;
|
|
mBtkAnm.setPlaySpeed(1.0f);
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(l_daObjVgnfd_pt_table); i++) {
|
|
JPABaseEmitter* emtr = dComIfGp_particle_set(l_daObjVgnfd_pt_table[i], ¤t.pos, ¤t.angle, &scale);
|
|
if (emtr != NULL) {
|
|
emtr->setGlobalPrmColor(tevStr.mColorK0.r, tevStr.mColorK0.g, tevStr.mColorK0.b);
|
|
}
|
|
}
|
|
dComIfGp_particle_setToon(dPa_name::ID_SCENE_A344, ¤t.pos, ¤t.angle, &scale, 0xA0, &mSmoke);
|
|
dComIfGp_getVibration().StartQuake(4, 11, cXyz(0.0f, 1.0f, 0.0f));
|
|
fopAcM_seStartCurrent(this, JA_SE_OBJ_B_BOSS_DR_BRK_2, 0);
|
|
break;
|
|
case ACT_BURST:
|
|
dComIfGp_getVibration().StopQuake(-1);
|
|
dComIfGp_getVibration().StartShock(8, 27, cXyz(0.0f, 1.0f, 0.0f));
|
|
mCurModel = 2;
|
|
fopAcM_seStartCurrent(this, JA_SE_OBJ_B_BOSS_DR_BRK_3, 0);
|
|
}
|
|
}
|
|
|
|
if (mTimer > 0)
|
|
mTimer--;
|
|
|
|
switch (actIdx) {
|
|
case ACT_WAIT0:
|
|
case ACT_BURST:
|
|
break;
|
|
case ACT_GANNON:
|
|
case ACT_VIB0:
|
|
case ACT_VIB1:
|
|
case ACT_BREAK:
|
|
if (mTimer <= 0)
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
for (s32 i = 0; i < (s32)ARRAY_SIZE(mBrkAnm); i++)
|
|
mBrkAnm[i].play();
|
|
mBtkAnm.play();
|
|
if (done)
|
|
fopAcM_delete(this);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001298-000013F0 .text _draw__12daObjVgnfd_cFv */
|
|
bool daObjVgnfd_c::_draw() {
|
|
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr);
|
|
if (mCurModel == 0) {
|
|
g_env_light.setLightTevColorType(mModel2[mCurModel], &tevStr);
|
|
mDoExt_modelUpdateDL(mModel2[mCurModel]);
|
|
for (s32 i = 4; i >= 0; i--) {
|
|
g_env_light.setLightTevColorType(mModel[i], &tevStr);
|
|
if (M_brk_table[i] != -1)
|
|
mBrkAnm[i].entry(mModel[i]->getModelData());
|
|
mDoExt_modelUpdateDL(mModel[i]);
|
|
}
|
|
} else if (mCurModel == 1) {
|
|
g_env_light.setLightTevColorType(mModel2[mCurModel], &tevStr);
|
|
mBtkAnm.entry(mModel2[mCurModel]->getModelData());
|
|
mDoExt_modelUpdateDL(mModel2[mCurModel]);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
namespace {
|
|
/* 000013F0-00001410 .text Mthd_Create__27@unnamed@d_a_obj_vgnfd_cpp@FPv */
|
|
s32 Mthd_Create(void* i_ac) {
|
|
return ((daObjVgnfd_c*)i_ac)->_create();
|
|
}
|
|
|
|
/* 00001410-00001434 .text Mthd_Delete__27@unnamed@d_a_obj_vgnfd_cpp@FPv */
|
|
BOOL Mthd_Delete(void* i_ac) {
|
|
return ((daObjVgnfd_c*)i_ac)->_delete();
|
|
}
|
|
|
|
/* 00001434-00001458 .text Mthd_Execute__27@unnamed@d_a_obj_vgnfd_cpp@FPv */
|
|
BOOL Mthd_Execute(void* i_ac) {
|
|
return ((daObjVgnfd_c*)i_ac)->_execute();
|
|
}
|
|
|
|
/* 00001458-0000147C .text Mthd_Draw__27@unnamed@d_a_obj_vgnfd_cpp@FPv */
|
|
BOOL Mthd_Draw(void* i_ac) {
|
|
return ((daObjVgnfd_c*)i_ac)->_draw();
|
|
}
|
|
|
|
/* 0000147C-00001484 .text Mthd_IsDelete__27@unnamed@d_a_obj_vgnfd_cpp@FPv */
|
|
BOOL Mthd_IsDelete(void* i_ac) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class Vgnfd_Mthd_Table = {
|
|
(process_method_func)Mthd_Create,
|
|
(process_method_func)Mthd_Delete,
|
|
(process_method_func)Mthd_Execute,
|
|
(process_method_func)Mthd_IsDelete,
|
|
(process_method_func)Mthd_Draw,
|
|
};
|
|
}; // namespace
|
|
|
|
actor_process_profile_definition g_profile_Obj_Vgnfd = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0003,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_Obj_Vgnfd,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daObjVgnfd_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ 0x0050,
|
|
/* Actor SubMtd */ &Vgnfd_Mthd_Table,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|