From c754cf4e2ab7852976633b409e34d9436ab22f3d Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 14 Sep 2023 18:42:57 -0400 Subject: [PATCH] Started work on pushable boxes (#32) * Started work on pushable boxes * Minor fixes * Fix inlines * Comment GetHomeRoomNo --- include/d/d_a_obj.h | 16 +- include/d/d_bg_s_movebg_actor.h | 9 +- include/d/d_com_inf_game.h | 4 +- include/d/d_path.h | 30 + include/d/d_resorce.h | 4 +- include/f_op/f_op_actor_mng.h | 13 +- include/m_Do/m_Do_mtx.h | 2 +- src/d/actor/d_a_andsw0.cpp | 2 +- src/d/actor/d_a_item.cpp | 2 +- src/d/actor/d_a_obj_movebox.cpp | 1535 +++++++++++++++++-------------- src/d/d_path.cpp | 6 +- 11 files changed, 936 insertions(+), 687 deletions(-) create mode 100644 include/d/d_path.h diff --git a/include/d/d_a_obj.h b/include/d/d_a_obj.h index c664b1cf7..de62a190f 100644 --- a/include/d/d_a_obj.h +++ b/include/d/d_a_obj.h @@ -2,6 +2,7 @@ #define D_A_OBJ #include "f_op/f_op_actor_mng.h" +#include "d/d_cc_d.h" namespace daObj { template @@ -9,8 +10,21 @@ namespace daObj { u32 param = fopAcM_GetParam(actor); return ((1 << width) - 1) & (param >> shift); } - + + void make_land_effect(fopAc_ac_c*, dBgS_GndChk*, float); + void get_wind_spd(fopAc_ac_c*, float); + void get_path_spd(cBgS_PolyInfo&, float); + void posMoveF_stream(fopAc_ac_c*, const cXyz*, const cXyz*, float, float); + void posMoveF_grade(fopAc_ac_c*, const cXyz*, const cXyz*, float, float, const cXyz*, float, float, const cXyz*); + void quat_rotBaseY(Quaternion*, const cXyz&); + void quat_rotBaseY2(Quaternion*, const cXyz&); + void quat_rotBaseZ(Quaternion*, const cXyz&); + void quat_rotVec(Quaternion*, const cXyz&, const cXyz&); + void SetCurrentRoomNo(fopAc_ac_c*, dBgS_GndChk*); void HitSeStart(const cXyz*, int, const dCcD_GObjInf*, unsigned long); + void HitEff_sub_kikuzu(const cXyz*, const cXyz*, const dKy_tevstr_c*); + void HitEff_kikuzu(const fopAc_ac_c*, const dCcD_Cyl*); + void HitEff_hibana(const cXyz*, const cXyz*); void HitEff_hibana(const fopAc_ac_c*, const dCcD_Cyl*); }; diff --git a/include/d/d_bg_s_movebg_actor.h b/include/d/d_bg_s_movebg_actor.h index 2451c2dc2..8bc36aa16 100644 --- a/include/d/d_bg_s_movebg_actor.h +++ b/include/d/d_bg_s_movebg_actor.h @@ -5,8 +5,11 @@ #include "f_op/f_op_actor_mng.h" class dBgW; -typedef void (*MoveBGActor_SetFunc)(dBgW*, void*, cBgS_PolyInfo&, bool, cXyz*, csXyz*, - csXyz*); +typedef void (*MoveBGActor_SetFunc)(dBgW*, void*, cBgS_PolyInfo&, bool, cXyz*, csXyz*, csXyz*); +void dBgS_MoveBGProc_Typical(dBgW*, void*, cBgS_PolyInfo&, bool, cXyz*, csXyz*, csXyz*); +void dBgS_MoveBGProc_RotY(dBgW*, void*, cBgS_PolyInfo&, bool, cXyz*, csXyz*, csXyz*); +void dBgS_MoveBGProc_TypicalRotY(dBgW*, void*, cBgS_PolyInfo&, bool, cXyz*, csXyz*, csXyz*); +void dBgS_MoveBGProc_Trans(dBgW*, void*, cBgS_PolyInfo&, bool, cXyz*, csXyz*, csXyz*); class dBgS_MoveBgActor : public fopAc_ac_c { public: @@ -15,7 +18,7 @@ public: dBgS_MoveBgActor(); int MoveBGCreateHeap(); - int MoveBGCreate(char const*, int, MoveBGActor_SetFunc, u32); + int MoveBGCreate(char const* resName, int resIndex, MoveBGActor_SetFunc callback, u32 resSize); int MoveBGDelete(); int MoveBGExecute(); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index e833d66eb..0e74a6fbd 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -759,8 +759,8 @@ inline void* dComIfG_getObjectRes(const char* arcName, const char* resName) { return g_dComIfG_gameInfo.mResControl.getObjectRes(arcName, resName); } -inline void* dComIfG_getObjectRes(const char* arcName, int param_1) { - return g_dComIfG_gameInfo.mResControl.getObjectRes(arcName, param_1); +inline void* dComIfG_getObjectRes(const char* arcName, int index) { + return g_dComIfG_gameInfo.mResControl.getObjectRes(arcName, index); } inline void* dComIfG_getObjectIDRes(const char* arcName, int id) { diff --git a/include/d/d_path.h b/include/d/d_path.h new file mode 100644 index 000000000..7e8632f75 --- /dev/null +++ b/include/d/d_path.h @@ -0,0 +1,30 @@ +#ifndef D_PATH_H +#define D_PATH_H + +#include "d/d_bg_s.h" +#include "dolphin/types.h" + +struct dPath__Point { + /* 0x00 */ u8 mArg0; + /* 0x01 */ u8 mArg1; + /* 0x02 */ u8 mArg2; + /* 0x03 */ u8 mArg3; + /* 0x04 */ cXyz mPos; +}; + +struct dPath { + /* 0x00 */ u16 mNum; + /* 0x02 */ u16 mNextPathId; + /* 0x04 */ u8 mArg0; + /* 0x05 */ u8 mLoops; + /* 0x06 */ u8 field4_0x6; + /* 0x07 */ u8 field5_0x7; + /* 0x08 */ dPath__Point* mpPnt; +}; + +dPath__Point* dPath_GetPnt(dPath*, int); +dPath* dPath_GetRoomPath(int, int); +void dPath_GetNextRoomPath(dPath*, int); +void dPath_GetPolyRoomPathVec(cBgS_PolyInfo&, cXyz*, int*); + +#endif /* D_PATH_H */ diff --git a/include/d/d_resorce.h b/include/d/d_resorce.h index 6fd5aa469..328393fdb 100644 --- a/include/d/d_resorce.h +++ b/include/d/d_resorce.h @@ -68,8 +68,8 @@ public: return getRes(arcName, resName, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); } - void* getObjectRes(const char* arcName, s32 param_1) { - return getRes(arcName, param_1, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + void* getObjectRes(const char* arcName, s32 index) { + return getRes(arcName, index, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); } void* getObjectIDRes(const char* arcName, u16 id) { diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index a2f07e5b2..ae921b475 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -337,16 +337,16 @@ inline void dComIfGs_offSwitch(int i_no, int i_roomNo); inline BOOL dComIfGs_isSwitch(s32 i_no, s32 i_roomNo); inline void dComIfGs_offActor(int i_no, int i_roomNo); -inline void i_fopAcM_onSwitch(const fopAc_ac_c* pActor, int sw) { - return dComIfGs_onSwitch(sw, fopAcM_GetHomeRoomNo(pActor)); +inline void fopAcM_onSwitch(const fopAc_ac_c* pActor, int sw) { + return dComIfGs_onSwitch(sw, pActor->orig.roomNo); // Should use fopAcM_GetHomeRoomNo, but that breaks regalloc? } -inline void i_fopAcM_offSwitch(const fopAc_ac_c* pActor, int sw) { - return dComIfGs_offSwitch(sw, fopAcM_GetHomeRoomNo(pActor)); +inline void fopAcM_offSwitch(const fopAc_ac_c* pActor, int sw) { + return dComIfGs_offSwitch(sw, pActor->orig.roomNo); // Should use fopAcM_GetHomeRoomNo, but that breaks regalloc? } -inline BOOL i_fopAcM_isSwitch(const fopAc_ac_c* item, int sw) { - return dComIfGs_isSwitch(sw, fopAcM_GetHomeRoomNo(item)); +inline BOOL fopAcM_isSwitch(const fopAc_ac_c* pActor, int sw) { + return dComIfGs_isSwitch(sw, pActor->orig.roomNo); // Should use fopAcM_GetHomeRoomNo, but that breaks regalloc? } inline fopAc_ac_c* i_fopAcM_SearchByName(s16 proc_id) { @@ -487,7 +487,6 @@ s32 fopAcM_orderTreasureEvent(fopAc_ac_c*, fopAc_ac_c*, u16, u16); fopAc_ac_c* fopAcM_getTalkEventPartner(const fopAc_ac_c*); fopAc_ac_c* fopAcM_getItemEventPartner(const fopAc_ac_c*); fopAc_ac_c* fopAcM_getEventPartner(const fopAc_ac_c*); -static void fopAcM_onSwitch(fopAc_ac_c const* param_0, int param_1); s32 fopAcM_createItemForPresentDemo(cXyz const* p_pos, int i_itemNo, u8 param_2, int i_itemBitNo, int i_roomNo, csXyz const* p_angle, cXyz const* p_scale); diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index 51a5afc51..3c7a63d9c 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -242,7 +242,7 @@ public: static void ZXYrotS(s16 x, s16 y, s16 z) { mDoMtx_ZXYrotS(now, x, y, z); } /** - * Rotates the `now` matrix by the given X, Y, and Z values in the order X, Y, Z + * Rotates the `now` matrix by the given X, Y, and Z values in the order Z, X, Y * @param x The x-axis rotation value * @param y The y-axis rotation value * @param z The z-axis rotation value diff --git a/src/d/actor/d_a_andsw0.cpp b/src/d/actor/d_a_andsw0.cpp index a181d5038..6b18cd745 100644 --- a/src/d/actor/d_a_andsw0.cpp +++ b/src/d/actor/d_a_andsw0.cpp @@ -82,7 +82,7 @@ static void event_start_check(andsw0_class* i_this) { switch (i_this->mEventState) { case 0: default: - if (i_this->mEventIdx != -1 && i_fopAcM_isSwitch(i_this, i_this->mSwitchToSet)) { + if (i_this->mEventIdx != -1 && fopAcM_isSwitch(i_this, i_this->mSwitchToSet)) { if (i_this->mEvtInfo.i_checkCommandDemoAccrpt()) { i_this->mEventState++; } else { diff --git a/src/d/actor/d_a_item.cpp b/src/d/actor/d_a_item.cpp index f2b326d6b..e22dc4409 100644 --- a/src/d/actor/d_a_item.cpp +++ b/src/d/actor/d_a_item.cpp @@ -166,7 +166,7 @@ void daItem_c::CreateInit() { } mSwitchId = (fpcM_GetParam(this) & 0x00FF0000) >> 0x10; - if (mSwitchId != 0xFF && i_fopAcM_isSwitch(this, mSwitchId)) { + if (mSwitchId != 0xFF && fopAcM_isSwitch(this, mSwitchId)) { hide(); mStatusFlags |= 2; } diff --git a/src/d/actor/d_a_obj_movebox.cpp b/src/d/actor/d_a_obj_movebox.cpp index d8729c1f0..9c2a226f9 100644 --- a/src/d/actor/d_a_obj_movebox.cpp +++ b/src/d/actor/d_a_obj_movebox.cpp @@ -3,671 +3,874 @@ // Translation Unit: d_a_obj_movebox.cpp // -#include "d_a_obj_movebox.h" +#include "d/d_a_obj.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_cc_d.h" +#include "d/d_path.h" +#include "d/d_procname.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "d/d_com_inf_game.h" +#include "m_Do/m_Do_mtx.h" #include "dolphin/types.h" -/* 000000EC-000001B0 .text __ct__Q212daObjMovebox5Bgc_cFv */ -daObjMovebox::Bgc_c::Bgc_c() { - /* Nonmatching */ -} - -/* 000001B0-000001EC .text __dt__4cXyzFv */ -cXyz::~cXyz() { - /* Nonmatching */ -} - -/* 000001EC-000001F0 .text __ct__4cXyzFv */ -cXyz::cXyz() { - /* Nonmatching */ -} - -/* 000001F0-000003A4 .text gnd_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cif */ -void daObjMovebox::Bgc_c::gnd_pos(const daObjMovebox::Act_c*, const daObjMovebox::BgcSrc_c*, int, float) { - /* Nonmatching */ -} - -/* 000003A4-00000474 .text wrt_pos__Q212daObjMovebox5Bgc_cFRC4cXyz */ -void daObjMovebox::Bgc_c::wrt_pos(const cXyz&) { - /* Nonmatching */ -} - -/* 00000474-00000748 .text wall_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cisf */ -void daObjMovebox::Bgc_c::wall_pos(const daObjMovebox::Act_c*, const daObjMovebox::BgcSrc_c*, int, short, float) { - /* Nonmatching */ -} - -/* 00000748-000008E8 .text proc_vertical__Q212daObjMovebox5Bgc_cFPQ212daObjMovebox5Act_c */ -void daObjMovebox::Bgc_c::proc_vertical(daObjMovebox::Act_c*) { - /* Nonmatching */ -} - -/* 000008E8-00000928 .text chk_wall_pre__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */ -void daObjMovebox::Bgc_c::chk_wall_pre(const daObjMovebox::Act_c*, const daObjMovebox::BgcSrc_c*, int, short) { - /* Nonmatching */ -} - -/* 00000928-00000CCC .text chk_wall_touch__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cs */ -void daObjMovebox::Bgc_c::chk_wall_touch(const daObjMovebox::Act_c*, const daObjMovebox::BgcSrc_c*, short) { - /* Nonmatching */ -} - -/* 00000CCC-00000E20 .text __dt__14dBgS_ObjLinChkFv */ -dBgS_ObjLinChk::~dBgS_ObjLinChk() { - /* Nonmatching */ -} - -/* 00000E20-00000F4C .text __dt__11dBgS_LinChkFv */ -dBgS_LinChk::~dBgS_LinChk() { - /* Nonmatching */ -} - -/* 00000F4C-00000FEC .text __dt__8dBgS_ChkFv */ -dBgS_Chk::~dBgS_Chk() { - /* Nonmatching */ -} - -/* 00000FEC-00001048 .text __dt__15dBgS_GrpPassChkFv */ -dBgS_GrpPassChk::~dBgS_GrpPassChk() { - /* Nonmatching */ -} - -/* 00001048-00001090 .text __dt__15cBgS_GrpPassChkFv */ -cBgS_GrpPassChk::~cBgS_GrpPassChk() { - /* Nonmatching */ -} - -/* 00001090-000010EC .text __dt__16dBgS_PolyPassChkFv */ -dBgS_PolyPassChk::~dBgS_PolyPassChk() { - /* Nonmatching */ -} - -/* 000010EC-00001134 .text __dt__16cBgS_PolyPassChkFv */ -cBgS_PolyPassChk::~cBgS_PolyPassChk() { - /* Nonmatching */ -} - -/* 00001134-000011C8 .text __dt__11cBgS_LinChkFv */ -cBgS_LinChk::~cBgS_LinChk() { - /* Nonmatching */ -} - -/* 000011C8-00001210 .text __dt__8cM3dGLinFv */ -cM3dGLin::~cM3dGLin() { - /* Nonmatching */ -} - -/* 00001210-00001258 .text __dt__13cBgS_PolyInfoFv */ -cBgS_PolyInfo::~cBgS_PolyInfo() { - /* Nonmatching */ -} - -/* 00001258-000012E0 .text chk_wall_touch2__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */ -void daObjMovebox::Bgc_c::chk_wall_touch2(const daObjMovebox::Act_c*, const daObjMovebox::BgcSrc_c*, int, short) { - /* Nonmatching */ -} - -/* 000012E0-00001308 .text prm_get_swSave1__Q212daObjMovebox5Act_cCFv */ -void daObjMovebox::Act_c::prm_get_swSave1() const { - /* Nonmatching */ -} - -/* 00001308-00001380 .text prmZ_init__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::prmZ_init() { - /* Nonmatching */ -} - -/* 00001380-000013B0 .text prmX_init__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::prmX_init() { - /* Nonmatching */ -} - -/* 000013B0-000013C8 .text attr__Q212daObjMovebox5Act_cCFv */ -void daObjMovebox::Act_c::attr() const { - /* Nonmatching */ -} - -/* 000013C8-00001674 .text set_mtx__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::set_mtx() { - /* Nonmatching */ -} - -/* 00001674-000016B8 .text init_mtx__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::init_mtx() { - /* Nonmatching */ -} - -/* 000016B8-00001830 .text path_init__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::path_init() { - /* Nonmatching */ -} - -/* 00001830-00001A10 .text path_save__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::path_save() { - /* Nonmatching */ -} - -/* 00001A10-00001B00 .text CreateHeap__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::CreateHeap() { - /* Nonmatching */ -} - -/* 00001B00-00001C64 .text RideCallBack__Q212daObjMovebox5Act_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ -void daObjMovebox::Act_c::RideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ -} - -/* 00001C64-00001DD4 .text PPCallBack__Q212daObjMovebox5Act_cFP10fopAc_ac_cP10fopAc_ac_csQ24dBgW13PushPullLabel */ -void daObjMovebox::Act_c::PPCallBack(fopAc_ac_c*, fopAc_ac_c*, short, dBgW::PushPullLabel) { - /* Nonmatching */ -} - -/* 00001DD4-00002214 .text Create__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::Create() { - /* Nonmatching */ -} - -/* 00002214-000024D4 .text afl_sway__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::afl_sway() { - /* Nonmatching */ -} - -/* 000024D4-00002668 .text check_to_walk__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::check_to_walk() { - /* Nonmatching */ -} - -/* 00002668-0000268C .text clr_moment_cnt__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::clr_moment_cnt() { - /* Nonmatching */ -} - -/* 0000268C-00002768 .text chk_appear__Q212daObjMovebox5Act_cCFv */ -void daObjMovebox::Act_c::chk_appear() const { - /* Nonmatching */ -} - -/* 00002768-0000290C .text eff_set_slip_smoke_pos__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::eff_set_slip_smoke_pos() { - /* Nonmatching */ -} - -/* 0000290C-00002A14 .text eff_smoke_slip_start__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::eff_smoke_slip_start() { - /* Nonmatching */ -} - -/* 00002A14-00002A74 .text eff_smoke_slip_end__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::eff_smoke_slip_end() { - /* Nonmatching */ -} - -/* 00002A74-00002AD4 .text eff_smoke_slip_remove__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::eff_smoke_slip_remove() { - /* Nonmatching */ -} - -/* 00002AD4-00002B48 .text mode_wait_init__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::mode_wait_init() { - /* Nonmatching */ -} - -/* 00002B48-00002D84 .text mode_wait__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::mode_wait() { - /* Nonmatching */ -} - -/* 00002D84-00002DA4 .text mode_walk_init__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::mode_walk_init() { - /* Nonmatching */ -} - -/* 00002DA4-000031AC .text mode_walk__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::mode_walk() { - /* Nonmatching */ -} - -/* 000031AC-000031D4 .text mode_afl_init__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::mode_afl_init() { - /* Nonmatching */ -} - -/* 000031D4-000033D8 .text mode_afl__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::mode_afl() { - /* Nonmatching */ -} - -/* 000033D8-00003450 .text make_item__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::make_item() { - /* Nonmatching */ -} - -/* 00003450-00003570 .text eff_break__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::eff_break() { - /* Nonmatching */ -} - -/* 00003570-00003808 .text sound_break__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::sound_break() { - /* Nonmatching */ -} - -/* 00003808-00003948 .text __dt__14dBgS_ObjGndChkFv */ -dBgS_ObjGndChk::~dBgS_ObjGndChk() { - /* Nonmatching */ -} - -/* 00003948-00003A60 .text __dt__11dBgS_GndChkFv */ -dBgS_GndChk::~dBgS_GndChk() { - /* Nonmatching */ -} - -/* 00003A60-00003AE0 .text __dt__11cBgS_GndChkFv */ -cBgS_GndChk::~cBgS_GndChk() { - /* Nonmatching */ -} - -/* 00003AE0-00003BA4 .text sound_slip__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::sound_slip() { - /* Nonmatching */ -} - -/* 00003BA4-00003C68 .text sound_limit__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::sound_limit() { - /* Nonmatching */ -} - -/* 00003C68-00003D2C .text sound_land__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::sound_land() { - /* Nonmatching */ -} - -/* 00003D2C-00003D80 .text vib_land__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::vib_land() { - /* Nonmatching */ -} - -/* 00003D80-00003E04 .text eff_land_smoke__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::eff_land_smoke() { - /* Nonmatching */ -} - -/* 00003E04-000040D0 .text Execute__Q212daObjMovebox5Act_cFPPA3_A4_f */ -void daObjMovebox::Act_c::Execute(float(**)[3][4]) { - /* Nonmatching */ -} - -/* 000040D0-00004254 .text Draw__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::Draw() { - /* Nonmatching */ -} - -/* 00004254-000042A0 .text Delete__Q212daObjMovebox5Act_cFv */ -void daObjMovebox::Act_c::Delete() { - /* Nonmatching */ -} - -/* 000042A0-000044E0 .text Mthd_Create__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ -void daObjMovebox::@unnamed@d_a_obj_movebox_cpp@::Mthd_Create(void*) { - /* Nonmatching */ -} - -/* 000044E0-00004544 .text Mthd_Delete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ -void daObjMovebox::@unnamed@d_a_obj_movebox_cpp@::Mthd_Delete(void*) { - /* Nonmatching */ -} - -/* 00004544-00004564 .text Mthd_Execute__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ -void daObjMovebox::@unnamed@d_a_obj_movebox_cpp@::Mthd_Execute(void*) { - /* Nonmatching */ -} - -/* 00004564-00004590 .text Mthd_Draw__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ -void daObjMovebox::@unnamed@d_a_obj_movebox_cpp@::Mthd_Draw(void*) { - /* Nonmatching */ -} - -/* 00004590-000045BC .text Mthd_IsDelete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ -void daObjMovebox::@unnamed@d_a_obj_movebox_cpp@::Mthd_IsDelete(void*) { - /* Nonmatching */ -} - -/* 000045BC-00004648 .text __dt__Q212daObjMovebox10EffSmokeCBFv */ -daObjMovebox::EffSmokeCB::~EffSmokeCB() { - /* Nonmatching */ -} - -/* 00004648-00004688 .text __ct__Q212daObjMovebox10EffSmokeCBFv */ -daObjMovebox::EffSmokeCB::EffSmokeCB() { - /* Nonmatching */ -} - -/* 00004688-00004754 .text __dt__8dCcD_CylFv */ -dCcD_Cyl::~dCcD_Cyl() { - /* Nonmatching */ -} - -/* 00004754-0000479C .text __dt__8cM3dGCylFv */ -cM3dGCyl::~cM3dGCyl() { - /* Nonmatching */ -} - -/* 0000479C-000047F8 .text __dt__14cCcD_ShapeAttrFv */ -cCcD_ShapeAttr::~cCcD_ShapeAttr() { - /* Nonmatching */ -} - -/* 000047F8-00004840 .text __dt__8cM3dGAabFv */ -cM3dGAab::~cM3dGAab() { - /* Nonmatching */ -} - -/* 00004840-0000489C .text __dt__10dCcD_GSttsFv */ -dCcD_GStts::~dCcD_GStts() { - /* Nonmatching */ -} - -/* 0000489C-000048A4 .text Draw__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::Draw() { - /* Nonmatching */ -} - -/* 000048A4-000048AC .text IsDelete__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::IsDelete() { - /* Nonmatching */ -} - -/* 000048AC-000048B4 .text CreateHeap__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::CreateHeap() { - /* Nonmatching */ -} - -/* 000048B4-000048BC .text Create__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::Create() { - /* Nonmatching */ -} - -/* 000048BC-000048C4 .text Execute__16dBgS_MoveBgActorFPPA3_A4_f */ -void dBgS_MoveBgActor::Execute(float(**)[3][4]) { - /* Nonmatching */ -} - -/* 000048C4-000048CC .text Delete__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::Delete() { - /* Nonmatching */ -} - -/* 000048CC-000048D4 .text ToFore__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::ToFore() { - /* Nonmatching */ -} - -/* 000048D4-000048DC .text ToBack__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::ToBack() { - /* Nonmatching */ -} - -/* 000048DC-00004924 .text __dt__10cCcD_GSttsFv */ -cCcD_GStts::~cCcD_GStts() { - /* Nonmatching */ -} - -/* 00004924-00004928 .text draw__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::draw(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00004928-0000492C .text executeAfter__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::executeAfter(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 0000492C-00004930 .text execute__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::execute(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00004930-00004934 .text init__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::init(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00004934-0000497C .text __dt__34JPACallBackBaseFv */ -JPACallBackBase::~JPACallBackBase() { - /* Nonmatching */ -} - -/* 0000497C-000049D8 .text __dt__18dPa_levelEcallBackFv */ -dPa_levelEcallBack::~dPa_levelEcallBack() { - /* Nonmatching */ -} - -/* 000049D8-000049E8 .text GetShapeAttr__8dCcD_CylFv */ -void dCcD_Cyl::GetShapeAttr() { - /* Nonmatching */ -} - -/* 000049E8-000049F0 .text GetCoCP__12cCcD_CylAttrFv */ -void cCcD_CylAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 000049F0-000049F8 .text GetCoCP__12cCcD_CylAttrCFv */ -void cCcD_CylAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 000049F8-00004A00 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00004A00-00004A08 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00004A08-00004A40 .text CrossAtTg__12cCcD_CylAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00004A40-00004A48 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_AabAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 00004A48-00004A50 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_TriAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 00004A50-00004A58 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_PntAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 00004A58-00004A90 .text CrossCo__12cCcD_CylAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00004A90-00004A94 .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} - -/* 00004A94-00004A9C .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ -} - -/* 00004A9C-00004AA4 .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00004AA4-00004AAC .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00004AAC-00004AB8 .text GetCoCP__14cCcD_ShapeAttrFv */ -void cCcD_ShapeAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 00004AB8-00004AC4 .text GetCoCP__14cCcD_ShapeAttrCFv */ -void cCcD_ShapeAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 00004AC4-00004AE0 .text PrmAbstract__5daObjFPC10fopAc_ac_cQ312daObjMovebox5Act_c5Prm_eQ312daObjMovebox5Act_c5Prm_e */ -void daObj::PrmAbstract(const fopAc_ac_c*, daObjMovebox::Act_c::Prm_e, daObjMovebox::Act_c::Prm_e) { - /* Nonmatching */ -} - -/* 00004B8C-00004BC4 .text __arraydtor$4060 */ -void __arraydtor$4060 { - /* Nonmatching */ -} - -/* 00004BC4-00004D34 .text __ct__14dBgS_ObjLinChkFv */ -dBgS_ObjLinChk::dBgS_ObjLinChk() { - /* Nonmatching */ -} - -/* 00004D34-00004E58 .text __dt__11dBgS_WtrChkFv */ -dBgS_WtrChk::~dBgS_WtrChk() { - /* Nonmatching */ -} - -/* 00004E58-00004E90 .text __arraydtor$4057 */ -void __arraydtor$4057 { - /* Nonmatching */ -} - -/* 00004E90-00004F94 .text __ct__14dBgS_ObjGndChkFv */ -dBgS_ObjGndChk::dBgS_ObjGndChk() { - /* Nonmatching */ -} - -/* 00004F94-00005090 .text __dt__14dBgS_SplGrpChkFv */ -dBgS_SplGrpChk::~dBgS_SplGrpChk() { - /* Nonmatching */ -} - -/* 00005090-00005098 .text @16@__dt__11dBgS_WtrChkFv */ -void @16@__dt__11dBgS_WtrChkFv { - /* Nonmatching */ -} - -/* 00005098-000050A0 .text @48@__dt__11dBgS_WtrChkFv */ -void @48@__dt__11dBgS_WtrChkFv { - /* Nonmatching */ -} - -/* 000050A0-000050A8 .text @36@__dt__11dBgS_WtrChkFv */ -void @36@__dt__11dBgS_WtrChkFv { - /* Nonmatching */ -} - -/* 000050A8-000050B0 .text @16@__dt__14dBgS_SplGrpChkFv */ -void @16@__dt__14dBgS_SplGrpChkFv { - /* Nonmatching */ -} - -/* 000050B0-000050B8 .text @48@__dt__14dBgS_SplGrpChkFv */ -void @48@__dt__14dBgS_SplGrpChkFv { - /* Nonmatching */ -} - -/* 000050B8-000050C0 .text @36@__dt__14dBgS_SplGrpChkFv */ -void @36@__dt__14dBgS_SplGrpChkFv { - /* Nonmatching */ -} - -/* 000050C0-000050C8 .text @20@__dt__11cBgS_LinChkFv */ -void @20@__dt__11cBgS_LinChkFv { - /* Nonmatching */ -} - -/* 000050C8-000050D0 .text @12@__dt__8dBgS_ChkFv */ -void @12@__dt__8dBgS_ChkFv { - /* Nonmatching */ -} - -/* 000050D0-000050D8 .text @20@__dt__11dBgS_LinChkFv */ -void @20@__dt__11dBgS_LinChkFv { - /* Nonmatching */ -} - -/* 000050D8-000050E0 .text @100@__dt__11dBgS_LinChkFv */ -void @100@__dt__11dBgS_LinChkFv { - /* Nonmatching */ -} - -/* 000050E0-000050E8 .text @88@__dt__11dBgS_LinChkFv */ -void @88@__dt__11dBgS_LinChkFv { - /* Nonmatching */ -} - -/* 000050E8-000050F0 .text @20@__dt__14dBgS_ObjLinChkFv */ -void @20@__dt__14dBgS_ObjLinChkFv { - /* Nonmatching */ -} - -/* 000050F0-000050F8 .text @100@__dt__14dBgS_ObjLinChkFv */ -void @100@__dt__14dBgS_ObjLinChkFv { - /* Nonmatching */ -} - -/* 000050F8-00005100 .text @88@__dt__14dBgS_ObjLinChkFv */ -void @88@__dt__14dBgS_ObjLinChkFv { - /* Nonmatching */ -} - -/* 00005100-00005108 .text @20@__dt__11dBgS_GndChkFv */ -void @20@__dt__11dBgS_GndChkFv { - /* Nonmatching */ -} - -/* 00005108-00005110 .text @76@__dt__11dBgS_GndChkFv */ -void @76@__dt__11dBgS_GndChkFv { - /* Nonmatching */ -} - -/* 00005110-00005118 .text @64@__dt__11dBgS_GndChkFv */ -void @64@__dt__11dBgS_GndChkFv { - /* Nonmatching */ -} - -/* 00005118-00005120 .text @20@__dt__14dBgS_ObjGndChkFv */ -void @20@__dt__14dBgS_ObjGndChkFv { - /* Nonmatching */ -} - -/* 00005120-00005128 .text @76@__dt__14dBgS_ObjGndChkFv */ -void @76@__dt__14dBgS_ObjGndChkFv { - /* Nonmatching */ -} - -/* 00005128-00005130 .text @64@__dt__14dBgS_ObjGndChkFv */ -void @64@__dt__14dBgS_ObjGndChkFv { - /* Nonmatching */ -} - -/* 00005130-00005138 .text @20@__dt__11cBgS_GndChkFv */ -void @20@__dt__11cBgS_GndChkFv { - /* Nonmatching */ -} - -/* 00005138-00005140 .text @280@__dt__8dCcD_CylFv */ -void @280@__dt__8dCcD_CylFv { - /* Nonmatching */ -} - -/* 00005140-00005148 .text @248@__dt__8dCcD_CylFv */ -void @248@__dt__8dCcD_CylFv { - /* Nonmatching */ -} - +namespace daObjMovebox { + struct Act_c; + + struct Type_Attr { + /* 0x00 */ u8 temp00[0x14 - 0x00]; + /* 0x14 */ f32 unk14; + /* 0x18 */ u8 temp18[0x20 - 0x18]; + /* 0x20 */ f32 unk20; + /* 0x24 */ f32 unk24; + /* 0x28 */ u8 temp28[0x58 - 0x28]; + /* 0x58 */ s32 mModelFileIndex; + /* 0x5C */ u32 mDZBFileIndex; + /* 0x60 */ u32 mDZBMaxSize; + /* 0x64 */ f32 unk64; + /* 0x68 */ u8 temp68[0x70 - 0x68]; + /* 0x70 */ f32 unk70; + /* 0x74 */ u8 temp74[0x9A - 0x74]; + /* 0x9A */ u8 unk9A; + }; // Size: 0x9C + + struct BgcSrc_c { + + }; + + struct Bgc_c { + public: + Bgc_c(); + ~Bgc_c(); + void gnd_pos(const Act_c*, const BgcSrc_c*, int, float); + void wrt_pos(const cXyz&); + void wall_pos(const Act_c*, const BgcSrc_c*, int, short, float); + void proc_vertical(Act_c*); + void chk_wall_pre(const Act_c*, const BgcSrc_c*, int, short); + void chk_wall_touch(const Act_c*, const BgcSrc_c*, short); + void chk_wall_touch2(const Act_c*, const BgcSrc_c*, int, short); + + public: + /* 0x000 */ f32 field0[0x17]; + /* 0x05C */ s32 field1; + /* 0x060 */ f32 field2; + /* 0x064 */ cXyz field4[0x17]; + /* 0x178 */ s32 field5; + /* 0x17C */ f32 field6; + /* 0x180 */ s32 field7; + }; // Size: 0x184 + + class EffSmokeCB { // TODO inherit dPa_smokeEcallBack + public: + EffSmokeCB() {} + virtual ~EffSmokeCB() {} + + public: + /* 0x0 */ u8 field_0x0[0x30]; + }; + + struct Act_c : public dBgS_MoveBgActor { + public: + enum Type { + TYPE_BREAKABLE_WOODEN_CRATE = 0x0, // Actor names: Kkiba or DKkiba + TYPE_BLACK_BOX = 0x1, // Actor names: osiBLK0 or DBLK0 + TYPE_BLACK_BOX_WITH_STATUE = 0x2, // Actor names: osiBLK1 or DBLK1 + TYPE_BIG_BLACK_BOX = 0x3, // Actor names: MpwrB + TYPE_WOODEN_CRATE = 0x4, // Actor names: (N/A) + TYPE_GOLDEN_CRATE = 0x5, // Actor names: Hbox2 + TYPE_METAL_BOX = 0x6, // Actor names: Hbox1 + TYPE_METAL_BOX_WITH_SPRING = 0x7, // Actor names: Hjump1 + TYPE_WOODEN_CRATE_2 = 0x8, // Actor names: Hseki2 + TYPE_WOODEN_CRATE_3 = 0x9, // Actor names: Hseki7 + TYPE_MIRROR = 0xA, // Actor names: Mmrr + TYPE_BLACK_BOX_2 = 0xB, // Actor names: MkieBB + TYPE_MOSSY_BLACK_BOX = 0xC, // Actor names: Ecube + }; + + enum Mode { + MODE_WAIT = 0x0, + MODE_WALK = 0x1, + MODE_AFLOAT = 0x2, + }; + + enum Prm_e { + PRM_TYPE_W = 0x04, + PRM_TYPE_S = 0x18, + + PRM_SWSAVE_W = 0x01, + PRM_SWSAVE_S = 0x1E, + + PRM_SWSAVE1_W = 0x08, + PRM_SWSAVE1_S = 0x08, + + PRM_ITEMNO_W = 0x06, + PRM_ITEMNO_S = 0x00, + + PRM_ITEMSAVE_W = 0x07, + PRM_ITEMSAVE_S = 0x10, + + PRM_BUOY_W = 0x01, + PRM_BUOY_S = 0x1F, + }; + + inline s32 Mthd_Create(); + inline s32 Mthd_Delete(); + + s32 prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); } + s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); } + s32 prm_get_swSave1() const; + s32 prmZ_get_swSave2() const { return mType == TYPE_BLACK_BOX_2 ? 0xFF : (u8)(mPrmZ >> 8); } + s32 prmZ_get_pathId() const { return mType == TYPE_BLACK_BOX_2 ? 0xFF : (mPrmZ & 0x00FF) >> 0; } + s32 prmX_get_evId() const { return (mPrmX & 0x00FF) >> 0; } + s32 prm_get_itemNo() const { return daObj::PrmAbstract(this, PRM_ITEMNO_W, PRM_ITEMNO_S); } + s32 prm_get_itemSave() const { return daObj::PrmAbstract(this, PRM_ITEMSAVE_W, PRM_ITEMSAVE_S); } + s32 prm_get_buoy() const { return daObj::PrmAbstract(this, PRM_BUOY_W, PRM_BUOY_S); } + s32 prm_get_dmy() const; // Unused? + + BOOL is_switch1() const { return fopAcM_isSwitch(this, prm_get_swSave1()); }; + BOOL is_switch2() const { return fopAcM_isSwitch(this, prmZ_get_swSave2()); }; + void on_switch1() const { fopAcM_onSwitch(this, prm_get_swSave1()); }; + void on_switch2() const { fopAcM_onSwitch(this, prmZ_get_swSave2()); }; + void off_switch1() const { fopAcM_offSwitch(this, prm_get_swSave1()); }; + void off_switch2() const { fopAcM_offSwitch(this, prmZ_get_swSave2()); }; + + void prmZ_init(); + void prmX_init(); + const Type_Attr* attr() const; + void set_mtx(); + void init_mtx(); + void path_init(); + void path_save(); + int CreateHeap(); + void RideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*); + static fopAc_ac_c* PPCallBack(fopAc_ac_c*, fopAc_ac_c*, short, dBgW::PushPullLabel); + int Create(); + void afl_sway(); + void check_to_walk(); + void clr_moment_cnt(); + s32 chk_appear() const; + void eff_set_slip_smoke_pos(); + void eff_smoke_slip_start(); + void eff_smoke_slip_end(); + void eff_smoke_slip_remove(); + void mode_wait_init(); + void mode_wait(); + void mode_walk_init(); + void mode_walk(); + void mode_afl_init(); + void mode_afl(); + void make_item(); + void eff_break(); + void sound_break(); + void sound_slip(); + void sound_limit(); + void sound_land(); + void vib_land(); + void eff_land_smoke(); + int Execute(float(**)[3][4]); + int Draw(); + int Delete(); + + public: + /* 0x2C8 */ request_of_phase_process_class mPhs; + /* 0x2D0 */ Mtx mMtx; + /* 0x300 */ J3DModel* mpModel; + /* 0x304 */ u32 mMode; + /* 0x308 */ dCcD_Stts mStts; + /* 0x344 */ dCcD_Cyl mCyl; + /* 0x474 */ Bgc_c mBgc; + /* 0x5F8 */ s32 mType; + /* 0x5FC */ u16 mPrmZ; + /* 0x5FE */ u16 mPrmX; + /* 0x600 */ dPath* mPath; + /* 0x604 */ u8 temp4[0x624 - 0x604]; + /* 0x624 */ f32 mUnknown624; + /* 0x628 */ u8 temp7[0x634 - 0x628]; + /* 0x634 */ s32 mUnknown634; + /* 0x638 */ u32 mPPLabel; + /* 0x63C */ s16 mMomentCnt[4]; + /* 0x644 */ u8 temp6[0x64A - 0x644]; + /* 0x64A */ bool mbUnknown64A; + /* 0x64B */ bool mbUnknown64B; + /* 0x64C */ u8 mbShouldAppear; + /* 0x64D */ bool mbPrmZInitialized; + /* 0x64E */ bool mbPrmXInitialized; + /* 0x64F */ bool mbUnknown64F; + /* 0x650 */ EffSmokeCB mPtclSmokeCb[2]; + /* 0x6B8 */ s32 mBuoyProcId; + /* 0x6BC */ u8 temp5[0x6C0 - 0x6BC]; + + static const char* const M_arcname[13]; + static const dCcD_SrcCyl M_cyl_src; + static const Type_Attr M_attr[13]; + }; + + STATIC_ASSERT(sizeof(Act_c) == 0x6C0); + + const char* const Act_c::M_arcname[13] = { + "Kkiba_00", + "Osiblk", + "Osiblk", + "MpwrB", + "Kkiba_00", + "Hbox2", + "Hjump", + "Hjump", + "Kkiba_00", + "Kkiba_00", + "Mmirror", + "Osiblk", + "Ecube", + }; + + const dCcD_SrcCyl Act_c::M_cyl_src = { + 0, + 0, + 0, + 0, + AT_TYPE_BOMB, // Tg damage types + 0x09, + 0x79, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + // Cylinder + 0.0, // X + 0.0, // Y + 0.0, // Z + 75.0, // Radius + 150.0, // Height + }; + + const Type_Attr Act_c::M_attr[13] = { + // TYPE_BREAKABLE_WOODEN_CRATE + // Arcname: Kkiba_00 + { + // TODO + /* mModelFileIndex */ 4, + /* mDZBFileIndex */ 7, + /* mDZBMaxSize */ 0x8A0, + }, + // TYPE_BLACK_BOX + // Arcname: Osiblk + { + // TODO + /* mModelFileIndex */ 4, + /* mDZBFileIndex */ 8, + /* mDZBMaxSize */ 0x8A0, + }, + // TYPE_BLACK_BOX_WITH_STATUE + // Arcname: Osiblk + { + // TODO + /* mModelFileIndex */ 5, + /* mDZBFileIndex */ 9, + /* mDZBMaxSize */ 0x1560, + }, + // TYPE_BIG_BLACK_BOX + // Arcname: MpwrB + { + // TODO + }, + // TYPE_WOODEN_CRATE + // Arcname: Kkiba_00 + { + // TODO + }, + // TYPE_GOLDEN_CRATE + // Arcname: Hbox2 + { + // TODO + }, + // TYPE_METAL_BOX + // Arcname: Hjump + { + // TODO + }, + // TYPE_METAL_BOX_WITH_SPRING + // Arcname: Hjump + { + // TODO + }, + // TYPE_WOODEN_CRATE_2 + // Arcname: Kkiba_00 + { + // TODO + }, + // TYPE_WOODEN_CRATE_3 + // Arcname: Kkiba_00 + { + // TODO + }, + // TYPE_MIRROR + // Arcname: Mmirror + { + // TODO + }, + // TYPE_BLACK_BOX_2 + // Arcname: Osiblk + { + // TODO + }, + // TYPE_MOSSY_BLACK_BOX + // Arcname: Ecube + { + // TODO + }, + }; + + s32 Act_c::Mthd_Create() { + fopAcM_SetupActor(this, Act_c); + + s32 phase_state; + mType = prm_get_type(); + phase_state = cPhs_ERROR_e; + prmX_init(); + prmZ_init(); + + mbShouldAppear = chk_appear(); + if (mbShouldAppear) { + phase_state = dComIfG_resLoad(&mPhs, M_arcname[mType]); + if (phase_state == cPhs_COMPLEATE_e) { + const Type_Attr* attr = &M_attr[mType]; + u32 maxSize = attr->mDZBMaxSize; + path_init(); + attr = &M_attr[mType]; + phase_state = MoveBGCreate(M_arcname[mType], attr->mDZBFileIndex, dBgS_MoveBGProc_Trans, maxSize); + JUT_ASSERT(0x7CE, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e)); + } + } + + return phase_state; + } + + s32 Act_c::Mthd_Delete() { + s32 result = MoveBGDelete(); + if (mbShouldAppear) { + dComIfG_resDelete(&mPhs, M_arcname[mType]); + } + return result; + } + + /* 000000EC-000001B0 .text __ct__Q212daObjMovebox5Bgc_cFv */ + Bgc_c::Bgc_c() { + /* Nonmatching (rodata only) */ + for (int i = 0; i < ARRAY_SIZE(field0); i++) { + field0[i] = 0.0f; + field4[i] = cXyz::Zero; + } + field1 = -1; + field5 = -1; + field6 = FLOAT_MAX; + field2 = 0.0f; + field7 = 0; + } + + /* 000001F0-000003A4 .text gnd_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cif */ + void Bgc_c::gnd_pos(const Act_c*, const BgcSrc_c*, int, float) { + /* Nonmatching */ + } + + /* 000003A4-00000474 .text wrt_pos__Q212daObjMovebox5Bgc_cFRC4cXyz */ + void Bgc_c::wrt_pos(const cXyz&) { + /* Nonmatching */ + } + + /* 00000474-00000748 .text wall_pos__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cisf */ + void Bgc_c::wall_pos(const Act_c*, const BgcSrc_c*, int, short, float) { + /* Nonmatching */ + } + + /* 00000748-000008E8 .text proc_vertical__Q212daObjMovebox5Bgc_cFPQ212daObjMovebox5Act_c */ + void Bgc_c::proc_vertical(Act_c*) { + /* Nonmatching */ + } + + /* 000008E8-00000928 .text chk_wall_pre__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */ + void Bgc_c::chk_wall_pre(const Act_c*, const BgcSrc_c*, int, short) { + /* Nonmatching */ + } + + /* 00000928-00000CCC .text chk_wall_touch__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cs */ + void Bgc_c::chk_wall_touch(const Act_c*, const BgcSrc_c*, short) { + /* Nonmatching */ + } + + /* 00001258-000012E0 .text chk_wall_touch2__Q212daObjMovebox5Bgc_cFPCQ212daObjMovebox5Act_cPCQ212daObjMovebox8BgcSrc_cis */ + void Bgc_c::chk_wall_touch2(const Act_c*, const BgcSrc_c*, int, short) { + /* Nonmatching */ + } + + /* 000012E0-00001308 .text prm_get_swSave1__Q212daObjMovebox5Act_cCFv */ + s32 Act_c::prm_get_swSave1() const { + return daObj::PrmAbstract(this, PRM_SWSAVE1_W, PRM_SWSAVE1_S); + } + + /* 00001308-00001380 .text prmZ_init__Q212daObjMovebox5Act_cFv */ + void Act_c::prmZ_init() { + if (mbPrmZInitialized) { + return; + } + mbPrmZInitialized = true; + + s32 switchEnablesSpawn = prm_get_swSave(); + if (switchEnablesSpawn) { + // The appearing/disappearing type of box does not take pathId or swSave2 params. + mPrmZ = 0xFFFF; + } else { + mPrmZ = orig.angle.z; + } + + orig.angle.z = 0; + current.angle.z = 0; + shape_angle.z = 0; + } + + /* 00001380-000013B0 .text prmX_init__Q212daObjMovebox5Act_cFv */ + void Act_c::prmX_init() { + if (!mbPrmXInitialized) { + mPrmX = orig.angle.x; + mbPrmXInitialized = true; + } + + orig.angle.x = 0; + current.angle.x = 0; + shape_angle.x = 0; + } + + /* 000013B0-000013C8 .text attr__Q212daObjMovebox5Act_cCFv */ + const Type_Attr* Act_c::attr() const { + return &M_attr[mType]; + } + + /* 000013C8-00001674 .text set_mtx__Q212daObjMovebox5Act_cFv */ + void Act_c::set_mtx() { + /* Nonmatching */ + Quaternion temp2; + cXyz temp3; + Mtx temp4; + Vec temp5; + + bool isFloating = mMode == MODE_AFLOAT; + mDoMtx_stack_c::transS(getPosition()); + if (isFloating) { + mDoMtx_stack_c::transM(0.0f, mUnknown624, 0.0f); + } + + daObj::quat_rotBaseY(&temp2, temp3); + + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + if (isFloating) { + mDoMtx_stack_c::transM(0.0f, -mUnknown624, 0.0f); + } + + if (mpModel) { + mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + } + MTXCopy(mDoMtx_stack_c::get(), mMtx); + + fopAc_ac_c* buoy; + if (fopAcM_SearchByID(mBuoyProcId, &buoy)) { + if (mType == TYPE_METAL_BOX_WITH_SPRING) { + if (buoy->current.pos.abs2(current.pos) < 0.0001f) { + buoy->current.pos = current.pos; + } + } else if (mType == TYPE_MIRROR) { + if (buoy->current.pos.abs2(current.pos) < 0.0001f) { + buoy->current.pos = current.pos; + } + } else if (mType == TYPE_BLACK_BOX_2) { + if (buoy->current.pos.abs2(current.pos) < 0.0001f) { + buoy->current.pos = current.pos; + } + } else { + mDoMtx_multVecSR(temp4, &temp5, &temp5); + mDoMtx_copy(temp4, temp4); + } + } else { + mBuoyProcId = -1; + } + } + + /* 00001674-000016B8 .text init_mtx__Q212daObjMovebox5Act_cFv */ + void Act_c::init_mtx() { + if (mpModel) { + mpModel->mBaseScale = mScale; + } + set_mtx(); + } + + /* 000016B8-00001830 .text path_init__Q212daObjMovebox5Act_cFv */ + void Act_c::path_init() { + // Load the position the box was last left pushed to based on the path and switch(es). + s32 pathId = prmZ_get_pathId(); + s32 swSave1 = prm_get_swSave1(); + if (pathId != 0xFF && swSave1 != 0xFF) { + s32 swSave2 = prmZ_get_swSave2(); + + bool isMoved1 = is_switch1(); + u32 isMoved2 = false; + if (0xFF == swSave2) { // Literal must be on the left hand side for a match + isMoved2 = false; + } else { + isMoved2 = is_switch2(); + isMoved2 = !!isMoved2; + } + isMoved2 = !!isMoved2; + + s32 pntIdx = 0; + if (isMoved1 != false) { + pntIdx = 1; + } + if (isMoved2) { + pntIdx += 2; + } + + mPath = dPath_GetRoomPath(pathId, orig.roomNo); + dPath__Point* pnt = dPath_GetPnt(mPath, pntIdx); + orig.pos = pnt->mPos; + current.pos = pnt->mPos; + } + } + + /* 00001830-00001A10 .text path_save__Q212daObjMovebox5Act_cFv */ + void Act_c::path_save() { + /* Nonmatching (rodata only) */ + // Determine how far along the path the box has been pushed and save the position to the switch(es). + // Supports up to 4 possible path points. + s32 pathId = prmZ_get_pathId(); + s32 swSave1 = prm_get_swSave1(); + if (pathId != 0xFF && swSave1 != 0xFF) { + s32 swSave2 = prmZ_get_swSave2(); + + s32 numPnts; + if (0xFF == swSave2) { // Literal must be on the left hand side for a match + numPnts = 2; + } else { + numPnts = 4; + } + if (numPnts > mPath->mNum) { + numPnts = mPath->mNum; + } + + s32 pntIdx; + for (pntIdx = 0; pntIdx < numPnts; pntIdx++) { + cXyz pntPos = dPath_GetPnt(mPath, pntIdx)->mPos; + if (current.pos.abs2(pntPos) < 9.0f) { + break; + } + } + if (pntIdx >= numPnts) { + return; + } + + // Store the low bit of the 2-bit index in swSave1. + if (pntIdx & 1) { + on_switch1(); + } else { + off_switch1(); + } + + if (swSave2 != 0xFF) { + // Store the high bit of the 2-bit index in swSave2. + if (pntIdx & 2) { + on_switch2(); + } else { + off_switch2(); + } + } + } + } + + /* 00001A10-00001B00 .text CreateHeap__Q212daObjMovebox5Act_cFv */ + int Act_c::CreateHeap() { + BOOL success = TRUE; + const Type_Attr* attr = &M_attr[mType]; + if (attr->mModelFileIndex >= 0) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname[mType], attr->mModelFileIndex); + JUT_ASSERT(0x6BA, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); + success = (mpModel != 0); + } else { + mpModel = NULL; + } + return success; + } + + /* 00001B00-00001C64 .text RideCallBack__Q212daObjMovebox5Act_cFP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ + void Act_c::RideCallBack(dBgW*, fopAc_ac_c*, fopAc_ac_c*) { + /* Nonmatching */ + } + + /* 00001C64-00001DD4 .text PPCallBack__Q212daObjMovebox5Act_cFP10fopAc_ac_cP10fopAc_ac_csQ24dBgW13PushPullLabel */ + fopAc_ac_c* Act_c::PPCallBack(fopAc_ac_c* actor, fopAc_ac_c*, s16 rot, dBgW::PushPullLabel pp_label) { + /* Nonmatching */ + Act_c* i_this = (Act_c*)actor; + + if (pp_label & 0x03) { + const Type_Attr* attr = &M_attr[i_this->mType]; + bool unk; + if (!attr->unk9A) { + unk = true; + } else { + unk = pp_label & 0x08; + } + if (unk) { + s32 origAngle = i_this->orig.angle.y; + s32 angle = rot; + if (pp_label & 0x2) { + angle -= 0x8000; + } + angle -= origAngle; + int pp_field = 3; + JUT_ASSERT(0x715, pp_label != pp_field); + + i_this->mPPLabel = pp_label; + + int whichSide; + if (angle >= -0x2000 && angle < 0x2000) { + whichSide = 0; + } else if (angle >= 0x2000 && angle < 0x6000) { + whichSide = 1; + } else if (angle >= 0x6000 || angle < -0x6000) { + whichSide = 2; + } else { + whichSide = 3; + } + + for (int i = 0; i < 4; i++) { + if (i == whichSide) { + i_this->mMomentCnt[i] += 1; + } else { + i_this->mMomentCnt[i] = 0; + } + } + + i_this->mbUnknown64A = true; + } + } + + return i_this; + } + + /* 00001DD4-00002214 .text Create__Q212daObjMovebox5Act_cFv */ + int Act_c::Create() { + /* Nonmatching */ + mCyl.Set(M_cyl_src); + } + + /* 00002214-000024D4 .text afl_sway__Q212daObjMovebox5Act_cFv */ + void Act_c::afl_sway() { + /* Nonmatching */ + } + + /* 000024D4-00002668 .text check_to_walk__Q212daObjMovebox5Act_cFv */ + void Act_c::check_to_walk() { + /* Nonmatching */ + } + + /* 00002668-0000268C .text clr_moment_cnt__Q212daObjMovebox5Act_cFv */ + void Act_c::clr_moment_cnt() { + for (int i = 0; i < 4; i++) { + mMomentCnt[i] = 0; + } + } + + /* 0000268C-00002768 .text chk_appear__Q212daObjMovebox5Act_cCFv */ + s32 Act_c::chk_appear() const { + // Boxes that do not have a path to save their position instead use swSave1 to enable or disable spawning. + s32 pathId = prmZ_get_pathId(); + int sw = prm_get_swSave1(); + if (pathId != 0xFF || sw == 0xFF) { + return TRUE; + } + + bool switchIsSet = is_switch1(); + bool switchEnablesSpawn = prm_get_swSave(); + BOOL shouldAppear = FALSE; + if ((!switchIsSet && !switchEnablesSpawn) || (switchIsSet && switchEnablesSpawn)) { + shouldAppear = TRUE; + } + return shouldAppear; + } + + /* 00002768-0000290C .text eff_set_slip_smoke_pos__Q212daObjMovebox5Act_cFv */ + void Act_c::eff_set_slip_smoke_pos() { + /* Nonmatching */ + } + + /* 0000290C-00002A14 .text eff_smoke_slip_start__Q212daObjMovebox5Act_cFv */ + void Act_c::eff_smoke_slip_start() { + /* Nonmatching */ + } + + /* 00002A14-00002A74 .text eff_smoke_slip_end__Q212daObjMovebox5Act_cFv */ + void Act_c::eff_smoke_slip_end() { + /* Nonmatching */ + } + + /* 00002A74-00002AD4 .text eff_smoke_slip_remove__Q212daObjMovebox5Act_cFv */ + void Act_c::eff_smoke_slip_remove() { + /* Nonmatching */ + } + + /* 00002AD4-00002B48 .text mode_wait_init__Q212daObjMovebox5Act_cFv */ + void Act_c::mode_wait_init() { + /* Nonmatching (rodata only) */ + speedF = 0.0f; + const Type_Attr* attr = &M_attr[mType]; + mGravity = attr->unk14; + mpBgW->m_crr_func = &dBgS_MoveBGProc_Trans; + clr_moment_cnt(); + mUnknown634 = -1; + mMode = MODE_WAIT; + } + + /* 00002B48-00002D84 .text mode_wait__Q212daObjMovebox5Act_cFv */ + void Act_c::mode_wait() { + /* Nonmatching */ + } + + /* 00002D84-00002DA4 .text mode_walk_init__Q212daObjMovebox5Act_cFv */ + void Act_c::mode_walk_init() { + /* Nonmatching (rodata only) */ + speedF = 0.0f; + mbUnknown64F = false; + mMode = MODE_WALK; + } + + /* 00002DA4-000031AC .text mode_walk__Q212daObjMovebox5Act_cFv */ + void Act_c::mode_walk() { + /* Nonmatching */ + } + + /* 000031AC-000031D4 .text mode_afl_init__Q212daObjMovebox5Act_cFv */ + void Act_c::mode_afl_init() { + /* Nonmatching (rodata only) */ + speedF = 0.0f; + mpBgW->m_crr_func = &dBgS_MoveBGProc_Typical; + mMode = MODE_AFLOAT; + } + + /* 000031D4-000033D8 .text mode_afl__Q212daObjMovebox5Act_cFv */ + void Act_c::mode_afl() { + /* Nonmatching */ + } + + /* 000033D8-00003450 .text make_item__Q212daObjMovebox5Act_cFv */ + void Act_c::make_item() { + /* Nonmatching */ + } + + /* 00003450-00003570 .text eff_break__Q212daObjMovebox5Act_cFv */ + void Act_c::eff_break() { + /* Nonmatching */ + } + + /* 00003570-00003808 .text sound_break__Q212daObjMovebox5Act_cFv */ + void Act_c::sound_break() { + /* Nonmatching */ + } + + /* 00003AE0-00003BA4 .text sound_slip__Q212daObjMovebox5Act_cFv */ + void Act_c::sound_slip() { + /* Nonmatching */ + } + + /* 00003BA4-00003C68 .text sound_limit__Q212daObjMovebox5Act_cFv */ + void Act_c::sound_limit() { + /* Nonmatching */ + } + + /* 00003C68-00003D2C .text sound_land__Q212daObjMovebox5Act_cFv */ + void Act_c::sound_land() { + /* Nonmatching */ + } + + /* 00003D2C-00003D80 .text vib_land__Q212daObjMovebox5Act_cFv */ + void Act_c::vib_land() { + /* Nonmatching */ + } + + /* 00003D80-00003E04 .text eff_land_smoke__Q212daObjMovebox5Act_cFv */ + void Act_c::eff_land_smoke() { + /* Nonmatching */ + } + + /* 00003E04-000040D0 .text Execute__Q212daObjMovebox5Act_cFPPA3_A4_f */ + int Act_c::Execute(float(**)[3][4]) { + /* Nonmatching */ + } + + /* 000040D0-00004254 .text Draw__Q212daObjMovebox5Act_cFv */ + int Act_c::Draw() { + /* Nonmatching */ + } + + /* 00004254-000042A0 .text Delete__Q212daObjMovebox5Act_cFv */ + int Act_c::Delete() { + /* Nonmatching */ + } + + namespace { + /* 000042A0-000044E0 .text Mthd_Create__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ + s32 Mthd_Create(void* i_this) { + return ((Act_c*)i_this)->Mthd_Create(); + } + + /* 000044E0-00004544 .text Mthd_Delete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ + s32 Mthd_Delete(void* i_this) { + return ((Act_c*)i_this)->Mthd_Delete(); + } + + /* 00004544-00004564 .text Mthd_Execute__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ + s32 Mthd_Execute(void* i_this) { + return ((Act_c*)i_this)->MoveBGExecute(); + } + + /* 00004564-00004590 .text Mthd_Draw__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ + s32 Mthd_Draw(void* i_this) { + return ((Act_c*)i_this)->Draw(); + } + + /* 00004590-000045BC .text Mthd_IsDelete__Q212daObjMovebox29@unnamed@d_a_obj_movebox_cpp@FPv */ + s32 Mthd_IsDelete(void* i_this) { + return ((Act_c*)i_this)->IsDelete(); + } + + 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, + }; + } +} + +extern actor_process_profile_definition g_profile_Obj_Movebox = { + fpcLy_CURRENT_e, + 3, + fpcLy_CURRENT_e, + PROC_Obj_Movebox, + &g_fpcLf_Method.mBase, + sizeof(daObjMovebox::Act_c), + 0, + 0, + &g_fopAc_Method.base, + 0x0015, + &daObjMovebox::Mthd_Table, + 0x00040524, + fopAc_ACTOR_e, + fopAc_CULLBOX_CUSTOM_e, +}; diff --git a/src/d/d_path.cpp b/src/d/d_path.cpp index f7bc1edea..8e46db926 100644 --- a/src/d/d_path.cpp +++ b/src/d/d_path.cpp @@ -3,16 +3,16 @@ // Translation Unit: d_path.cpp // -#include "d_path.h" +#include "d/d_path.h" #include "dolphin/types.h" /* 80080018-8008010C .text dPath_GetPnt__FP5dPathi */ -void dPath_GetPnt(dPath*, int) { +dPath__Point* dPath_GetPnt(dPath*, int) { /* Nonmatching */ } /* 8008010C-80080218 .text dPath_GetRoomPath__Fii */ -void dPath_GetRoomPath(int, int) { +dPath* dPath_GetRoomPath(int, int) { /* Nonmatching */ }