From b45b95c3bea399defb428da0ab9bc63d51fa8df8 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 30 Dec 2022 16:03:16 -0800 Subject: [PATCH] msg documentation --- Makefile | 2 +- include/d/msg/d_msg_class.h | 16 +++++------ include/f_op/f_op_msg_mng.h | 7 +++-- src/d/a/d_a_alink_demo.inc | 8 +++--- src/d/event/d_event_data.cpp | 18 ++++++------ src/d/msg/d_msg_flow.cpp | 10 +++---- src/f_op/f_op_msg.cpp | 52 ++++++++++++++++++++++++++++------ src/f_op/f_op_msg_mng.cpp | 54 ++++++++++++++++++------------------ 8 files changed, 102 insertions(+), 65 deletions(-) diff --git a/Makefile b/Makefile index 1929850be58..1b70173b469 100644 --- a/Makefile +++ b/Makefile @@ -65,7 +65,7 @@ endif AS := $(DEVKITPPC)/bin/powerpc-eabi-as OBJCOPY := $(DEVKITPPC)/bin/powerpc-eabi-objcopy STRIP := $(DEVKITPPC)/bin/powerpc-eabi-strip -CC := $(WINE) tools/mwcc_compiler/$(MWCC_VERSION)/mwcceppc_patched.exe +CC := $(WINE) tools/mwcc_compiler/$(MWCC_VERSION)/mwcceppc_modded.exe LD := $(WINE) tools/mwcc_compiler/$(MWCC_VERSION)/mwldeppc.exe ELF2DOL := $(BUILD_PATH)/elf2dol PYTHON := python3 diff --git a/include/d/msg/d_msg_class.h b/include/d/msg/d_msg_class.h index 60e36b87584..ffcac0294a6 100644 --- a/include/d/msg/d_msg_class.h +++ b/include/d/msg/d_msg_class.h @@ -7,16 +7,16 @@ class msg_class : public leafdraw_class { public: - /* 0xC0 */ int field_0xc0; - /* 0xC4 */ create_tag_class field_0xc4; - /* 0xD8 */ leafdraw_method_class* field_0xd8; - /* 0xDC */ fopAc_ac_c* field_0xdc; - /* 0xE0 */ cXyz field_0xe0; - /* 0xEC */ u32 field_0xec; + /* 0xC0 */ int mMsgType; + /* 0xC4 */ create_tag_class mDwTg; + /* 0xD8 */ leafdraw_method_class* mSubMtd; + /* 0xDC */ fopAc_ac_c* mpActor; + /* 0xE0 */ cXyz mPos; + /* 0xEC */ u32 mMsgID; /* 0xF0 */ u32 field_0xf0; /* 0xF4 */ u32 field_0xf4; - /* 0xF8 */ u16 field_0xf8; - /* 0xFA */ u8 field_0xfa; + /* 0xF8 */ u16 mMode; + /* 0xFA */ u8 mSelectedChoiceIdx; /* 0xFC */ int field_0xfc; }; // Size: 0x100 diff --git a/include/f_op/f_op_msg_mng.h b/include/f_op/f_op_msg_mng.h index 7cafe414270..7a9299d7bb4 100644 --- a/include/f_op/f_op_msg_mng.h +++ b/include/f_op/f_op_msg_mng.h @@ -6,9 +6,9 @@ #include "f_op/f_op_actor.h" struct fopMsg_prm_class { - /* 0x00 */ fopAc_ac_c* field_0x0; - /* 0x04 */ cXyz field_0x4; - /* 0x10 */ u32 field_0x10; + /* 0x00 */ fopAc_ac_c* mpActor; + /* 0x04 */ cXyz mPos; + /* 0x10 */ u32 mMsgID; /* 0x14 */ u32 field_0x14; /* 0x18 */ int field_0x18; }; // Size: 0x1C @@ -33,6 +33,7 @@ typedef int (*fopMsgCreateFunc)(void*); JKRExpHeap* fopMsgM_createExpHeap(u32, JKRHeap*); u32 fopMsgM_Create(s16, fopMsgCreateFunc, void*); +fopMsg_prm_class* fopMsgM_GetAppend(void* msg); void fopMsgM_setMessageID(unsigned int); void fopMsgM_destroyExpHeap(JKRExpHeap*); s32 fopMsgM_setStageLayer(void*); diff --git a/src/d/a/d_a_alink_demo.inc b/src/d/a/d_a_alink_demo.inc index 3358f549753..b5750737e68 100644 --- a/src/d/a/d_a_alink_demo.inc +++ b/src/d/a/d_a_alink_demo.inc @@ -230,10 +230,10 @@ BOOL daAlink_c::checkEndMessage(u32 param_0) { msg_class* msg = fopMsgM_SearchByID(mMsgClassID); if (msg != NULL) { - if (msg->field_0xf8 == 14) { - msg->field_0xf8 = 16; - } else if (msg->field_0xf8 == 0x12) { - msg->field_0xf8 = 0x13; + if (msg->mMode == 14) { + msg->mMode = 16; + } else if (msg->mMode == 0x12) { + msg->mMode = 0x13; return 1; } } diff --git a/src/d/event/d_event_data.cpp b/src/d/event/d_event_data.cpp index 982b3d06d90..e38c47e40bf 100644 --- a/src/d/event/d_event_data.cpp +++ b/src/d/event/d_event_data.cpp @@ -635,10 +635,10 @@ void dEvDtStaff_c::specialProcMessage() { break; case 'END\0': case 'FINI': - work->mLMsg->field_0xf8 = 0x10; + work->mLMsg->mMode = 0x10; break; case 'CONT': - work->mLMsg->field_0xf8 = 0xF; + work->mLMsg->mMode = 0xF; int* ptr = dComIfGp_evmng_getMyIntegerP(staffId, "msgNo"); if (ptr == NULL) { ptr = dComIfGp_evmng_getMyIntegerP(staffId, "No"); @@ -702,7 +702,7 @@ void dEvDtStaff_c::specialProcMessage() { } break; case 'PUSH': - if (work->mLMsg->field_0xf8 == 0xE) { + if (work->mLMsg->mMode == 0xE) { dComIfGp_evmng_cutEnd(staffId); } break; @@ -724,14 +724,14 @@ void dEvDtStaff_c::specialProcMessage() { break; } - switch (work->mLMsg->field_0xf8) { + switch (work->mLMsg->mMode) { case 0xE: - work->mLMsg->field_0xf8 = 0x10; + work->mLMsg->mMode = 0x10; break; case 0x11: break; case 0x12: - work->mLMsg->field_0xf8 = 0x13; + work->mLMsg->mMode = 0x13; work->_0 = UINT32_MAX; work->mLMsg = NULL; work->mMsgSubstanceNum--; @@ -757,8 +757,8 @@ void dEvDtStaff_c::specialProcMessage() { case 'FINI': if (work->mLMsg == NULL) { dComIfGp_evmng_cutEnd(staffId); - } else if (work->mLMsg->field_0xf8 == 0x12) { - work->mLMsg->field_0xf8 = 0x13; + } else if (work->mLMsg->mMode == 0x12) { + work->mLMsg->mMode = 0x13; work->_0 = UINT32_MAX; work->mLMsg = NULL; dComIfGp_evmng_cutEnd(staffId); @@ -768,7 +768,7 @@ void dEvDtStaff_c::specialProcMessage() { dComIfGp_evmng_cutEnd(staffId); break; case 'END\0': - switch (work->mLMsg->field_0xf8) { + switch (work->mLMsg->mMode) { case 0x11: case 0x12: dComIfGp_evmng_cutEnd(staffId); diff --git a/src/d/msg/d_msg_flow.cpp b/src/d/msg/d_msg_flow.cpp index 7887fcfeda6..c635a2be159 100644 --- a/src/d/msg/d_msg_flow.cpp +++ b/src/d/msg/d_msg_flow.cpp @@ -486,11 +486,11 @@ int dMsgFlow_c::doFlow(fopAc_ac_c* param_0, fopAc_ac_c** param_1, int flow) { if (field_0x26 != 0 || field_0x27 != 0) { msg_class* msg = fopMsgM_SearchByID(mMsg); if (msg != NULL) { - if (msg->field_0xf8 != 0x12) { + if (msg->mMode != 0x12) { return 0; } - msg->field_0xf8 = 0x13; + msg->mMode = 0x13; mMsg = -1; } field_0x27 = 0; @@ -940,7 +940,7 @@ asm int dMsgFlow_c::query004(mesg_flow_node_branch* param_0, fopAc_ac_c* param_1 /* 8024B2C0-8024B2F8 245C00 0038+00 2/1 1/1 1/1 .text * query005__10dMsgFlow_cFP21mesg_flow_node_branchP10fopAc_ac_ci */ int dMsgFlow_c::query005(mesg_flow_node_branch*, fopAc_ac_c*, int) { - return mChoiceNo = fopMsgM_SearchByID(mMsg)->field_0xfa; + return mChoiceNo = fopMsgM_SearchByID(mMsg)->mSelectedChoiceIdx; } /* 8024B2F8-8024B32C 245C38 0034+00 1/0 0/0 0/0 .text @@ -1261,7 +1261,7 @@ int dMsgFlow_c::query035(mesg_flow_node_branch* flow_node, fopAc_ac_c*, int) { /* 8024BC3C-8024BC80 24657C 0044+00 1/0 0/0 0/0 .text * query036__10dMsgFlow_cFP21mesg_flow_node_branchP10fopAc_ac_ci */ int dMsgFlow_c::query036(mesg_flow_node_branch*, fopAc_ac_c*, int) { - int tmp = fopMsgM_SearchByID(mMsg)->field_0xfa; + int tmp = fopMsgM_SearchByID(mMsg)->mSelectedChoiceIdx; if (dMsgObject_getMsgObjectClass()->getSelectPushFlag() == 2) { tmp = 2; @@ -1273,7 +1273,7 @@ int dMsgFlow_c::query036(mesg_flow_node_branch*, fopAc_ac_c*, int) { /* 8024BC80-8024BCC4 2465C0 0044+00 1/0 0/0 0/0 .text * query037__10dMsgFlow_cFP21mesg_flow_node_branchP10fopAc_ac_ci */ int dMsgFlow_c::query037(mesg_flow_node_branch*, fopAc_ac_c*, int) { - int tmp = fopMsgM_SearchByID(mMsg)->field_0xfa; + int tmp = fopMsgM_SearchByID(mMsg)->mSelectedChoiceIdx; if (dMsgObject_getMsgObjectClass()->getSelectPushFlag() == 2) { tmp = 3; diff --git a/src/f_op/f_op_msg.cpp b/src/f_op/f_op_msg.cpp index cc8d9c42f2d..0214a04dc08 100644 --- a/src/f_op/f_op_msg.cpp +++ b/src/f_op/f_op_msg.cpp @@ -4,6 +4,7 @@ // #include "f_op/f_op_msg.h" +#include "f_op/f_op_msg_mng.h" #include "d/msg/d_msg_class.h" #include "d/s/d_s_play.h" #include "dol2asm.h" @@ -42,7 +43,7 @@ extern "C" void fpcMtd_Create__FP20process_method_classPv(); /* 8001F488-8001F4B0 019DC8 0028+00 1/0 0/0 0/0 .text fopMsg_Draw__FPv */ static int fopMsg_Draw(void* msg) { msg_class* m = static_cast(msg); - return fpcLf_DrawMethod(m->field_0xd8, msg); + return fpcLf_DrawMethod(m->mSubMtd, msg); } /* 8001F4B0-8001F4E8 019DF0 0038+00 1/0 0/0 0/0 .text fopMsg_Execute__FPv */ @@ -51,7 +52,7 @@ static int fopMsg_Execute(void* msg) { int stat = 1; if (dScnPly_c::isPause()) { - stat = fpcMtd_Execute(&m->field_0xd8->mBase, msg); + stat = fpcMtd_Execute(&m->mSubMtd->mBase, msg); } return stat; @@ -61,9 +62,9 @@ static int fopMsg_Execute(void* msg) { static int fopMsg_IsDelete(void* msg) { msg_class* m = static_cast(msg); - int stat = fpcMtd_IsDelete(&m->field_0xd8->mBase, msg); + int stat = fpcMtd_IsDelete(&m->mSubMtd->mBase, msg); if (stat == 1) { - fopDwTg_DrawQTo(&m->field_0xc4); + fopDwTg_DrawQTo(&m->mDwTg); } return stat; @@ -73,8 +74,8 @@ static int fopMsg_IsDelete(void* msg) { static int fopMsg_Delete(void* msg) { msg_class* m = static_cast(msg); - int stat = fpcMtd_Delete(&m->field_0xd8->mBase, msg); - fopDwTg_DrawQTo(&m->field_0xc4); + int stat = fpcMtd_Delete(&m->mSubMtd->mBase, msg); + fopDwTg_DrawQTo(&m->mDwTg); return stat; } @@ -84,6 +85,36 @@ static int fopMsg_Delete(void* msg) { static int fopMsg_MSG_TYPE; /* 8001F588-8001F660 019EC8 00D8+00 1/0 0/0 0/0 .text fopMsg_Create__FPv */ +#if defined NON_MATCHING +int fopMsg_Create(void* data) { + // r31 / r30 swap + msg_class *msg = (msg_class*)data; + + if (fpcM_IsFirstCreating(msg)) { + // TODO: This should be msg_process_profile_definition + leaf_process_profile_definition* profile = (leaf_process_profile_definition*) fpcM_GetProfile(msg); + msg->mMsgType = fpcBs_MakeOfType(&fopMsg_MSG_TYPE); + msg->mSubMtd = profile->mMethods; + fopDwTg_Init(&msg->mDwTg, msg); + fopMsg_prm_class * prm = fopMsgM_GetAppend(msg); + if (prm != NULL) { + msg->mpActor = prm->mpActor; + msg->mPos = prm->mPos; + msg->mMsgID = prm->mMsgID; + msg->field_0xf0 = prm->field_0x14; + msg->field_0xf4 = prm->field_0x18; + } + } + + int status = fpcMtd_Create(&msg->mSubMtd->mBase, msg); + if (status == cPhs_COMPLEATE_e) { + s32 priority = fpcLf_GetPriority(msg); + fopDwTg_ToDrawQ(&msg->mDwTg, priority); + } + + return status; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -92,9 +123,14 @@ static asm int fopMsg_Create(void* param_0) { #include "asm/f_op/f_op_msg/fopMsg_Create__FPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803A3958-803A3970 -00001 0014+04 0/0 5/0 0/0 .data g_fopMsg_Method */ -SECTION_DATA extern leafdraw_method_class g_fopMsg_Method = { - &fopMsg_Create, &fopMsg_Delete, &fopMsg_Execute, &fopMsg_IsDelete, &fopMsg_Draw, +leafdraw_method_class g_fopMsg_Method = { + (process_method_func) fopMsg_Create, + (process_method_func) fopMsg_Delete, + (process_method_func) fopMsg_Execute, + (process_method_func) fopMsg_IsDelete, + (process_method_func) fopMsg_Draw, }; diff --git a/src/f_op/f_op_msg_mng.cpp b/src/f_op/f_op_msg_mng.cpp index a32943bbd8e..78d5c816b25 100644 --- a/src/f_op/f_op_msg_mng.cpp +++ b/src/f_op/f_op_msg_mng.cpp @@ -65,7 +65,7 @@ SECTION_SDATA2 static u8 lit_3902[4] = { /* 8001FA6C-8001FB50 01A3AC 00E4+00 1/1 0/0 0/0 .text createAppend__FP10fopAc_ac_cP4cXyzPUlPUlUi */ -static fopMsg_prm_class* createAppend(fopAc_ac_c* param_0, cXyz* param_1, u32* param_2, +static fopMsg_prm_class* createAppend(fopAc_ac_c* pActor, cXyz* pPos, u32* pMsgID, u32* param_3, unsigned int param_4) { fopMsg_prm_class* params = static_cast(cMl::memalignB(-4, sizeof(fopMsg_prm_class))); @@ -74,23 +74,23 @@ static fopMsg_prm_class* createAppend(fopAc_ac_c* param_0, cXyz* param_1, u32* p return NULL; } - params->field_0x0 = param_0; - dMsgObject_setTalkActor(param_0); + params->mpActor = pActor; + dMsgObject_setTalkActor(pActor); - if (param_2 != NULL) { - params->field_0x10 = *param_2; + if (pMsgID != NULL) { + params->mMsgID = *pMsgID; } if (param_3 != NULL) { params->field_0x14 = *param_3; } - if (param_1 != NULL) { - params->field_0x4 = *param_1; + if (pPos != NULL) { + params->mPos = *pPos; } else { f32 tmp_0 = FLOAT_LABEL(lit_3902); cXyz tmp(tmp_0, tmp_0, tmp_0); - params->field_0x4 = tmp; + params->mPos = tmp; } params->field_0x18 = param_4; @@ -188,11 +188,11 @@ int fopMsgM_messageSet(u32 i_msgIdx, fopAc_ac_c* i_actorP, u32 param_2) { dMsgObject_c* msg = (dMsgObject_c*)fopMsgM_SearchByID(i_msgID); - if (msg && msg->field_0xf8 == 1) { - msg->field_0xe0.set(pos); - msg->field_0xec = i_msgIdx; + if (msg && msg->mMode == 1) { + msg->mPos.set(pos); + msg->mMsgID = i_msgIdx; msg->field_0xf0 = param_2; - msg->field_0xdc = i_actorP; + msg->mpActor = i_actorP; msg->setMessageIndex(i_msgIdx,param_2,false); return i_msgID; } else { @@ -202,7 +202,7 @@ int fopMsgM_messageSet(u32 i_msgIdx, fopAc_ac_c* i_actorP, u32 param_2) { } /* 8001FE84-8001FFC4 01A7C4 0140+00 0/0 6/6 4/4 .text fopMsgM_messageSet__FUlUl */ -int fopMsgM_messageSet(u32 param_0, u32 param_1) { +int fopMsgM_messageSet(u32 msgIdx, u32 param_1) { if (dComIfGp_isHeapLockFlag() == 8) { dMeter2Info_getMeterClass()->emphasisButtonDelete(); } @@ -223,21 +223,21 @@ int fopMsgM_messageSet(u32 param_0, u32 param_1) { dMsgObject_c* msg = (dMsgObject_c*)fopMsgM_SearchByID(i_msgID); if (msg) { - if (msg->field_0xf8 == 1) { - msg->field_0xe0.set(pos); - msg->field_0xec = param_0; + if (msg->mMode == 1) { + msg->mPos.set(pos); + msg->mMsgID = msgIdx; msg->field_0xf0 = param_1; - msg->field_0xdc = 0; - msg->setTalkPartner(0); - msg->setMessageIndex(param_0,param_1,false); + msg->mpActor = NULL; + msg->setTalkPartner(NULL); + msg->setMessageIndex(msgIdx,param_1,false); return i_msgID; } - if (msg->field_0xf8 == 15) { - msg->field_0xe0.set(pos); - msg->field_0xec = param_0; + if (msg->mMode == 15) { + msg->mPos.set(pos); + msg->mMsgID = msgIdx; msg->field_0xf0 = param_1; - msg->field_0xdc = 0; + msg->mpActor = NULL; return i_msgID; } } @@ -267,11 +267,11 @@ int fopMsgM_messageSetDemo(u32 param_0) { dMsgObject_c* msg = (dMsgObject_c*)fopMsgM_SearchByID(i_msgID); - if (msg && msg->field_0xf8 == 1) { - msg->field_0xe0.set(pos); - msg->field_0xec = param_0; + if (msg && msg->mMode == 1) { + msg->mPos.set(pos); + msg->mMsgID = param_0; msg->field_0xf0 = 1000; - msg->field_0xdc = 0; + msg->mpActor = NULL; msg->setMessageIndexDemo(param_0,false); return i_msgID; } else {