From a19d81f113fa264c01b63614efe0d2c60b4164ea Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Thu, 14 Sep 2023 20:12:10 -0400 Subject: [PATCH 01/25] Small but important fix for m_DoExt_McaMorf --- include/m_Do/m_Do_ext.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 31a554f4e..2f6f0506e 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -245,7 +245,7 @@ public: void play(Vec *, u32, u8); void stopZelAnime(); - u32 pad[0x50]; // J3DMtxCalcMaya + u32 pad[0x13]; // J3DMtxCalcMaya /* 0x50 */ J3DModel* mpModel; /* 0x54 */ J3DAnmTransform* mpAnm; /* 0x58 */ J3DFrameCtrl mFrameCtrl; From 4f68882864161b4af3c0fb46abaa3ce8cfe9af5f Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Thu, 14 Sep 2023 20:13:11 -0400 Subject: [PATCH 02/25] Better fix for m_DoExt_McaMorf lol --- include/m_Do/m_Do_ext.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 2f6f0506e..133d2f317 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -245,7 +245,7 @@ public: void play(Vec *, u32, u8); void stopZelAnime(); - u32 pad[0x13]; // J3DMtxCalcMaya + u8 pad[0x4C]; // J3DMtxCalcMaya /* 0x50 */ J3DModel* mpModel; /* 0x54 */ J3DAnmTransform* mpAnm; /* 0x58 */ J3DFrameCtrl mFrameCtrl; From 6aeb7e5aa8579cdfe967c778a648ba5617d3d76c Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Thu, 14 Sep 2023 23:28:30 -0400 Subject: [PATCH 03/25] Work on d_a_mozo --- src/d/actor/d_a_mozo.cpp | 369 +++++++++++++++++++++++---------------- 1 file changed, 223 insertions(+), 146 deletions(-) diff --git a/src/d/actor/d_a_mozo.cpp b/src/d/actor/d_a_mozo.cpp index 56d94259c..1492a279a 100644 --- a/src/d/actor/d_a_mozo.cpp +++ b/src/d/actor/d_a_mozo.cpp @@ -3,9 +3,84 @@ // Translation Unit: d_a_mozo.cpp // -#include "d_a_mozo.h" +#include "f_op/f_op_actor_mng.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "d/d_com_inf_game.h" +#include "d/d_kankyo.h" +#include "d/d_procname.h" +#include "d/d_cc_d.h" +#include "m_do/m_Do_mtx.h" +#include "m_Do/m_Do_ext.h" #include "dolphin/types.h" + +/*** HIO ***/ +class daMozo_HIO_c { +public: + daMozo_HIO_c(); + ~daMozo_HIO_c(); +}; + +static daMozo_HIO_c l_HIO; + +class daMozo_childHIO_c { +public: + ~daMozo_childHIO_c(); +}; + +class daMozo_FireChildHIO_c { +public: + ~daMozo_FireChildHIO_c(); +}; + +class daMozo_BeamChildHIO_c { +public: + ~daMozo_BeamChildHIO_c(); +}; + +/*** Actor ***/ +class daMozo_c : public fopAc_ac_c { +public: + s32 _create(); + bool _delete(); + bool _draw(); + bool _execute(); + void anime_proc(); + void checkRange(int); + s32 CreateHeap(); + s32 CreateInit(); + void event_move(); + void getBeamActor(u32); + void search_beam_proc(); + void search_beam_proc_init(); + void search_fire_proc(); + void search_fire_proc_init(); + void set_mtx(); + void setAnm(int, float); + void towait_proc(); + void towait_proc_init(); + void wait_proc(); + void wait_proc_init(); + + typedef void(daMozo_c::*proc_t)(void); + proc_t mCurrentProc; + request_of_phase_process_class mPhs; + + mDoExt_McaMorf* mAnimMorf; + + mDoExt_brkAnm mBrkAnm; + J3DAnmTevRegKey* m_brk; + + mDoExt_btkAnm mBtkAnm; + J3DAnmTextureSRTKey* m_btk; + + // ... + + dCcD_Stts mColStatus; + dCcD_Cps mCapsuleCol; +}; + /* 000000EC-000001D0 .text __ct__12daMozo_HIO_cFv */ daMozo_HIO_c::daMozo_HIO_c() { /* Nonmatching */ @@ -42,18 +117,53 @@ void daMozo_nodeCallBack(J3DNode*, int) { } /* 0000078C-000007AC .text CheckCreateHeap__FP10fopAc_ac_c */ -void CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +s32 CheckCreateHeap(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); } /* 000007AC-00000A24 .text CreateHeap__8daMozo_cFv */ -void daMozo_c::CreateHeap() { +s32 daMozo_c::CreateHeap() { /* Nonmatching */ + J3DModelData* mdlData = (J3DModelData*)dComIfG_getObjectRes("Mozo", 9); + + mDoExt_McaMorf* newMorf = new mDoExt_McaMorf( + mdlData, + 0, + 0, + static_cast(dComIfG_getObjectRes("Mozo", 6)), + 2, + 1.0f, + 0, + -1, + 0, + 0, + 0, + 0x11020203 + ); + + mAnimMorf = newMorf; + + m_brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Mozo", 0x0C); + JUT_ASSERT(0x16A, m_brk != 0); + + m_btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Mozo", 0x0F); + JUT_ASSERT(0x16D, m_btk != 0); + + int brkInitResult = mBrkAnm.init(mdlData, m_brk, true, 0, 1.0f, 0, -1, false, 0); + int btkInitResult = mBtkAnm.init(mdlData, m_btk, true, 0, 1.0f, 0, -1, false, 0); + + return mdlData != 0 && mAnimMorf != 0 && mAnimMorf->getModel() != 0 && brkInitResult != 0 && btkInitResult != 0; } /* 00000A24-00000AAC .text set_mtx__8daMozo_cFv */ void daMozo_c::set_mtx() { - /* Nonmatching */ + J3DModel* mdl = mAnimMorf->getModel(); + mdl->setBaseScale(mScale); + + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::YrotM(getAngle().y); + + mdl->i_setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000AAC-00000C38 .text anime_proc__8daMozo_cFv */ @@ -112,22 +222,75 @@ void daMozo_c::setAnm(int, float) { } /* 00001F70-00002228 .text CreateInit__8daMozo_cFv */ -void daMozo_c::CreateInit() { +s32 daMozo_c::CreateInit() { /* Nonmatching */ + J3DModelData* mdlData = mAnimMorf->getModel()->getModelData(); + + int param = mBase.mParameters * 0xFF; + if (param == 0xFF) { + param = 0; + } + + int a = 2; + if (param < 3) { + a = param; + } + + //m0376 = a; + + mAnimMorf->getModel()->setUserArea(this); + for (int i = 0; i < mdlData->getJointNum(); i++) { + if (i == 2) { + mdlData->getJointNodePointer(2)->setCallBack((J3DNodeCallBack)daMozo_nodeCallBack); + } + } + + //mQuatRotation = ZeroQuat; + + fopAcM_setCullSizeBox(this, -1000.f, -1000.f, -1000.f, 1000.0f, 1000.0f, 1000.0f); + mCullMtx = mAnimMorf->getModel()->getBaseTRMtx(); + + //m02F4 = getPosition(); + //m0300 = getPosition(); + + //if () + + set_mtx(); + mAnimMorf->calc(); + wait_proc_init(); + + return cPhs_COMPLEATE_e; } /* 00002228-000023B0 .text _create__8daMozo_cFv */ -void daMozo_c::_create() { +s32 daMozo_c::_create() { /* Nonmatching */ + fopAcM_SetupActor(this, daMozo_c); + + s32 result = dComIfG_resLoad(&mPhs, "Mozo"); + + if (result == cPhs_COMPLEATE_e) { + s32 solidHeapResult = fopAcM_entrySolidHeap(this, (heapCallbackFunc)CheckCreateHeap, 0x1AA0); + + if (solidHeapResult & 0xFF == 0) { + result = cPhs_ERROR_e; + } + else { + result = CreateInit(); + _execute(); + } + } + + return result; } /* 000023B0-0000242C .text _delete__8daMozo_cFv */ -void daMozo_c::_delete() { +bool daMozo_c::_delete() { /* Nonmatching */ } /* 0000242C-00002498 .text getBeamActor__8daMozo_cFUi */ -void daMozo_c::getBeamActor(unsigned int) { +void daMozo_c::getBeamActor(u32) { /* Nonmatching */ } @@ -137,38 +300,53 @@ void daMozo_c::event_move() { } /* 00002588-000025DC .text _execute__8daMozo_cFv */ -void daMozo_c::_execute() { - /* Nonmatching */ +bool daMozo_c::_execute() { + mAnimMorf->calc(); + + (this->*mCurrentProc)(); + event_move(); + set_mtx(); + + return true; } /* 000025DC-0000267C .text _draw__8daMozo_cFv */ -void daMozo_c::_draw() { +bool daMozo_c::_draw() { /* Nonmatching */ + J3DModelData* mdlData = mAnimMorf->getModel()->getModelData(); + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mAnimMorf->getModel(), &mTevStr); + + mBrkAnm.entry(mdlData); + mBtkAnm.entry(mdlData); + mAnimMorf->entryDL(); + + return true; } /* 0000267C-000026A0 .text daMozo_Draw__FP8daMozo_c */ -void daMozo_Draw(daMozo_c*) { - /* Nonmatching */ +s32 daMozo_Draw(daMozo_c* i_this) { + return i_this->_draw(); } /* 000026A0-000026C4 .text daMozo_Execute__FP8daMozo_c */ -void daMozo_Execute(daMozo_c*) { - /* Nonmatching */ +s32 daMozo_Execute(daMozo_c* i_this) { + return i_this->_execute(); } /* 000026C4-000026CC .text daMozo_IsDelete__FP8daMozo_c */ -void daMozo_IsDelete(daMozo_c*) { - /* Nonmatching */ +s32 daMozo_IsDelete(daMozo_c*) { + return TRUE; } /* 000026CC-000026F0 .text daMozo_Delete__FP8daMozo_c */ -void daMozo_Delete(daMozo_c*) { - /* Nonmatching */ +s32 daMozo_Delete(daMozo_c* i_this) { + return i_this->_delete(); } /* 000026F0-00002710 .text daMozo_Create__FP10fopAc_ac_c */ -void daMozo_Create(fopAc_ac_c*) { - /* Nonmatching */ +s32 daMozo_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->_create(); } /* 00002710-000027AC .text __dt__12daMozo_HIO_cFv */ @@ -176,128 +354,27 @@ daMozo_HIO_c::~daMozo_HIO_c() { /* Nonmatching */ } -/* 000027E8-000027F0 .text @280@__dt__8dCcD_CpsFv */ -void @280@__dt__8dCcD_CpsFv { - /* Nonmatching */ -} - -/* 000027F0-000027F8 .text @248@__dt__8dCcD_CpsFv */ -void @248@__dt__8dCcD_CpsFv { - /* Nonmatching */ -} - -/* 000027F8-00002834 .text __dt__4cXyzFv */ -cXyz::~cXyz() { - /* Nonmatching */ -} - -/* 00002834-00002914 .text __dt__8dCcD_CpsFv */ -dCcD_Cps::~dCcD_Cps() { - /* Nonmatching */ -} - -/* 00002914-00002924 .text GetShapeAttr__8dCcD_CpsFv */ -void dCcD_Cps::GetShapeAttr() { - /* Nonmatching */ -} - -/* 00002924-00002980 .text __dt__14cCcD_ShapeAttrFv */ -cCcD_ShapeAttr::~cCcD_ShapeAttr() { - /* Nonmatching */ -} - -/* 00002980-00002988 .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00002988-00002990 .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00002990-000029C8 .text CrossAtTg__12cCcD_CpsAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000029C8-000029D0 .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_AabAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 000029D0-000029D8 .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_TriAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 000029D8-000029E0 .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_PntAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 000029E0-00002A18 .text CrossCo__12cCcD_CpsAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00002A18-00002A24 .text GetCoCP__14cCcD_ShapeAttrFv */ -void cCcD_ShapeAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 00002A24-00002A30 .text GetCoCP__14cCcD_ShapeAttrCFv */ -void cCcD_ShapeAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 00002A30-00002A34 .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} - -/* 00002A34-00002A3C .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ -} - -/* 00002A3C-00002A44 .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00002A44-00002A4C .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00002A4C-00002AA8 .text __dt__8cM3dGCpsFv */ -cM3dGCps::~cM3dGCps() { - /* Nonmatching */ -} - -/* 00002AA8-00002AF0 .text __dt__8cM3dGLinFv */ -cM3dGLin::~cM3dGLin() { - /* Nonmatching */ -} - -/* 00002AF0-00002B38 .text __dt__8cM3dGAabFv */ -cM3dGAab::~cM3dGAab() { - /* Nonmatching */ -} - -/* 00002B38-00002B94 .text __dt__13mDoExt_btkAnmFv */ -mDoExt_btkAnm::~mDoExt_btkAnm() { - /* Nonmatching */ -} - -/* 00002B94-00002BF0 .text __dt__13mDoExt_brkAnmFv */ -mDoExt_brkAnm::~mDoExt_brkAnm() { - /* Nonmatching */ -} - -/* 00002BF0-00002C38 .text __dt__14mDoExt_baseAnmFv */ -mDoExt_baseAnm::~mDoExt_baseAnm() { - /* Nonmatching */ -} +static actor_method_class l_daMozo_Method = { + (process_method_func)daMozo_Create, + (process_method_func)daMozo_Delete, + (process_method_func)daMozo_Execute, + (process_method_func)daMozo_IsDelete, + (process_method_func)daMozo_Draw, +}; +extern actor_process_profile_definition g_profile_MOZO = { + fpcLy_CURRENT_e, + 7, + fpcPi_CURRENT_e, + PROC_MOZO, + &g_fpcLf_Method.mBase, + sizeof(daMozo_c), + 0, + 0, + &g_fopAc_Method.base, + 0x00D1, + &l_daMozo_Method, + 0x00040100, + fopAc_ACTOR_e, + fopAc_CULLBOX_CUSTOM_e, +}; From 331847e88ff809875cb2b643e8434a3a10b7446e Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sat, 16 Sep 2023 14:45:48 -0400 Subject: [PATCH 04/25] Add dEvt_Command_e, dEvt_Condition_e, and dNpc_MessageStatus_e; also implement those 3 in d_a_obj_paper. --- include/d/d_npc.h | 18 ++++++++++++++++++ include/f_op/f_op_actor.h | 18 ++++++++++++++++++ src/d/actor/d_a_obj_paper.cpp | 30 ++++++++++++++++++------------ 3 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 include/d/d_npc.h diff --git a/include/d/d_npc.h b/include/d/d_npc.h new file mode 100644 index 000000000..80a876d4b --- /dev/null +++ b/include/d/d_npc.h @@ -0,0 +1,18 @@ +#ifndef D_NPC_H +#define D_NPC_H + +enum dNpc_MessageStatus_e { + dNpcMsgStts_MSG_PREPARING_e = 0x01, + dNpcMsgStts_BOX_OPENING_e = 0x02, + dNpcMsgStts_MSG_TYPING_e = 0x06, + dNpcMsgStts_MSG_DISPLAYED_e = 0x0E, + + dNpcMsgStts_MSG_CONTINUES_e = 0x0F, + dNpcMsgStts_MSG_ENDS_e = 0x10, + + dNpcMsgStts_BOX_CLOSING_e = 0x11, + dNpcMsgStts_BOX_CLOSED_e = 0x12, + dNpcMsgStts_MSG_DESTROYED_e = 0x13, +}; + +#endif // D_NPC_H diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 05a15eb1c..d45434424 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -88,6 +88,24 @@ struct actor_process_profile_definition2 { class JKRSolidHeap; +enum dEvt_Command_e { + dEvtCmd_NONE_e, + dEvtCmd_INTALK_e, + dEvtCmd_INDEMO_e, + dEvtCmd_INDOOR_e, + dEvtCmd_INGETITEM_e, + dEvtCmd_DUMMY = 0xFFFF, +}; + +enum dEvt_Condition_e { + dEvtCnd_NONE_e = 0x0000, + dEvtCnd_CANTALK_e = 0x0001, + dEvtCnd_CANDOOR_e = 0x0004, + dEvtCnd_CANGETITEM_e = 0x0008, + dEvtCnd_CANTALKITEM_e = 0x0020, + dEvtCnd_DUMMY = 0x8000, +}; + class dEvt_info_c { public: dEvt_info_c(); diff --git a/src/d/actor/d_a_obj_paper.cpp b/src/d/actor/d_a_obj_paper.cpp index 8d653ce80..8c39962ba 100644 --- a/src/d/actor/d_a_obj_paper.cpp +++ b/src/d/actor/d_a_obj_paper.cpp @@ -14,6 +14,7 @@ #include "d/d_com_inf_game.h" #include "d/d_kankyo.h" #include "d/d_a_obj.h" +#include "d/d_npc.h" #include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_mtx.h" #include "dolphin/types.h" @@ -54,8 +55,6 @@ namespace daObjPaper { inline static int getEntryModelId(int idx) { return L_attr[idx].getModelId(); } } - static cXyz a(1.0f, 1.0f, 1.0f); - static const dCcD_SrcCyl M_cyl_src = { 0, 0, @@ -84,6 +83,13 @@ namespace daObjPaper { 0.0f, // Height }; + enum Act_Mode_e { + ActMode_WAIT_e, + ActMode_TALKBEGIN_e, + ActMode_GETMSG_e, + ActMode_TALKWAIT_e, + }; + class Act_c : public fopAc_ac_c { public: static int solidHeapCB(fopAc_ac_c*); @@ -220,25 +226,25 @@ namespace daObjPaper { /* 00000730-00000748 .text mode_wait_init__Q210daObjPaper5Act_cFv */ void daObjPaper::Act_c::mode_wait_init() { - mStatus |= 0x80; - mMode = 0; + mStatus |= fopAcStts_NOEXEC_e; + mMode = ActMode_WAIT_e; } /* 00000748-00000784 .text mode_wait__Q210daObjPaper5Act_cFv */ void daObjPaper::Act_c::mode_wait() { - if (mEvtInfo.mCommand == 1) { + if (mEvtInfo.mCommand == dEvtCmd_INTALK_e) { mode_talk0_init(); } else { - mEvtInfo.mCondition |= 1; + mEvtInfo.mCondition |= dEvtCnd_CANTALK_e; } } /* 00000784-000007A4 .text mode_talk0_init__Q210daObjPaper5Act_cFv */ void daObjPaper::Act_c::mode_talk0_init() { - mStatus &= ~0x80; + mStatus &= ~fopAcStts_NOEXEC_e; mMsgId = -1; - mMode = 1; + mMode = ActMode_TALKBEGIN_e; } /* 000007A4-00000820 .text mode_talk0__Q210daObjPaper5Act_cFv */ @@ -254,7 +260,7 @@ namespace daObjPaper { /* 00000820-0000082C .text mode_talk1_init__Q210daObjPaper5Act_cFv */ void daObjPaper::Act_c::mode_talk1_init() { - mMode = 2; + mMode = ActMode_GETMSG_e; } /* 0000082C-00000874 .text mode_talk1__Q210daObjPaper5Act_cFv */ @@ -267,13 +273,13 @@ namespace daObjPaper { /* 00000874-00000880 .text mode_talk2_init__Q210daObjPaper5Act_cFv */ void daObjPaper::Act_c::mode_talk2_init() { - mMode = 3; + mMode = ActMode_TALKWAIT_e; } /* 00000880-000008DC .text mode_talk2__Q210daObjPaper5Act_cFv */ void daObjPaper::Act_c::mode_talk2() { - if (mpMsg->mMode == 0x12) { - mpMsg->mMode = 0x13; + if (mpMsg->mMode == dNpcMsgStts_BOX_CLOSED_e) { + mpMsg->mMode = dNpcMsgStts_MSG_DESTROYED_e; mpMsg = 0; mMsgId = -1; From 8f0fcbe383d4a9a60da7f53a3742d93327f5607b Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sat, 16 Sep 2023 18:29:40 -0400 Subject: [PATCH 05/25] 100% match d_a_disappear --- configure.py | 2 +- include/d/d_com_inf_game.h | 5 ++ include/f_op/f_op_actor_mng.h | 6 +- src/d/actor/d_a_disappear.cpp | 137 +++++++++++++++++++++++++++++++--- 4 files changed, 136 insertions(+), 14 deletions(-) diff --git a/configure.py b/configure.py index 46395c26a..775a07def 100644 --- a/configure.py +++ b/configure.py @@ -413,7 +413,7 @@ config.libs = [ Object(NonMatching, "d/actor/d_a_boomerang.cpp"), Object(NonMatching, "d/actor/d_a_dai_item.cpp"), Object(NonMatching, "d/actor/d_a_demo00.cpp"), - Object(NonMatching, "d/actor/d_a_disappear.cpp"), + Object(Matching, "d/actor/d_a_disappear.cpp"), Object(NonMatching, "d/actor/d_a_esa.cpp"), Object(NonMatching, "d/actor/d_a_grid.cpp"), Object(NonMatching, "d/actor/d_a_himo2.cpp"), diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 5cb4580df..fd9d354b1 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -838,6 +838,11 @@ inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, co return dComIfGp_particle_set(particleID, pos, angle, scale, 0xFF, NULL, -1, NULL, NULL, NULL); } +inline void dComIfGp_particle_setStripes(u16 particleID, cXyz* pos, csXyz* angle, cXyz* scale, u8 param_4, u16 param_5) { + dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); + pParticle->setNormalStripes(particleID, pos, angle, scale, param_4, param_5); +} + inline void dComIfGp_particle_calc3D() { g_dComIfG_gameInfo.play.getParticle()->calc3D(); } diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 4e6e70547..afe880c70 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -449,6 +449,8 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_tableNo, int i_itemBitNo, int csXyz* p_angle, int param_5, cXyz * p_scale, f32* speedF, f32* speedY, bool createDirect); +s32 fopAcM_createIball(cXyz*, int, int, csXyz*, int); + s32 fopAcM_createDemoItem(cXyz* p_pos, int itemNo, int itemBitNo, csXyz* p_angle, int roomNo, cXyz* scale, u8 param_7); @@ -466,8 +468,8 @@ void* fopAcM_createItemForSimpleDemo(cXyz* p_pos, int i_itemNo, int i_roomNo, csXyz* p_angle, cXyz* p_scale, f32 speedF, f32 speedY); -s32 fopAcM_createItem(cXyz* p_pos, int itemNo, int param_3, int roomNo, csXyz* p_angle, - cXyz* p_scale, int param_7); +s32 fopAcM_createItem(cXyz* p_pos, int itemNo, int param_3, int roomNo, int param_4, csXyz* p_angle, + int param_7, cXyz* p_scale); void* fopAcM_fastCreateItem2(cXyz* p_pos, int itemNo, int param_3, int roomNo, int param_5, csXyz* p_angle, cXyz* p_scale); diff --git a/src/d/actor/d_a_disappear.cpp b/src/d/actor/d_a_disappear.cpp index ab4249210..0a195f121 100644 --- a/src/d/actor/d_a_disappear.cpp +++ b/src/d/actor/d_a_disappear.cpp @@ -3,36 +3,151 @@ // Translation Unit: d_a_disappear.cpp // -#include "d_a_disappear.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_procname.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "m_Do/m_Do_ext.h" #include "dolphin/types.h" + +extern dScnPly_reg_HIO_c g_regHIO; + +class disappear_class : public fopAc_ac_c { +public: + int m0000; + int m0004; + s32 mSwitchId; + s16 mTimer; +}; + /* 800E79C0-800E79C8 .text daDisappear_Draw__FP15disappear_class */ -void daDisappear_Draw(disappear_class*) { - /* Nonmatching */ +s32 daDisappear_Draw(disappear_class*) { + return TRUE; } /* 800E79C8-800E7AC0 .text daDisappear_Execute__FP15disappear_class */ -void daDisappear_Execute(disappear_class*) { - /* Nonmatching */ +s32 daDisappear_Execute(disappear_class* i_this) { + if (i_this->mTimer != 0) { + i_this->mTimer--; + + if (i_this->mTimer == 0) { + s8 health = i_this->mHealth; + + if (health != 1 && health != 3) { + if (health == 2) { + fopAcM_createItemForBoss(i_this->getPositionP(), 0, i_this->getRoomNo(), &i_this->current.angle, NULL, 0); + } + else if (health >= 0x0A && health <= 0x0D) { + if (health < 0x0D) { + static u32 ki_item_d[] = { + 0, 10, 16 + }; + + fopAcM_createItem(i_this->getPositionP(), ki_item_d[health - 0xA], -1, -1, 0, NULL, 4, NULL); + } + } + else { + fopAcM_createIball(i_this->getPositionP(), i_this->mItemTableIdx, i_this->getRoomNo(), &i_this->current.angle, i_this->mSwitchId); + } + } + } + } + else { + fopAcM_delete(i_this); + } + + return TRUE; } /* 800E7AC0-800E7AC8 .text daDisappear_IsDelete__FP15disappear_class */ -void daDisappear_IsDelete(disappear_class*) { - /* Nonmatching */ +s32 daDisappear_IsDelete(disappear_class*) { + return TRUE; } /* 800E7AC8-800E7AD0 .text daDisappear_Delete__FP15disappear_class */ -void daDisappear_Delete(disappear_class*) { - /* Nonmatching */ +s32 daDisappear_Delete(disappear_class*) { + return TRUE; } /* 800E7AD0-800E7DBC .text set_disappear__FP15disappear_classf */ -void set_disappear(disappear_class*, float) { +void set_disappear(disappear_class* i_this, float scale) { /* Nonmatching */ + s8 rev = dComIfGp_getReverb(i_this->getRoomNo()); + mDoAud_seStart(0x5801, &i_this->mEyePos, 0, rev); + + cXyz particleScale(scale, scale, scale); + i_this->mTimer = g_regHIO.mChild[8].mShortRegs[0] + 0x3A; + + switch (i_this->mHealth) { + case 0: + case 2: + case 10: + case 0xB: + case 0xC: + case 0xD: + dComIfGp_particle_set(0x14, &i_this->current.pos, 0, &particleScale, 0xFF, 0, -1, 0, 0, 0); + case 3: + dComIfGp_particle_set(0x13, &i_this->current.pos, 0, &particleScale, 0xff, 0, -1, 0, 0, 0); + dComIfGp_particle_setStripes(0x15, &i_this->current.pos, 0, &particleScale, 0xFF, 0x96); + dComIfGp_particle_set(0x16, &i_this->current.pos, 0, &particleScale, 0xff, 0, -1, 0, 0, 0); + break; + case 1: + dComIfGp_particle_set(0x13, &i_this->current.pos, 0, &particleScale, 0xff, 0, -1, 0, 0, 0); + dComIfGp_particle_set(0x16, &i_this->current.pos, 0, &particleScale, 0xff, 0, -1, 0, 0, 0); + break; + case 4: + dComIfGp_particle_set(0x043C, &i_this->current.pos, 0, 0, 0xff, 0, -1, 0, 0, 0); + dComIfGp_particle_set(0x043D, &i_this->current.pos, 0, 0, 0xff, 0, -1, 0, 0, 0); + dComIfGp_particle_set(0x043E, &i_this->current.pos, 0, 0, 0xff, 0, -1, 0, 0, 0); + break; + } } /* 800E7DBC-800E7E60 .text daDisappear_Create__FP10fopAc_ac_c */ -void daDisappear_Create(fopAc_ac_c*) { +s32 daDisappear_Create(fopAc_ac_c* i_this) { /* Nonmatching */ + disappear_class* dis = static_cast(i_this); + + fopAcM_SetupActor(dis, disappear_class); + + u32 params = dis->mBase.mParameters; + + dis->mHealth = dis->mBase.mParameters & 0xFF; + float scale = ((dis->mBase.mParameters >> 8) & 0xFF) * 0.1f; + + dis->mSwitchId = (dis->mBase.mParameters >> 0x10) & 0xFF; + if (dis->mSwitchId == 0xFF) { + dis->mSwitchId = -1; + } + + set_disappear(dis, scale); + return cPhs_COMPLEATE_e; } +actor_method_class l_daDisappear_Method = { + (process_method_func)daDisappear_Create, + (process_method_func)daDisappear_Delete, + (process_method_func)daDisappear_Execute, + (process_method_func)daDisappear_IsDelete, + (process_method_func)daDisappear_Draw, +}; + +extern actor_process_profile_definition g_profile_DISAPPEAR = { + fpcLy_CURRENT_e, + 7, + fpcLy_CURRENT_e, + PROC_DISAPPEAR, + &g_fpcLf_Method.mBase, + sizeof(disappear_class), + 0, + 0, + &g_fopAc_Method.base, + 0x0188, + &l_daDisappear_Method, + 0x00044000, + fopAc_ACTOR_e, + fopAc_CULLBOX_0_e, +}; From 1e50887ed69547e8e85ef13a6fcf0f692d1006bb Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sat, 16 Sep 2023 18:32:59 -0400 Subject: [PATCH 06/25] Remove nonmatching comments from d_a_disappear --- src/d/actor/d_a_disappear.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/d/actor/d_a_disappear.cpp b/src/d/actor/d_a_disappear.cpp index 0a195f121..0ed011b7a 100644 --- a/src/d/actor/d_a_disappear.cpp +++ b/src/d/actor/d_a_disappear.cpp @@ -74,7 +74,6 @@ s32 daDisappear_Delete(disappear_class*) { /* 800E7AD0-800E7DBC .text set_disappear__FP15disappear_classf */ void set_disappear(disappear_class* i_this, float scale) { - /* Nonmatching */ s8 rev = dComIfGp_getReverb(i_this->getRoomNo()); mDoAud_seStart(0x5801, &i_this->mEyePos, 0, rev); @@ -108,7 +107,6 @@ void set_disappear(disappear_class* i_this, float scale) { /* 800E7DBC-800E7E60 .text daDisappear_Create__FP10fopAc_ac_c */ s32 daDisappear_Create(fopAc_ac_c* i_this) { - /* Nonmatching */ disappear_class* dis = static_cast(i_this); fopAcM_SetupActor(dis, disappear_class); From aa990db9d54b6cf7407c713304558eaaae7b7096 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sat, 16 Sep 2023 19:09:28 -0400 Subject: [PATCH 07/25] Clean up d_a_mozo slightly --- src/d/actor/d_a_mozo.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/d/actor/d_a_mozo.cpp b/src/d/actor/d_a_mozo.cpp index 1492a279a..4651ca59b 100644 --- a/src/d/actor/d_a_mozo.cpp +++ b/src/d/actor/d_a_mozo.cpp @@ -75,7 +75,7 @@ public: mDoExt_btkAnm mBtkAnm; J3DAnmTextureSRTKey* m_btk; - // ... + // TODO: insert missing members dCcD_Stts mColStatus; dCcD_Cps mCapsuleCol; @@ -236,7 +236,7 @@ s32 daMozo_c::CreateInit() { a = param; } - //m0376 = a; + // TODO: insert missing assignment here mAnimMorf->getModel()->setUserArea(this); for (int i = 0; i < mdlData->getJointNum(); i++) { @@ -245,15 +245,13 @@ s32 daMozo_c::CreateInit() { } } + // TODO: find out where d_lib::ZeroQuat lives //mQuatRotation = ZeroQuat; fopAcM_setCullSizeBox(this, -1000.f, -1000.f, -1000.f, 1000.0f, 1000.0f, 1000.0f); mCullMtx = mAnimMorf->getModel()->getBaseTRMtx(); - //m02F4 = getPosition(); - //m0300 = getPosition(); - - //if () + // TODO: Insert missing code here set_mtx(); mAnimMorf->calc(); From 9b32cb16ebd0431c334029dbe0fe80f110627bc6 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sun, 24 Sep 2023 21:52:35 -0400 Subject: [PATCH 08/25] Initial work on mknjd --- include/d/d_com_inf_game.h | 6 + include/f_pc/f_pc_base.h | 2 +- src/d/actor/d_a_obj_mknjd.cpp | 256 ++++++++++++++++++---------------- 3 files changed, 142 insertions(+), 122 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 73522c788..3ef842a9b 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -196,6 +196,8 @@ public: mItemLifeCount += num; } + u8 getSelectItem(int i_itemIdx) { return mEquippedItems[i_itemIdx]; } + u8 checkMesgCancelButton() { return field_0x4949; } void setPlayerStatus(int param_0, int i, u32 flag) { mPlayerStatus[param_0][i] |= flag; } @@ -1080,6 +1082,10 @@ inline void dComIfGp_setItemMagicCount(s16 magic) { g_dComIfG_gameInfo.play.setItemMagicCount(magic); } +inline u8 dComIfGp_getSelectItem(int i_itemIdx) { + return g_dComIfG_gameInfo.play.getSelectItem(i_itemIdx); +} + inline u8 dComIfGp_checkMesgCancelButton() { return g_dComIfG_gameInfo.play.checkMesgCancelButton(); } diff --git a/include/f_pc/f_pc_base.h b/include/f_pc/f_pc_base.h index 935a6cf31..3ff0c85d2 100644 --- a/include/f_pc/f_pc_base.h +++ b/include/f_pc/f_pc_base.h @@ -19,7 +19,7 @@ typedef struct base_process_class { /* 0x0A */ s8 mUnk0; /* 0x0B */ u8 mPauseFlag; /* 0x0C */ s8 mInitState; - /* 0x0D */ u8 mUnk2; + /* 0x0D */ s8 mUnk2; /* 0x0E */ s16 mProfName; /* 0x10 */ process_profile_definition* mpProf; /* 0x14 */ struct create_request* mpCtRq; diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 60401c1fe..f836429fb 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -3,9 +3,115 @@ // Translation Unit: d_a_obj_mknjd.cpp // -#include "d_a_obj_mknjd.h" +#include "f_op/f_op_actor_mng.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "d/d_procname.h" +#include "d/d_com_inf_game.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_item_data.h" +#include "m_Do/m_Do_ext.h" #include "dolphin/types.h" + +namespace daObjMknjD { + class Act_c : public dBgS_MoveBgActor { + public: + s32 Mthd_Create(); + s32 Mthd_Delete(); + + s16 XyCheckCB(int); + s32 XyEventCB(int); + + int CreateHeap(); + int Create(); + + int Delete(); + + void set_mtx(); + void init_mtx(); + + void setGoal(int); + void setPlayerAngle(int); + void talk(int); + void privateCut(); + void daObjMknjD_break(); + + int Execute(float(**)[3][4]); + int Draw(); + + static const char M_arcname[]; + + /* 0x0420 */ request_of_phase_process_class mPhs; + /* 0x04E2 */ s16 m04E2; + }; + + const char Act_c::M_arcname[] = "MknjD"; + + /* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ + void manage_friend_draw(int) { + /* Nonmatching */ + } + + /* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */ + void setMaterial(J3DMaterial*, unsigned char) { + /* Nonmatching */ + } + + namespace { + /* 00002430-00002450 .text Mthd_Create__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Create(void* i_this) { + return static_cast(i_this)->Mthd_Create(); + } + + /* 00002450-00002470 .text Mthd_Delete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Delete(void* i_this) { + return static_cast(i_this)->Mthd_Delete(); + } + + /* 00002470-00002490 .text Mthd_Execute__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Execute(void* i_this) { + return static_cast(i_this)->MoveBGExecute(); + } + + /* 00002490-000024BC .text Mthd_Draw__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Draw(void* i_this) { + return static_cast(i_this)->Draw(); + } + + /* 000024BC-000024E8 .text Mthd_IsDelete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_IsDelete(void* i_this) { + return static_cast(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_MknjD = { + fpcLy_CURRENT_e, + 3, + fpcPi_CURRENT_e, + PROC_Obj_MknjD, + &g_fpcLf_Method.mBase, + sizeof(Act_c), + 0, + 0, + &g_fopAc_Method.base, + 0x01C6, + &Mthd_Table, + 0x00044100, + fopAc_ACTOR_e, + fopAc_CULLBOX_CUSTOM_e, + }; +} + + /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ void nodeCallBackL(J3DNode*, int) { /* Nonmatching */ @@ -22,68 +128,60 @@ void nodeCallBack_Hahen(J3DNode*, int) { } /* 000002B0-000002D0 .text daObjMknjD_XyCheckCB__FPvi */ -void daObjMknjD_XyCheckCB(void*, int) { - /* Nonmatching */ +s16 daObjMknjD_XyCheckCB(void* i_this, int i_param2) { + return static_cast(i_this)->XyCheckCB(i_param2); } /* 000002D0-000002F0 .text daObjMknjD_XyEventCB__FPvi */ -void daObjMknjD_XyEventCB(void*, int) { - /* Nonmatching */ +s32 daObjMknjD_XyEventCB(void* i_this, int i_param2) { + return static_cast(i_this)->XyEventCB(i_param2); } /* 000002F0-00000314 .text XyCheckCB__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::XyCheckCB(int) { - /* Nonmatching */ +s16 daObjMknjD::Act_c::XyCheckCB(int i_itemIdx) { + return dComIfGp_getSelectItem(i_itemIdx) == WIND_TACT ? 1 : 0; } /* 00000314-0000031C .text XyEventCB__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::XyEventCB(int) { +s32 daObjMknjD::Act_c::XyEventCB(int) { /* Nonmatching */ + return m04E2; } /* 0000031C-00000620 .text CreateHeap__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::CreateHeap() { +int daObjMknjD::Act_c::CreateHeap() { /* Nonmatching */ + return 0; } /* 00000620-000008E8 .text Create__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Create() { +int daObjMknjD::Act_c::Create() { /* Nonmatching */ + return 0; } /* 000008E8-00000A84 .text Mthd_Create__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Mthd_Create() { - /* Nonmatching */ -} - -/* 00000A84-00000B00 .text __dt__18dPa_smokeEcallBackFv */ -dPa_smokeEcallBack::~dPa_smokeEcallBack() { - /* Nonmatching */ -} - -/* 00000B00-00000B24 .text __defctor__18dPa_smokeEcallBackFv */ -void dPa_smokeEcallBack::__defctor() { - /* Nonmatching */ -} - -/* 00000B24-00000B28 .text __ct__4cXyzFv */ -cXyz::cXyz() { - /* Nonmatching */ -} - -/* 00000B28-00000B64 .text __dt__4cXyzFv */ -cXyz::~cXyz() { +s32 daObjMknjD::Act_c::Mthd_Create() { /* Nonmatching */ + return 0; } /* 00000B64-00000BDC .text Delete__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Delete() { +int daObjMknjD::Act_c::Delete() { /* Nonmatching */ + return 0; } /* 00000BDC-00000C34 .text Mthd_Delete__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Mthd_Delete() { +s32 daObjMknjD::Act_c::Mthd_Delete() { /* Nonmatching */ + int bgDeleteResult = MoveBGDelete(); + + if (mBase.mUnk2 != 3) { + dComIfG_resDelete(&mPhs, M_arcname); + } + + return bgDeleteResult; } /* 00000C34-00000CC8 .text set_mtx__Q210daObjMknjD5Act_cFv */ @@ -116,103 +214,19 @@ void daObjMknjD::Act_c::privateCut() { /* Nonmatching */ } -/* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ -void daObjMknjD::manage_friend_draw(int) { - /* Nonmatching */ -} - /* 00001400-0000195C .text daObjMknjD_break__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::daObjMknjD_break() { /* Nonmatching */ } /* 0000195C-000020E0 .text Execute__Q210daObjMknjD5Act_cFPPA3_A4_f */ -void daObjMknjD::Act_c::Execute(float(**)[3][4]) { - /* Nonmatching */ -} - -/* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */ -void daObjMknjD::setMaterial(J3DMaterial*, unsigned char) { +int daObjMknjD::Act_c::Execute(float(**)[3][4]) { /* Nonmatching */ + return 0; } /* 000022FC-00002430 .text Draw__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Draw() { +int daObjMknjD::Act_c::Draw() { /* Nonmatching */ + return 0; } - -/* 00002430-00002450 .text Mthd_Create__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Create(void*) { - /* Nonmatching */ -} - -/* 00002450-00002470 .text Mthd_Delete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Delete(void*) { - /* Nonmatching */ -} - -/* 00002470-00002490 .text Mthd_Execute__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Execute(void*) { - /* Nonmatching */ -} - -/* 00002490-000024BC .text Mthd_Draw__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Draw(void*) { - /* Nonmatching */ -} - -/* 000024BC-000024E8 .text Mthd_IsDelete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_IsDelete(void*) { - /* Nonmatching */ -} - -/* 000024E8-000024F0 .text IsDelete__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::IsDelete() { - /* Nonmatching */ -} - -/* 000024F0-000024F8 .text ToFore__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::ToFore() { - /* Nonmatching */ -} - -/* 000024F8-00002500 .text ToBack__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::ToBack() { - /* Nonmatching */ -} - -/* 00002500-00002504 .text draw__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::draw(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00002504-00002508 .text executeAfter__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::executeAfter(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00002508-0000250C .text execute__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::execute(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 0000250C-00002510 .text init__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::init(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00002510-00002558 .text __dt__34JPACallBackBaseFv */ -JPACallBackBase::~JPACallBackBase() { - /* Nonmatching */ -} - -/* 00002558-000025B4 .text __dt__18dPa_levelEcallBackFv */ -dPa_levelEcallBack::~dPa_levelEcallBack() { - /* Nonmatching */ -} - -/* 000025B4-000025D0 .text PrmAbstract__5daObjFPC10fopAc_ac_cQ310daObjMknjD5Act_c5Prm_eQ310daObjMknjD5Act_c5Prm_e */ -void daObj::PrmAbstract(const fopAc_ac_c*, daObjMknjD::Act_c::Prm_e, daObjMknjD::Act_c::Prm_e) { - /* Nonmatching */ -} - From 6dc6e321b8ef64d021dd90d7409500ffb7bef4f9 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sun, 24 Sep 2023 21:54:36 -0400 Subject: [PATCH 09/25] Fix conflict --- include/d/d_com_inf_game.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index c192d03e6..00dd3b712 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -197,8 +197,6 @@ public: mItemLifeCount += num; } - u8 getSelectItem(int i_itemIdx) { return mEquippedItems[i_itemIdx]; } - u8 checkMesgCancelButton() { return field_0x4949; } void setPlayerStatus(int param_0, int i, u32 flag) { mPlayerStatus[param_0][i] |= flag; } @@ -1119,10 +1117,6 @@ inline void dComIfGp_setItemMagicCount(s16 magic) { g_dComIfG_gameInfo.play.setItemMagicCount(magic); } -inline u8 dComIfGp_getSelectItem(int i_itemIdx) { - return g_dComIfG_gameInfo.play.getSelectItem(i_itemIdx); -} - inline u8 dComIfGp_checkMesgCancelButton() { return g_dComIfG_gameInfo.play.checkMesgCancelButton(); } From 2001db31bc9de174210730112707e809d62900c5 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Mon, 25 Sep 2023 01:36:40 -0400 Subject: [PATCH 10/25] Attempt to clean up mknjd --- src/d/actor/d_a_obj_mknjd.cpp | 173 +++++++++++++++++++++------------- 1 file changed, 107 insertions(+), 66 deletions(-) diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index f836429fb..938a4be53 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -14,6 +14,43 @@ #include "dolphin/types.h" +static const char* daObjMknjD_jointName[] = { + "Hahen1", + "Hahen2", + "Hahen3", + "Hahen4", + "Hahen5", + "Hahen6", + "Hahen7", + "Hahen8", + "Hahen9", + "Hahen10", + "Hahen11", + "Hahen12", + "Hahen13", + "Hahen14", + "Hahen15", + "Hahen16", + "Hahen17", + "Hahen18", + "Hahen19", + "Hahen20" +}; + +const char* daObjMknjD_EventName[] = { + "MKNJD_D_DEMO", + "MKNJD_K_DEMO", + + "MKNJD_D_CHECK", + "MKNJD_K_CHECK", + + "MKNJD_D_ERROR", + "MKNJD_K_ERROR", + + "MKNJD_D_LESSON", + "MKNJD_K_LESSON", +}; + namespace daObjMknjD { class Act_c : public dBgS_MoveBgActor { public: @@ -21,7 +58,7 @@ namespace daObjMknjD { s32 Mthd_Delete(); s16 XyCheckCB(int); - s32 XyEventCB(int); + s16 XyEventCB(int); int CreateHeap(); int Create(); @@ -48,70 +85,10 @@ namespace daObjMknjD { const char Act_c::M_arcname[] = "MknjD"; - /* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ - void manage_friend_draw(int) { - /* Nonmatching */ - } - - /* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */ - void setMaterial(J3DMaterial*, unsigned char) { - /* Nonmatching */ - } - - namespace { - /* 00002430-00002450 .text Mthd_Create__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ - s32 Mthd_Create(void* i_this) { - return static_cast(i_this)->Mthd_Create(); - } - - /* 00002450-00002470 .text Mthd_Delete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ - s32 Mthd_Delete(void* i_this) { - return static_cast(i_this)->Mthd_Delete(); - } - - /* 00002470-00002490 .text Mthd_Execute__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ - s32 Mthd_Execute(void* i_this) { - return static_cast(i_this)->MoveBGExecute(); - } - - /* 00002490-000024BC .text Mthd_Draw__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ - s32 Mthd_Draw(void* i_this) { - return static_cast(i_this)->Draw(); - } - - /* 000024BC-000024E8 .text Mthd_IsDelete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ - s32 Mthd_IsDelete(void* i_this) { - return static_cast(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_MknjD = { - fpcLy_CURRENT_e, - 3, - fpcPi_CURRENT_e, - PROC_Obj_MknjD, - &g_fpcLf_Method.mBase, - sizeof(Act_c), - 0, - 0, - &g_fopAc_Method.base, - 0x01C6, - &Mthd_Table, - 0x00044100, - fopAc_ACTOR_e, - fopAc_CULLBOX_CUSTOM_e, - }; + static void manage_friend_draw(int); + static void setMaterial(J3DMaterial*, unsigned char); } - /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ void nodeCallBackL(J3DNode*, int) { /* Nonmatching */ @@ -128,12 +105,12 @@ void nodeCallBack_Hahen(J3DNode*, int) { } /* 000002B0-000002D0 .text daObjMknjD_XyCheckCB__FPvi */ -s16 daObjMknjD_XyCheckCB(void* i_this, int i_param2) { +static s16 daObjMknjD_XyCheckCB(void* i_this, int i_param2) { return static_cast(i_this)->XyCheckCB(i_param2); } /* 000002D0-000002F0 .text daObjMknjD_XyEventCB__FPvi */ -s32 daObjMknjD_XyEventCB(void* i_this, int i_param2) { +static s16 daObjMknjD_XyEventCB(void* i_this, int i_param2) { return static_cast(i_this)->XyEventCB(i_param2); } @@ -143,7 +120,7 @@ s16 daObjMknjD::Act_c::XyCheckCB(int i_itemIdx) { } /* 00000314-0000031C .text XyEventCB__Q210daObjMknjD5Act_cFi */ -s32 daObjMknjD::Act_c::XyEventCB(int) { +s16 daObjMknjD::Act_c::XyEventCB(int) { /* Nonmatching */ return m04E2; } @@ -214,6 +191,11 @@ void daObjMknjD::Act_c::privateCut() { /* Nonmatching */ } +/* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ +void daObjMknjD::manage_friend_draw(int) { + /* Nonmatching */ +} + /* 00001400-0000195C .text daObjMknjD_break__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::daObjMknjD_break() { /* Nonmatching */ @@ -225,8 +207,67 @@ int daObjMknjD::Act_c::Execute(float(**)[3][4]) { return 0; } +/* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */ +void daObjMknjD::setMaterial(J3DMaterial*, unsigned char) { + /* Nonmatching */ +} + /* 000022FC-00002430 .text Draw__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::Draw() { /* Nonmatching */ return 0; } + +namespace daObjMknjD { + namespace { + /* 00002430-00002450 .text Mthd_Create__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Create(void* i_this) { + return static_cast(i_this)->Mthd_Create(); + } + + /* 00002450-00002470 .text Mthd_Delete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Delete(void* i_this) { + return static_cast(i_this)->Mthd_Delete(); + } + + /* 00002470-00002490 .text Mthd_Execute__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Execute(void* i_this) { + return static_cast(i_this)->MoveBGExecute(); + } + + /* 00002490-000024BC .text Mthd_Draw__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Draw(void* i_this) { + return static_cast(i_this)->Draw(); + } + + /* 000024BC-000024E8 .text Mthd_IsDelete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_IsDelete(void* i_this) { + return static_cast(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_MknjD = { + fpcLy_CURRENT_e, + 3, + fpcPi_CURRENT_e, + PROC_Obj_MknjD, + &g_fpcLf_Method.mBase, + sizeof(daObjMknjD::Act_c), + 0, + 0, + &g_fopAc_Method.base, + 0x01C6, + &daObjMknjD::Mthd_Table, + 0x00044100, + fopAc_ACTOR_e, + fopAc_CULLBOX_CUSTOM_e, +}; From f2d748da3e446bfd306561018eb17059e40eeeb3 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Thu, 28 Sep 2023 22:38:16 -0400 Subject: [PATCH 11/25] Match mknjd::draw and mknjd::setMaterial --- include/JSystem/J3DGraphBase/J3DMatBlock.h | 24 ++++++- include/JSystem/J3DGraphBase/J3DMaterial.h | 1 + include/d/d_com_inf_game.h | 1 + include/d/d_drawlist.h | 8 +-- src/d/actor/d_a_obj_mknjd.cpp | 81 ++++++++++++++++++++-- 5 files changed, 105 insertions(+), 10 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index 940108e06..886b82a7b 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -528,7 +528,7 @@ private: extern const u16 j3dDefaultZModeID; inline u16 calcZModeID(u8 param_0, u8 param_1, u8 param_2) { - return ((param_1 * 2) & 0x1FE) + (param_0 * 0x10) + param_2; + return (param_1 * 2) + (param_0 * 0x10) + param_2; } struct J3DZModeInfo { @@ -537,6 +537,8 @@ struct J3DZModeInfo { /* 0x2 */ u8 field_0x2; }; +extern J3DZModeInfo j3dZModeTable[2]; + struct J3DZMode { J3DZMode() { mZModeID = j3dDefaultZModeID; @@ -546,6 +548,14 @@ struct J3DZMode { mZModeID = calcZModeID(info.field_0x0, info.field_0x1, info.field_0x2); } + void setCompareEnable(u8 i_compare) { + mZModeID = calcZModeID(i_compare, j3dZModeTable[mZModeID].field_0x1, j3dZModeTable[mZModeID].field_0x2); + } + + void setUpdateEnable(u8 i_enable) { + mZModeID = calcZModeID(j3dZModeTable[mZModeID].field_0x0, j3dZModeTable[mZModeID].field_0x1, i_enable); + } + /* 0x0 */ u16 mZModeID; }; @@ -562,6 +572,18 @@ struct J3DBlend : public J3DBlendInfo { J3DBlend() { *(J3DBlendInfo*)this = j3dDefaultBlendInfo; } + + void setType(u8 i_type) { + mType = i_type; + } + + void setSrcFactor(u8 i_src) { + mSrcFactor = i_src; + } + + void setDstFactor(u8 i_dst) { + mDstFactor = i_dst; + } }; extern const J3DFogInfo j3dDefaultFogInfo; diff --git a/include/JSystem/J3DGraphBase/J3DMaterial.h b/include/JSystem/J3DGraphBase/J3DMaterial.h index 9dc13072c..bedcac040 100644 --- a/include/JSystem/J3DGraphBase/J3DMaterial.h +++ b/include/JSystem/J3DGraphBase/J3DMaterial.h @@ -74,6 +74,7 @@ public: void setTevKColor(u32 i, const J3DGXColor* i_color) { mTevBlock->setTevKColor(i, i_color); } void setMaterialAnm(J3DMaterialAnm* i_anm) { mMaterialAnm = i_anm; } void setCullMode(u8 i_mode) { mColorBlock->setCullMode(i_mode); } + void setMaterialMode(u32 i_mode) { mMaterialMode = i_mode; } public: /* 0x04 */ J3DMaterial* mNext; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 00dd3b712..866aa242e 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1354,6 +1354,7 @@ inline void dComIfGd_setListP1() { inline void dComIfGd_setListBG() { g_dComIfG_gameInfo.drawlist.setOpaListBG(); + g_dComIfG_gameInfo.drawlist.setXluListBG(); } inline void dComIfGd_setXluListBG() { diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 2a9b091f2..7e876450f 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -214,8 +214,8 @@ public: void setXluDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, XLU_BUFFER); } void setOpaDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, OPA_BUFFER); } - void setOpaList() { setOpaDrawList(mpBufInvisibleModelOpa); } - void setXluList() { setXluDrawList(mpBufInvisibleModelXlu); } + void setOpaList() { setOpaDrawList(mpBufWorldOpa); } + void setXluList() { setXluDrawList(mpBufWorldXlu); } void setOpaListMaskOff() { setOpaDrawList(mpBufInvisibleModelMaskOffOpa); } void setXluListMaskOff() { setXluDrawList(mpBufInvisibleModelMaskOffXlu); } void setOpaListSky() { setOpaDrawList(mpBufSkyOpa); } @@ -224,8 +224,8 @@ public: void setXluListP0() { setXluDrawList(mpLinkBuf); } void setOpaListP1() { setOpaDrawList(field_0x0000c); } void setXluListP1() { setXluDrawList(field_0x00010); } - void setOpaListBG() { setOpaDrawList(mpBufWorldOpa); } - void setXluListBG() { setXluDrawList(mpBufWorldXlu); } + void setOpaListBG() { setOpaDrawList(mpBufInvisibleModelOpa); } + void setXluListBG() { setXluDrawList(mpBufInvisibleModelXlu); } void setOpaListFilter() { setOpaDrawList(mpWetherFxBuffer); } void setXluListFilter() { setXluDrawList(mpWetherFxBuffer); } void setOpaList2D() { setOpaDrawList(field_0x00038); } diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 938a4be53..1eb2c29c8 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -6,6 +6,7 @@ #include "f_op/f_op_actor_mng.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/J3DGraphBase/J3DSys.h" #include "d/d_procname.h" #include "d/d_com_inf_game.h" #include "d/d_bg_s_movebg_actor.h" @@ -79,14 +80,33 @@ namespace daObjMknjD { static const char M_arcname[]; + /* 0x02C8 */ cXyz m02C8; + /* 0x02D4 */ cXyz m02D4; + /* 0x02E0 */ cXyz m02E0[0x14]; + /* 0x03D0 */ float m03D0[0x14]; + /* 0x0420 */ request_of_phase_process_class mPhs; + + /* 0x0428 */ J3DModel* mModel0; + /* 0x042C */ J3DModel* mModel1; + + /* 0x0430 */ u16 m0430; + /* 0x0432 */ u16 m0432; + /* 0x0434 */ u16 m0434; + /* 0x0438 */ u32 m0438; + + /* 0x043C */ u8 m043C; + /* 0x043D */ bool m043D; + /* 0x043E */ u8 m043E; + /* 0x043F */ u8 m043F; + /* 0x04E2 */ s16 m04E2; }; const char Act_c::M_arcname[] = "MknjD"; static void manage_friend_draw(int); - static void setMaterial(J3DMaterial*, unsigned char); + static void setMaterial(J3DMaterial*, u8); } /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ @@ -208,14 +228,65 @@ int daObjMknjD::Act_c::Execute(float(**)[3][4]) { } /* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */ -void daObjMknjD::setMaterial(J3DMaterial*, unsigned char) { - /* Nonmatching */ +void daObjMknjD::setMaterial(J3DMaterial* i_mat, u8 i_alpha) { + for (; i_mat != NULL; i_mat = i_mat->getNext()) { + if (i_alpha == 0) { + i_mat->getShape()->hide(); + } + else { + i_mat->getShape()->show(); + + if (i_alpha == 0xFF) { + i_mat->setMaterialMode(1); + + i_mat->getPEBlock()->getZMode()->setUpdateEnable(1); + i_mat->getPEBlock()->getZMode()->setCompareEnable(1); + + i_mat->getPEBlock()->getBlend()->setType(0); + } + else { + i_mat->setMaterialMode(1); + + i_mat->getPEBlock()->getZMode()->setUpdateEnable(0); + i_mat->getPEBlock()->getZMode()->setCompareEnable(0); + + i_mat->getPEBlock()->getBlend()->setType(1); + i_mat->getPEBlock()->getBlend()->setSrcFactor(4); + i_mat->getPEBlock()->getBlend()->setDstFactor(5); + } + + GXColor* tevKColor = i_mat->getTevKColor(3); + tevKColor->a = i_alpha; + } + } } /* 000022FC-00002430 .text Draw__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::Draw() { - /* Nonmatching */ - return 0; + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mModel1, &mTevStr); + + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mModel0, &mTevStr); + + dComIfGd_setList(); + + J3DModelData* mdlData = mModel0->getModelData(); + u16 jointCount = mdlData->getJointNum(); + for (u16 i = 0; i < jointCount; i++) { + setMaterial(mdlData->getJointNodePointer(i)->getMesh(), m043C); + } + + dComIfGd_setListSky(); + + mDoExt_modelUpdateDL(mModel0); + if (m043D == true) { + mDoExt_modelUpdateDL(mModel1); + } + + dComIfGd_setListBG(); + + return 1; } namespace daObjMknjD { From 29e50d65b89346b5935697ab04037b73b8025ebb Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Fri, 29 Sep 2023 00:15:08 -0400 Subject: [PATCH 12/25] Documentation and some matching functions --- include/d/d_particle.h | 7 +- src/d/actor/d_a_obj_mknjd.cpp | 137 +++++++++++++++++++++++++++++----- 2 files changed, 123 insertions(+), 21 deletions(-) diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 4cc081445..67d746411 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -60,6 +60,11 @@ class dPa_smokeEcallBack : dPa_followEcallBack { public: dPa_smokeEcallBack(u8); virtual ~dPa_smokeEcallBack(); + + virtual void execute(JPABaseEmitter*); + virtual void draw(JPABaseEmitter*); + virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + virtual void end(); /* 0x14 */ s8 field_0x14; /* 0x15 */ u8 field_0x15; @@ -267,4 +272,4 @@ public: /* 0x001C */ dPa_simpleEcallBack mSimpleCallbacks[25]; }; -#endif /* D_PARTICLE */ \ No newline at end of file +#endif /* D_PARTICLE */ diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 1eb2c29c8..4b646a7fd 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -4,6 +4,8 @@ // #include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_msg.h" +#include "f_op/f_op_draw_tag.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/J3DGraphBase/J3DSys.h" @@ -11,6 +13,7 @@ #include "d/d_com_inf_game.h" #include "d/d_bg_s_movebg_actor.h" #include "d/d_item_data.h" +#include "d/d_particle.h" #include "m_Do/m_Do_ext.h" #include "dolphin/types.h" @@ -71,7 +74,7 @@ namespace daObjMknjD { void setGoal(int); void setPlayerAngle(int); - void talk(int); + u32 talk(int); void privateCut(); void daObjMknjD_break(); @@ -80,10 +83,11 @@ namespace daObjMknjD { static const char M_arcname[]; - /* 0x02C8 */ cXyz m02C8; - /* 0x02D4 */ cXyz m02D4; - /* 0x02E0 */ cXyz m02E0[0x14]; - /* 0x03D0 */ float m03D0[0x14]; + /* 0x02C8 */ cXyz mLeftHalfPos; + /* 0x02D4 */ cXyz mRightHalfPos; + + /* 0x02E0 */ cXyz mShardPositions[0x14]; + /* 0x03D0 */ float mShardHeights[0x14]; /* 0x0420 */ request_of_phase_process_class mPhs; @@ -93,14 +97,39 @@ namespace daObjMknjD { /* 0x0430 */ u16 m0430; /* 0x0432 */ u16 m0432; /* 0x0434 */ u16 m0434; - /* 0x0438 */ u32 m0438; + /* 0x0438 */ u32 mBreakTimer; - /* 0x043C */ u8 m043C; + /* 0x043C */ u8 mModel0Alpha; /* 0x043D */ bool m043D; /* 0x043E */ u8 m043E; /* 0x043F */ u8 m043F; - /* 0x04E2 */ s16 m04E2; + /* 0x0440 */ JPABaseEmitter* mEmitter0; + /* 0x0444 */ JPABaseEmitter* mEmitter1; + /* 0x0448 */ JPABaseEmitter* mEmitter2; + /* 0x044C */ JPABaseEmitter* mEmitter3; + + /* 0x0450 */ dPa_smokeEcallBack mSmokeCBs[4]; + + /* 0x04D0 */ cXyz m04D0; + + /* 0x04DC */ s16 mCheckEventIdx; + /* 0x04DE */ s16 mDemoEventIdx; + /* 0x04E0 */ s16 mErrorEventIdx; + /* 0x04E2 */ s16 mLessonEventIdx; + + /* 0x04E4 */ u8 mActionIdx; + /* 0x04E5 */ u8 mTactMode; + /* 0x04E6 */ u8 mGiveItemId; + + /* 0x04E8 */ cXyz mGoalPos; + + /* 0x04F4 */ u32 mMsgId; + /* 0x04F8 */ u32 mMsgInstId; + /* 0x04FC */ msg_class* mMsgPtr; + + /* 0x0500 */ s32 m0500; + /* 0x0504 */ bool m0504; }; const char Act_c::M_arcname[] = "MknjD"; @@ -141,8 +170,7 @@ s16 daObjMknjD::Act_c::XyCheckCB(int i_itemIdx) { /* 00000314-0000031C .text XyEventCB__Q210daObjMknjD5Act_cFi */ s16 daObjMknjD::Act_c::XyEventCB(int) { - /* Nonmatching */ - return m04E2; + return mLessonEventIdx; } /* 0000031C-00000620 .text CreateHeap__Q210daObjMknjD5Act_cFv */ @@ -165,13 +193,17 @@ s32 daObjMknjD::Act_c::Mthd_Create() { /* 00000B64-00000BDC .text Delete__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::Delete() { - /* Nonmatching */ - return 0; + dComIfGp_getAttention().mFlags &= 0x7fffffff; + + for (int i = 0; i < 4; i++) { + mSmokeCBs[i].end(); + } + + return 1; } /* 00000BDC-00000C34 .text Mthd_Delete__Q210daObjMknjD5Act_cFv */ s32 daObjMknjD::Act_c::Mthd_Delete() { - /* Nonmatching */ int bgDeleteResult = MoveBGDelete(); if (mBase.mUnk2 != 3) { @@ -202,8 +234,50 @@ void daObjMknjD::Act_c::setPlayerAngle(int) { } /* 00000E84-00000F88 .text talk__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::talk(int) { - /* Nonmatching */ +u32 daObjMknjD::Act_c::talk(int i_param1) { + u32 msgMode = 0xFF; + + if (mMsgInstId == 0xFFFFFFFF) { + if (i_param1 == 1) { + u32 msgId; + + if (m0500 == 0) { + g_dComIfG_gameInfo.play.mTactMode = mTactMode; + msgId = 0x05B3; + } + else { + msgId = 0x1901; + } + + mMsgId = msgId; + } + + mMsgInstId = fopMsgM_messageSet(mMsgId, this); + mMsgPtr = NULL; + } + else { + if (mMsgPtr) { + msgMode = mMsgPtr->mMode; + + if (msgMode == 0x0E) { + if (g_dComIfG_gameInfo.play.field_0x4949 != 0) { + m0504 = true; + fopMsgM_messageSendOn(); + } + + mMsgPtr->mMode = 0x10; + } + else if (msgMode == 0x12) { + mMsgPtr->mMode = 0x13; + mMsgInstId = 0xFFFFFFFF; + } + } + else { + mMsgPtr = fopMsgM_SearchByID(mMsgInstId); + } + } + + return msgMode; } /* 00000F88-00001348 .text privateCut__Q210daObjMknjD5Act_cFv */ @@ -212,8 +286,32 @@ void daObjMknjD::Act_c::privateCut() { } /* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ -void daObjMknjD::manage_friend_draw(int) { - /* Nonmatching */ +void daObjMknjD::manage_friend_draw(int i_param1) { + u16 medliProc = PROC_NPC_MD; + fopAc_ac_c* judgeResult = static_cast(fopAcIt_Judge(fpcSch_JudgeForPName, &medliProc)); + + if (judgeResult != NULL) { + if (i_param1 == 1) { + u32 prio = fpcLf_GetPriority(judgeResult); + fopDwTg_ToDrawQ(&judgeResult->mDwTg, prio); + } + else { + fopDwTg_DrawQTo(&judgeResult->mDwTg); + } + } + + u16 makarProc = PROC_NPC_CB1; + judgeResult = static_cast(fopAcIt_Judge(fpcSch_JudgeForPName, &makarProc)); + + if (judgeResult != NULL) { + if (i_param1 == 1) { + u32 prio = fpcLf_GetPriority(judgeResult); + fopDwTg_ToDrawQ(&judgeResult->mDwTg, prio); + } + else { + fopDwTg_DrawQTo(&judgeResult->mDwTg); + } + } } /* 00001400-0000195C .text daObjMknjD_break__Q210daObjMknjD5Act_cFv */ @@ -255,8 +353,7 @@ void daObjMknjD::setMaterial(J3DMaterial* i_mat, u8 i_alpha) { i_mat->getPEBlock()->getBlend()->setDstFactor(5); } - GXColor* tevKColor = i_mat->getTevKColor(3); - tevKColor->a = i_alpha; + i_mat->getTevKColor(3)->a = i_alpha; } } } @@ -274,7 +371,7 @@ int daObjMknjD::Act_c::Draw() { J3DModelData* mdlData = mModel0->getModelData(); u16 jointCount = mdlData->getJointNum(); for (u16 i = 0; i < jointCount; i++) { - setMaterial(mdlData->getJointNodePointer(i)->getMesh(), m043C); + setMaterial(mdlData->getJointNodePointer(i)->getMesh(), mModel0Alpha); } dComIfGd_setListSky(); From 5842ffc64e4cd38c46136dcb6c8d45262a15bc99 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Sun, 1 Oct 2023 20:19:02 -0400 Subject: [PATCH 13/25] Lots of work, many matching functions, most only requiring data to be complete --- include/JSystem/J3DGraphAnimator/J3DModel.h | 11 +- include/JSystem/J3DGraphAnimator/J3DNode.h | 2 + include/d/actor/d_a_player.h | 3 + include/d/d_com_inf_game.h | 6 +- include/d/d_particle.h | 2 +- include/m_Do/m_Do_audio.h | 4 + src/d/actor/d_a_obj_mknjd.cpp | 258 ++++++++++++++++++-- 7 files changed, 267 insertions(+), 19 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index 5e116750b..91808ae62 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -4,6 +4,7 @@ #include "JSystem/J3DGraphAnimator/J3DSkinDeform.h" #include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphBase/J3DVertex.h" +#include "dolphin/mtx/mtx.h" #include "dolphin/mtx/mtxvec.h" #include "dolphin/types.h" @@ -113,15 +114,19 @@ public: Mtx33* getNrmMtxPtr() const { return mpNrmMtxBuf[1][mCurrentViewNo]; } Mtx33*** getBumpMtxPtrPtr() const { return mpBumpMtxArr[1]; } void setBaseScale(const Vec& scale) { mBaseScale = scale; } - void setUserArea(u32 area) { mUserArea = area; } - u32 getUserArea() const { return mUserArea; } + void setUserArea(void* area) { mUserArea = area; } + void* getUserArea() const { return mUserArea; } Vec* getBaseScale() { return &mBaseScale; } + void setAnmMtx(int jntNo, Mtx mtx) { + MTXCopy(mtx, mpNodeMtx[jntNo]); + } + /* 0x004 */ J3DModelData* mModelData; /* 0x008 */ u32 mFlags; /* 0x00C */ u32 mDiffFlag; /* 0x010 */ J3DCalcCallBack mCalcCallBack; - /* 0x014 */ u32 mUserArea; + /* 0x014 */ void* mUserArea; /* 0x018 */ Vec mBaseScale; /* 0x024 */ Mtx mBaseTransformMtx; /* 0x054 */ Mtx mInternalView; diff --git a/include/JSystem/J3DGraphAnimator/J3DNode.h b/include/JSystem/J3DGraphAnimator/J3DNode.h index ec61c56f1..977a610a8 100644 --- a/include/JSystem/J3DGraphAnimator/J3DNode.h +++ b/include/JSystem/J3DGraphAnimator/J3DNode.h @@ -23,12 +23,14 @@ public: void setCallBack(J3DNodeCallBack callback) { mCallBack = callback; } J3DNodeCallBack getCallBack() { return mCallBack; } J3DNode* getChild() { return mChild; } + u16 getJntNo() { return mJntNo; } /* 0x04 */ void* mCallBackUserData; /* 0x08 */ J3DNodeCallBack mCallBack; /* 0x0C */ void* field_0x8; /* 0x10 */ J3DNode* mChild; /* 0x14 */ J3DNode* mYounger; + /* 0x18 */ u16 mJntNo; }; // Size: 0x18 #endif /* J3DNODE_H */ diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index f447c3b55..98d844f2f 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -94,6 +94,9 @@ public: s16 getBodyAngleX() { return mBodyAngle.x; } s16 getBodyAngleY() { return mBodyAngle.y; } + void onPlayerNoDraw() { field_0x29c |= 0x8000000; } + void offPlayerNoDraw() { field_0x29c &= ~0x8000000; } + virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; virtual void getGroundY() = 0; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 866aa242e..edddd5410 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1234,7 +1234,7 @@ inline f32* dComIfGp_evmng_getMyFloatP(int staffIdx, const char* name) { return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 0)); //type 0 is float } -inline Vec* dComIfGp_evmng_getMyVec3dP(int staffIdx, const char* name) { +inline Vec* dComIfGp_evmng_getMyXyzP(int staffIdx, const char* name) { return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 1)); //type 1 is vec3f } @@ -1278,6 +1278,10 @@ inline void dComIfGp_evmng_remove() { g_dComIfG_gameInfo.play.getEvtManager().remove(); } +inline void dComIfGp_evmng_setGoal(cXyz* i_goal) { + g_dComIfG_gameInfo.play.getEvtManager().setGoal(i_goal); +} + /** * === DRAWLIST === */ diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 67d746411..f3a155d16 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -56,7 +56,7 @@ public: STATIC_ASSERT(sizeof(dPa_followEcallBack) == 0x14); -class dPa_smokeEcallBack : dPa_followEcallBack { +class dPa_smokeEcallBack : public dPa_followEcallBack { public: dPa_smokeEcallBack(u8); virtual ~dPa_smokeEcallBack(); diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index f53339662..a0eee9707 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -39,6 +39,10 @@ int mDoAud_load1stDynamicWave(); extern JKRSolidHeap* g_mDoAud_audioHeap; +inline void mDoAud_bgmStart(u32 param_0) { + mDoAud_zelAudio_c::getInterface()->bgmStart(param_0, 0, 0); +} + inline void mDoAud_bgmStop(u32 param_0) { mDoAud_zelAudio_c::getInterface()->bgmStop(param_0, 0); } diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 4b646a7fd..b1d8a468b 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -9,12 +9,19 @@ #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/J3DGraphBase/J3DSys.h" +#include "JAZelAudio/JAIZelBasic.h" +#include "JAZelAudio/JAZelAudio_BGM.h" +#include "JAZelAudio/JAZelAudio_SE.h" #include "d/d_procname.h" #include "d/d_com_inf_game.h" #include "d/d_bg_s_movebg_actor.h" +#include "d/d_bg_w.h" #include "d/d_item_data.h" #include "d/d_particle.h" +#include "d/actor/d_a_player.h" +#include "d/d_a_obj.h" #include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" #include "dolphin/types.h" @@ -55,6 +62,8 @@ const char* daObjMknjD_EventName[] = { "MKNJD_K_LESSON", }; +static u16 joint_number_table[20]; + namespace daObjMknjD { class Act_c : public dBgS_MoveBgActor { public: @@ -74,14 +83,15 @@ namespace daObjMknjD { void setGoal(int); void setPlayerAngle(int); - u32 talk(int); + u16 talk(int); void privateCut(); - void daObjMknjD_break(); + bool daObjMknjD_break(); int Execute(float(**)[3][4]); int Draw(); static const char M_arcname[]; + static Mtx M_tmp_mtx; /* 0x02C8 */ cXyz mLeftHalfPos; /* 0x02D4 */ cXyz mRightHalfPos; @@ -101,7 +111,7 @@ namespace daObjMknjD { /* 0x043C */ u8 mModel0Alpha; /* 0x043D */ bool m043D; - /* 0x043E */ u8 m043E; + /* 0x043E */ bool m043E; /* 0x043F */ u8 m043F; /* 0x0440 */ JPABaseEmitter* mEmitter0; @@ -118,7 +128,7 @@ namespace daObjMknjD { /* 0x04E0 */ s16 mErrorEventIdx; /* 0x04E2 */ s16 mLessonEventIdx; - /* 0x04E4 */ u8 mActionIdx; + /* 0x04E4 */ s8 mActionIdx; /* 0x04E5 */ u8 mTactMode; /* 0x04E6 */ u8 mGiveItemId; @@ -130,6 +140,13 @@ namespace daObjMknjD { /* 0x0500 */ s32 m0500; /* 0x0504 */ bool m0504; + + enum Prm_e { + PRM_SWITCH_W = 0x08, + PRM_SWITCH_S = 0x00, + }; + + inline int prm_get_swSave() { return daObj::PrmAbstract(this, PRM_SWITCH_W, PRM_SWITCH_S); } }; const char Act_c::M_arcname[] = "MknjD"; @@ -139,18 +156,67 @@ namespace daObjMknjD { } /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ -void nodeCallBackL(J3DNode*, int) { - /* Nonmatching */ +u32 nodeCallBackL(J3DNode* i_node, int i_param2) { + if (i_param2 == 0) { + int jntNo = i_node->getJntNo(); + + J3DModel* mdl = j3dSys.getModel(); + daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); + + if (actor != NULL) { + mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx); + + MtxTrans(actor->mLeftHalfPos.x, actor->mLeftHalfPos.y, actor->mLeftHalfPos.z, 1); + + mdl->setAnmMtx(jntNo, *calc_mtx); + mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx); + } + } + + return 1; } /* 0000012C-000001E0 .text nodeCallBackR__FP7J3DNodei */ -void nodeCallBackR(J3DNode*, int) { - /* Nonmatching */ +u32 nodeCallBackR(J3DNode* i_node, int i_param2) { + if (i_param2 == 0) { + int jntNo = i_node->getJntNo(); + + J3DModel* mdl = j3dSys.getModel(); + daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); + + if (actor != NULL) { + mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx); + + MtxTrans(actor->mRightHalfPos.x, actor->mRightHalfPos.y, actor->mRightHalfPos.z, 1); + + mdl->setAnmMtx(jntNo, *calc_mtx); + mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx); + } + } + + return 1; } /* 000001E0-000002B0 .text nodeCallBack_Hahen__FP7J3DNodei */ -void nodeCallBack_Hahen(J3DNode*, int) { - /* Nonmatching */ +s32 nodeCallBack_Hahen(J3DNode* i_node, int i_param2) { + if (i_param2 == 0) { + int jntNo = i_node->getJntNo(); + u16 shardIdx = joint_number_table[jntNo - 1]; + + J3DModel* mdl = j3dSys.getModel(); + daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); + + if (actor != NULL) { + mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx); + + MtxTrans(actor->mShardPositions[shardIdx].x, actor->mShardPositions[shardIdx].y, actor->mShardPositions[shardIdx].z, 1); + + mdl->setAnmMtx(jntNo, *calc_mtx); + mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx); + } + } + + return 1; } /* 000002B0-000002D0 .text daObjMknjD_XyCheckCB__FPvi */ @@ -216,25 +282,54 @@ s32 daObjMknjD::Act_c::Mthd_Delete() { /* 00000C34-00000CC8 .text set_mtx__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::set_mtx() { /* Nonmatching */ + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::ZXYrotM(shape_angle); + + mModel0->setBaseTRMtx(mDoMtx_stack_c::get()); + mModel1->setBaseTRMtx(mDoMtx_stack_c::get()); + + mDoMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx); } /* 00000CC8-00000D28 .text init_mtx__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::init_mtx() { /* Nonmatching */ + mModel0->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); + mModel1->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); + + set_mtx(); } /* 00000D28-00000E04 .text setGoal__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::setGoal(int) { +void daObjMknjD::Act_c::setGoal(int i_staffIdx) { /* Nonmatching */ + cXyz pos = *dComIfGp_evmng_getMyXyzP(i_staffIdx, "Posion"); + + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_YrotM(mDoMtx_stack_c::get(), current.angle.GetY()); + + mDoMtx_stack_c::transM(pos); + + mDoMtx_multVecZero(mDoMtx_stack_c::get(), &pos); + mGoalPos = pos; + + dComIfGp_evmng_setGoal(&mGoalPos); } /* 00000E04-00000E84 .text setPlayerAngle__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::setPlayerAngle(int) { +void daObjMknjD::Act_c::setPlayerAngle(int i_staffIdx) { /* Nonmatching */ + u32 angle = *dComIfGp_evmng_getMyIntegerP(i_staffIdx, "angle"); + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + player->setPlayerPosAndAngle( + player->getPositionP(), + current.angle.y + (s16)angle + ); } /* 00000E84-00000F88 .text talk__Q210daObjMknjD5Act_cFi */ -u32 daObjMknjD::Act_c::talk(int i_param1) { +u16 daObjMknjD::Act_c::talk(int i_param1) { u32 msgMode = 0xFF; if (mMsgInstId == 0xFFFFFFFF) { @@ -280,9 +375,144 @@ u32 daObjMknjD::Act_c::talk(int i_param1) { return msgMode; } +#define ACT_SETGOAL 0 +#define ACT_SETANGLE 1 +#define ACT_WAIT 2 +#define ACT_INPUT 3 +#define ACT_BREAK 4 +#define ACT_HIDE_LINK 5 +#define ACT_DISP_LINK 6 +#define ACT_LESSON 7 +#define ACT_TACT 8 + /* 00000F88-00001348 .text privateCut__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::privateCut() { /* Nonmatching */ + static const char* cut_name_table[] = { + "SETGOAL", + "SETANGLE", + "WAIT", + "INPUT", + "BREAK", + "HIDE_LINK", + "DISP_LINK", + "LESSON", + "TACT" + }; + + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + int staffIdx = dComIfGp_evmng_getMyStaffId("MknjD", NULL, 0); + if (staffIdx != -1) { + mActionIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_table, 9, 1, 0); + + if (mActionIdx == -1) { + dComIfGp_evmng_cutEnd(staffIdx); + } + else { + bool doCutEnd = false; + + if (dComIfGp_evmng_getIsAddvance(staffIdx)) { + switch (mActionIdx) { + case ACT_SETGOAL: + setGoal(staffIdx); + break; + case ACT_SETANGLE: + setPlayerAngle(staffIdx); + break; + case ACT_BREAK: + mDoAud_seStart(JA_SE_READ_RIDDLE_1, NULL, 0, 0); + + int switchId = prm_get_swSave(); + fopAcM_onSwitch(this, switchId); + + mBreakTimer = 0; + + if (mpBgW != NULL) { + if (mpBgW->ChkUsed()) { + g_dComIfG_gameInfo.play.mBgS.Release(mpBgW); + } + } + + break; + case ACT_HIDE_LINK: + player->onPlayerNoDraw(); + break; + case ACT_DISP_LINK: + player->offPlayerNoDraw(); + break; + case ACT_LESSON: + m0504 = false; + m0500 = 0; + mMsgInstId = 0xFFFFFFFF; + break; + case ACT_TACT: + break; + } + } + + switch (mActionIdx) { + case ACT_SETGOAL: + doCutEnd = true; + break; + case ACT_SETANGLE: + doCutEnd = true; + break; + case ACT_INPUT: + if (talk(1) == 0x12) { + doCutEnd = true; + } + break; + case ACT_WAIT: + doCutEnd = true; + break; + case ACT_BREAK: + if (daObjMknjD_break() == true) { + if (strcmp(dComIfGp_getStartStageName(), "Ekaze") == 0 || strcmp(dComIfGp_getStartStageName(), "Edaichi") == 0) { + mDoAud_bgmStart(0x80000000 | JA_BGM_JABOO_CAVE); + } + else if (m043E == true) { + mDoAud_bgmStart(0x80000000 | JA_BGM_D_WIND); + } + else { + mDoAud_bgmStart(0x80000000 | JA_BGM_D_EARTH); + } + + if (mSmokeCBs[2].getEmitter() != NULL) { + mSmokeCBs[2].end(); + } + if (mSmokeCBs[3].getEmitter() != NULL) { + mSmokeCBs[3].end(); + } + + doCutEnd = true; + } + break; + case ACT_LESSON: + u32 talkResult = talk(1); + + if (talkResult == 0x12 || talkResult == 0x15) { + doCutEnd = true; + } + break; + case ACT_TACT: + if (m0504 == false) { + doCutEnd = true; + } + else { + dComIfGp_event_onEventFlag(8); + } + break; + default: + doCutEnd = true; + break; + } + + if (doCutEnd) { + dComIfGp_evmng_cutEnd(staffIdx); + } + } + } } /* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ @@ -315,7 +545,7 @@ void daObjMknjD::manage_friend_draw(int i_param1) { } /* 00001400-0000195C .text daObjMknjD_break__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::daObjMknjD_break() { +bool daObjMknjD::Act_c::daObjMknjD_break() { /* Nonmatching */ } From efdfef23ae32359c82ab03b673199bf2917d683e Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Mon, 2 Oct 2023 00:42:39 -0400 Subject: [PATCH 14/25] Match a few more functions, just missing 2 now --- include/JSystem/J3DGraphAnimator/J3DNode.h | 2 - include/d/d_com_inf_game.h | 2 +- include/d/d_particle.h | 4 +- include/f_op/f_op_actor.h | 20 +- src/d/actor/d_a_obj_mknjd.cpp | 219 +++++++++++++++++---- src/d/d_particle.cpp | 5 +- 6 files changed, 199 insertions(+), 53 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DNode.h b/include/JSystem/J3DGraphAnimator/J3DNode.h index 977a610a8..ec61c56f1 100644 --- a/include/JSystem/J3DGraphAnimator/J3DNode.h +++ b/include/JSystem/J3DGraphAnimator/J3DNode.h @@ -23,14 +23,12 @@ public: void setCallBack(J3DNodeCallBack callback) { mCallBack = callback; } J3DNodeCallBack getCallBack() { return mCallBack; } J3DNode* getChild() { return mChild; } - u16 getJntNo() { return mJntNo; } /* 0x04 */ void* mCallBackUserData; /* 0x08 */ J3DNodeCallBack mCallBack; /* 0x0C */ void* field_0x8; /* 0x10 */ J3DNode* mChild; /* 0x14 */ J3DNode* mYounger; - /* 0x18 */ u16 mJntNo; }; // Size: 0x18 #endif /* J3DNODE_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index edddd5410..e9b5b2224 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1218,7 +1218,7 @@ inline s32 dComIfGp_evmng_getEventPrio(s16 eventIdx) { return dComIfGp_getEventManager().getEventPrio(eventIdx); } -inline s16 dComIfGp_evmng_getEventIdx(char* pName, u8 evNo) { +inline s16 dComIfGp_evmng_getEventIdx(const char* pName, u8 evNo) { return dComIfGp_getEventManager().getEventIdx(pName, evNo); } diff --git a/include/d/d_particle.h b/include/d/d_particle.h index f3a155d16..d8a1d2b0d 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -36,7 +36,7 @@ public: class dPa_followEcallBack : public dPa_levelEcallBack { public: - dPa_followEcallBack(u8, u8); + dPa_followEcallBack(u8 = 0, u8 = 0); virtual ~dPa_followEcallBack(); virtual void execute(JPABaseEmitter*); @@ -58,7 +58,7 @@ STATIC_ASSERT(sizeof(dPa_followEcallBack) == 0x14); class dPa_smokeEcallBack : public dPa_followEcallBack { public: - dPa_smokeEcallBack(u8); + dPa_smokeEcallBack(u8 = 1); virtual ~dPa_smokeEcallBack(); virtual void execute(JPABaseEmitter*); diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index c1b79af2d..7cfed1a05 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -119,12 +119,12 @@ public: void setEventId(s16 id) { mEventId = id; } void setCondition(u16 condition) { mCondition = condition; } u16 getCondition() { return mCondition; } - void setArchiveName(char* name) { mArchiveName = name; } + //void setArchiveName(char* name) { mArchiveName = name; } u8 getMapToolId() { return mMapToolId; } s16 getEventId() { return mEventId; } s16 getIdx() { return mIndex; } void setIdx(u8 i_idx) { mIndex = i_idx; } - char* getArchiveName() { return mArchiveName; } + //char* getArchiveName() { return mArchiveName; } BOOL chkCondition(u16 condition) { return (mCondition & condition) == condition; } void onCondition(u16 cond) { mCondition |= cond; } void offCondition(u16 cond) { mCondition &= ~cond; } @@ -135,20 +135,20 @@ public: bool checkCommandDemoAccrpt() { return mCommand == 2; } bool checkCommandCatch() { return mCommand == 6; } - void suspendProc(void* actor) { - if (field_0x10 != NULL) { - field_0x14(actor); - } - } + //void suspendProc(void* actor) { + // if (field_0x10 != NULL) { + // field_0x14(actor); + // } + //} /* 0x04 */ u16 mCommand; /* 0x06 */ u16 mCondition; /* 0x08 */ s16 mEventId; /* 0x0A */ u8 mMapToolId; /* 0x0B */ s8 mIndex; - /* 0x0C */ char* mArchiveName; - /* 0x10 */ u8 field_0x10; - /* 0x14 */ void (*field_0x14)(void*); + /* 0x0C */ s16 (*mpEventCB)(void*, int); + /* 0x10 */ s16 (*mpCheckCB)(void*, int); + /* 0x14 */ s16 (*mpPhotoCB)(void*, int); }; // Size = 0x18 struct actor_place { diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index b1d8a468b..9c6c5e30b 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -16,6 +16,7 @@ #include "d/d_com_inf_game.h" #include "d/d_bg_s_movebg_actor.h" #include "d/d_bg_w.h" +#include "d/d_item.h" #include "d/d_item_data.h" #include "d/d_particle.h" #include "d/actor/d_a_player.h" @@ -25,6 +26,21 @@ #include "dolphin/types.h" +#define ACT_SETGOAL 0 +#define ACT_SETANGLE 1 +#define ACT_WAIT 2 +#define ACT_INPUT 3 +#define ACT_BREAK 4 +#define ACT_HIDE_LINK 5 +#define ACT_DISP_LINK 6 +#define ACT_LESSON 7 +#define ACT_TACT 8 + +#define ID_EARTH_MDL 4 +#define ID_BREAK_MDL 5 +#define ID_WIND_MDL 6 +#define ID_COL_DZB 9 + static const char* daObjMknjD_jointName[] = { "Hahen1", "Hahen2", @@ -63,6 +79,7 @@ const char* daObjMknjD_EventName[] = { }; static u16 joint_number_table[20]; +Mtx M_tmp_mtx; namespace daObjMknjD { class Act_c : public dBgS_MoveBgActor { @@ -91,7 +108,7 @@ namespace daObjMknjD { int Draw(); static const char M_arcname[]; - static Mtx M_tmp_mtx; + //static Mtx M_tmp_mtx; /* 0x02C8 */ cXyz mLeftHalfPos; /* 0x02D4 */ cXyz mRightHalfPos; @@ -101,24 +118,20 @@ namespace daObjMknjD { /* 0x0420 */ request_of_phase_process_class mPhs; - /* 0x0428 */ J3DModel* mModel0; - /* 0x042C */ J3DModel* mModel1; + /* 0x0428 */ J3DModel* mMainMdl; + /* 0x042C */ J3DModel* mBreakMdl; /* 0x0430 */ u16 m0430; /* 0x0432 */ u16 m0432; /* 0x0434 */ u16 m0434; /* 0x0438 */ u32 mBreakTimer; - /* 0x043C */ u8 mModel0Alpha; + /* 0x043C */ u8 mMainMdlAlpha; /* 0x043D */ bool m043D; - /* 0x043E */ bool m043E; + /* 0x043E */ u8 m043E; /* 0x043F */ u8 m043F; - /* 0x0440 */ JPABaseEmitter* mEmitter0; - /* 0x0444 */ JPABaseEmitter* mEmitter1; - /* 0x0448 */ JPABaseEmitter* mEmitter2; - /* 0x044C */ JPABaseEmitter* mEmitter3; - + /* 0x0440 */ JPABaseEmitter* mEmitters[4]; /* 0x0450 */ dPa_smokeEcallBack mSmokeCBs[4]; /* 0x04D0 */ cXyz m04D0; @@ -144,9 +157,13 @@ namespace daObjMknjD { enum Prm_e { PRM_SWITCH_W = 0x08, PRM_SWITCH_S = 0x00, + + PRM_TYPE_W = 0x01, + PRM_TYPE_S = 0x10, }; inline int prm_get_swSave() { return daObj::PrmAbstract(this, PRM_SWITCH_W, PRM_SWITCH_S); } + inline u8 prm_get_Type() { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); } }; const char Act_c::M_arcname[] = "MknjD"; @@ -158,7 +175,7 @@ namespace daObjMknjD { /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ u32 nodeCallBackL(J3DNode* i_node, int i_param2) { if (i_param2 == 0) { - int jntNo = i_node->getJntNo(); + int jntNo = static_cast(i_node)->getJntNo(); J3DModel* mdl = j3dSys.getModel(); daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); @@ -179,7 +196,7 @@ u32 nodeCallBackL(J3DNode* i_node, int i_param2) { /* 0000012C-000001E0 .text nodeCallBackR__FP7J3DNodei */ u32 nodeCallBackR(J3DNode* i_node, int i_param2) { if (i_param2 == 0) { - int jntNo = i_node->getJntNo(); + int jntNo = static_cast(i_node)->getJntNo(); J3DModel* mdl = j3dSys.getModel(); daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); @@ -200,7 +217,7 @@ u32 nodeCallBackR(J3DNode* i_node, int i_param2) { /* 000001E0-000002B0 .text nodeCallBack_Hahen__FP7J3DNodei */ s32 nodeCallBack_Hahen(J3DNode* i_node, int i_param2) { if (i_param2 == 0) { - int jntNo = i_node->getJntNo(); + int jntNo = static_cast(i_node)->getJntNo(); u16 shardIdx = joint_number_table[jntNo - 1]; J3DModel* mdl = j3dSys.getModel(); @@ -242,19 +259,157 @@ s16 daObjMknjD::Act_c::XyEventCB(int) { /* 0000031C-00000620 .text CreateHeap__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::CreateHeap() { /* Nonmatching */ - return 0; + J3DModelData* model_data_d; + if (m043E == true) { + model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_WIND_MDL); + } + else { + model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_EARTH_MDL); + } + + J3DModelData* model_data_h = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_BREAK_MDL); + + JUT_ASSERT(0x123, model_data_d != 0) + JUT_ASSERT(0x124, model_data_h != 0) + + mMainMdl = mDoExt_J3DModel__create(model_data_d, 0x80000, 0x31000002); + mBreakMdl = mDoExt_J3DModel__create(model_data_h, 0x80000, 0x11000002); + + if (mMainMdl != NULL && mBreakMdl != NULL) { + JUTNameTab* nameTable = mMainMdl->getModelData()->getJointName(); + + for (u16 i = 0; i < mMainMdl->getModelData()->getJointNum(); i++) { + const char* jntName = nameTable->getName(i); + + if (strcmp("MknjL", jntName) == 0) { + mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack((J3DNodeCallBack)nodeCallBackL); + } + else if (strcmp("MknjR", jntName) == 0) { + mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack((J3DNodeCallBack)nodeCallBackR); + } + } + + mMainMdl->setUserArea(this); + + int curTblIdx = 0; + nameTable = mBreakMdl->getModelData()->getJointName(); + + for (u16 i = 0; i < mBreakMdl->getModelData()->getJointNum(); i++) { + const char* jntName = nameTable->getName(i); + + for (u16 j = 0; j < 20; j++) { + if (strcmp(daObjMknjD_jointName[j], jntName) == 0) { + mBreakMdl->getModelData()->getJointNodePointer(i)->setCallBack((J3DNodeCallBack)nodeCallBack_Hahen); + joint_number_table[curTblIdx++] = j; + + break; + } + } + } + + mBreakMdl->setUserArea(this); + mMainMdlAlpha = 0xFF; + + return true; + } + + return false; } /* 00000620-000008E8 .text Create__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::Create() { /* Nonmatching */ - return 0; + mCullMtx = mMainMdl->getBaseTRMtx(); + init_mtx(); + mCullMtx = mBreakMdl->getBaseTRMtx(); + init_mtx(); + + fopAcM_setCullSizeBox(this, -400.0f, -1.0f, -400.0f, 400.0f, 405.0f, 400.0f); + + mLeftHalfPos.setAll(0.0f); + mRightHalfPos.setAll(0.0f); + + for (int i = 0; i < 20; i++) { + mShardPositions[i].setAll(0.0f); + mShardHeights[i] = 0.0f; + } + + m043D = false; + mBreakTimer = 0; + + for (int i = 0; i < 4; i++) { + mEmitters[i] = NULL; + } + + if (m043E == true) { + mCheckEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[3], 0xFF); + mDemoEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[1], 0xFF); + mErrorEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[5], 0xFF); + mLessonEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[7], 0xFF); + + mTactMode = 4; + mGiveItemId = TACT_SONG5; + mEvtInfo.setEventName("MKNJD_K_TALK"); + m0430 = 0x2910; + } + else { + mCheckEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[2], 0xFF); + mDemoEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[0], 0xFF); + mErrorEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[4], 0xFF); + mLessonEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[6], 0xFF); + + mTactMode = 3; + mGiveItemId = TACT_SONG4; + mEvtInfo.setEventName("MKNJD_D_TALK"); + m0430 = 0x2920; + } + + mAttentionInfo.mDistances[1] = 0x3D; + mAttentionInfo.mDistances[3] = 0x3D; + mAttentionInfo.mFlags |= 0x20000000 | 0x8; + + if (checkItemGet(mGiveItemId, 1) == 0) { + m043F = 8; + mEvtInfo.mpCheckCB = daObjMknjD_XyCheckCB; + mEvtInfo.mpEventCB = daObjMknjD_XyEventCB; + } + else { + m043F = 0; + } + + mMsgPtr = NULL; + mMsgInstId = 0xFFFFFFFF; + m0504 = false; + + return 1; } /* 000008E8-00000A84 .text Mthd_Create__Q210daObjMknjD5Act_cFv */ s32 daObjMknjD::Act_c::Mthd_Create() { /* Nonmatching */ - return 0; + s32 phase_state; + + fopAcM_SetupActor(this, daObjMknjD::Act_c); + + m043E = prm_get_Type(); + + int switchIdx = prm_get_swSave(); + if (fopAcM_isSwitch(this, switchIdx)) { + mEmitters[2] = NULL; + mEmitters[3] = NULL; + + return 3; + } + else { + phase_state = dComIfG_resLoad(&mPhs, M_arcname); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(M_arcname, ID_COL_DZB, NULL, 0x65A0); + + JUT_ASSERT(0x1CA, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e)) + } + } + + return phase_state; } /* 00000B64-00000BDC .text Delete__Q210daObjMknjD5Act_cFv */ @@ -285,8 +440,8 @@ void daObjMknjD::Act_c::set_mtx() { mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::ZXYrotM(shape_angle); - mModel0->setBaseTRMtx(mDoMtx_stack_c::get()); - mModel1->setBaseTRMtx(mDoMtx_stack_c::get()); + mMainMdl->setBaseTRMtx(mDoMtx_stack_c::get()); + mBreakMdl->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx); } @@ -294,8 +449,8 @@ void daObjMknjD::Act_c::set_mtx() { /* 00000CC8-00000D28 .text init_mtx__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::init_mtx() { /* Nonmatching */ - mModel0->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); - mModel1->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); + mMainMdl->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); + mBreakMdl->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); set_mtx(); } @@ -330,7 +485,7 @@ void daObjMknjD::Act_c::setPlayerAngle(int i_staffIdx) { /* 00000E84-00000F88 .text talk__Q210daObjMknjD5Act_cFi */ u16 daObjMknjD::Act_c::talk(int i_param1) { - u32 msgMode = 0xFF; + u16 msgMode = 0xFF; if (mMsgInstId == 0xFFFFFFFF) { if (i_param1 == 1) { @@ -375,16 +530,6 @@ u16 daObjMknjD::Act_c::talk(int i_param1) { return msgMode; } -#define ACT_SETGOAL 0 -#define ACT_SETANGLE 1 -#define ACT_WAIT 2 -#define ACT_INPUT 3 -#define ACT_BREAK 4 -#define ACT_HIDE_LINK 5 -#define ACT_DISP_LINK 6 -#define ACT_LESSON 7 -#define ACT_TACT 8 - /* 00000F88-00001348 .text privateCut__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::privateCut() { /* Nonmatching */ @@ -591,24 +736,24 @@ void daObjMknjD::setMaterial(J3DMaterial* i_mat, u8 i_alpha) { /* 000022FC-00002430 .text Draw__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::Draw() { g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); - g_env_light.setLightTevColorType(mModel1, &mTevStr); + g_env_light.setLightTevColorType(mBreakMdl, &mTevStr); g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); - g_env_light.setLightTevColorType(mModel0, &mTevStr); + g_env_light.setLightTevColorType(mMainMdl, &mTevStr); dComIfGd_setList(); - J3DModelData* mdlData = mModel0->getModelData(); + J3DModelData* mdlData = mMainMdl->getModelData(); u16 jointCount = mdlData->getJointNum(); for (u16 i = 0; i < jointCount; i++) { - setMaterial(mdlData->getJointNodePointer(i)->getMesh(), mModel0Alpha); + setMaterial(mdlData->getJointNodePointer(i)->getMesh(), mMainMdlAlpha); } dComIfGd_setListSky(); - mDoExt_modelUpdateDL(mModel0); + mDoExt_modelUpdateDL(mMainMdl); if (m043D == true) { - mDoExt_modelUpdateDL(mModel1); + mDoExt_modelUpdateDL(mBreakMdl); } dComIfGd_setListBG(); diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp index 4a7deed09..840c39a59 100644 --- a/src/d/d_particle.cpp +++ b/src/d/d_particle.cpp @@ -136,6 +136,10 @@ void dPa_smokeEcallBack::end() { /* Nonmatching */ } +void dPa_smokeEcallBack::~dPa_smokeEcallBack() { + +} + /* 8007BBD8-8007BC84 .text dPa_setWindPower__FP15JPABaseParticle */ void dPa_setWindPower(JPABaseParticle*) { /* Nonmatching */ @@ -560,4 +564,3 @@ void dPa_setColorEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, si dPa_setColorEcallBack::~dPa_setColorEcallBack() { /* Nonmatching */ } - From 7921fd7c37f65dd2355e44aae42763573f2a57e2 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Mon, 2 Oct 2023 01:07:58 -0400 Subject: [PATCH 15/25] Fix M_tmp_mtx --- src/d/actor/d_a_obj_mknjd.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 9c6c5e30b..66ce0b9f6 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -79,7 +79,6 @@ const char* daObjMknjD_EventName[] = { }; static u16 joint_number_table[20]; -Mtx M_tmp_mtx; namespace daObjMknjD { class Act_c : public dBgS_MoveBgActor { @@ -164,6 +163,8 @@ namespace daObjMknjD { inline int prm_get_swSave() { return daObj::PrmAbstract(this, PRM_SWITCH_W, PRM_SWITCH_S); } inline u8 prm_get_Type() { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); } + + static Mtx M_tmp_mtx; }; const char Act_c::M_arcname[] = "MknjD"; @@ -172,6 +173,8 @@ namespace daObjMknjD { static void setMaterial(J3DMaterial*, u8); } +Mtx daObjMknjD::Act_c::M_tmp_mtx; + /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ u32 nodeCallBackL(J3DNode* i_node, int i_param2) { if (i_param2 == 0) { From c02882a3deca12dfb7aecec0eb1aa93fe0bbdfa6 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Tue, 3 Oct 2023 00:13:45 -0400 Subject: [PATCH 16/25] Match daObjMknjD_break --- include/JSystem/JParticle/JPAEmitter.h | 16 ++++ include/d/d_com_inf_game.h | 10 ++ include/d/d_particle.h | 11 ++- src/d/actor/d_a_obj_mknjd.cpp | 124 ++++++++++++++++++++++++- 4 files changed, 157 insertions(+), 4 deletions(-) diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index b982719fb..6af995f34 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -74,6 +74,22 @@ public: JPASetRMtxTVecfromMtx(mtx, mGlobalRotation, mGlobalTranslation); } + void setVolumeSweep(float i_volSweep) { mVolumeSweep = i_volSweep; } + void setLifeTime(s16 i_lifeTime) { mLifeTime = i_lifeTime; } + void setRate(float i_rate) { mRate = i_rate; } + void setMaxFrame(s32 i_maxFrame) { mMaxFrame = i_maxFrame; } + + void setGlobalDynamicsScale(JGeometry::TVec3& i_vec) { + mGlobalScale.x = i_vec.x; + mGlobalScale.y = i_vec.y; + mGlobalScale.z = i_vec.z; + } + void setGlobalParticleScale(JGeometry::TVec3& i_vec) { + mGlobalScale2D.x = i_vec.x; + mGlobalScale2D.y = i_vec.y; + mGlobalScale2D.z = i_vec.z; + } + void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); } void becomeInvalidEmitter() { diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index e9b5b2224..7d6bfa1de 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1461,6 +1461,16 @@ inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, co pPrmColor, pEnvColor, pScale2D); } +inline JPABaseEmitter* dComIfGp_particle_setProjection(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, + dPa_levelEcallBack* pCallBack, s8 setupInfo, + const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); + return pParticle->setProjection(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, + pPrmColor, pEnvColor, pScale2D); +} + inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, const csXyz* angle, const cXyz* scale) { return dComIfGp_particle_set(particleID, pos, angle, scale, 0xFF, NULL, -1, NULL, NULL, NULL); diff --git a/include/d/d_particle.h b/include/d/d_particle.h index d8a1d2b0d..45a725f27 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -43,6 +43,8 @@ public: virtual void draw(JPABaseEmitter*); virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); virtual void end(); + + void setRateOff(u8 i_rate) { field_0x11 = i_rate; } JPABaseEmitter* getEmitter() { return mpEmitter; } @@ -254,8 +256,15 @@ public: const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, const cXyz* pScale2D) { - return set(1, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + return set(2, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); } + JPABaseEmitter* setProjection(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, + s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + return set(4, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + } + void drawModelParticle() { mModelCtrl->draw(); } diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 66ce0b9f6..54cf9c29e 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -123,7 +123,7 @@ namespace daObjMknjD { /* 0x0430 */ u16 m0430; /* 0x0432 */ u16 m0432; /* 0x0434 */ u16 m0434; - /* 0x0438 */ u32 mBreakTimer; + /* 0x0438 */ s32 mBreakTimer; /* 0x043C */ u8 mMainMdlAlpha; /* 0x043D */ bool m043D; @@ -133,7 +133,7 @@ namespace daObjMknjD { /* 0x0440 */ JPABaseEmitter* mEmitters[4]; /* 0x0450 */ dPa_smokeEcallBack mSmokeCBs[4]; - /* 0x04D0 */ cXyz m04D0; + /* 0x04D0 */ cXyz mBrokenPos; /* 0x04DC */ s16 mCheckEventIdx; /* 0x04DE */ s16 mDemoEventIdx; @@ -694,7 +694,125 @@ void daObjMknjD::manage_friend_draw(int i_param1) { /* 00001400-0000195C .text daObjMknjD_break__Q210daObjMknjD5Act_cFv */ bool daObjMknjD::Act_c::daObjMknjD_break() { - /* Nonmatching */ + bool ret = false; + mBreakTimer++; + + /* Statue splitting into left/right halves */ + // From 0 to 60 frames, the left and right halves of the statue split apart. + if (mBreakTimer < 60) { + mLeftHalfPos.x = -((mBreakTimer * 20.0) / 60.0); + mRightHalfPos.x = (mBreakTimer * 20.0) / 60.0; + } + // After 60 frames, the halves stay at +/- 20 units on the X axis. + else { + mLeftHalfPos.x = -20.0f; + mRightHalfPos.x = 20.0f; + } + + /* Particles and sound effects */ + // After 1 frame, the particles for the statue splitting in half spawn. + if (mBreakTimer == 1) { + mEmitters[0] = dComIfGp_particle_set(0x8185, ¤t.pos, ¤t.angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + + GXColor emitter2Color; + emitter2Color.r = mTevStr.mColorC0.r; + emitter2Color.g = mTevStr.mColorC0.g; + emitter2Color.b = mTevStr.mColorC0.b; + emitter2Color.a = mTevStr.mColorC0.a; + + mEmitters[1] = dComIfGp_particle_setProjection(0x8186, ¤t.pos, ¤t.angle, NULL, 0xFF, NULL, current.roomNo, &mTevStr.mColorK0, &emitter2Color, NULL); + + mEmitters[2] = dComIfGp_particle_setToon(0xA187, ¤t.pos, ¤t.angle, NULL, 0xFF, &mSmokeCBs[2], -1, NULL, NULL, NULL); + mSmokeCBs[2].setRateOff(0); + + fopAcM_seStartCurrent(this, JA_SE_OBJ_SAGE_GATE_CREAK, 0); + } + // After 30 frames, the sound effect for the light beam particles coming from the statue plays. + else if (mBreakTimer == 30) { + fopAcM_seStartCurrent(this, JA_SE_OBJ_SAGE_GATE_LIGHT, 0); + } + // After 60 frames, the shards that the statue will crumble into begin moving to their initial locations. + else if (mBreakTimer == 60) { + m043D = true; + + for (int i = 0; i < 20; i++) { + mShardPositions[i].setAll(0.0f); + + if (i == 0x02 || i == 0x03 || i == 0x06 || i == 0x07 || i == 0x0A || i == 0x0D || i == 0x0E || i == 0x12 || i == 0x13) { + mShardPositions[i].x += 20.0f; + } + else { + mShardPositions[i].x -= 20.0f; + } + } + } + // After 160 frames, the particles for the statue shattering spawn. + else if (mBreakTimer == 160) { + dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f)); + + fopAcM_seStartCurrent(this, JA_SE_OBJ_SAGE_GATE_BREAK, 0); + + mBrokenPos = current.pos; + mBrokenPos.y += 350.0f; + + mEmitters[3] = dComIfGp_particle_setToon(0x2027, &mBrokenPos, ¤t.angle, NULL, 0xFF, &mSmokeCBs[3], -1, NULL, NULL, NULL); + if (mEmitters[3] != NULL) { + mEmitters[3]->setVolumeSweep(0.5f); + mEmitters[3]->setLifeTime(0x2D); + mEmitters[3]->setRate(50.0f); + mEmitters[3]->setMaxFrame(1); + + JGeometry::TVec3 vec; + + vec.set(3.0f, 3.0f, 3.0f); + mEmitters[3]->setGlobalDynamicsScale(vec); + + vec.set(6.0f, 6.0f, 6.0f); + mEmitters[3]->setGlobalParticleScale(vec); + } + } + // After 255 frames, the cutscene ends. + else if (mBreakTimer == 255) { + ret = true; + } + + /* Main (unbroken) model transparency */ + // From 0 to 60 frames, the main model is 100% visible. + if (mBreakTimer < 60) { + mMainMdlAlpha = 0xFF; + } + // From 60 to 160 frames, the main model's transparency is lowered to 0. + else if (mBreakTimer >= 60 && mBreakTimer < 160) { + f64 mdlAlpha = ((0xA0 - mBreakTimer) * 255.0) / 100.0; + + if (mdlAlpha >= 255.0) { + mMainMdlAlpha = 0xFF; + } + else { + mMainMdlAlpha = static_cast(mdlAlpha); + } + } + // After 160 frames, the main model's transparency is 0. + else { + mMainMdlAlpha = 0; + } + + /* Falling shards */ + // After 160 frames, the shards of the broken statue model begin to fall. + if (mBreakTimer >= 160) { + int fallingShardNum = 19 - (mBreakTimer - 160); + + if (fallingShardNum < 0) { + fallingShardNum = 0; + } + + for (fallingShardNum; fallingShardNum < 20; fallingShardNum++) { + mShardHeights[fallingShardNum] -= 2.0f; + mShardPositions[fallingShardNum].y += mShardHeights[fallingShardNum]; + } + } + + return ret; } /* 0000195C-000020E0 .text Execute__Q210daObjMknjD5Act_cFPPA3_A4_f */ From ba091d3092e4a54e59e744b07b004d3ddf2b4b9b Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Tue, 3 Oct 2023 02:20:21 -0400 Subject: [PATCH 17/25] Execute to 90% --- include/d/actor/d_a_player.h | 2 +- include/d/d_com_inf_game.h | 12 ++ include/d/d_event.h | 5 +- include/d/d_event_manager.h | 4 +- include/m_Do/m_Do_audio.h | 4 + src/d/actor/d_a_obj_mknjd.cpp | 218 +++++++++++++++++++++++++++++++++- 6 files changed, 237 insertions(+), 8 deletions(-) diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 98d844f2f..d7c9ef6aa 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -110,7 +110,7 @@ public: virtual void checkCutCharge() const; virtual void getBokoFlamePos(cXyz*); virtual void checkTactWait() const; - virtual void setTactZev(unsigned int, int, char*); + virtual void setTactZev(unsigned int, int, const char*); virtual void onDekuSpReturnFlg(u8); virtual void checkComboCutTurn() const; virtual f32 getBaseAnimeFrameRate() = 0; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 7d6bfa1de..0f4ccdde4 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -837,6 +837,10 @@ inline fopAc_ac_c* dComIfGp_getPlayer(int idx) { return g_dComIfG_gameInfo.play.getPlayer(idx); } +inline fopAc_ac_c* dComIfGp_getCb1Player() { + return g_dComIfG_gameInfo.play.getPlayerPtr(1); +} + inline roomRead_class* dComIfGp_getStageRoom() { return g_dComIfG_gameInfo.play.getStage().getRoom(); } @@ -1195,6 +1199,10 @@ inline fopAc_ac_c* dComIfGp_event_getTalkPartner() { return g_dComIfG_gameInfo.play.getEvent().convPId(t); } +inline void dComIfGp_event_setTalkPartner(void* i_actor) { + g_dComIfG_gameInfo.play.getEvent().setPtT(i_actor); +} + inline fopAc_ac_c* dComIfGp_event_getItemPartner() { u32 i = g_dComIfG_gameInfo.play.getEvent().mPtItem; return g_dComIfG_gameInfo.play.getEvent().convPId(i); @@ -1246,6 +1254,10 @@ inline char* dComIfGp_evmng_getMyStringP(int staffIdx, const char* name) { return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 4)); //type 4 is string } +inline BOOL dComIfGp_evmng_startCheck(s16 eventID) { + return dComIfGp_getEventManager().startCheck(eventID); +} + inline BOOL dComIfGp_evmng_endCheck(s16 eventID) { return dComIfGp_getEventManager().endCheck(eventID); } diff --git a/include/d/d_event.h b/include/d/d_event.h index 464231fc4..a17cb00c0 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -69,7 +69,7 @@ public: void remove(); void getStageEventDt(); void nextStageEventDt(void*); - void getPId(void*); + int getPId(void*); fopAc_ac_c * convPId(unsigned int); void getTactFreeMStick(int); void getTactFreeCStick(int); @@ -78,6 +78,7 @@ public: u8 getTalkXYBtn() { return mTalkButton; } bool chkTalkXY() { return mTalkButton == 1 || mTalkButton == 2 || mTalkButton == 3; } void setPtI_Id(u32 id) { mPtItem = id; } + void setPtT(void* i_actor) { mPtTalk = getPId(i_actor); } u8 getPreItemNo() { return mItemNo; } u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } @@ -116,4 +117,4 @@ public: /* 0xEE */ u8 mTactFreeCStick[4]; }; // Size = 0xF4 -#endif /* D_EVENT_D_EVENT_H */ \ No newline at end of file +#endif /* D_EVENT_D_EVENT_H */ diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index 4be016f03..dbcc0fba8 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -37,7 +37,7 @@ public: void getEventData(s16); s16 getEventIdx(const char*, u8); void order(s16); - void startCheck(s16); + bool startCheck(s16); BOOL startCheckOld(const char*); BOOL endCheck(s16); BOOL endCheckOld(const char*); @@ -76,4 +76,4 @@ inline int dEvmng_strcmp(const char* s1, const char* s2) { return strcmp(s1, s2); } -#endif /* D_EVENT_D_EVENT_MANAGER_H */ \ No newline at end of file +#endif /* D_EVENT_D_EVENT_MANAGER_H */ diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index a0eee9707..1dd104b46 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -55,6 +55,10 @@ inline void mDoAud_load2ndDynamicWave() { mDoAud_zelAudio_c::getInterface()->load2ndDynamicWave(); } +inline void mDoAud_taktModeMuteOff() { + mDoAud_zelAudio_c::getInterface()->taktModeMuteOff(); +} + inline void mDoAud_resetProcess() { if (mDoAud_zelAudio_c::isResetFlag()) { mDoAud_zelAudio_c::getInterface()->resetProcess(); diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 54cf9c29e..1e3fa65a6 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -103,7 +103,7 @@ namespace daObjMknjD { void privateCut(); bool daObjMknjD_break(); - int Execute(float(**)[3][4]); + int Execute(Mtx**); int Draw(); static const char M_arcname[]; @@ -816,9 +816,221 @@ bool daObjMknjD::Act_c::daObjMknjD_break() { } /* 0000195C-000020E0 .text Execute__Q210daObjMknjD5Act_cFPPA3_A4_f */ -int daObjMknjD::Act_c::Execute(float(**)[3][4]) { +int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { /* Nonmatching */ - return 0; + daPy_py_c* player = static_cast(dComIfGp_getPlayer(0)); + daPy_py_c* partner = static_cast(dComIfGp_getCb1Player()); + + switch (m043F) { + case 0: + mEvtInfo.onCondition(1); + + if (mEvtInfo.checkCommandTalk() == true) { + m0500 = 1; + m043F = 0x0B; + } + else if (partner != NULL) { + cXyz partnerDiff = current.pos - partner->current.pos; + + s16 rotDiff = cM_atan2s(partnerDiff.x, partnerDiff.z) - current.angle.y; + f32 absXZ = partnerDiff.absXZ(); + + if (absXZ < 800.0f && (rotDiff < -0x4000 || rotDiff > 0x4000)) { + if (dComIfGp_checkPlayerStatus1(0, 1) != 0) { + m043F = 1; + manage_friend_draw(0); + } + } + } + + break; + case 1: + if (m043E == 1) { + static_cast(dComIfGp_getPlayer(0))->setTactZev(fopAcM_GetID(this), 4, daObjMknjD_EventName[3]); + } + else { + static_cast(dComIfGp_getPlayer(0))->setTactZev(fopAcM_GetID(this), 3, daObjMknjD_EventName[2]); + } + + m043F = 2; + break; + case 2: + if (dComIfGp_evmng_startCheck(mCheckEventIdx) != 0) { + if (partner != NULL && player != NULL) { + s16 rotDiff = cM_atan2s(current.pos.x - partner->current.pos.x, current.pos.z - partner->current.pos.z) - current.angle.y; + f32 absXZ = (partner->current.pos - current.pos).absXZ(); + + if (absXZ < 800.0f && (rotDiff >= -0x4000 && rotDiff > 0x4000)) { + fopAcM_orderChangeEventId(this, mDemoEventIdx, 0, 0xFFFF); + dComIfGs_onEventBit(m0430); + + s16 procMedli = PROC_NPC_MD; + void* judgeResult = fopAcIt_Judge(fpcSch_JudgeForPName, &procMedli); + + if (judgeResult != NULL) { + dComIfGp_event_setTalkPartner(judgeResult); + } + + m043F = 6; + } + else { + fopAcM_orderChangeEventId(this, mErrorEventIdx, 0, 0xFFFF); + + m043F = 3; + manage_friend_draw(1); + } + } + else { + fopAcM_orderChangeEventId(this, mErrorEventIdx, 0, 0xFFFF); + + m043F = 3; + manage_friend_draw(1); + } + } + else { + if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + m043F = 0; + manage_friend_draw(1); + } + } + + break; + case 3: + if (mEvtInfo.checkCommandDemoAccrpt()) { + m043F = 4; + } + + break; + case 4: + if (dComIfGp_evmng_endCheck(mErrorEventIdx)) { + dComIfGp_event_reset(); + m043F = 5; + } + + break; + case 5: + if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + m043F = 0; + } + + break; + case 6: + if (mEvtInfo.checkCommandDemoAccrpt()) { + m043F = 7; + + mDoAud_bgmStop(0x1E); + mDoAud_taktModeMuteOff(); + + dComIfGp_getAttention().mFlags |= 0x80000000; + + if (m043E == true) { + m0432 = 0x2B; + m0434 = 5; + } + else { + m0432 = 0x0E; + m0434 = 5; + } + } + + break; + case 7: + privateCut(); + + if (dComIfGp_evmng_endCheck(mDemoEventIdx)) { + dComIfGp_getAttention().mFlags &= ~0x80000000; + dComIfGp_event_onEventFlag(8); + + fopAcM_delete(this); + } + + break; + case 8: + mEvtInfo.onCondition(1); + mEvtInfo.onCondition(32); + + if (mEvtInfo.checkCommandTalk() == true) { + bool bXyzTalk = false; + + if (dComIfGp_event_chkTalkXY()) { + bXyzTalk = true; + } + + if (bXyzTalk) { + m0500 = 0; + m043F = 9; + + fopAcM_seStartCurrent(this, JA_SE_PRE_TAKT, 0); + } + else { + m0500 = 1; + m043F = 11; + } + } + + break; + case 9: + m043F = 10; + break; + case 10: + privateCut(); + + if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode == 0) { + if (checkItemGet(mGiveItemId, 1) != 0) { + m043F = 0; + } + else { + m043F = 8; + } + } + + break; + case 11: + static_cast(dComIfGp_getPlayer(0))->onPlayerNoDraw(); + m043F = 12; + break; + case 12: + if (talk(1) == 18) { + partner->offPlayerNoDraw(); + g_dComIfG_gameInfo.play.mEvtCtrl.mEventFlag |= 8; + + if (checkItemGet(mGiveItemId, 1) != 0) { + m043F = 0; + } + else { + m043F = 8; + } + } + break; + } + + set_mtx(); + + *i_mtx = &M_tmp_mtx; + + if (m0432 > 1) { + m0432--; + } + if (m0432 == 1) { + if (m043E == true) { + mDoAud_bgmStart(0x80000000 | JA_BGM_TAKT_MAKORE); + } + else { + mDoAud_bgmStart(0x80000000 | JA_BGM_TAKT_MEDRI); + } + + m0432 = 0; + } + + if (m0434 > 1) { + m0434--; + } + if (m0434 == 1) { + manage_friend_draw(1); + m0434 = 0; + } + + return 1; } /* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */ From ff47eff408e2a0f78cc0236cae787b8c483b6582 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 00:34:23 -0400 Subject: [PATCH 18/25] Finish Execute --- include/d/d_event_manager.h | 2 +- src/d/actor/d_a_obj_mknjd.cpp | 37 ++++++++++++++++------------------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index dbcc0fba8..58dd205f0 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -37,7 +37,7 @@ public: void getEventData(s16); s16 getEventIdx(const char*, u8); void order(s16); - bool startCheck(s16); + BOOL startCheck(s16); BOOL startCheckOld(const char*); BOOL endCheck(s16); BOOL endCheckOld(const char*); diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 1e3fa65a6..aed616049 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -12,6 +12,7 @@ #include "JAZelAudio/JAIZelBasic.h" #include "JAZelAudio/JAZelAudio_BGM.h" #include "JAZelAudio/JAZelAudio_SE.h" +#include "SSystem/SComponent/c_xyz.h" #include "d/d_procname.h" #include "d/d_com_inf_game.h" #include "d/d_bg_s_movebg_actor.h" @@ -176,7 +177,7 @@ namespace daObjMknjD { Mtx daObjMknjD::Act_c::M_tmp_mtx; /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ -u32 nodeCallBackL(J3DNode* i_node, int i_param2) { +static u32 nodeCallBackL(J3DNode* i_node, int i_param2) { if (i_param2 == 0) { int jntNo = static_cast(i_node)->getJntNo(); @@ -197,7 +198,7 @@ u32 nodeCallBackL(J3DNode* i_node, int i_param2) { } /* 0000012C-000001E0 .text nodeCallBackR__FP7J3DNodei */ -u32 nodeCallBackR(J3DNode* i_node, int i_param2) { +static u32 nodeCallBackR(J3DNode* i_node, int i_param2) { if (i_param2 == 0) { int jntNo = static_cast(i_node)->getJntNo(); @@ -218,7 +219,7 @@ u32 nodeCallBackR(J3DNode* i_node, int i_param2) { } /* 000001E0-000002B0 .text nodeCallBack_Hahen__FP7J3DNodei */ -s32 nodeCallBack_Hahen(J3DNode* i_node, int i_param2) { +static s32 nodeCallBack_Hahen(J3DNode* i_node, int i_param2) { if (i_param2 == 0) { int jntNo = static_cast(i_node)->getJntNo(); u16 shardIdx = joint_number_table[jntNo - 1]; @@ -313,10 +314,10 @@ int daObjMknjD::Act_c::CreateHeap() { mBreakMdl->setUserArea(this); mMainMdlAlpha = 0xFF; - return true; + return 1; } - return false; + return 0; } /* 00000620-000008E8 .text Create__Q210daObjMknjD5Act_cFv */ @@ -829,8 +830,8 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { m0500 = 1; m043F = 0x0B; } - else if (partner != NULL) { - cXyz partnerDiff = current.pos - partner->current.pos; + else if (player != NULL) { + cXyz partnerDiff = current.pos - player->current.pos; s16 rotDiff = cM_atan2s(partnerDiff.x, partnerDiff.z) - current.angle.y; f32 absXZ = partnerDiff.absXZ(); @@ -846,10 +847,10 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { break; case 1: if (m043E == 1) { - static_cast(dComIfGp_getPlayer(0))->setTactZev(fopAcM_GetID(this), 4, daObjMknjD_EventName[3]); + player->setTactZev(fopAcM_GetID(this), 4, daObjMknjD_EventName[3]); } else { - static_cast(dComIfGp_getPlayer(0))->setTactZev(fopAcM_GetID(this), 3, daObjMknjD_EventName[2]); + player->setTactZev(fopAcM_GetID(this), 3, daObjMknjD_EventName[2]); } m043F = 2; @@ -858,9 +859,11 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { if (dComIfGp_evmng_startCheck(mCheckEventIdx) != 0) { if (partner != NULL && player != NULL) { s16 rotDiff = cM_atan2s(current.pos.x - partner->current.pos.x, current.pos.z - partner->current.pos.z) - current.angle.y; - f32 absXZ = (partner->current.pos - current.pos).absXZ(); + + cXyz diff = player->current.pos - partner->current.pos; + f32 absXZ = diff.absXZ(); - if (absXZ < 800.0f && (rotDiff >= -0x4000 && rotDiff > 0x4000)) { + if ((absXZ < 800.0f) && ((rotDiff < -0x4000) || (rotDiff > 0x4000))) { fopAcM_orderChangeEventId(this, mDemoEventIdx, 0, 0xFFFF); dComIfGs_onEventBit(m0430); @@ -950,17 +953,11 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { mEvtInfo.onCondition(32); if (mEvtInfo.checkCommandTalk() == true) { - bool bXyzTalk = false; - if (dComIfGp_event_chkTalkXY()) { - bXyzTalk = true; - } - - if (bXyzTalk) { m0500 = 0; m043F = 9; - fopAcM_seStartCurrent(this, JA_SE_PRE_TAKT, 0); + fopAcM_seStart(this, JA_SE_PRE_TAKT, 0); } else { m0500 = 1; @@ -986,12 +983,12 @@ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { break; case 11: - static_cast(dComIfGp_getPlayer(0))->onPlayerNoDraw(); + player->onPlayerNoDraw(); m043F = 12; break; case 12: if (talk(1) == 18) { - partner->offPlayerNoDraw(); + player->offPlayerNoDraw(); g_dComIfG_gameInfo.play.mEvtCtrl.mEventFlag |= 8; if (checkItemGet(mGiveItemId, 1) != 0) { From 851e4cf3dd38304e56ef41b6ee7ba47b03bae8fe Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 00:46:20 -0400 Subject: [PATCH 19/25] Fixes from merge --- include/JSystem/J3DGraphAnimator/J3DModel.h | 4 ---- include/JSystem/J3DGraphBase/J3DMatBlock.h | 14 ++++++-------- include/JSystem/J3DGraphBase/J3DMaterial.h | 1 - include/JSystem/JParticle/JPAEmitter.h | 1 - include/d/d_drawlist.h | 4 ++-- include/d/d_particle.h | 2 -- src/d/actor/d_a_obj_mknjd.cpp | 2 +- 7 files changed, 9 insertions(+), 19 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index 691bd4c87..dc2bf02ae 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -134,10 +134,6 @@ public: Vec* getBaseScale() { return &mBaseScale; } void setVisibilityManager(J3DVisibilityManager* manager) { mpVisibilityManager = manager; } - void setAnmMtx(int jntNo, Mtx mtx) { - MTXCopy(mtx, mpNodeMtx[jntNo]); - } - /* 0x004 */ J3DModelData* mModelData; /* 0x008 */ u32 mFlags; /* 0x00C */ u32 mDiffFlag; diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index d99cf2e52..64497f830 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -541,16 +541,14 @@ inline u16 calcZModeID(u8 param_0, u8 param_1, u8 param_2) { return (param_1 * 2) + (param_0 * 0x10) + param_2; } -extern u8 j3dZModeTable[96]; - extern J3DZModeInfo j3dZModeTable[2]; struct J3DZMode { J3DZMode() { mZModeID = j3dDefaultZModeID; } - u8 getCompareEnaable() const { return j3dZModeTable[mZModeID * 3]; } - u8 getFunc() const { return j3dZModeTable[mZModeID * 3 + 1]; } - u8 getUpdateEnable() const { return j3dZModeTable[mZModeID * 3 + 2]; } + u8 getCompareEnaable() const { return j3dZModeTable[mZModeID].mCompareEnable; } + u8 getFunc() const { return j3dZModeTable[mZModeID].mFunc; } + u8 getUpdateEnable() const { return j3dZModeTable[mZModeID].mUpdateEnable; } void setZModeInfo(const J3DZModeInfo& info) { mZModeID = calcZModeID(info.mCompareEnable, info.mFunc, info.mUpdateEnable); @@ -561,11 +559,11 @@ struct J3DZMode { } void setCompareEnable(u8 i_compare) { - mZModeID = calcZModeID(i_compare, j3dZModeTable[mZModeID].field_0x1, j3dZModeTable[mZModeID].field_0x2); + mZModeID = calcZModeID(i_compare, j3dZModeTable[mZModeID].mFunc, j3dZModeTable[mZModeID].mUpdateEnable); } void setUpdateEnable(u8 i_enable) { - mZModeID = calcZModeID(j3dZModeTable[mZModeID].field_0x0, j3dZModeTable[mZModeID].field_0x1, i_enable); + mZModeID = calcZModeID(j3dZModeTable[mZModeID].mCompareEnable, j3dZModeTable[mZModeID].mFunc, i_enable); } /* 0x0 */ u16 mZModeID; @@ -584,7 +582,7 @@ struct J3DBlend : public J3DBlendInfo { } void setType(u8 i_type) { - mType = i_type; + mBlendMode = i_type; } void setSrcFactor(u8 i_src) { diff --git a/include/JSystem/J3DGraphBase/J3DMaterial.h b/include/JSystem/J3DGraphBase/J3DMaterial.h index 239936e89..7bc64fce2 100644 --- a/include/JSystem/J3DGraphBase/J3DMaterial.h +++ b/include/JSystem/J3DGraphBase/J3DMaterial.h @@ -76,7 +76,6 @@ public: void setTevKColor(u32 i, const J3DGXColor* i_color) { mTevBlock->setTevKColor(i, i_color); } void setMaterialAnm(J3DMaterialAnm* i_anm) { mMaterialAnm = i_anm; } void setCullMode(u8 i_mode) { mColorBlock->setCullMode(i_mode); } - void setMaterialMode(u32 i_mode) { mMaterialMode = i_mode; } public: /* 0x04 */ J3DMaterial* mNext; diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 6e94f97ba..e68b4e077 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -94,7 +94,6 @@ public: void setVolumeSweep(float i_volSweep) { mVolumeSweep = i_volSweep; } void setLifeTime(s16 i_lifeTime) { mLifeTime = i_lifeTime; } void setRate(float i_rate) { mRate = i_rate; } - void setMaxFrame(s32 i_maxFrame) { mMaxFrame = i_maxFrame; } void setGlobalDynamicsScale(JGeometry::TVec3& i_vec) { mGlobalScale.x = i_vec.x; diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 8fad0ccf0..c35468b62 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -214,8 +214,8 @@ public: void setXluDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, XLU_BUFFER); } void setOpaDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, OPA_BUFFER); } - void setOpaList() { setOpaDrawList(mpBufInvisibleModelOpa); } - void setXluList() { setXluDrawList(mpBufInvisibleModelXlu); } + void setOpaList() { setOpaDrawList(mpBufWorldOpa); } + void setXluList() { setXluDrawList(mpBufWorldXlu); } void setOpaListInvisible() { setOpaDrawList(field_0x00030); } void setXluListInvisible() { setXluDrawList(field_0x00034); } void setOpaListMaskOff() { setOpaDrawList(mpBufInvisibleModelMaskOffOpa); } diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 143dc2991..49b76f16d 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -46,8 +46,6 @@ public: virtual void draw(JPABaseEmitter*); virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); virtual void end(); - - void setRateOff(u8 i_rate) { field_0x11 = i_rate; } JPABaseEmitter* getEmitter() { return mpEmitter; } void setRateOff(u8 param_0) { field_0x11 = param_0; } diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index aed616049..41c706929 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -1058,7 +1058,7 @@ void daObjMknjD::setMaterial(J3DMaterial* i_mat, u8 i_alpha) { i_mat->getPEBlock()->getBlend()->setDstFactor(5); } - i_mat->getTevKColor(3)->a = i_alpha; + i_mat->getTevKColor(3)->mColor.a = i_alpha; } } } From 476200a2ae2417b8c575313743e9810bf672c974 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 00:56:26 -0400 Subject: [PATCH 20/25] Remove NONMATCHING comments from relevant functions --- src/d/actor/d_a_obj_mknjd.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 41c706929..1fe538dd8 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -322,7 +322,6 @@ int daObjMknjD::Act_c::CreateHeap() { /* 00000620-000008E8 .text Create__Q210daObjMknjD5Act_cFv */ int daObjMknjD::Act_c::Create() { - /* Nonmatching */ mCullMtx = mMainMdl->getBaseTRMtx(); init_mtx(); mCullMtx = mBreakMdl->getBaseTRMtx(); @@ -390,7 +389,6 @@ int daObjMknjD::Act_c::Create() { /* 000008E8-00000A84 .text Mthd_Create__Q210daObjMknjD5Act_cFv */ s32 daObjMknjD::Act_c::Mthd_Create() { - /* Nonmatching */ s32 phase_state; fopAcM_SetupActor(this, daObjMknjD::Act_c); @@ -440,7 +438,6 @@ s32 daObjMknjD::Act_c::Mthd_Delete() { /* 00000C34-00000CC8 .text set_mtx__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::set_mtx() { - /* Nonmatching */ mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::ZXYrotM(shape_angle); @@ -452,7 +449,6 @@ void daObjMknjD::Act_c::set_mtx() { /* 00000CC8-00000D28 .text init_mtx__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::init_mtx() { - /* Nonmatching */ mMainMdl->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); mBreakMdl->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); @@ -461,7 +457,6 @@ void daObjMknjD::Act_c::init_mtx() { /* 00000D28-00000E04 .text setGoal__Q210daObjMknjD5Act_cFi */ void daObjMknjD::Act_c::setGoal(int i_staffIdx) { - /* Nonmatching */ cXyz pos = *dComIfGp_evmng_getMyXyzP(i_staffIdx, "Posion"); mDoMtx_stack_c::transS(getPosition()); @@ -477,7 +472,6 @@ void daObjMknjD::Act_c::setGoal(int i_staffIdx) { /* 00000E04-00000E84 .text setPlayerAngle__Q210daObjMknjD5Act_cFi */ void daObjMknjD::Act_c::setPlayerAngle(int i_staffIdx) { - /* Nonmatching */ u32 angle = *dComIfGp_evmng_getMyIntegerP(i_staffIdx, "angle"); daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); @@ -536,7 +530,6 @@ u16 daObjMknjD::Act_c::talk(int i_param1) { /* 00000F88-00001348 .text privateCut__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::privateCut() { - /* Nonmatching */ static const char* cut_name_table[] = { "SETGOAL", "SETANGLE", @@ -818,7 +811,6 @@ bool daObjMknjD::Act_c::daObjMknjD_break() { /* 0000195C-000020E0 .text Execute__Q210daObjMknjD5Act_cFPPA3_A4_f */ int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { - /* Nonmatching */ daPy_py_c* player = static_cast(dComIfGp_getPlayer(0)); daPy_py_c* partner = static_cast(dComIfGp_getCb1Player()); From 985e44a9b5f547b514796856246c7bba695169a4 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 01:17:19 -0400 Subject: [PATCH 21/25] Updates to fix building --- include/JSystem/JParticle/JPAEmitter.h | 17 ++++++----------- include/d/d_drawlist.h | 8 ++++---- include/d/d_particle.h | 2 +- src/d/actor/d_a_arrow.cpp | 2 +- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index e68b4e077..eb1a7c85f 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -85,8 +85,14 @@ public: JPASetRMtxTVecfromMtx(mtx, mGlobalRotation, mGlobalTranslation); } void setGlobalTranslation(f32 x, f32 y, f32 z) { mGlobalTranslation.set(x, y, z); } + void setGlobalScale(const JGeometry::TVec3& scale) { + mGlobalScale.set(scale); + mGlobalScale2D.set(scale); + } void setGlobalParticleScale(const JGeometry::TVec3& scale) { mGlobalScale.set(scale); + } + void setGlobalDynamicsScale(const JGeometry::TVec3& scale) { mGlobalScale2D.set(scale); } void setMaxFrame(s32 maxFrame) { mMaxFrame = maxFrame; } @@ -95,17 +101,6 @@ public: void setLifeTime(s16 i_lifeTime) { mLifeTime = i_lifeTime; } void setRate(float i_rate) { mRate = i_rate; } - void setGlobalDynamicsScale(JGeometry::TVec3& i_vec) { - mGlobalScale.x = i_vec.x; - mGlobalScale.y = i_vec.y; - mGlobalScale.z = i_vec.z; - } - void setGlobalParticleScale(JGeometry::TVec3& i_vec) { - mGlobalScale2D.x = i_vec.x; - mGlobalScale2D.y = i_vec.y; - mGlobalScale2D.z = i_vec.z; - } - void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); } void becomeInvalidEmitter() { diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index c35468b62..7c6ef0f20 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -214,8 +214,8 @@ public: void setXluDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, XLU_BUFFER); } void setOpaDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, OPA_BUFFER); } - void setOpaList() { setOpaDrawList(mpBufWorldOpa); } - void setXluList() { setXluDrawList(mpBufWorldXlu); } + void setOpaList() { setOpaDrawList(mpBufInvisibleModelOpa); } + void setXluList() { setXluDrawList(mpBufInvisibleModelXlu); } void setOpaListInvisible() { setOpaDrawList(field_0x00030); } void setXluListInvisible() { setXluDrawList(field_0x00034); } void setOpaListMaskOff() { setOpaDrawList(mpBufInvisibleModelMaskOffOpa); } @@ -226,8 +226,8 @@ public: void setXluListP0() { setXluDrawList(mpLinkBuf); } void setOpaListP1() { setOpaDrawList(field_0x0000c); } void setXluListP1() { setXluDrawList(field_0x00010); } - void setOpaListBG() { setOpaDrawList(mpBufInvisibleModelOpa); } - void setXluListBG() { setXluDrawList(mpBufInvisibleModelXlu); } + void setOpaListBG() { setOpaDrawList(mpBufWorldOpa); } + void setXluListBG() { setXluDrawList(mpBufWorldXlu); } void setOpaListFilter() { setOpaDrawList(mpWetherFxBuffer); } void setXluListFilter() { setXluDrawList(mpWetherFxBuffer); } void setOpaList2D() { setOpaDrawList(field_0x00038); } diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 49b76f16d..8e7715809 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -374,7 +374,7 @@ public: const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, const cXyz* pScale2D) { - return set(2, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + return set(1, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); } JPABaseEmitter* setProjection(u16 particleID, const cXyz* pos, const csXyz* angle, const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index 8c82317ab..bb3ed1492 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -1142,7 +1142,7 @@ BOOL daArrow_c::_execute() { scaleVec.x = scale; scaleVec.y = scale; scaleVec.z = scale; - mpSparkleEmitter->setGlobalParticleScale(scaleVec); + mpSparkleEmitter->setGlobalScale(scaleVec); } else { mpSparkleEmitter->becomeInvalidEmitter(); mpSparkleEmitter = NULL; From 430008ba16c2a247b7756be34e053d0d4f6c5789 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 01:33:22 -0400 Subject: [PATCH 22/25] Fix Draw()'s incorrect setList functions --- src/d/actor/d_a_obj_mknjd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 1fe538dd8..f7925b632 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -1063,7 +1063,7 @@ int daObjMknjD::Act_c::Draw() { g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); g_env_light.setLightTevColorType(mMainMdl, &mTevStr); - dComIfGd_setList(); + dComIfGd_setListBG(); J3DModelData* mdlData = mMainMdl->getModelData(); u16 jointCount = mdlData->getJointNum(); @@ -1078,7 +1078,7 @@ int daObjMknjD::Act_c::Draw() { mDoExt_modelUpdateDL(mBreakMdl); } - dComIfGd_setListBG(); + dComIfGd_setList(); return 1; } From e336d5e8fd5a44d3585e509f67b10afffbcfcf39 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 01:39:34 -0400 Subject: [PATCH 23/25] Change d_a_arrow to use dComIfGp_particle_setP1 --- include/d/d_com_inf_game.h | 30 ++++++++++++++++++++---------- include/d/d_particle.h | 8 +++++++- src/d/actor/d_a_arrow.cpp | 18 +++++++++--------- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index ed42b0061..669588b0d 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1572,6 +1572,26 @@ inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, co pPrmColor, pEnvColor, pScale2D); } +inline JPABaseEmitter* dComIfGp_particle_setP1(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, + dPa_levelEcallBack* pCallBack, s8 setupInfo, + const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); + return pParticle->setNormalP1(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, + pPrmColor, pEnvColor, pScale2D); +} + +inline JPABaseEmitter* dComIfGp_particle_setToon(u16 particleID, const cXyz* pos, + const csXyz* angle, const cXyz* scale, u8 alpha, + dPa_levelEcallBack* pCallBack, s8 setupInfo, + const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); + return pParticle->setToon(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, + pPrmColor, pEnvColor, pScale2D); +} + inline JPABaseEmitter* dComIfGp_particle_setProjection(u16 particleID, const cXyz* pos, const csXyz* angle, const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, @@ -1592,16 +1612,6 @@ inline void dComIfGp_particle_setStripes(u16 particleID, cXyz* pos, csXyz* angle pParticle->setNormalStripes(particleID, pos, angle, scale, param_4, param_5); } -inline JPABaseEmitter* dComIfGp_particle_setToon(u16 particleID, const cXyz* pos, - const csXyz* angle, const cXyz* scale, u8 alpha, - dPa_levelEcallBack* pCallBack, s8 setupInfo, - const GXColor* pPrmColor, const GXColor* pEnvColor, - const cXyz* pScale2D) { - dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); - return pParticle->setToon(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, - pPrmColor, pEnvColor, pScale2D); -} - inline void dComIfGp_particle_calc3D() { g_dComIfG_gameInfo.play.getParticle()->calc3D(); } diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 8e7715809..b7545af79 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -370,12 +370,18 @@ public: const cXyz* pScale2D) { return set(0, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); } - JPABaseEmitter* setToon(u16 particleID, const cXyz* pos, const csXyz* angle, + JPABaseEmitter* setNormalP1(u16 particleID, const cXyz* pos, const csXyz* angle, const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, const cXyz* pScale2D) { return set(1, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); } + JPABaseEmitter* setToon(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, + s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + return set(2, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + } JPABaseEmitter* setProjection(u16 particleID, const cXyz* pos, const csXyz* angle, const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index bb3ed1492..e603211e0 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -191,7 +191,7 @@ void daArrow_c::setBlur() { /* 800D4994-800D4A04 .text createBlur__9daArrow_cFv */ void daArrow_c::createBlur() { if (!mPtclFollowCb.getEmitter()) { - dComIfGp_particle_setToon(0x48, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x48, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL); } } @@ -393,7 +393,7 @@ bool daArrow_c::check_water_in() { if (mArrowType == TYPE_FIRE) { mInWaterTimer = 1; - dComIfGp_particle_setToon(0x35A, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x35A, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); if (field_0x6e4 == 0) { dKy_arrowcol_chg_on(¤t.pos, 0); } @@ -407,7 +407,7 @@ bool daArrow_c::check_water_in() { dKy_arrowcol_chg_on(¤t.pos, 1); } } else if (mArrowType == TYPE_LIGHT) { - dComIfGp_particle_setToon(0x2A1, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x2A1, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_LIGHT_ARW_EFF, 0); if (field_0x6e4 == 0) { dKy_arrowcol_chg_on(¤t.pos, 2); @@ -691,7 +691,7 @@ BOOL daArrow_c::procMove() { mDoMtx_stack_c::ZXYrotM(temp10.x, temp10.y, 0); cMtx_copy(mDoMtx_stack_c::get(), field_0x6b4); - dComIfGp_particle_setToon(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_LIGHT_ARW_EFF, 0); fopAcM_delete(this); } else { @@ -792,15 +792,15 @@ BOOL daArrow_c::procMove() { cMtx_copy(mDoMtx_stack_c::get(), field_0x6b4); if (mArrowType == TYPE_FIRE) { - dComIfGp_particle_setToon(0x29A, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); - dComIfGp_particle_setToon(0x29B, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x29A, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x29B, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_FIRE_ARW_EFF, 0); field_0x698 = 0; } else if (mArrowType == TYPE_ICE) { if (dComIfG_Bgsp()->ChkGrpInf(mLinChk, 0x200)) { fopAcM_create(PROC_Obj_Magmarock, NULL, &field_0x6a8, current.roomNo, NULL, NULL, -1, NULL); } else { - dComIfGp_particle_setToon(0x29E, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x29E, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_createChild( PROC_ARROW_ICEEFF, fpcM_GetID(this), @@ -811,7 +811,7 @@ BOOL daArrow_c::procMove() { fopAcM_seStartCurrent(this, JA_SE_OBJ_ICE_ARW_EFF, 0); } } else if (mArrowType == TYPE_LIGHT) { - dComIfGp_particle_setToon(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_LIGHT_ARW_EFF, 0); field_0x698 = 0; } @@ -829,7 +829,7 @@ BOOL daArrow_c::procMove() { csXyz temp9; cM3d_CalcVecZAngle(triPla->mNormal, &temp9); - dComIfGp_particle_setToon(0xC, &field_0x6a8, &temp9, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0xC, &field_0x6a8, &temp9, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_LK_ARROW_REBOUND, mtrlSndId); } else { fopAcM_seStartCurrent(this, JA_SE_LK_ARROW_HIT, mtrlSndId); From 315c2cfbf0bf5ea12ad7c9efcc57f6c60f129da0 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 01:47:05 -0400 Subject: [PATCH 24/25] Address code review comments --- include/JSystem/J3DGraphAnimator/J3DModel.h | 6 +++--- include/d/actor/d_a_player.h | 2 +- include/f_op/f_op_actor.h | 6 ------ src/d/actor/d_a_obj_mknjd.cpp | 22 ++++++++++----------- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index dc2bf02ae..2faabea94 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -129,8 +129,8 @@ public: Mtx33** getBumpMtxPtrPtr(u32 idx) const { return mpBumpMtxArr[1][idx]; } Mtx33* getBumpMtxPtr(u32 idx) const { return mpBumpMtxArr[1][idx][mCurrentViewNo]; } void setBaseScale(const Vec& scale) { mBaseScale = scale; } - void setUserArea(void* area) { mUserArea = area; } - void* getUserArea() const { return mUserArea; } + void setUserArea(u32 area) { mUserArea = area; } + u32 getUserArea() const { return mUserArea; } Vec* getBaseScale() { return &mBaseScale; } void setVisibilityManager(J3DVisibilityManager* manager) { mpVisibilityManager = manager; } @@ -138,7 +138,7 @@ public: /* 0x008 */ u32 mFlags; /* 0x00C */ u32 mDiffFlag; /* 0x010 */ J3DCalcCallBack mCalcCallBack; - /* 0x014 */ void* mUserArea; + /* 0x014 */ u32 mUserArea; /* 0x018 */ Vec mBaseScale; /* 0x024 */ Mtx mBaseTransformMtx; /* 0x054 */ Mtx mInternalView; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index cf38b693c..29be5cd72 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -112,7 +112,7 @@ public: virtual void checkCutCharge() const; virtual void getBokoFlamePos(cXyz*); virtual void checkTactWait() const; - virtual void setTactZev(unsigned int, int, const char*); + virtual void setTactZev(unsigned int, int, char*); virtual void onDekuSpReturnFlg(u8); virtual void checkComboCutTurn() const; virtual f32 getBaseAnimeFrameRate() = 0; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 11338b282..9c048e212 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -135,12 +135,6 @@ public: bool checkCommandDemoAccrpt() { return mCommand == 2; } bool checkCommandCatch() { return mCommand == 6; } - //void suspendProc(void* actor) { - // if (field_0x10 != NULL) { - // field_0x14(actor); - // } - //} - /* 0x04 */ u16 mCommand; /* 0x06 */ u16 mCondition; /* 0x08 */ s16 mEventId; diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index f7925b632..32e46066a 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -65,7 +65,7 @@ static const char* daObjMknjD_jointName[] = { "Hahen20" }; -const char* daObjMknjD_EventName[] = { +char* daObjMknjD_EventName[] = { "MKNJD_D_DEMO", "MKNJD_K_DEMO", @@ -162,8 +162,8 @@ namespace daObjMknjD { PRM_TYPE_S = 0x10, }; - inline int prm_get_swSave() { return daObj::PrmAbstract(this, PRM_SWITCH_W, PRM_SWITCH_S); } - inline u8 prm_get_Type() { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); } + int prm_get_swSave() { return daObj::PrmAbstract(this, PRM_SWITCH_W, PRM_SWITCH_S); } + u8 prm_get_Type() { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); } static Mtx M_tmp_mtx; }; @@ -293,7 +293,7 @@ int daObjMknjD::Act_c::CreateHeap() { } } - mMainMdl->setUserArea(this); + mMainMdl->setUserArea(reinterpret_cast(this)); int curTblIdx = 0; nameTable = mBreakMdl->getModelData()->getJointName(); @@ -311,7 +311,7 @@ int daObjMknjD::Act_c::CreateHeap() { } } - mBreakMdl->setUserArea(this); + mBreakMdl->setUserArea(reinterpret_cast(this)); mMainMdlAlpha = 0xFF; return 1; @@ -460,7 +460,7 @@ void daObjMknjD::Act_c::setGoal(int i_staffIdx) { cXyz pos = *dComIfGp_evmng_getMyXyzP(i_staffIdx, "Posion"); mDoMtx_stack_c::transS(getPosition()); - mDoMtx_YrotM(mDoMtx_stack_c::get(), current.angle.GetY()); + mDoMtx_YrotM(mDoMtx_stack_c::get(), current.angle.y); mDoMtx_stack_c::transM(pos); @@ -659,8 +659,7 @@ void daObjMknjD::Act_c::privateCut() { /* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ void daObjMknjD::manage_friend_draw(int i_param1) { - u16 medliProc = PROC_NPC_MD; - fopAc_ac_c* judgeResult = static_cast(fopAcIt_Judge(fpcSch_JudgeForPName, &medliProc)); + fopAc_ac_c* judgeResult = fopAcM_SearchByName(PROC_NPC_MD); if (judgeResult != NULL) { if (i_param1 == 1) { @@ -672,8 +671,7 @@ void daObjMknjD::manage_friend_draw(int i_param1) { } } - u16 makarProc = PROC_NPC_CB1; - judgeResult = static_cast(fopAcIt_Judge(fpcSch_JudgeForPName, &makarProc)); + judgeResult = fopAcM_SearchByName(PROC_NPC_CB1); if (judgeResult != NULL) { if (i_param1 == 1) { @@ -759,10 +757,10 @@ bool daObjMknjD::Act_c::daObjMknjD_break() { JGeometry::TVec3 vec; vec.set(3.0f, 3.0f, 3.0f); - mEmitters[3]->setGlobalDynamicsScale(vec); + mEmitters[3]->setGlobalParticleScale(vec); vec.set(6.0f, 6.0f, 6.0f); - mEmitters[3]->setGlobalParticleScale(vec); + mEmitters[3]->setGlobalDynamicsScale(vec); } } // After 255 frames, the cutscene ends. From 4ae64687009800d9bbd0a1d75e7c6fb576889c97 Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Wed, 4 Oct 2023 02:08:02 -0400 Subject: [PATCH 25/25] Name base_process_class.mUnk2 to mCreateResult, and add fpcM_CreateResult --- include/f_pc/f_pc_base.h | 2 +- include/f_pc/f_pc_manager.h | 4 ++++ src/d/actor/d_a_obj_mknjd.cpp | 3 ++- src/f_pc/f_pc_base.cpp | 8 ++++---- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/f_pc/f_pc_base.h b/include/f_pc/f_pc_base.h index 3ff0c85d2..984a1b1ba 100644 --- a/include/f_pc/f_pc_base.h +++ b/include/f_pc/f_pc_base.h @@ -19,7 +19,7 @@ typedef struct base_process_class { /* 0x0A */ s8 mUnk0; /* 0x0B */ u8 mPauseFlag; /* 0x0C */ s8 mInitState; - /* 0x0D */ s8 mUnk2; + /* 0x0D */ s8 mCreateResult; /* 0x0E */ s16 mProfName; /* 0x10 */ process_profile_definition* mpProf; /* 0x14 */ struct create_request* mpCtRq; diff --git a/include/f_pc/f_pc_manager.h b/include/f_pc/f_pc_manager.h index 602c62b57..8169415c4 100644 --- a/include/f_pc/f_pc_manager.h +++ b/include/f_pc/f_pc_manager.h @@ -70,6 +70,10 @@ inline void* fpcM_LyJudge(process_node_class* i_node, fpcLyIt_JudgeFunc i_func, return fpcLyIt_Judge(&i_node->mLayer, i_func, i_data); } +inline s8 fpcM_CreateResult(const void* pActor) { + return ((base_process_class*)pActor)->mCreateResult; +} + void fpcM_Draw(void* pProc); s32 fpcM_DrawIterater(fpcM_DrawIteraterFunc pFunc); s32 fpcM_Execute(void* pProc); diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 32e46066a..7be6a4a9b 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -4,6 +4,7 @@ // #include "f_op/f_op_actor_mng.h" +#include "f_pc/f_pc_manager.h" #include "f_op/f_op_msg.h" #include "f_op/f_op_draw_tag.h" #include "JSystem/JKernel/JKRHeap.h" @@ -429,7 +430,7 @@ int daObjMknjD::Act_c::Delete() { s32 daObjMknjD::Act_c::Mthd_Delete() { int bgDeleteResult = MoveBGDelete(); - if (mBase.mUnk2 != 3) { + if (fpcM_CreateResult(this) != 3) { dComIfG_resDelete(&mPhs, M_arcname); } diff --git a/src/f_pc/f_pc_base.cpp b/src/f_pc/f_pc_base.cpp index bc742bfa7..b46805d66 100644 --- a/src/f_pc/f_pc_base.cpp +++ b/src/f_pc/f_pc_base.cpp @@ -119,19 +119,19 @@ s32 fpcBs_SubCreate(base_process_class* i_proc) { case 2: case cPhs_COMPLEATE_e: fpcBs_DeleteAppend(i_proc); - i_proc->mUnk2 = 2; + i_proc->mCreateResult = 2; return 2; case cPhs_INIT_e: case 1: i_proc->mInitState = 1; - i_proc->mUnk2 = 0; + i_proc->mCreateResult = 0; return cPhs_INIT_e; case 3: - i_proc->mUnk2 = 3; + i_proc->mCreateResult = 3; return 3; case cPhs_ERROR_e: default: - i_proc->mUnk2 = 5; + i_proc->mCreateResult = 5; return cPhs_ERROR_e; } }