diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2023-10-21 14:19:49 -0400 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2023-10-21 14:19:49 -0400 |
| commit | d270c0787659a217bb7db6c6e6edcf41d73e66b4 (patch) | |
| tree | bc2fd73855f46783babdafd1613b0ce38f61cca6 /src/d/actor/d_a_obj_homensmoke.cpp | |
| parent | a983a848c10e909f8013d3358a97f1c5be2a9183 (diff) | |
d_a_obj_homensmoke OK
Diffstat (limited to 'src/d/actor/d_a_obj_homensmoke.cpp')
| -rw-r--r-- | src/d/actor/d_a_obj_homensmoke.cpp | 293 |
1 files changed, 195 insertions, 98 deletions
diff --git a/src/d/actor/d_a_obj_homensmoke.cpp b/src/d/actor/d_a_obj_homensmoke.cpp index 17af8cdb..8d79275d 100644 --- a/src/d/actor/d_a_obj_homensmoke.cpp +++ b/src/d/actor/d_a_obj_homensmoke.cpp @@ -3,101 +3,198 @@ // Translation Unit: d_a_obj_homensmoke.cpp // -#include "d_a_obj_homensmoke.h" -#include "dolphin/types.h" - -/* 000000EC-00000230 .text set_mtx__Q215daObjHomensmoke5Act_cFv */ -void daObjHomensmoke::Act_c::set_mtx() { - /* Nonmatching */ -} - -/* 00000230-0000026C .text __dt__4cXyzFv */ -cXyz::~cXyz() { - /* Nonmatching */ -} - -/* 0000026C-0000048C .text _create__Q215daObjHomensmoke5Act_cFv */ -void daObjHomensmoke::Act_c::_create() { - /* Nonmatching */ -} - -/* 0000048C-000004C8 .text _delete__Q215daObjHomensmoke5Act_cFv */ -void daObjHomensmoke::Act_c::_delete() { - /* Nonmatching */ -} - -/* 000004C8-00000738 .text _execute__Q215daObjHomensmoke5Act_cFv */ -void daObjHomensmoke::Act_c::_execute() { - /* Nonmatching */ -} - -/* 00000738-00000740 .text _draw__Q215daObjHomensmoke5Act_cFv */ -void daObjHomensmoke::Act_c::_draw() { - /* Nonmatching */ -} - -/* 00000740-00000760 .text Mthd_Create__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ -void daObjHomensmoke::@unnamed@d_a_obj_homensmoke_cpp@::Mthd_Create(void*) { - /* Nonmatching */ -} - -/* 00000760-00000784 .text Mthd_Delete__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ -void daObjHomensmoke::@unnamed@d_a_obj_homensmoke_cpp@::Mthd_Delete(void*) { - /* Nonmatching */ -} - -/* 00000784-000007A8 .text Mthd_Execute__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ -void daObjHomensmoke::@unnamed@d_a_obj_homensmoke_cpp@::Mthd_Execute(void*) { - /* Nonmatching */ -} - -/* 000007A8-000007CC .text Mthd_Draw__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ -void daObjHomensmoke::@unnamed@d_a_obj_homensmoke_cpp@::Mthd_Draw(void*) { - /* Nonmatching */ -} - -/* 000007CC-000007D4 .text Mthd_IsDelete__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ -void daObjHomensmoke::@unnamed@d_a_obj_homensmoke_cpp@::Mthd_IsDelete(void*) { - /* Nonmatching */ -} - -/* 000007D4-000007D8 .text draw__34JPACallBackBase<P14JPABaseEmitter>FP14JPABaseEmitter */ -void JPACallBackBase<JPABaseEmitter*>::draw(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 000007D8-000007DC .text executeAfter__34JPACallBackBase<P14JPABaseEmitter>FP14JPABaseEmitter */ -void JPACallBackBase<JPABaseEmitter*>::executeAfter(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 000007DC-000007E0 .text execute__34JPACallBackBase<P14JPABaseEmitter>FP14JPABaseEmitter */ -void JPACallBackBase<JPABaseEmitter*>::execute(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 000007E0-000007E4 .text init__34JPACallBackBase<P14JPABaseEmitter>FP14JPABaseEmitter */ -void JPACallBackBase<JPABaseEmitter*>::init(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 000007E4-0000082C .text __dt__34JPACallBackBase<P14JPABaseEmitter>Fv */ -JPACallBackBase<JPABaseEmitter*>::~JPACallBackBase() { - /* Nonmatching */ -} - -/* 0000082C-00000888 .text __dt__18dPa_levelEcallBackFv */ -dPa_levelEcallBack::~dPa_levelEcallBack() { - /* Nonmatching */ -} - -/* 00000888-0000093C .text __dt__Q215daObjHomensmoke5Act_cFv */ -daObjHomensmoke::Act_c::~Act_c() { - /* Nonmatching */ -} - -/* 0000093C-00000958 .text PrmAbstract<i>__5daObjFPC10fopAc_ac_cii */ -void daObj::PrmAbstract<int>(const fopAc_ac_c*, int, int) { - /* Nonmatching */ -} - +#include "d/d_a_obj.h" +#include "d/d_procname.h" +#include "d/d_particle.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "m_Do/m_Do_mtx.h" +#include "d/d_com_inf_game.h" + +static u8 temp[0x4C]; + +namespace daObjHomensmoke { + class Act_c : public fopAc_ac_c { + public: + virtual ~Act_c() {} + void set_mtx(); + s32 _create(); + bool _delete(); + bool _execute(); + bool _draw(); + + int param_get_arg0() const { return daObj::PrmAbstract(this, 1, 0) & 0x1; } + int param_get_axis() const { return daObj::PrmAbstract(this, 1, 1) & 0x1; } + + /* 0x290 */ /* vtable */ + /* 0x294 */ u8 m294[0x29C - 0x294]; + /* 0x29C */ Mtx mMtx; + /* 0x2CC */ int mType; + /* 0x2D0 */ dPa_smokeEcallBack mSmokeCb; + /* 0x2F0 */ BOOL mbInitialized; + /* 0x2F4 */ cXyz mSmokePos; + }; + + /* 000000EC-00000230 .text set_mtx__Q215daObjHomensmoke5Act_cFv */ + void Act_c::set_mtx() { + if (param_get_axis() != 0) { + cXyz backOffset(0.0f, 0.0f, -200.0f); + cXyz forwardOffset(0.0f, 0.0f, 200.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::transM(forwardOffset); + cMtx_ZrotM(mDoMtx_stack_c::get(), shape_angle.z); + cMtx_YrotM(mDoMtx_stack_c::get(), shape_angle.y); + cMtx_XrotM(mDoMtx_stack_c::get(), shape_angle.x); + mDoMtx_stack_c::transM(backOffset); + mDoMtx_copy(mDoMtx_stack_c::get(), mMtx); + } else { + mDoMtx_stack_c::transS(current.pos); + cMtx_ZrotM(mDoMtx_stack_c::get(), shape_angle.z); + cMtx_YrotM(mDoMtx_stack_c::get(), shape_angle.y); + cMtx_XrotM(mDoMtx_stack_c::get(), shape_angle.x); + mDoMtx_copy(mDoMtx_stack_c::get(), mMtx); + } + } + + /* 0000026C-0000048C .text _create__Q215daObjHomensmoke5Act_cFv */ + s32 Act_c::_create() { + fopAcM_SetupActor(this, Act_c); + + mbInitialized = FALSE; + + set_mtx(); + fopAcM_SetMtx(this, mMtx); + + mType = param_get_arg0(); + + struct daObjHomensmoke__cullbox { + /* 0x0 */ Vec mMin; + /* 0xC */ Vec mMax; + }; + static daObjHomensmoke__cullbox culling_dat[2] = { + {-300.0, -30.0, -100.0, 300.0, 600.0, 300.0}, + {-100.0, -30.0, -100.0, 100.0, 250.0, 120.0}, + }; + fopAcM_setCullSizeBox(this, + culling_dat[mType].mMin.x, culling_dat[mType].mMin.y, culling_dat[mType].mMin.z, + culling_dat[mType].mMax.x, culling_dat[mType].mMax.y, culling_dat[mType].mMax.z + ); + + fopAc_ac_c* parent = fopAcM_SearchByID(mParentPcId); + if (parent) { + mTevStr = parent->mTevStr; + } + + return cPhs_COMPLEATE_e; + } + + /* 0000048C-000004C8 .text _delete__Q215daObjHomensmoke5Act_cFv */ + bool Act_c::_delete() { + if (mSmokeCb.getEmitter()) { + mSmokeCb.end(); + } + return true; + } + + /* 000004C8-00000738 .text _execute__Q215daObjHomensmoke5Act_cFv */ + bool Act_c::_execute() { + if (!mbInitialized) { + static cXyz norse_offsetL(0.0f, 300.0f, 20.0f); + static cXyz norse_offsetS(0.0f, 70.0f, 20.0f); + if (mType == 0) { + cMtx_multVec(mMtx, &norse_offsetL, &mSmokePos); + } else { + cMtx_multVec(mMtx, &norse_offsetS, &mSmokePos); + } + + JPABaseEmitter* smokeEmitter = dComIfGp_particle_setToon(0x2027, &mSmokePos, NULL, NULL, 0xFF, &mSmokeCb, fopAcM_GetRoomNo(this)); + if (smokeEmitter) { + static f32 rate_table[2] = {1.0f, 0.5f}; + f32 rate = rate_table[mType & 1]; + smokeEmitter->setGlobalAlpha(0xB4); + smokeEmitter->setRate(50.0f); + smokeEmitter->setMaxFrame(1); + JGeometry::TVec3<f32> scale1; + scale1.set(rate, 0.0f, rate); + smokeEmitter->setEmitterScale(scale1); + scale1.set(rate*5.0f, rate*5.0f, rate*5.0f); + smokeEmitter->setGlobalDynamicsScale(scale1); + scale1.set(rate*6.0f, rate*6.0f, rate*6.0f); + smokeEmitter->setGlobalParticleScale(scale1); + } + + JPABaseEmitter* rubbleEmitter = dComIfGp_particle_setToon(0x81B1, ¤t.pos); + if (rubbleEmitter) { + rubbleEmitter->setGlobalPrmColor(mTevStr.mColorK0.r, mTevStr.mColorK0.g, mTevStr.mColorK0.b); + if (mType == 1) { + JGeometry::TVec3<f32> scale(0.6f, 0.6f, 0.6f); + rubbleEmitter->setEmitterScale(scale); + rubbleEmitter->setGlobalDynamicsScale(scale); + rubbleEmitter->setGlobalParticleScale(scale); + } + rubbleEmitter->setGlobalRTMatrix(mMtx); + } + + mbInitialized = TRUE; + } else if (mSmokeCb.isEnd()) { + fopAcM_delete(this); + } + return true; + } + + /* 00000738-00000740 .text _draw__Q215daObjHomensmoke5Act_cFv */ + bool Act_c::_draw() { + return true; + } + + namespace { + /* 00000740-00000760 .text Mthd_Create__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ + s32 Mthd_Create(void* i_this) { + return ((Act_c*)i_this)->_create(); + } + + /* 00000760-00000784 .text Mthd_Delete__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ + BOOL Mthd_Delete(void* i_this) { + return ((Act_c*)i_this)->_delete(); + } + + /* 00000784-000007A8 .text Mthd_Execute__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ + BOOL Mthd_Execute(void* i_this) { + return ((Act_c*)i_this)->_execute(); + } + + /* 000007A8-000007CC .text Mthd_Draw__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ + BOOL Mthd_Draw(void* i_this) { + return ((Act_c*)i_this)->_draw(); + } + + /* 000007CC-000007D4 .text Mthd_IsDelete__Q215daObjHomensmoke32@unnamed@d_a_obj_homensmoke_cpp@FPv */ + BOOL Mthd_IsDelete(void* i_this) { + return TRUE; + } + + static actor_method_class Mthd_Table = { + (process_method_func)Mthd_Create, + (process_method_func)Mthd_Delete, + (process_method_func)Mthd_Execute, + (process_method_func)Mthd_IsDelete, + (process_method_func)Mthd_Draw, + }; + }; +}; + +actor_process_profile_definition g_profile_Obj_Homensmk = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 3, + /* ListPrio */ fpcLy_CURRENT_e, + /* ProcName */ PROC_Obj_Homensmk, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daObjHomensmoke::Act_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x0043, + /* Actor SubMtd */ &daObjHomensmoke::Mthd_Table, + /* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_CUSTOM_e, +}; |
