summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_zouK.cpp
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2023-11-29 00:12:46 -0800
committerJasper St. Pierre <jstpierre@mecheye.net>2023-11-29 00:12:56 -0800
commit401000a83ce5664b67a8bce33ebbf94e550f20b9 (patch)
treef68727080ffa84f49d8c836f880cd93be525f013 /src/d/actor/d_a_obj_zouK.cpp
parentaa229ec23ec916dce1ceeaf21ae701421d108134 (diff)
d_a_obj_zouK almost
Diffstat (limited to 'src/d/actor/d_a_obj_zouK.cpp')
-rw-r--r--src/d/actor/d_a_obj_zouK.cpp342
1 files changed, 324 insertions, 18 deletions
diff --git a/src/d/actor/d_a_obj_zouK.cpp b/src/d/actor/d_a_obj_zouK.cpp
index 27f13d22..ba66021c 100644
--- a/src/d/actor/d_a_obj_zouK.cpp
+++ b/src/d/actor/d_a_obj_zouK.cpp
@@ -4,59 +4,365 @@
//
#include "d/actor/d_a_obj_zouK.h"
-#include "dolphin/types.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/JKernel/JKRHeap.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_ALL & ~(AT_TYPE_LIGHT | AT_TYPE_UNK400000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK20000 | AT_TYPE_WATER),
+ /* SrcObjTg SPrm */ 0x0F,
+ /* SrcObjCo SPrm */ 0x79,
+ /* SrcGObjAt Se */ 0,
+ /* SrcGObjAt HitMark */ 0,
+ /* SrcGObjAt Spl */ 0,
+ /* SrcGObjAt Mtrl */ 0,
+ /* SrcGObjAt GFlag */ 0,
+ /* SrcGObjTg Se */ 0,
+ /* SrcGObjTg HitMark */ 0,
+ /* SrcGObjTg Spl */ 0,
+ /* SrcGObjTg Mtrl */ 0,
+ /* SrcGObjTg GFlag */ 0x03,
+ /* SrcGObjCo GFlag */ 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 */
-void daObjZouk::Act_c::solidHeapCB(fopAc_ac_c*) {
- /* Nonmatching */
+BOOL daObjZouk::Act_c::solidHeapCB(fopAc_ac_c* i_this) {
+ return ((Act_c*)i_this)->create_heap();
}
/* 0000009C-00000468 .text create_heap__Q29daObjZouk5Act_cFv */
-void daObjZouk::Act_c::create_heap() {
- /* Nonmatching */
+bool daObjZouk::Act_c::create_heap() {
+ J3DModelData* mdl_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, 0x08);
+ JUT_ASSERT(0x171, mdl_data != 0);
+ M_bck_data = (J3DAnmTransformKey*)dComIfG_getObjectRes(M_arcname, 0x05);
+ 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, 0, 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, 0x0B);
+ 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, 0x0C);
+ 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() {
- /* Nonmatching */
+ 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() {
- /* Nonmatching */
+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() {
- /* Nonmatching */
+ cXyz trans(0.0f, 0.0f, 0.0f);
+ mDoMtx_stack_c::transS(trans);
+ mDoMtx_copy(mDoMtx_stack_c::get(), mBgMtx);
+ M_anm->getModel()->setBaseScale(mScale);
+ 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() {
- /* Nonmatching */
}
/* 00001240-00001270 .text play_stop_joint_anime__Q29daObjZouk5Act_cFv */
void daObjZouk::Act_c::play_stop_joint_anime() {
- /* Nonmatching */
+ M_anm->play(NULL, NULL, NULL);
}
/* 00001270-000012F0 .text jokai_demo__Q29daObjZouk5Act_cFv */
-void daObjZouk::Act_c::jokai_demo() {
- /* Nonmatching */
+BOOL daObjZouk::Act_c::jokai_demo() {
+ if (dComIfGp_demo_getActor(mDemoActorId) != 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() {
+bool daObjZouk::Act_c::_execute() {
/* Nonmatching */
+ set_mtx();
+ texture_scroll();
+ fopAcM_rollPlayerCrash(this, 288.0f, 0x0D);
+ if (!jokai_demo())
+ play_stop_joint_anime();
+ if (param_get_arg0() == 0) {
+ dBgS* bgsp = dComIfG_Bgsp();
+ if (dComIfGp_event_runCheck()) {
+ if (mBgBefore != NULL && mBgAfter != NULL) {
+ if (mBgAfter->ChkUsed())
+ bgsp->Release(mBgAfter);
+ if (!mBgBefore->ChkUsed()) {
+ 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())
+ bgsp->Release(mBgBefore);
+ 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() {
- /* Nonmatching */
+bool daObjZouk::Act_c::_draw() {
+ g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &mTevStr);
+ dComIfGd_setListBG();
+ g_env_light.setLightTevColorType(M_anm->getModel(), &mTevStr);
+ setEffectMtx(&mEyePos, 0.5f);
+ M_anm->updateDL();
+ dComIfGd_setList();
+ dComIfGd_setSimpleShadow2(&current.pos, mGndY, 388.0f, mGndChk, shape_angle.y, 1.0f, dDlst_shadowControl_c::getSimpleTex());
+ return true;
}
+camera_class * dCam_getCamera();
+
/* 000015F0-00001804 .text setEffectMtx__Q29daObjZouk5Act_cFPC4cXyzf */
-void daObjZouk::Act_c::setEffectMtx(const cXyz*, float) {
- /* Nonmatching */
+void daObjZouk::Act_c::setEffectMtx(const cXyz* pos, f32 scale) {
+ 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 / scale;
+ camera_class * camera = dCam_getCamera();
+ cXyz lookDir = *pos - camera->mLookat.mEye;
+ cXyz lightDir;
+ cXyz refl;
+
+ dKyr_get_vectle_calc(&mTevStr.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 */ 7,
+ /* ListPrio */ fpcPi_CURRENT_e,
+ /* ProcName */ PROC_Obj_Zouk,
+ /* Proc SubMtd */ &g_fpcLf_Method.mBase,
+ /* Size */ sizeof(daObjZouk::Act_c),
+ /* SizeOther */ 0,
+ /* Parameters */ 0,
+ /* Leaf SubMtd */ &g_fopAc_Method.base,
+ /* Priority */ 0x00FA,
+ /* Actor SubMtd */ &daObjZouk::Mthd_Table,
+ /* Status */ fopAcStts_UNK40000_e | fopAcStts_CULL_e | fopAcStts_NOCULLEXEC_e,
+ /* Group */ fopAc_ACTOR_e,
+ /* CullType */ fopAc_CULLBOX_CUSTOM_e
+};