Files
tww/src/d/actor/d_a_warpf.cpp
T
2026-05-12 23:57:49 -04:00

894 lines
27 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_warpf.cpp
//
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_warpf.h"
#include "d/actor/d_a_player.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_level_se.h"
#include "d/d_item.h"
#include "d/d_bg_s_func.h"
#include "f_op/f_op_actor_mng.h"
#include "f_op/f_op_kankyo_mng.h"
#include "f_op/f_op_camera.h"
#include "d/res/res_ysbwp00.h"
#include "d/res/res_gtfglow.h"
namespace daWarpf_prm {
static inline u32 getSetType(daWarpf_c* i_this) { return fopAcM_GetParam(i_this) >> 0x1C; }
}
const char* daWarpf_c::m_arcname[] = {
/* STAGE_SEA */ NULL,
/* STAGE_SEA2 */ NULL,
/* STAGE_FF */ NULL,
/* STAGE_DRC */ NULL,
/* STAGE_FW */ NULL,
/* STAGE_TOTG */ "Ysbwp00",
/* STAGE_ET */ "Gtfglow",
/* STAGE_WT */ "Gtfglow",
/* STAGE_GT */ NULL,
/* STAGE_HYRULE */ NULL,
/* STAGE_SHIP */ NULL,
/* STAGE_MISC */ NULL,
/* STAGE_SUBDUNGEON */ NULL,
/* STAGE_SUBDUNGEON_NEW */ NULL,
/* STAGE_BLUE_CHU_JELLY */ NULL,
/* STAGE_TEST */ NULL,
};
const f32 daWarpf_c::m_warp_size[] = {
/* STAGE_SEA */ 100.0f,
/* STAGE_SEA2 */ 100.0f,
/* STAGE_FF */ 100.0f,
/* STAGE_DRC */ 100.0f,
/* STAGE_FW */ 100.0f,
/* STAGE_TOTG */ 200.0f,
/* STAGE_ET */ 100.0f,
/* STAGE_WT */ 100.0f,
/* STAGE_GT */ 100.0f,
/* STAGE_HYRULE */ 100.0f,
/* STAGE_SHIP */ 100.0f,
/* STAGE_MISC */ 100.0f,
/* STAGE_SUBDUNGEON */ 100.0f,
/* STAGE_SUBDUNGEON_NEW */ 100.0f,
/* STAGE_BLUE_CHU_JELLY */ 100.0f,
/* STAGE_TEST */ 100.0f,
};
/* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
return ((daWarpf_c*)i_this)->CreateHeap();
}
/* 00000098-00000A2C .text CreateHeap__9daWarpf_cFv */
BOOL daWarpf_c::CreateHeap() {
J3DModelData* modelData;
J3DAnmTevRegKey* pbrk;
J3DAnmTransform* pbck;
J3DAnmTextureSRTKey* pbtk;
switch (mStageNo) {
case dSv_save_c::STAGE_TOTG:
modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname[mStageNo], YSBWP00_BDL_YSBWP00);
JUT_ASSERT(343, modelData != NULL);
m2A8 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000222);
if (m2A8 == NULL) {
return FALSE;
}
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcname[mStageNo], YSBWP00_BRK_YSBWP00);
JUT_ASSERT(358, pbrk != NULL);
m2AC = new mDoExt_brkAnm();
if (m2AC == NULL || !m2AC->init(modelData, pbrk, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, 0)) {
return FALSE;
}
pbck = (J3DAnmTransform*)dComIfG_getObjectRes(m_arcname[mStageNo], YSBWP00_BCK_YSBWP00);
JUT_ASSERT(374, pbck != NULL);
m2B0 = new mDoExt_bckAnm();
if (m2B0 == NULL || !m2B0->init(modelData, pbck, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false)) {
return FALSE;
}
pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(m_arcname[mStageNo], YSBWP00_BTK_YSBWP00);
JUT_ASSERT(391, pbtk != NULL);
m2B4 = new mDoExt_btkAnm();
if (m2B4 == NULL || !m2B4->init(modelData, pbtk, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false)) {
return FALSE;
}
break;
case dSv_save_c::STAGE_ET:
case dSv_save_c::STAGE_WT:
if (!checkEndDemo()) {
m2C0 = NULL;
modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname[mStageNo], GTFGLOW_BDL_GTFGLOW00);
JUT_ASSERT(411, modelData != NULL);
m2A8 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
if (m2A8 == NULL) {
return FALSE;
}
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcname[mStageNo], GTFGLOW_BRK_GTFGLOW00);
JUT_ASSERT(424, pbrk != NULL);
m2AC = new mDoExt_brkAnm();
if (m2AC == NULL || !m2AC->init(modelData, pbrk, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, 0)) {
return FALSE;
}
m2AC->setPlaySpeed(1.0f);
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcname[mStageNo], GTFGLOW_BRK_GTFGLOW01);
JUT_ASSERT(441, pbrk != NULL);
m2B8 = new mDoExt_brkAnm();
if (m2B8 == NULL || !m2B8->init(modelData, pbrk, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0)) {
return FALSE;
}
m2B8->setPlaySpeed(0.0f);
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcname[mStageNo], GTFGLOW_BRK_GTFGLOW02);
JUT_ASSERT(457, pbrk != NULL);
m2BC = new mDoExt_brkAnm();
if (m2BC == NULL || !m2BC->init(modelData, pbrk, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, 0)) {
return FALSE;
}
m2BC->setPlaySpeed(0.0f);
} else {
modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname[mStageNo], GTFGLOW_BDL_GDEMO29_A00);
JUT_ASSERT(474, modelData != NULL);
m2A8 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
if (m2A8 == NULL) {
return FALSE;
}
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(m_arcname[mStageNo], DEMO_SELECT(GTFGLOW_BRK_GDEMO29_A00, GTFGLOW_BRK_GDEMO29_A01));
JUT_ASSERT(488, pbrk != NULL);
m2AC = new mDoExt_brkAnm();
if (m2AC == NULL || !m2AC->init(modelData, pbrk, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0)) {
return FALSE;
}
m2AC->setPlaySpeed(1.0f);
modelData = (J3DModelData*)dComIfG_getObjectRes(m_arcname[mStageNo], GTFGLOW_BDL_GDEMO29_B00);
JUT_ASSERT(504, modelData != NULL);
m2C0 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
if (m2C0 == NULL) {
return FALSE;
}
m2B8 = NULL;
m2BC = NULL;
}
break;
}
return TRUE;
}
/* 00000A74-00000B58 .text _delete__9daWarpf_cFv */
bool daWarpf_c::_delete() {
if (m290 != NULL) {
m290->becomeInvalidEmitter();
m290 = NULL;
}
if (m294 != NULL) {
m294->becomeInvalidEmitter();
m294 = NULL;
}
if (m298 != NULL) {
m298->becomeInvalidEmitter();
m298 = NULL;
}
if (m29C != NULL) {
m29C->becomeInvalidEmitter();
m29C = NULL;
}
if (m_arcname[mStageNo] != NULL) {
dComIfG_resDelete(&mPhase, m_arcname[mStageNo]);
}
return true;
}
/* 00000B58-00000C34 .text checkEndDemo__9daWarpf_cFv */
BOOL daWarpf_c::checkEndDemo() {
BOOL ret = 0;
switch (mStageNo) {
case dSv_save_c::STAGE_SEA:
case dSv_save_c::STAGE_SEA2:
case dSv_save_c::STAGE_FF:
break;
case dSv_save_c::STAGE_DRC:
if (checkItemGet(dItem_PEARL_DIN_e, TRUE)) {
ret = TRUE;
}
break;
case dSv_save_c::STAGE_FW:
if (checkItemGet(dItem_PEARL_FARORE_e, TRUE)) {
ret = TRUE;
}
break;
case dSv_save_c::STAGE_TOTG:
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_2D10)) {
ret = TRUE;
}
break;
case dSv_save_c::STAGE_ET:
#if VERSION == VERSION_DEMO
if (dComIfGs_checkGetItem(dItem_MASTER_SWORD_2_e)) {
#else
if (checkItemGet(dItem_MASTER_SWORD_2_e, TRUE)) {
#endif
ret = TRUE;
}
break;
case dSv_save_c::STAGE_WT:
if (dComIfGs_checkGetItem(dItem_MASTER_SWORD_3_e)) {
ret = TRUE;
}
break;
case dSv_save_c::STAGE_SUBDUNGEON_NEW:
break;
}
return ret;
}
/* 00000C34-00000C38 .text onEndDemo__9daWarpf_cFv */
void daWarpf_c::onEndDemo() {
}
/* 00000C38-00000CFC .text CreateInit__9daWarpf_cFv */
cPhs_State daWarpf_c::CreateInit() {
current.pos.y = get_earth_pos();
if (!dComIfGs_isStageBossEnemy()) {
return cPhs_ERROR_e;
}
set_effect();
if (!checkEndDemo()) {
m2D6 = dComIfGp_evmng_getEventIdx("WARP_WIND");
} else {
m2D6 = dComIfGp_evmng_getEventIdx("WARP_WIND_AFTER");
setEndAnim();
}
return cPhs_COMPLEATE_e;
}
/* 00000CFC-00000E74 .text _create__9daWarpf_cFv */
cPhs_State daWarpf_c::_create() {
fopAcM_ct(this, daWarpf_c);
mStageNo = dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo());
cPhs_State phase = cPhs_COMPLEATE_e;
if (m_arcname[mStageNo] != NULL) {
phase = dComIfG_resLoad(&mPhase, m_arcname[mStageNo]);
if (phase == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x5000)) {
return cPhs_ERROR_e;
}
}
}
if (phase == cPhs_COMPLEATE_e) {
if (CreateInit() == cPhs_ERROR_e) {
return cPhs_ERROR_e;
}
u32 seNum = JA_SE_OBJ_BOSS_WARP_LV;
if (mStageNo == dSv_save_c::STAGE_TOTG) {
seNum = JA_SE_OBJ_WARP_EFF_SUS;
} else if ((mStageNo == dSv_save_c::STAGE_ET) || (mStageNo == dSv_save_c::STAGE_WT)) {
seNum = JA_SE_OBJ_BOSS_TF_WARP_SUS;
}
m2E8 = (dLevelSe_c*)fopKyM_fastCreate(PROC_LEVEL_SE, seNum, &current.pos, NULL, NULL);
if (m2E8 != NULL) {
m2E8->seStop();
m2E8->setReverb(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
}
}
return phase;
}
/* 00000E74-00000ED0 .text _execute__9daWarpf_cFv */
bool daWarpf_c::_execute() {
m2E4++;
checkOrder();
demo_proc();
set_se();
eventOrder();
anim_play();
return true;
}
/* 00000ED0-00000F2C .text eventOrder__9daWarpf_cFv */
void daWarpf_c::eventOrder() {
if (m2D0 == 1) {
fopAcM_orderOtherEventId(this, m2D6);
eventInfo.onCondition(dEvtCnd_UNK2_e);
}
}
/* 00000F2C-00000FF0 .text checkOrder__9daWarpf_cFv */
void daWarpf_c::checkOrder() {
if (eventInfo.checkCommandDemoAccrpt()) {
if (dComIfGp_evmng_startCheck(m2D6) && m2D0 != 0) {
m2D0 = 0;
}
if (dComIfGp_evmng_endCheck(m2D6)) {
dComIfGp_event_reset();
fopAcM_delete(this);
}
} else if (m2D0 == 0) {
if (check_warp_event()) {
m2D0 = 1;
}
set_effect();
}
}
static daWarpf_c::InitFunc event_init_tbl[] = {
&daWarpf_c::initWait,
&daWarpf_c::initWarpStart,
&daWarpf_c::initWarpMode_1,
&daWarpf_c::initWarpMode_2,
&daWarpf_c::initWarpMode_3,
&daWarpf_c::initEndWait,
};
static daWarpf_c::ActionFunc event_action_tbl[] = {
&daWarpf_c::actWait,
&daWarpf_c::actWarpStart,
&daWarpf_c::actWarpMode_1,
&daWarpf_c::actWarpMode_2,
&daWarpf_c::actWarpMode_3,
&daWarpf_c::actEndWait,
};
/* 00000FF0-0000110C .text demo_proc__9daWarpf_cFv */
void daWarpf_c::demo_proc() {
mStaffID = dComIfGp_evmng_getMyStaffId("Warpf");
if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk() && mStaffID != -1) {
static char* action_table[] = {
"WAIT",
"WARP_START",
"WARP_1",
"WARP_2",
"WARP_3",
"END_WAIT",
};
s32 actIdx = dComIfGp_evmng_getMyActIdx(mStaffID, action_table, ARRAY_SIZE(action_table), 0, 0);
if (actIdx == -1) {
dComIfGp_evmng_cutEnd(mStaffID);
} else {
if (dComIfGp_evmng_getIsAddvance(mStaffID)) {
(this->*event_init_tbl[actIdx])(mStaffID);
}
BOOL ret = (this->*event_action_tbl[actIdx])(mStaffID);
if (ret) {
dComIfGp_evmng_cutEnd(mStaffID);
}
}
}
}
/* 0000110C-000011E8 .text initWait__9daWarpf_cFi */
void daWarpf_c::initWait(int) {
if (m294 != NULL) {
m294->becomeInvalidEmitter();
m294 = NULL;
}
if (m298 != NULL) {
m298->becomeInvalidEmitter();
m298 = NULL;
}
if (m29C != NULL) {
m29C->becomeInvalidEmitter();
m29C = NULL;
}
cXyz local_18 = current.pos;
local_18.y += 1000.0f;
local_18.y = dBgS_ObjGndChk_Func(local_18);
dComIfGp_evmng_setGoal(&local_18);
}
/* 000011E8-00001224 .text actWait__9daWarpf_cFi */
BOOL daWarpf_c::actWait(int) {
if (m2E4 % 10 == 0) {
set_effect_wind00();
}
return TRUE;
}
/* 00001224-0000124C .text initWarpStart__9daWarpf_cFi */
void daWarpf_c::initWarpStart(int) {
daPy_py_c* player = daPy_getPlayerActorClass();
m2EC = player->current.pos;
}
/* 0000124C-00001254 .text actWarpStart__9daWarpf_cFi */
BOOL daWarpf_c::actWarpStart(int) {
return TRUE;
}
/* 00001254-00001260 .text initWarpMode_1__9daWarpf_cFi */
void daWarpf_c::initWarpMode_1(int) {
mWarpTimer = 180;
}
/* 00001260-00001384 .text actWarpMode_1__9daWarpf_cFi */
BOOL daWarpf_c::actWarpMode_1(int) {
if (cLib_calcTimer(&mWarpTimer) == 0) {
if (mStageNo != dSv_save_c::STAGE_TOTG && mStageNo != dSv_save_c::STAGE_ET && mStageNo != dSv_save_c::STAGE_WT) {
cXyz local_18 = current.pos;
csXyz local_20 = get_angle_wind01();
local_18.y = m2EC.y + 100.0f;
dComIfGp_particle_set(dPa_name::ID_AK_SN_BOSSWARPWIND01_820B, &local_18, &local_20);
}
return TRUE;
}
if (mWarpTimer == 80) {
for (s32 i = 0; i < 6; i++) {
set_effect_wind00();
}
}
set_effect();
return FALSE;
}
/* 00001384-00001390 .text initWarpMode_2__9daWarpf_cFi */
void daWarpf_c::initWarpMode_2(int) {
mWarpTimer = 5;
}
/* 00001390-0000148C .text actWarpMode_2__9daWarpf_cFi */
BOOL daWarpf_c::actWarpMode_2(int) {
if (cLib_calcTimer(&mWarpTimer) == 0) {
if (mStageNo != dSv_save_c::STAGE_TOTG && mStageNo != dSv_save_c::STAGE_ET && mStageNo != dSv_save_c::STAGE_WT) {
cXyz local_18 = current.pos;
csXyz local_20 = get_angle_wind01();
local_18.y = m2EC.y + 120.0f;
local_20.z += 0x38E;
dComIfGp_particle_set(dPa_name::ID_AK_SN_BOSSWARPWIND01_820B, &local_18, &local_20);
}
return TRUE;
}
return FALSE;
}
/* 0000148C-00001498 .text initWarpMode_3__9daWarpf_cFi */
void daWarpf_c::initWarpMode_3(int) {
mWarpTimer = 5;
}
/* 00001498-000015E8 .text actWarpMode_3__9daWarpf_cFi */
BOOL daWarpf_c::actWarpMode_3(int) {
if (cLib_calcTimer(&mWarpTimer) == 0) {
if (mStageNo != dSv_save_c::STAGE_TOTG && mStageNo != dSv_save_c::STAGE_ET && mStageNo != dSv_save_c::STAGE_WT) {
cXyz local_18 = current.pos;
csXyz local_20 = get_angle_wind01();
local_18.y = m2EC.y + 140.0f;
local_20.y += 0x71C;
dComIfGp_particle_set(dPa_name::ID_AK_SN_BOSSWARPWIND01_820B, &local_18, &local_20);
}
mDoAud_seStart(JA_SE_LK_BOSS_WARP_EFF_ST, NULL, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
onEndDemo();
return TRUE;
}
return FALSE;
}
/* 000015E8-000015EC .text initEndWait__9daWarpf_cFi */
void daWarpf_c::initEndWait(int) {
}
/* 000015EC-000015F4 .text actEndWait__9daWarpf_cFi */
BOOL daWarpf_c::actEndWait(int) {
return TRUE;
}
/* 000015F4-0000171C .text check_warp_event__9daWarpf_cFv */
BOOL daWarpf_c::check_warp_event() {
daPy_py_c* player = daPy_getPlayerActorClass();
f32 abs = (player->current.pos - current.pos).absXZ();
if (player->checkPlayerFly()) {
return FALSE;
}
return abs < get_distance();
}
/* 0000171C-00001788 .text get_distance__9daWarpf_cFv */
f32 daWarpf_c::get_distance() {
if ((mStageNo == dSv_save_c::STAGE_ET || mStageNo == dSv_save_c::STAGE_WT) && checkEndDemo()) {
return 190.0f;
}
return m_warp_size[mStageNo];
}
/* 00001788-00001808 .text get_earth_pos__9daWarpf_cFv */
f32 daWarpf_c::get_earth_pos() {
static const f32 l_earth_pos[] = {
/* STAGE_SEA */ 0.0f,
/* STAGE_SEA2 */ 0.0f,
/* STAGE_FF */ 0.0f,
/* STAGE_DRC */ -100.0f,
/* STAGE_FW */ 100.0f,
/* STAGE_TOTG */ 0.0f,
/* STAGE_ET */ 0.0f,
/* STAGE_WT */ 300.0f,
/* STAGE_GT */ 0.0f,
/* STAGE_HYRULE */ 0.0f,
/* STAGE_SHIP */ 0.0f,
/* STAGE_MISC */ 0.0f,
/* STAGE_SUBDUNGEON */ 0.0f,
/* STAGE_SUBDUNGEON_NEW */ 0.0f,
/* STAGE_BLUE_CHU_JELLY */ 0.0f,
/* STAGE_TEST */ 0.0f,
};
static const f32 l_earth_pos_2nd[] = {
/* STAGE_SEA */ 0.0f,
/* STAGE_SEA2 */ 0.0f,
/* STAGE_FF */ 0.0f,
/* STAGE_DRC */ -100.0f,
/* STAGE_FW */ 0.0f,
/* STAGE_TOTG */ 0.0f,
/* STAGE_ET */ 0.0f,
/* STAGE_WT */ 300.0f,
/* STAGE_GT */ 0.0f,
/* STAGE_HYRULE */ 0.0f,
/* STAGE_SHIP */ 0.0f,
/* STAGE_MISC */ 0.0f,
/* STAGE_SUBDUNGEON */ 0.0f,
/* STAGE_SUBDUNGEON_NEW */ 0.0f,
/* STAGE_BLUE_CHU_JELLY */ 0.0f,
/* STAGE_TEST */ 0.0f,
};
#if VERSION == VERSION_DEMO
f32 earthPos;
if (!checkEndDemo()) {
earthPos = l_earth_pos[mStageNo];
} else {
earthPos = l_earth_pos_2nd[mStageNo];
}
return earthPos;
#else
if (!checkEndDemo()) {
f32 earthPos = l_earth_pos[mStageNo];
if (mStageNo == dSv_save_c::STAGE_FW && daWarpf_prm::getSetType(this)) {
earthPos = 0.0f;
}
return earthPos;
}
return l_earth_pos_2nd[mStageNo];
#endif
}
/* 00001808-00001C44 .text set_effect__9daWarpf_cFv */
void daWarpf_c::set_effect() {
daPy_py_c* player = daPy_getPlayerActorClass();
f32 twok = 2000.0f;
f32 twenty = 20.0f;
f32 three = 3.0f;
s32 iVar2 = twenty;
f32 abs = (player->current.pos - current.pos).absXZ();
if (abs < twok && abs > get_distance()) {
f32 tmp = abs - get_distance();
if (twenty != three) {
iVar2 = tmp / twok * (twenty - three) + three;
}
}
switch (mStageNo) {
case dSv_save_c::STAGE_TOTG:
if (m290 == NULL) {
if (daWarpf_prm::getSetType(this) == 0) {
dComIfGp_particle_set(dPa_name::ID_AK_SN_BSTWARP00, &current.pos);
dComIfGp_particle_set(dPa_name::ID_AK_SN_BSTWARP01, &current.pos);
dComIfGp_particle_set(dPa_name::ID_AK_SN_BSTWARP02, &current.pos);
}
m290 = dComIfGp_particle_set(dPa_name::ID_AK_SN_BSTWARP03, &current.pos);
}
break;
case dSv_save_c::STAGE_ET:
case dSv_save_c::STAGE_WT:
if (m298 == NULL) {
if (!checkEndDemo()) {
if (daWarpf_prm::getSetType(this) && m2B8 != NULL) {
m2B8->setPlaySpeed(1.0f);
}
m298 = dComIfGp_particle_set(dPa_name::ID_IT_SN_SHINDENTF_LIGHT00, &current.pos, &current.angle);
m29C = dComIfGp_particle_set(dPa_name::ID_IT_SN_SHINDENTF_STAR00, &current.pos, &current.angle);
} else if (m29C == NULL) {
m29C = dComIfGp_particle_set(dPa_name::ID_IT_SN_DEMO29_STAR00, &current.pos, &current.angle);
}
}
break;
default:
if (m2E4 % iVar2 == 0) {
set_effect_wind00();
}
if (m294 == NULL) {
m294 = dComIfGp_particle_set(dPa_name::ID_AK_SN_BOSSWARPKIRAKIRA00_820C, &current.pos);
}
break;
}
}
/* 00001C44-00001D0C .text set_effect_wind00__9daWarpf_cFv */
void daWarpf_c::set_effect_wind00() {
if (mStageNo == dSv_save_c::STAGE_TOTG || mStageNo == dSv_save_c::STAGE_WT || mStageNo == dSv_save_c::STAGE_ET) {
return;
}
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_AK_SN_BOSSWARPWIND00_820A, &current.pos);
if (emitter != NULL) {
emitter->setMaxFrame(1);
emitter->setGlobalAlpha(cM_rndF(127.9f) + 128.0f);
}
}
/* 00001D0C-00001D88 .text get_angle_wind01__9daWarpf_cFv */
csXyz daWarpf_c::get_angle_wind01() {
csXyz ret = current.angle;
ret.x = dCam_getAngleX(dComIfGp_getCamera(0));
ret.y = dCam_getAngleY(dComIfGp_getCamera(0)) + 0x8000;
ret.z = 0;
return ret;
}
/* 00001D88-00001E44 .text anim_play__9daWarpf_cFv */
void daWarpf_c::anim_play() {
if (mStageNo == dSv_save_c::STAGE_TOTG) {
if (m2AC != NULL) {
m2AC->play();
}
if (m2B0 != NULL) {
m2B0->play();
}
if (m2B0 != NULL) {
m2B4->play();
}
} else if (mStageNo == dSv_save_c::STAGE_ET || mStageNo == dSv_save_c::STAGE_WT) {
if (m2AC != NULL) {
m2AC->play();
}
if (m2B8 != NULL) {
if (m2E4 >= 120) {
m2B8->setPlaySpeed(1.0f);
}
m2B8->play();
}
}
}
/* 00001E44-00001F78 .text setEndAnim__9daWarpf_cFv */
void daWarpf_c::setEndAnim() {
switch (mStageNo) {
case dSv_save_c::STAGE_TOTG:
if (m2AC != NULL) {
m2AC->setFrame(m2AC->getEndFrame());
}
if (this->m2B0 != NULL) {
m2B0->setFrame(m2B0->getEndFrame());
}
if (this->m2B4 != NULL) {
m2B4->setFrame(m2B4->getEndFrame());
}
break;
case dSv_save_c::STAGE_ET:
case dSv_save_c::STAGE_WT:
if (!checkEndDemo() && m2AC != NULL) {
m2AC->setFrame(m2AC->getEndFrame());
}
break;
}
}
/* 00001F78-000020EC .text set_se__9daWarpf_cFv */
void daWarpf_c::set_se() {
m2E0++;
if (m2E0 > 20000) {
m2E0 = 20000;
}
switch (m2D8) {
case 0:
if (daWarpf_prm::getSetType(this) == 0) {
if (mStageNo == dSv_save_c::STAGE_TOTG) {
fopAcM_seStart(this, JA_SE_CM_BST_WARP_BEAM, 0);
} else {
#if VERSION > VERSION_DEMO
if (mStageNo != dSv_save_c::STAGE_WT && mStageNo != dSv_save_c::STAGE_ET)
#endif
{
fopAcM_seStart(this, JA_SE_OBJ_BOSS_WARP_APPEAR, 0);
}
}
}
m2D8 = 1;
break;
case 1:
break;
}
if (mStageNo == dSv_save_c::STAGE_TOTG) {
if (m2E0 >= 45 && m2E8 != NULL) {
m2E8->seStart();
}
} else if (m2E8 != NULL) {
m2E8->seStart();
}
}
/* 000020EC-0000219C .text set_mtx__9daWarpf_cFv */
void daWarpf_c::set_mtx() {
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
if (m2A8 != NULL) {
m2A8->setBaseScale(scale);
m2A8->setBaseTRMtx(mDoMtx_stack_c::get());
}
if (m2C0 != NULL) {
m2C0->setBaseScale(scale);
m2C0->setBaseTRMtx(mDoMtx_stack_c::get());
}
}
/* 0000219C-00002340 .text _draw__9daWarpf_cFv */
bool daWarpf_c::_draw() {
switch (mStageNo) {
case dSv_save_c::STAGE_TOTG:
set_mtx();
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(m2A8, &tevStr);
if (m2AC != NULL) {
m2AC->entry(m2A8->getModelData());
}
if (m2B0 != NULL) {
m2B0->entry(m2A8->getModelData());
}
if (m2B4 != NULL) {
m2B4->entry(m2A8->getModelData());
}
mDoExt_modelUpdateDL(m2A8);
break;
case dSv_save_c::STAGE_ET:
case dSv_save_c::STAGE_WT:
set_mtx();
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
if (m2A8 != NULL) {
g_env_light.setLightTevColorType(m2A8, &tevStr);
if (m2AC != NULL) {
m2AC->entry(m2A8->getModelData());
}
if (m2B8 != NULL && m2B8->getPlaySpeed() > 0.0f && m2B8 != NULL) {
m2B8->entry(m2A8->getModelData());
}
mDoExt_modelUpdateDL(m2A8);
}
if (m2C0 != NULL) {
g_env_light.setLightTevColorType(m2C0, &tevStr);
mDoExt_modelUpdateDL(m2C0);
}
break;
}
return true;
}
/* 00002340-00002360 .text daWarpf_Create__FPv */
static cPhs_State daWarpf_Create(void* i_this) {
return ((daWarpf_c*)i_this)->_create();
}
/* 00002360-00002384 .text daWarpf_Delete__FPv */
static BOOL daWarpf_Delete(void* i_this) {
return ((daWarpf_c*)i_this)->_delete();
}
/* 00002384-000023A8 .text daWarpf_Draw__FPv */
static BOOL daWarpf_Draw(void* i_this) {
return ((daWarpf_c*)i_this)->_draw();
}
/* 000023A8-000023CC .text daWarpf_Execute__FPv */
static BOOL daWarpf_Execute(void* i_this) {
return ((daWarpf_c*)i_this)->_execute();
}
/* 000023CC-000023D4 .text daWarpf_IsDelete__FPv */
static BOOL daWarpf_IsDelete(void*) {
return TRUE;
}
static actor_method_class daWarpfMethodTable = {
(process_method_func)daWarpf_Create,
(process_method_func)daWarpf_Delete,
(process_method_func)daWarpf_Execute,
(process_method_func)daWarpf_IsDelete,
(process_method_func)daWarpf_Draw,
};
actor_process_profile_definition g_profile_WARPFLOWER = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 0x0003,
/* ListPrio */ fpcPi_CURRENT_e,
/* ProcName */ PROC_WARPFLOWER,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daWarpf_c),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ PRIO_WARPFLOWER,
/* Actor SubMtd */ &daWarpfMethodTable,
/* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLBOX_0_e,
};