diff --git a/include/d/actor/d_a_obj_gtaki.h b/include/d/actor/d_a_obj_gtaki.h index 67a38f08a..d658b3409 100644 --- a/include/d/actor/d_a_obj_gtaki.h +++ b/include/d/actor/d_a_obj_gtaki.h @@ -1,7 +1,10 @@ #ifndef D_A_OBJ_GTAKI_H #define D_A_OBJ_GTAKI_H +#include "d/d_bg_w.h" +#include "d/d_cc_d.h" #include "f_op/f_op_actor.h" +#include "m_Do/m_Do_ext.h" class daObjGtaki_c : public fopAc_ac_c { public: @@ -12,12 +15,19 @@ class daObjGtaki_c : public fopAc_ac_c { void set_effect() {} void setDummyTexture(); - void CreateHeap(); - void CreateInit(); + BOOL CreateHeap(); + bool CreateInit(); void set_mtx(); public: - /* Place member variables here */ -}; + /* 0x290 */ request_of_phase_process_class mPhase; + /* 0x298 */ J3DModel* mpModel; + /* 0x29C */ mDoExt_btkAnm mBtkAnm; + /* 0x2B0 */ dCcD_Stts mStts; + /* 0x2EC */ dCcD_Cyl mCyl; + /* 0x41C */ dBgW* mpBgW; + /* 0x420 */ Mtx mMtx; + /* 0x450 */ dKy_tevstr_c mTevStr; +}; // Size: 0x500 #endif /* D_A_OBJ_GTAKI_H */ diff --git a/src/d/actor/d_a_obj_gtaki.cpp b/src/d/actor/d_a_obj_gtaki.cpp index b891d252f..f60963a84 100644 --- a/src/d/actor/d_a_obj_gtaki.cpp +++ b/src/d/actor/d_a_obj_gtaki.cpp @@ -8,6 +8,8 @@ #include "d/d_procname.h" #include "d/d_priority.h" #include "d/d_cc_d.h" +#include "d/res/res_gtaki.h" +#include "m_Do/m_Do_graphic.h" static dCcD_SrcCyl l_cyl_src = { // dCcD_SrcGObjInf @@ -41,28 +43,89 @@ static dCcD_SrcCyl l_cyl_src = { /* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* i_actor) { + return ((daObjGtaki_c*)i_actor)->CreateHeap(); } /* 00000098-00000280 .text setDummyTexture__12daObjGtaki_cFv */ void daObjGtaki_c::setDummyTexture() { - /* Nonmatching */ + J3DModelData* modeldata = mpModel->getModelData(); + J3DTexture* texture = modeldata->getTexture(); + JUTNameTab* textureName = modeldata->getTextureName(); + JUT_ASSERT(0xb4, texture != NULL); + JUT_ASSERT(0xb5, textureName != NULL); + + for (u16 i = 0; igetNum(); i++) { + if(!strcmp(textureName->getName(i), "B_dummy")){ + texture->setResTIMG(i,*mDoGph_gInf_c::getFrameBufferTimg()); + } + } + mDoExt_modelTexturePatch(modeldata); } /* 00000280-00000484 .text CreateHeap__12daObjGtaki_cFv */ -void daObjGtaki_c::CreateHeap() { - /* Nonmatching */ +BOOL daObjGtaki_c::CreateHeap() { + J3DModelData* modelData; + J3DAnmTextureSRTKey* btk; + + modelData = (J3DModelData*)dComIfG_getObjectRes("Gtaki", GTAKI_BDL_GTAKI); + JUT_ASSERT(0x10b, modelData != NULL); + mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if(mpModel == NULL) return FALSE; + + btk = static_cast(dComIfG_getObjectRes("Gtaki", GTAKI_BTK_GTAKI)); + JUT_ASSERT(0x115, btk != NULL); + mBtkAnm.init(modelData, btk, true, J3DFrameCtrl::EMode_LOOP, 1.0, 0, -1, false, 0); + setDummyTexture(); + + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::scaleM(scale); + MTXCopy(mDoMtx_stack_c::get(), mMtx); + + mpBgW = new dBgW(); + + if(!mpBgW || mpBgW->Set(static_cast(dComIfG_getObjectRes("Gtaki", GTAKI_DZB_ITAKI)), cBgW::MOVE_BG_e, &mMtx)){ + return FALSE; + } + + return TRUE; } /* 00000484-00000604 .text CreateInit__12daObjGtaki_cFv */ -void daObjGtaki_c::CreateInit() { +bool daObjGtaki_c::CreateInit() { /* Nonmatching */ + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox(this, -600.0f, -0.0f, -600.0f,600.0f,10000.0f,600.0f); + fopAcM_setCullSizeFar(this, 1.0f); + mStts.Init(0xff, 0xff, this); + + mCyl.Set(l_cyl_src); + mCyl.SetR(scale.x * 70.0f); + mCyl.SetStts(&mStts); + + dKy_tevstr_init(&mTevStr, home.roomNo, 0xff); + g_env_light.settingTevStruct(TEV_TYPE_BG1, ¤t.pos, &mTevStr); + + JPABaseEmitter* emitter = dComIfGp_particle_setP1(dPa_name::ID_AK_SN_GANONFALLSSPLASH00, ¤t.pos, NULL, NULL, 0xff, NULL, -1, NULL, NULL, NULL); + if(emitter != NULL){ + JGeometry::TVec3 gd_scale (scale.x, scale.y, scale.z); + emitter->setGlobalDynamicsScale(gd_scale); + + JGeometry::TVec3 gp_scale(scale.x, scale.x, scale.x); + emitter->setGlobalParticleScale(gp_scale); + emitter->setGlobalPrmColor(mTevStr.mColorC0.r, mTevStr.mColorC0.g, mTevStr.mColorC0.b); + } + set_mtx(); + return dComIfG_Bgsp()->Regist(mpBgW, this); } /* 00000604-00000684 .text set_mtx__12daObjGtaki_cFv */ void daObjGtaki_c::set_mtx() { - /* Nonmatching */ + mpModel->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(current.angle.y); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000684-000006A4 .text daObjGtaki_Create__FPv */ @@ -72,22 +135,62 @@ static cPhs_State daObjGtaki_Create(void* i_this) { /* 000006A4-0000087C .text _create__12daObjGtaki_cFv */ cPhs_State daObjGtaki_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daObjGtaki_c); + cPhs_State state = dComIfG_resLoad(&mPhase, "Gtaki"); + if(state == cPhs_COMPLEATE_e){ + if(!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x3450)){ + state = cPhs_ERROR_e; + return state; + } + else CreateInit(); + } + return state; +} + +bool daObjGtaki_c::_delete(){ + if(heap != NULL){ + dComIfG_Bgsp()->Release(mpBgW); + } + dComIfG_resDelete(&mPhase, "Gtaki"); + return true; } /* 00000AD8-00000B38 .text daObjGtaki_Delete__FPv */ -static BOOL daObjGtaki_Delete(void*) { - /* Nonmatching */ +static BOOL daObjGtaki_Delete(void* i_this) { + return ((daObjGtaki_c*)i_this)->_delete(); +} + +bool daObjGtaki_c::_draw(){ + g_env_light.settingTevStruct(TEV_TYPE_BG3, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(mpModel, &tevStr); + + dComIfGd_setListInvisisble(); + + mBtkAnm.entry(mpModel->getModelData()); + mDoExt_modelUpdateDL(mpModel); + mBtkAnm.remove(mpModel->getModelData()); + + dComIfGd_setList(); + + return true; } /* 00000B38-00000C08 .text daObjGtaki_Draw__FPv */ -static BOOL daObjGtaki_Draw(void*) { - /* Nonmatching */ +static BOOL daObjGtaki_Draw(void* i_this) { + return ((daObjGtaki_c*)i_this)->_draw(); +} + +bool daObjGtaki_c::_execute(){ + mCyl.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCyl); + mBtkAnm.play(); + set_mtx(); + return true; } /* 00000C08-00000C64 .text daObjGtaki_Execute__FPv */ -static BOOL daObjGtaki_Execute(void*) { - /* Nonmatching */ +static BOOL daObjGtaki_Execute(void* i_this) { + return ((daObjGtaki_c*)i_this)->_execute(); } /* 00000C64-00000C6C .text daObjGtaki_IsDelete__FPv */