diff --git a/configure.py b/configure.py index cc2f3e892..210533f17 100755 --- a/configure.py +++ b/configure.py @@ -1504,7 +1504,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_syan"), ActorRel(NonMatching, "d_a_tag_md_cb"), ActorRel(NonMatching, "d_a_tag_mk"), - ActorRel(NonMatching, "d_a_tag_so"), + ActorRel(Matching, "d_a_tag_so"), ActorRel(NonMatching, "d_a_tornado"), ActorRel(NonMatching, "d_a_warpf"), ActorRel(NonMatching, "d_a_wind_tag"), diff --git a/include/d/actor/d_a_tag_so.h b/include/d/actor/d_a_tag_so.h index a0ea78d26..6fbfde41b 100644 --- a/include/d/actor/d_a_tag_so.h +++ b/include/d/actor/d_a_tag_so.h @@ -2,6 +2,7 @@ #define D_A_TAG_SO_H #include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" class daTag_So_c : public fopAc_ac_c { public: @@ -18,15 +19,23 @@ public: bool _delete(); public: - /* Place member variables here */ + /* 0x290 */ u8 m290; + /* 0x291 */ u8 m291[0x293-0x291]; + /* 0x294 */ float mRadius; + /* 0x298 */ u8 m298; + /* 0x299 */ u8 m299[0x2A2 - 0x299]; }; class daTag_So_HIO_c { public: daTag_So_HIO_c(); + virtual ~daTag_So_HIO_c(){} public: - /* Place member variables here */ + /* 0x00 */ //vtable + /* 0x04 */ s8 mNo; + /* 0x05 */ u8 m05; + /* 0x06 */ u8 m06[0x0F-0x06]; }; #endif /* D_A_TAG_SO_H */ diff --git a/src/d/actor/d_a_tag_so.cpp b/src/d/actor/d_a_tag_so.cpp index 376501925..d7b91f7ca 100644 --- a/src/d/actor/d_a_tag_so.cpp +++ b/src/d/actor/d_a_tag_so.cpp @@ -4,66 +4,92 @@ // #include "d/actor/d_a_tag_so.h" +#include "d/d_lib.h" #include "d/d_procname.h" /* 000000EC-0000010C .text __ct__14daTag_So_HIO_cFv */ daTag_So_HIO_c::daTag_So_HIO_c() { - /* Nonmatching */ + mNo = -1; + m05 = 0; + return; } +static daTag_So_HIO_c l_HIO; + /* 0000010C-00000114 .text _execute__10daTag_So_cFv */ bool daTag_So_c::_execute() { - /* Nonmatching */ + return TRUE; } /* 00000114-0000018C .text debugDraw__10daTag_So_cFv */ -void daTag_So_c::debugDraw() { - /* Nonmatching */ +void daTag_So_c::debugDraw() { + cXyz actorPos = current.pos; + actorPos.y += 20.0f; + if (m298 == 1) + dLib_debugDrawFan(actorPos, shape_angle.y, 0x3500, mRadius, (GXColor){0xFF, 0x00, 0x00, 0x80}); + return; } /* 0000018C-000001C4 .text _draw__10daTag_So_cFv */ bool daTag_So_c::_draw() { - /* Nonmatching */ + if(l_HIO.m05) + debugDraw(); + return TRUE; } /* 000001C4-00000224 .text getArg__10daTag_So_cFv */ void daTag_So_c::getArg() { - /* Nonmatching */ + s32 param; + s32 paramRadius; + + param = fopAcM_GetParam(this); + m290 = fopAcM_GetParamBit(param, 0, 8); + paramRadius = fopAcM_GetParamBit(param, 8, 8); + m298 = fopAcM_GetParamBit(param, 16, 8); + if (paramRadius == 0xff) { + mRadius = 1600.0f; + } + else { + mRadius = paramRadius * 100; + } + return; } /* 00000224-0000027C .text _create__10daTag_So_cFv */ s32 daTag_So_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daTag_So_c); + getArg(); + return cPhs_COMPLEATE_e; } /* 0000027C-00000284 .text _delete__10daTag_So_cFv */ bool daTag_So_c::_delete() { - /* Nonmatching */ + return TRUE; } /* 00000284-000002A4 .text daTag_SoCreate__FPv */ -static s32 daTag_SoCreate(void*) { - /* Nonmatching */ +static s32 daTag_SoCreate(void* i_this) { + return ((daTag_So_c*)i_this)->_create(); } /* 000002A4-000002C8 .text daTag_SoDelete__FPv */ -static BOOL daTag_SoDelete(void*) { - /* Nonmatching */ +static BOOL daTag_SoDelete(void* i_this) { + return ((daTag_So_c*)i_this)->_delete(); } /* 000002C8-000002EC .text daTag_SoExecute__FPv */ -static BOOL daTag_SoExecute(void*) { - /* Nonmatching */ +static BOOL daTag_SoExecute(void* i_this) { + return ((daTag_So_c*)i_this)->_execute(); } /* 000002EC-00000310 .text daTag_SoDraw__FPv */ -static BOOL daTag_SoDraw(void*) { - /* Nonmatching */ +static BOOL daTag_SoDraw(void* i_this) { + return ((daTag_So_c*)i_this)->_draw();; } /* 00000310-00000318 .text daTag_SoIsDelete__FPv */ static BOOL daTag_SoIsDelete(void*) { - /* Nonmatching */ + return TRUE; } static actor_method_class daTag_SoMethodTable = {