summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_ebomzo.cpp
diff options
context:
space:
mode:
authorBlythe <bghospe@yahoo.com>2024-07-23 23:20:58 -0500
committerGitHub <noreply@github.com>2024-07-23 21:20:58 -0700
commit7e70d94bc9c55d87d7defe426040ee110b286a00 (patch)
tree062bca628201ce0cba22fbd67209c6b1c3ca6d1f /src/d/actor/d_a_obj_ebomzo.cpp
parent1eb17348986f806c5181684b21285a09d1b8baf6 (diff)
d_a_obj_ebomzo mostly matched (#668)
* ebomzo mostly matching * ebomzo mostly matching * d_a_obj ebomzo cleanup --------- Co-authored-by: Blythe <35576053+bhospelhorn@users.noreply.github.com>
Diffstat (limited to 'src/d/actor/d_a_obj_ebomzo.cpp')
-rw-r--r--src/d/actor/d_a_obj_ebomzo.cpp250
1 files changed, 198 insertions, 52 deletions
diff --git a/src/d/actor/d_a_obj_ebomzo.cpp b/src/d/actor/d_a_obj_ebomzo.cpp
index 5a5ef9c9..92a97a25 100644
--- a/src/d/actor/d_a_obj_ebomzo.cpp
+++ b/src/d/actor/d_a_obj_ebomzo.cpp
@@ -4,104 +4,250 @@
//
#include "d/actor/d_a_obj_ebomzo.h"
-#include "d/d_procname.h"
+#include "dolphin/types.h"
+#include "d/d_com_inf_game.h"
+#include "f_op/f_op_actor_mng.h"
+#include "d/res/res_ebomzo.h"
+
+typedef enum {
+ /*0*/ Ebomzo_Mode_Check = 0,
+ /*1*/ Ebomzo_Mode_Demo,
+ /*2*/ Ebomzo_Mode_Fall,
+} EbomzoMode;
+
+Mtx daObjEbomzo::Act_c::M_tmp_mtx;
+const char daObjEbomzo::Act_c::M_arcname[] = "Ebomzo";
+
+dCcD_SrcSph sph_check_src = {
+ //dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ AT_TYPE_BOMB,
+ /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_OTHER,
+ /* SrcObjCo SPrm */ 0,
+ /* 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 */ 0,
+ /* SrcGObjCo SPrm */ 0,
+ },
+
+ //cCcD_SrcSphAttr
+ {
+ /* Center */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 10.0f,
+ }
+};
/* 00000078-0000012C .text CreateHeap__Q211daObjEbomzo5Act_cFv */
-void daObjEbomzo::Act_c::CreateHeap() {
- /* Nonmatching */
+int daObjEbomzo::Act_c::CreateHeap() {
+ J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, EBOMZO_BDL_EBOMZO);
+ JUT_ASSERT(140, model_data != NULL);
+ mpModel = mDoExt_J3DModel__create(model_data, 0, 0x11020203);
+ return mpModel != NULL;
}
/* 0000012C-0000021C .text Create__Q211daObjEbomzo5Act_cFv */
-s32 daObjEbomzo::Act_c::Create() {
- /* Nonmatching */
+int daObjEbomzo::Act_c::Create() {
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
+ init_mtx();
+
+ fopAcM_setCullSizeBox(this, -1000.0f, -100.0f, -1000.0f, 1000.0f, 1000.0f, 1000.0f);
+
+ mStts.Init(0xff, 0xff, this);
+ mCollider.Set(sph_check_src);
+ mCollider.SetStts(&mStts);
+
+ mXRotRate = 0;
+ mpParticleEmitter = NULL;
+
+ if (fopAcM_isSwitch(this, prm_get_swSave())) {
+ mMode = Ebomzo_Mode_Fall;
+ current.angle.x = 0x4000;
+ }
+ else mMode = Ebomzo_Mode_Check;
+
+ return TRUE;
}
/* 0000021C-000003A0 .text Mthd_Create__Q211daObjEbomzo5Act_cFv */
-void daObjEbomzo::Act_c::Mthd_Create() {
- /* Nonmatching */
+int daObjEbomzo::Act_c::Mthd_Create() {
+ int phase_state;
+
+ fopAcM_SetupActor(this, daObjEbomzo::Act_c);
+
+ phase_state = dComIfG_resLoad(&mPhs, M_arcname);
+ if (phase_state == cPhs_COMPLEATE_e) {
+ phase_state = MoveBGCreate(M_arcname, EBOMZO_DZB_EBOMZO, NULL, 0x1200);
+ JUT_ASSERT(194, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
+ }
+ return phase_state;
}
/* 00000558-00000560 .text Delete__Q211daObjEbomzo5Act_cFv */
-BOOL daObjEbomzo::Act_c::Delete() {
- /* Nonmatching */
+int daObjEbomzo::Act_c::Delete() {
+ return TRUE;
}
/* 00000560-000005AC .text Mthd_Delete__Q211daObjEbomzo5Act_cFv */
-void daObjEbomzo::Act_c::Mthd_Delete() {
- /* Nonmatching */
+int daObjEbomzo::Act_c::Mthd_Delete() {
+ u32 result = MoveBGDelete();
+ dComIfG_resDelete(&mPhs, M_arcname);
+ return result;
}
/* 000005AC-0000062C .text set_mtx__Q211daObjEbomzo5Act_cFv */
void daObjEbomzo::Act_c::set_mtx() {
- /* Nonmatching */
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::now);
+ cMtx_copy(mDoMtx_stack_c::now, M_tmp_mtx);
}
/* 0000062C-00000668 .text init_mtx__Q211daObjEbomzo5Act_cFv */
void daObjEbomzo::Act_c::init_mtx() {
- /* Nonmatching */
+ mpModel->mBaseScale = scale;
+ set_mtx();
}
/* 00000668-00000864 .text check__Q211daObjEbomzo5Act_cFv */
void daObjEbomzo::Act_c::check() {
- /* Nonmatching */
+ //Nonmatching
+
+ fopAc_ac_c* acActor;
+ cXyz diffVec;
+ u8 b, g, r;
+
+ if (mCollider.ChkTgHit()) {
+ acActor = mCollider.GetTgHitAc();
+ if (acActor) {
+ diffVec = mCollider.GetC() - acActor->current.pos;
+ if (diffVec.abs() < 100.0f) {
+ mXRotRate = 8;
+ current.angle.x += mXRotRate;
+
+ fopAcM_seStartCurrent(this, JA_SE_OBJ_BOMB_DN_ST_S, 0);
+ mMode = Ebomzo_Mode_Demo;
+
+ fopAcM_onSwitch(this, prm_get_swSave());
+
+ if (!mpParticleEmitter) {
+ r = tevStr.mColorK0.r;
+ g = tevStr.mColorK0.g;
+ b = tevStr.mColorK0.b;
+ mpParticleEmitter = dComIfGp_particle_set(0x828e, &current.pos, &current.angle);
+ if (mpParticleEmitter) mpParticleEmitter->setGlobalPrmColor(r, g, b);
+ }
+ }
+ }
+ }
}
/* 00000864-000009BC .text demo__Q211daObjEbomzo5Act_cFv */
void daObjEbomzo::Act_c::demo() {
- /* Nonmatching */
+ mXRotRate += mXRotRate / 8;
+ current.angle.x += mXRotRate;
+
+ if (current.angle.x >= 0x4000) {
+ current.angle.x = 0x4000;
+ mMode = Ebomzo_Mode_Fall;
+
+ dComIfGp_getVibration().StartShock(4, -33, cXyz(0.0f, 1.0f, 0.0f));
+ fopAcM_seStartCurrent(this, JA_SE_OBJ_BOMB_DN_ST_E, 0);
+
+ if (mpParticleEmitter) {
+ mpParticleEmitter->becomeInvalidEmitter();
+ mpParticleEmitter = NULL;
+ }
+
+ dComIfGp_particle_set(0x828f, &current.pos, &current.angle);
+ }
}
/* 000009BC-000009C0 .text fall__Q211daObjEbomzo5Act_cFv */
-void daObjEbomzo::Act_c::fall() {
- /* Nonmatching */
-}
+void daObjEbomzo::Act_c::fall() {}
/* 000009C0-00000AFC .text Execute__Q211daObjEbomzo5Act_cFPPA3_A4_f */
-void daObjEbomzo::Act_c::Execute(float(**)[3][4]) {
- /* Nonmatching */
+int daObjEbomzo::Act_c::Execute(Mtx** matrix) {
+ cXyz offset;
+
+ offset.x = cM_ssin(current.angle.y) * 50.0f;
+ offset.y = 320.0f;
+ offset.z = cM_scos(current.angle.y) * 50.0f;
+
+ mCollider.SetC(current.pos + offset);
+ dComIfG_Ccsp()->Set(&mCollider);
+
+ switch (this->mMode) {
+ case Ebomzo_Mode_Check: check(); break;
+ case Ebomzo_Mode_Demo: demo(); break;
+ case Ebomzo_Mode_Fall: fall(); break;
+ }
+
+ shape_angle = current.angle;
+ set_mtx();
+ *matrix = &M_tmp_mtx;
+
+ return TRUE;
}
/* 00000AFC-00000B9C .text Draw__Q211daObjEbomzo5Act_cFv */
-BOOL daObjEbomzo::Act_c::Draw() {
- /* Nonmatching */
+int daObjEbomzo::Act_c::Draw() {
+ g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType(mpModel, &tevStr);
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mpModel);
+ dComIfGd_setList();
+ dComIfG_Bgsp();
+ return TRUE;
}
namespace daObjEbomzo {
-namespace {
-/* 00000B9C-00000BBC .text Mthd_Create__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
-void Mthd_Create(void*) {
- /* Nonmatching */
-}
+ namespace {
+ /* 00000B9C-00000BBC .text Mthd_Create__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
+ s32 Mthd_Create(void* i_this) {
+ return static_cast<Act_c*>(i_this)->Mthd_Create();
+ }
-/* 00000BBC-00000BDC .text Mthd_Delete__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
-void Mthd_Delete(void*) {
- /* Nonmatching */
-}
+ /* 00000BBC-00000BDC .text Mthd_Delete__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
+ BOOL Mthd_Delete(void* i_this) {
+ return static_cast<Act_c*>(i_this)->Mthd_Delete();
+ }
-/* 00000BDC-00000BFC .text Mthd_Execute__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
-void Mthd_Execute(void*) {
- /* Nonmatching */
-}
+ /* 00000BDC-00000BFC .text Mthd_Execute__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
+ BOOL Mthd_Execute(void* i_this) {
+ return static_cast<Act_c*>(i_this)->MoveBGExecute();
+ }
-/* 00000BFC-00000C28 .text Mthd_Draw__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
-void Mthd_Draw(void*) {
- /* Nonmatching */
-}
+ /* 00000BFC-00000C28 .text Mthd_Draw__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
+ BOOL Mthd_Draw(void* i_this) {
+ return static_cast<Act_c*>(i_this)->Draw();
+ }
-/* 00000C28-00000C54 .text Mthd_IsDelete__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
-void Mthd_IsDelete(void*) {
- /* Nonmatching */
-}
+ /* 00000C28-00000C54 .text Mthd_IsDelete__Q211daObjEbomzo28@unnamed@d_a_obj_ebomzo_cpp@FPv */
+ BOOL Mthd_IsDelete(void* i_this) {
+ return static_cast<Act_c*>(i_this)->IsDelete();
+ }
-static actor_method_class Mthd_Ebomzo = {
- (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,
-};
-}; // namespace
-}; // namespace daObjEbomzo
+ static actor_method_class Mthd_Ebomzo = {
+ (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_Ebomzo = {
/* LayerID */ fpcLy_CURRENT_e,