diff --git a/configure.py b/configure.py index 54e5e5ed6..576419f99 100755 --- a/configure.py +++ b/configure.py @@ -1432,7 +1432,7 @@ config.libs = [ ActorRel(Matching, "d_a_tag_ghostship"), ActorRel(NonMatching, "d_a_tag_hint"), ActorRel(Matching, "d_a_tag_kb_item"), - ActorRel(NonMatching, "d_a_tag_kk1"), + ActorRel(Equivalent, "d_a_tag_kk1", extra_cflags=['-pragma "nosyminline on"']), # weak func order ActorRel(NonMatching, "d_a_tag_light"), ActorRel(Matching, "d_a_tag_msg"), ActorRel(NonMatching, "d_a_tag_photo"), diff --git a/include/d/actor/d_a_tag_kk1.h b/include/d/actor/d_a_tag_kk1.h index 47b4e1d18..98ff930d9 100644 --- a/include/d/actor/d_a_tag_kk1.h +++ b/include/d/actor/d_a_tag_kk1.h @@ -4,8 +4,6 @@ #include "d/d_npc.h" #include "m_Do/m_Do_hostIO.h" - - class daTag_Kk1_c : public fopNpc_npc_c { public: BOOL createInit(); @@ -15,29 +13,23 @@ public: cPhs_State _create(); public: - /* 0x6C4 */ u8 field_0x6C4; - /* 0x6C5 */ bool field_0x6C5; - /* 0x6C6 */ u8 field_0x6C6; - /* 0x6C7 */ u8 field_0x6C7; + /* 0x6C4 */ u8 padding_0x6C4; + /* 0x6C5 */ bool mTagSet; + /* 0x6C6 */ bool mNameIsWrong; }; // Size: 0x6C8 class daTag_Kk1_HIO_c : public JORReflexible{ + public: + daTag_Kk1_HIO_c(); + virtual ~daTag_Kk1_HIO_c(){}; -public: - - virtual void foo(); - daTag_Kk1_HIO_c(); - virtual ~daTag_Kk1_HIO_c(){}; - -public: - /* 0x4 */ s8 mNo; - /* 0x8 */ f32 field_0x8; - /* 0xC */ f32 field_0xC; - /* 0x10 */ u8 field_0x10; + public: + /* 0x04 */ s8 mNo; + /* 0x08 */ f32 mHorizontalDistance; + /* 0x0C */ f32 mVerticalDistance; + /* 0x10 */ u8 mUnusedU8; }; - - #endif /* D_A_TAG_KK1_H */ diff --git a/src/d/actor/d_a_tag_kk1.cpp b/src/d/actor/d_a_tag_kk1.cpp index e471d89fb..b9580b293 100644 --- a/src/d/actor/d_a_tag_kk1.cpp +++ b/src/d/actor/d_a_tag_kk1.cpp @@ -3,59 +3,50 @@ // Translation Unit: d_a_tag_kk1.cpp // + #include "d/actor/d_a_tag_kk1.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" + static daTag_Kk1_HIO_c l_HIO; -static f32 a_prm_tbl[] = {350.0f,30.0f,0.0f}; + +static const u8 dummy5[] = { 0x00, 0xFF, 0x00, 0x80}; daTag_Kk1_HIO_c::daTag_Kk1_HIO_c() { - /* Nonmatching */ - // 99% matched - field_0x8 = a_prm_tbl[0]; - field_0xC = a_prm_tbl[1]; - field_0x10 = *(u8*)&a_prm_tbl[2]; - mNo = -0x01; -} -void daTag_Kk1_HIO_c::foo() { - + static f32 a_prm_tbl[] = {350.0f,30.0f,0.0f}; + mHorizontalDistance = a_prm_tbl[0]; + mVerticalDistance = a_prm_tbl[1]; + mUnusedU8 = *reinterpret_cast(&a_prm_tbl[2]); //TODO: This u8 appears to be inside the float table. May be a better way to refactor. + mNo = -1; } /* 00000120-00000128 .text createInit__11daTag_Kk1_cFv */ BOOL daTag_Kk1_c::createInit() { - return 1; + return TRUE; } /* 00000128-00000130 .text _draw__11daTag_Kk1_cFv */ bool daTag_Kk1_c::_draw() { - return 1; + return true; } /* 00000130-0000024C .text _execute__11daTag_Kk1_cFv */ bool daTag_Kk1_c::_execute() { - /* Nonmatching */ - // 98% matched - cXyz* thepos = &dComIfGp_getPlayer(0)->current.pos; - f32 distance = current.pos.abs(*thepos); - //distance = std::sqrtf(distance); - //distance = std::sqrtf(distance); - f32 vertDistance = dComIfGp_getPlayer(0)->current.pos.y - this->current.pos.y; - - field_0x6C5 = 0; + cXyz* player_pos = &dComIfGp_getPlayer(0)->current.pos; + f32 distance = std::sqrtf(current.pos.abs2(*player_pos)); + f32 vert_distance = dComIfGp_getPlayer(0)->current.pos.y - this->current.pos.y; + mTagSet = false; if ( - (distance < l_HIO.field_0x8) && - (vertDistance< l_HIO.field_0xC) + (distance < l_HIO.mHorizontalDistance) && (vert_distance< l_HIO.mVerticalDistance) ){ - s16 fillerVal = dComIfGp_getPlayer(0)->shape_angle.y - current.angle.y; - fillerVal =abs(fillerVal); - if(fillerVal < 0x1000){ //(iVar3 = abs((int)(short)((mpCurPlayerActor[0]->shape_angle.y -current.angle.y)),(short)iVar3 < 0x1000) - field_0x6C5 = 1; + s16 angle_deviation = dComIfGp_getPlayer(0)->shape_angle.y - current.angle.y; + angle_deviation =abs(angle_deviation); + if(angle_deviation < 0x1000){ + mTagSet = true; } } - - return true; } @@ -65,7 +56,7 @@ bool daTag_Kk1_c::_delete() { if (l_HIO.mNo >= 0) { mDoHIO_deleteChild(l_HIO.mNo); - l_HIO.mNo = 0xff; + l_HIO.mNo = -1; } return TRUE; } @@ -73,28 +64,30 @@ bool daTag_Kk1_c::_delete() { /* 000002A0-0000046C .text _create__11daTag_Kk1_cFv */ cPhs_State daTag_Kk1_c::_create() { - int test = 0; - s32 ret = cPhs_COMPLEATE_e; + u32 name_int = 0; + s32 o_phsState = cPhs_COMPLEATE_e; fopAcM_SetupActor(this, daTag_Kk1_c); switch(fopAcM_GetName(this)){ case PROC_TAG_KK1: - this->field_0x6C6 = 0; + mNameIsWrong = false; break; default: return cPhs_ERROR_e; } - if((char)l_HIO.mNo < 0){ - l_HIO.mNo = mDoHIO_createChild("貧乏ム−ル追跡起動タグ",&l_HIO); //Poor Muuru chase startup tag - } - if(!createInit()){ - ret = cPhs_ERROR_e; + if(l_HIO.mNo < 0){ + //Poor Muuru (Mila) chase startup tag + l_HIO.mNo = mDoHIO_createChild("貧乏ム−ル追跡起動タグ",&l_HIO); } - fpcM_GetName(&test); - return ret; + if(!createInit()){ + o_phsState = cPhs_ERROR_e; + } + + fpcM_GetName(&name_int); + return o_phsState; } /* 00000694-000006B4 .text daTag_Kk1_Create__FP10fopAc_ac_c */ @@ -123,7 +116,6 @@ static BOOL daTag_Kk1_IsDelete(daTag_Kk1_c* obj) { return TRUE; } -// static float a_prm_tbl; static actor_method_class l_daTag_Kk1_Method = { (process_method_func)daTag_Kk1_Create,