mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-02 10:10:06 -04:00
322 lines
9.5 KiB
C++
322 lines
9.5 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_fallrock.cpp
|
|
//
|
|
|
|
#include "d/actor/d_a_fallrock.h"
|
|
#include "d/res/res_always.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "f_op/f_op_kankyo_mng.h"
|
|
|
|
|
|
char daFallRock_c::m_arcname[] = "Always";
|
|
f32 daFallRock_c::m_falllen = 7000.0f;
|
|
s16 daFallRock_c::m_rot_speed = 0x3E8;
|
|
|
|
const dCcD_SrcCyl daFallRock_c::m_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ AT_TYPE_UNK8,
|
|
/* SrcObjAt Atp */ 1,
|
|
/* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_GrpAll_e,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsEnemy_e,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e,
|
|
/* SrcGObjAt Spl */ dCcG_At_Spl_UNK0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ 0,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 30.0f,
|
|
/* Height */ 80.0f,
|
|
},
|
|
};
|
|
|
|
|
|
/* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return ((daFallRock_c*) i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 00000098-00000140 .text CreateHeap__12daFallRock_cFv */
|
|
BOOL daFallRock_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(m_arcname, ALWAYS_BDL_KROCK_00);
|
|
JUT_ASSERT(DEMO_SELECT(159, 161), modelData != NULL);
|
|
|
|
mpModel = mDoExt_J3DModel__create(modelData, 0x80000,0x11020002);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000140-000001F0 .text set_mtx__12daFallRock_cFv */
|
|
void daFallRock_c::set_mtx() {
|
|
J3DModel* model = mpModel;
|
|
model->setBaseScale(scale);
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::XYZrotM(shape_angle);
|
|
mDoMtx_stack_c::transM(0.0f, -(scale.x * 120.0f), 0.0f);
|
|
model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
/* 000001F0-000002B0 .text daFallRock_Draw__FP12daFallRock_c */
|
|
static BOOL daFallRock_Draw(daFallRock_c* i_this) {
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &i_this->current.pos, &i_this->tevStr);
|
|
g_env_light.setLightTevColorType(i_this->mpModel, &i_this->tevStr);
|
|
mDoExt_modelUpdate(i_this->mpModel);
|
|
|
|
cXyz shadow_pos(i_this->current.pos);
|
|
|
|
shadow_pos.y = i_this->field_0x29C.GetGroundH() + 100.0f;
|
|
|
|
f32 shadow_scale = i_this->scale.x * 90.0f;
|
|
dComIfGd_setSimpleShadow2(
|
|
&shadow_pos,
|
|
i_this->field_0x29C.GetGroundH(),
|
|
shadow_scale,
|
|
i_this->field_0x29C.m_gnd
|
|
);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000002B0-000002D0 .text daFallRock_Execute__FP12daFallRock_c */
|
|
static BOOL daFallRock_Execute(daFallRock_c* i_this) {
|
|
return ((daFallRock_c*)i_this)->execute();
|
|
}
|
|
|
|
/* 000002D0-00000810 .text execute__12daFallRock_cFv */
|
|
BOOL daFallRock_c::execute() {
|
|
BOOL deleted = FALSE;
|
|
field_0x614++;
|
|
|
|
fopAcM_posMoveF(this, mStts.GetCCMoveP());
|
|
field_0x29C.CrrPos(*dComIfG_Bgsp());
|
|
|
|
field_0x610 = fabs(speed.y) + (f64)field_0x610;
|
|
if (field_0x610 > m_falllen) {
|
|
if (deleted == FALSE) {
|
|
deleted = fopAcM_delete(this);
|
|
}
|
|
}
|
|
|
|
if (field_0x29C.ChkGroundLanding()) {
|
|
setParticle(0, ¤t.pos);
|
|
fopAcM_seStart(this, JA_SE_OBJ_BREAK_ROCK, 0);
|
|
if (deleted == FALSE) {
|
|
deleted = fopAcM_delete(this);
|
|
}
|
|
}
|
|
|
|
if (field_0x29C.ChkWaterIn()) {
|
|
if (scale.x < 1.3f) {
|
|
fopAcM_seStart(this, JA_SE_OBJ_FALL_WATER_M, 0);
|
|
} else {
|
|
fopAcM_seStart(this, JA_SE_OBJ_FALL_WATER_L, 0);
|
|
}
|
|
setParticle(2, ¤t.pos);
|
|
if (!deleted) {
|
|
deleted = fopAcM_delete(this);
|
|
}
|
|
}
|
|
|
|
dBgS_ObjGndChk_Yogan chk;
|
|
|
|
cXyz check_pos;
|
|
check_pos.set(old.pos.x, old.pos.y + scale.x * 120.0f, old.pos.z);
|
|
|
|
chk.SetPos(&check_pos);
|
|
|
|
f32 height = dComIfG_Bgsp()->GroundCross(&chk);
|
|
if (height != -G_CM3D_F_INF) {
|
|
if (height > current.pos.y + scale.x * 120.0f) {
|
|
if (scale.x < 1.3f) {
|
|
fopAcM_seStart(this, JA_SE_OBJ_FALL_MAGMA_M, 0);
|
|
} else {
|
|
fopAcM_seStart(this, JA_SE_OBJ_FALL_MAGMA_L, 0);
|
|
}
|
|
|
|
check_pos.y = height;
|
|
setParticle(1, &check_pos);
|
|
if (!deleted) {
|
|
fopAcM_delete(this);
|
|
}
|
|
}
|
|
}
|
|
cLib_chaseAngleS(&shape_angle.x, shape_angle.x + m_rot_speed, m_rot_speed);
|
|
|
|
set_mtx();
|
|
mCyl.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000E38-00000E40 .text daFallRock_IsDelete__FP12daFallRock_c */
|
|
static BOOL daFallRock_IsDelete(daFallRock_c*) {
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000E40-00000E68 .text daFallRock_Delete__FP12daFallRock_c */
|
|
static BOOL daFallRock_Delete(daFallRock_c* i_this) {
|
|
i_this->~daFallRock_c();
|
|
return TRUE;
|
|
}
|
|
|
|
daFallRock_c::~daFallRock_c() {
|
|
dComIfG_resDeleteDemo(&mPhs, m_arcname);
|
|
}
|
|
|
|
/* 00001030-00001050 .text daFallRock_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daFallRock_Create(fopAc_ac_c* i_this) {
|
|
return ((daFallRock_c*)i_this)->create();
|
|
}
|
|
|
|
/* 00001050-0000127C .text create__12daFallRock_cFv */
|
|
cPhs_State daFallRock_c::create() {
|
|
#if VERSION > VERSION_DEMO
|
|
fopAcM_SetupActor(this, daFallRock_c);
|
|
#endif
|
|
|
|
cPhs_State res = dComIfG_resLoad(&mPhs, m_arcname);
|
|
if (res == cPhs_COMPLEATE_e) {
|
|
#if VERSION == VERSION_DEMO
|
|
fopAcM_SetupActor(this, daFallRock_c);
|
|
#endif
|
|
|
|
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0xB80)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
|
|
|
mStts.Init(0xFF, 0xFF, this);
|
|
mCyl.Set(m_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
|
|
mCyl.SetH(scale.x * 120.0f);
|
|
mCyl.SetR(scale.x * 90.0f);
|
|
field_0x460.SetWall(30.0f, 30.0f);
|
|
field_0x29C.Set(
|
|
fopAcM_GetPosition_p(this),
|
|
fopAcM_GetOldPosition_p(this),
|
|
this,
|
|
1,
|
|
&field_0x460,
|
|
fopAcM_GetSpeed_p(this)
|
|
);
|
|
set_mtx();
|
|
|
|
f32 grav = -5.0f;
|
|
f32 fall_speed = -70.0f;
|
|
f32 speed_f = 0.0f;
|
|
gravity = grav;
|
|
speedF = speed_f;
|
|
fopAcM_SetMaxFallSpeed(this, fall_speed);
|
|
field_0x610 = 0.0f;
|
|
field_0x29C.ClrWaterNone();
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
/* 00001588-00001794 .text setParticle__12daFallRock_cFiP4cXyz */
|
|
void daFallRock_c::setParticle(int param_1, cXyz* pos) {
|
|
cXyz particle_scale(5.0f, 5.0f, 5.0f);
|
|
|
|
field_0x60C.r = tevStr.mColorC0.r;
|
|
field_0x60C.g = tevStr.mColorC0.g;
|
|
field_0x60C.b = tevStr.mColorC0.b;
|
|
field_0x60C.a = tevStr.mColorC0.a;
|
|
|
|
particle_scale.setall(particle_scale.x * scale.x);
|
|
|
|
cXyz pos_copy = *pos;
|
|
|
|
switch (param_1) {
|
|
case 0: {
|
|
dComIfGp_particle_set(
|
|
dPa_name::ID_COMMON_03E3,
|
|
&pos_copy,
|
|
NULL,
|
|
&particle_scale,
|
|
0xFF,
|
|
NULL,
|
|
-1,
|
|
&tevStr.mColorK0,
|
|
&tevStr.mColorK0
|
|
);
|
|
|
|
J3DModelData* modelData = (J3DModelData*)
|
|
dComIfG_getObjectRes(m_arcname, ALWAYS_BDL_MPI_KOISHI);
|
|
J3DAnmTexPattern* anmTexPattern = (J3DAnmTexPattern*)
|
|
dComIfG_getObjectRes(m_arcname, ALWAYS_BTP_MPI_KOISHI);
|
|
|
|
JPABaseEmitter* emitter = (JPABaseEmitter*)dComIfGp_particle_set(
|
|
dPa_name::ID_COMMON_03E2,
|
|
&pos_copy,
|
|
NULL,
|
|
&particle_scale,
|
|
0xFF,
|
|
NULL,
|
|
-1,
|
|
&field_0x60C,
|
|
&tevStr.mColorK0
|
|
);
|
|
if (emitter != NULL && modelData != NULL && anmTexPattern != NULL) {
|
|
dPa_J3DmodelEmitter_c* modelEmitter = new dPa_J3DmodelEmitter_c(
|
|
emitter, modelData, tevStr, anmTexPattern, 0, 0
|
|
);
|
|
if (modelEmitter != NULL) {
|
|
dComIfGp_particle_addModelEmitter(modelEmitter);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case 1:
|
|
fopKyM_createMpillar(pos, scale.x);
|
|
break;
|
|
case 2:
|
|
fopKyM_createWpillar(pos, scale.x, 1.0f, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static actor_method_class l_daFallRock_Method = {
|
|
(process_method_func)daFallRock_Create,
|
|
(process_method_func)daFallRock_Delete,
|
|
(process_method_func)daFallRock_Execute,
|
|
(process_method_func)daFallRock_IsDelete,
|
|
(process_method_func)daFallRock_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_FallRock = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_FallRock,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daFallRock_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_FallRock,
|
|
/* Actor SubMtd */ &l_daFallRock_Method,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_0_e,
|
|
};
|