diff --git a/configure.py b/configure.py index 06b5b6537..2fb0a01fd 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 96cb1240e..bd0a219e1 100644 --- a/include/d/actor/d_a_tag_kk1.h +++ b/include/d/actor/d_a_tag_kk1.h @@ -1,26 +1,39 @@ #ifndef D_A_TAG_KK1_H #define D_A_TAG_KK1_H -#include "f_op/f_op_actor.h" +#include "d/d_npc.h" +#include "m_Do/m_Do_hostIO.h" -class daTag_Kk1_c : public fopAc_ac_c { +class daTag_Kk1_c : public fopNpc_npc_c { public: - void createInit(); + BOOL createInit(); bool _draw(); bool _execute(); bool _delete(); cPhs_State _create(); public: - /* Place member variables here */ -}; + /* 0x6C4 */ u8 padding_0x6C4; + /* 0x6C5 */ bool mTagSet; + /* 0x6C6 */ bool mNameIsWrong; +}; // Size: 0x6C8 -class daTag_Kk1_HIO_c { -public: - daTag_Kk1_HIO_c(); -public: - /* Place member variables here */ +class daTag_Kk1_HIO_c : public JORReflexible{ + + public: + daTag_Kk1_HIO_c(); + virtual ~daTag_Kk1_HIO_c(){}; + + public: + struct hio_prm_c { + /* 0x08 */ f32 mHorizontalDistance; + /* 0x0C */ f32 mVerticalDistance; + /* 0x10 */ u8 field_0x10; + }; + + /* 0x04 */ s8 mNo; + /* 0x08 */ hio_prm_c prm; }; #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 0bc9bb0bf..0e171ca80 100644 --- a/src/d/actor/d_a_tag_kk1.cpp +++ b/src/d/actor/d_a_tag_kk1.cpp @@ -3,64 +3,122 @@ // 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 const u8 dummy5[] = { 0x00, 0xFF, 0x00, 0x80}; + /* 000000EC-00000120 .text __ct__15daTag_Kk1_HIO_cFv */ daTag_Kk1_HIO_c::daTag_Kk1_HIO_c() { - /* Nonmatching */ + static hio_prm_c a_prm_tbl = { + 350.0f, + 30.0f, + 0, + }; + prm = a_prm_tbl; + mNo = -1; } /* 00000120-00000128 .text createInit__11daTag_Kk1_cFv */ -void daTag_Kk1_c::createInit() { - /* Nonmatching */ +BOOL daTag_Kk1_c::createInit() { + return TRUE; } /* 00000128-00000130 .text _draw__11daTag_Kk1_cFv */ bool daTag_Kk1_c::_draw() { - /* Nonmatching */ + return true; } /* 00000130-0000024C .text _execute__11daTag_Kk1_cFv */ bool daTag_Kk1_c::_execute() { - /* Nonmatching */ + + f32 distance = current.pos.abs(dComIfGp_getPlayer(0)->current.pos); + f32 vert_distance = dComIfGp_getPlayer(0)->current.pos.y - current.pos.y; + mTagSet = false; + if ( + (distance < l_HIO.prm.mHorizontalDistance) && (vert_distance< l_HIO.prm.mVerticalDistance) + ){ + 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; } + /* 0000024C-000002A0 .text _delete__11daTag_Kk1_cFv */ bool daTag_Kk1_c::_delete() { - /* Nonmatching */ + + if (l_HIO.mNo >= 0) { + mDoHIO_deleteChild(l_HIO.mNo); + l_HIO.mNo = -1; + } + return TRUE; } /* 000002A0-0000046C .text _create__11daTag_Kk1_cFv */ cPhs_State daTag_Kk1_c::_create() { - /* Nonmatching */ + + u32 name_int = 0; + s32 o_phsState = cPhs_COMPLEATE_e; + + fopAcM_SetupActor(this, daTag_Kk1_c); + + switch(fopAcM_GetName(this)){ + case PROC_TAG_KK1: + mNameIsWrong = false; + break; + default: + return cPhs_ERROR_e; + } + + if(l_HIO.mNo < 0){ + //Poor Muuru (Mila) chase startup tag + l_HIO.mNo = mDoHIO_createChild("貧乏ム−ル追跡起動タグ",&l_HIO); + } + + if(!createInit()){ + o_phsState = cPhs_ERROR_e; + } + + fpcM_GetName(&name_int); + return o_phsState; } /* 00000694-000006B4 .text daTag_Kk1_Create__FP10fopAc_ac_c */ -static cPhs_State daTag_Kk1_Create(fopAc_ac_c*) { - /* Nonmatching */ +static cPhs_State daTag_Kk1_Create(fopAc_ac_c* obj) { + (static_cast(obj))->_create(); } /* 000006B4-000006D4 .text daTag_Kk1_Delete__FP11daTag_Kk1_c */ -static BOOL daTag_Kk1_Delete(daTag_Kk1_c*) { - /* Nonmatching */ +static BOOL daTag_Kk1_Delete(daTag_Kk1_c* obj) { + (static_cast(obj))->_delete(); } /* 000006D4-000006F4 .text daTag_Kk1_Execute__FP11daTag_Kk1_c */ -static BOOL daTag_Kk1_Execute(daTag_Kk1_c*) { - /* Nonmatching */ +static BOOL daTag_Kk1_Execute(daTag_Kk1_c* obj) { + (static_cast(obj))->_execute(); } /* 000006F4-00000714 .text daTag_Kk1_Draw__FP11daTag_Kk1_c */ -static BOOL daTag_Kk1_Draw(daTag_Kk1_c*) { - /* Nonmatching */ +static BOOL daTag_Kk1_Draw(daTag_Kk1_c* obj) { + (static_cast(obj))->_draw(); + } /* 00000714-0000071C .text daTag_Kk1_IsDelete__FP11daTag_Kk1_c */ -static BOOL daTag_Kk1_IsDelete(daTag_Kk1_c*) { - /* Nonmatching */ +static BOOL daTag_Kk1_IsDelete(daTag_Kk1_c* obj) { + return TRUE; } + static actor_method_class l_daTag_Kk1_Method = { (process_method_func)daTag_Kk1_Create, (process_method_func)daTag_Kk1_Delete,