mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-18 13:13:29 -04:00
894 lines
27 KiB
C++
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, ¤t.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, ¤t.pos);
|
|
dComIfGp_particle_set(dPa_name::ID_AK_SN_BSTWARP01, ¤t.pos);
|
|
dComIfGp_particle_set(dPa_name::ID_AK_SN_BSTWARP02, ¤t.pos);
|
|
}
|
|
m290 = dComIfGp_particle_set(dPa_name::ID_AK_SN_BSTWARP03, ¤t.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, ¤t.pos, ¤t.angle);
|
|
m29C = dComIfGp_particle_set(dPa_name::ID_IT_SN_SHINDENTF_STAR00, ¤t.pos, ¤t.angle);
|
|
} else if (m29C == NULL) {
|
|
m29C = dComIfGp_particle_set(dPa_name::ID_IT_SN_DEMO29_STAR00, ¤t.pos, ¤t.angle);
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (m2E4 % iVar2 == 0) {
|
|
set_effect_wind00();
|
|
}
|
|
|
|
if (m294 == NULL) {
|
|
m294 = dComIfGp_particle_set(dPa_name::ID_AK_SN_BOSSWARPKIRAKIRA00_820C, ¤t.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, ¤t.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, ¤t.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, ¤t.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,
|
|
};
|