From efdfef23ae32359c82ab03b673199bf2917d683e Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Mon, 2 Oct 2023 00:42:39 -0400 Subject: [PATCH] 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 */ } -