mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-27 16:12:54 -04:00
373 lines
12 KiB
C++
373 lines
12 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_obj_zouK.cpp
|
|
//
|
|
|
|
#include "d/actor/d_a_obj_zouK.h"
|
|
#include "d/res/res_vzouk.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "f_op/f_op_camera.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_item_data.h"
|
|
#include "d/d_kankyo_rain.h"
|
|
#include "d/d_procname.h"
|
|
#include "m_Do/m_Do_mtx.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
|
|
namespace daObjZouk {
|
|
namespace {
|
|
static const Attr_c L_attr = {
|
|
288.0f, 1200.0f, 530.0f,
|
|
418.0f, 0.0f, 500.0f,
|
|
26.0f, 235.0f, 1323.0f,
|
|
0.0f, 1003.0f, 305.0f,
|
|
};
|
|
|
|
inline const Attr_c & attr() { return L_attr; }
|
|
}
|
|
|
|
static const dCcD_SrcCyl M_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ ~(AT_TYPE_LIGHT | AT_TYPE_UNK400000 | AT_TYPE_WIND | AT_TYPE_UNK20000 | AT_TYPE_WATER),
|
|
/* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_GRP,
|
|
/* SrcObjCo SPrm */ CO_SPRM_SET | CO_SPRM_IS_UNK8 | CO_SPRM_VSGRP,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ G_TG_SPRM_SHIELD | G_TG_SPRM_NO_CON_HIT,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 100.0f,
|
|
/* Height */ 200.0f,
|
|
},
|
|
};
|
|
}
|
|
|
|
const char daObjZouk::Act_c::M_arcname[6] = "VzouK";
|
|
|
|
/* 00000078-0000009C .text solidHeapCB__Q29daObjZouk5Act_cFP10fopAc_ac_c */
|
|
BOOL daObjZouk::Act_c::solidHeapCB(fopAc_ac_c* i_this) {
|
|
return ((Act_c*)i_this)->create_heap();
|
|
}
|
|
|
|
/* 0000009C-00000468 .text create_heap__Q29daObjZouk5Act_cFv */
|
|
bool daObjZouk::Act_c::create_heap() {
|
|
J3DModelData* mdl_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, VZOUK_INDEX_BDL_VZOUK);
|
|
JUT_ASSERT(0x171, mdl_data != 0);
|
|
M_bck_data = (J3DAnmTransformKey*)dComIfG_getObjectRes(M_arcname, VZOUK_INDEX_BCK_VZOUK);
|
|
JUT_ASSERT(0x175, M_bck_data != 0);
|
|
if (mdl_data != NULL && M_bck_data != NULL) {
|
|
M_anm = new mDoExt_McaMorf(
|
|
mdl_data,
|
|
NULL, NULL,
|
|
M_bck_data,
|
|
J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, 1,
|
|
NULL,
|
|
0x00000000,
|
|
0x11020203
|
|
);
|
|
}
|
|
JUT_ASSERT(0x183, M_anm != 0);
|
|
if (M_anm != NULL) {
|
|
if (dComIfGs_isCollect(0, 1)) {
|
|
M_anm->setPlaySpeed(0.0f);
|
|
M_anm->setFrame(M_bck_data->getFrameMax() - 1.0f);
|
|
} else {
|
|
M_anm->setPlaySpeed(0.0f);
|
|
M_anm->setFrame(0.0f);
|
|
}
|
|
}
|
|
set_mtx();
|
|
|
|
cBgD_t* bgw_data_before = (cBgD_t*)dComIfG_getObjectRes(M_arcname, VZOUK_INDEX_DZB_MAEKISI);
|
|
JUT_ASSERT(0x196, bgw_data_before != 0);
|
|
if (bgw_data_before != NULL) {
|
|
mBgBefore = new dBgW();
|
|
if (mBgBefore != NULL) {
|
|
if (mBgBefore->Set(bgw_data_before, dBgW::MOVE_BG_e, &mBgMtx) == 1)
|
|
return false;
|
|
}
|
|
}
|
|
|
|
cBgD_t* bgw_data_after = (cBgD_t*)dComIfG_getObjectRes(M_arcname, VZOUK_INDEX_DZB_ATOKISI);
|
|
JUT_ASSERT(0x1a4, bgw_data_after != 0);
|
|
if (bgw_data_after != NULL) {
|
|
mBgAfter = new dBgW();
|
|
if (mBgAfter != NULL) {
|
|
if (mBgAfter->Set(bgw_data_after, dBgW::MOVE_BG_e, &mBgMtx) == 1)
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool ret = false;
|
|
if (mdl_data != NULL && M_bck_data != NULL && M_anm != NULL && mBgBefore != NULL && mBgAfter != NULL)
|
|
ret = true;
|
|
return ret;
|
|
}
|
|
|
|
/* 00000468-00000724 .text _create__Q29daObjZouk5Act_cFv */
|
|
s32 daObjZouk::Act_c::_create() {
|
|
fopAcM_SetupActor(this, Act_c);
|
|
|
|
s32 ret = dComIfG_resLoad(&mPhs, M_arcname);
|
|
|
|
if (ret == cPhs_COMPLEATE_e) {
|
|
if (fopAcM_entrySolidHeap(this, solidHeapCB, 0x0)) {
|
|
fopAcM_SetMtx(this, M_anm->getModel()->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -1000.0f, -0.0f, -1000.0f, 1000.0f, 2800.0f, 1000.0f);
|
|
cXyz gndPos(current.pos.x, current.pos.y + 100.0f, current.pos.z);
|
|
mGndChk.SetPos(&gndPos);
|
|
mGndChk.SetActorPid(fopAcM_GetID(this));
|
|
mGndY = dComIfG_Bgsp()->GroundCross(&mGndChk);
|
|
|
|
mStts0.Init(0xFF, 0xFF, this);
|
|
mCyl0.Set(M_cyl_src);
|
|
mCyl0.SetStts(&mStts0);
|
|
mCyl0.SetTgVec((cXyz&)cXyz::Zero);
|
|
mCyl0.OnTgNoHitMark();
|
|
|
|
mStts1.Init(0xFF, 0xFF, this);
|
|
mCyl1.Set(M_cyl_src);
|
|
mCyl1.SetStts(&mStts1);
|
|
mCyl1.SetTgVec((cXyz&)cXyz::Zero);
|
|
mCyl1.OnTgNoHitMark();
|
|
|
|
mStts2.Init(0xFF, 0xFF, this);
|
|
mCyl2.Set(M_cyl_src);
|
|
mCyl2.SetStts(&mStts2);
|
|
mCyl2.SetTgVec((cXyz&)cXyz::Zero);
|
|
mCyl2.OnTgNoHitMark();
|
|
|
|
field_0x294 = 0;
|
|
field_0x298 = 0;
|
|
|
|
s32 arg0 = param_get_arg0();
|
|
if (arg0 == 0) {
|
|
if (dComIfGs_isCollect(0, 1)) {
|
|
if (mBgAfter != NULL) {
|
|
dComIfG_Bgsp()->Regist(mBgAfter, this);
|
|
mBgAfter->SetCrrFunc(NULL);
|
|
mBgMode = 1;
|
|
}
|
|
} else {
|
|
if (mBgBefore != NULL) {
|
|
dComIfG_Bgsp()->Regist(mBgBefore, this);
|
|
mBgBefore->SetCrrFunc(NULL);
|
|
mBgMode = 0;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
ret = cPhs_ERROR_e;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 00001094-00001164 .text _delete__Q29daObjZouk5Act_cFv */
|
|
bool daObjZouk::Act_c::_delete() {
|
|
if (heap != NULL) {
|
|
if (mBgBefore != NULL && mBgBefore->ChkUsed())
|
|
dComIfG_Bgsp()->Release(mBgBefore);
|
|
if (mBgAfter != NULL && mBgAfter->ChkUsed())
|
|
dComIfG_Bgsp()->Release(mBgAfter);
|
|
}
|
|
dComIfG_resDelete(&mPhs, M_arcname);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001164-0000123C .text set_mtx__Q29daObjZouk5Act_cFv */
|
|
void daObjZouk::Act_c::set_mtx() {
|
|
cXyz trans(0.0f, 0.0f, 0.0f);
|
|
mDoMtx_stack_c::transS(trans);
|
|
mDoMtx_copy(mDoMtx_stack_c::get(), mBgMtx);
|
|
M_anm->getModel()->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
M_anm->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mDoMtx_copy(mDoMtx_stack_c::get(), mMtx);
|
|
}
|
|
|
|
/* 0000123C-00001240 .text texture_scroll__Q29daObjZouk5Act_cFv */
|
|
void daObjZouk::Act_c::texture_scroll() {
|
|
}
|
|
|
|
/* 00001240-00001270 .text play_stop_joint_anime__Q29daObjZouk5Act_cFv */
|
|
void daObjZouk::Act_c::play_stop_joint_anime() {
|
|
M_anm->play(NULL, NULL, NULL);
|
|
}
|
|
|
|
/* 00001270-000012F0 .text jokai_demo__Q29daObjZouk5Act_cFv */
|
|
BOOL daObjZouk::Act_c::jokai_demo() {
|
|
if (dComIfGp_demo_getActor(demoActorID) != NULL) {
|
|
dDemo_setDemoData(this, 0x6a, M_anm, "VzouK", 0, 0, 0, 0);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/* 000012F0-00001510 .text _execute__Q29daObjZouk5Act_cFv */
|
|
bool daObjZouk::Act_c::_execute() {
|
|
set_mtx();
|
|
texture_scroll();
|
|
fopAcM_rollPlayerCrash(this, 288.0f, 0x0D);
|
|
if (!jokai_demo())
|
|
play_stop_joint_anime();
|
|
if (param_get_arg0() == 0) {
|
|
if (dComIfGp_event_runCheck()) {
|
|
if (mBgBefore != NULL && mBgAfter != NULL) {
|
|
if (mBgAfter->ChkUsed())
|
|
dComIfG_Bgsp()->Release(mBgAfter);
|
|
if (!mBgBefore->ChkUsed()) {
|
|
dComIfG_Bgsp()->Regist(mBgBefore, this);
|
|
mBgBefore->SetCrrFunc(NULL);
|
|
mBgMode = 0;
|
|
}
|
|
|
|
if (mBgBefore->ChkUsed())
|
|
mBgBefore->Move();
|
|
}
|
|
} else {
|
|
if (mBgMode == 0 && dComIfGs_isCollect(0, 1) && mBgBefore != NULL && mBgAfter != NULL) {
|
|
if (mBgBefore->ChkUsed())
|
|
dComIfG_Bgsp()->Release(mBgBefore);
|
|
dComIfG_Bgsp()->Regist(mBgAfter, this);
|
|
mBgAfter->SetCrrFunc(NULL);
|
|
mBgMode = 1;
|
|
}
|
|
|
|
if (mBgMode == 0) {
|
|
if (mBgBefore != NULL)
|
|
mBgBefore->Move();
|
|
} else {
|
|
if (mBgAfter != NULL)
|
|
mBgAfter->Move();
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
static void dummy() {
|
|
const f32 floats[] = {
|
|
1200.0f, 500.0f, 26.0f,
|
|
530.0f, 418.0f, 1003.0f,
|
|
305.0f, 235.0f, 1323.0f,
|
|
};
|
|
}
|
|
|
|
/* 00001510-000015F0 .text _draw__Q29daObjZouk5Act_cFv */
|
|
bool daObjZouk::Act_c::_draw() {
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
dComIfGd_setListBG();
|
|
g_env_light.setLightTevColorType(M_anm->getModel(), &tevStr);
|
|
setEffectMtx(&eyePos, 0.5f);
|
|
M_anm->updateDL();
|
|
dComIfGd_setList();
|
|
dComIfGd_setSimpleShadow2(¤t.pos, mGndY, 388.0f, mGndChk, shape_angle.y, 1.0f, dDlst_shadowControl_c::getSimpleTex());
|
|
return true;
|
|
}
|
|
|
|
/* 000015F0-00001804 .text setEffectMtx__Q29daObjZouk5Act_cFPC4cXyzf */
|
|
void daObjZouk::Act_c::setEffectMtx(const cXyz* pos, f32 scaleMag) {
|
|
static Mtx mtx_adj = {
|
|
0.5f, 0.0f, 0.0f, 0.5f,
|
|
0.0f, -0.5f, 0.0f, 0.5f,
|
|
0.0f, 0.0f, 1.0f, 0.0f,
|
|
};
|
|
|
|
f32 inv = 1.0f / scaleMag;
|
|
camera_class * camera = dCam_getCamera();
|
|
cXyz lookDir = *pos - camera->mLookat.mEye;
|
|
cXyz lightDir;
|
|
cXyz refl;
|
|
|
|
dKyr_get_vectle_calc(&tevStr.mLightPosWorld, (cXyz*)pos, &lightDir);
|
|
C_VECHalfAngle(&lookDir, &lightDir, &refl);
|
|
Mtx lookatMtx;
|
|
C_MTXLookAt(lookatMtx, &cXyz::Zero, &cXyz::BaseY, &refl);
|
|
mDoMtx_stack_c::scaleS(inv, inv, 1.0f);
|
|
mDoMtx_stack_c::concat(mtx_adj);
|
|
mDoMtx_stack_c::concat(lookatMtx);
|
|
mDoMtx_stack_c::get()[0][3] = 0.0f;
|
|
mDoMtx_stack_c::get()[1][3] = 0.0f;
|
|
mDoMtx_stack_c::get()[2][3] = 0.0f;
|
|
|
|
J3DModelData* modelData = M_anm->getModel()->getModelData();
|
|
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
|
|
J3DMaterial* mat = modelData->getMaterialNodePointer(i);
|
|
for (u32 j = 0; j < 8; j++) {
|
|
J3DTexMtx* texMtx = mat->getTexMtx(j);
|
|
if (texMtx != NULL && texMtx->getTexMtxInfo().mInfo == 11) {
|
|
texMtx->getTexMtxInfo().setEffectMtx(mDoMtx_stack_c::get());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
namespace daObjZouk {
|
|
namespace {
|
|
s32 Mthd_Create(void* i_this) {
|
|
return ((Act_c*)i_this)->_create();
|
|
}
|
|
|
|
BOOL Mthd_Delete(void* i_this) {
|
|
return ((Act_c*)i_this)->_delete();
|
|
}
|
|
|
|
BOOL Mthd_Execute(void* i_this) {
|
|
return ((Act_c*)i_this)->_execute();
|
|
}
|
|
|
|
BOOL Mthd_Draw(void* i_this) {
|
|
return ((Act_c*)i_this)->_draw();
|
|
}
|
|
|
|
BOOL Mthd_IsDelete(void* i_this) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class Mthd_Table = {
|
|
(process_method_func)daObjZouk::Mthd_Create,
|
|
(process_method_func)daObjZouk::Mthd_Delete,
|
|
(process_method_func)daObjZouk::Mthd_Execute,
|
|
(process_method_func)daObjZouk::Mthd_IsDelete,
|
|
(process_method_func)daObjZouk::Mthd_Draw,
|
|
};
|
|
}
|
|
}
|
|
|
|
actor_process_profile_definition g_profile_Obj_Zouk = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_Obj_Zouk,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daObjZouk::Act_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ 0x00FA,
|
|
/* Actor SubMtd */ &daObjZouk::Mthd_Table,
|
|
/* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|