From f687a1bdb48bd5433c2f86432cb8dd75d27b6107 Mon Sep 17 00:00:00 2001 From: Crain-32 <25422785+Crain-32@users.noreply.github.com> Date: Sat, 23 Dec 2023 19:12:27 -0700 Subject: [PATCH 1/3] d_a_tag_etc work --- include/d/actor/d_a_tag_etc.h | 16 +++- src/d/actor/d_a_tag_etc.cpp | 167 +++++++++++++++++++++++++++++----- 2 files changed, 157 insertions(+), 26 deletions(-) diff --git a/include/d/actor/d_a_tag_etc.h b/include/d/actor/d_a_tag_etc.h index f5b3aaab2..75617f096 100644 --- a/include/d/actor/d_a_tag_etc.h +++ b/include/d/actor/d_a_tag_etc.h @@ -9,16 +9,22 @@ public: inline BOOL execute(); void setActio(unsigned char) {} - void getEventNo(); - void getType2(); - void rangeCheck(fopAc_ac_c*); - void otherCheck(fopAc_ac_c*); + u8 getEventNo(); + u32 getType2(); + BOOL rangeCheck(fopAc_ac_c*); + BOOL otherCheck(fopAc_ac_c*); void demoProc(); void demoInitProc(); s32 create(); public: - /* Place member variables here */ + /* 0x290 */ u8 field_0x290; + /* 0x291*/ u8 field_0x291; + /* 0x292*/ u8 field_0x292; + /* 0x293*/ u8 field_0x293; + /* 0x294 */ void* field_0x294; + /* 0x298 */ s16 eventIndex; + /* 0x29A */ short field_0x29A; }; #endif /* D_A_TAG_ETC_H */ diff --git a/src/d/actor/d_a_tag_etc.cpp b/src/d/actor/d_a_tag_etc.cpp index e367efc7d..0fc36a944 100644 --- a/src/d/actor/d_a_tag_etc.cpp +++ b/src/d/actor/d_a_tag_etc.cpp @@ -4,50 +4,175 @@ // #include "d/actor/d_a_tag_etc.h" +#include "d/d_com_inf_game.h" +#include "d/d_event.h" +#include "d/d_event_manager.h" #include "dolphin/types.h" +#include "f_op/f_op_actor_iter.h" +#include "f_pc/f_pc_searcher.h" +#include "global.h" /* 00000078-00000084 .text getEventNo__11daTag_Etc_cFv */ -void daTag_Etc_c::getEventNo() { - /* Nonmatching */ +u8 daTag_Etc_c::getEventNo() { + return this->mBase.mParameters >> 0x18; } /* 00000084-00000090 .text getType2__11daTag_Etc_cFv */ -void daTag_Etc_c::getType2() { - /* Nonmatching */ +u32 daTag_Etc_c::getType2() { + return this->mBase.mParameters >> 8 & 0xF; } +/* Not Matching */ /* 00000090-000001B4 .text rangeCheck__11daTag_Etc_cFP10fopAc_ac_c */ -void daTag_Etc_c::rangeCheck(fopAc_ac_c*) { - /* Nonmatching */ +BOOL daTag_Etc_c::rangeCheck(fopAc_ac_c* pActor) { + BOOL result; + float fVar4; + float distanceMagnitude; + cXyz cxYz_planar_distance; + cXyz cXyz_distance; + + cXyz_distance = ((pActor->current).pos - (this->current).pos); + if (0.0 <= cXyz_distance.x) { + cxYz_planar_distance.x = cXyz_distance.x; + cxYz_planar_distance.y = 0.0; + cxYz_planar_distance.z = cXyz_distance.z; + distanceMagnitude = PSVECSquareMag(&cxYz_planar_distance); + if (0.0 < distanceMagnitude) { + fVar4 = sqrtf(distanceMagnitude); + } + distanceMagnitude = this->mScale.x; + distanceMagnitude *= 100; + if ((distanceMagnitude <= fVar4) || ((this->mScale.x) * 100 < cXyz_distance.y)) { + result = FALSE; + } else { + result = TRUE; + } + } else { + result = FALSE; + } + return result; } /* 000001B4-00000214 .text otherCheck__11daTag_Etc_cFP10fopAc_ac_c */ -void daTag_Etc_c::otherCheck(fopAc_ac_c*) { - /* Nonmatching */ +BOOL daTag_Etc_c::otherCheck(fopAc_ac_c* pActor) { + BOOL result; + + u8 cVar2 = getType2(); + + switch (cVar2) { + case 0: + if (pActor != (fopAc_ac_c*)0x0 && + ((u32)pActor[0x13].mBase.mLnTg.mBase.mpTagData & 0x10) != 0) + { + result = TRUE; + } else { + result = FALSE; + } + break; + default: + result = TRUE; + break; + } + return result; } +/* Not matching, registers seem off */ /* 00000214-000002EC .text demoProc__11daTag_Etc_cFv */ void daTag_Etc_c::demoProc() { - /* Nonmatching */ + s16 sVar1; + fopAc_ac_c* pfVar2; + int staffIdx; + u8 cVar3; + void* local_18[2]; + + local_18[0] = this->field_0x294; + pfVar2 = (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeByID, local_18); + staffIdx = g_dComIfG_gameInfo.play.mEvtManager.getMyStaffId("TAG_ETC_D", (fopAc_ac_c*)0x0, 0); + + if (staffIdx != -1) { + cVar3 = getType2(); + switch (cVar3) { + case 0: + if ((pfVar2 == (fopAc_ac_c*)0x0) || + ((u32)pfVar2[0x13].mBase.mLnTg.mBase.mpTagData & 0x10) == 0) + { + sVar1 = this->field_0x29A; + if (sVar1 >= 1) { + this->field_0x29A = sVar1 + -1; + } else { + g_dComIfG_gameInfo.play.mEvtManager.cutEnd(staffIdx); + } + } + break; + default: + g_dComIfG_gameInfo.play.mEvtManager.cutEnd(staffIdx); + } + } } /* 000002EC-00000368 .text demoInitProc__11daTag_Etc_cFv */ void daTag_Etc_c::demoInitProc() { - /* Nonmatching */ + u8 cVar1; + fopAc_ac_c* pActor; + void* local_18[4]; + dEvt_control_c* control; + + cVar1 = getType2(); + switch (cVar1) + case 0: { + local_18[0] = this->field_0x294; + pActor = (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeByID, local_18); + control = &g_dComIfG_gameInfo.play.mEvtCtrl; + control->mPtItem = control->getPId(pActor); + this->field_0x29A = 0xf; + default:; + } + return; } +// Not matching /* 00000368-00000458 .text create__11daTag_Etc_cFv */ s32 daTag_Etc_c::create() { - /* Nonmatching */ + float fVar1; + u8 stageEVNTListIndex; + u16 uVar2; + u8 cVar3; + + fopAcM_SetupActor(this, daTag_Etc_c); + + stageEVNTListIndex = getEventNo(); + this->eventIndex = + g_dComIfG_gameInfo.play.mEvtManager.getEventIdx((char*)0x0, stageEVNTListIndex); + if (this->eventIndex == -1) { + this->field_0x290 = 0; + } else { + cVar3 = getType2(); + switch (cVar3) { + case 0: + this->field_0x290 = 1; + break; + default: + this->field_0x290 = 0; + } + } + this->shape_angle.z = 0; + this->shape_angle.x = 0; + this->current.angle.z = 0; + this->current.angle.x = 0; + this->mAttentionInfo.mFlags = fopAc_Attn_ACTION_TALK_e; + // MNot matching part, seems to be a constant value? + this->mAttentionInfo.mPosition.y += 150.0; + this->mEyePos.y += 150.0; + return 4; } /* 00000458-00000460 .text daTag_Etc_action_wait__FP11daTag_Etc_c */ -void daTag_Etc_action_wait(daTag_Etc_c*) { - /* Nonmatching */ +u8 daTag_Etc_action_wait(daTag_Etc_c*) { + return 1; } /* 00000460-000004E8 .text daTag_Etc_action_search__FP11daTag_Etc_c */ -void daTag_Etc_action_search(daTag_Etc_c*) { +void daTag_Etc_action_search(daTag_Etc_c* pEtcTag) { /* Nonmatching */ } @@ -68,7 +193,7 @@ void daTag_Etc_action_hunt(daTag_Etc_c*) { /* 000006EC-000006F4 .text daTag_Etc_Draw__FP11daTag_Etc_c */ static BOOL daTag_Etc_Draw(daTag_Etc_c*) { - /* Nonmatching */ + return TRUE; } /* 000006F4-00000730 .text daTag_Etc_Execute__FP11daTag_Etc_c */ @@ -78,16 +203,16 @@ static BOOL daTag_Etc_Execute(daTag_Etc_c*) { /* 00000730-00000738 .text daTag_Etc_IsDelete__FP11daTag_Etc_c */ static BOOL daTag_Etc_IsDelete(daTag_Etc_c*) { - /* Nonmatching */ + return TRUE; } /* 00000738-00000768 .text daTag_Etc_Delete__FP11daTag_Etc_c */ -static BOOL daTag_Etc_Delete(daTag_Etc_c*) { - /* Nonmatching */ +static BOOL daTag_Etc_Delete(daTag_Etc_c* i_actor) { + i_actor->~daTag_Etc_c(); + return TRUE; } /* 00000768-00000788 .text daTag_Etc_Create__FP10fopAc_ac_c */ -static s32 daTag_Etc_Create(fopAc_ac_c*) { - /* Nonmatching */ +static s32 daTag_Etc_Create(fopAc_ac_c* i_actor) { + return reinterpret_cast(i_actor)->create(); } - From 3ccb9e43be9532fd891d604d519244083905eee3 Mon Sep 17 00:00:00 2001 From: Crain-32 <25422785+Crain-32@users.noreply.github.com> Date: Sun, 24 Dec 2023 09:26:52 -0700 Subject: [PATCH 2/3] d_a_tag_etc PR Feedback --- include/d/actor/d_a_tag_etc.h | 2 +- src/d/actor/d_a_tag_etc.cpp | 102 ++++++++++++---------------------- 2 files changed, 37 insertions(+), 67 deletions(-) diff --git a/include/d/actor/d_a_tag_etc.h b/include/d/actor/d_a_tag_etc.h index 75617f096..a3c29bd3f 100644 --- a/include/d/actor/d_a_tag_etc.h +++ b/include/d/actor/d_a_tag_etc.h @@ -22,7 +22,7 @@ public: /* 0x291*/ u8 field_0x291; /* 0x292*/ u8 field_0x292; /* 0x293*/ u8 field_0x293; - /* 0x294 */ void* field_0x294; + /* 0x294 */ s32 processId; /* 0x298 */ s16 eventIndex; /* 0x29A */ short field_0x29A; }; diff --git a/src/d/actor/d_a_tag_etc.cpp b/src/d/actor/d_a_tag_etc.cpp index 0fc36a944..d3ab7ecd3 100644 --- a/src/d/actor/d_a_tag_etc.cpp +++ b/src/d/actor/d_a_tag_etc.cpp @@ -4,45 +4,31 @@ // #include "d/actor/d_a_tag_etc.h" +#include "d/actor/d_a_npc_md.h" #include "d/d_com_inf_game.h" -#include "d/d_event.h" -#include "d/d_event_manager.h" #include "dolphin/types.h" -#include "f_op/f_op_actor_iter.h" -#include "f_pc/f_pc_searcher.h" -#include "global.h" + /* 00000078-00000084 .text getEventNo__11daTag_Etc_cFv */ u8 daTag_Etc_c::getEventNo() { - return this->mBase.mParameters >> 0x18; + return fopAcM_GetParam(this) >> 0x18; } /* 00000084-00000090 .text getType2__11daTag_Etc_cFv */ u32 daTag_Etc_c::getType2() { - return this->mBase.mParameters >> 8 & 0xF; + return fopAcM_GetParam(this) >> 8 & 0xF; } /* Not Matching */ /* 00000090-000001B4 .text rangeCheck__11daTag_Etc_cFP10fopAc_ac_c */ BOOL daTag_Etc_c::rangeCheck(fopAc_ac_c* pActor) { BOOL result; - float fVar4; float distanceMagnitude; - cXyz cxYz_planar_distance; - cXyz cXyz_distance; + cXyz delta; - cXyz_distance = ((pActor->current).pos - (this->current).pos); - if (0.0 <= cXyz_distance.x) { - cxYz_planar_distance.x = cXyz_distance.x; - cxYz_planar_distance.y = 0.0; - cxYz_planar_distance.z = cXyz_distance.z; - distanceMagnitude = PSVECSquareMag(&cxYz_planar_distance); - if (0.0 < distanceMagnitude) { - fVar4 = sqrtf(distanceMagnitude); - } - distanceMagnitude = this->mScale.x; - distanceMagnitude *= 100; - if ((distanceMagnitude <= fVar4) || ((this->mScale.x) * 100 < cXyz_distance.y)) { + delta = pActor->current.pos - current.pos; + if (delta.y >= 0.0f) { + if ((mScale.x * 100) <= delta.absXZ() || (mScale.x * 100) < delta.y) { result = FALSE; } else { result = TRUE; @@ -61,9 +47,7 @@ BOOL daTag_Etc_c::otherCheck(fopAc_ac_c* pActor) { switch (cVar2) { case 0: - if (pActor != (fopAc_ac_c*)0x0 && - ((u32)pActor[0x13].mBase.mLnTg.mBase.mpTagData & 0x10) != 0) - { + if (pActor != (daNpc_Md_c*)0x0 && (((daNpc_Md_c*)pActor)->m30F0 & 0x10) != 0) { result = TRUE; } else { result = FALSE; @@ -76,36 +60,28 @@ BOOL daTag_Etc_c::otherCheck(fopAc_ac_c* pActor) { return result; } -/* Not matching, registers seem off */ /* 00000214-000002EC .text demoProc__11daTag_Etc_cFv */ void daTag_Etc_c::demoProc() { - s16 sVar1; - fopAc_ac_c* pfVar2; + daNpc_Md_c* pMedli; int staffIdx; u8 cVar3; - void* local_18[2]; - - local_18[0] = this->field_0x294; - pfVar2 = (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeByID, local_18); - staffIdx = g_dComIfG_gameInfo.play.mEvtManager.getMyStaffId("TAG_ETC_D", (fopAc_ac_c*)0x0, 0); + pMedli = (daNpc_Md_c*)fopAcM_SearchByID(processId); + staffIdx = dComIfGp_evmng_getMyStaffId("TAG_ETC_D", (daNpc_Md_c*)0x0, 0); if (staffIdx != -1) { cVar3 = getType2(); switch (cVar3) { case 0: - if ((pfVar2 == (fopAc_ac_c*)0x0) || - ((u32)pfVar2[0x13].mBase.mLnTg.mBase.mpTagData & 0x10) == 0) - { - sVar1 = this->field_0x29A; - if (sVar1 >= 1) { - this->field_0x29A = sVar1 + -1; + if ((pMedli == (daNpc_Md_c*)0x0) || (pMedli->m30F0 & 0x10) == 0) { + if (field_0x29A > 0) { + field_0x29A--; } else { - g_dComIfG_gameInfo.play.mEvtManager.cutEnd(staffIdx); + dComIfGp_evmng_cutEnd(staffIdx); } } break; default: - g_dComIfG_gameInfo.play.mEvtManager.cutEnd(staffIdx); + dComIfGp_evmng_cutEnd(staffIdx); } } } @@ -114,23 +90,19 @@ void daTag_Etc_c::demoProc() { void daTag_Etc_c::demoInitProc() { u8 cVar1; fopAc_ac_c* pActor; - void* local_18[4]; - dEvt_control_c* control; cVar1 = getType2(); - switch (cVar1) - case 0: { - local_18[0] = this->field_0x294; - pActor = (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeByID, local_18); - control = &g_dComIfG_gameInfo.play.mEvtCtrl; - control->mPtItem = control->getPId(pActor); - this->field_0x29A = 0xf; + switch (cVar1) { + case 0: + pActor = fopAcM_SearchByID(processId); + dComIfGp_event_setItemPartner(pActor); + field_0x29A = 0xf; + break; default:; } - return; + return; } -// Not matching /* 00000368-00000458 .text create__11daTag_Etc_cFv */ s32 daTag_Etc_c::create() { float fVar1; @@ -141,28 +113,26 @@ s32 daTag_Etc_c::create() { fopAcM_SetupActor(this, daTag_Etc_c); stageEVNTListIndex = getEventNo(); - this->eventIndex = - g_dComIfG_gameInfo.play.mEvtManager.getEventIdx((char*)0x0, stageEVNTListIndex); - if (this->eventIndex == -1) { - this->field_0x290 = 0; + eventIndex = dComIfGp_evmng_getEventIdx((char*)0x0, stageEVNTListIndex); + if (eventIndex == -1) { + field_0x290 = 0; } else { cVar3 = getType2(); switch (cVar3) { case 0: - this->field_0x290 = 1; + field_0x290 = 1; break; default: - this->field_0x290 = 0; + field_0x290 = 0; } } - this->shape_angle.z = 0; - this->shape_angle.x = 0; - this->current.angle.z = 0; - this->current.angle.x = 0; - this->mAttentionInfo.mFlags = fopAc_Attn_ACTION_TALK_e; - // MNot matching part, seems to be a constant value? - this->mAttentionInfo.mPosition.y += 150.0; - this->mEyePos.y += 150.0; + shape_angle.z = 0; + shape_angle.x = 0; + current.angle.z = 0; + current.angle.x = 0; + mAttentionInfo.mFlags = fopAc_Attn_ACTION_TALK_e; + mAttentionInfo.mPosition.y += 150.0f; + mEyePos.y += 150.0f; return 4; } From b659b88691758e6a18c81ee0625ec6eb280193f2 Mon Sep 17 00:00:00 2001 From: Crain-32 <25422785+Crain-32@users.noreply.github.com> Date: Mon, 25 Dec 2023 21:58:32 -0700 Subject: [PATCH 3/3] d_a_tag_etc PR Feedback --- src/d/actor/d_a_tag_etc.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/d/actor/d_a_tag_etc.cpp b/src/d/actor/d_a_tag_etc.cpp index d3ab7ecd3..1b6cd542e 100644 --- a/src/d/actor/d_a_tag_etc.cpp +++ b/src/d/actor/d_a_tag_etc.cpp @@ -28,7 +28,7 @@ BOOL daTag_Etc_c::rangeCheck(fopAc_ac_c* pActor) { delta = pActor->current.pos - current.pos; if (delta.y >= 0.0f) { - if ((mScale.x * 100) <= delta.absXZ() || (mScale.x * 100) < delta.y) { + if ((mScale.x * 100.0f) <= delta.absXZ() || (mScale.x * 100.0f) < delta.y) { result = FALSE; } else { result = TRUE; @@ -47,7 +47,7 @@ BOOL daTag_Etc_c::otherCheck(fopAc_ac_c* pActor) { switch (cVar2) { case 0: - if (pActor != (daNpc_Md_c*)0x0 && (((daNpc_Md_c*)pActor)->m30F0 & 0x10) != 0) { + if (pActor != NULL && (((daNpc_Md_c*)pActor)->m30F0 & 0x10) != 0) { result = TRUE; } else { result = FALSE; @@ -66,13 +66,13 @@ void daTag_Etc_c::demoProc() { int staffIdx; u8 cVar3; pMedli = (daNpc_Md_c*)fopAcM_SearchByID(processId); - staffIdx = dComIfGp_evmng_getMyStaffId("TAG_ETC_D", (daNpc_Md_c*)0x0, 0); + staffIdx = dComIfGp_evmng_getMyStaffId("TAG_ETC_D", NULL, 0); if (staffIdx != -1) { cVar3 = getType2(); switch (cVar3) { case 0: - if ((pMedli == (daNpc_Md_c*)0x0) || (pMedli->m30F0 & 0x10) == 0) { + if (pMedli == NULL || (pMedli->m30F0 & 0x10) == 0) { if (field_0x29A > 0) { field_0x29A--; } else { @@ -113,7 +113,7 @@ s32 daTag_Etc_c::create() { fopAcM_SetupActor(this, daTag_Etc_c); stageEVNTListIndex = getEventNo(); - eventIndex = dComIfGp_evmng_getEventIdx((char*)0x0, stageEVNTListIndex); + eventIndex = dComIfGp_evmng_getEventIdx(NULL, stageEVNTListIndex); if (eventIndex == -1) { field_0x290 = 0; } else {