d_a_tag_kk1 (#755)

* 99% match

* Rewrote _execute to increase accuracy. Only issue in .text is a label not loading correctly. I have no idea how to fix this.

* Equivalent. Weak func ordering.

* Update src/d/actor/d_a_tag_kk1.cpp

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>

* Update src/d/actor/d_a_tag_kk1.cpp

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>

* Remove explicit `this`

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>

* Implemented hio_prm_c struct

---------

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>
This commit is contained in:
WilliamArnett
2025-05-18 20:42:29 -05:00
committed by GitHub
parent 094a297809
commit 28f3c8425e
3 changed files with 99 additions and 28 deletions
+1 -1
View File
@@ -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"),
+23 -10
View File
@@ -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 */
+75 -17
View File
@@ -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<daTag_Kk1_c*>(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<daTag_Kk1_c*>(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<daTag_Kk1_c*>(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<daTag_Kk1_c*>(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,