diff --git a/include/d/actor/d_a_tag_etc.h b/include/d/actor/d_a_tag_etc.h index f5b3aaab2..a3c29bd3f 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 */ s32 processId; + /* 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..1b6cd542e 100644 --- a/src/d/actor/d_a_tag_etc.cpp +++ b/src/d/actor/d_a_tag_etc.cpp @@ -4,50 +4,145 @@ // #include "d/actor/d_a_tag_etc.h" +#include "d/actor/d_a_npc_md.h" +#include "d/d_com_inf_game.h" #include "dolphin/types.h" + /* 00000078-00000084 .text getEventNo__11daTag_Etc_cFv */ -void daTag_Etc_c::getEventNo() { - /* Nonmatching */ +u8 daTag_Etc_c::getEventNo() { + return fopAcM_GetParam(this) >> 0x18; } /* 00000084-00000090 .text getType2__11daTag_Etc_cFv */ -void daTag_Etc_c::getType2() { - /* Nonmatching */ +u32 daTag_Etc_c::getType2() { + return fopAcM_GetParam(this) >> 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 distanceMagnitude; + cXyz delta; + + delta = pActor->current.pos - current.pos; + if (delta.y >= 0.0f) { + if ((mScale.x * 100.0f) <= delta.absXZ() || (mScale.x * 100.0f) < delta.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 != NULL && (((daNpc_Md_c*)pActor)->m30F0 & 0x10) != 0) { + result = TRUE; + } else { + result = FALSE; + } + break; + default: + result = TRUE; + break; + } + return result; } /* 00000214-000002EC .text demoProc__11daTag_Etc_cFv */ void daTag_Etc_c::demoProc() { - /* Nonmatching */ + daNpc_Md_c* pMedli; + int staffIdx; + u8 cVar3; + pMedli = (daNpc_Md_c*)fopAcM_SearchByID(processId); + staffIdx = dComIfGp_evmng_getMyStaffId("TAG_ETC_D", NULL, 0); + + if (staffIdx != -1) { + cVar3 = getType2(); + switch (cVar3) { + case 0: + if (pMedli == NULL || (pMedli->m30F0 & 0x10) == 0) { + if (field_0x29A > 0) { + field_0x29A--; + } else { + dComIfGp_evmng_cutEnd(staffIdx); + } + } + break; + default: + dComIfGp_evmng_cutEnd(staffIdx); + } + } } /* 000002EC-00000368 .text demoInitProc__11daTag_Etc_cFv */ void daTag_Etc_c::demoInitProc() { - /* Nonmatching */ + u8 cVar1; + fopAc_ac_c* pActor; + + cVar1 = getType2(); + switch (cVar1) { + case 0: + pActor = fopAcM_SearchByID(processId); + dComIfGp_event_setItemPartner(pActor); + field_0x29A = 0xf; + break; + default:; + } + return; } /* 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(); + eventIndex = dComIfGp_evmng_getEventIdx(NULL, stageEVNTListIndex); + if (eventIndex == -1) { + field_0x290 = 0; + } else { + cVar3 = getType2(); + switch (cVar3) { + case 0: + field_0x290 = 1; + break; + default: + field_0x290 = 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; } /* 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 +163,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 +173,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(); } -