// // Generated by dtk // Translation Unit: d_a_warpgn.cpp // #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_warpgn.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_ship.h" #include "d/d_lib.h" #include "res/Object/Gmjwp.h" const char daWarpgn_c::m_arcname[] = "Gmjwp"; const u32 daWarpgn_c::m_heapsize = 0x3000; typedef void (daWarpgn_c::*EventInitFunc)(int); static EventInitFunc event_init_tbl[] = { &daWarpgn_c::initWait, &daWarpgn_c::initWarp, &daWarpgn_c::initWarpArrive, &daWarpgn_c::initWarpArriveEnd, &daWarpgn_c::initStartWarp, &daWarpgn_c::initAppear }; typedef BOOL (daWarpgn_c::*EventActionFunc)(int); static EventActionFunc event_action_tbl[] = { &daWarpgn_c::actWait, &daWarpgn_c::actWarp, &daWarpgn_c::actWarpArrive, &daWarpgn_c::actWarpArriveEnd, &daWarpgn_c::actStartWarp, &daWarpgn_c::actAppear }; /* 00000078-00000120 .text _delete__10daWarpgn_cFv */ bool daWarpgn_c::_delete() { if (mpEmitter1 != NULL) { mpEmitter1->becomeInvalidEmitter(); mpEmitter1 = NULL; } if (mpEmitter2 != NULL) { mpEmitter2->becomeInvalidEmitter(); mpEmitter2 = NULL; } if (mpEmitter3 != NULL) { mpEmitter3->becomeInvalidEmitter(); mpEmitter3 = NULL; } dComIfG_resDelete(&mPhs, m_arcname); return true; } /* 00000120-00000140 .text CheckCreateHeap__FP10fopAc_ac_c */ static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { return ((daWarpgn_c*)i_this)->CreateHeap(); } /* 00000140-00000570 .text CreateHeap__10daWarpgn_cFv */ BOOL daWarpgn_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname, dRes_INDEX_GMJWP_BDL_GMJWP00_e); JUT_ASSERT(0xCF, modelData != NULL); mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000222); if (mpModel == NULL) { return FALSE; } J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(m_arcname, dRes_INDEX_GMJWP_BTK_GMJWP00_e); JUT_ASSERT(0xDE, pbtk != NULL); mpBtkAnm1 = new mDoExt_btkAnm(); if ((mpBtkAnm1 == NULL) || mpBtkAnm1->init(modelData, pbtk, true, J3DFrameCtrl::EMode_LOOP) == 0) { return FALSE; } mpBtkAnm1->setPlaySpeed(1.0f); pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(m_arcname, dRes_INDEX_GMJWP_BTK_GMJWP02_e); JUT_ASSERT(0xED, pbtk != NULL); mpBtkAnm2 = new mDoExt_btkAnm(); if ((mpBtkAnm2 == NULL) || mpBtkAnm2->init(modelData, pbtk, true, J3DFrameCtrl::EMode_NONE) == 0) { return FALSE; } mpBtkAnm2->setPlaySpeed(0.0f); J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcname, dRes_INDEX_GMJWP_BRK_GMJWP01_e); JUT_ASSERT(0xFF, pbrk != NULL); mpBrkAnm = new mDoExt_brkAnm(); if (mpBrkAnm == NULL || mpBrkAnm->init(modelData, pbrk, true, J3DFrameCtrl::EMode_NONE) == 0) { return FALSE; } mpBrkAnm->setPlaySpeed(0.0f); J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(m_arcname, dRes_INDEX_GMJWP_BCK_GMJWP01_e); JUT_ASSERT(0x10F, pbck != NULL); mpBckAnm = new mDoExt_bckAnm(); if (mpBckAnm == NULL || mpBckAnm->init(modelData, pbck, true, J3DFrameCtrl::EMode_NONE) == 0) { return FALSE; } mpBckAnm->setPlaySpeed(0.0f); return TRUE; } /* 000005B8-000007D0 .text CreateInit__10daWarpgn_cFv */ void daWarpgn_c::CreateInit() { cullMtx = mpModel->getBaseTRMtx(); fopAcM_setCullSizeBox(this, -400.0f, 0.0f, -400.0f, 400.0f, 2000.0f, 400.0f); fopAcM_setCullSizeFar(this, 1.0f); set_mtx(); mpEmitter1 = dComIfGp_particle_set(dPa_name::ID_IT_SN_MJWPA00, ¤t.pos); mpEmitter2 = dComIfGp_particle_set(dPa_name::ID_IT_SN_MJWPB00, ¤t.pos); mpEmitter3 = dComIfGp_particle_setProjection(dPa_name::ID_IT_SP_MJWPC00, ¤t.pos); if (mpEmitter1 != NULL) { mpEmitter1->stopCreateParticle(); } if (mpEmitter2 != NULL) { mpEmitter2->stopCreateParticle(); } if (mpEmitter3 != NULL) { mpEmitter3->stopCreateParticle(); } mEvtToMajyuuWarpIdx = dComIfGp_evmng_getEventIdx("TO_MAJYUU_WARP"); mEvtAppearWarpIdx = dComIfGp_evmng_getEventIdx("APPEAR_WARP"); mSwitchNo = daWarpgn_prm::getSwitchNo(this); if (checkValidWarp() != FALSE) { mIsSwitch = 1; mEvtAppearWarpIdx = -1; } mSceneNo = daWarpgn_prm::getSceneNo(this); dKy_tevstr_init(&mTevStr, fopAcM_GetRoomNo(this), 0xFF); } /* 000007D0-000008F4 .text _create__10daWarpgn_cFv */ cPhs_State daWarpgn_c::_create() { cPhs_State rt = cPhs_ERROR_e; fopAcM_ct(this, daWarpgn_c); rt = dComIfG_resLoad(&mPhs, m_arcname); if (rt == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, m_heapsize)) { return cPhs_ERROR_e; } CreateInit(); } return rt; } /* 000008F4-00000964 .text set_mtx__10daWarpgn_cFv */ void daWarpgn_c::set_mtx() { mpModel->setBaseScale(scale); mDoMtx_stack_c::transS(current.pos); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000964-00000A78 .text _execute__10daWarpgn_cFv */ bool daWarpgn_c::_execute() { if (demoActorID == 0) { checkOrder(); demo_proc(); eventOrder(); } else { m2C4 = 0; demo_execute(); } if (m388 || dComIfGs_isEventBit(dSv_event_flag_c::UNK_3D02) != 0) { fopAcM_seStart(this, JA_SE_OBJ_GN_WAPR_EFF, 0); } mpModel->setBaseScale(scale); mDoMtx_stack_c::transS(current.pos); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); return true; } /* 00000A78-00000B88 .text normal_execute__10daWarpgn_cFv */ BOOL daWarpgn_c::normal_execute() { BOOL new_is_switch = fopAcM_isSwitch(this, mSwitchNo); if (!dComIfGs_isEventBit(dSv_event_flag_c::UNK_3D02)) { if (new_is_switch && mIsSwitch == 0) { m2C4 = 1; } } else { anim_play(2); if (mpEmitter1 != NULL) { mpEmitter1->playCreateParticle(); } if (mpEmitter2 != NULL) { mpEmitter2->playCreateParticle(); } if (mpEmitter3 != NULL) { mpEmitter3->playCreateParticle(); } } if (check_warp()) { if (DEMO_SELECT(true, !dComIfGp_event_runCheck())) { m2C4 = 2; } } mIsSwitch = new_is_switch; return TRUE; } /* 00000B88-00000C10 .text demo_execute__10daWarpgn_cFv */ BOOL daWarpgn_c::demo_execute() { dDemo_actor_c* demo_actor = dComIfGp_demo_getActor(demoActorID); if (demo_actor != NULL) { mDemoShape = demo_actor->getShapeId(); if (mDemoShape == 0) { anim_play(0); return TRUE; } if (mDemoShape == 1) { anim_play(1); } } return TRUE; } /* 00000C10-00000D2C .text demo_proc__10daWarpgn_cFv */ void daWarpgn_c::demo_proc() { static char* action_table[] = {"WAIT", "WARP", "WARP_ARRIVE", "WARP_ARRIVE_END", "START_WARP", "APPEAR"}; mStaffId = dComIfGp_evmng_getMyStaffId("Warpgn"); if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk() && mStaffId != -1) { s32 action_index = dComIfGp_evmng_getMyActIdx(mStaffId, action_table, ARRAY_SIZE(action_table), FALSE, 0); if (action_index == -1) { dComIfGp_evmng_cutEnd(mStaffId); } else { if (dComIfGp_evmng_getIsAddvance(mStaffId)) { (this->*event_init_tbl[action_index])(mStaffId); } if ((this->*event_action_tbl[action_index])(mStaffId)) { dComIfGp_evmng_cutEnd(mStaffId); } } } } /* 00000D2C-00000D30 .text initWait__10daWarpgn_cFi */ void daWarpgn_c::initWait(int) { return; } /* 00000D30-00000D58 .text actWait__10daWarpgn_cFi */ BOOL daWarpgn_c::actWait(int) { anim_play(0); return TRUE; } /* 00000D58-00000E14 .text initStartWarp__10daWarpgn_cFi */ void daWarpgn_c::initStartWarp(int) { dComIfGp_evmng_setGoal(¤t.pos); if (mpBtkAnm1 != NULL) { mpBtkAnm1->setFrame(0.0f); } if (mpBtkAnm2 != NULL) { mpBtkAnm2->setFrame(0.0f); } if (mpEmitter1 != NULL) { mpEmitter1->playCreateParticle(); } if (mpEmitter2 != NULL) { mpEmitter2->playCreateParticle(); } if (mpEmitter3 != NULL) { mpEmitter3->playCreateParticle(); } } /* 00000E14-00000E3C .text actStartWarp__10daWarpgn_cFi */ BOOL daWarpgn_c::actStartWarp(int) { anim_play(0); return TRUE; } /* 00000E3C-00000E94 .text initWarp__10daWarpgn_cFi */ void daWarpgn_c::initWarp(int) { mDoAud_seStart(JA_SE_LK_GN_WAPR_U_IN); } /* 00000E94-00000EBC .text actWarp__10daWarpgn_cFi */ BOOL daWarpgn_c::actWarp(int) { anim_play(0); return TRUE; } /* 00000EBC-00000F6C .text initWarpArrive__10daWarpgn_cFi */ void daWarpgn_c::initWarpArrive(int) { set_end_anim(); if (mpEmitter1 != NULL) { mpEmitter1->playCreateParticle(); } if (mpEmitter2 != NULL) { mpEmitter2->playCreateParticle(); } if (mpEmitter3 != NULL) { mpEmitter3->playCreateParticle(); } mDoAud_seStart(VERSION_SELECT(JA_SE_LK_GN_WAPR_U_OUT, JA_SE_LK_GN_WAPR_U_OUT, JA_SE_LK_GN_WAPR_D_OUT, JA_SE_LK_GN_WAPR_D_OUT)); } /* 00000F6C-00000F94 .text actWarpArrive__10daWarpgn_cFi */ BOOL daWarpgn_c::actWarpArrive(int) { anim_play(0); return TRUE; } /* 00000F94-00000F98 .text initWarpArriveEnd__10daWarpgn_cFi */ void daWarpgn_c::initWarpArriveEnd(int) { return; } /* 00000F98-00001000 .text actWarpArriveEnd__10daWarpgn_cFi */ BOOL daWarpgn_c::actWarpArriveEnd(int) { BOOL rt = FALSE; anim_play(4); if ((mpBtkAnm2 != NULL) && (mpBtkAnm2->getFrame() < 0.5f)) { rt = TRUE; } return rt; } /* 00001000-0000100C .text initAppear__10daWarpgn_cFi */ void daWarpgn_c::initAppear(int) { mTimer = 100; } /* 0000100C-000010BC .text actAppear__10daWarpgn_cFi */ BOOL daWarpgn_c::actAppear(int) { BOOL rt = FALSE; if (cLib_calcTimer(&mTimer) == 0) { if (mpEmitter1 != NULL) { mpEmitter1->playCreateParticle(); } if (mpEmitter2 != NULL) { mpEmitter2->playCreateParticle(); } if (mpEmitter3 != NULL) { mpEmitter3->playCreateParticle(); } mTimer = 100; rt = TRUE; } anim_play(1); m388 = true; return rt; } /* 000010BC-0000114C .text eventOrder__10daWarpgn_cFv */ void daWarpgn_c::eventOrder() { if (m2C4 == 2) { fopAcM_orderOtherEventId(this, mEvtToMajyuuWarpIdx); eventInfo.onCondition(dEvtCnd_UNK2_e); } else if (m2C4 == 1) { fopAcM_orderOtherEventId(this, mEvtAppearWarpIdx); eventInfo.onCondition(dEvtCnd_UNK2_e); } } /* 0000114C-00001258 .text checkOrder__10daWarpgn_cFv */ void daWarpgn_c::checkOrder() { if (eventInfo.checkCommandDemoAccrpt()) { if (dComIfGp_evmng_startCheck(mEvtToMajyuuWarpIdx) && m2C4 != 0) { m2C4 = 0; } if (dComIfGp_evmng_startCheck(mEvtAppearWarpIdx) && m2C4 != 0) { m2C4 = 0; } if (dComIfGp_evmng_endCheck(mEvtToMajyuuWarpIdx)) { dLib_setNextStageBySclsNum(mSceneNo, fopAcM_GetRoomNo(this)); } if (dComIfGp_evmng_endCheck(mEvtAppearWarpIdx)) { dComIfGs_onEventBit(dSv_event_flag_c::UNK_3D02); mEvtAppearWarpIdx = -1; dComIfGp_event_reset(); } } else if (m2C4 == 0 #if VERSION == VERSION_DEMO && !dComIfGp_event_runCheck() #endif ) { normal_execute(); } } /* 00001258-0000146C .text anim_play__10daWarpgn_cFi */ void daWarpgn_c::anim_play(int anim_no) { if (anim_no == 0) { if (mpBtkAnm1 != NULL) { mpBtkAnm1->setPlaySpeed(1.0f); mpBtkAnm1->play(); } if (mpBtkAnm2 != NULL) { mpBtkAnm2->setPlaySpeed(1.0f); mpBtkAnm2->play(); } } else if (anim_no == 1) { if (mpBtkAnm1 != NULL) { mpBtkAnm1->setPlaySpeed(1.0f); mpBtkAnm1->play(); } if (mpBckAnm != NULL) { mpBckAnm->setPlaySpeed(1.0f); mpBckAnm->play(); } if (mpBrkAnm != NULL) { mpBrkAnm->setPlaySpeed(1.0f); mpBrkAnm->play(); } } else if (anim_no == 2) { if (mpBtkAnm1 != NULL) { mpBtkAnm1->setPlaySpeed(1.0f); mpBtkAnm1->play(); } if (mpBrkAnm != NULL) { mpBrkAnm->setFrame(mpBrkAnm->getEndFrame()); } if (mpBckAnm != NULL) { mpBckAnm->setFrame(mpBckAnm->getEndFrame()); } } else if (anim_no == 3) { if (mpBtkAnm1 != NULL) { mpBtkAnm1->setPlaySpeed(1.0f); mpBtkAnm1->play(); } } else if (anim_no == 4) { if (mpBtkAnm1 != NULL) { mpBtkAnm1->setPlaySpeed(1.0f); mpBtkAnm1->play(); } if (mpBtkAnm2 != NULL) { mpBtkAnm2->setPlaySpeed(-1.0f); mpBtkAnm2->play(); } } } /* 0000146C-00001520 .text set_end_anim__10daWarpgn_cFv */ void daWarpgn_c::set_end_anim() { if (mpBtkAnm2 != NULL) { mpBtkAnm2->setFrame(mpBtkAnm2->getEndFrame()); } if (mpBrkAnm != NULL) { mpBrkAnm->setFrame(mpBrkAnm->getEndFrame()); } if (mpBckAnm != NULL) { mpBckAnm->setFrame(mpBckAnm->getEndFrame()); } } /* 00001520-000016DC .text check_warp__10daWarpgn_cFv */ BOOL daWarpgn_c::check_warp() { daPy_py_c* player = daPy_getPlayerActorClass(); float dist_to_player = (player->current.pos - current.pos).absXZ(); if (checkValidWarp() == FALSE) { return FALSE; } if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) != 0) { daShip_c* ship = dComIfGp_getShipActor(); if (ship != NULL) { f32 dist_to_ship = (dComIfGp_getShipActor()->current.pos - current.pos).absXZ(); if (dist_to_ship < 200.0f) { return TRUE; } } } return FALSE; } /* 000016DC-00001744 .text checkValidWarp__10daWarpgn_cFv */ BOOL daWarpgn_c::checkValidWarp() { if (!fopAcM_isSwitch(this, mSwitchNo) && !dComIfGs_isEventBit(dSv_event_flag_c::UNK_3D02)) { return FALSE; } return TRUE; } /* 00001744-000018D4 .text _draw__10daWarpgn_cFv */ bool daWarpgn_c::_draw() { g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr); g_env_light.setLightTevColorType(mpModel, &tevStr); g_env_light.settingTevStruct(TEV_TYPE_BG1, ¤t.pos, &mTevStr); J3DModelData* model_data = mpModel->getModelData(); for (u16 i = 0; i < model_data->getMaterialNum(); i++) { J3DMaterial* material = model_data->getMaterialNodePointer(i); material->getTevKColor(1)->mColor.r = mTevStr.mColorK0.r; material->getTevKColor(1)->mColor.g = mTevStr.mColorK0.g; material->getTevKColor(1)->mColor.b = mTevStr.mColorK0.b; } if (mpBtkAnm1 != NULL) { mpBtkAnm1->entry(mpModel->getModelData()); } if (mpBtkAnm2 != NULL) { mpBtkAnm2->entry(mpModel->getModelData()); } if (mpBrkAnm != NULL) { mpBrkAnm->entry(mpModel->getModelData()); } if (mpBckAnm != NULL) { mpBckAnm->entry(mpModel->getModelData()); } mDoExt_modelUpdateDL(mpModel); return true; } /* 000018D4-000018F4 .text daWarpgn_Create__FPv */ static cPhs_State daWarpgn_Create(void* i_this) { return ((daWarpgn_c*)i_this)->_create(); } /* 000018F4-00001918 .text daWarpgn_Delete__FPv */ static BOOL daWarpgn_Delete(void* i_this) { return ((daWarpgn_c*)i_this)->_delete(); } /* 00001918-0000193C .text daWarpgn_Draw__FPv */ static BOOL daWarpgn_Draw(void* i_this) { return ((daWarpgn_c*)i_this)->_draw(); } /* 0000193C-00001960 .text daWarpgn_Execute__FPv */ static BOOL daWarpgn_Execute(void* i_this) { return ((daWarpgn_c*)i_this)->_execute(); } /* 00001960-00001968 .text daWarpgn_IsDelete__FPv */ static BOOL daWarpgn_IsDelete(void*) { return TRUE; } static actor_method_class daWarpgnMethodTable = { (process_method_func)daWarpgn_Create, (process_method_func)daWarpgn_Delete, (process_method_func)daWarpgn_Execute, (process_method_func)daWarpgn_IsDelete, (process_method_func)daWarpgn_Draw, }; actor_process_profile_definition g_profile_WARPGANON = { /* Layer ID */ fpcLy_CURRENT_e, /* List ID */ 0x0003, /* List Prio */ fpcPi_CURRENT_e, /* Proc Name */ fpcNm_WARPGANON_e, /* Proc SubMtd */ &g_fpcLf_Method.base, /* Size */ sizeof(daWarpgn_c), /* Size Other */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Draw Prio */ fpcDwPi_WARPGANON_e, /* Actor SubMtd */ &daWarpgnMethodTable, /* Status */ fopAcStts_CULL_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e, /* Group */ fopAc_ACTOR_e, /* Cull Type */ fopAc_CULLBOX_CUSTOM_e, };