From 29e50d65b89346b5935697ab04037b73b8025ebb Mon Sep 17 00:00:00 2001 From: Dylan Ascencio Date: Fri, 29 Sep 2023 00:15:08 -0400 Subject: [PATCH] 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();