From 867581cbdaf6bfcb13f0ec8a3b2d7b5051676c9a Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Wed, 14 May 2025 12:46:59 -0500 Subject: [PATCH 01/15] 99% match --- include/d/actor/d_a_tag_kk1.h | 31 +++++++++--- src/d/actor/d_a_tag_kk1.cpp | 93 +++++++++++++++++++++++++++++------ 2 files changed, 101 insertions(+), 23 deletions(-) diff --git a/include/d/actor/d_a_tag_kk1.h b/include/d/actor/d_a_tag_kk1.h index 96cb1240e..47b4e1d18 100644 --- a/include/d/actor/d_a_tag_kk1.h +++ b/include/d/actor/d_a_tag_kk1.h @@ -1,26 +1,43 @@ #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 field_0x6C4; + /* 0x6C5 */ bool field_0x6C5; + /* 0x6C6 */ u8 field_0x6C6; + /* 0x6C7 */ u8 field_0x6C7; +}; // Size: 0x6C8 + + +class daTag_Kk1_HIO_c : public JORReflexible{ + -class daTag_Kk1_HIO_c { public: + + virtual void foo(); daTag_Kk1_HIO_c(); + virtual ~daTag_Kk1_HIO_c(){}; public: - /* Place member variables here */ + /* 0x4 */ s8 mNo; + /* 0x8 */ f32 field_0x8; + /* 0xC */ f32 field_0xC; + /* 0x10 */ u8 field_0x10; }; + + #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..f1074e8d0 100644 --- a/src/d/actor/d_a_tag_kk1.cpp +++ b/src/d/actor/d_a_tag_kk1.cpp @@ -4,63 +4,124 @@ // #include "d/actor/d_a_tag_kk1.h" +#include "d/d_com_inf_game.h" #include "d/d_procname.h" -/* 000000EC-00000120 .text __ct__15daTag_Kk1_HIO_cFv */ + +static daTag_Kk1_HIO_c l_HIO; +static f32 a_prm_tbl[] = {350.0f,30.0f,0.0f}; + 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() { + } /* 00000120-00000128 .text createInit__11daTag_Kk1_cFv */ -void daTag_Kk1_c::createInit() { - /* Nonmatching */ +BOOL daTag_Kk1_c::createInit() { + return 1; } /* 00000128-00000130 .text _draw__11daTag_Kk1_cFv */ bool daTag_Kk1_c::_draw() { - /* Nonmatching */ + return 1; } /* 00000130-0000024C .text _execute__11daTag_Kk1_cFv */ bool daTag_Kk1_c::_execute() { /* Nonmatching */ + // 98% matched + short minadjustdistance = 0x1000; + f32 distance = PSVECSquareDistance(¤t.pos, &dComIfGp_getPlayer(0)->current.pos); + + + distance = std::sqrtf(distance); + f32 vertDistance = dComIfGp_getPlayer(0)->current.pos.y - this->current.pos.y; + + field_0x6C5 = 0; + + if ( + (distance < l_HIO.field_0x8) && + (vertDistance< l_HIO.field_0xC) && + ((short)abs((short)(dComIfGp_getPlayer(0)->shape_angle.y - current.angle.y)) < minadjustdistance)) { + field_0x6C5 = 1; + } + + 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 = 0xff; + } + return TRUE; } /* 000002A0-0000046C .text _create__11daTag_Kk1_cFv */ cPhs_State daTag_Kk1_c::_create() { - /* Nonmatching */ + + int test = 0; + s32 ret = cPhs_COMPLEATE_e; + + fopAcM_SetupActor(this, daTag_Kk1_c); + + switch(fopAcM_GetName(this)){ + case PROC_TAG_KK1: + this->field_0x6C6 = 0; + 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; + } + + fpcM_GetName(&test); + return ret; } /* 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 float a_prm_tbl; + static actor_method_class l_daTag_Kk1_Method = { (process_method_func)daTag_Kk1_Create, (process_method_func)daTag_Kk1_Delete, From 9d3beef798ae10c24522e251c25dfb66ce16511d Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Thu, 15 May 2025 04:18:01 -0500 Subject: [PATCH 02/15] Rewrote _execute to increase accuracy. Only issue in .text is a label not loading correctly. I have no idea how to fix this. --- src/d/actor/d_a_tag_kk1.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/d/actor/d_a_tag_kk1.cpp b/src/d/actor/d_a_tag_kk1.cpp index f1074e8d0..e471d89fb 100644 --- a/src/d/actor/d_a_tag_kk1.cpp +++ b/src/d/actor/d_a_tag_kk1.cpp @@ -7,7 +7,6 @@ #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}; @@ -37,22 +36,26 @@ bool daTag_Kk1_c::_draw() { bool daTag_Kk1_c::_execute() { /* Nonmatching */ // 98% matched - short minadjustdistance = 0x1000; - f32 distance = PSVECSquareDistance(¤t.pos, &dComIfGp_getPlayer(0)->current.pos); + cXyz* thepos = &dComIfGp_getPlayer(0)->current.pos; + f32 distance = current.pos.abs(*thepos); + //distance = std::sqrtf(distance); - - distance = std::sqrtf(distance); + //distance = std::sqrtf(distance); f32 vertDistance = dComIfGp_getPlayer(0)->current.pos.y - this->current.pos.y; field_0x6C5 = 0; - if ( (distance < l_HIO.field_0x8) && - (vertDistance< l_HIO.field_0xC) && - ((short)abs((short)(dComIfGp_getPlayer(0)->shape_angle.y - current.angle.y)) < minadjustdistance)) { - field_0x6C5 = 1; + (vertDistance< l_HIO.field_0xC) + ){ + 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; + } } + return true; } From 84f631e2341b0cd31a518e157db95071e6b10bff Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Thu, 15 May 2025 18:04:20 -0500 Subject: [PATCH 03/15] Equivalent. Weak func ordering. --- configure.py | 2 +- include/d/actor/d_a_tag_kk1.h | 30 ++++++-------- src/d/actor/d_a_tag_kk1.cpp | 74 ++++++++++++++++------------------- 3 files changed, 45 insertions(+), 61 deletions(-) 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, From fc5f48f3c7a9846d72add440427b36ec74a3d05d Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Thu, 15 May 2025 18:14:35 -0500 Subject: [PATCH 04/15] 7% text --- include/d/actor/d_a_npc_kk1.h | 67 +++++-- src/d/actor/d_a_npc_kk1.cpp | 335 +++++++++++++++++++++++++++++++--- 2 files changed, 358 insertions(+), 44 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index a823adfaa..48024512f 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -1,11 +1,12 @@ #ifndef D_A_NPC_KK1_H #define D_A_NPC_KK1_H +#include "d/d_npc.h" #include "f_op/f_op_actor.h" class J3DNode; -class daNpc_Kk1_c : public fopAc_ac_c { +class daNpc_Kk1_c : public fopNpc_npc_c { public: struct anm_prm_c { @@ -34,15 +35,15 @@ public: void ctrlAnmAtr(); void setAnm_ATR(); void anmAtr(unsigned short); - void next_msgStatus(unsigned long*); - void getMsg_KK1_0(); - void getMsg(); + u16 next_msgStatus(unsigned long*); + u32 getMsg_KK1_0(); + u32 getMsg(); void eventOrder(); void checkOrder(); - void chk_talk(); - void chk_parts_notMov(); - void searchByID(fpc_ProcID, int*); - void partner_search_sub(void* (*)(void*, void*)); + bool chk_talk(); + bool chk_parts_notMov(); + fopAc_ac_c* searchByID(fpc_ProcID, int*); + bool partner_search_sub(void* (*)(void*, void*)); void partner_search(); void lookBack(); void chkAttention(); @@ -80,7 +81,7 @@ public: void endEvent(); void isEventEntry(); void event_proc(int); - void checkCommandTalk(); + bool checkCommandTalk(); void set_action(int (daNpc_Kk1_c::*)(void*), void*); void setStt(signed char); void createTama(float); @@ -122,17 +123,43 @@ public: void CreateHeap(); public: - /* 0x6C4 */ u8 m6C4[0x72C - 0x6C4]; - /* 0x72C */ cXyz m72C; - /* 0x738 */ cXyz m738; - /* 0x744 */ u8 m744[0x750 - 0x744]; - /* 0x750 */ cXyz m750; - /* 0x75C */ u8 m75C[0x7C4 - 0x75C]; - /* 0x7C4 */ u8 m7C4; - /* 0x7C5 */ u8 m7C5[0x81E - 0x7C5]; - /* 0x81E */ u8 m81E; - /* 0x81F */ u8 m81F[0x824 - 0x81F]; -}; + /* 0x6C4 */ u8 field_0x6C4[0x6FC - 0x6C4]; + /* 0x6FC*/ u32 field_0x6FC; + /* 0x700 */ u8 field_0x700[0x72C - 0x700]; + /* 0x72C */ cXyz field_0x72C; + /* 0x738 */ cXyz field_0x738; + /* 0x744 */ u8 field_0x744[0x750 - 0x744]; + /* 0x750 */ cXyz field_0x750; + /* 0x75C */ u8 field_0x75C[0x770 - 0x75C]; + /* 0x770 */ s16 field_0x770; + /* 0x772 */ s16 field_0x772; + /* 0x774 */ s16 field_0x774; + /* 0x776 */ u8 field_0x776[0x77C - 0x776]; + /* 0x77C */ s16 field_0x77C[0x08]; //8 Elements * U16 = 16 bytes + /* 0x78C */ s16 field_0x78C; //Array Index? + /* 0x78E */ s8 field_0x78D[0x7AE - 0x78E]; + /* 0x7AE */ u16 field_0x7AE; + /* 0x7B0 */ u8 field_0x7B0[0x7B4 - 0x7B0]; + /* 0x7B4 */ u8 field_0x7B4; + /* 0x7B5 */ u8 field_0x7B5[0x7B8 - 0x7B5]; + /* 0x7B8 */ u8 field_0x7B8; + /* 0x7B9 */ u8 field_0x7B9[0x7BA - 0x7B9]; + /* 0x7BA */ u8 field_0x7BA; + /* 0x7BB */ u8 field_0x7BB[0x7C3 - 0x7BB]; + /* 0x7C3 */ u8 field_0x7C3; + /* 0x7C4 */ u8 field_0x7C4; + /* 0x7C5 */ u8 field_0x7C5[0x817 - 0x7C5]; + /* 0x817 */ u8 field_0x817; + /* 0x818 */ u8 field_0x818; + /* 0x819 */ u8 field_0x819[0x81B - 0x819]; + /* 0x81B */ s8 field_0x81B; + /* 0x81C */ u8 field_0x81C; + /* 0x81D */ u8 field_0x81D; + /* 0x81E */ u8 field_0x81E; + /* 0x81F */ u8 field_0x81F[0x820 - 0x81F]; + /* 0x820 */ u8 field_0x820; + /* 0x821 */ s8 field_0x821; +}; // Size: 0x824 class daNpc_Kk1_HIO_c { public: diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index fc0121805..9e86189b2 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -4,6 +4,7 @@ // #include "d/actor/d_a_npc_kk1.h" +#include "d/d_com_inf_game.h" #include "d/d_procname.h" /* 000000EC-00000150 .text __ct__15daNpc_Kk1_HIO_cFv */ @@ -37,7 +38,7 @@ static BOOL CheckCreateHeap(fopAc_ac_c*) { } /* 0000044C-000004EC .text searchActor_SWC00__FPvPv */ -void searchActor_SWC00(void*, void*) { +void* searchActor_SWC00(void*, void*) { /* Nonmatching */ } @@ -137,58 +138,342 @@ void daNpc_Kk1_c::anmAtr(unsigned short) { } /* 000011A0-0000149C .text next_msgStatus__11daNpc_Kk1_cFPUl */ -void daNpc_Kk1_c::next_msgStatus(unsigned long*) { +u16 daNpc_Kk1_c::next_msgStatus(unsigned long* param_1) { /* Nonmatching */ + u8 bVar1 = this->mpCurrMsg->mSelectNum; + u16 uVar2 = 0xf; + switch(*param_1) { + case 0x1c85: + *param_1 = 0x1c86; + break; + case 0x1c86: + *param_1 = 0x1ca7; + break; + case 0x1c88: + *param_1 = 0x1c89; + break; + case 0x1c89: + *param_1 = 0x1c8a; + break; + case 0x1c8a: + *param_1 = 0x1ca9; + break; + case 0x1c8b: + *param_1 = 0x1cac; + this->field_0x7B8 = 1; + break; + case 0x1c8d: + *param_1 = 0x1c8e; + break; + case 0x1c8e: + *param_1 = 0x1c8f; + break; + case 0x1c8f: + if (bVar1 == 1) { + *param_1 = 0x1ca5; + field_0x7AE++; + } + else if (bVar1 == 0) { + *param_1 = 0x1c90; + } + break; + case 0x1c90: + *param_1 = 0x1c91; + break; + case 0x1c91: + if (bVar1 == 1) { + *param_1 = 0x1c92; + field_0x7AE++; + } + else if (bVar1 == 0) { + *param_1 = 0x1c93; + } + break; + case 0x1c92: + *param_1 = 0x1c91; + break; + case 0x1c93: + *param_1 = 0x1c94; + break; + case 0x1c94: + if (bVar1 == 1) { + *param_1 = 0x1c95; + field_0x7AE++; + } + else if (bVar1 == 0) { + *param_1 = 0x1c96; + } + break; + case 0x1c95: + *param_1 = 0x1c96; + break; + case 0x1c96: + *param_1 = 0x1c97; + break; + case 0x1c97: + if (bVar1 == 1) { + *param_1 = (this->field_0x7AE <= 1) ? (0x1C9B - 1 - (this->field_0x7AE >> 31)) + : (0x1C9B - 0 - (this->field_0x7AE >> 31)); + } + else if (bVar1 == 0) { + *param_1 = 0x1c98; + } + break; + case 0x1c98: + if (bVar1 == 1) { + uVar2 = 0x10; + } + else if (bVar1 == 0) { + *param_1 = 0x1c99; + } + break; + case 0x1c99: + if (bVar1 == 1) { + *param_1 = 0x1c9a; + } + else if (bVar1 == 0) { + int fieldValue = this->field_0x7AE; + uint temp = (fieldValue <= 1) ? 1 : 0; + *param_1 = (-temp) - (fieldValue >> 31) + 0x1C9D; + } + break; + case 0x1c9b: + *param_1 = 0x1c9d; + break; + case 0x1c9d: + *param_1 = 0x1c9e; + break; + case 0x1c9e: + *param_1 = 0x1caa; + break; + case 0x1c9f: + uVar2 = 0x10; + break; + case 0x1ca1: + *param_1 = 0x1ca2; + break; + case 0x1ca2: + *param_1 = 0x1ca3; + break; + case 0x1ca3: + *param_1 = 0x1ca4; + break; + case 0x1ca4: + *param_1 = 0x1cab; + break; + case 0x1ca5: + *param_1 = 0x1c8f; + break; + case 0x1ca7: + *param_1 = 0x1ca8; + break; + case 0x1caa: + *param_1 = 0x1c9f; + break; + default: + uVar2 = 0x10; + break; + } + return uVar2; } /* 0000149C-00001534 .text getMsg_KK1_0__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::getMsg_KK1_0() { - /* Nonmatching */ +u32 daNpc_Kk1_c::getMsg_KK1_0() { + + if (dKy_daynight_check() == 1) { + if (field_0x7BA != 0) { + + field_0x7BA = 0; + return 0x1ca1; + } + else { + return 0x1c8b; + } + } + else { + if (dComIfGs_isEventBit(0xe08) == 0) { + if(dComIfGs_isEventBit(0xe10)){ + return 0x1C87; + }else{ + return 0x1C88; + } + } + else { + return 0x1c85; + } + } + //I'm the goat } /* 00001534-00001570 .text getMsg__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::getMsg() { - /* Nonmatching */ +u32 daNpc_Kk1_c::getMsg() { + u32 result = 0; + switch((int)field_0x820){ + case 0: + result = getMsg_KK1_0(); + break; + } + return result; } /* 00001570-000015FC .text eventOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::eventOrder() { /* Nonmatching */ -} + char cVar1 = field_0x81B; + if ((cVar1 == '\x01') || (cVar1 == '\x02')) { + // this->eventInfo.mCondition |= dEvtCnd_CANTALK_e; + eventInfo.onCondition(dEvtCnd_CANTALK_e); + if(field_0x81B == '\x01'){ + fopAcM_orderSpeakEvent(this); + } + }else if (cVar1 >= 0x03){ + field_0x78C = (cVar1 - 3); + fopAcM_orderOtherEventId(this,field_0x77C[field_0x78C],0x00ff,0xffff,0,1); + } + //fopAcM_orderOtherEventId(this,(&field_0x77C + 2*field_0x78C),) +} /* 000015FC-000016DC .text checkOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::checkOrder() { /* Nonmatching */ + if(eventInfo.checkCommandDemoAccrpt()){ + if(dComIfGp_evmng_startCheck(field_0x77C[field_0x78C]) && (s8)field_0x81B >= 0x03){ + switch(field_0x78C){ + case 4: + setAnm_NUM(0,1); + break; + case 5: + case 3: + default: + break; + } + + field_0x81B = 0; + field_0x817 = 0xFF; + field_0x818 = 0xFF; + }; + + } + else{ + if((this->checkCommandTalk() != 0)&&((field_0x81B == 1) ||(field_0x81B == 2))){ + this->field_0x81B = 0; + this->field_0x7C3 = 1; + } + } + } /* 000016DC-00001774 .text chk_talk__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chk_talk() { - /* Nonmatching */ +bool daNpc_Kk1_c::chk_talk() { + bool retval; + if(dComIfGp_event_chkTalkXY()){ + retval = true; + if(dComIfGp_evmng_ChkPresentEnd() != 0){ + field_0x7B4 = dComIfGp_event_getPreItemNo(); + retval = true; + }else{ + retval = false; + } + }else{ + field_0x7B4 = 0xFF; + retval = true; + } + return retval; } /* 00001774-000017B4 .text chk_parts_notMov__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chk_parts_notMov() { - /* Nonmatching */ +bool daNpc_Kk1_c::chk_parts_notMov() { + bool retval = 0; + if((field_0x772 != m_jnt.mAngles[0][1])|| + (field_0x774 != m_jnt.mAngles[1][1])|| + (field_0x770 != current.angle.y)){ + retval = 1; + } + return retval; + } /* 000017B4-00001808 .text searchByID__11daNpc_Kk1_cFUiPi */ -void daNpc_Kk1_c::searchByID(fpc_ProcID, int*) { - /* Nonmatching */ +fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID param_1, int* param_2) { + fopAc_ac_c *fiveActors[4]; + fiveActors[0] = NULL; + *param_2 = 0; + if(!fopAcM_SearchByID(param_1,fiveActors)){ + *param_2 = 1; + } + return fiveActors[0]; } + +static u32 l_check_inf[0x14]; +#define SEARCH_PTR_FIELD (*(void**)(&l_check_inf[0])) +#define SEARCH_ID_FIELD (l_check_inf[1]) +static s32 l_check_wrk; +//static PartnerSearchResult l_check_inf; // Search results buffer /* 00001808-000018B8 .text partner_search_sub__11daNpc_Kk1_cFPFPvPv_Pv */ -void daNpc_Kk1_c::partner_search_sub(void* (*)(void*, void*)) { - /* Nonmatching */ +bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*, void*)) { + u32 uVar1; + bool retVal = false; + field_0x6FC = -1; + l_check_wrk = 0; + + for(int i = 0; i != 0x14; i++){ + l_check_inf[i] = 0x0000; + } + fpcEx_Search(param_1, this); + if(l_check_wrk != 0){ + if(SEARCH_PTR_FIELD != 0){ + + uVar1 = l_check_inf[1]; + + }else{ + uVar1 = -1; + } + field_0x6FC = uVar1; + retVal = 1; + } + + return retVal; } /* 000018B8-00001924 .text partner_search__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::partner_search() { /* Nonmatching */ + bool cVar1; + if(field_0x821 == '\x01'){ + + switch(field_0x820){ + + + case 0: + cVar1 = partner_search_sub(searchActor_SWC00); + break; + default: + cVar1 = 1; + } + if(cVar1){ + field_0x821 += 1; + } + } + return; } /* 00001924-00001B10 .text lookBack__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::lookBack() { + field_0x772 = m_jnt.mAngles[0][1]; + field_0x774 = m_jnt.mAngles[1][1]; + field_0x770 = current.angle.y; + volatile cXyz Vec1 = cXyz::Zero; + volatile cXyz* VecPtr1 = NULL; + volatile f32 targetY = current.angle.y; + /* Nonmatching */ + // 6] getHead_y__14dNpc_JntCtrl_cFv (func,weak) found in d_a_npc_kk1.o + // 6] getBackbone_y__14dNpc_JntCtrl_cFv (func,weak) found in d_a_npc_kk1.o + // >>> SYMBOL NOT FOUND: dNpc_playerEyePos__Ff + // 6] kyorokyoro__11daNpc_Kk1_cFv (func,global) found in d_a_npc_kk1.o + + // } /* 00001B10-00001B90 .text chkAttention__11daNpc_Kk1_cFv */ @@ -367,7 +652,7 @@ void daNpc_Kk1_c::event_proc(int) { } /* 00002F80-00002FB8 .text checkCommandTalk__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::checkCommandTalk() { +bool daNpc_Kk1_c::checkCommandTalk() { /* Nonmatching */ } @@ -567,28 +852,30 @@ void daNpc_Kk1_c::CreateHeap() { } /* 00006684-000066A4 .text daNpc_Kk1_Create__FP10fopAc_ac_c */ -static cPhs_State daNpc_Kk1_Create(fopAc_ac_c*) { - /* Nonmatching */ +static cPhs_State daNpc_Kk1_Create(fopAc_ac_c* obj) { + (static_cast(obj))->_create(); + } /* 000066A4-000066C4 .text daNpc_Kk1_Delete__FP11daNpc_Kk1_c */ -static BOOL daNpc_Kk1_Delete(daNpc_Kk1_c*) { - /* Nonmatching */ +static BOOL daNpc_Kk1_Delete(daNpc_Kk1_c* obj) { + (static_cast(obj))->_delete(); } /* 000066C4-000066E4 .text daNpc_Kk1_Execute__FP11daNpc_Kk1_c */ -static BOOL daNpc_Kk1_Execute(daNpc_Kk1_c*) { - /* Nonmatching */ +static BOOL daNpc_Kk1_Execute(daNpc_Kk1_c* obj) { + (static_cast(obj))->_execute(); } /* 000066E4-00006704 .text daNpc_Kk1_Draw__FP11daNpc_Kk1_c */ -static BOOL daNpc_Kk1_Draw(daNpc_Kk1_c*) { - /* Nonmatching */ +static BOOL daNpc_Kk1_Draw(daNpc_Kk1_c* obj) { + (static_cast(obj))->_draw(); } /* 00006704-0000670C .text daNpc_Kk1_IsDelete__FP11daNpc_Kk1_c */ static BOOL daNpc_Kk1_IsDelete(daNpc_Kk1_c*) { /* Nonmatching */ + return true; } static actor_method_class l_daNpc_Kk1_Method = { From 2c4a44999cd6bda131b38855b2f18a4c254f59da Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Sat, 17 May 2025 23:31:58 -0500 Subject: [PATCH 05/15] 28% text --- include/d/actor/d_a_npc_kk1.h | 118 ++-- src/d/actor/d_a_npc_kk1.cpp | 999 ++++++++++++++++++++++++++++------ 2 files changed, 913 insertions(+), 204 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index 48024512f..17f4e6d4c 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -1,6 +1,7 @@ #ifndef D_A_NPC_KK1_H #define D_A_NPC_KK1_H +#include "d/actor/d_a_player.h" #include "d/d_npc.h" #include "f_op/f_op_actor.h" @@ -46,37 +47,37 @@ public: bool partner_search_sub(void* (*)(void*, void*)); void partner_search(); void lookBack(); - void chkAttention(); + bool chkAttention(); void setAttention(bool); - void decideType(int); + BOOL decideType(int); void cut_init_RUN_START(int); - void cut_move_RUN_START(); + bool cut_move_RUN_START(); void cut_init_RUN(int); - void cut_move_RUN(); + bool cut_move_RUN(); void cut_init_CATCH_START(int); - void cut_move_CATCH_START(); + bool cut_move_CATCH_START(); void cut_init_CATCH_END(int); - void cut_move_CATCH_END(); + bool cut_move_CATCH_END(); void cut_init_TRN(int); - void cut_move_TRN(); + bool cut_move_TRN(); void cut_init_BYE_START(int); - void cut_move_BYE_START(); + bool cut_move_BYE_START(); void cut_init_BYE(int); - void cut_move_BYE(); + bool cut_move_BYE(); void cut_init_BYE_CONTINUE(int); - void cut_move_BYE_CONTINUE(); + bool cut_move_BYE_CONTINUE(); void cut_init_BYE_END(int); - void cut_move_BYE_END(); + bool cut_move_BYE_END(); void cut_init_PLYER_TRN(int); - void cut_move_PLYER_TRN(); + bool cut_move_PLYER_TRN(); void cut_init_OTOBOKE(int); - void cut_move_OTOBOKE(); + bool cut_move_OTOBOKE(); void cut_init_PLYER_MOV(int); - void cut_move_PLYER_MOV(); + bool cut_move_PLYER_MOV(); void cut_init_RUNAWAY_START(int); - void cut_move_RUNAWAY_START(); + bool cut_move_RUNAWAY_START(); void cut_init_RUNAWAY_END(int); - void cut_move_RUNAWAY_END(); + bool cut_move_RUNAWAY_END(); void privateCut(int); void endEvent(); void isEventEntry(); @@ -89,7 +90,7 @@ public: void startEvent_check(); void chkHitPlayer(); void set_pthPoint(unsigned char); - void event_move(bool); + bool event_move(bool); void kyoroPos(int); void kyorokyoro(); void chk_attn(); @@ -123,49 +124,100 @@ public: void CreateHeap(); public: - /* 0x6C4 */ u8 field_0x6C4[0x6FC - 0x6C4]; - /* 0x6FC*/ u32 field_0x6FC; - /* 0x700 */ u8 field_0x700[0x72C - 0x700]; + /* 0x6C4 */ f32 field_0x6C4; + /* 0x6C8 */ f32 field_0x6C8; + /* 0x6CC */ u16 field_0x6CC; + /* 0x6CE */ char mKkString; + /* 0x6CF */ u8 field_0xCF; + /* 0x6D6 */ u8 field_0x6C2[0x6FC - 0x6D0]; + /* 0x6FC*/ fpc_ProcID mPartnerProcID; + /* 0x700*/ u32 field_0x700; + /* 0x700*/ dNpc_PathRun_c mRunPath; + /* 0x704 */ u8 field_0x70C[0x72C - 0x70C]; /* 0x72C */ cXyz field_0x72C; /* 0x738 */ cXyz field_0x738; /* 0x744 */ u8 field_0x744[0x750 - 0x744]; /* 0x750 */ cXyz field_0x750; /* 0x75C */ u8 field_0x75C[0x770 - 0x75C]; - /* 0x770 */ s16 field_0x770; + /* 0x770 */ s16 mAngleY; /* 0x772 */ s16 field_0x772; /* 0x774 */ s16 field_0x774; - /* 0x776 */ u8 field_0x776[0x77C - 0x776]; + /* 0x776 */ s16 field_0x776; + /* 0x778 */ int field_0x778; /* 0x77C */ s16 field_0x77C[0x08]; //8 Elements * U16 = 16 bytes /* 0x78C */ s16 field_0x78C; //Array Index? - /* 0x78E */ s8 field_0x78D[0x7AE - 0x78E]; - /* 0x7AE */ u16 field_0x7AE; - /* 0x7B0 */ u8 field_0x7B0[0x7B4 - 0x7B0]; + /* 0x78E */ s8 field_0x78E[0x798 - 0x78E]; + /* 0x798 */ s16 field_0x798; + /* 0x79A */ s16 field_0x79A; + /* 0x79C */ s16 field_0x79C; + /* 0x79E */ s16 field_0x79E; + /* 0x7A0 */ s16 field_0x7A0; + + /* 0x7A2 */ s16 field_0x7A2; + + /* 0x7A4 */ s16 field_0x7A4; + + /* 0x7A6 */ s16 field_0x7A6; + + /* 0x7A8 */ s16 field_0x7A8; + + /* 0x7AA */ s16 field_0x7AA; + + /* 0x7AC */ s16 field_0x7AC; + /* 0x7AE */ s16 field_0x7AE; + /* 0x7B0 */ s16 field_0x7B0; + /* 0x7B2 */ s8 field_0x7B2; + /* 0x7B2 */ u8 field_0x7B3; /* 0x7B4 */ u8 field_0x7B4; - /* 0x7B5 */ u8 field_0x7B5[0x7B8 - 0x7B5]; + /* 0x7B5 */ u8 field_0x7B5; + /* 0x7B5 */ u8 field_0x7B6; + /* 0x7B5 */ u8 field_0x7B7[0x7B8 - 0x7B7]; /* 0x7B8 */ u8 field_0x7B8; /* 0x7B9 */ u8 field_0x7B9[0x7BA - 0x7B9]; /* 0x7BA */ u8 field_0x7BA; - /* 0x7BB */ u8 field_0x7BB[0x7C3 - 0x7BB]; + /* 0x7BB */ u8 field_0x7BB; + /* 0x7BC */ u8 field_0x7BC; + /* 0x7BD */ u8 field_0x7BD; + /* 0x7BE */ u8 field_0x7BE; + /* 0x7BF */ u8 field_0x7BF; + /* 0x7C0 */ u8 field_0x7C0; + /* 0x7C1 */ u8 field_0x7C1; + /* 0x7C2 */ u8 field_0x7C2; /* 0x7C3 */ u8 field_0x7C3; - /* 0x7C4 */ u8 field_0x7C4; - /* 0x7C5 */ u8 field_0x7C5[0x817 - 0x7C5]; + /* 0x7C4 */ bool field_0x7C4; + /* 0x7C5 */ u8 field_0x7C5[0x814 - 0x7C5]; + /* 0x814 */ s8 field_0x814; + /* 0x815 */ u8 field_0x815; + /* 0x816 */ s8 field_0x816; /* 0x817 */ u8 field_0x817; /* 0x818 */ u8 field_0x818; - /* 0x819 */ u8 field_0x819[0x81B - 0x819]; + /* 0x819 */ u8 field_0x819; + /* 0x81B */ s8 field_0x81A; /* 0x81B */ s8 field_0x81B; /* 0x81C */ u8 field_0x81C; /* 0x81D */ u8 field_0x81D; /* 0x81E */ u8 field_0x81E; - /* 0x81F */ u8 field_0x81F[0x820 - 0x81F]; - /* 0x820 */ u8 field_0x820; + /* 0x81F */ s8 field_0x81F; + /* 0x820 */ s8 field_0x820; /* 0x821 */ s8 field_0x821; }; // Size: 0x824 class daNpc_Kk1_HIO_c { public: daNpc_Kk1_HIO_c(); - + virtual ~daNpc_Kk1_HIO_c(); public: + /* 0x04 */ s8 mNo; + /* 0x08 */ f32 mHorizontalDistance; + /* 0x0C */ f32 mVerticalDistance; + /* 0x10 */ u8 mUnusedU8[0x1E - 0x10]; + /* 0x1E */ s16 field_0x1E; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ s16 field_0x30; + /* 0x32 */ s16 field_0x32; /* Place member variables here */ }; diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index 9e86189b2..4aadc4bf3 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -4,9 +4,13 @@ // #include "d/actor/d_a_npc_kk1.h" +#include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" +static daNpc_Kk1_HIO_c l_HIO; + + /* 000000EC-00000150 .text __ct__15daNpc_Kk1_HIO_cFv */ daNpc_Kk1_HIO_c::daNpc_Kk1_HIO_c() { /* Nonmatching */ @@ -90,6 +94,19 @@ void daNpc_Kk1_c::play_btp_anm() { /* 00000C80-00000CFC .text play_eff_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_eff_anm() { /* Nonmatching */ + char* fillerstr; + strcpy(fillerstr,"run_start"); + strcpy(fillerstr,"run_start_2"); + strcpy(fillerstr,"catch"); + strcpy(fillerstr,"get_empty_btl"); + strcpy(fillerstr,"bye"); + strcpy(fillerstr,"otoboke"); + strcpy(fillerstr,"runaway"); + strcpy(fillerstr,"bye_2"); + strcpy(fillerstr,"Kk1"); + strcpy(fillerstr,"d_a_npc_kk1.cpp"); + strcpy(fillerstr,"a_btp != 0"); + strcpy(fillerstr,"Halt"); } /* 00000CFC-00000DDC .text setAnm_anm__11daNpc_Kk1_cFPQ211daNpc_Kk1_c9anm_prm_c */ @@ -135,147 +152,305 @@ void daNpc_Kk1_c::setAnm_ATR() { /* 000010E4-000011A0 .text anmAtr__11daNpc_Kk1_cFUs */ void daNpc_Kk1_c::anmAtr(unsigned short) { /* Nonmatching */ + dComIfGp_getMesgAnimeAttrInfo(); + chngAnmAtr(1); + dComIfGp_getMesgAnimeTagInfo(); + dComIfGp_clearMesgAnimeTagInfo(); + chngAnmTag(); + ctrlAnmAtr(); + ctrlAnmTag(); + } /* 000011A0-0000149C .text next_msgStatus__11daNpc_Kk1_cFPUl */ u16 daNpc_Kk1_c::next_msgStatus(unsigned long* param_1) { - /* Nonmatching */ - u8 bVar1 = this->mpCurrMsg->mSelectNum; - u16 uVar2 = 0xf; - switch(*param_1) { - case 0x1c85: - *param_1 = 0x1c86; + + u8 temp_r3; + //u8 temp_r5_3; + u8 temp_r5_4; + + u16 var_r0 = 0xF; + switch (*param_1) { + case 0x1C85: + *param_1 = 0x1C86; break; - case 0x1c86: - *param_1 = 0x1ca7; + case 0x1C86: + *param_1 = 0x1CA7; break; - case 0x1c88: - *param_1 = 0x1c89; + case 0x1CA7: + *param_1 = 0x1CA8; break; - case 0x1c89: - *param_1 = 0x1c8a; + case 0x1C88: + *param_1 = 0x1C89; break; - case 0x1c8a: - *param_1 = 0x1ca9; + case 0x1C89: + *param_1 = 0x1C8A; break; - case 0x1c8b: - *param_1 = 0x1cac; - this->field_0x7B8 = 1; + case 0x1C8A: + *param_1 = 0x1CA9; break; - case 0x1c8d: - *param_1 = 0x1c8e; + case 0x1C8B: + *param_1 = 0x1CAC; + field_0x7B8 = 1; break; - case 0x1c8e: - *param_1 = 0x1c8f; + case 0x1C8D: + *param_1 = 0x1C8E; break; - case 0x1c8f: - if (bVar1 == 1) { - *param_1 = 0x1ca5; - field_0x7AE++; - } - else if (bVar1 == 0) { - *param_1 = 0x1c90; + case 0x1C8E: + *param_1 = 0x1C8F; + break; + case 0x1C8F: + switch (mpCurrMsg->mSelectNum) { + case 0: + *param_1 = 0x1C90; + break; + case 1: + *param_1 = 0x1CA5; + field_0x7AE += 1; + break; } break; - case 0x1c90: - *param_1 = 0x1c91; + case 0x1CA5: + *param_1 = 0x1C8F; break; - case 0x1c91: - if (bVar1 == 1) { - *param_1 = 0x1c92; - field_0x7AE++; - } - else if (bVar1 == 0) { - *param_1 = 0x1c93; + case 0x1C90: + *param_1 = 0x1C91; + break; + case 0x1C91: + switch (mpCurrMsg->mSelectNum) { + case 0: + *param_1 = 0x1C93; + break; + case 1: + *param_1 = 0x1C92; + field_0x7AE += 1; + break; } break; - case 0x1c92: - *param_1 = 0x1c91; + case 0x1C92: + *param_1 = 0x1C91; break; - case 0x1c93: - *param_1 = 0x1c94; + case 0x1C93: + *param_1 = 0x1C94; break; - case 0x1c94: - if (bVar1 == 1) { - *param_1 = 0x1c95; - field_0x7AE++; - } - else if (bVar1 == 0) { - *param_1 = 0x1c96; + case 0x1C94: + switch ((s32) mpCurrMsg->mSelectNum) { + case 0: + *param_1 = 0x1C96; + break; + case 1: + *param_1 = 0x1C95; + field_0x7AE += 1; + break; } break; - case 0x1c95: - *param_1 = 0x1c96; + case 0x1C95: + *param_1 = 0x1C96; break; - case 0x1c96: - *param_1 = 0x1c97; + case 0x1C96: + *param_1 = 0x1C97; break; - case 0x1c97: - if (bVar1 == 1) { - *param_1 = (this->field_0x7AE <= 1) ? (0x1C9B - 1 - (this->field_0x7AE >> 31)) - : (0x1C9B - 0 - (this->field_0x7AE >> 31)); - } - else if (bVar1 == 0) { - *param_1 = 0x1c98; + case 0x1C97: + + switch (mpCurrMsg->mSelectNum) { + case 0: + *param_1 = 0x1C98; + break; + case 1: + *param_1 = ((field_0x7AE > 1) ? 1 : 2)+0x1C99; } break; - case 0x1c98: - if (bVar1 == 1) { - uVar2 = 0x10; - } - else if (bVar1 == 0) { - *param_1 = 0x1c99; + case 0x1C98: + temp_r3 = mpCurrMsg->mSelectNum; + switch ((s32) temp_r3) { + case 0: + *param_1 = 0x1C99; + break; + case 1: + var_r0 = 0x10; + break; } break; - case 0x1c99: - if (bVar1 == 1) { - *param_1 = 0x1c9a; - } - else if (bVar1 == 0) { - int fieldValue = this->field_0x7AE; - uint temp = (fieldValue <= 1) ? 1 : 0; - *param_1 = (-temp) - (fieldValue >> 31) + 0x1C9D; + case 0x1C99: + switch (mpCurrMsg->mSelectNum) { + case 0: + *param_1 = ((field_0x7AE > 1) ? 1 : 2)+0x1C9B; + break; + case 1: + *param_1 = 0x1C9A; } break; - case 0x1c9b: - *param_1 = 0x1c9d; + case 0x1C9B: + *param_1 = 0x1C9D; break; - case 0x1c9d: - *param_1 = 0x1c9e; + case 0x1C9D: + *param_1 = 0x1C9E; break; - case 0x1c9e: - *param_1 = 0x1caa; + case 0x1C9E: + *param_1 = 0x1CAA; break; - case 0x1c9f: - uVar2 = 0x10; + case 0x1CAA: + *param_1 = 0x1C9F; break; - case 0x1ca1: - *param_1 = 0x1ca2; + case 0x1C9F: + var_r0 = 0x10; break; - case 0x1ca2: - *param_1 = 0x1ca3; + case 0x1CA1: + *param_1 = 0x1CA2; break; - case 0x1ca3: - *param_1 = 0x1ca4; + case 0x1CA2: + *param_1 = 0x1CA3; break; - case 0x1ca4: - *param_1 = 0x1cab; + case 0x1CA3: + *param_1 = 0x1CA4; break; - case 0x1ca5: - *param_1 = 0x1c8f; - break; - case 0x1ca7: - *param_1 = 0x1ca8; - break; - case 0x1caa: - *param_1 = 0x1c9f; + case 0x1CA4: + *param_1 = 0x1CAB; break; default: - uVar2 = 0x10; + var_r0 = 0x10; break; - } - return uVar2; + } + return var_r0; } +// /* Nonmatching */ +// u8 bVar1 = this->mpCurrMsg->mSelectNum; +// u16 uVar2 = 0xf; +// switch(*param_1) { +// case 0x1c85: +// *param_1 = 0x1c86; +// break; +// case 0x1c86: +// *param_1 = 0x1ca7; +// break; +// case 0x1c88: +// *param_1 = 0x1c89; +// break; +// case 0x1c89: +// *param_1 = 0x1c8a; +// break; +// case 0x1c8a: +// *param_1 = 0x1ca9; +// break; +// case 0x1c8b: +// *param_1 = 0x1cac; +// this->field_0x7B8 = 1; +// break; +// case 0x1c8d: +// *param_1 = 0x1c8e; +// break; +// case 0x1c8e: +// *param_1 = 0x1c8f; +// break; +// case 0x1c8f: +// if (bVar1 == 1) { +// *param_1 = 0x1ca5; +// field_0x7AE++; +// } +// else if (bVar1 == 0) { +// *param_1 = 0x1c90; +// } +// break; +// case 0x1c90: +// *param_1 = 0x1c91; +// break; +// case 0x1c91: +// if (bVar1 == 1) { +// *param_1 = 0x1c92; +// field_0x7AE++; +// } +// else if (bVar1 == 0) { +// *param_1 = 0x1c93; +// } +// break; +// case 0x1c92: +// *param_1 = 0x1c91; +// break; +// case 0x1c93: +// *param_1 = 0x1c94; +// break; +// case 0x1c94: +// *param_1 = 0x1c95; +// if (bVar1 == 1) { +// *param_1 = 0x1c96; +// field_0x7AE++; +// } + +// break; +// case 0x1c95: +// *param_1 = 0x1c96; +// break; +// case 0x1c96: +// *param_1 = 0x1c97; +// break; +// case 0x1c97: +// if (bVar1 == 1) { +// *param_1 = (this->field_0x7AE <= 1) ? (0x1C9B - 1 - (this->field_0x7AE >> 31)) +// : (0x1C9B - 0 - (this->field_0x7AE >> 31)); +// } +// else if (bVar1 == 0) { +// *param_1 = 0x1c98; +// } +// break; +// case 0x1c98: +// if (bVar1 == 1) { +// uVar2 = 0x10; +// } +// else if (bVar1 == 0) { +// *param_1 = 0x1c99; +// } +// break; +// case 0x1c99: +// if (bVar1 == 1) { +// *param_1 = 0x1c9a; +// } +// else if (bVar1 == 0) { +// int fieldValue = this->field_0x7AE; +// uint temp = (fieldValue <= 1) ? 1 : 0; +// *param_1 = (-temp) - (fieldValue >> 31) + 0x1C9D; +// } +// break; +// case 0x1c9b: +// *param_1 = 0x1c9d; +// break; +// case 0x1c9d: +// *param_1 = 0x1c9e; +// break; +// case 0x1c9e: +// *param_1 = 0x1caa; +// break; +// case 0x1c9f: +// uVar2 = 0x10; +// break; + + +// case 0x1ca5: +// *param_1 = 0x1c8f; +// break; +// case 0x1ca7: +// *param_1 = 0x1ca8; +// break; +// case 0x1caa: +// *param_1 = 0x1c9f; +// break; +// case 0x1ca1: +// *param_1 = 0x1ca2; +// break; +// case 0x1ca2: +// *param_1 = 0x1ca3; +// break; +// case 0x1ca3: +// *param_1 = 0x1ca4; +// break; +// case 0x1ca4: +// *param_1 = 0x1cab; +// break; +// default: +// uVar2 = 0x10; +// break; +// } +// return uVar2; +// } /* 0000149C-00001534 .text getMsg_KK1_0__11daNpc_Kk1_cFv */ u32 daNpc_Kk1_c::getMsg_KK1_0() { @@ -386,7 +561,7 @@ bool daNpc_Kk1_c::chk_parts_notMov() { bool retval = 0; if((field_0x772 != m_jnt.mAngles[0][1])|| (field_0x774 != m_jnt.mAngles[1][1])|| - (field_0x770 != current.angle.y)){ + (mAngleY != current.angle.y)){ retval = 1; } return retval; @@ -405,16 +580,17 @@ fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID param_1, int* param_2) { } -static u32 l_check_inf[0x14]; -#define SEARCH_PTR_FIELD (*(void**)(&l_check_inf[0])) -#define SEARCH_ID_FIELD (l_check_inf[1]) -static s32 l_check_wrk; + +#define L_CHECK_SZ 20 +s32 l_check_wrk; +fopAc_ac_c* l_check_inf[L_CHECK_SZ]; //static PartnerSearchResult l_check_inf; // Search results buffer /* 00001808-000018B8 .text partner_search_sub__11daNpc_Kk1_cFPFPvPv_Pv */ bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*, void*)) { - u32 uVar1; + + void* uVar1; bool retVal = false; - field_0x6FC = -1; + mPartnerProcID = -1; l_check_wrk = 0; for(int i = 0; i != 0x14; i++){ @@ -422,14 +598,7 @@ bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*, void*)) { } fpcEx_Search(param_1, this); if(l_check_wrk != 0){ - if(SEARCH_PTR_FIELD != 0){ - - uVar1 = l_check_inf[1]; - - }else{ - uVar1 = -1; - } - field_0x6FC = uVar1; + mPartnerProcID = fopAcM_GetID(l_check_inf[0]); retVal = 1; } @@ -458,187 +627,669 @@ void daNpc_Kk1_c::partner_search() { return; } +static f32 lookBackZero = 0.0; /* 00001924-00001B10 .text lookBack__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::lookBack() { - field_0x772 = m_jnt.mAngles[0][1]; - field_0x774 = m_jnt.mAngles[1][1]; - field_0x770 = current.angle.y; - volatile cXyz Vec1 = cXyz::Zero; - volatile cXyz* VecPtr1 = NULL; - volatile f32 targetY = current.angle.y; - /* Nonmatching */ - // 6] getHead_y__14dNpc_JntCtrl_cFv (func,weak) found in d_a_npc_kk1.o - // 6] getBackbone_y__14dNpc_JntCtrl_cFv (func,weak) found in d_a_npc_kk1.o - // >>> SYMBOL NOT FOUND: dNpc_playerEyePos__Ff - // 6] kyorokyoro__11daNpc_Kk1_cFv (func,global) found in d_a_npc_kk1.o + field_0x772 = m_jnt.getHead_y(); + field_0x774 = m_jnt.getBackbone_y(); + mAngleY = current.angle.y; + cXyz vec1; + cXyz vec2 = current.pos; + vec2.y = eyePos.y; + + vec1.setall(lookBackZero); + + int Int1; + fopAc_ac_c *pActor; + cXyz* vecPtr1 = NULL; + s16 targetY = current.angle.y; + s8 state = field_0x81E; + bool someBool = field_0x7C4; + switch(state){ + case 1: + field_0x738 = dNpc_playerEyePos(-20.0); + vec1 = field_0x738; + vecPtr1 = &vec1; + break; + case 2: + vec1 = field_0x738; + vecPtr1 = &vec1; + break; + case 3: + targetY = field_0x7AC; + break; + case 4: + if ((pActor = searchByID(field_0x700,&Int1),pActor != NULL) && Int1 == 0){ + field_0x738 = pActor->current.pos; + field_0x738.y = pActor->eyePos.y; + vec1 = field_0x738; + vecPtr1 = &vec1; + } + break; + case 5: + kyorokyoro(); + vec1 = field_0x738; + vecPtr1 = &vec1; + break; + } + m_jnt.lookAtTarget_2(¤t.angle.y,vecPtr1,vec2,targetY,l_HIO.field_0x1E,someBool); + return; - // } /* 00001B10-00001B90 .text chkAttention__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chkAttention() { - /* Nonmatching */ +bool daNpc_Kk1_c::chkAttention() { + fopAc_ac_c* npcPtr; + if((dComIfGp_getAttention().LockonTruth()) != 0){ + npcPtr = dComIfGp_getAttention().LockonTarget(0); + return this == npcPtr; + + }else{ + npcPtr = dComIfGp_getAttention().ActionTarget(0); + return this==npcPtr; //Need return in if and else to ensure correct asm. + } + + } /* 00001B90-00001BE8 .text setAttention__11daNpc_Kk1_cFb */ -void daNpc_Kk1_c::setAttention(bool) { +void daNpc_Kk1_c::setAttention(bool i_attn_flag) { /* Nonmatching */ + + f32 f1 = current.pos.z; + f32 f2 = current.pos.y + l_HIO.field_0x20; + f32 f3 = current.pos.x; + + attention_info.position.set(f3,f2,f1); + + + if((field_0x778 == 0) && !i_attn_flag){return;} + + f2 = field_0x72C.z; + f1 = field_0x72C.y; + + eyePos.set(field_0x72C.x,f1,f2); + } /* 00001BE8-00001C70 .text decideType__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::decideType(int) { - /* Nonmatching */ +BOOL daNpc_Kk1_c::decideType(int) { + BOOL ret; + if(field_0x81F > 0){ + ret = true; + } + else{ + field_0x81F = 1; + field_0x820 = 0; + strcpy(&mKkString,"Kk"); + ret = false; + if((field_0x81F != -1) && (field_0x820 != -1)){ + ret = true; + } + } + return ret; } /* 00001C70-00001D10 .text cut_init_RUN_START__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_RUN_START(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_RUN_START(int param_1) { + fopAc_ac_c* a_actor; + + int idArray[2]; + char* format; + a_actor = searchByID(mPartnerProcID,idArray); + if(a_actor == NULL){ + + JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0x54f,"a_actor != 0"); + OSPanic("d_a_npc_kk1.cpp",0x54f,"Halt"); + } + dComIfGp_event_setItemPartner(a_actor); + mRunPath.nextIdxAuto(); + return; + } /* 00001D10-00001DD0 .text cut_move_RUN_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUN_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_RUN_START() { + daPy_py_c* pdVar2; + daPy_lk_c* f; + cXyz runPoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + short target = cLib_targetAngleY(¤t.pos,&runPoint); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + if(current.angle.y == target){ + pdVar2 = g_dComIfG_gameInfo.play.mpPlayer[2]; + pdVar2->mDemo.setDemoType(2); + pdVar2->mDemo.setDemoMode(1); + return true; + } + return false; + + } /* 00001DD0-00001E58 .text cut_init_RUN__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_RUN(int) { +void daNpc_Kk1_c::cut_init_RUN(int param_1) { /* Nonmatching */ + s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); + field_0x798 = -1; + if(somePtr != NULL){ + field_0x798 = *somePtr; + } + setAnm_NUM(4,1); + field_0x7B6 = 1; + field_0x815 = 2; + field_0x816 = 0; + return; } /* 00001E58-00001EAC .text cut_move_RUN__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUN() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_RUN() { + bool r3 = this->event_move(0); + + if (this->field_0x798 < 0) { + return r3; + } + return cLib_calcTimer(&this->field_0x798) == 0; } /* 00001EAC-00001F08 .text cut_init_CATCH_START__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_CATCH_START(int) { /* Nonmatching */ + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + player->onPlayerNoDraw(); + setAnm_NUM(8,1); + mpMorf->setMorf(0.0); + } /* 00001F08-00001F2C .text cut_move_CATCH_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_CATCH_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_CATCH_START() { + if(field_0x7B2){ + field_0x778 = 0; + return true; + } + return false; } /* 00001F2C-00001FAC .text cut_init_CATCH_END__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_CATCH_END(int) { +void daNpc_Kk1_c::cut_init_CATCH_END(int param_1) { /* Nonmatching */ + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + player->offPlayerNoDraw(); + current.angle.y += 0x8000; + setAnm_NUM(0,1); + mpMorf->setMorf(0.0); + field_0x81E = 1; + field_0x7C4 = 0; + m_jnt.mbTrn = true; + return; + + } /* 00001FAC-00001FB4 .text cut_move_CATCH_END__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_CATCH_END() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_CATCH_END() { + return true; } +// const struct pathnodes{ +// double p1; +// double p2; +// } path = {0x2827262524232221,0x2223242526272829}; + /* 00001FB4-000022BC .text cut_init_TRN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_TRN(int) { - /* Nonmatching */ + if(field_0x816 != 5){ + u8 currentPoint = mRunPath.mCurrPointIndex; + if((currentPoint >= 0x19)&&(currentPoint <= 0x28)){ + u8 sp58[] = { + 0x28, 0x27, 0x26, 0x25, + 0x24, 0x23, 0x22, 0x21, + 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, + }; + + mRunPath.mCurrPointIndex = sp58[currentPoint-0x19]; + field_0x81E = 0; + field_0x7C4 = 1; + return; + } + mRunPath.setNearPathIndx(&dComIfGp_getLinkPlayer()->current.pos,100); + u8 linkPathIndex = mRunPath.mCurrPointIndex; + + mRunPath.setNearPathIndx(¤t.pos,100); + u8 muuruPathIndex = mRunPath.mCurrPointIndex; + s16 maxPoint = mRunPath.maxPoint(); + s16 midpointIndexFloat = maxPoint / 2.0f + 0.5f; + + if(muuruPathIndex > linkPathIndex){ + linkPathIndex += mRunPath.maxPoint(); + } + + s16 r26 = linkPathIndex - muuruPathIndex; + if(r26 > midpointIndexFloat){ + r26 -= maxPoint; + } + mRunPath.mCurrPointIndex = currentPoint; + bool bVar10 = false; + if (r26 == 0){ + cXyz muuruPoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + f32 muuruDistance = (current.pos - muuruPoint).absXZ(); + f32 linkDistance = (dComIfGp_getLinkPlayer()->current.pos - muuruPoint).absXZ(); + + bVar10 = (linkDistance < muuruDistance); + } + if(r26 > 0 || bVar10){ + mRunPath.decIdxAuto(); + mRunPath.decIdxAuto(); + mRunPath.mbGoingForwards = (mRunPath.mbGoingForwards ^ 1); + } + } + field_0x81E = 0; + field_0x7C4 = 1; } /* 000022BC-00002364 .text cut_move_TRN__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_TRN() { +bool daNpc_Kk1_c::cut_move_TRN() { + cXyz a = mRunPath.getPoint(mRunPath.mCurrPointIndex); + s16 target = cLib_targetAngleY(¤t.pos,&a); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + s16 sVar1 = current.angle.y; + if(sVar1 == target){ + shape_angle.y = sVar1; + return true; + } + return false; /* Nonmatching */ } /* 00002364-00002388 .text cut_init_BYE_START__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE_START(int) { /* Nonmatching */ + ((daPy_py_c*)dComIfGp_getLinkPlayer())->onPlayerNoDraw(); + field_0x7BB = 1; + return; } /* 00002388-00002390 .text cut_move_BYE_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_BYE_START() { + return true; } /* 00002390-00002490 .text cut_init_BYE__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE(int) { +void daNpc_Kk1_c::cut_init_BYE(int param_1) { /* Nonmatching */ + + s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); + s32* somePtr2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Delay",3); + s32* somePtr3 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"prm_0",3); + + field_0x798 = 0x1e; + + if(somePtr != NULL){ + field_0x798 = *somePtr; + } + field_0x79A = 0xffff; + if(somePtr2 != NULL){ + field_0x79A = *somePtr2; + } + field_0x7B0 = 0; + if(somePtr3 != NULL){ + field_0x7B0 = *somePtr3; + } + setAnm_NUM(4,1); + field_0x815 = 2; + field_0x7B6 = 1; + return; } /* 00002490-00002568 .text cut_move_BYE__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE() { +bool daNpc_Kk1_c::cut_move_BYE() { /* Nonmatching */ + + event_move(0); + if (field_0x79A > 0) { + if (cLib_calcTimer(&field_0x79A) == 0) { + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos,-0x3217); + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + player->mDemo.setDemoType(3); + player->mDemo.setParam0(0); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setDemoMode(9); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setParam0(0x3217); + } + } + if (cLib_calcTimer(&field_0x798) == 0) { + if (field_0x7B0 == 0) { + speedF = 0.0; + } + return true; + } + else { + return false; + } + } /* 00002568-000025C8 .text cut_init_BYE_CONTINUE__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int) { +void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int param_1) { + s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); + field_0x798 = 0x1E; + if(somePtr != NULL){ + field_0x798 = *somePtr; + } + + return; /* Nonmatching */ } /* 000025C8-00002620 .text cut_move_BYE_CONTINUE__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE_CONTINUE() { +bool daNpc_Kk1_c::cut_move_BYE_CONTINUE() { /* Nonmatching */ + this->event_move(0); + if (cLib_calcTimer(&this->field_0x798) == 0) { + speedF = 0.0; + return true; + } + return false; } /* 00002620-000026BC .text cut_init_BYE_END__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE_END(int) { /* Nonmatching */ + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); + s16 angle_y = cLib_targetAngleY(&((daPy_py_c*)dComIfGp_getLinkPlayer())->current.pos,¤t.pos); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos, angle_y); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); + field_0x7C0 = 1; } /* 000026BC-000026C4 .text cut_move_BYE_END__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_BYE_END() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_BYE_END() { + return 1; + } /* 000026C4-000026C8 .text cut_init_PLYER_TRN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_PLYER_TRN(int) { - /* Nonmatching */ + } /* 000026C8-000026D0 .text cut_move_PLYER_TRN__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_PLYER_TRN() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_PLYER_TRN() { + return true; } /* 000026D0-00002744 .text cut_init_OTOBOKE__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_OTOBOKE(int) { - /* Nonmatching */ + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(1); + player->changeOriginalDemo(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos, current.angle.y); + field_0x798 = 2; + //player->setPlayerPosAndAngle(dComIfGp_getPlayer(1),¤t.pos); + return; } /* 00002744-00002798 .text cut_move_OTOBOKE__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_OTOBOKE() { +bool daNpc_Kk1_c::cut_move_OTOBOKE() { + if ( cLib_calcTimer(&this->field_0x798) == 0) { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(1); + player->mDemo.setDemoType(2); + player->mDemo.setDemoMode(1); + return true; + } + return false; /* Nonmatching */ } /* 00002798-000028A4 .text cut_init_PLYER_MOV__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_PLYER_MOV(int) { - /* Nonmatching */ +void daNpc_Kk1_c::cut_init_PLYER_MOV(int param_1) { + + cXyz cStack_1c; + s16 sVar3 = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos); + sVar3 = sVar3 - current.angle.y; + //s16 sVar1; + if(abs(sVar3)>0x2000){ + dComIfGp_evmng_setGoal(&dComIfGp_getLinkPlayer()->current.pos); + }else{ + cXyz local_28; + local_28.setall(0.0); + s32 sVar1 = (s16)((sVar3>0)?0x2800:-0x2800); + int added = current.angle.y+sVar1; + mDoMtx_stack_c::transS(current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y+sVar1); + local_28.z = 150.0; + mDoMtx_stack_c::multVec(&local_28,&cStack_1c); + dComIfGp_evmng_setGoal(&cStack_1c);//&dComIfGp_getLinkPlayer()->current.pos); + } + return; } /* 000028A4-000028AC .text cut_move_PLYER_MOV__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_PLYER_MOV() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_PLYER_MOV() { + return true; + } /* 000028AC-00002A40 .text cut_init_RUNAWAY_START__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_RUNAWAY_START(int) { +void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { /* Nonmatching */ + + + + + s32* puVar2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); + //player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); + + short sVar4 = cLib_targetAngleY(&dComIfGp_getLinkPlayer()->current.pos,¤t.pos); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos,sVar4); + s16 r29=cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos); + shape_angle.y = r29 + 0x8000; + + + + field_0x7BF = 1; + speedF = 0.0; + m_jnt.mAngles[0][1] = 0; + m_jnt.mAngles[0][0] = 0; + m_jnt.mAngles[1][1] = 0; + m_jnt.mAngles[1][0] = 0; + field_0x81E = 0; + if (abs((s16)(r29 - current.angle.y)) > 0x3800) { + current.angle.y = r29 + 0x8000; + + setAnm_NUM(8,1); + + } + else { + + cXyz local_28; + local_28.set(0.0,-50.0,0.0); + + field_0x798 = 0x26; + if (puVar2 != NULL) { + field_0x798 = *puVar2; + } + current.angle.y = r29; + setAnm_NUM(0,1); + + setBikon(local_28); + } + return; } /* 00002A40-00002AD0 .text cut_move_RUNAWAY_START__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUNAWAY_START() { - /* Nonmatching */ +bool daNpc_Kk1_c::cut_move_RUNAWAY_START() { + if(field_0x81A == 8){ + if(field_0x7B2 != 0){ + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + current.angle.y = cLib_targetAngleY(¤t.pos,&player->current.pos); + setAnm_NUM(0,1); + mpMorf->setMorf(0.0); + return true; + }else{ + return false; + } + }else{ + return true; + } } /* 00002AD0-00002B08 .text cut_init_RUNAWAY_END__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_RUNAWAY_END(int) { /* Nonmatching */ + ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); + field_0x7B6 = 0; + speedF = 0.0; + field_0x7C0 = 1; + + return; } /* 00002B08-00002B10 .text cut_move_RUNAWAY_END__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cut_move_RUNAWAY_END() { +bool daNpc_Kk1_c::cut_move_RUNAWAY_END() { /* Nonmatching */ + return true; } /* 00002B10-00002D98 .text privateCut__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::privateCut(int) { - /* Nonmatching */ +void daNpc_Kk1_c::privateCut(int param_1) { + static char* cutsceneNames[14] = { + "RUN_START", + "RUN", + "CATCH_START", + "CATCH_END", + "TRN", + "BYE_START", + "BYE", + "BYE_END", + "PLYER_TRN", + "OTOBOKE", + "PLYER_MOV", + "RUNAWAY_START", + "RUNAWAY_END", + "BYE_CONTINUE", + + }; + int uVar2; + + bool uVar1; + + if (param_1 != -1) { + uVar2 = dComIfGp_evmng_getMyActIdx(param_1,cutsceneNames,0xe,1,0); + field_0x814 = uVar2; + if (field_0x814 == -1) { + dComIfGp_evmng_cutEnd(param_1); + } + else { + if (dComIfGp_evmng_getIsAddvance(param_1)) { + switch(this->field_0x814) { + case 0: + cut_init_RUN_START(param_1); + break; + case 1: + cut_init_RUN(param_1); + break; + case 2: + cut_init_CATCH_START(param_1); + break; + case 3: + cut_init_CATCH_END(param_1); + break; + case 4: + cut_init_TRN(param_1); + break; + case 5: + cut_init_BYE_START(param_1); + break; + case 6: + cut_init_BYE(param_1); + break; + case 7: + cut_init_BYE_END(param_1); + break; + case 8: + cut_init_PLYER_TRN(param_1); + break; + case 9: + cut_init_OTOBOKE(param_1); + break; + case 10: + cut_init_PLYER_MOV(param_1); + break; + case 0xb: + cut_init_RUNAWAY_START(param_1); + break; + case 0xc: + cut_init_RUNAWAY_END(param_1); + break; + case 0xd: + cut_init_BYE_CONTINUE(param_1); + } + } + switch(this->field_0x814) { + case 0: + uVar1 = cut_move_RUN_START(); + break; + case 1: + uVar1 = cut_move_RUN(); + break; + case 2: + uVar1 = cut_move_CATCH_START(); + break; + case 3: + uVar1 = cut_move_CATCH_END(); + break; + case 4: + uVar1 = cut_move_TRN(); + break; + case 5: + uVar1 = cut_move_BYE_START(); + break; + case 6: + uVar1 = cut_move_BYE(); + break; + case 7: + uVar1 = cut_move_BYE_END(); + break; + case 8: + uVar1 = cut_move_PLYER_TRN(); + break; + case 9: + uVar1 = cut_move_OTOBOKE(); + break; + case 10: + uVar1 = cut_move_PLYER_MOV(); + break; + case 0xb: + uVar1 = cut_move_RUNAWAY_START(); + break; + case 0xc: + uVar1 = cut_move_RUNAWAY_END(); + break; + case 0xd: + uVar1 = cut_move_BYE_CONTINUE(); + break; + default: + uVar1 = 1; + } + if ((uVar1 & 0xff) != 0) { + dComIfGp_evmng_cutEnd(param_1); + } + } + } + return; } /* 00002D98-00002DBC .text endEvent__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::endEvent() { - /* Nonmatching */ + dComIfGp_event_reset(); + field_0x817 = 0xff; + field_0x818 = 0xff; + return; } /* 00002DBC-00002DF4 .text isEventEntry__11daNpc_Kk1_cFv */ @@ -692,7 +1343,7 @@ void daNpc_Kk1_c::set_pthPoint(unsigned char) { } /* 000036A8-00003940 .text event_move__11daNpc_Kk1_cFb */ -void daNpc_Kk1_c::event_move(bool) { +bool daNpc_Kk1_c::event_move(bool) { /* Nonmatching */ } @@ -849,6 +1500,10 @@ void daNpc_Kk1_c::effcCreateHeap() { /* 000065E0-00006684 .text CreateHeap__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::CreateHeap() { /* Nonmatching */ + char* fillerstr; + strcpy(fillerstr,""); + + return; } /* 00006684-000066A4 .text daNpc_Kk1_Create__FP10fopAc_ac_c */ @@ -878,6 +1533,8 @@ static BOOL daNpc_Kk1_IsDelete(daNpc_Kk1_c*) { return true; } + + static actor_method_class l_daNpc_Kk1_Method = { (process_method_func)daNpc_Kk1_Create, (process_method_func)daNpc_Kk1_Delete, From c9d38baa2144fdde08159f67337ca0673862311b Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Mon, 19 May 2025 00:07:19 -0500 Subject: [PATCH 06/15] 41% text --- include/d/actor/d_a_npc_kk1.h | 100 +++-- src/d/actor/d_a_npc_kk1.cpp | 690 ++++++++++++++++++++++++---------- 2 files changed, 557 insertions(+), 233 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index 17f4e6d4c..7de6e6dd0 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -4,26 +4,34 @@ #include "d/actor/d_a_player.h" #include "d/d_npc.h" #include "f_op/f_op_actor.h" +#include "m_Do/m_Do_hostIO.h" class J3DNode; + + class daNpc_Kk1_c : public fopNpc_npc_c { public: struct anm_prm_c { - + s8 pad1; + s8 field_0x1; + f32 field_0x2; + u32 pad3; + u32 pad4; }; - void getSWbit() {} + int getSWbit(); void _nodeCB_Head(J3DNode*, J3DModel*); void _nodeCB_BackBone(J3DNode*, J3DModel*); - void init_KK1_0(); - void createInit(); + static void* searchActor_SWC00(void*, void*); //Todo: Self-added. Do I need this? + bool init_KK1_0(); + bool createInit(); void play_animation(); void setMtx(bool); - void bckResID(int); - void btpResID(int); - void setBtp(signed char, bool); + int bckResID(int); + int btpResID(int); + bool setBtp(signed char, bool); void init_texPttrnAnm(signed char, bool); void play_btp_anm(); void play_eff_anm(); @@ -112,7 +120,7 @@ public: void wait_3(); void wait_4(); void talk_1(); - void wait_action1(void*); + int wait_action1(void*); void demo(); void shadowDraw(); bool _draw(); @@ -127,30 +135,40 @@ public: /* 0x6C4 */ f32 field_0x6C4; /* 0x6C8 */ f32 field_0x6C8; /* 0x6CC */ u16 field_0x6CC; - /* 0x6CE */ char mKkString; - /* 0x6CF */ u8 field_0xCF; - /* 0x6D6 */ u8 field_0x6C2[0x6FC - 0x6D0]; + /* 0x6CE */ char mKkString; + /* 0x6CF */ u8 field_0x6CF; + /* 0x6D0 */ u8 field_0x6D0[0x6D8 - 0x6D0]; + /* 0x6D8 */ mDoExt_btpAnm mBtpAnm; + /* 0x6EC*/ u8 field_0x6EC; + /* 0x6ED*/ s8 field_0x6ED; + /* 0x6EE*/ s16 field_0x6EE; + /* 0x6F2*/ u8 field_0x6F2[0x6FC - 0x6F2]; /* 0x6FC*/ fpc_ProcID mPartnerProcID; /* 0x700*/ u32 field_0x700; - /* 0x700*/ dNpc_PathRun_c mRunPath; - /* 0x704 */ u8 field_0x70C[0x72C - 0x70C]; + /* 0x704*/ dNpc_PathRun_c mRunPath; + /* 0x70C */ u8 field_0x70C[0x71E - 0x70C]; + /* 0x71E */ csXyz field_0x71E; + /* 0x724 */ u8 field_0x724[0x72C - 0x724]; /* 0x72C */ cXyz field_0x72C; /* 0x738 */ cXyz field_0x738; /* 0x744 */ u8 field_0x744[0x750 - 0x744]; /* 0x750 */ cXyz field_0x750; - /* 0x75C */ u8 field_0x75C[0x770 - 0x75C]; + /* 0x75C */ cXyz field_0x75C; + /* 0x768 */ f32 field_0x768; + /* 0x76A */ u8 field_0x76A[4]; /* 0x770 */ s16 mAngleY; /* 0x772 */ s16 field_0x772; /* 0x774 */ s16 field_0x774; /* 0x776 */ s16 field_0x776; /* 0x778 */ int field_0x778; - /* 0x77C */ s16 field_0x77C[0x08]; //8 Elements * U16 = 16 bytes - /* 0x78C */ s16 field_0x78C; //Array Index? + /* 0x77C */ s16 mEvtIDTbl[0x08]; //8 Elements * U16 = 16 bytes + /* 0x78C */ s16 mEvtIDIdx; //Array Index? /* 0x78E */ s8 field_0x78E[0x798 - 0x78E]; /* 0x798 */ s16 field_0x798; /* 0x79A */ s16 field_0x79A; /* 0x79C */ s16 field_0x79C; - /* 0x79E */ s16 field_0x79E; + /* 0x79E */ s8 field_0x79E; + /* 0x79E */ s8 field_0x79F; /* 0x7A0 */ s16 field_0x7A0; /* 0x7A2 */ s16 field_0x7A2; @@ -185,32 +203,56 @@ public: /* 0x7C2 */ u8 field_0x7C2; /* 0x7C3 */ u8 field_0x7C3; /* 0x7C4 */ bool field_0x7C4; - /* 0x7C5 */ u8 field_0x7C5[0x814 - 0x7C5]; + /* 0x7C5 */ u8 field_0x7C5[0x7CE - 0x7C5]; + /* 0x7D0 */ anm_prm_c* field_0x7D0; + /* 0x7D4 */ u8 field_0x7D4[0x7E4 - 0x7D4]; + /* 0x7E4 */ u32 field_0x7E4[3]; //Appears to be a struct + /* 0x7E8 */ //u8 field_0x7E8[0x7F0 - 0x7E8]; + /* 0x7F0 */ mDoExt_bckAnm field_0x7F0; + /* 0x800 */ s16 field_0x800; + /* 0x802 */ s16 field_0x802; + /* 0x804 */ s16 field_0x804; + /* 0x806 */ u16 field_0x806; +//TODO: SOME KIND OF STRUCT HERE? + /* 0x808*/ u8 field_0x808_base[4]; //Offset 0 + /* 0x80C */ J3DModelData* field_0x80C; //Offset 4 + /* 0x810 */ u32 field_0x810; /* 0x814 */ s8 field_0x814; /* 0x815 */ u8 field_0x815; /* 0x816 */ s8 field_0x816; - /* 0x817 */ u8 field_0x817; + /* 0x817 */ u8 anm_prm_idx; /* 0x818 */ u8 field_0x818; - /* 0x819 */ u8 field_0x819; - /* 0x81B */ s8 field_0x81A; - /* 0x81B */ s8 field_0x81B; - /* 0x81C */ u8 field_0x81C; - /* 0x81D */ u8 field_0x81D; + /* 0x819 */ s8 field_0x819; + /* 0x81A */ s8 field_0x81A; + /* 0x81B */ s8 field_0x81B; + /* 0x81C */ u16 field_0x81C; /* 0x81E */ u8 field_0x81E; /* 0x81F */ s8 field_0x81F; /* 0x820 */ s8 field_0x820; /* 0x821 */ s8 field_0x821; + /* 0x822 */ s8 field_0x822; + /* 0x823 */ s8 field_0x823; + //TODO: Wtf out of class size? + // /* 0x824 */ u32 field_0x824; + // /* 0x828 */ u32 field_0x828; + // /* 0x82C */ u32 field_0x82C; + + + + }; // Size: 0x824 -class daNpc_Kk1_HIO_c { +class daNpc_Kk1_HIO_c : mDoHIO_entry_c{ public: daNpc_Kk1_HIO_c(); - virtual ~daNpc_Kk1_HIO_c(); + virtual ~daNpc_Kk1_HIO_c(){}; public: /* 0x04 */ s8 mNo; - /* 0x08 */ f32 mHorizontalDistance; - /* 0x0C */ f32 mVerticalDistance; - /* 0x10 */ u8 mUnusedU8[0x1E - 0x10]; + /* 0x08 */ s16 mHorizontalDistance; + /* 0x08 */ s32 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x10 */ u8 mUnusedU8; + /* 0x11 */ u8 field_0x11[0x1E - 0x11]; /* 0x1E */ s16 field_0x1E; /* 0x20 */ f32 field_0x20; /* 0x24 */ f32 field_0x24; diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index 4aadc4bf3..ed069270b 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -4,119 +4,430 @@ // #include "d/actor/d_a_npc_kk1.h" +#include "NMWException.h" #include "d/actor/d_a_player.h" +#include "d/actor/d_a_swc00.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" static daNpc_Kk1_HIO_c l_HIO; +inline int daNpc_Kk1_c::getSWbit() { + return this->field_0x7B5; +} + + /* 000000EC-00000150 .text __ct__15daNpc_Kk1_HIO_cFv */ daNpc_Kk1_HIO_c::daNpc_Kk1_HIO_c() { /* Nonmatching */ + static f32 a_prm_tbl[] = {350.0f,30.0f,0.0f}; + memcpy(&field_0xC,a_prm_tbl,0x54); + mNo = -1; + field_0xA = -1; + return; } + + + /* 00000198-000001E4 .text nodeCB_Head__FP7J3DNodei */ -static BOOL nodeCB_Head(J3DNode*, int) { +static BOOL nodeCB_Head(J3DNode* arg0, int arg1) { + daNpc_Kk1_c* temp_r3; + + if (arg1 == 0) { + temp_r3 = (daNpc_Kk1_c*)j3dSys.mModel->getUserArea(); + if (temp_r3 != NULL) { + temp_r3->_nodeCB_Head(arg0, j3dSys.mModel); + } + } + return 1; +} + +f32 stuffforhead[4]; +cXyz at4163; + +extern "C" void __dt__4cXyzFv(void* obj, s16 destoryFlag); +/* 000001E4-00000304 .text _nodeCB_Head__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ +void daNpc_Kk1_c::_nodeCB_Head(J3DNode* node, J3DModel* model) { + /* Nonmatching */ + + + static cXyz a_eye_pos_off = cXyz(14.0,18,0.0); + + + u16 joint_number = static_cast(node)->getJntNo(); + MTXCopy(model->getAnmMtx(joint_number), mDoMtx_stack_c::now); + mDoMtx_stack_c::multVecZero(&field_0x750); + mDoMtx_ZrotM(&stuffforhead, field_0x768); + MTXCopy(mDoMtx_stack_c::now, j3dSys.mCurrentMtx); + model->setAnmMtx(joint_number, mDoMtx_stack_c::now); /* Nonmatching */ } -/* 000001E4-00000304 .text _nodeCB_Head__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ -void daNpc_Kk1_c::_nodeCB_Head(J3DNode*, J3DModel*) { - /* Nonmatching */ -} /* 00000340-0000038C .text nodeCB_BackBone__FP7J3DNodei */ -static BOOL nodeCB_BackBone(J3DNode*, int) { +static BOOL nodeCB_BackBone(J3DNode *param_1, int param_2) { /* Nonmatching */ + if (param_2 == 0) { + J3DModel* model = (J3DModel*)j3dSys.mModel; + if ((J3DModel *)(j3dSys.mModel)->getUserArea() != (J3DModel *)0x0) { + ((daNpc_Kk1_c*)(model->getUserArea()))->_nodeCB_BackBone(param_1,model); + + } + } + return 1; } /* 0000038C-0000042C .text _nodeCB_BackBone__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ -void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode*, J3DModel*) { +void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode* node, J3DModel* model) { /* Nonmatching */ + u16 joint_number = static_cast(node)->getJntNo(); + MTXCopy(model->getAnmMtx(joint_number), mDoMtx_stack_c::now); + mDoMtx_stack_c::XrotM(this->m_jnt.getBackbone_y()); + mDoMtx_stack_c::ZrotM(-this->m_jnt.getBackbone_x()); + + MTXCopy(mDoMtx_stack_c::now, j3dSys.mCurrentMtx); + model->setAnmMtx(joint_number, mDoMtx_stack_c::now); } /* 0000042C-0000044C .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { +static void CheckCreateHeap(fopAc_ac_c* param_1) { /* Nonmatching */ + ((daNpc_Kk1_c*)param_1)->CreateHeap(); + + return; } +#define L_CHECK_SZ 20 +s32 l_check_wrk; +fopAc_ac_c* l_check_inf[L_CHECK_SZ]; + /* 0000044C-000004EC .text searchActor_SWC00__FPvPv */ -void* searchActor_SWC00(void*, void*) { - /* Nonmatching */ +void* searchActor_SWC00(void* i_swc, void* i_kk1) { + //TODO: I am the greatest programmer who has ever lived. + swc00_class* SwcAct = static_cast(i_swc); + daNpc_Kk1_c* Kk1Act = static_cast(i_kk1); + if ( + l_check_wrk < L_CHECK_SZ && fopAc_IsActor(SwcAct) && + fopAcM_GetName(SwcAct) == PROC_SWC00 && daSwc00_getType(SwcAct) == 0 && + daSwc00_getSw1No(SwcAct) == Kk1Act->getSWbit() + ){ + l_check_inf[l_check_wrk] = SwcAct; + l_check_wrk++; + } + return NULL; } - + +int (daNpc_Kk1_c::*actionptr)(void*); /* 000004EC-00000598 .text init_KK1_0__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::init_KK1_0() { +bool daNpc_Kk1_c::init_KK1_0() { /* Nonmatching */ + + bool uVar2; + int (daNpc_Kk1_c::*local_18)(void*); + s32 local_14; + void(*local_10)(void*); + + + if ((dComIfGs_isEventBit(0x2d01) != 0) && ((dKy_daynight_check() == 0) || (dComIfGs_isEventBit(0xe08) == 0))) { + + + set_action(&daNpc_Kk1_c::wait_action1,NULL); + uVar2 = 1; + return true; + } + else { + return false; + } + } +dCcD_SrcCyl dNpc_cyl_src; + + +char* l_evn_tbl[] = { + "run_start", "run_start_2", "catch", "get_empty_btl", + "bye", "otoboke", "runaway", "bye_2", +}; /* 00000598-000007B0 .text createInit__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::createInit() { +bool daNpc_Kk1_c::createInit() { /* Nonmatching */ + for (int i = 0; i < 8; ++i) { + mEvtIDTbl[i] = dComIfGp_evmng_getEventIdx(l_evn_tbl[i], 0xFF); + } + mEventCut.setActorInfo2("Kk1", this); + field_0x7B5 = base.mParameters >> 8; + + u8 params = base.mParameters >> 0x10; + if (params != 0xff) { + mRunPath.setInf(params, current.roomNo, true); + if (mRunPath.mPath != NULL) { + fopAcM_OffStatus(this, fopAcStts_NOCULLEXEC_e); + set_pthPoint(0); + } + else { + return FALSE; + } + } + if (mRunPath.mPath == NULL) { + return FALSE; + } + + attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; + + switch(field_0x820){ + case 0: + break; + } + + attention_info.distances[1] = 0xA9; + attention_info.distances[3] = 0xA9; + + gravity = -4.5f; + field_0x81A = 0xC; + + + bool control=0; + switch(field_0x820){ + case 0: + control = init_KK1_0(); + break; + default: + control = 0; + break; + } + if(control == 0){ + return false; + } + + + field_0x71E = current.angle; + shape_angle = field_0x71E; + mStts.Init(0xFF, 0xff, this); + mCyl.SetStts(&mStts); + mCyl.Set(dNpc_cyl_src); + mObjAcch.CrrPos(*dComIfG_Bgsp()); + play_animation(); + tevStr.mRoomNo = dComIfG_Bgsp()->GetRoomId(mObjAcch.m_gnd); + tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mObjAcch.m_gnd); + mpMorf->setMorf(0.0f); + setMtx(true); + return true; + + } /* 000007B0-00000918 .text play_animation__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_animation() { /* Nonmatching */ +// ~ 6] play_btp_anm__11daNpc_Kk1_cFv (func,global) found in d_a_npc_kk1.o +// ~ 6] ChkGroundHit__9dBgS_AcchFv (func,weak) found in d_a_npc_kk1.o +// >>> SYMBOL NOT FOUND: GetMtrlSndId__4dBgSFR13cBgS_PolyInfo +// ~ 6] fopAcM_GetRoomNo__FP10fopAc_ac_c (func,weak) found in d_a_npc_kk1.o +// >>> SYMBOL NOT FOUND: dComIfGp_getReverb__Fi +// >>> SYMBOL NOT FOUND: play__14mDoExt_McaMorfFP3VecUlSc +// ~ 6] getFrame__14mDoExt_McaMorfFv (func,weak) found in d_a_npc_kk1.o +// 7] getFrame__12J3DFrameCtrlCFv (func,weak) found in d_a_npc_kk1.o +// 6] checkFrame__14mDoExt_McaMorfFf (func,weak) found in d_a_npc_kk1.o + + + + + + + cXyz floatload; + u32 uVar5 = 0; + play_btp_anm(); + + //dBgS_Acch::ChkGroundHit(); + + if (mObjAcch.ChkGroundHit() != 0) { + uVar5 = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd); + } + + field_0x7B2 = mpMorf->play(&eyePos,uVar5,dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if(mpMorf->getFrame() < field_0x768){ + field_0x7B2 = 1; + } + + field_0x768 = mpMorf->getFrame(); + + switch(field_0x81A){ + case 8: + if (mpMorf->checkFrame(4.0) != 0) { + + floatload.set(0.0,-50.0,-15.0); + setBikon(floatload); + } + break; + case 9: + if (mpMorf->checkFrame(4.0) != 0) { + + floatload.set(0.0,-50.0,0.0); + setBikon(floatload); + } + break; + } + play_eff_anm(); + return; } /* 00000918-00000A98 .text setMtx__11daNpc_Kk1_cFb */ -void daNpc_Kk1_c::setMtx(bool) { +void daNpc_Kk1_c::setMtx(bool param_1) { /* Nonmatching */ + + J3DModel *pJVar1; + //TODO: Don't come back till you find out more about the struct at 0x808 + pJVar1 = mpMorf->mpModel; + pJVar1->setBaseScale(scale); + MtxP stackPtr = mDoMtx_stack_c::get(); + PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::ZXYrotM(field_0x71E); + ((J3DModel*)stackPtr)->setBaseTRMtx(mpMorf->mpModel->getBaseTRMtx()); + mpMorf->calc(); + volatile cXyz someFloat1; + someFloat1.x = 0.0; + someFloat1.y = -4.5; + someFloat1.z = 4.0; + //mDoExt_bckAnmRemove(mpMorf->mpModel->getModelData()); + field_0x7F0.entry((J3DModelData*)field_0x808_base[0x4],field_0x804); + PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); + mDoMtx_YrotM(mDoMtx_stack_c::get(),current.angle.y); + mDoMtx_stack_c::transM(someFloat1.x,someFloat1.y,someFloat1.z); + PSMTXCopy(mDoMtx_stack_c::get(),(MtxP)field_0x808_base[0x24]); //TODO: WRONG!!! + (void(*)(void))field_0x808_base[0x10]; + *(u32 *)(**(int **)(*(int *)(*(int *)&this->field_0x808_base + 4) + 0x2c) + 0x58) = 0; + + flwAse(); + setAttention(param_1); + return; } /* 00000A98-00000AAC .text bckResID__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::bckResID(int) { - /* Nonmatching */ -} +int daNpc_Kk1_c::bckResID(int param_1) { + static const u32 a_resID_tbl[] = {9,1}; + return a_resID_tbl[param_1]; +} +const u32 fillervars[] = { + 1,2,3,4,5,7,8, +0,0,0,0,0,0,0, +0,0,0, +}; /* 00000AAC-00000AC0 .text btpResID__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::btpResID(int) { +int daNpc_Kk1_c::btpResID(int param_1) { /* Nonmatching */ + static const u32 a_resID_tbl_2[] = {17}; + return a_resID_tbl_2[param_1]; } /* 00000AC0-00000BC4 .text setBtp__11daNpc_Kk1_cFScb */ -void daNpc_Kk1_c::setBtp(signed char, bool) { +bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { /* Nonmatching */ +{ + + J3DAnmTexPattern *pJVar1; + + J3DModel* pJVar5 = mpMorf->getModel(); + if (param_1 < 0) { + return false; + } + else { + + pJVar1 = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(&mKkString,btpResID(param_1)); + if (pJVar1 == 0) { + u32 uVar2 = JUTAssertion::getSDevice(); + JUTAssertion::showAssert(uVar2,"d_a_npc_kk1.cpp",0x234,"a_btp != 0"); + OSPanic("d_a_npc_kk1.cpp",0x234,"Halt"); + } + field_0x819 = param_1; + field_0x6EC = 0; + field_0x6EE = 0; + + + return mBtpAnm.init(pJVar5->getModelData(),pJVar1,1,0,1.0,0,-1,param_2,0) != 0; + } + +} } /* 00000BC4-00000BE4 .text init_texPttrnAnm__11daNpc_Kk1_cFScb */ -void daNpc_Kk1_c::init_texPttrnAnm(signed char, bool) { +void daNpc_Kk1_c::init_texPttrnAnm(signed char param_1, bool param_2) { /* Nonmatching */ + setBtp(param_1, param_2); + return; } /* 00000BE4-00000C80 .text play_btp_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_btp_anm() { /* Nonmatching */ + u8 uVar1; + + uVar1 = mBtpAnm.getBtpAnm()->getFrameMax();// getAnmTable()->mMaxFrame; + if ((field_0x819 != 0) || + (cLib_calcTimer(&field_0x6EE) == 0)) { + field_0x6EC = field_0x6EC + 1; + if (field_0x6EC >= uVar1) { + if (field_0x819 != 0) { + field_0x6EC = (char)uVar1; + return; + + } + else { + field_0x6EE = cLib_getRndValue(0x3c,0x5a); + field_0x6EC = 0; + } + } + } + return; } /* 00000C80-00000CFC .text play_eff_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_eff_anm() { /* Nonmatching */ - char* fillerstr; - strcpy(fillerstr,"run_start"); - strcpy(fillerstr,"run_start_2"); - strcpy(fillerstr,"catch"); - strcpy(fillerstr,"get_empty_btl"); - strcpy(fillerstr,"bye"); - strcpy(fillerstr,"otoboke"); - strcpy(fillerstr,"runaway"); - strcpy(fillerstr,"bye_2"); - strcpy(fillerstr,"Kk1"); - strcpy(fillerstr,"d_a_npc_kk1.cpp"); - strcpy(fillerstr,"a_btp != 0"); - strcpy(fillerstr,"Halt"); + + s32 sVar1; + field_0x800 += 1; + if(field_0x800 >= 0x1E){ + field_0x800 = 0x1D; + } + sVar1 = field_0x7E4[2]; //TODO: Struct Shenaniganry + field_0x802 += 1; + if(sVar1 < field_0x802){ + field_0x802 = sVar1 - 1; + } + sVar1 = (int)field_0x7F0.getBckAnm() + 6; //TODO: Ditto + field_0x804 += 1; + if(sVar1 < field_0x804){ + field_0x804 = 0x3B; + } + return; + + + } /* 00000CFC-00000DDC .text setAnm_anm__11daNpc_Kk1_cFPQ211daNpc_Kk1_c9anm_prm_c */ -void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c*) { +void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* param_1) { /* Nonmatching */ + //if(((char)*param_1 > -1)&&(field_0x7CE != param_1)){} + } + +struct anmstruct { + u16 pad1; + + f32 field_0x1; + f32 field_0x2; + u32 pad3; + u32 pad2[0xC]; +}; /* 00000DDC-00000E4C .text setAnm_NUM__11daNpc_Kk1_cFii */ -void daNpc_Kk1_c::setAnm_NUM(int, int) { +void daNpc_Kk1_c::setAnm_NUM(int param_1, int param_2) { /* Nonmatching */ + } /* 00000E4C-00000EB8 .text setAnm__11daNpc_Kk1_cFv */ @@ -135,8 +446,9 @@ void daNpc_Kk1_c::ctrlAnmTag() { } /* 00000EC0-00000FA0 .text chngAnmAtr__11daNpc_Kk1_cFUc */ -void daNpc_Kk1_c::chngAnmAtr(unsigned char) { +void daNpc_Kk1_c::chngAnmAtr(unsigned char param_1) { /* Nonmatching */ + } /* 00000FA0-00001080 .text ctrlAnmAtr__11daNpc_Kk1_cFv */ @@ -147,16 +459,57 @@ void daNpc_Kk1_c::ctrlAnmAtr() { /* 00001080-000010E4 .text setAnm_ATR__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::setAnm_ATR() { /* Nonmatching */ + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl[13] = { +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, +{0x00,0x00,0x00,0x00}, + + }; + init_texPttrnAnm(a_anm_prm_tbl[anm_prm_idx].field_0x1,true); + setAnm_anm(((daNpc_Kk1_c::anm_prm_c *)(&a_anm_prm_tbl[anm_prm_idx]))); + return; } /* 000010E4-000011A0 .text anmAtr__11daNpc_Kk1_cFUs */ -void daNpc_Kk1_c::anmAtr(unsigned short) { +void daNpc_Kk1_c::anmAtr(unsigned short param_1) { /* Nonmatching */ - dComIfGp_getMesgAnimeAttrInfo(); - chngAnmAtr(1); - dComIfGp_getMesgAnimeTagInfo(); - dComIfGp_clearMesgAnimeTagInfo(); - chngAnmTag(); + // dComIfGp_getMesgAnimeAttrInfo(); + // chngAnmAtr(1); + // dComIfGp_getMesgAnimeTagInfo(); + // dComIfGp_clearMesgAnimeTagInfo(); + // chngAnmTag(); + // ctrlAnmAtr(); + // ctrlAnmTag(); + u8 uVar1; + switch(param_1){ + case 6: + + if (field_0x822 == 0) { + chngAnmAtr(dComIfGp_getMesgAnimeAttrInfo()); + field_0x822 += 1; + } + uVar1 = dComIfGp_getMesgAnimeTagInfo(); + if (( uVar1 != 0xFF) && + (uVar1 != field_0x818)) { + dComIfGp_clearMesgAnimeTagInfo(); + field_0x818 = uVar1; + chngAnmTag(); + } + break; + case 14: + field_0x822 = 0; + break; + } ctrlAnmAtr(); ctrlAnmTag(); @@ -313,149 +666,11 @@ u16 daNpc_Kk1_c::next_msgStatus(unsigned long* param_1) { } return var_r0; } -// /* Nonmatching */ -// u8 bVar1 = this->mpCurrMsg->mSelectNum; -// u16 uVar2 = 0xf; -// switch(*param_1) { -// case 0x1c85: -// *param_1 = 0x1c86; -// break; -// case 0x1c86: -// *param_1 = 0x1ca7; -// break; -// case 0x1c88: -// *param_1 = 0x1c89; -// break; -// case 0x1c89: -// *param_1 = 0x1c8a; -// break; -// case 0x1c8a: -// *param_1 = 0x1ca9; -// break; -// case 0x1c8b: -// *param_1 = 0x1cac; -// this->field_0x7B8 = 1; -// break; -// case 0x1c8d: -// *param_1 = 0x1c8e; -// break; -// case 0x1c8e: -// *param_1 = 0x1c8f; -// break; -// case 0x1c8f: -// if (bVar1 == 1) { -// *param_1 = 0x1ca5; -// field_0x7AE++; -// } -// else if (bVar1 == 0) { -// *param_1 = 0x1c90; -// } -// break; -// case 0x1c90: -// *param_1 = 0x1c91; -// break; -// case 0x1c91: -// if (bVar1 == 1) { -// *param_1 = 0x1c92; -// field_0x7AE++; -// } -// else if (bVar1 == 0) { -// *param_1 = 0x1c93; -// } -// break; -// case 0x1c92: -// *param_1 = 0x1c91; -// break; -// case 0x1c93: -// *param_1 = 0x1c94; -// break; -// case 0x1c94: -// *param_1 = 0x1c95; -// if (bVar1 == 1) { -// *param_1 = 0x1c96; -// field_0x7AE++; -// } - -// break; -// case 0x1c95: -// *param_1 = 0x1c96; -// break; -// case 0x1c96: -// *param_1 = 0x1c97; -// break; -// case 0x1c97: -// if (bVar1 == 1) { -// *param_1 = (this->field_0x7AE <= 1) ? (0x1C9B - 1 - (this->field_0x7AE >> 31)) -// : (0x1C9B - 0 - (this->field_0x7AE >> 31)); -// } -// else if (bVar1 == 0) { -// *param_1 = 0x1c98; -// } -// break; -// case 0x1c98: -// if (bVar1 == 1) { -// uVar2 = 0x10; -// } -// else if (bVar1 == 0) { -// *param_1 = 0x1c99; -// } -// break; -// case 0x1c99: -// if (bVar1 == 1) { -// *param_1 = 0x1c9a; -// } -// else if (bVar1 == 0) { -// int fieldValue = this->field_0x7AE; -// uint temp = (fieldValue <= 1) ? 1 : 0; -// *param_1 = (-temp) - (fieldValue >> 31) + 0x1C9D; -// } -// break; -// case 0x1c9b: -// *param_1 = 0x1c9d; -// break; -// case 0x1c9d: -// *param_1 = 0x1c9e; -// break; -// case 0x1c9e: -// *param_1 = 0x1caa; -// break; -// case 0x1c9f: -// uVar2 = 0x10; -// break; - - -// case 0x1ca5: -// *param_1 = 0x1c8f; -// break; -// case 0x1ca7: -// *param_1 = 0x1ca8; -// break; -// case 0x1caa: -// *param_1 = 0x1c9f; -// break; -// case 0x1ca1: -// *param_1 = 0x1ca2; -// break; -// case 0x1ca2: -// *param_1 = 0x1ca3; -// break; -// case 0x1ca3: -// *param_1 = 0x1ca4; -// break; -// case 0x1ca4: -// *param_1 = 0x1cab; -// break; -// default: -// uVar2 = 0x10; -// break; -// } -// return uVar2; -// } /* 0000149C-00001534 .text getMsg_KK1_0__11daNpc_Kk1_cFv */ u32 daNpc_Kk1_c::getMsg_KK1_0() { - if (dKy_daynight_check() == 1) { + if (dKy_daynight_check() == 1) { //If Night if (field_0x7BA != 0) { field_0x7BA = 0; @@ -465,7 +680,7 @@ u32 daNpc_Kk1_c::getMsg_KK1_0() { return 0x1c8b; } } - else { + else { //If Day if (dComIfGs_isEventBit(0xe08) == 0) { if(dComIfGs_isEventBit(0xe10)){ return 0x1C87; @@ -477,7 +692,6 @@ u32 daNpc_Kk1_c::getMsg_KK1_0() { return 0x1c85; } } - //I'm the goat } /* 00001534-00001570 .text getMsg__11daNpc_Kk1_cFv */ @@ -496,24 +710,23 @@ void daNpc_Kk1_c::eventOrder() { /* Nonmatching */ char cVar1 = field_0x81B; if ((cVar1 == '\x01') || (cVar1 == '\x02')) { - // this->eventInfo.mCondition |= dEvtCnd_CANTALK_e; eventInfo.onCondition(dEvtCnd_CANTALK_e); - if(field_0x81B == '\x01'){ + if(field_0x81B == '\x01'){ //1 = Speaking? fopAcM_orderSpeakEvent(this); } }else if (cVar1 >= 0x03){ - field_0x78C = (cVar1 - 3); - fopAcM_orderOtherEventId(this,field_0x77C[field_0x78C],0x00ff,0xffff,0,1); + mEvtIDIdx = (cVar1 - 3); + fopAcM_orderOtherEventId(this,mEvtIDTbl[mEvtIDIdx],0x00ff,0xffff,0,1); } - //fopAcM_orderOtherEventId(this,(&field_0x77C + 2*field_0x78C),) + //fopAcM_orderOtherEventId(this,(&evt_id_tbl + 2*mEvtIDIdx),) } /* 000015FC-000016DC .text checkOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::checkOrder() { /* Nonmatching */ if(eventInfo.checkCommandDemoAccrpt()){ - if(dComIfGp_evmng_startCheck(field_0x77C[field_0x78C]) && (s8)field_0x81B >= 0x03){ - switch(field_0x78C){ + if(dComIfGp_evmng_startCheck(mEvtIDTbl[mEvtIDIdx]) && (s8)field_0x81B >= 0x03){ + switch(mEvtIDIdx){ case 4: setAnm_NUM(0,1); break; @@ -524,7 +737,7 @@ void daNpc_Kk1_c::checkOrder() { } field_0x81B = 0; - field_0x817 = 0xFF; + anm_prm_idx = 0xFF; field_0x818 = 0xFF; }; @@ -581,9 +794,7 @@ fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID param_1, int* param_2) { -#define L_CHECK_SZ 20 -s32 l_check_wrk; -fopAc_ac_c* l_check_inf[L_CHECK_SZ]; + //static PartnerSearchResult l_check_inf; // Search results buffer /* 00001808-000018B8 .text partner_search_sub__11daNpc_Kk1_cFPFPvPv_Pv */ bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*, void*)) { @@ -832,10 +1043,6 @@ bool daNpc_Kk1_c::cut_move_CATCH_END() { return true; } -// const struct pathnodes{ -// double p1; -// double p2; -// } path = {0x2827262524232221,0x2223242526272829}; /* 00001FB4-000022BC .text cut_init_TRN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_TRN(int) { @@ -1287,24 +1494,101 @@ void daNpc_Kk1_c::privateCut(int param_1) { /* 00002D98-00002DBC .text endEvent__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::endEvent() { dComIfGp_event_reset(); - field_0x817 = 0xff; + anm_prm_idx = 0xff; field_0x818 = 0xff; return; } /* 00002DBC-00002DF4 .text isEventEntry__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::isEventEntry() { - /* Nonmatching */ + dComIfGp_evmng_getMyStaffId(mEventCut.getActorName(),NULL,0); + return; } /* 00002DF4-00002F80 .text event_proc__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::event_proc(int) { +void daNpc_Kk1_c::event_proc(int param_1) { /* Nonmatching */ + + + if (dComIfGp_evmng_endCheck(mEvtIDTbl[mEvtIDIdx])) { + s16 idx = mEvtIDIdx; + + + switch(idx){ + case 0: + case 1: + setStt(5); + break; + case 2: + + eventInfo.mEventId = -1; + switch(mCurrMsgNo) { + case 0x1c99: + case 0x1c9b: + case 0x1c9d: + case 0x1c9e: + break; + case 0x1c9a: + this->field_0x81B = 10; + this->field_0x81E = 0; + this->field_0x7C4 = 1; + break; + case 0x1c98: + case 0x1c9c: + this->field_0x81B = 7; + this->field_0x81E = 1; + this->field_0x7C4 = 1; + break; + case 0x1c9f: + setStt(6); + this->field_0x81B = 6; + this->field_0x81E = 0; + this->field_0x7C4 = 1; + break; + } + break; + + case 3: + + + field_0x81B = 1; + dComIfGs_onEventBit(0xE08); + field_0x7BA = 1; + break; + + case 4: + case 6: + case 7: + fopAcM_delete(this); + break; + case 5: + break; + + + } + endEvent(); + return; + } + if(mEventCut.cutProc() == 0){ + privateCut(param_1); + } } /* 00002F80-00002FB8 .text checkCommandTalk__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::checkCommandTalk() { /* Nonmatching */ + + bool retval = false; + + + if (eventInfo.checkCommandTalk()){ + retval = true; + if((field_0x816 == 5)&&(field_0x7A4 != 0)){ + retval = false; + } + } + return retval; + } /* 00002FB8-00003064 .text set_action__11daNpc_Kk1_cFM11daNpc_Kk1_cFPCvPvPv_iPv */ @@ -1453,7 +1737,7 @@ void daNpc_Kk1_c::talk_1() { } /* 000052B4-000053F4 .text wait_action1__11daNpc_Kk1_cFPv */ -void daNpc_Kk1_c::wait_action1(void*) { +int daNpc_Kk1_c::wait_action1(void*) { /* Nonmatching */ } @@ -1500,8 +1784,6 @@ void daNpc_Kk1_c::effcCreateHeap() { /* 000065E0-00006684 .text CreateHeap__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::CreateHeap() { /* Nonmatching */ - char* fillerstr; - strcpy(fillerstr,""); return; } From 20de5d926e69f68c81aead9d915bb838f7e2b4b4 Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Thu, 22 May 2025 00:34:26 -0500 Subject: [PATCH 07/15] 65% text --- include/d/actor/d_a_npc_kk1.h | 149 +++-- src/d/actor/d_a_npc_kk1.cpp | 1032 ++++++++++++++++++++++++--------- 2 files changed, 865 insertions(+), 316 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index 7de6e6dd0..3eb22423d 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -6,25 +6,63 @@ #include "f_op/f_op_actor.h" #include "m_Do/m_Do_hostIO.h" + class J3DNode; +static void* searchActor_SWC00(void*, void*); + class daNpc_Kk1_c : public fopNpc_npc_c { + public: + + typedef int (daNpc_Kk1_c::*ActionFunc)(void*); + typedef void* (pFunc)(void*, void*); struct anm_prm_c { - s8 pad1; - s8 field_0x1; - f32 field_0x2; - u32 pad3; - u32 pad4; + s8 field0; + s8 field1; + u16 field2; + f32 field4; + f32 field8; + u32 fieldC; }; + struct prm_tbl { + u32 field_0x00; + u32 field_0x04; + u32 field_0x08; + u32 field_0x0C; + u32 field_0x10; + f32 field_0x14; + u32 field_0x18; + u32 field_0x1C; + u32 field_0x20; + u32 field_0x24; + f32 field_0x28; + f32 field_0x2C; + u32 field_0x30; + f32 field_0x34; + f32 field_0x38; + f32 field_0x3C; + u32 field_0x40; + f32 field_0x44; + f32 field_0x48; + u32 field_0x4C; + f32 field_0x50; + }; + // struct struct_0x7E4{ + // /* 0x0 */ u16 unk0; + // /* 0x2 */ u16 unk2; + // /* 0x4 */ u16 unk4; + // /* 0x6 */ u16 unk6; + // /* 0x8 */ u16 unk8; + // /* 0xA */ u16 unkA; + // }; int getSWbit(); void _nodeCB_Head(J3DNode*, J3DModel*); void _nodeCB_BackBone(J3DNode*, J3DModel*); - static void* searchActor_SWC00(void*, void*); //Todo: Self-added. Do I need this? bool init_KK1_0(); bool createInit(); void play_animation(); @@ -52,7 +90,7 @@ public: bool chk_talk(); bool chk_parts_notMov(); fopAc_ac_c* searchByID(fpc_ProcID, int*); - bool partner_search_sub(void* (*)(void*, void*)); + bool partner_search_sub(pFunc*); void partner_search(); void lookBack(); bool chkAttention(); @@ -91,24 +129,24 @@ public: void isEventEntry(); void event_proc(int); bool checkCommandTalk(); - void set_action(int (daNpc_Kk1_c::*)(void*), void*); + bool set_action(ActionFunc, void*); void setStt(signed char); void createTama(float); - void chk_areaIN(float, cXyz); - void startEvent_check(); - void chkHitPlayer(); + u32 chk_areaIN(float, cXyz); + bool startEvent_check(); + bool chkHitPlayer(); void set_pthPoint(unsigned char); bool event_move(bool); - void kyoroPos(int); - void kyorokyoro(); - void chk_attn(); + cXyz kyoroPos(int); + bool kyorokyoro(); + bool chk_attn(); void setBikon(cXyz); void delBikon(); void setAse(); void flwAse(); void delAse(); - void wait_1(); - void walk_1(); + bool wait_1(); + bool walk_1(); void wait_2(); void init_CMT_WAI(); void move_CMT_WAI(); @@ -132,21 +170,24 @@ public: void CreateHeap(); public: - /* 0x6C4 */ f32 field_0x6C4; - /* 0x6C8 */ f32 field_0x6C8; - /* 0x6CC */ u16 field_0x6CC; - /* 0x6CE */ char mKkString; + + /* 0x6C4 */ request_of_phase_process_class field_0x6C4; + /* 0x6CC */ s8 mAnmMtxIdx; + /* 0x6CD */ s8 field_0x6CD; //ui bodyCreateHeap + /* 0x6CE */ char mArcName; /* 0x6CF */ u8 field_0x6CF; /* 0x6D0 */ u8 field_0x6D0[0x6D8 - 0x6D0]; /* 0x6D8 */ mDoExt_btpAnm mBtpAnm; /* 0x6EC*/ u8 field_0x6EC; /* 0x6ED*/ s8 field_0x6ED; /* 0x6EE*/ s16 field_0x6EE; - /* 0x6F2*/ u8 field_0x6F2[0x6FC - 0x6F2]; + /* 0x6F0*/ ActionFunc field_0x6F0; /* 0x6FC*/ fpc_ProcID mPartnerProcID; /* 0x700*/ u32 field_0x700; /* 0x704*/ dNpc_PathRun_c mRunPath; - /* 0x70C */ u8 field_0x70C[0x71E - 0x70C]; + /* 0x70C */ u8 field_0x70C[0x71A - 0x70C]; + /* 0x71A */ s16 field_0x71A; + /* 0x71C */ s16 field_0x71C; /* 0x71E */ csXyz field_0x71E; /* 0x724 */ u8 field_0x724[0x72C - 0x724]; /* 0x72C */ cXyz field_0x72C; @@ -163,7 +204,10 @@ public: /* 0x778 */ int field_0x778; /* 0x77C */ s16 mEvtIDTbl[0x08]; //8 Elements * U16 = 16 bytes /* 0x78C */ s16 mEvtIDIdx; //Array Index? - /* 0x78E */ s8 field_0x78E[0x798 - 0x78E]; + /* 0x78E */ s8 field_0x78E[0x792 - 0x78E]; + /* 0x792 */ s16 field_0x792; + /* 0x794 */ s16 field_0x794; + /* 0x796 */ s16 field_0x796; /* 0x798 */ s16 field_0x798; /* 0x79A */ s16 field_0x79A; /* 0x79C */ s16 field_0x79C; @@ -189,9 +233,9 @@ public: /* 0x7B4 */ u8 field_0x7B4; /* 0x7B5 */ u8 field_0x7B5; /* 0x7B5 */ u8 field_0x7B6; - /* 0x7B5 */ u8 field_0x7B7[0x7B8 - 0x7B7]; + /* 0x7B5 */ u8 field_0x7B7; /* 0x7B8 */ u8 field_0x7B8; - /* 0x7B9 */ u8 field_0x7B9[0x7BA - 0x7B9]; + /* 0x7B9 */ u8 field_0x7B9; /* 0x7BA */ u8 field_0x7BA; /* 0x7BB */ u8 field_0x7BB; /* 0x7BC */ u8 field_0x7BC; @@ -203,42 +247,39 @@ public: /* 0x7C2 */ u8 field_0x7C2; /* 0x7C3 */ u8 field_0x7C3; /* 0x7C4 */ bool field_0x7C4; - /* 0x7C5 */ u8 field_0x7C5[0x7CE - 0x7C5]; + /* 0x7C5 */ u8 field_0x7C5[0x7CF - 0x7C5]; + /* 0x7CF */ u8 field_0x7CF; /* 0x7D0 */ anm_prm_c* field_0x7D0; - /* 0x7D4 */ u8 field_0x7D4[0x7E4 - 0x7D4]; - /* 0x7E4 */ u32 field_0x7E4[3]; //Appears to be a struct - /* 0x7E8 */ //u8 field_0x7E8[0x7F0 - 0x7E8]; + /* 0x7D4 */ u8 field_0x7D4[0x7DC - 0x7D4]; + // /* 0x7E4 */ s16* field_0x7E4; //Appears to be a struct + // /* 0x7E8 */ u8 field_0x7E8[0x7F0 - 0x7E8]; + mDoExt_btkAnm field_0x7DC; /* 0x7F0 */ mDoExt_bckAnm field_0x7F0; /* 0x800 */ s16 field_0x800; /* 0x802 */ s16 field_0x802; /* 0x804 */ s16 field_0x804; /* 0x806 */ u16 field_0x806; //TODO: SOME KIND OF STRUCT HERE? - /* 0x808*/ u8 field_0x808_base[4]; //Offset 0 - /* 0x80C */ J3DModelData* field_0x80C; //Offset 4 - /* 0x810 */ u32 field_0x810; - /* 0x814 */ s8 field_0x814; - /* 0x815 */ u8 field_0x815; + /* 0x808*/ J3DModel* field_0x808; //Offset 0 + /* 0x80C */ //J3DModelData* field_0x80C; //Offset 4 + u8 field_0x80C[0x810-0x80C]; + /* 0x810 */ JPABaseEmitter* field_0x810; + /* 0x814 */ s8 mCutsceneIndex; + /* 0x815 */ s8 field_0x815; /* 0x816 */ s8 field_0x816; - /* 0x817 */ u8 anm_prm_idx; + /* 0x817 */ u8 mAnimationNum; /* 0x818 */ u8 field_0x818; /* 0x819 */ s8 field_0x819; /* 0x81A */ s8 field_0x81A; /* 0x81B */ s8 field_0x81B; - /* 0x81C */ u16 field_0x81C; + /* 0x81C */ s8 field_0x81C; + /* 0x81D */ u8 field_0x81D; /* 0x81E */ u8 field_0x81E; /* 0x81F */ s8 field_0x81F; /* 0x820 */ s8 field_0x820; /* 0x821 */ s8 field_0x821; /* 0x822 */ s8 field_0x822; /* 0x823 */ s8 field_0x823; - //TODO: Wtf out of class size? - // /* 0x824 */ u32 field_0x824; - // /* 0x828 */ u32 field_0x828; - // /* 0x82C */ u32 field_0x82C; - - - }; // Size: 0x824 @@ -251,16 +292,30 @@ public: /* 0x08 */ s16 mHorizontalDistance; /* 0x08 */ s32 field_0xA; /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; /* 0x10 */ u8 mUnusedU8; /* 0x11 */ u8 field_0x11[0x1E - 0x11]; /* 0x1E */ s16 field_0x1E; /* 0x20 */ f32 field_0x20; /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2C; - /* 0x30 */ s16 field_0x30; + /* 0x28 */ s16 field_0x28; + /* 0x28 */ s16 field_0x2A; + /* 0x2C */ s16 field_0x2C; + /* 0x2C */ s16 field_0x2E; + /* 0x30 */ s16 field_0x30; //TODO: Struct /* 0x32 */ s16 field_0x32; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + ///* 0x44 */ s16 field_0x46; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; /* Place member variables here */ }; - #endif /* D_A_NPC_KK1_H */ diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index ed069270b..468f7644c 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -4,14 +4,26 @@ // #include "d/actor/d_a_npc_kk1.h" -#include "NMWException.h" +#include "SSystem/SComponent/c_counter.h" +#include "d/actor/d_a_obj_roten.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_swc00.h" +#include "d/actor/d_a_tama.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" +#include "d/d_s_play.h" + + + + static daNpc_Kk1_HIO_c l_HIO; +#define L_CHECK_SZ 20 +fopAc_ac_c* l_check_inf[L_CHECK_SZ]; +s32 l_check_wrk; + + inline int daNpc_Kk1_c::getSWbit() { return this->field_0x7B5; } @@ -20,15 +32,20 @@ inline int daNpc_Kk1_c::getSWbit() { /* 000000EC-00000150 .text __ct__15daNpc_Kk1_HIO_cFv */ daNpc_Kk1_HIO_c::daNpc_Kk1_HIO_c() { - /* Nonmatching */ - static f32 a_prm_tbl[] = {350.0f,30.0f,0.0f}; + + static daNpc_Kk1_c::prm_tbl a_prm_tbl[] = {0x2000251C, 0xE002DAE4, 0x00002AF8, 0x0000D508, 0x064004B0, 150.0, 0x000000D2, 0x0028005A, +0x001E0014, 0x00041000, 40.0, 3.0, 0x3E4CCCCD, 0.5, 13.0, 1.0, +0x3DCCCCCD, 10.0, 1.0, 0x3E4CCCCD, 1000.0}; memcpy(&field_0xC,a_prm_tbl,0x54); mNo = -1; field_0xA = -1; return; } - +char* l_evn_tbl[] = { + "run_start", "run_start_2", "catch", "get_empty_btl", + "bye", "otoboke", "runaway", "bye_2", +}; /* 00000198-000001E4 .text nodeCB_Head__FP7J3DNodei */ @@ -44,31 +61,26 @@ static BOOL nodeCB_Head(J3DNode* arg0, int arg1) { return 1; } -f32 stuffforhead[4]; -cXyz at4163; - -extern "C" void __dt__4cXyzFv(void* obj, s16 destoryFlag); /* 000001E4-00000304 .text _nodeCB_Head__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ void daNpc_Kk1_c::_nodeCB_Head(J3DNode* node, J3DModel* model) { - /* Nonmatching */ + /* Nonmatching */ //.bss Misallocated? - - static cXyz a_eye_pos_off = cXyz(14.0,18,0.0); - - - u16 joint_number = static_cast(node)->getJntNo(); - MTXCopy(model->getAnmMtx(joint_number), mDoMtx_stack_c::now); + static cXyz a_eye_pos_off(14.0f,18.0f,0.0f); + u16 joint_number = ((J3DJoint*)(node))->getJntNo(); + mDoMtx_stack_c::copy(model->getAnmMtx(joint_number)); mDoMtx_stack_c::multVecZero(&field_0x750); - mDoMtx_ZrotM(&stuffforhead, field_0x768); - MTXCopy(mDoMtx_stack_c::now, j3dSys.mCurrentMtx); + mDoMtx_stack_c::multVec(&a_eye_pos_off,&field_0x72C); + mDoMtx_stack_c::XrotM(m_jnt.getHead_y()); + mDoMtx_stack_c::ZrotM(-m_jnt.getHead_x()); + cMtx_copy(mDoMtx_stack_c::get(),j3dSys.mCurrentMtx); model->setAnmMtx(joint_number, mDoMtx_stack_c::now); - /* Nonmatching */ + } /* 00000340-0000038C .text nodeCB_BackBone__FP7J3DNodei */ static BOOL nodeCB_BackBone(J3DNode *param_1, int param_2) { - /* Nonmatching */ + if (param_2 == 0) { J3DModel* model = (J3DModel*)j3dSys.mModel; if ((J3DModel *)(j3dSys.mModel)->getUserArea() != (J3DModel *)0x0) { @@ -81,7 +93,6 @@ static BOOL nodeCB_BackBone(J3DNode *param_1, int param_2) { /* 0000038C-0000042C .text _nodeCB_BackBone__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode* node, J3DModel* model) { - /* Nonmatching */ u16 joint_number = static_cast(node)->getJntNo(); MTXCopy(model->getAnmMtx(joint_number), mDoMtx_stack_c::now); mDoMtx_stack_c::XrotM(this->m_jnt.getBackbone_y()); @@ -93,19 +104,16 @@ void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode* node, J3DModel* model) { /* 0000042C-0000044C .text CheckCreateHeap__FP10fopAc_ac_c */ static void CheckCreateHeap(fopAc_ac_c* param_1) { - /* Nonmatching */ - ((daNpc_Kk1_c*)param_1)->CreateHeap(); + ((daNpc_Kk1_c*)param_1)->CreateHeap(); return; + } -#define L_CHECK_SZ 20 -s32 l_check_wrk; -fopAc_ac_c* l_check_inf[L_CHECK_SZ]; + /* 0000044C-000004EC .text searchActor_SWC00__FPvPv */ void* searchActor_SWC00(void* i_swc, void* i_kk1) { - //TODO: I am the greatest programmer who has ever lived. swc00_class* SwcAct = static_cast(i_swc); daNpc_Kk1_c* Kk1Act = static_cast(i_kk1); if ( @@ -119,20 +127,16 @@ void* searchActor_SWC00(void* i_swc, void* i_kk1) { return NULL; } -int (daNpc_Kk1_c::*actionptr)(void*); + /* 000004EC-00000598 .text init_KK1_0__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::init_KK1_0() { - /* Nonmatching */ bool uVar2; - int (daNpc_Kk1_c::*local_18)(void*); - s32 local_14; - void(*local_10)(void*); + if ((dComIfGs_isEventBit(0x2d01) != 0) && ((dKy_daynight_check() == 0) || (dComIfGs_isEventBit(0xe08) == 0))) { - set_action(&daNpc_Kk1_c::wait_action1,NULL); uVar2 = 1; return true; @@ -143,16 +147,15 @@ bool daNpc_Kk1_c::init_KK1_0() { } -dCcD_SrcCyl dNpc_cyl_src; -char* l_evn_tbl[] = { - "run_start", "run_start_2", "catch", "get_empty_btl", - "bye", "otoboke", "runaway", "bye_2", -}; + + +extern dCcD_SrcCyl dNpc_cyl_src; + /* 00000598-000007B0 .text createInit__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::createInit() { - /* Nonmatching */ + for (int i = 0; i < 8; ++i) { mEvtIDTbl[i] = dComIfGp_evmng_getEventIdx(l_evn_tbl[i], 0xFF); } @@ -173,7 +176,7 @@ bool daNpc_Kk1_c::createInit() { if (mRunPath.mPath == NULL) { return FALSE; } - + attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; switch(field_0x820){ @@ -220,27 +223,11 @@ bool daNpc_Kk1_c::createInit() { /* 000007B0-00000918 .text play_animation__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_animation() { - /* Nonmatching */ -// ~ 6] play_btp_anm__11daNpc_Kk1_cFv (func,global) found in d_a_npc_kk1.o -// ~ 6] ChkGroundHit__9dBgS_AcchFv (func,weak) found in d_a_npc_kk1.o -// >>> SYMBOL NOT FOUND: GetMtrlSndId__4dBgSFR13cBgS_PolyInfo -// ~ 6] fopAcM_GetRoomNo__FP10fopAc_ac_c (func,weak) found in d_a_npc_kk1.o -// >>> SYMBOL NOT FOUND: dComIfGp_getReverb__Fi -// >>> SYMBOL NOT FOUND: play__14mDoExt_McaMorfFP3VecUlSc -// ~ 6] getFrame__14mDoExt_McaMorfFv (func,weak) found in d_a_npc_kk1.o -// 7] getFrame__12J3DFrameCtrlCFv (func,weak) found in d_a_npc_kk1.o -// 6] checkFrame__14mDoExt_McaMorfFf (func,weak) found in d_a_npc_kk1.o - - - - - cXyz floatload; u32 uVar5 = 0; play_btp_anm(); - //dBgS_Acch::ChkGroundHit(); if (mObjAcch.ChkGroundHit() != 0) { uVar5 = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd); @@ -275,67 +262,52 @@ void daNpc_Kk1_c::play_animation() { /* 00000918-00000A98 .text setMtx__11daNpc_Kk1_cFb */ void daNpc_Kk1_c::setMtx(bool param_1) { - /* Nonmatching */ - J3DModel *pJVar1; - //TODO: Don't come back till you find out more about the struct at 0x808 - pJVar1 = mpMorf->mpModel; - pJVar1->setBaseScale(scale); - MtxP stackPtr = mDoMtx_stack_c::get(); + mpMorf->mpModel->setBaseScale(scale); PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); mDoMtx_stack_c::ZXYrotM(field_0x71E); - ((J3DModel*)stackPtr)->setBaseTRMtx(mpMorf->mpModel->getBaseTRMtx()); + mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); mpMorf->calc(); - volatile cXyz someFloat1; - someFloat1.x = 0.0; - someFloat1.y = -4.5; - someFloat1.z = 4.0; - //mDoExt_bckAnmRemove(mpMorf->mpModel->getModelData()); - field_0x7F0.entry((J3DModelData*)field_0x808_base[0x4],field_0x804); + cXyz someFloat1(0.0,120.0,30.0); + field_0x7F0.entry(field_0x808->getModelData(),field_0x804); PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); - mDoMtx_YrotM(mDoMtx_stack_c::get(),current.angle.y); + mDoMtx_stack_c::YrotM(current.angle.y); mDoMtx_stack_c::transM(someFloat1.x,someFloat1.y,someFloat1.z); - PSMTXCopy(mDoMtx_stack_c::get(),(MtxP)field_0x808_base[0x24]); //TODO: WRONG!!! - (void(*)(void))field_0x808_base[0x10]; - *(u32 *)(**(int **)(*(int *)(*(int *)&this->field_0x808_base + 4) + 0x2c) + 0x58) = 0; - flwAse(); - setAttention(param_1); - return; + field_0x808->setBaseTRMtx(mDoMtx_stack_c::get()); + + (field_0x808->calc)(); + mDoExt_bckAnmRemove(field_0x808->getModelData()); + flwAse(); + setAttention(param_1); + return; } /* 00000A98-00000AAC .text bckResID__11daNpc_Kk1_cFi */ int daNpc_Kk1_c::bckResID(int param_1) { - static const u32 a_resID_tbl[] = {9,1}; + static const u32 a_resID_tbl[] = {9,10,11,12,4,5,6,7,1,2,3,8}; return a_resID_tbl[param_1]; } -const u32 fillervars[] = { - 1,2,3,4,5,7,8, -0,0,0,0,0,0,0, -0,0,0, -}; + /* 00000AAC-00000AC0 .text btpResID__11daNpc_Kk1_cFi */ int daNpc_Kk1_c::btpResID(int param_1) { - /* Nonmatching */ + static const u32 a_resID_tbl_2[] = {17}; return a_resID_tbl_2[param_1]; } /* 00000AC0-00000BC4 .text setBtp__11daNpc_Kk1_cFScb */ bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { - /* Nonmatching */ -{ - J3DAnmTexPattern *pJVar1; - + J3DAnmTexPattern *pJVar1; J3DModel* pJVar5 = mpMorf->getModel(); if (param_1 < 0) { return false; } else { - pJVar1 = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(&mKkString,btpResID(param_1)); + pJVar1 = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(&mArcName,btpResID(param_1)); if (pJVar1 == 0) { u32 uVar2 = JUTAssertion::getSDevice(); JUTAssertion::showAssert(uVar2,"d_a_npc_kk1.cpp",0x234,"a_btp != 0"); @@ -344,26 +316,21 @@ bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { field_0x819 = param_1; field_0x6EC = 0; field_0x6EE = 0; - - return mBtpAnm.init(pJVar5->getModelData(),pJVar1,1,0,1.0,0,-1,param_2,0) != 0; } } -} /* 00000BC4-00000BE4 .text init_texPttrnAnm__11daNpc_Kk1_cFScb */ void daNpc_Kk1_c::init_texPttrnAnm(signed char param_1, bool param_2) { - /* Nonmatching */ setBtp(param_1, param_2); return; } /* 00000BE4-00000C80 .text play_btp_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_btp_anm() { - /* Nonmatching */ + u8 uVar1; - uVar1 = mBtpAnm.getBtpAnm()->getFrameMax();// getAnmTable()->mMaxFrame; if ((field_0x819 != 0) || (cLib_calcTimer(&field_0x6EE) == 0)) { @@ -385,24 +352,25 @@ void daNpc_Kk1_c::play_btp_anm() { /* 00000C80-00000CFC .text play_eff_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_eff_anm() { - /* Nonmatching */ - s32 sVar1; - field_0x800 += 1; - if(field_0x800 >= 0x1E){ - field_0x800 = 0x1D; - } - sVar1 = field_0x7E4[2]; //TODO: Struct Shenaniganry - field_0x802 += 1; - if(sVar1 < field_0x802){ - field_0x802 = sVar1 - 1; - } - sVar1 = (int)field_0x7F0.getBckAnm() + 6; //TODO: Ditto - field_0x804 += 1; - if(sVar1 < field_0x804){ - field_0x804 = 0x3B; - } - return; + s16 temp_r5; + field_0x800 += 1; + if(field_0x800 >= 0x1E){ + field_0x800 = 0x1D; + } + temp_r5 = (short)field_0x7DC.getBtkAnm()->getFrameMax(); //TODO: It seems like the short cast is required here. + field_0x802 += 1; + + + if(field_0x802 >= temp_r5){ + field_0x802 = temp_r5 - 1; + } + temp_r5 = (short)field_0x7F0.getBckAnm()->getFrameMax(); + field_0x804 += 1; + if(field_0x804 >= temp_r5){ + field_0x804 = 0x3B; + } + return; @@ -410,86 +378,186 @@ void daNpc_Kk1_c::play_eff_anm() { /* 00000CFC-00000DDC .text setAnm_anm__11daNpc_Kk1_cFPQ211daNpc_Kk1_c9anm_prm_c */ void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* param_1) { - /* Nonmatching */ - //if(((char)*param_1 > -1)&&(field_0x7CE != param_1)){} + + if (param_1->field0 < 0 || field_0x81A == param_1->field0) { + return; + } + + dNpc_setAnmIDRes(mpMorf,param_1->fieldC,param_1->field4,param_1->field8,bckResID(param_1->field0),0xFFFFFFFF,&mArcName); + field_0x81A = param_1->field0; + delBikon(); + delAse(); + field_0x7BE = 1; + switch(field_0x81A){ + case 1: + setAse(); + field_0x804 = 0; + field_0x802 = 0; + field_0x800 = 0; + field_0x7BE = 0; + break; + } + this->field_0x7B2 = 0; + this->field_0x7B3 = 0; + this->field_0x768 = 0.0; + + + + + + } -struct anmstruct { - u16 pad1; - - f32 field_0x1; - f32 field_0x2; - u32 pad3; - u32 pad2[0xC]; -}; + + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tblNUM[14] = { + {0,0,0,8.0,1.0,2}, + {1,0,0,8.0,1.0,2}, + {2,0,0,8.0,1.0,2}, + {3,0,0,8.0,1.0,2}, + {4,0,0,8.0,1.0,2}, + {5,0,0,8.0,1.0,2}, + {6,0,0,8.0,1.0,2}, + {7,0,0,8.0,1.0,2}, + {8,0,0,8.0,1.0,0}, + {9,0,0,8.0,1.0,0}, + {10,0,0,8.0,1.0,0}, + {11,0,0,8.0,1.0,0}, + {0,0,0,0.0,0.0,0}, + {0,0,0,0.0,0.0,0}, + + }; + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl2[8] = { +0xFF,0xFF,0000, 0.0, 0.0, 0xFFFFFFFF, +0x00,00,0000, 8.0, 1.0, 0x00000002, +0xFF,0xFF,0000, 0.0, 0.0, 0xFFFFFFFF, +0x03,00,0000, 8.0, 1.0, 0x00000002, +0x00,00,0000, 8.0, 1.0, 0x00000002, +0xFF,0xFF,0000, 0.0, 0.0, 0xFFFFFFFF, +0x00,00,0000, 8.0, 1.0, 0x00000002, +0x00,00,0000, 8.0, 1.0, 0x00000002, + + }; + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl3[14] = { + {5,0,0,8.0,1.0,2}, + {1,0,0,8.0,1.0,2}, + {2,0,0,8.0,1.0,2}, + {3,0,0,8.0,1.0,2}, + {4,0,0,8.0,1.0,2}, + {5,0,0,8.0,1.0,2}, + {6,0,0,8.0,1.0,2}, + {7,0,0,8.0,1.0,2}, +8,00,0000, 8.0, 1.0, 0, +9,00,0000, 8.0, 1.0, 0, +10,00,0000, 8.0, 1.0, 0, +10,00,0000, 8.0, 1.0, 0, +11,00,0000, 8.0, 1.0, 0, + + + }; + + /* 00000DDC-00000E4C .text setAnm_NUM__11daNpc_Kk1_cFii */ void daNpc_Kk1_c::setAnm_NUM(int param_1, int param_2) { - /* Nonmatching */ + + if (param_2 != 0) { + init_texPttrnAnm(a_anm_prm_tblNUM[param_1].field1,true); + } + setAnm_anm(&a_anm_prm_tblNUM[param_1]); + return; + } /* 00000E4C-00000EB8 .text setAnm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::setAnm() { - /* Nonmatching */ + + init_texPttrnAnm(a_anm_prm_tbl2[field_0x81C].field1,true); + setAnm_anm(&a_anm_prm_tbl2[field_0x81C]); + return; + } /* 00000EB8-00000EBC .text chngAnmTag__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::chngAnmTag() { - /* Nonmatching */ + return; } /* 00000EBC-00000EC0 .text ctrlAnmTag__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::ctrlAnmTag() { - /* Nonmatching */ + return; } /* 00000EC0-00000FA0 .text chngAnmAtr__11daNpc_Kk1_cFUc */ void daNpc_Kk1_c::chngAnmAtr(unsigned char param_1) { - /* Nonmatching */ + fopAc_ac_c* iVar1; + int local_18[4]; + switch(mCurrMsgNo){ + case 0x1CAC: + iVar1 = searchByID(mPartnerProcID,local_18); + if(iVar1 != 0 && local_18[0] == 0){ + field_0x738 = iVar1->current.pos; + field_0x738.y += l_HIO.field_0x20 + 200.0f; + field_0x81E = 2; + field_0x7C4 = 1; + field_0x7A2 = l_HIO.field_0x2E; + } + break; + } + if((param_1 == mAnimationNum) || (param_1 > 0xD)){ + return; + } + + mAnimationNum = param_1; + setAnm_ATR(); + + return; } /* 00000FA0-00001080 .text ctrlAnmAtr__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::ctrlAnmAtr() { - /* Nonmatching */ + + switch(mAnimationNum){ + case 8: + if ((field_0x7B2 != '\0')) { + current.angle.y += 0x8000; + setAnm_NUM(0,1); + mpMorf->setMorf(0.0); + mAnimationNum = 0; + } + case 9: + case 12: + return; + case 11: + if (this->field_0x7B2 != '\0') { + setAnm_NUM(6,1); + this->mAnimationNum = 6; + return; + } + break; + case 10: + if(field_0x7B2 != 0){ + setAnm_NUM(0,1); + mAnimationNum = 0; + } + + break; + } } /* 00001080-000010E4 .text setAnm_ATR__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::setAnm_ATR() { - /* Nonmatching */ - static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl[13] = { -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, -{0x00,0x00,0x00,0x00}, - }; - init_texPttrnAnm(a_anm_prm_tbl[anm_prm_idx].field_0x1,true); - setAnm_anm(((daNpc_Kk1_c::anm_prm_c *)(&a_anm_prm_tbl[anm_prm_idx]))); + init_texPttrnAnm(a_anm_prm_tbl3[mAnimationNum].field1,true); + setAnm_anm(((daNpc_Kk1_c::anm_prm_c *)(&a_anm_prm_tbl3[mAnimationNum]))); return; } /* 000010E4-000011A0 .text anmAtr__11daNpc_Kk1_cFUs */ void daNpc_Kk1_c::anmAtr(unsigned short param_1) { - /* Nonmatching */ - // dComIfGp_getMesgAnimeAttrInfo(); - // chngAnmAtr(1); - // dComIfGp_getMesgAnimeTagInfo(); - // dComIfGp_clearMesgAnimeTagInfo(); - // chngAnmTag(); - // ctrlAnmAtr(); - // ctrlAnmTag(); + u8 uVar1; switch(param_1){ case 6: @@ -519,11 +587,9 @@ void daNpc_Kk1_c::anmAtr(unsigned short param_1) { u16 daNpc_Kk1_c::next_msgStatus(unsigned long* param_1) { u8 temp_r3; - //u8 temp_r5_3; - u8 temp_r5_4; u16 var_r0 = 0xF; - switch (*param_1) { + switch (*param_1) { //TODO: Make Enum. case 0x1C85: *param_1 = 0x1C86; break; @@ -707,7 +773,6 @@ u32 daNpc_Kk1_c::getMsg() { /* 00001570-000015FC .text eventOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::eventOrder() { - /* Nonmatching */ char cVar1 = field_0x81B; if ((cVar1 == '\x01') || (cVar1 == '\x02')) { eventInfo.onCondition(dEvtCnd_CANTALK_e); @@ -719,11 +784,10 @@ void daNpc_Kk1_c::eventOrder() { fopAcM_orderOtherEventId(this,mEvtIDTbl[mEvtIDIdx],0x00ff,0xffff,0,1); } - //fopAcM_orderOtherEventId(this,(&evt_id_tbl + 2*mEvtIDIdx),) } /* 000015FC-000016DC .text checkOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::checkOrder() { - /* Nonmatching */ + if(eventInfo.checkCommandDemoAccrpt()){ if(dComIfGp_evmng_startCheck(mEvtIDTbl[mEvtIDIdx]) && (s8)field_0x81B >= 0x03){ switch(mEvtIDIdx){ @@ -737,7 +801,7 @@ void daNpc_Kk1_c::checkOrder() { } field_0x81B = 0; - anm_prm_idx = 0xFF; + mAnimationNum = 0xFF; field_0x818 = 0xFF; }; @@ -795,11 +859,9 @@ fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID param_1, int* param_2) { -//static PartnerSearchResult l_check_inf; // Search results buffer /* 00001808-000018B8 .text partner_search_sub__11daNpc_Kk1_cFPFPvPv_Pv */ -bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*, void*)) { +bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*,void*)) { - void* uVar1; bool retVal = false; mPartnerProcID = -1; l_check_wrk = 0; @@ -807,7 +869,7 @@ bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*, void*)) { for(int i = 0; i != 0x14; i++){ l_check_inf[i] = 0x0000; } - fpcEx_Search(param_1, this); + fpcEx_Search(*param_1, this); if(l_check_wrk != 0){ mPartnerProcID = fopAcM_GetID(l_check_inf[0]); retVal = 1; @@ -818,7 +880,7 @@ bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*, void*)) { /* 000018B8-00001924 .text partner_search__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::partner_search() { - /* Nonmatching */ + bool cVar1; if(field_0x821 == '\x01'){ @@ -838,7 +900,7 @@ void daNpc_Kk1_c::partner_search() { return; } -static f32 lookBackZero = 0.0; + /* 00001924-00001B10 .text lookBack__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::lookBack() { @@ -849,7 +911,7 @@ void daNpc_Kk1_c::lookBack() { cXyz vec2 = current.pos; vec2.y = eyePos.y; - vec1.setall(lookBackZero); + vec1.setall(0.0); int Int1; fopAc_ac_c *pActor; @@ -898,7 +960,7 @@ bool daNpc_Kk1_c::chkAttention() { }else{ npcPtr = dComIfGp_getAttention().ActionTarget(0); - return this==npcPtr; //Need return in if and else to ensure correct asm. + return this==npcPtr; } @@ -906,7 +968,6 @@ bool daNpc_Kk1_c::chkAttention() { /* 00001B90-00001BE8 .text setAttention__11daNpc_Kk1_cFb */ void daNpc_Kk1_c::setAttention(bool i_attn_flag) { - /* Nonmatching */ f32 f1 = current.pos.z; f32 f2 = current.pos.y + l_HIO.field_0x20; @@ -933,7 +994,7 @@ BOOL daNpc_Kk1_c::decideType(int) { else{ field_0x81F = 1; field_0x820 = 0; - strcpy(&mKkString,"Kk"); + strcpy(&mArcName,"Kk"); ret = false; if((field_0x81F != -1) && (field_0x820 != -1)){ ret = true; @@ -947,7 +1008,6 @@ void daNpc_Kk1_c::cut_init_RUN_START(int param_1) { fopAc_ac_c* a_actor; int idArray[2]; - char* format; a_actor = searchByID(mPartnerProcID,idArray); if(a_actor == NULL){ @@ -963,7 +1023,6 @@ void daNpc_Kk1_c::cut_init_RUN_START(int param_1) { /* 00001D10-00001DD0 .text cut_move_RUN_START__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_RUN_START() { daPy_py_c* pdVar2; - daPy_lk_c* f; cXyz runPoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); short target = cLib_targetAngleY(¤t.pos,&runPoint); cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); @@ -980,7 +1039,7 @@ bool daNpc_Kk1_c::cut_move_RUN_START() { /* 00001DD0-00001E58 .text cut_init_RUN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_RUN(int param_1) { - /* Nonmatching */ + s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); field_0x798 = -1; if(somePtr != NULL){ @@ -1005,11 +1064,11 @@ bool daNpc_Kk1_c::cut_move_RUN() { /* 00001EAC-00001F08 .text cut_init_CATCH_START__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_CATCH_START(int) { - /* Nonmatching */ - daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); - player->onPlayerNoDraw(); - setAnm_NUM(8,1); - mpMorf->setMorf(0.0); + + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + player->onPlayerNoDraw(); + setAnm_NUM(8,1); + mpMorf->setMorf(0.0); } @@ -1024,7 +1083,7 @@ bool daNpc_Kk1_c::cut_move_CATCH_START() { /* 00001F2C-00001FAC .text cut_init_CATCH_END__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_CATCH_END(int param_1) { - /* Nonmatching */ + daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); player->offPlayerNoDraw(); current.angle.y += 0x8000; @@ -1107,12 +1166,12 @@ bool daNpc_Kk1_c::cut_move_TRN() { return true; } return false; - /* Nonmatching */ + } /* 00002364-00002388 .text cut_init_BYE_START__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE_START(int) { - /* Nonmatching */ + ((daPy_py_c*)dComIfGp_getLinkPlayer())->onPlayerNoDraw(); field_0x7BB = 1; return; @@ -1125,7 +1184,6 @@ bool daNpc_Kk1_c::cut_move_BYE_START() { /* 00002390-00002490 .text cut_init_BYE__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE(int param_1) { - /* Nonmatching */ s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); s32* somePtr2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Delay",3); @@ -1152,7 +1210,6 @@ void daNpc_Kk1_c::cut_init_BYE(int param_1) { /* 00002490-00002568 .text cut_move_BYE__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_BYE() { - /* Nonmatching */ event_move(0); if (field_0x79A > 0) { @@ -1186,12 +1243,12 @@ void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int param_1) { } return; - /* Nonmatching */ + } /* 000025C8-00002620 .text cut_move_BYE_CONTINUE__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_BYE_CONTINUE() { - /* Nonmatching */ + this->event_move(0); if (cLib_calcTimer(&this->field_0x798) == 0) { speedF = 0.0; @@ -1202,7 +1259,7 @@ bool daNpc_Kk1_c::cut_move_BYE_CONTINUE() { /* 00002620-000026BC .text cut_init_BYE_END__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE_END(int) { - /* Nonmatching */ + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); s16 angle_y = cLib_targetAngleY(&((daPy_py_c*)dComIfGp_getLinkPlayer())->current.pos,¤t.pos); @@ -1219,7 +1276,7 @@ bool daNpc_Kk1_c::cut_move_BYE_END() { /* 000026C4-000026C8 .text cut_init_PLYER_TRN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_PLYER_TRN(int) { - + return; } /* 000026C8-000026D0 .text cut_move_PLYER_TRN__11daNpc_Kk1_cFv */ @@ -1234,7 +1291,6 @@ void daNpc_Kk1_c::cut_init_OTOBOKE(int) { ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos, current.angle.y); field_0x798 = 2; - //player->setPlayerPosAndAngle(dComIfGp_getPlayer(1),¤t.pos); return; } @@ -1247,7 +1303,7 @@ bool daNpc_Kk1_c::cut_move_OTOBOKE() { return true; } return false; - /* Nonmatching */ + } /* 00002798-000028A4 .text cut_init_PLYER_MOV__11daNpc_Kk1_cFi */ @@ -1256,19 +1312,19 @@ void daNpc_Kk1_c::cut_init_PLYER_MOV(int param_1) { cXyz cStack_1c; s16 sVar3 = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos); sVar3 = sVar3 - current.angle.y; - //s16 sVar1; + if(abs(sVar3)>0x2000){ dComIfGp_evmng_setGoal(&dComIfGp_getLinkPlayer()->current.pos); }else{ cXyz local_28; local_28.setall(0.0); s32 sVar1 = (s16)((sVar3>0)?0x2800:-0x2800); - int added = current.angle.y+sVar1; + int added = current.angle.y+sVar1; //TODO: Necessary unused instruction? mDoMtx_stack_c::transS(current.pos.x,current.pos.y,current.pos.z); mDoMtx_stack_c::YrotM(current.angle.y+sVar1); local_28.z = 150.0; mDoMtx_stack_c::multVec(&local_28,&cStack_1c); - dComIfGp_evmng_setGoal(&cStack_1c);//&dComIfGp_getLinkPlayer()->current.pos); + dComIfGp_evmng_setGoal(&cStack_1c); } return; } @@ -1281,13 +1337,11 @@ bool daNpc_Kk1_c::cut_move_PLYER_MOV() { /* 000028AC-00002A40 .text cut_init_RUNAWAY_START__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { - /* Nonmatching */ - s32* puVar2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); - //player = (daPy_py_c*)dComIfGp_getLinkPlayer(); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); @@ -1347,7 +1401,6 @@ bool daNpc_Kk1_c::cut_move_RUNAWAY_START() { /* 00002AD0-00002B08 .text cut_init_RUNAWAY_END__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_RUNAWAY_END(int) { - /* Nonmatching */ ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); field_0x7B6 = 0; speedF = 0.0; @@ -1358,13 +1411,29 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_END(int) { /* 00002B08-00002B10 .text cut_move_RUNAWAY_END__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_RUNAWAY_END() { - /* Nonmatching */ return true; } /* 00002B10-00002D98 .text privateCut__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::privateCut(int param_1) { - static char* cutsceneNames[14] = { + enum { //TODO: Declare somewhere else? + RUN_START, + RUN, + CATCH_START, + CATCH_END, + TRN, + BYE_START, + BYE, + BYE_END, + PLYER_TRN, + OTOBOKE, + PLYER_MOV, + RUNAWAY_START, + RUNAWAY_END, + BYE_CONTINUE, + CUT_END = -1, + }; + static char* a_cut_tbl[14] = { "RUN_START", "RUN", "CATCH_START", @@ -1386,98 +1455,98 @@ void daNpc_Kk1_c::privateCut(int param_1) { bool uVar1; if (param_1 != -1) { - uVar2 = dComIfGp_evmng_getMyActIdx(param_1,cutsceneNames,0xe,1,0); - field_0x814 = uVar2; - if (field_0x814 == -1) { + uVar2 = dComIfGp_evmng_getMyActIdx(param_1,a_cut_tbl,0xe,1,0); + mCutsceneIndex = uVar2; + if (mCutsceneIndex == CUT_END) { dComIfGp_evmng_cutEnd(param_1); } else { if (dComIfGp_evmng_getIsAddvance(param_1)) { - switch(this->field_0x814) { - case 0: + switch(mCutsceneIndex) { + case RUN_START: cut_init_RUN_START(param_1); break; - case 1: + case RUN: cut_init_RUN(param_1); break; - case 2: + case CATCH_START: cut_init_CATCH_START(param_1); break; - case 3: + case CATCH_END: cut_init_CATCH_END(param_1); break; - case 4: + case TRN: cut_init_TRN(param_1); break; - case 5: + case BYE_START: cut_init_BYE_START(param_1); break; - case 6: + case BYE: cut_init_BYE(param_1); break; - case 7: + case BYE_END: cut_init_BYE_END(param_1); break; - case 8: + case PLYER_TRN: cut_init_PLYER_TRN(param_1); break; - case 9: + case OTOBOKE: cut_init_OTOBOKE(param_1); break; - case 10: + case PLYER_MOV: cut_init_PLYER_MOV(param_1); break; - case 0xb: + case RUNAWAY_START: cut_init_RUNAWAY_START(param_1); break; - case 0xc: + case RUNAWAY_END: cut_init_RUNAWAY_END(param_1); break; - case 0xd: + case BYE_CONTINUE: cut_init_BYE_CONTINUE(param_1); } } - switch(this->field_0x814) { - case 0: + switch(this->mCutsceneIndex) { + case RUN_START: uVar1 = cut_move_RUN_START(); break; - case 1: + case RUN: uVar1 = cut_move_RUN(); break; - case 2: + case CATCH_START: uVar1 = cut_move_CATCH_START(); break; - case 3: + case CATCH_END: uVar1 = cut_move_CATCH_END(); break; - case 4: + case TRN: uVar1 = cut_move_TRN(); break; - case 5: + case BYE_START: uVar1 = cut_move_BYE_START(); break; - case 6: + case BYE: uVar1 = cut_move_BYE(); break; - case 7: + case BYE_END: uVar1 = cut_move_BYE_END(); break; - case 8: + case PLYER_TRN: uVar1 = cut_move_PLYER_TRN(); break; - case 9: + case OTOBOKE: uVar1 = cut_move_OTOBOKE(); break; - case 10: + case PLYER_MOV: uVar1 = cut_move_PLYER_MOV(); break; - case 0xb: + case RUNAWAY_START: uVar1 = cut_move_RUNAWAY_START(); break; - case 0xc: + case RUNAWAY_END: uVar1 = cut_move_RUNAWAY_END(); break; - case 0xd: + case BYE_CONTINUE: uVar1 = cut_move_BYE_CONTINUE(); break; default: @@ -1494,7 +1563,7 @@ void daNpc_Kk1_c::privateCut(int param_1) { /* 00002D98-00002DBC .text endEvent__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::endEvent() { dComIfGp_event_reset(); - anm_prm_idx = 0xff; + mAnimationNum = 0xff; field_0x818 = 0xff; return; } @@ -1507,8 +1576,6 @@ void daNpc_Kk1_c::isEventEntry() { /* 00002DF4-00002F80 .text event_proc__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::event_proc(int param_1) { - /* Nonmatching */ - if (dComIfGp_evmng_endCheck(mEvtIDTbl[mEvtIDIdx])) { s16 idx = mEvtIDIdx; @@ -1576,7 +1643,6 @@ void daNpc_Kk1_c::event_proc(int param_1) { /* 00002F80-00002FB8 .text checkCommandTalk__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::checkCommandTalk() { - /* Nonmatching */ bool retval = false; @@ -1592,95 +1658,526 @@ bool daNpc_Kk1_c::checkCommandTalk() { } /* 00002FB8-00003064 .text set_action__11daNpc_Kk1_cFM11daNpc_Kk1_cFPCvPvPv_iPv */ -void daNpc_Kk1_c::set_action(int (daNpc_Kk1_c::*)(void*), void*) { - /* Nonmatching */ +bool daNpc_Kk1_c::set_action(ActionFunc param_1, void* param_2) { + if(field_0x6F0 != param_1){ + if(field_0x6F0 != 0){ + field_0x821 = 9; + (this->*field_0x6F0)(param_2); + } + field_0x6F0 = param_1; + field_0x821 = 0; + (this->*field_0x6F0)(param_2); + } + return 1; } + + /* 00003064-0000311C .text setStt__11daNpc_Kk1_cFSc */ -void daNpc_Kk1_c::setStt(signed char) { - /* Nonmatching */ +void daNpc_Kk1_c::setStt(signed char param_1) { + + + s8 uVar1 = field_0x81C; + field_0x81C = param_1; + switch((s8)field_0x81C) { + + case 1: + case 4: + case 6: + case 7: + field_0x81B = 0; + field_0x7A4 = 0; + speedF = 0.0; + break; + case 2: + field_0x81B = 0; + mAnimationNum = 0xff; + field_0x818 = 0xff; + field_0x822 = 0; + field_0x7A2 = 0; + field_0x81D = uVar1; + break; + case 3: + field_0x81B = 0; + break; + + case 5: + field_0x81B = 0; + field_0x815 = 2; + field_0x816 = 0; + field_0x7B6 = 1; + break; + + case 0: + break; + + + } + setAnm(); + return; } /* 0000311C-000032D8 .text createTama__11daNpc_Kk1_cFf */ -void daNpc_Kk1_c::createTama(float) { - /* Nonmatching */ +void daNpc_Kk1_c::createTama(float param_1) { + + cXyz plrEyePos; + csXyz local_5c(0.0f,0.0f,0.0f); + + cXyz local_30 = eyePos; + local_30.y=15+eyePos.y; + plrEyePos = dNpc_playerEyePos(-20); + + + + f32 a = (plrEyePos-eyePos).absXZ(); //TODO: Unused abs call? + local_5c.y = cLib_targetAngleY(&local_30,&plrEyePos); + local_5c.x = cLib_targetAngleX(&local_30,&plrEyePos); + daTama_c* tama = (daTama_c *)fopAcM_fastCreate(0x1D6,0,&eyePos,fopAcM_GetRoomNo(this),&local_5c,NULL,0xFF,NULL,NULL); + fpc_ProcID procID; + if (tama != NULL) { + if (this != NULL) { + procID = base.mBsPcId; + + } + else { + procID = -1; + } + tama->setPartnerID(procID); + tama->setDis(param_1); + tama->setSpd(50); + } + return; } /* 000032D8-0000345C .text chk_areaIN__11daNpc_Kk1_cFf4cXyz */ -void daNpc_Kk1_c::chk_areaIN(float, cXyz) { - /* Nonmatching */ +u32 daNpc_Kk1_c::chk_areaIN(float param_1, cXyz param_2) { + + float distanceXZ = (dComIfGp_getLinkPlayer()->current.pos - param_2).absXZ(); + + + s16 angdiff = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos) - current.angle.y; + float fVar1 = param_1; + if (abs(angdiff) > 0x4E38) { + fVar1 *= 0.5f; + } + bool result = (distanceXZ < param_1); + if (result && ((g_Counter.mCounter0 % 3) == 0)) { + createTama(fVar1); + + } + return result; } /* 0000345C-00003578 .text startEvent_check__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::startEvent_check() { - /* Nonmatching */ +bool daNpc_Kk1_c::startEvent_check() { + + uint uVar3; + float fVar4; + + + uVar3 = chk_areaIN(l_HIO.field_0x5C,current.pos); + if ((uVar3 & 0xff) != 0) { + fVar4 = current.pos.abs(dComIfGp_getLinkPlayer()->current.pos); + + if ((fVar4 < g_regHIO.mChild[9].mFloatRegs[0] + 210.0f) || + (field_0x6ba != 0)) { + return 1; + } + } + return 0; } + /* 00003578-00003600 .text chkHitPlayer__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chkHitPlayer() { - /* Nonmatching */ +bool daNpc_Kk1_c::chkHitPlayer() { + + cCcD_Obj *pcVar1; + fopAc_ac_c *pfVar2; + bool bVar4; + + bVar4 = false; + if (mCyl.ChkCoHit()){ + pcVar1 = mCyl.GetCoHitObj(); + if(pcVar1 != NULL) { + + pfVar2 = pcVar1->GetAc(); + + if(pfVar2 != NULL){ + bVar4 = pfVar2->base.mProcName == 0xA9; + } + } + } + return bVar4; } /* 00003600-000036A8 .text set_pthPoint__11daNpc_Kk1_cFUc */ -void daNpc_Kk1_c::set_pthPoint(unsigned char) { - /* Nonmatching */ +void daNpc_Kk1_c::set_pthPoint(unsigned char param_1) { + + if(mRunPath.mPath != NULL){ + mRunPath.mCurrPointIndex = param_1; + current.pos = mRunPath.getPoint(mRunPath.mCurrPointIndex); + if(mRunPath.nextIdx()){ + cXyz runpoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + current.angle.y = cLib_targetAngleY(¤t.pos,&runpoint); + } + } } + /* 000036A8-00003940 .text event_move__11daNpc_Kk1_cFb */ -bool daNpc_Kk1_c::event_move(bool) { - /* Nonmatching */ +bool daNpc_Kk1_c::event_move(bool param_1) { + + s16 sVar2; + f32 speed; + dPath* path = mRunPath.mPath; + if(path == NULL){ + return 1; + } + + if (dPath_ChkClose(path) == 0){ + return 1; + } + if(field_0x7B6 != 0){ + if(mRunPath.chkPointPass(current.pos,mRunPath.mbGoingForwards)){ + mRunPath.nextIdxAuto(); + if(param_1 != 0){ + s8 pointarg = mRunPath.pointArg(mRunPath.mCurrPointIndex); + if( pointarg >= 0){ + pointarg += 1; + } + if((pointarg != 2) && (pointarg != 3)){ + field_0x7B6 = 0; + + } + else{ + field_0x815 = pointarg; + field_0x816 = 0; + field_0x7B6 = 1; + } + } + + } + } + + cXyz runpoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); + s16 target = cLib_targetAngleY(¤t.pos,&runpoint); + sVar2 = current.angle.y; + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + f32 targetfloat; + float fVar3; + if(field_0x815 == 2){ + if(field_0x7B6 == 0){ + targetfloat = 0.0; + }else{ + targetfloat = l_HIO.field_0x44; + } + fVar3 = speedF * l_HIO.field_0x4C; + speed = l_HIO.field_0x48; + }else{ + + if(field_0x7B6 == 0){ + targetfloat = 0.0; + }else{ + targetfloat = l_HIO.field_0x50; + } + fVar3 = speedF * l_HIO.field_0x58; + speed = l_HIO.field_0x54; + } + cLib_chaseF(&speedF,targetfloat,speed); + + + mpMorf->setPlaySpeed(cLib_minLimit(fVar3,0.5f)); + if((int)targetfloat == 0){ + current.angle.y = sVar2; + if((int)speedF == 0){ + speedF = 0.0; + s8 cVar6 = mRunPath.pointArg(mRunPath.mCurrPointIndex); + if((s32)cVar6 >= 0){ + cVar6 += 1; + } + field_0x816 = (u8)cVar6; + return true; + + } + } + + return false; + } /* 00003940-000039F0 .text kyoroPos__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::kyoroPos(int) { - /* Nonmatching */ +cXyz daNpc_Kk1_c::kyoroPos(int param_1) { + +static f32 a_tgt_offst[12][3] = {0.0, 0.0, 0.0, -100.0, 0.0, 0.0, 100.0, 0.0, +0.0, -100.0, 0.0, 100.0, 100.0, 0.0, 100.0, 0.0, +0.0, 100.0, -100.0, 40.0, 0.0, 100.0, 40.0, 0.0, +-100.0, 40.0, 100.0, 100.0, 40.0, 100.0, 0.0, 40.0, +100.0, -40.0, 10.0, 40.0}; + Vec local_1c; + Vec local_28; + local_1c.x = a_tgt_offst[param_1][0]; + local_1c.y = a_tgt_offst[param_1][1]; + local_1c.z = a_tgt_offst[param_1][2]; + mDoMtx_stack_c::transS(eyePos); + + mDoMtx_YrotM(mDoMtx_stack_c::get(),this->current.angle.y); + + mDoMtx_stack_c::multVec(&local_1c,&local_28); + return (cXyz)local_28; + } /* 000039F0-00003A84 .text kyorokyoro__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::kyorokyoro() { - /* Nonmatching */ +bool daNpc_Kk1_c::kyorokyoro() { + + + s16 retval = cLib_calcTimer(&field_0x794); + if(retval){ + field_0x738 = kyoroPos(field_0x796); + return 1; + } + int rng = cLib_getRndValue(1,10); + field_0x796 = rng; + field_0x794 = l_HIO.field_0x28; + field_0x792 = l_HIO.field_0x2A; + return 0; } /* 00003A84-00003C9C .text chk_attn__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::chk_attn() { +bool daNpc_Kk1_c::chk_attn() { /* Nonmatching */ -} + float fVar1; + bool bVar2; + short sVar4; + int iVar3; + cXyz local_54; + cXyz local_48 [2]; + s16 fVar6 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + + fVar1 = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos) - current.angle.y; + if(field_0x81E == 1){ + u32 uVar5 = 0; + bVar2 = false; + if (fVar6 < 200.0 && (fabs(iVar3)/182.0444) < 300.0){ + + } + if ((bVar2) && (fabs(fVar1) < 300.0)) { + uVar5 = 1; + } + return uVar5; + } + + + +} /* 00003C9C-00003D9C .text setBikon__11daNpc_Kk1_cF4cXyz */ -void daNpc_Kk1_c::setBikon(cXyz) { - /* Nonmatching */ +void daNpc_Kk1_c::setBikon(cXyz param_1) { + + JPABaseEmitter *pJVar1; + cXyz cStack_18; + + delBikon(); + PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y); + PSMTXMultVec(mDoMtx_stack_c::get(),¶m_1,&cStack_18); + + dPa_control_c* particle = g_dComIfG_gameInfo.play.getParticle(); + pJVar1 = particle->set(0,0x8152,&cStack_18,NULL,NULL,0xFF,NULL,-1,NULL,NULL,NULL); + + if(pJVar1 != NULL){ + mDoAud_seStart(0x58BD,¤t.pos); + } + return; } /* 00003D9C-00003DA0 .text delBikon__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::delBikon() { - /* Nonmatching */ + return; } /* 00003DA0-00003E18 .text setAse__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::setAse() { - /* Nonmatching */ + + JPABaseEmitter* pJVar1; + delAse(); + dPa_control_c* particle = g_dComIfG_gameInfo.play.getParticle(); + pJVar1 = particle->set(0,0x819E,¤t.pos,¤t.angle,NULL,0xFF,NULL,-1,NULL,NULL,NULL); + field_0x810 = pJVar1; + return; } /* 00003E18-00003EA4 .text flwAse__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::flwAse() { - /* Nonmatching */ + + JPABaseEmitter* iVar3; + JGeometry::TVec3 out; + if (field_0x810 != NULL) { + mDoMtx_stack_c::copy(mpMorf->mpModel->getAnmMtx(mAnmMtxIdx)); + mDoMtx_stack_c::multVecZero(out); + field_0x810->setGlobalTranslation(out); + + } + return; } /* 00003EA4-00003ED0 .text delAse__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::delAse() { - /* Nonmatching */ + JPABaseEmitter* Ase = field_0x810; + if(field_0x810 == NULL){ + return; + } + Ase->mMaxFrame = -1; + Ase->mFlags |= 1; + + field_0x810 = NULL; + return; } /* 00003ED0-0000415C .text wait_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_1() { - /* Nonmatching */ +bool daNpc_Kk1_c::wait_1() { + if(field_0x7C3 != 0){ + if(chk_talk() != 0){ + setStt(2); + setAnm_NUM(0,1); + field_0x81E = 1; + field_0x7C4 = 0; + m_jnt.setTrn(); + } + return 1; + } + field_0x81B = 2; + field_0x81E = 0; + field_0x7C4 = 1; + + cXyz sp20; + if(field_0x7B6 != 0){ + sp20 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + s16 temp_r3 = cLib_targetAngleY(¤t.pos,&sp20); + cLib_addCalcAngleS(¤t.angle.y,temp_r3,l_HIO.field_0x30,l_HIO.field_0x32, 0x80); + temp_r3 = temp_r3 - current.angle.y; + if(abs(temp_r3) < 0x1800){ + setStt('\x03'); + field_0x7B7 = 0; + } + return 1; + } + + if(field_0x81A == 0xB){ + if(field_0x7B2 != 0){ + setAnm_NUM(0,1); + field_0x7A4 = cLib_getRndValue(0x3C, 0x1E); + field_0x7B7 = 1; + } + return 1; + } + + cXyz sp14(-100.0f,0.0f,0.0f); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_YrotM(mDoMtx_stack_c::get(),field_0x71A); + + mDoMtx_stack_c::multVec(&sp14,&sp20); + s16 temp_r3_r2 = cLib_targetAngleY(¤t.pos,&sp20); + + cLib_addCalcAngleS(¤t.angle.y,temp_r3_r2,l_HIO.field_0x30,l_HIO.field_0x32, 0x80); + temp_r3_r2 = temp_r3_r2 - current.angle.y; + if(field_0x7B7 == 0){ + + if(temp_r3_r2 == 0){ + setAnm_NUM(0xB,1); + } + return 1; + } + if(cLib_calcTimer(&field_0x7A4) == 0){ + if(mRunPath.mPath != NULL){ + u8 temp_r3_3 = mRunPath.maxPoint(); + if((temp_r3_3 > 2) && (((daObj_Roten_c*)temp_r3_3)->getCreateCount() > 1)){ + field_0x7B6 = 1; + return 1; + } + } + field_0x7B7 = 0; + + } + return 1; } /* 0000415C-0000449C .text walk_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::walk_1() { - /* Nonmatching */ +bool daNpc_Kk1_c::walk_1() { + + short sVar2; + float fVar3; + short target; + float fVar7; + cXyz local_40; + + local_40 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + if (dPath_ChkClose(mRunPath.mPath)) { + return 1; + } + u8 idx; + fVar7 = (current.pos-local_40).absXZ(); + if ((field_0x7B6) && (fVar7 < l_HIO.field_0x34) ) { + bool r29 = (mRunPath.nextIdxAuto() == 0); + if (!r29 && mRunPath.mbGoingForwards){ + idx = mRunPath.mCurrPointIndex; + if( idx >= ((daObj_Roten_c*)r29)->getCreateCount() ){ + mRunPath.decIdx(); + mRunPath.decIdx(); + r29 = true; + } + } + if (r29 != 0) { + field_0x7B6 = 0; + mRunPath.mbGoingForwards ^= 1; + } + } + + target = cLib_targetAngleY(¤t.pos,&local_40); + + sVar2 = current.angle.y; + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + fVar7 = l_HIO.field_0x38; + if (!field_0x7B6 || field_0x7C3 || chk_attn()) { + fVar7 = 0.0; + } + cLib_chaseF(&speedF,fVar7,l_HIO.field_0x3C); + fVar3 = speedF*l_HIO.field_0x40; + fVar3 = cLib_minLimit(fVar3,0.5f); + mpMorf->mFrameCtrl.setRate(fVar3); + if ((int)fVar7 == 0) { + current.angle.y = sVar2; + if ((s32)speedF == 0) { + if (field_0x7C3) { + if(chk_talk()){ + setStt(1); + setAnm_NUM(0,1); + field_0x81E = 1; + field_0x7C4 = 0; + m_jnt.setTrn(); + } + return 1; + } + if (!field_0x7B6) { + setStt('\x01'); + field_0x7B7 = 0; + field_0x7B6 = 0; + return 1; + } + setStt('\a'); + field_0x7B7 = 0; + field_0x7B6 = 0; + return 1; + } + } + field_0x81B = 2; + field_0x81E = 0; + field_0x7C4 = 1; + return 1; } + /* 0000449C-00004614 .text wait_2__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::wait_2() { /* Nonmatching */ @@ -1783,8 +2280,6 @@ void daNpc_Kk1_c::effcCreateHeap() { /* 000065E0-00006684 .text CreateHeap__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::CreateHeap() { - /* Nonmatching */ - return; } @@ -1811,7 +2306,6 @@ static BOOL daNpc_Kk1_Draw(daNpc_Kk1_c* obj) { /* 00006704-0000670C .text daNpc_Kk1_IsDelete__FP11daNpc_Kk1_c */ static BOOL daNpc_Kk1_IsDelete(daNpc_Kk1_c*) { - /* Nonmatching */ return true; } From d8c872beb7e9628db1918390d66eb7a58d7272e2 Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Thu, 15 May 2025 04:18:01 -0500 Subject: [PATCH 08/15] Rewrote _execute to increase accuracy. Only issue in .text is a label not loading correctly. I have no idea how to fix this. --- src/d/actor/d_a_tag_kk1.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/d/actor/d_a_tag_kk1.cpp b/src/d/actor/d_a_tag_kk1.cpp index b9580b293..933c51203 100644 --- a/src/d/actor/d_a_tag_kk1.cpp +++ b/src/d/actor/d_a_tag_kk1.cpp @@ -8,7 +8,6 @@ #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}; From 37d7ef5b073ed777b5406913ad40897fd275184b Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Thu, 15 May 2025 18:04:20 -0500 Subject: [PATCH 09/15] Equivalent. Weak func ordering. --- src/d/actor/d_a_tag_kk1.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/d/actor/d_a_tag_kk1.cpp b/src/d/actor/d_a_tag_kk1.cpp index 933c51203..b9580b293 100644 --- a/src/d/actor/d_a_tag_kk1.cpp +++ b/src/d/actor/d_a_tag_kk1.cpp @@ -8,6 +8,7 @@ #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}; From 41d9631073b0f6c1632df205253dc785b1b5bece Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Thu, 22 May 2025 08:31:29 -0500 Subject: [PATCH 10/15] 82% text --- include/d/actor/d_a_npc_kk1.h | 42 ++- src/d/actor/d_a_npc_kk1.cpp | 574 +++++++++++++++++++++++++++++++--- 2 files changed, 554 insertions(+), 62 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index 3eb22423d..7ee71522d 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -132,7 +132,7 @@ public: bool set_action(ActionFunc, void*); void setStt(signed char); void createTama(float); - u32 chk_areaIN(float, cXyz); + bool chk_areaIN(float, cXyz); bool startEvent_check(); bool chkHitPlayer(); void set_pthPoint(unsigned char); @@ -145,21 +145,21 @@ public: void setAse(); void flwAse(); void delAse(); - bool wait_1(); - bool walk_1(); - void wait_2(); + BOOL wait_1(); + BOOL walk_1(); + BOOL wait_2(); void init_CMT_WAI(); void move_CMT_WAI(); void init_CMT_TRN(); void move_CMT_TRN(); void init_CMT_PCK(); void move_CMT_PCK(); - void cmmt_1(); - void wait_3(); - void wait_4(); - void talk_1(); + BOOL cmmt_1(); + BOOL wait_3(); + BOOL wait_4(); + BOOL talk_1(); int wait_action1(void*); - void demo(); + u8 demo(); void shadowDraw(); bool _draw(); bool _execute(); @@ -176,7 +176,8 @@ public: /* 0x6CD */ s8 field_0x6CD; //ui bodyCreateHeap /* 0x6CE */ char mArcName; /* 0x6CF */ u8 field_0x6CF; - /* 0x6D0 */ u8 field_0x6D0[0x6D8 - 0x6D0]; + /* 0x6D0 */ u32 field_0x6D0; + /* 0x6D4 */ u32 mShadowID; /* 0x6D8 */ mDoExt_btpAnm mBtpAnm; /* 0x6EC*/ u8 field_0x6EC; /* 0x6ED*/ s8 field_0x6ED; @@ -211,20 +212,14 @@ public: /* 0x798 */ s16 field_0x798; /* 0x79A */ s16 field_0x79A; /* 0x79C */ s16 field_0x79C; - /* 0x79E */ s8 field_0x79E; - /* 0x79E */ s8 field_0x79F; + /* 0x79E */ s16 field_0x79E; + ///* 0x79E */ s8 field_0x79F; /* 0x7A0 */ s16 field_0x7A0; - /* 0x7A2 */ s16 field_0x7A2; - /* 0x7A4 */ s16 field_0x7A4; - /* 0x7A6 */ s16 field_0x7A6; - /* 0x7A8 */ s16 field_0x7A8; - /* 0x7AA */ s16 field_0x7AA; - /* 0x7AC */ s16 field_0x7AC; /* 0x7AE */ s16 field_0x7AE; /* 0x7B0 */ s16 field_0x7B0; @@ -247,7 +242,9 @@ public: /* 0x7C2 */ u8 field_0x7C2; /* 0x7C3 */ u8 field_0x7C3; /* 0x7C4 */ bool field_0x7C4; - /* 0x7C5 */ u8 field_0x7C5[0x7CF - 0x7C5]; + /* 0x7C5 */ bool field_0x7C5; + /* 0x7C6 */ u8 field_0x7C6; + /* 0x7C5 */ u8 field_0x7C7[0x7CF - 0x7C7]; /* 0x7CF */ u8 field_0x7CF; /* 0x7D0 */ anm_prm_c* field_0x7D0; /* 0x7D4 */ u8 field_0x7D4[0x7DC - 0x7D4]; @@ -273,7 +270,7 @@ public: /* 0x81A */ s8 field_0x81A; /* 0x81B */ s8 field_0x81B; /* 0x81C */ s8 field_0x81C; - /* 0x81D */ u8 field_0x81D; + /* 0x81D */ s8 field_0x81D; /* 0x81E */ u8 field_0x81E; /* 0x81F */ s8 field_0x81F; /* 0x820 */ s8 field_0x820; @@ -297,7 +294,8 @@ public: /* 0x11 */ u8 field_0x11[0x1E - 0x11]; /* 0x1E */ s16 field_0x1E; /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; + /* 0x24 */ s16 field_0x24; + /* 0x26 */ s16 field_0x26; /* 0x28 */ s16 field_0x28; /* 0x28 */ s16 field_0x2A; /* 0x2C */ s16 field_0x2C; @@ -309,7 +307,7 @@ public: /* 0x3C */ f32 field_0x3C; /* 0x40 */ f32 field_0x40; /* 0x44 */ f32 field_0x44; - ///* 0x44 */ s16 field_0x46; + ///* 0x46 */ s16 field_0x46; /* 0x48 */ f32 field_0x48; /* 0x4C */ f32 field_0x4C; /* 0x50 */ f32 field_0x50; diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index 0f315127b..f97ec1380 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -294,7 +294,7 @@ int daNpc_Kk1_c::bckResID(int param_1) { /* 00000AAC-00000AC0 .text btpResID__11daNpc_Kk1_cFi */ int daNpc_Kk1_c::btpResID(int param_1) { - static const u32 a_resID_tbl_2[] = {17}; + static const u32 a_resID_tbl_2[] = {0x00000011}; return a_resID_tbl_2[param_1]; } @@ -440,8 +440,8 @@ void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* param_1) { 0x00,00,0000, 8.0, 1.0, 0x00000002, }; - static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl3[14] = { - {5,0,0,8.0,1.0,2}, + static daNpc_Kk1_c::anm_prm_c a_anm_prm_tbl3[13] = { + {0,0,0,8.0,1.0,2}, {1,0,0,8.0,1.0,2}, {2,0,0,8.0,1.0,2}, {3,0,0,8.0,1.0,2}, @@ -1751,7 +1751,7 @@ void daNpc_Kk1_c::createTama(float param_1) { } /* 000032D8-0000345C .text chk_areaIN__11daNpc_Kk1_cFf4cXyz */ -u32 daNpc_Kk1_c::chk_areaIN(float param_1, cXyz param_2) { +bool daNpc_Kk1_c::chk_areaIN(float param_1, cXyz param_2) { float distanceXZ = (dComIfGp_getLinkPlayer()->current.pos - param_2).absXZ(); @@ -1947,30 +1947,75 @@ bool daNpc_Kk1_c::kyorokyoro() { /* 00003A84-00003C9C .text chk_attn__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::chk_attn() { /* Nonmatching */ - float fVar1; - bool bVar2; - short sVar4; - int iVar3; - cXyz local_54; - cXyz local_48 [2]; + // float fVar1; + // bool bVar2; + // short sVar4; + // int iVar3; + // cXyz local_54; + // cXyz local_48 [2]; + // int uVar5; - s16 fVar6 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + // s16 fVar6 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + // fVar1 = current.pos.y - dComIfGp_getLinkPlayer()->current.pos.y; + // sVar4 = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos); + // iVar3 = (sVar4 - current.angle.y); + // if(field_0x81E == 1){ + // u32 uVar5 = 0; + // bVar2 = false; + // if (fVar6 < 200.0 && (fabs(iVar3)/182.0444) < 90.0){ + // bVar2 = true; + // } + // if ((bVar2) && (fabs(fVar1) < 300.0)) { + // uVar5 = 1; + // } + // //return uVar5; + // } + // else{ + // uVar5 = 0; + // bVar2 = false; + // if((fVar6 < 200.0f)&&(fabs(iVar3) / 182.0444 < 60.0)){ + // bVar2 = true; + // } + // if((bVar2) && (abs(fVar1)) < 300.0){ + // uVar5 = 1; + // } + // } + // return uVar5; - fVar1 = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos) - current.angle.y; - if(field_0x81E == 1){ - u32 uVar5 = 0; - bVar2 = false; - if (fVar6 < 200.0 && (fabs(iVar3)/182.0444) < 300.0){ + f32 fVar6; + + u8 bVar2; + bool retval = 0; + + fVar6 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + + f32 fVar1 = current.pos.y - dComIfGp_getLinkPlayer()->current.pos.y; + s16 sVar4 = cLib_targetAngleY(¤t.pos, &dComIfGp_getLinkPlayer()->current.pos); + s16 iVar3 = (sVar4 - current.angle.y); + if ((s32)field_0x81E == 1) { + retval = 0; + bVar2 = 0; + if ((fVar6 < 200.0f) && (((f32)abs(iVar3) / 182.04445f) < 90.0f)) { + bVar2 = 1; } - if ((bVar2) && (fabs(fVar1) < 300.0)) { - uVar5 = 1; + if ((bVar2) && (std::fabsf(fVar1) < 300.0f)) { + retval = 1; } - return uVar5; + return retval; + }else{ + retval = 0; + bVar2 = 0; + if ((fVar6 < 200.0f) && (((f32) abs(iVar3) / 182.04445f) < 60.0f)) { + bVar2 = 1; + } + if ((bVar2) && (std::fabsf(fVar1) < 300.0f)) { + retval = 1; + } + return retval; } - } /* 00003C9C-00003D9C .text setBikon__11daNpc_Kk1_cF4cXyz */ void daNpc_Kk1_c::setBikon(cXyz param_1) { @@ -2036,7 +2081,7 @@ void daNpc_Kk1_c::delAse() { } /* 00003ED0-0000415C .text wait_1__11daNpc_Kk1_cFv */ -bool daNpc_Kk1_c::wait_1() { +BOOL daNpc_Kk1_c::wait_1() { if(field_0x7C3 != 0){ if(chk_talk() != 0){ setStt(2); @@ -2105,7 +2150,7 @@ bool daNpc_Kk1_c::wait_1() { } /* 0000415C-0000449C .text walk_1__11daNpc_Kk1_cFv */ -bool daNpc_Kk1_c::walk_1() { +BOOL daNpc_Kk1_c::walk_1() { short sVar2; float fVar3; @@ -2180,73 +2225,522 @@ bool daNpc_Kk1_c::walk_1() { /* 0000449C-00004614 .text wait_2__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_2() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::wait_2() { + + int sp8; + cLib_addCalcAngleS(¤t.angle.y,field_0x71A,4,0x800,0x80); + if(field_0x7C3 != 0){ + if(chk_talk() != 0){ + setStt(2); + field_0x81E = 1; + field_0x7C4 = 0; + field_0x7C5 = 0; + m_jnt.setTrn(); + } + return 1; + } + field_0x81E = 0; + field_0x7C4 = 1; + s8 temp_r0 = field_0x81B; + if(temp_r0 == 3 || temp_r0 == 4){ + return 1; + } + if(field_0x7B8 != 0){ + u8 temp_r4 = field_0x7B5; + if((temp_r4 != 0xFF) && (dComIfGs_isSwitch(temp_r4,current.roomNo) != 0)){ + fopAc_ac_c* temp_r3 = searchByID(mPartnerProcID,&sp8); + if((temp_r3 != NULL) && (sp8 == 0)){ + s16 difference = cLib_targetAngleY(&temp_r3->current.pos,&dComIfGp_getLinkPlayer()->current.pos)-temp_r3->current.angle.y; + if(abs(difference) < 0x4000){ + field_0x81B = 4; + }else{ + field_0x81B = 3; + } + mStts.SetWeight(0xD9); + return 1; + } + } + } + field_0x81B = 2; + return 1; + } /* 00004614-0000466C .text init_CMT_WAI__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::init_CMT_WAI() { - /* Nonmatching */ + + field_0x7A4 = cLib_getRndValue(0x5a,0xb4); + this->field_0x81E = 5; + this->field_0x7C4 = 1; + setAnm_NUM(0,1); + return; } /* 0000466C-00004754 .text move_CMT_WAI__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::move_CMT_WAI() { - /* Nonmatching */ + + short sVar2; + uint uVar1; + + + sVar2 = cLib_calcTimer(&field_0x7A4); + if (sVar2 == 0) { + if ((field_0x81B != 1) && (field_0x81B < 3)) { + //local_18 = ; + uVar1 = chk_areaIN(l_HIO.field_0x5C,current.pos); + if ((uVar1 & 0xff) != 0) { + this->field_0x81B = 8; + return; + } + } + field_0x816 = 0; + setAnm_NUM(3,1); + field_0x7B6 = 1; + } + else if (((field_0x81B != 1) && (field_0x81B < 3)) && + (startEvent_check() != 0)) { + field_0x81B = 9; + } + return; } /* 00004754-000047D4 .text init_CMT_TRN__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::init_CMT_TRN() { - /* Nonmatching */ + + field_0x7AA = current.angle.y; + s16 uVar1 = cLib_getRndValue(0x5A,0xB4); + field_0x7A4 = uVar1; + field_0x798 = l_HIO.field_0x2C; + field_0x794 = l_HIO.field_0x28; + field_0x792 = l_HIO.field_0x2A; + field_0x81E = 0; + field_0x7C4 = 1; + setAnm_NUM(0,1); + return; } /* 000047D4-00004A14 .text move_CMT_TRN__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::move_CMT_TRN() { - /* Nonmatching */ + + short sVar1; + uint uVar2; + short sVar3; + short sVar4; + cXyz local_20; + + sVar1 = field_0x7AA + 0x8000; + sVar3 = current.angle.y; + uVar2 = cLib_calcTimer(&field_0x798); + if ((short)uVar2 != 0) { + s8 temp_r0 = field_0x81B; + if((temp_r0 != 1) && (temp_r0 < 3) && startEvent_check() != 0){ + field_0x81B = 9; + } + }else if (field_0x7A4 == 0) { + local_20 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + sVar3 = cLib_targetAngleY(¤t.pos,&local_20); + sVar1 = cLib_addCalcAngleS(¤t.angle.y,sVar3,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + uVar2 = (uint)sVar1; + if ((field_0x81B != 1) && ((char)field_0x81B < 3)) { + + if (startEvent_check() != 0) { + field_0x81B = 9; + return; + } + if (current.angle.y == (int)sVar3) { + field_0x816 = 0; + setAnm_NUM(3,1); + field_0x7B6 = 1; + } + } + }else { + sVar4 = cLib_addCalcAngleS(¤t.angle.y,sVar1,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + uVar2 = (uint)sVar4; + sVar4 = current.angle.y; + if (sVar4 == sVar1) { + if (sVar4 != sVar3) { + field_0x81E = 5; + field_0x7C4 = 1; + } + if (cLib_calcTimer(&field_0x7A4) == 0) { + if ((field_0x81B != '\x01') && ((char)field_0x81B < '\x03')) { + if (chk_areaIN(l_HIO.field_0x5C,current.pos)) { + field_0x81B = 8; + } + } + field_0x81E = 0; + field_0x7C4 = 1; + } + } + if (((field_0x81B != '\x01') && ((char)field_0x81B < '\x03')) && + (uVar2 = startEvent_check(), (uVar2 & 0xff) != 0)) { + field_0x81B = 9; + } + } } /* 00004A14-00004A84 .text init_CMT_PCK__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::init_CMT_PCK() { - /* Nonmatching */ + + setAnm_NUM(1,1); + field_0x7A4 = l_HIO.field_0x26; + field_0x81E = 0; + field_0x7C4 = 1; + mEvtIDIdx = 2; + eventInfo.mEventId = mEvtIDTbl[mEvtIDIdx]; } /* 00004A84-00004C34 .text move_CMT_PCK__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::move_CMT_PCK() { /* Nonmatching */ + cXyz sp8; + s16 temp_r3; + u8 temp_r0; + u8 temp_r0_2; + + if (field_0x7A4 == 0) { + sp8 = mRunPath.getPoint(mRunPath.mCurrPointIndex); + + temp_r3 = cLib_targetAngleY(¤t.pos,&sp8); + cLib_addCalcAngleS(¤t.angle.y, temp_r3, l_HIO.field_0x30, l_HIO.field_0x32, 0x80); + temp_r0 = field_0x81B; + if (((s8) temp_r0 != 1) && ((s8) temp_r0 < 3)) { + if (startEvent_check() != 0) { + field_0x81B = 9; + return; + } + if (current.angle.y == temp_r3) { + field_0x816 = 0; + setAnm_NUM(3, 1); + field_0x7B6 = 1; + } + } + } else if ((u8) field_0x7C3 == 0) { + temp_r0_2 = field_0x81B; + if (((s8) temp_r0_2 != 1) && ((s8) temp_r0_2 < 3) && (chkHitPlayer() != 0)) { + field_0x81B = 1; + return; + } + if (!cLib_calcTimer(&field_0x7A4)) { + setAnm_NUM(0, 1); + eventInfo.mEventId = -1; + field_0x81B = 0; + return; + } + mDoAud_seStart(0x509BU, ¤t.pos); + field_0x81B = 2; + } } /* 00004C34-00004DD0 .text cmmt_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::cmmt_1() { +BOOL daNpc_Kk1_c::cmmt_1() { /* Nonmatching */ + u8 temp_r0; + + u8 temp_r0_4; + + switch (field_0x816) { /* irregular */ + case 1: + move_CMT_WAI(); + return 1; + case 4: + move_CMT_TRN(); + return 1; + case 5: + move_CMT_PCK(); + return 1; + case 0: + default: + if ((field_0x81B != 1) && (field_0x81B < 3) && (field_0x81A != 1) && (startEvent_check() != 0)) { + field_0x81B = 9; + } + field_0x81E = 0; + field_0x7C4 = 1; + if (event_move( 1) != 0) { + if ((field_0x81B == 1) || (field_0x81B >= 3)) { + return 1; + } + temp_r0_4 = field_0x816; + switch ((s8) temp_r0_4) { + case 1: + init_CMT_WAI(); + break; + case 4: + init_CMT_TRN(); + break; + case 5: + init_CMT_PCK(); + break; + case 0: + default: + field_0x816 = 0; + setAnm_NUM(3, 1); + field_0x7B6 = 1; + break; + } + + } + if ((field_0x81B == 1) || (field_0x81B >= 3)) { + return 1; + } + field_0x81B = 0; + return 1; + } } /* 00004DD0-00004F74 .text wait_3__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_3() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::wait_3() { + + + + + float fVar4 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + + field_0x7C5 = fVar4 > 300.0f; + if (field_0x7C5) { + cLib_addCalcAngleS(¤t.angle.y,field_0x71A,4,0x800,0x80); + } + if (field_0x7C3 != 0) { + if (chk_talk()) { + setStt(2); + this->field_0x81E = 1; + this->field_0x7C4 = 0; + this->field_0x7C5 = 0; + m_jnt.mbTrn = true; + + } + return 1; + } + else { + field_0x81E = 0; + field_0x7C4 = 1; + if (chk_attn()) { + this->field_0x81E = 1; + } + if ((this->field_0x81B != 1) && (field_0x81B < 3)) { + this->field_0x81B = 2; + } + } + return 1; } /* 00004F74-00005170 .text wait_4__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::wait_4() { +BOOL daNpc_Kk1_c::wait_4() { /* Nonmatching */ + float fVar1; + bool bVar3; + short target; + int iVar2; + float fVar4; + cXyz local_44; + cXyz local_38; + cXyz local_2c; + cXyz local_20 [2]; + + fVar4 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + + + + if (this->field_0x7C3) { + if (chk_talk()) { + setStt('\x02'); + setAnm_NUM(0,1); + this->field_0x81E = 1; + this->field_0x7C4 = 0; + m_jnt.mbTrn = true; + } + return 1; + } + else { + this->field_0x81B = 2; + this->field_0x81E = 1; + this->field_0x7C4 = 0; + this->field_0x7B6 = fVar4 > 300.0f; + if (this->field_0x7B6) { + local_20[0] = mRunPath.getPoint(mRunPath.mCurrPointIndex); + + target = cLib_targetAngleY(¤t.pos,local_20); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + s16 diff = target - current.angle.y; + iVar2 = abs(diff); + if (iVar2 < 0x1800) { + setStt('\x03'); + field_0x7B7 = 0; + } + this->field_0x81E = 0; + this->field_0x7C4 = 1; + } + } + return 1; } /* 00005170-000052B4 .text talk_1__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::talk_1() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::talk_1() { + + msg_class *pmVar3; + int uVar4; + short sVar5; + + int uVar6 = chk_parts_notMov(); + talk(1); + pmVar3 = mpCurrMsg; + if (pmVar3 == NULL) { + return 1; + } + switch(pmVar3->mStatus){ + case 6: + case 2: + break; + case 19: + field_0x7B4 = 0xff; + field_0x7C3 = 0; + + setStt(field_0x81D); + uVar4 = cLib_getRndValue(0xF,0x1E); + field_0x79E = uVar4; + + switch(mCurrMsgNo){ + case 0x1CA9: + dComIfGs_onEventBit(0xE10); + break; + case 0x1CAB: + field_0x81B = 7; + break; + case 0x1CAC: + field_0x81E = 1; + field_0x7C4 = 0; + field_0x7A2 = 0; + break; + default: + break; + } + endEvent(); + break; + } + sVar5 = cLib_calcTimer(&field_0x7A2); + if ((sVar5 != 0) && (field_0x7A2 == 1)) { + this->field_0x81E = 1; + this->field_0x7C4 = 0; + } + return uVar6; } + /* 000052B4-000053F4 .text wait_action1__11daNpc_Kk1_cFPv */ -int daNpc_Kk1_c::wait_action1(void*) { - /* Nonmatching */ +int daNpc_Kk1_c::wait_action1(void* arg0) { + + u8 temp_r0; + u8 temp_r0_2; + + temp_r0 = this->field_0x821; + switch ((s8) temp_r0) { + + case 0: + if (dKy_daynight_check() == 0) { + this->field_0x7B7 = 0; + setStt(1); + this->field_0x821 += 1; + } else { + setStt(4); + this->field_0x821 += 1; + } + break; + + case 9: + default: + break; + case 1: + case 2: + case 3: + field_0x7C2 = chkAttention(); + + switch (field_0x81C) { + case 1: + field_0x778 = wait_1(); + break; + case 2: + field_0x778 = talk_1(); + break; + case 3: + field_0x778 = walk_1(); + break; + case 4: + field_0x778 = wait_2(); + break; + case 5: + field_0x778 = cmmt_1(); + break; + case 6: + field_0x778 = wait_3(); + break; + case 7: + field_0x778 = wait_4(); + break; + } + break; + } + return 1; } /* 000053F4-00005534 .text demo__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::demo() { - /* Nonmatching */ +u8 daNpc_Kk1_c::demo() { + + //dDemo_actor_c *this_00; + J3DAnmTexPattern *pJVar2; + + if (demoActorID == 0) { + if (field_0x7C6 != 0) { + field_0x7C6 = 0; + } + } + else { + if (field_0x7C6 == NULL) { + field_0x7C6 = 1; + field_0x7BF = 0; + + m_jnt.setHead_y(0); + m_jnt.setHead_x(0); + m_jnt.setBackBone_y(0); + m_jnt.setBackBone_x(0); + + } + dDemo_actor_c* this_00 = dComIfGp_demo_getActor(demoActorID); + + pJVar2 = mBtpAnm.getBtpAnm(); + + if (pJVar2 != NULL) { + + u8 cmp = pJVar2 ->getFrameMax(); + field_0x6EC += 1; + if (field_0x6EC >= cmp) { + field_0x6EC = cmp; + } + } + + pJVar2 = (J3DAnmTexPattern*)(this_00)->getP_BtpData(&mArcName); + if (pJVar2 != NULL) { + mBtpAnm.init(mpMorf->getModel()->getModelData(),pJVar2,1,0,1.0,0,-1,true,0); + + field_0x819 = 1; + field_0x6EC = 0; + } + dDemo_setDemoData(this,0x6A,mpMorf,&mArcName,0,0,0,0); + + } + return field_0x7C6; + } /* 00005534-000055C4 .text shadowDraw__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::shadowDraw() { - /* Nonmatching */ + + cXyz local_18(current.pos.x,current.pos.y + 150.0f, current.pos.z); + + GXTexObj* tex = dDlst_shadowControl_c::getSimpleTex(); + + mShadowID = dComIfGd_setShadow(mShadowID,1,mpMorf->getModel(),&local_18,800.0f,40.0f,current.pos.y,mObjAcch.GetGroundH(), + mObjAcch.m_gnd,&tevStr,0,1.0,tex); + } /* 000055C4-00005798 .text _draw__11daNpc_Kk1_cFv */ From 7387d532f575c3a60df3bbb57212ae6f49e6e83c Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Fri, 23 May 2025 01:08:09 -0500 Subject: [PATCH 11/15] Equivalent. A lot of work is needed to name variables and clean up functions. Weak function ordering is wrong. --- configure.py | 2 +- include/d/actor/d_a_npc_kk1.h | 92 +++---- src/d/actor/d_a_npc_kk1.cpp | 505 ++++++++++++++++++++++++---------- 3 files changed, 400 insertions(+), 199 deletions(-) diff --git a/configure.py b/configure.py index 277eb6588..323b5af93 100755 --- a/configure.py +++ b/configure.py @@ -1604,7 +1604,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_kf1"), ActorRel(NonMatching, "d_a_npc_kg1"), ActorRel(NonMatching, "d_a_npc_kg2"), - ActorRel(NonMatching, "d_a_npc_kk1"), + ActorRel(Equivalent, "d_a_npc_kk1", extra_cflags=['-pragma "nosyminline on"']), # weak func order ActorRel(NonMatching, "d_a_npc_km1"), ActorRel(NonMatching, "d_a_npc_ko1"), ActorRel(NonMatching, "d_a_npc_kp1"), diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index 7ee71522d..a73c06175 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -1,7 +1,8 @@ #ifndef D_A_NPC_KK1_H #define D_A_NPC_KK1_H -#include "d/actor/d_a_player.h" + +#include "JSystem/JParticle/JPAEmitter.h" #include "d/d_npc.h" #include "f_op/f_op_actor.h" #include "m_Do/m_Do_hostIO.h" @@ -19,6 +20,7 @@ public: typedef int (daNpc_Kk1_c::*ActionFunc)(void*); typedef void* (pFunc)(void*, void*); + struct anm_prm_c { s8 field0; s8 field1; @@ -50,14 +52,7 @@ public: u32 field_0x4C; f32 field_0x50; }; - // struct struct_0x7E4{ - // /* 0x0 */ u16 unk0; - // /* 0x2 */ u16 unk2; - // /* 0x4 */ u16 unk4; - // /* 0x6 */ u16 unk6; - // /* 0x8 */ u16 unk8; - // /* 0xA */ u16 unkA; - // }; + int getSWbit(); @@ -70,7 +65,7 @@ public: int bckResID(int); int btpResID(int); bool setBtp(signed char, bool); - void init_texPttrnAnm(signed char, bool); + bool init_texPttrnAnm(signed char, bool); void play_btp_anm(); void play_eff_anm(); void setAnm_anm(anm_prm_c*); @@ -95,7 +90,7 @@ public: void lookBack(); bool chkAttention(); void setAttention(bool); - BOOL decideType(int); + bool decideType(int); void cut_init_RUN_START(int); bool cut_move_RUN_START(); void cut_init_RUN(int); @@ -126,7 +121,7 @@ public: bool cut_move_RUNAWAY_END(); void privateCut(int); void endEvent(); - void isEventEntry(); + int isEventEntry(); void event_proc(int); bool checkCommandTalk(); bool set_action(ActionFunc, void*); @@ -161,19 +156,19 @@ public: int wait_action1(void*); u8 demo(); void shadowDraw(); - bool _draw(); + BOOL _draw(); bool _execute(); bool _delete(); cPhs_State _create(); - void bodyCreateHeap(); - void effcCreateHeap(); - void CreateHeap(); + BOOL bodyCreateHeap(); + BOOL effcCreateHeap(); + BOOL CreateHeap(); public: /* 0x6C4 */ request_of_phase_process_class field_0x6C4; /* 0x6CC */ s8 mAnmMtxIdx; - /* 0x6CD */ s8 field_0x6CD; //ui bodyCreateHeap + /* 0x6CD */ s8 field_0x6CD; /* 0x6CE */ char mArcName; /* 0x6CF */ u8 field_0x6CF; /* 0x6D0 */ u32 field_0x6D0; @@ -186,25 +181,24 @@ public: /* 0x6FC*/ fpc_ProcID mPartnerProcID; /* 0x700*/ u32 field_0x700; /* 0x704*/ dNpc_PathRun_c mRunPath; - /* 0x70C */ u8 field_0x70C[0x71A - 0x70C]; - /* 0x71A */ s16 field_0x71A; - /* 0x71C */ s16 field_0x71C; + /* 0x70C*/ cXyz field_0x70C; + /* 0x718*/ csXyz field_0x718; /* 0x71E */ csXyz field_0x71E; - /* 0x724 */ u8 field_0x724[0x72C - 0x724]; + /* 0x724 */ u8 field_0x724[0x72C - 0x724]; /* 0x72C */ cXyz field_0x72C; /* 0x738 */ cXyz field_0x738; - /* 0x744 */ u8 field_0x744[0x750 - 0x744]; + /* 0x744 */ u8 field_0x744[0x750 - 0x744]; /* 0x750 */ cXyz field_0x750; /* 0x75C */ cXyz field_0x75C; - /* 0x768 */ f32 field_0x768; - /* 0x76A */ u8 field_0x76A[4]; + /* 0x768 */ f32 field_0x768; + /* 0x76A */ u8 field_0x76A[4]; /* 0x770 */ s16 mAngleY; /* 0x772 */ s16 field_0x772; /* 0x774 */ s16 field_0x774; /* 0x776 */ s16 field_0x776; - /* 0x778 */ int field_0x778; - /* 0x77C */ s16 mEvtIDTbl[0x08]; //8 Elements * U16 = 16 bytes - /* 0x78C */ s16 mEvtIDIdx; //Array Index? + /* 0x778 */ s32 field_0x778; + /* 0x77C */ s16 mEvtIDTbl[8]; + /* 0x78C */ s16 mEvtIDIdx; /* 0x78E */ s8 field_0x78E[0x792 - 0x78E]; /* 0x792 */ s16 field_0x792; /* 0x794 */ s16 field_0x794; @@ -213,7 +207,6 @@ public: /* 0x79A */ s16 field_0x79A; /* 0x79C */ s16 field_0x79C; /* 0x79E */ s16 field_0x79E; - ///* 0x79E */ s8 field_0x79F; /* 0x7A0 */ s16 field_0x7A0; /* 0x7A2 */ s16 field_0x7A2; /* 0x7A4 */ s16 field_0x7A4; @@ -224,16 +217,16 @@ public: /* 0x7AE */ s16 field_0x7AE; /* 0x7B0 */ s16 field_0x7B0; /* 0x7B2 */ s8 field_0x7B2; - /* 0x7B2 */ u8 field_0x7B3; + /* 0x7B3 */ u8 field_0x7B3; /* 0x7B4 */ u8 field_0x7B4; /* 0x7B5 */ u8 field_0x7B5; - /* 0x7B5 */ u8 field_0x7B6; - /* 0x7B5 */ u8 field_0x7B7; + /* 0x7B6 */ u8 field_0x7B6; + /* 0x7B7 */ u8 field_0x7B7; /* 0x7B8 */ u8 field_0x7B8; /* 0x7B9 */ u8 field_0x7B9; /* 0x7BA */ u8 field_0x7BA; /* 0x7BB */ u8 field_0x7BB; - /* 0x7BC */ u8 field_0x7BC; + /* 0x7BC */ s8 field_0x7BC; /* 0x7BD */ u8 field_0x7BD; /* 0x7BE */ u8 field_0x7BE; /* 0x7BF */ u8 field_0x7BF; @@ -244,22 +237,16 @@ public: /* 0x7C4 */ bool field_0x7C4; /* 0x7C5 */ bool field_0x7C5; /* 0x7C6 */ u8 field_0x7C6; - /* 0x7C5 */ u8 field_0x7C7[0x7CF - 0x7C7]; - /* 0x7CF */ u8 field_0x7CF; - /* 0x7D0 */ anm_prm_c* field_0x7D0; - /* 0x7D4 */ u8 field_0x7D4[0x7DC - 0x7D4]; - // /* 0x7E4 */ s16* field_0x7E4; //Appears to be a struct - // /* 0x7E8 */ u8 field_0x7E8[0x7F0 - 0x7E8]; - mDoExt_btkAnm field_0x7DC; + /* 0x7C7 */ u8 field_0x7C7; + /* 0x7C8 */ mDoExt_bpkAnm field_0x7C8; + /* 0x7DC */ mDoExt_btkAnm field_0x7DC; /* 0x7F0 */ mDoExt_bckAnm field_0x7F0; /* 0x800 */ s16 field_0x800; /* 0x802 */ s16 field_0x802; /* 0x804 */ s16 field_0x804; /* 0x806 */ u16 field_0x806; -//TODO: SOME KIND OF STRUCT HERE? - /* 0x808*/ J3DModel* field_0x808; //Offset 0 - /* 0x80C */ //J3DModelData* field_0x80C; //Offset 4 - u8 field_0x80C[0x810-0x80C]; + /* 0x808*/ J3DModel* field_0x808; + /* 0x80C*/ u8 field_0x80C[0x810-0x80C]; /* 0x810 */ JPABaseEmitter* field_0x810; /* 0x814 */ s8 mCutsceneIndex; /* 0x815 */ s8 field_0x815; @@ -277,7 +264,6 @@ public: /* 0x821 */ s8 field_0x821; /* 0x822 */ s8 field_0x822; /* 0x823 */ s8 field_0x823; - }; // Size: 0x824 class daNpc_Kk1_HIO_c : mDoHIO_entry_c{ @@ -290,30 +276,34 @@ public: /* 0x08 */ s32 field_0xA; /* 0x0C */ s16 field_0xC; /* 0x0E */ s16 field_0xE; - /* 0x10 */ u8 mUnusedU8; - /* 0x11 */ u8 field_0x11[0x1E - 0x11]; - /* 0x1E */ s16 field_0x1E; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ s16 field_0x16; + /* 0x18 */ s16 field_0x18; + /* 0x1A */ s16 field_0x1A; + /* 0x1C */ s16 field_0x1C; + /* 0x1E */ s16 field_0x1E; /* 0x20 */ f32 field_0x20; - /* 0x24 */ s16 field_0x24; + /* 0x24 */ u8 field_0x24; + /* 0x25 */ u8 field_0x25; /* 0x26 */ s16 field_0x26; /* 0x28 */ s16 field_0x28; /* 0x28 */ s16 field_0x2A; /* 0x2C */ s16 field_0x2C; /* 0x2C */ s16 field_0x2E; - /* 0x30 */ s16 field_0x30; //TODO: Struct + /* 0x30 */ s16 field_0x30; /* 0x32 */ s16 field_0x32; /* 0x34 */ f32 field_0x34; /* 0x38 */ f32 field_0x38; /* 0x3C */ f32 field_0x3C; /* 0x40 */ f32 field_0x40; /* 0x44 */ f32 field_0x44; - ///* 0x46 */ s16 field_0x46; /* 0x48 */ f32 field_0x48; /* 0x4C */ f32 field_0x4C; /* 0x50 */ f32 field_0x50; /* 0x54 */ f32 field_0x54; /* 0x58 */ f32 field_0x58; /* 0x5C */ f32 field_0x5C; - /* Place member variables here */ }; #endif /* D_A_NPC_KK1_H */ diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index f97ec1380..5aea405cd 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -5,6 +5,7 @@ #include "d/actor/d_a_npc_kk1.h" #include "SSystem/SComponent/c_counter.h" +#include "c/c_dylink.h" #include "d/actor/d_a_obj_roten.h" #include "d/actor/d_a_player.h" #include "d/actor/d_a_swc00.h" @@ -13,9 +14,34 @@ #include "d/d_procname.h" #include "d/d_priority.h" #include "d/d_s_play.h" +#include "d/d_snap.h" +#include "f_op/f_op_actor_mng.h" + + +#define SHORT2DEG_ANGLE(deg) ((deg) / (65536.0f / 360.0f)) +#define LINKPOS (dComIfGp_getLinkPlayer()->current.pos) +//Needed to align .bss +static u8 label3569[12]; +static u8 label1036[1]; +static u8 label1034[1]; +static u8 label1032[1]; +static u8 label1031[1]; +static u8 label1026[1]; +static u8 label1024[1]; +static u8 label1022[1]; +static u8 label1021[1]; +static u8 label984[1]; +static u8 label982[1]; +static u8 label980[1]; +static u8 label979[1]; +static u8 label941[1]; +static u8 label939[1]; +static u8 label937[1]; +static u8 label936[1]; +// static daNpc_Kk1_HIO_c l_HIO; @@ -64,7 +90,6 @@ static BOOL nodeCB_Head(J3DNode* arg0, int arg1) { /* 000001E4-00000304 .text _nodeCB_Head__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ void daNpc_Kk1_c::_nodeCB_Head(J3DNode* node, J3DModel* model) { - /* Nonmatching */ //.bss Misallocated? static cXyz a_eye_pos_off(14.0f,18.0f,0.0f); u16 joint_number = ((J3DJoint*)(node))->getJntNo(); @@ -104,10 +129,9 @@ void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode* node, J3DModel* model) { } /* 0000042C-0000044C .text CheckCreateHeap__FP10fopAc_ac_c */ -static void CheckCreateHeap(fopAc_ac_c* param_1) { +static int CheckCreateHeap(fopAc_ac_c* param_1) { - ((daNpc_Kk1_c*)param_1)->CreateHeap(); - return; + return ((daNpc_Kk1_c*)param_1)->CreateHeap(); } @@ -307,7 +331,6 @@ bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { return false; } else { - pJVar1 = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(&mArcName,btpResID(param_1)); if (pJVar1 == 0) { u32 uVar2 = JUTAssertion::getSDevice(); @@ -323,16 +346,15 @@ bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { } /* 00000BC4-00000BE4 .text init_texPttrnAnm__11daNpc_Kk1_cFScb */ -void daNpc_Kk1_c::init_texPttrnAnm(signed char param_1, bool param_2) { - setBtp(param_1, param_2); - return; +bool daNpc_Kk1_c::init_texPttrnAnm(signed char param_1, bool param_2) { + return setBtp(param_1, param_2); } /* 00000BE4-00000C80 .text play_btp_anm__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::play_btp_anm() { - u8 uVar1; - uVar1 = mBtpAnm.getBtpAnm()->getFrameMax();// getAnmTable()->mMaxFrame; + + u8 uVar1 = mBtpAnm.getBtpAnm()->getFrameMax(); if ((field_0x819 != 0) || (cLib_calcTimer(&field_0x6EE) == 0)) { field_0x6EC = field_0x6EC + 1; @@ -741,22 +763,22 @@ u32 daNpc_Kk1_c::getMsg_KK1_0() { if (field_0x7BA != 0) { field_0x7BA = 0; - return 0x1ca1; + return 0x1CA1; } else { - return 0x1c8b; + return 0x1C8B; } } - else { //If Day - if (dComIfGs_isEventBit(0xe08) == 0) { - if(dComIfGs_isEventBit(0xe10)){ + else { + if (dComIfGs_isEventBit(0xE08) == 0) { //If Day + if(dComIfGs_isEventBit(0xE10)){ return 0x1C87; }else{ return 0x1C88; } } else { - return 0x1c85; + return 0x1C85; } } } @@ -777,7 +799,7 @@ void daNpc_Kk1_c::eventOrder() { char cVar1 = field_0x81B; if ((cVar1 == '\x01') || (cVar1 == '\x02')) { eventInfo.onCondition(dEvtCnd_CANTALK_e); - if(field_0x81B == '\x01'){ //1 = Speaking? + if(field_0x81B == '\x01'){ fopAcM_orderSpeakEvent(this); } }else if (cVar1 >= 0x03){ @@ -987,8 +1009,8 @@ void daNpc_Kk1_c::setAttention(bool i_attn_flag) { } /* 00001BE8-00001C70 .text decideType__11daNpc_Kk1_cFi */ -BOOL daNpc_Kk1_c::decideType(int) { - BOOL ret; +bool daNpc_Kk1_c::decideType(int) { + bool ret; if(field_0x81F > 0){ ret = true; } @@ -1085,8 +1107,8 @@ bool daNpc_Kk1_c::cut_move_CATCH_START() { /* 00001F2C-00001FAC .text cut_init_CATCH_END__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_CATCH_END(int param_1) { - daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); - player->offPlayerNoDraw(); + + ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); current.angle.y += 0x8000; setAnm_NUM(0,1); mpMorf->setMorf(0.0); @@ -1121,7 +1143,7 @@ void daNpc_Kk1_c::cut_init_TRN(int) { field_0x7C4 = 1; return; } - mRunPath.setNearPathIndx(&dComIfGp_getLinkPlayer()->current.pos,100); + mRunPath.setNearPathIndx(&LINKPOS,100); u8 linkPathIndex = mRunPath.mCurrPointIndex; mRunPath.setNearPathIndx(¤t.pos,100); @@ -1142,7 +1164,7 @@ void daNpc_Kk1_c::cut_init_TRN(int) { if (r26 == 0){ cXyz muuruPoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); f32 muuruDistance = (current.pos - muuruPoint).absXZ(); - f32 linkDistance = (dComIfGp_getLinkPlayer()->current.pos - muuruPoint).absXZ(); + f32 linkDistance = (LINKPOS - muuruPoint).absXZ(); bVar10 = (linkDistance < muuruDistance); } @@ -1211,11 +1233,11 @@ void daNpc_Kk1_c::cut_init_BYE(int param_1) { /* 00002490-00002568 .text cut_move_BYE__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_BYE() { - - event_move(0); - if (field_0x79A > 0) { + //TODO: This can likely be written much better. + event_move(0); + if (field_0x79A > 0) { if (cLib_calcTimer(&field_0x79A) == 0) { - ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos,-0x3217); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,-0x3217); daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); player->mDemo.setDemoType(3); player->mDemo.setParam0(0); @@ -1263,8 +1285,8 @@ void daNpc_Kk1_c::cut_init_BYE_END(int) { ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); - s16 angle_y = cLib_targetAngleY(&((daPy_py_c*)dComIfGp_getLinkPlayer())->current.pos,¤t.pos); - ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos, angle_y); + s16 angle_y = cLib_targetAngleY(&LINKPOS,¤t.pos); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS, angle_y); ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); field_0x7C0 = 1; } @@ -1290,7 +1312,7 @@ void daNpc_Kk1_c::cut_init_OTOBOKE(int) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(1); player->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); - ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos, current.angle.y); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS, current.angle.y); field_0x798 = 2; return; } @@ -1311,11 +1333,11 @@ bool daNpc_Kk1_c::cut_move_OTOBOKE() { void daNpc_Kk1_c::cut_init_PLYER_MOV(int param_1) { cXyz cStack_1c; - s16 sVar3 = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos); + s16 sVar3 = cLib_targetAngleY(¤t.pos,&LINKPOS); sVar3 = sVar3 - current.angle.y; if(abs(sVar3)>0x2000){ - dComIfGp_evmng_setGoal(&dComIfGp_getLinkPlayer()->current.pos); + dComIfGp_evmng_setGoal(&LINKPOS); }else{ cXyz local_28; local_28.setall(0.0); @@ -1346,9 +1368,9 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); - short sVar4 = cLib_targetAngleY(&dComIfGp_getLinkPlayer()->current.pos,¤t.pos); - ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos,sVar4); - s16 r29=cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos); + short sVar4 = cLib_targetAngleY(&LINKPOS,¤t.pos); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,sVar4); + s16 r29=cLib_targetAngleY(¤t.pos,&LINKPOS); shape_angle.y = r29 + 0x8000; @@ -1387,8 +1409,7 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { bool daNpc_Kk1_c::cut_move_RUNAWAY_START() { if(field_0x81A == 8){ if(field_0x7B2 != 0){ - daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); - current.angle.y = cLib_targetAngleY(¤t.pos,&player->current.pos); + current.angle.y = cLib_targetAngleY(¤t.pos,&LINKPOS); setAnm_NUM(0,1); mpMorf->setMorf(0.0); return true; @@ -1406,7 +1427,6 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_END(int) { field_0x7B6 = 0; speedF = 0.0; field_0x7C0 = 1; - return; } @@ -1570,9 +1590,9 @@ void daNpc_Kk1_c::endEvent() { } /* 00002DBC-00002DF4 .text isEventEntry__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::isEventEntry() { - dComIfGp_evmng_getMyStaffId(mEventCut.getActorName(),NULL,0); - return; +int daNpc_Kk1_c::isEventEntry() { + return dComIfGp_evmng_getMyStaffId(mEventCut.getActorName(),NULL,0); + } /* 00002DF4-00002F80 .text event_proc__11daNpc_Kk1_cFi */ @@ -1753,10 +1773,10 @@ void daNpc_Kk1_c::createTama(float param_1) { /* 000032D8-0000345C .text chk_areaIN__11daNpc_Kk1_cFf4cXyz */ bool daNpc_Kk1_c::chk_areaIN(float param_1, cXyz param_2) { - float distanceXZ = (dComIfGp_getLinkPlayer()->current.pos - param_2).absXZ(); + float distanceXZ = (LINKPOS - param_2).absXZ(); - s16 angdiff = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos) - current.angle.y; + s16 angdiff = cLib_targetAngleY(¤t.pos,&LINKPOS) - current.angle.y; float fVar1 = param_1; if (abs(angdiff) > 0x4E38) { fVar1 *= 0.5f; @@ -1778,7 +1798,7 @@ bool daNpc_Kk1_c::startEvent_check() { uVar3 = chk_areaIN(l_HIO.field_0x5C,current.pos); if ((uVar3 & 0xff) != 0) { - fVar4 = current.pos.abs(dComIfGp_getLinkPlayer()->current.pos); + fVar4 = current.pos.abs(LINKPOS); if ((fVar4 < g_regHIO.mChild[9].mFloatRegs[0] + 210.0f) || (field_0x6ba != 0)) { @@ -1946,73 +1966,18 @@ bool daNpc_Kk1_c::kyorokyoro() { /* 00003A84-00003C9C .text chk_attn__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::chk_attn() { - /* Nonmatching */ - // float fVar1; - // bool bVar2; - // short sVar4; - // int iVar3; - // cXyz local_54; - // cXyz local_48 [2]; - // int uVar5; - // s16 fVar6 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); - // fVar1 = current.pos.y - dComIfGp_getLinkPlayer()->current.pos.y; - // sVar4 = cLib_targetAngleY(¤t.pos,&dComIfGp_getLinkPlayer()->current.pos); - // iVar3 = (sVar4 - current.angle.y); - // if(field_0x81E == 1){ - // u32 uVar5 = 0; - // bVar2 = false; - // if (fVar6 < 200.0 && (fabs(iVar3)/182.0444) < 90.0){ - // bVar2 = true; - // } - // if ((bVar2) && (fabs(fVar1) < 300.0)) { - // uVar5 = 1; - // } - // //return uVar5; - // } - // else{ - // uVar5 = 0; - // bVar2 = false; - // if((fVar6 < 200.0f)&&(fabs(iVar3) / 182.0444 < 60.0)){ - // bVar2 = true; - // } - // if((bVar2) && (abs(fVar1)) < 300.0){ - // uVar5 = 1; - // } - // } - // return uVar5; - - - f32 fVar6; - - u8 bVar2; - bool retval = 0; - - fVar6 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); - - f32 fVar1 = current.pos.y - dComIfGp_getLinkPlayer()->current.pos.y; - s16 sVar4 = cLib_targetAngleY(¤t.pos, &dComIfGp_getLinkPlayer()->current.pos); - s16 iVar3 = (sVar4 - current.angle.y); + f32 distToLinkXZ = (current.pos-LINKPOS).absXZ(); + f32 heightDiff = current.pos.y - LINKPOS.y; + s16 iVar3 = cLib_targetAngleY(¤t.pos, &LINKPOS) - current.angle.y; if ((s32)field_0x81E == 1) { - retval = 0; - bVar2 = 0; - if ((fVar6 < 200.0f) && (((f32)abs(iVar3) / 182.04445f) < 90.0f)) { - bVar2 = 1; - } - if ((bVar2) && (std::fabsf(fVar1) < 300.0f)) { - retval = 1; - } - return retval; + return distToLinkXZ < 200.0f && + SHORT2DEG_ANGLE(abs(iVar3)) < 90.0f && //TODO: Possible inline (cAngle::s2d()) + std::fabsf(heightDiff) < 300.0f; }else{ - retval = 0; - bVar2 = 0; - if ((fVar6 < 200.0f) && (((f32) abs(iVar3) / 182.04445f) < 60.0f)) { - bVar2 = 1; - } - if ((bVar2) && (std::fabsf(fVar1) < 300.0f)) { - retval = 1; - } - return retval; + return distToLinkXZ < 200.0f && + SHORT2DEG_ANGLE(abs(iVar3)) < 60.0f && + std::fabsf(heightDiff) < 300.0f; } @@ -2056,7 +2021,6 @@ void daNpc_Kk1_c::setAse() { /* 00003E18-00003EA4 .text flwAse__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::flwAse() { - JPABaseEmitter* iVar3; JGeometry::TVec3 out; if (field_0x810 != NULL) { mDoMtx_stack_c::copy(mpMorf->mpModel->getAnmMtx(mAnmMtxIdx)); @@ -2121,7 +2085,7 @@ BOOL daNpc_Kk1_c::wait_1() { cXyz sp14(-100.0f,0.0f,0.0f); mDoMtx_stack_c::transS(current.pos); - mDoMtx_YrotM(mDoMtx_stack_c::get(),field_0x71A); + mDoMtx_YrotM(mDoMtx_stack_c::get(),field_0x718.y); mDoMtx_stack_c::multVec(&sp14,&sp20); s16 temp_r3_r2 = cLib_targetAngleY(¤t.pos,&sp20); @@ -2137,7 +2101,7 @@ BOOL daNpc_Kk1_c::wait_1() { } if(cLib_calcTimer(&field_0x7A4) == 0){ if(mRunPath.mPath != NULL){ - u8 temp_r3_3 = mRunPath.maxPoint(); + u32 temp_r3_3 = mRunPath.maxPoint(); if((temp_r3_3 > 2) && (((daObj_Roten_c*)temp_r3_3)->getCreateCount() > 1)){ field_0x7B6 = 1; return 1; @@ -2228,7 +2192,7 @@ BOOL daNpc_Kk1_c::walk_1() { BOOL daNpc_Kk1_c::wait_2() { int sp8; - cLib_addCalcAngleS(¤t.angle.y,field_0x71A,4,0x800,0x80); + cLib_addCalcAngleS(¤t.angle.y,field_0x718.y,4,0x800,0x80); if(field_0x7C3 != 0){ if(chk_talk() != 0){ setStt(2); @@ -2250,7 +2214,7 @@ BOOL daNpc_Kk1_c::wait_2() { if((temp_r4 != 0xFF) && (dComIfGs_isSwitch(temp_r4,current.roomNo) != 0)){ fopAc_ac_c* temp_r3 = searchByID(mPartnerProcID,&sp8); if((temp_r3 != NULL) && (sp8 == 0)){ - s16 difference = cLib_targetAngleY(&temp_r3->current.pos,&dComIfGp_getLinkPlayer()->current.pos)-temp_r3->current.angle.y; + s16 difference = cLib_targetAngleY(&temp_r3->current.pos,&LINKPOS)-temp_r3->current.angle.y; if(abs(difference) < 0x4000){ field_0x81B = 4; }else{ @@ -2286,7 +2250,6 @@ void daNpc_Kk1_c::move_CMT_WAI() { sVar2 = cLib_calcTimer(&field_0x7A4); if (sVar2 == 0) { if ((field_0x81B != 1) && (field_0x81B < 3)) { - //local_18 = ; uVar1 = chk_areaIN(l_HIO.field_0x5C,current.pos); if ((uVar1 & 0xff) != 0) { this->field_0x81B = 8; @@ -2392,7 +2355,7 @@ void daNpc_Kk1_c::init_CMT_PCK() { /* 00004A84-00004C34 .text move_CMT_PCK__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::move_CMT_PCK() { - /* Nonmatching */ + cXyz sp8; s16 temp_r3; u8 temp_r0; @@ -2434,8 +2397,7 @@ void daNpc_Kk1_c::move_CMT_PCK() { /* 00004C34-00004DD0 .text cmmt_1__11daNpc_Kk1_cFv */ BOOL daNpc_Kk1_c::cmmt_1() { - /* Nonmatching */ - u8 temp_r0; + u8 temp_r0_4; @@ -2494,11 +2456,11 @@ BOOL daNpc_Kk1_c::wait_3() { - float fVar4 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + float distToLinkXZ = (current.pos-LINKPOS).absXZ(); - field_0x7C5 = fVar4 > 300.0f; + field_0x7C5 = distToLinkXZ > 300.0f; if (field_0x7C5) { - cLib_addCalcAngleS(¤t.angle.y,field_0x71A,4,0x800,0x80); + cLib_addCalcAngleS(¤t.angle.y,field_0x718.y,4,0x800,0x80); } if (field_0x7C3 != 0) { if (chk_talk()) { @@ -2526,18 +2488,12 @@ BOOL daNpc_Kk1_c::wait_3() { /* 00004F74-00005170 .text wait_4__11daNpc_Kk1_cFv */ BOOL daNpc_Kk1_c::wait_4() { - /* Nonmatching */ - float fVar1; - bool bVar3; + short target; int iVar2; float fVar4; - cXyz local_44; - cXyz local_38; - cXyz local_2c; cXyz local_20 [2]; - - fVar4 = (current.pos-dComIfGp_getLinkPlayer()->current.pos).absXZ(); + fVar4 = (current.pos-LINKPOS).absXZ(); @@ -2629,10 +2585,7 @@ BOOL daNpc_Kk1_c::talk_1() { /* 000052B4-000053F4 .text wait_action1__11daNpc_Kk1_cFPv */ int daNpc_Kk1_c::wait_action1(void* arg0) { - u8 temp_r0; - u8 temp_r0_2; - - temp_r0 = this->field_0x821; + u8 temp_r0 = this->field_0x821; switch ((s8) temp_r0) { case 0: @@ -2685,7 +2638,6 @@ int daNpc_Kk1_c::wait_action1(void* arg0) { /* 000053F4-00005534 .text demo__11daNpc_Kk1_cFv */ u8 daNpc_Kk1_c::demo() { - //dDemo_actor_c *this_00; J3DAnmTexPattern *pJVar2; if (demoActorID == 0) { @@ -2735,47 +2687,306 @@ u8 daNpc_Kk1_c::demo() { void daNpc_Kk1_c::shadowDraw() { cXyz local_18(current.pos.x,current.pos.y + 150.0f, current.pos.z); - GXTexObj* tex = dDlst_shadowControl_c::getSimpleTex(); - mShadowID = dComIfGd_setShadow(mShadowID,1,mpMorf->getModel(),&local_18,800.0f,40.0f,current.pos.y,mObjAcch.GetGroundH(), mObjAcch.m_gnd,&tevStr,0,1.0,tex); } /* 000055C4-00005798 .text _draw__11daNpc_Kk1_cFv */ -bool daNpc_Kk1_c::_draw() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::_draw() { + + J3DModelData *pJVar1; + J3DModel *pJVar2; + + dBgS* dbgs; + + pJVar2 = mpMorf->getModel(); + + pJVar1 = pJVar2->getModelData(); + dbgs = dComIfG_Bgsp(); + if ((field_0x7BD) || (field_0x7C0)) { + return 1; + } + g_env_light.settingTevStruct(TEV_TYPE_ACTOR,¤t.pos,&tevStr); + g_env_light.setLightTevColorType(pJVar2,&tevStr); + + mBtpAnm.entry(pJVar1,field_0x6EC); + mpMorf->entryDL(); + mBtpAnm.remove(pJVar1); + if (!field_0x7BE) { + field_0x7C8.entry(field_0x808->getModelData(),field_0x800); + + field_0x7DC.entry(field_0x808->getModelData(),field_0x802); + mDoExt_modelEntryDL(field_0x808); + field_0x7DC.remove(field_0x808->getModelData()); + field_0x7C8.remove(field_0x808->getModelData()); + } + shadowDraw(); + dSnap_RegistFig(0x58,(fopAc_ac_c *)this,1.0,1.0,1.0); + + if (l_HIO.field_0x24) { + cXyz somevec = current.pos; + somevec.y = eyePos.y; + somevec = mRunPath.getPoint(mRunPath.mCurrPointIndex); + } + return 1; } +//Needed to fill .rodata +const u16 fillerbytes[12] ={0x00FF,0x0080,0xFFFF,0x0080, + 0xFF00,0x0080,0x0000,0xFF80, + 0xFFFF,0x0080,0x00FF,0x0080}; /* 00005798-000059EC .text _execute__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::_execute() { - /* Nonmatching */ + + float radius; + int cVar1; + int iVar3; + + if (!field_0x7C1) { + field_0x70C = current.pos; + field_0x718 = current.angle; + field_0x7C1 = 1; + } + m_jnt.setParam( + l_HIO.field_0x14,l_HIO.field_0x16, + l_HIO.field_0x18,l_HIO.field_0x1A, + l_HIO.field_0xC,l_HIO.field_0xE, + l_HIO.field_0x10,l_HIO.field_0x12, + l_HIO.field_0x1C + ); + + if ((field_0x7BD ) && (!demoActorID)) { + return 1; + } + partner_search(); + checkOrder(); + cVar1 = demo(); + if (!cVar1) { + iVar3 = -1; + if ((dComIfGp_event_runCheck())){ + cVar1 = checkCommandTalk(); + if (cVar1 == 0) { + iVar3 = isEventEntry(); + } + } + if (iVar3 >= 0) { + event_proc(iVar3); + } + else { + (this->*field_0x6F0)(NULL); + } + field_0x6ba = 0; + lookBack(); + fopAcM_posMoveF(this,mStts.GetCCMoveP()); + mObjAcch.CrrPos(*dComIfG_Bgsp()); + play_animation(); + } + else { + field_0x7BD = 0; + } + eventOrder(); + field_0x71E = current.angle; + + if (!field_0x7BF) { + shape_angle = current.angle; + } + + cVar1 = dComIfG_Bgsp()->GetRoomId(mObjAcch.m_gnd); + tevStr.mRoomNo = cVar1; + u8 bVar2 = dComIfG_Bgsp()->GetPolyColor(mObjAcch.m_gnd); + tevStr.mEnvrIdxOverride = bVar2; + setMtx(false); + if (!(field_0x7C6 ) && !(field_0x7BB)) { + if (field_0x81A == 1) { + radius = 60.0; + } + else { + radius = 40.0; + } + setCollision(radius,140.0); + } + + return 1; } + /* 000059EC-00005A58 .text _delete__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::_delete() { - /* Nonmatching */ + cDyl_Unlink(0x1D6); + dComIfG_resDelete(&field_0x6C4,&mArcName); + delBikon(); + delAse(); + if(heap != NULL && mpMorf != NULL){ + mpMorf->stopZelAnime(); + } + return 1; } - +static u32 a_siz_tbl[2] = {0x0,0x0}; /* 00005A58-00005B98 .text _create__11daNpc_Kk1_cFv */ cPhs_State daNpc_Kk1_c::_create() { - /* Nonmatching */ + + + fopAcM_SetupActor(this,daNpc_Kk1_c); + + + if (!decideType(base.mParameters & 0xff)) { + return cPhs_ERROR_e; + } + + s32 resLoadResult = dComIfG_resLoad(&field_0x6C4,&mArcName); + field_0x7BC = resLoadResult == cPhs_COMPLEATE_e; + + if((u8)field_0x7BC == 0){ + return resLoadResult; + } + + s32 linkresult = cDyl_LinkASync(0x1D6); + if(linkresult != cPhs_COMPLEATE_e){ + return linkresult; + } + + if (!fopAcM_entrySolidHeap(this,CheckCreateHeap,a_siz_tbl[field_0x81F])) { + return cPhs_ERROR_e; + } + cullMtx = (MtxP)mpMorf->mpModel->getBaseTRMtx(); + fopAcM_SetMtx(this,cullMtx); + fopAcM_setCullSizeBox(this,-50.0,-20.0,-50.0,50.0,140.0,50.0); + if (!createInit()) { + return cPhs_ERROR_e; + } + + return resLoadResult; } /* 00006118-0000638C .text bodyCreateHeap__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::bodyCreateHeap() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::bodyCreateHeap() { + + J3DModelData *pModelData; + mDoExt_McaMorf *pmVar2; + + + + pModelData = (J3DModelData*)dComIfG_getObjectIDRes(&mArcName,0xD); + pModelData->getJointName(); + + if (pModelData == NULL) { + JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xdd6,"a_mdl_dat != 0"); + OSPanic("d_a_npc_kk1.cpp",0xdd6,"Halt"); + } + + pmVar2 = new mDoExt_McaMorf(pModelData,NULL,NULL,NULL, + -0x1,1.0,0,-1,1,NULL,0x80000,0x11020022); + + + mpMorf = pmVar2; + pmVar2 = mpMorf; + if (pmVar2 == NULL) { + return 0; + } + else if (pmVar2->mpModel == NULL) { + mpMorf = NULL; + return 0; + } + + + if (!init_texPttrnAnm(0,false)) { + mpMorf = NULL; + return 0; + } + + mAnmMtxIdx = pModelData->getJointName()->getIndex("head"); + if (mAnmMtxIdx < 0) { + JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xdea,"m_hed_jnt_num >= 0"); + OSPanic("d_a_npc_kk1.cpp",0xdea,"Halt"); + } + field_0x6CD = pModelData->getJointName()->getIndex("backbone"); + if (field_0x6CD < 0) { + JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xdec,"m_bbone_jnt_num >= 0"); + OSPanic("d_a_npc_kk1.cpp",0xdec,"Halt"); + } + mpMorf->mpModel->getModelData()->getJointNodePointer(mAnmMtxIdx)->setCallBack(nodeCB_Head); + mpMorf->mpModel->getModelData()->getJointNodePointer(field_0x6CD)->setCallBack(nodeCB_BackBone); + mpMorf->mpModel->setUserArea((u32)this); + return 1; + } /* 0000638C-000065E0 .text effcCreateHeap__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::effcCreateHeap() { - /* Nonmatching */ +BOOL daNpc_Kk1_c::effcCreateHeap() { + + J3DModelData *pModel; + J3DModel *pJVar1; + J3DAnmColor *pvVar2; + + int iVar4; + J3DAnmTextureSRTKey *pAnm; + J3DAnmTransform *pJVar5; + + pModel = (J3DModelData*)dComIfG_getObjectIDRes(&mArcName,0xE); + + pJVar1 = mDoExt_J3DModel__create(pModel,0x0,0x11020203); + field_0x808 = pJVar1; + if(field_0x808 != NULL){ + + pvVar2 = (J3DAnmColor*)dComIfG_getObjectIDRes(&mArcName,0xF); + if(pvVar2 == NULL){ + + JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xE01,"0 != a_bpk"); + OSPanic("d_a_npc_kk1.cpp",0xE01,"Halt"); + } + iVar4 = field_0x7C8.init(field_0x808->getModelData(),pvVar2,true,0,0.0,0,-1,false,0); + if(iVar4 == 0){ + return 0; + } + pAnm = (J3DAnmTextureSRTKey*)dComIfG_getObjectIDRes(&mArcName,0x10); + if(pAnm == NULL){ + JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xE09,"0 != a_btk"); + OSPanic("d_a_npc_kk1.cpp",0xE09,"Halt"); + } + iVar4 = field_0x7DC.init(field_0x808->getModelData(),pAnm,true,0,0.0,0,-1,false,0); + if(iVar4 == 0){ + return 0; + } + pJVar5 = (J3DAnmTransform*)dComIfG_getObjectIDRes(&mArcName,0x0); + if(pJVar5 == NULL){ + JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xE11,"0 != a_bck"); + OSPanic("d_a_npc_kk1.cpp",0xE11,"Halt"); + } + iVar4 = field_0x7F0.init(field_0x808->getModelData(),pJVar5,true,0,0.0,0,-1,false); + if(iVar4 == 0){ + return 0; + } + field_0x800 = 0; + field_0x802 = 0; + field_0x804 = 0; + } + return 1; } /* 000065E0-00006684 .text CreateHeap__11daNpc_Kk1_cFv */ -void daNpc_Kk1_c::CreateHeap() { - return; +BOOL daNpc_Kk1_c::CreateHeap() { + + + + if (!bodyCreateHeap()) { + return 0; + + } + else { + if (!effcCreateHeap()) { + mpMorf = NULL; + return 0; + + } + else { + mAcchCir.SetWall(30.0,40.0); + mObjAcch.Set(¤t.pos,&old.pos,this,1,&mAcchCir,&speed,NULL,NULL); + return 1; + + } + } } /* 00006684-000066A4 .text daNpc_Kk1_Create__FP10fopAc_ac_c */ From 6e4f6d1ff6c4cd1a9d2f38bab0f602002aff7465 Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Sat, 24 May 2025 05:56:00 -0500 Subject: [PATCH 12/15] Cleaned some functions, named several variables, and began documenting dialog tree. --- include/d/actor/d_a_npc_kk1.h | 22 +- include/d/d_cc_uty.h | 4 +- src/d/actor/d_a_npc_kk1.cpp | 720 +++++++++++++++++----------------- 3 files changed, 371 insertions(+), 375 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index a73c06175..7668c6a3b 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -192,9 +192,9 @@ public: /* 0x75C */ cXyz field_0x75C; /* 0x768 */ f32 field_0x768; /* 0x76A */ u8 field_0x76A[4]; - /* 0x770 */ s16 mAngleY; - /* 0x772 */ s16 field_0x772; - /* 0x774 */ s16 field_0x774; + /* 0x770 */ s16 mLookBackAngleY; + /* 0x772 */ s16 mLookBackHeadY; + /* 0x774 */ s16 mLookBackBackboneY; /* 0x776 */ s16 field_0x776; /* 0x778 */ s32 field_0x778; /* 0x77C */ s16 mEvtIDTbl[8]; @@ -202,8 +202,8 @@ public: /* 0x78E */ s8 field_0x78E[0x792 - 0x78E]; /* 0x792 */ s16 field_0x792; /* 0x794 */ s16 field_0x794; - /* 0x796 */ s16 field_0x796; - /* 0x798 */ s16 field_0x798; + /* 0x796 */ s16 mKyoroRNG; + /* 0x798 */ s16 mTimer; /* 0x79A */ s16 field_0x79A; /* 0x79C */ s16 field_0x79C; /* 0x79E */ s16 field_0x79E; @@ -214,8 +214,8 @@ public: /* 0x7A8 */ s16 field_0x7A8; /* 0x7AA */ s16 field_0x7AA; /* 0x7AC */ s16 field_0x7AC; - /* 0x7AE */ s16 field_0x7AE; - /* 0x7B0 */ s16 field_0x7B0; + /* 0x7AE */ s16 mMuuruBadResponse; + /* 0x7B0 */ s16 mPrm0; /* 0x7B2 */ s8 field_0x7B2; /* 0x7B3 */ u8 field_0x7B3; /* 0x7B4 */ u8 field_0x7B4; @@ -234,7 +234,7 @@ public: /* 0x7C1 */ u8 field_0x7C1; /* 0x7C2 */ u8 field_0x7C2; /* 0x7C3 */ u8 field_0x7C3; - /* 0x7C4 */ bool field_0x7C4; + /* 0x7C4 */ bool mLockBodyRotation; /* 0x7C5 */ bool field_0x7C5; /* 0x7C6 */ u8 field_0x7C6; /* 0x7C7 */ u8 field_0x7C7; @@ -258,7 +258,7 @@ public: /* 0x81B */ s8 field_0x81B; /* 0x81C */ s8 field_0x81C; /* 0x81D */ s8 field_0x81D; - /* 0x81E */ u8 field_0x81E; + /* 0x81E */ u8 mWhereToLook; /* 0x81F */ s8 field_0x81F; /* 0x820 */ s8 field_0x820; /* 0x821 */ s8 field_0x821; @@ -292,8 +292,8 @@ public: /* 0x28 */ s16 field_0x2A; /* 0x2C */ s16 field_0x2C; /* 0x2C */ s16 field_0x2E; - /* 0x30 */ s16 field_0x30; - /* 0x32 */ s16 field_0x32; + /* 0x30 */ s16 mScale; + /* 0x32 */ s16 mMaxStep; /* 0x34 */ f32 field_0x34; /* 0x38 */ f32 field_0x38; /* 0x3C */ f32 field_0x3C; diff --git a/include/d/d_cc_uty.h b/include/d/d_cc_uty.h index dd96413e3..7cd2c6b80 100644 --- a/include/d/d_cc_uty.h +++ b/include/d/d_cc_uty.h @@ -29,6 +29,8 @@ void def_se_set_p(fopAc_ac_c*, cXyz*, cCcD_Obj*, unsigned long); fopAc_ac_c* at_power_check(CcAtInfo*); fopAc_ac_c* cc_at_check(fopAc_ac_c*, CcAtInfo*); -inline void dCc_GetAc(void*) {} +inline fopAc_ac_c* dCc_GetAc(void* i_obj) { + return ((cCcD_Obj*)i_obj)->GetAc(); +} #endif /* D_CC_UTY_H */ diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index 5aea405cd..c72efbec2 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -10,38 +10,22 @@ #include "d/actor/d_a_player.h" #include "d/actor/d_a_swc00.h" #include "d/actor/d_a_tama.h" +#include "d/d_cc_uty.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "d/d_priority.h" #include "d/d_s_play.h" #include "d/d_snap.h" #include "f_op/f_op_actor_mng.h" - +#include "weak_bss_936_to_1036.h" //Needed to align bss #define SHORT2DEG_ANGLE(deg) ((deg) / (65536.0f / 360.0f)) #define LINKPOS (dComIfGp_getLinkPlayer()->current.pos) -//Needed to align .bss -static u8 label3569[12]; -static u8 label1036[1]; -static u8 label1034[1]; -static u8 label1032[1]; -static u8 label1031[1]; -static u8 label1026[1]; -static u8 label1024[1]; -static u8 label1022[1]; -static u8 label1021[1]; -static u8 label984[1]; -static u8 label982[1]; -static u8 label980[1]; -static u8 label979[1]; -static u8 label941[1]; -static u8 label939[1]; -static u8 label937[1]; -static u8 label936[1]; -// + + static daNpc_Kk1_HIO_c l_HIO; @@ -73,6 +57,17 @@ char* l_evn_tbl[] = { "run_start", "run_start_2", "catch", "get_empty_btl", "bye", "otoboke", "runaway", "bye_2", }; +//TODO: Declare somewhere else? +enum EVENT_NAME { + RUN_START, + RUN_START_2, + CATCH, + GET_EMPTY_BTL, + BYE, + OTOBOKE, + RUNAWAY, + BYE_2, +}; /* 00000198-000001E4 .text nodeCB_Head__FP7J3DNodei */ @@ -156,14 +151,13 @@ void* searchActor_SWC00(void* i_swc, void* i_kk1) { /* 000004EC-00000598 .text init_KK1_0__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::init_KK1_0() { - bool uVar2; - - if ((dComIfGs_isEventBit(0x2d01) != 0) && ((dKy_daynight_check() == 0) || (dComIfGs_isEventBit(0xe08) == 0))) { + //Some event Daytime Sidequest not finished + if ((dComIfGs_isEventBit(0x2D01)) && ((dKy_daynight_check() == 0) || (dComIfGs_isEventBit(0xe08) == 0))) { set_action(&daNpc_Kk1_c::wait_action1,NULL); - uVar2 = 1; + return true; } else { @@ -482,12 +476,12 @@ void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* param_1) { /* 00000DDC-00000E4C .text setAnm_NUM__11daNpc_Kk1_cFii */ -void daNpc_Kk1_c::setAnm_NUM(int param_1, int param_2) { +void daNpc_Kk1_c::setAnm_NUM(int i_tblIdx, int param_2) { if (param_2 != 0) { - init_texPttrnAnm(a_anm_prm_tblNUM[param_1].field1,true); + init_texPttrnAnm(a_anm_prm_tblNUM[i_tblIdx].field1,true); } - setAnm_anm(&a_anm_prm_tblNUM[param_1]); + setAnm_anm(&a_anm_prm_tblNUM[i_tblIdx]); return; @@ -513,26 +507,26 @@ void daNpc_Kk1_c::ctrlAnmTag() { } /* 00000EC0-00000FA0 .text chngAnmAtr__11daNpc_Kk1_cFUc */ -void daNpc_Kk1_c::chngAnmAtr(unsigned char param_1) { - fopAc_ac_c* iVar1; - int local_18[4]; +void daNpc_Kk1_c::chngAnmAtr(unsigned char i_anmNum) { + fopAc_ac_c* found_actor; + int search_failed; switch(mCurrMsgNo){ - case 0x1CAC: - iVar1 = searchByID(mPartnerProcID,local_18); - if(iVar1 != 0 && local_18[0] == 0){ - field_0x738 = iVar1->current.pos; + case 0x1CAC: //Take off! Go away! + found_actor = searchByID(mPartnerProcID,&search_failed); + if(found_actor != NULL && search_failed == 0){ + field_0x738 = found_actor->current.pos; field_0x738.y += l_HIO.field_0x20 + 200.0f; - field_0x81E = 2; - field_0x7C4 = 1; + mWhereToLook = 2; + mLockBodyRotation = 1; field_0x7A2 = l_HIO.field_0x2E; } break; } - if((param_1 == mAnimationNum) || (param_1 > 0xD)){ + if((i_anmNum == mAnimationNum) || (i_anmNum > 0xD)){ return; } - mAnimationNum = param_1; + mAnimationNum = i_anmNum; setAnm_ATR(); return; @@ -602,183 +596,184 @@ void daNpc_Kk1_c::anmAtr(unsigned short param_1) { break; } ctrlAnmAtr(); - ctrlAnmTag(); + ctrlAnmTag(); //Does nothing } /* 000011A0-0000149C .text next_msgStatus__11daNpc_Kk1_cFPUl */ u16 daNpc_Kk1_c::next_msgStatus(unsigned long* param_1) { - u8 temp_r3; + s32 msg_selection; - u16 var_r0 = 0xF; + u16 message_outcome = 0xF; //0xF = Continue. 0x10 = Run Away. switch (*param_1) { //TODO: Make Enum. - case 0x1C85: + case 0x1C85: //Oh! Hi! We meet again! ...What?! Of course! Honestly! I'm working! How dare you suggest that! I'm done with all that sneaking around in the dark. In fact, I head off to a faraway island to work in the evenings now, so I won't be seeing you at night anymore! *param_1 = 0x1C86; break; - case 0x1C86: + case 0x1C86: //All right? Well, all right. Now, you're keeping me from doing my job, so could you please step aside? *param_1 = 0x1CA7; break; - case 0x1CA7: + case 0x1CA7: //This way to the only stall with extra-fun, happy things for sale! *param_1 = 0x1CA8; break; - case 0x1C88: + case 0x1C88: //Hey, you! Come on! Use your head! You can't just stand there like that! You're in my way! Can't you move? *param_1 = 0x1C89; break; - case 0x1C89: + case 0x1C89: //Oops! That won't do! That won't do at all! Already I'm back to my old habits... I'm terribly sorry! Really, I am! *param_1 = 0x1C8A; break; - case 0x1C8A: + case 0x1C8A: //Umm... *param_1 = 0x1CA9; break; - case 0x1C8B: - *param_1 = 0x1CAC; + case 0x1C8B: //Shh! Shhh! + *param_1 = 0x1CAC; //Take off! Go away! field_0x7B8 = 1; break; - case 0x1C8D: + case 0x1C8D: //Y-Y-You startled me...! Wh-Wh-What do you want? M-M-My heart is racing! You scared me! *param_1 = 0x1C8E; break; - case 0x1C8E: + case 0x1C8E: //Wait... Are you...? ...the kind of creep who goes around at night scaring people?! That's just plain mean! *param_1 = 0x1C8F; break; - case 0x1C8F: + case 0x1C8F: //Just who do you think you are, anyway?! switch (mpCurrMsg->mSelectNum) { - case 0: + case 0: //An ally of justice! *param_1 = 0x1C90; break; - case 1: + case 1: //A night-creeping rascal! *param_1 = 0x1CA5; - field_0x7AE += 1; + mMuuruBadResponse += 1; break; } break; - case 0x1CA5: + case 0x1CA5: //...Hmph! That's not funny, you know. I can't believe you'd try to make a joke out of this! You're an awful boy! *param_1 = 0x1C8F; break; - case 0x1C90: + case 0x1C90: //A...what!?! An... An ally of justice?! I-I'm not a thief! I swear! I haven't stolen anything! Well, yet. Please let me go! It was just an impulse! That's all! Just a bad idea! *param_1 = 0x1C91; - break; - case 0x1C91: + break; + case 0x1C91: //...Why won't you say anything? Does this mean you're mad at me? Could you at least listen to the circumstances in my life that led up to this moment? Please, you owe me that much! switch (mpCurrMsg->mSelectNum) { - case 0: + case 0: //Sure *param_1 = 0x1C93; break; - case 1: + case 1: //Quiet, you! *param_1 = 0x1C92; - field_0x7AE += 1; + mMuuruBadResponse += 1; break; } break; - case 0x1C92: + case 0x1C92: //...What?! Why, that's just cruel! You awful boy! Sometimes there are odd circumstances that make people do what they do! How could you be so close-minded? *param_1 = 0x1C91; break; - case 0x1C93: + case 0x1C93: //I...was once the richest little debutante in this town. Did you know that? But one day, a monstrous bird came and took me away to a terrible place called the Forsaken Fortress, where I was locked up and held captive. Oh, it was awful! My father spent every last Rupee in his coffers in an attempt to get me rescued. *param_1 = 0x1C94; break; - case 0x1C94: - switch ((s32) mpCurrMsg->mSelectNum) { - case 0: + case 0x1C94: //That's right! Every last bit of our family fortune, gone... That was when my life of poverty began. Now, every day, from morning until night, I'm busy working for the open-air shop. So, as you can see, at least I'm trying to settle into my poor lifestyle. Doesn't that just tug at your heart strings? What do you say about the tragic events in my pitiable life? + switch (mpCurrMsg->mSelectNum) { + case 0: //That's terrible *param_1 = 0x1C96; break; - case 1: + case 1: //That's kind of funny *param_1 = 0x1C95; - field_0x7AE += 1; + mMuuruBadResponse += 1; break; } break; - case 0x1C95: + case 0x1C95: //...... *param_1 = 0x1C96; break; - case 0x1C96: + case 0x1C96: //And to make matters worse, for some reason I still can't figure out, that slob Maggie, who was the poorest girl in town, suddenly got filthy rich! Maggie, of all people! It makes me so mad that I want to do something terrible! Grrrr! *param_1 = 0x1C97; break; - case 0x1C97: - + case 0x1C97: //Do you understand my plight? switch (mpCurrMsg->mSelectNum) { - case 0: + case 0: //Very well *param_1 = 0x1C98; break; - case 1: - *param_1 = ((field_0x7AE > 1) ? 1 : 2)+0x1C99; + case 1: //Not at all + *param_1 = ((mMuuruBadResponse > 1) ? 1 : 2)+0x1C99; } break; - case 0x1C98: - temp_r3 = mpCurrMsg->mSelectNum; - switch ((s32) temp_r3) { - case 0: + case 0x1C98: //...Then you'll let me go?! + msg_selection = mpCurrMsg->mSelectNum; + switch ((s32) msg_selection) { + case 0: //Unfortunately, no *param_1 = 0x1C99; break; - case 1: - var_r0 = 0x10; + case 1: //I'll let you go + message_outcome = 0x10; break; } break; - case 0x1C99: + case 0x1C99: //But...why not?!? switch (mpCurrMsg->mSelectNum) { - case 0: - *param_1 = ((field_0x7AE > 1) ? 1 : 2)+0x1C9B; + case 0: //Because I'm honest + *param_1 = ((mMuuruBadResponse > 1) ? 1 : 2)+0x1C9B; break; - case 1: + case 1: //Because I like you *param_1 = 0x1C9A; } break; - case 0x1C9B: + //0x1C9A ...Hah! You awful boy! I was honest with you, too! And now I'm just angry! Good-bye! + case 0x1C9B: //...Ah hee hee hee hee! I'm sorry! I guess it was a little too complicated for a KID to understand! *param_1 = 0x1C9D; break; - case 0x1C9D: + //0x1C9C ...Oh. That's...really annoying! You know? I just remembered! I have something very important that I'm supposed to be doing. I'll be RIGHT back, so can you just wait here for me? It'll only take a second! + case 0x1C9D: //It's true... I know I'm quibbling over nothing... But being so poor weakens a person's very soul... But...it's time I quit making silly excuses for myself! *param_1 = 0x1C9E; break; - case 0x1C9E: + case 0x1C9E: //Thank you so much... *param_1 = 0x1CAA; break; - case 0x1CAA: + case 0x1CAA: //Thanks to you, I didn't have to sink down to the level of a common thief. I will never do anything like that again! Ahhhh... What an amazing feeling! I've let all of my worries out of my heart. Wow! I actually feel refreshed! *param_1 = 0x1C9F; break; - case 0x1C9F: - var_r0 = 0x10; + case 0x1C9F: //Let me at least thank you. Please take this! + message_outcome = 0x10; break; - case 0x1CA1: + case 0x1CA1: //Don't look at me like that! I didn't steal it! It washed up on the shore, so I picked it up. Don't tease me like that! It's a tiny bottle made of crystal-clear glass... It's so beautiful. I wish my soul could be that beautiful... *param_1 = 0x1CA2; break; - case 0x1CA2: + case 0x1CA2: //Oh! What am I saying? When you live in poverty, you can say the cheesiest things without blinking an eye. ...Hmph! *param_1 = 0x1CA3; break; - case 0x1CA3: + case 0x1CA3: //So, umm...I guess I should go soon. My father will start worrying. *param_1 = 0x1CA4; break; - case 0x1CA4: - *param_1 = 0x1CAB; + case 0x1CA4: //Good-bye, little ally of justice! ...and good luck to you. + *param_1 = 0x1CAB; //'Bye! Thanks for tonight! break; default: - var_r0 = 0x10; + message_outcome = 0x10; break; } - return var_r0; + return message_outcome; } /* 0000149C-00001534 .text getMsg_KK1_0__11daNpc_Kk1_cFv */ u32 daNpc_Kk1_c::getMsg_KK1_0() { if (dKy_daynight_check() == 1) { //If Night - if (field_0x7BA != 0) { + if (field_0x7BA) { field_0x7BA = 0; - return 0x1CA1; + return 0x1CA1; //Don't look at me like that! I didn't steal it! It washed up on the shore, so I picked it up. Don't tease me like that! It's a tiny bottle made of crystal-clear glass... It's so beautiful. I wish my soul could be that beautiful... } else { - return 0x1C8B; + return 0x1C8B; //Shh! Shhh! } } - else { - if (dComIfGs_isEventBit(0xE08) == 0) { //If Day - if(dComIfGs_isEventBit(0xE10)){ - return 0x1C87; - }else{ - return 0x1C88; + else { //If Day + if (!dComIfGs_isEventBit(0xE08)) { //If Sidequest is available + if(dComIfGs_isEventBit(0xE10)){ //If working at shop + return 0x1C87; //This way to the only stall with extra-fun happy things for sale! Your happiness is guaranteed! Fun awaits you! Step right up! Stop by! + }else{ //If walking + return 0x1C88; //Hey, you! Come on! Use your head! You can't just stand there like that! You're in my way! Can't you move? } } else { - return 0x1C85; + return 0x1C85; //Oh! Hi! We meet again! ...What?! Of course! Honestly! I'm working! How dare you suggest that! I'm done with all that sneaking around in the dark. In fact, I head off to a faraway island to work in the evenings now, so I won't be seeing you at night anymore! } } } @@ -796,14 +791,14 @@ u32 daNpc_Kk1_c::getMsg() { /* 00001570-000015FC .text eventOrder__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::eventOrder() { - char cVar1 = field_0x81B; - if ((cVar1 == '\x01') || (cVar1 == '\x02')) { + char event_state = field_0x81B; //Event state? + if ((event_state == 1) || (event_state == 2)) { eventInfo.onCondition(dEvtCnd_CANTALK_e); - if(field_0x81B == '\x01'){ + if(field_0x81B == 1){ fopAcM_orderSpeakEvent(this); } - }else if (cVar1 >= 0x03){ - mEvtIDIdx = (cVar1 - 3); + }else if (event_state >= 0x03){ + mEvtIDIdx = (event_state - 3); fopAcM_orderOtherEventId(this,mEvtIDTbl[mEvtIDIdx],0x00ff,0xffff,0,1); } @@ -812,27 +807,27 @@ void daNpc_Kk1_c::eventOrder() { void daNpc_Kk1_c::checkOrder() { if(eventInfo.checkCommandDemoAccrpt()){ - if(dComIfGp_evmng_startCheck(mEvtIDTbl[mEvtIDIdx]) && (s8)field_0x81B >= 0x03){ + if(dComIfGp_evmng_startCheck(mEvtIDTbl[mEvtIDIdx]) && field_0x81B >= 0x03){ switch(mEvtIDIdx){ - case 4: + case BYE: setAnm_NUM(0,1); break; - case 5: - case 3: + case GET_EMPTY_BTL: //TODO: Improve default case + case OTOBOKE: default: break; } field_0x81B = 0; - mAnimationNum = 0xFF; - field_0x818 = 0xFF; + mAnimationNum = -1; + field_0x818 = -1; }; } else{ - if((this->checkCommandTalk() != 0)&&((field_0x81B == 1) ||(field_0x81B == 2))){ - this->field_0x81B = 0; - this->field_0x7C3 = 1; + if((checkCommandTalk())&&((field_0x81B == 1) ||(field_0x81B == 2))){ + field_0x81B = 0; + field_0x7C3 = 1; } } @@ -840,43 +835,43 @@ void daNpc_Kk1_c::checkOrder() { /* 000016DC-00001774 .text chk_talk__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::chk_talk() { - bool retval; + bool o_return; if(dComIfGp_event_chkTalkXY()){ - retval = true; + o_return = true; if(dComIfGp_evmng_ChkPresentEnd() != 0){ field_0x7B4 = dComIfGp_event_getPreItemNo(); - retval = true; + o_return = true; }else{ - retval = false; + o_return = false; } }else{ - field_0x7B4 = 0xFF; - retval = true; + field_0x7B4 = -1; + o_return = true; } - return retval; + return o_return; } /* 00001774-000017B4 .text chk_parts_notMov__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::chk_parts_notMov() { - bool retval = 0; - if((field_0x772 != m_jnt.mAngles[0][1])|| - (field_0x774 != m_jnt.mAngles[1][1])|| - (mAngleY != current.angle.y)){ - retval = 1; + bool o_return = false; + if((mLookBackHeadY != m_jnt.getHead_y())|| + (mLookBackBackboneY != m_jnt.getBackbone_y())|| + (mLookBackAngleY != current.angle.y)){ + o_return = true; } - return retval; + return o_return; } /* 000017B4-00001808 .text searchByID__11daNpc_Kk1_cFUiPi */ -fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID param_1, int* param_2) { - fopAc_ac_c *fiveActors[4]; - fiveActors[0] = NULL; - *param_2 = 0; - if(!fopAcM_SearchByID(param_1,fiveActors)){ - *param_2 = 1; +fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID i_actor, int* i_searchFailed) { + fopAc_ac_c *search_actor; + search_actor = NULL; + *i_searchFailed = 0; + if(!fopAcM_SearchByID(i_actor,&search_actor)){ + *i_searchFailed = 1; } - return fiveActors[0]; + return search_actor; } @@ -885,7 +880,7 @@ fopAc_ac_c* daNpc_Kk1_c::searchByID(fpc_ProcID param_1, int* param_2) { /* 00001808-000018B8 .text partner_search_sub__11daNpc_Kk1_cFPFPvPv_Pv */ bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*,void*)) { - bool retVal = false; + bool o_return = false; mPartnerProcID = -1; l_check_wrk = 0; @@ -895,28 +890,29 @@ bool daNpc_Kk1_c::partner_search_sub(void* (*param_1)(void*,void*)) { fpcEx_Search(*param_1, this); if(l_check_wrk != 0){ mPartnerProcID = fopAcM_GetID(l_check_inf[0]); - retVal = 1; + o_return = true; + } - return retVal; + return o_return; } /* 000018B8-00001924 .text partner_search__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::partner_search() { - bool cVar1; - if(field_0x821 == '\x01'){ + bool found_partner; + if(field_0x821 == 1){ switch(field_0x820){ case 0: - cVar1 = partner_search_sub(searchActor_SWC00); + found_partner = partner_search_sub(searchActor_SWC00); break; default: - cVar1 = 1; + found_partner = 1; } - if(cVar1){ + if(found_partner){ field_0x821 += 1; } } @@ -927,9 +923,9 @@ void daNpc_Kk1_c::partner_search() { /* 00001924-00001B10 .text lookBack__11daNpc_Kk1_cFv */ void daNpc_Kk1_c::lookBack() { - field_0x772 = m_jnt.getHead_y(); - field_0x774 = m_jnt.getBackbone_y(); - mAngleY = current.angle.y; + mLookBackHeadY = m_jnt.getHead_y(); + mLookBackBackboneY = m_jnt.getBackbone_y(); + mLookBackAngleY = current.angle.y; cXyz vec1; cXyz vec2 = current.pos; vec2.y = eyePos.y; @@ -940,30 +936,31 @@ void daNpc_Kk1_c::lookBack() { fopAc_ac_c *pActor; cXyz* vecPtr1 = NULL; s16 targetY = current.angle.y; - s8 state = field_0x81E; - bool someBool = field_0x7C4; + s8 state = mWhereToLook; + bool someBool = mLockBodyRotation; switch(state){ - case 1: + case 1: //Look ahead field_0x738 = dNpc_playerEyePos(-20.0); vec1 = field_0x738; vecPtr1 = &vec1; break; - case 2: + case 2: //Look in same direction? vec1 = field_0x738; vecPtr1 = &vec1; break; - case 3: + case 3: //?? targetY = field_0x7AC; break; - case 4: - if ((pActor = searchByID(field_0x700,&Int1),pActor != NULL) && Int1 == 0){ + case 4: //?? + pActor = searchByID(field_0x700,&Int1); + if (pActor != NULL && Int1 == 0){ field_0x738 = pActor->current.pos; field_0x738.y = pActor->eyePos.y; vec1 = field_0x738; vecPtr1 = &vec1; } break; - case 5: + case 5: //Kyoroyoro kyorokyoro(); vec1 = field_0x738; vecPtr1 = &vec1; @@ -999,7 +996,7 @@ void daNpc_Kk1_c::setAttention(bool i_attn_flag) { attention_info.position.set(f3,f2,f1); - if((field_0x778 == 0) && !i_attn_flag){return;} + if(!field_0x778 && !i_attn_flag){return;} f2 = field_0x72C.z; f1 = field_0x72C.y; @@ -1048,7 +1045,7 @@ bool daNpc_Kk1_c::cut_move_RUN_START() { daPy_py_c* pdVar2; cXyz runPoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); short target = cLib_targetAngleY(¤t.pos,&runPoint); - cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); if(current.angle.y == target){ pdVar2 = g_dComIfG_gameInfo.play.mpPlayer[2]; pdVar2->mDemo.setDemoType(2); @@ -1063,10 +1060,10 @@ bool daNpc_Kk1_c::cut_move_RUN_START() { /* 00001DD0-00001E58 .text cut_init_RUN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_RUN(int param_1) { - s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); - field_0x798 = -1; + s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",dEvDtData_c::TYPE_INT); + mTimer = -1; if(somePtr != NULL){ - field_0x798 = *somePtr; + mTimer = *somePtr; } setAnm_NUM(4,1); field_0x7B6 = 1; @@ -1079,10 +1076,10 @@ void daNpc_Kk1_c::cut_init_RUN(int param_1) { bool daNpc_Kk1_c::cut_move_RUN() { bool r3 = this->event_move(0); - if (this->field_0x798 < 0) { + if (this->mTimer < 0) { return r3; } - return cLib_calcTimer(&this->field_0x798) == 0; + return cLib_calcTimer(&this->mTimer) == 0; } /* 00001EAC-00001F08 .text cut_init_CATCH_START__11daNpc_Kk1_cFi */ @@ -1112,8 +1109,8 @@ void daNpc_Kk1_c::cut_init_CATCH_END(int param_1) { current.angle.y += 0x8000; setAnm_NUM(0,1); mpMorf->setMorf(0.0); - field_0x81E = 1; - field_0x7C4 = 0; + mWhereToLook = 1; + mLockBodyRotation = 0; m_jnt.mbTrn = true; return; @@ -1139,8 +1136,8 @@ void daNpc_Kk1_c::cut_init_TRN(int) { }; mRunPath.mCurrPointIndex = sp58[currentPoint-0x19]; - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; return; } mRunPath.setNearPathIndx(&LINKPOS,100); @@ -1174,18 +1171,17 @@ void daNpc_Kk1_c::cut_init_TRN(int) { mRunPath.mbGoingForwards = (mRunPath.mbGoingForwards ^ 1); } } - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; } /* 000022BC-00002364 .text cut_move_TRN__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_TRN() { - cXyz a = mRunPath.getPoint(mRunPath.mCurrPointIndex); - s16 target = cLib_targetAngleY(¤t.pos,&a); - cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); - s16 sVar1 = current.angle.y; - if(sVar1 == target){ - shape_angle.y = sVar1; + cXyz run_point = mRunPath.getPoint(mRunPath.mCurrPointIndex); + s16 target = cLib_targetAngleY(¤t.pos,&run_point); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); + if(current.angle.y == target){ + shape_angle.y = current.angle.y; return true; } return false; @@ -1193,7 +1189,7 @@ bool daNpc_Kk1_c::cut_move_TRN() { } /* 00002364-00002388 .text cut_init_BYE_START__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE_START(int) { +void daNpc_Kk1_c::cut_init_BYE_START(int i_unused_param) { ((daPy_py_c*)dComIfGp_getLinkPlayer())->onPlayerNoDraw(); field_0x7BB = 1; @@ -1208,22 +1204,22 @@ bool daNpc_Kk1_c::cut_move_BYE_START() { /* 00002390-00002490 .text cut_init_BYE__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE(int param_1) { - s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); - s32* somePtr2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Delay",3); - s32* somePtr3 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"prm_0",3); + s32* timer_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",dEvDtData_c::TYPE_INT); + s32* delay_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Delay",dEvDtData_c::TYPE_INT); + s32* prm_0_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"prm_0",dEvDtData_c::TYPE_INT); - field_0x798 = 0x1e; + mTimer = 0x1E; - if(somePtr != NULL){ - field_0x798 = *somePtr; + if(timer_ptr != NULL){ + mTimer = *timer_ptr; } field_0x79A = 0xffff; - if(somePtr2 != NULL){ - field_0x79A = *somePtr2; + if(delay_ptr != NULL){ + field_0x79A = *delay_ptr; } - field_0x7B0 = 0; - if(somePtr3 != NULL){ - field_0x7B0 = *somePtr3; + mPrm0 = 0; + if(prm_0_ptr != NULL){ + mPrm0 = *prm_0_ptr; } setAnm_NUM(4,1); field_0x815 = 2; @@ -1234,10 +1230,10 @@ void daNpc_Kk1_c::cut_init_BYE(int param_1) { /* 00002490-00002568 .text cut_move_BYE__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_BYE() { //TODO: This can likely be written much better. - event_move(0); + event_move(false); if (field_0x79A > 0) { if (cLib_calcTimer(&field_0x79A) == 0) { - ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,-0x3217); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,-0x3217); //TODO: Doesn't explicitly appear in Debug Map. daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); player->mDemo.setDemoType(3); player->mDemo.setParam0(0); @@ -1245,8 +1241,8 @@ bool daNpc_Kk1_c::cut_move_BYE() { ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setParam0(0x3217); } } - if (cLib_calcTimer(&field_0x798) == 0) { - if (field_0x7B0 == 0) { + if (cLib_calcTimer(&mTimer) == 0) { + if (mPrm0 == 0) { speedF = 0.0; } return true; @@ -1258,11 +1254,12 @@ bool daNpc_Kk1_c::cut_move_BYE() { } /* 00002568-000025C8 .text cut_init_BYE_CONTINUE__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int param_1) { - s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); - field_0x798 = 0x1E; - if(somePtr != NULL){ - field_0x798 = *somePtr; + +void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int i_staffIdx) { + s32* timer_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(i_staffIdx,"Timer",dEvDtData_c::TYPE_INT); + mTimer = 0x1E; + if(timer_ptr != NULL){ + mTimer = *timer_ptr; } return; @@ -1273,7 +1270,7 @@ void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int param_1) { bool daNpc_Kk1_c::cut_move_BYE_CONTINUE() { this->event_move(0); - if (cLib_calcTimer(&this->field_0x798) == 0) { + if (cLib_calcTimer(&this->mTimer) == 0) { speedF = 0.0; return true; } @@ -1313,13 +1310,13 @@ void daNpc_Kk1_c::cut_init_OTOBOKE(int) { player->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS, current.angle.y); - field_0x798 = 2; + mTimer = 2; return; } /* 00002744-00002798 .text cut_move_OTOBOKE__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::cut_move_OTOBOKE() { - if ( cLib_calcTimer(&this->field_0x798) == 0) { + if ( cLib_calcTimer(&this->mTimer) == 0) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(1); player->mDemo.setDemoType(2); player->mDemo.setDemoMode(1); @@ -1363,7 +1360,7 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { - s32* puVar2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",3); + s32* puVar2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",dEvDtData_c::TYPE_INT); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); @@ -1381,7 +1378,7 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { m_jnt.mAngles[0][0] = 0; m_jnt.mAngles[1][1] = 0; m_jnt.mAngles[1][0] = 0; - field_0x81E = 0; + mWhereToLook = 0; if (abs((s16)(r29 - current.angle.y)) > 0x3800) { current.angle.y = r29 + 0x8000; @@ -1393,9 +1390,9 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { cXyz local_28; local_28.set(0.0,-50.0,0.0); - field_0x798 = 0x26; + mTimer = 0x26; if (puVar2 != NULL) { - field_0x798 = *puVar2; + mTimer = *puVar2; } current.angle.y = r29; setAnm_NUM(0,1); @@ -1618,20 +1615,20 @@ void daNpc_Kk1_c::event_proc(int param_1) { break; case 0x1c9a: this->field_0x81B = 10; - this->field_0x81E = 0; - this->field_0x7C4 = 1; + this->mWhereToLook = 0; + this->mLockBodyRotation = 1; break; case 0x1c98: case 0x1c9c: this->field_0x81B = 7; - this->field_0x81E = 1; - this->field_0x7C4 = 1; + this->mWhereToLook = 1; + this->mLockBodyRotation = 1; break; case 0x1c9f: setStt(6); this->field_0x81B = 6; - this->field_0x81E = 0; - this->field_0x7C4 = 1; + this->mWhereToLook = 0; + this->mLockBodyRotation = 1; break; } break; @@ -1640,7 +1637,7 @@ void daNpc_Kk1_c::event_proc(int param_1) { field_0x81B = 1; - dComIfGs_onEventBit(0xE08); + dComIfGs_onEventBit(0xE08); //Make sidequest available field_0x7BA = 1; break; @@ -1771,71 +1768,65 @@ void daNpc_Kk1_c::createTama(float param_1) { } /* 000032D8-0000345C .text chk_areaIN__11daNpc_Kk1_cFf4cXyz */ -bool daNpc_Kk1_c::chk_areaIN(float param_1, cXyz param_2) { +bool daNpc_Kk1_c::chk_areaIN(float i_distanceThreshold, cXyz i_position) { - float distanceXZ = (LINKPOS - param_2).absXZ(); + float distanceXZ = (LINKPOS - i_position).absXZ(); - - s16 angdiff = cLib_targetAngleY(¤t.pos,&LINKPOS) - current.angle.y; - float fVar1 = param_1; - if (abs(angdiff) > 0x4E38) { - fVar1 *= 0.5f; + s16 angle_diff = cLib_targetAngleY(¤t.pos,&LINKPOS) - current.angle.y; + float distance_threshold = i_distanceThreshold; + if (abs(angle_diff) > 0x4E38) { + distance_threshold *= 0.5f; } - bool result = (distanceXZ < param_1); - if (result && ((g_Counter.mCounter0 % 3) == 0)) { - createTama(fVar1); + bool o_result = (distanceXZ < i_distanceThreshold); + if (o_result && ((g_Counter.mCounter0 % 3) == 0)) { + createTama(distance_threshold); } - return result; + return o_result; } /* 0000345C-00003578 .text startEvent_check__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::startEvent_check() { - uint uVar3; - float fVar4; - uVar3 = chk_areaIN(l_HIO.field_0x5C,current.pos); - if ((uVar3 & 0xff) != 0) { - fVar4 = current.pos.abs(LINKPOS); - if ((fVar4 < g_regHIO.mChild[9].mFloatRegs[0] + 210.0f) || - (field_0x6ba != 0)) { - return 1; + + u32 is_area_in = chk_areaIN(l_HIO.field_0x5C,current.pos); + if (is_area_in) { + float dist_to_link = current.pos.abs(LINKPOS); + if ((dist_to_link < REG9_F(0) + 210.0f) || + (field_0x6ba != 0)) { + return true; + } } - } - return 0; + return false; } /* 00003578-00003600 .text chkHitPlayer__11daNpc_Kk1_cFv */ bool daNpc_Kk1_c::chkHitPlayer() { - cCcD_Obj *pcVar1; - fopAc_ac_c *pfVar2; - bool bVar4; - - bVar4 = false; + bool o_result = false; if (mCyl.ChkCoHit()){ - pcVar1 = mCyl.GetCoHitObj(); - if(pcVar1 != NULL) { + cCcD_Obj* hit_obj = mCyl.GetCoHitObj(); + if(hit_obj != NULL) { - pfVar2 = pcVar1->GetAc(); + fopAc_ac_c* hit_actor = dCc_GetAc(hit_obj); - if(pfVar2 != NULL){ - bVar4 = pfVar2->base.mProcName == 0xA9; + if(hit_actor != NULL){ + o_result = fopAcM_GetName(hit_actor) == PROC_PLAYER; } } } - return bVar4; + return o_result; } /* 00003600-000036A8 .text set_pthPoint__11daNpc_Kk1_cFUc */ -void daNpc_Kk1_c::set_pthPoint(unsigned char param_1) { +void daNpc_Kk1_c::set_pthPoint(unsigned char i_pointIndex) { if(mRunPath.mPath != NULL){ - mRunPath.mCurrPointIndex = param_1; + mRunPath.mCurrPointIndex = i_pointIndex; current.pos = mRunPath.getPoint(mRunPath.mCurrPointIndex); if(mRunPath.nextIdx()){ cXyz runpoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); @@ -1846,32 +1837,31 @@ void daNpc_Kk1_c::set_pthPoint(unsigned char param_1) { /* 000036A8-00003940 .text event_move__11daNpc_Kk1_cFb */ -bool daNpc_Kk1_c::event_move(bool param_1) { +bool daNpc_Kk1_c::event_move(bool i_param_1) { - s16 sVar2; f32 speed; dPath* path = mRunPath.mPath; - if(path == NULL){ - return 1; + if(!path){ + return true; } - if (dPath_ChkClose(path) == 0){ - return 1; + if (!dPath_ChkClose(path)){ + return true; } - if(field_0x7B6 != 0){ + if(field_0x7B6){ if(mRunPath.chkPointPass(current.pos,mRunPath.mbGoingForwards)){ mRunPath.nextIdxAuto(); - if(param_1 != 0){ - s8 pointarg = mRunPath.pointArg(mRunPath.mCurrPointIndex); - if( pointarg >= 0){ - pointarg += 1; + if(i_param_1){ + s8 point_arg = mRunPath.pointArg(mRunPath.mCurrPointIndex); + if( point_arg >= 0){ + point_arg += 1; } - if((pointarg != 2) && (pointarg != 3)){ + if((point_arg != 2) && (point_arg != 3)){ field_0x7B6 = 0; } else{ - field_0x815 = pointarg; + field_0x815 = point_arg; field_0x816 = 0; field_0x7B6 = 1; } @@ -1882,41 +1872,39 @@ bool daNpc_Kk1_c::event_move(bool param_1) { cXyz runpoint = mRunPath.getPoint(mRunPath.mCurrPointIndex); s16 target = cLib_targetAngleY(¤t.pos,&runpoint); - sVar2 = current.angle.y; - cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); - f32 targetfloat; - float fVar3; + s16 store_angle = current.angle.y; + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); + f32 target_float; + float play_speed; if(field_0x815 == 2){ if(field_0x7B6 == 0){ - targetfloat = 0.0; + target_float = 0.0; }else{ - targetfloat = l_HIO.field_0x44; + target_float = l_HIO.field_0x44; } - fVar3 = speedF * l_HIO.field_0x4C; + play_speed = speedF * l_HIO.field_0x4C; speed = l_HIO.field_0x48; }else{ if(field_0x7B6 == 0){ - targetfloat = 0.0; + target_float = 0.0; }else{ - targetfloat = l_HIO.field_0x50; + target_float = l_HIO.field_0x50; } - fVar3 = speedF * l_HIO.field_0x58; + play_speed = speedF * l_HIO.field_0x58; speed = l_HIO.field_0x54; } - cLib_chaseF(&speedF,targetfloat,speed); - - - mpMorf->setPlaySpeed(cLib_minLimit(fVar3,0.5f)); - if((int)targetfloat == 0){ - current.angle.y = sVar2; + cLib_chaseF(&speedF,target_float,speed); + mpMorf->setPlaySpeed(cLib_minLimit(play_speed,0.5f)); + if((int)target_float == 0){ + current.angle.y = store_angle; if((int)speedF == 0){ speedF = 0.0; - s8 cVar6 = mRunPath.pointArg(mRunPath.mCurrPointIndex); - if((s32)cVar6 >= 0){ - cVar6 += 1; + s8 point_arg = mRunPath.pointArg(mRunPath.mCurrPointIndex); + if((s32)point_arg >= 0){ + point_arg += 1; } - field_0x816 = (u8)cVar6; + field_0x816 = point_arg; return true; } @@ -1927,24 +1915,30 @@ bool daNpc_Kk1_c::event_move(bool param_1) { } /* 00003940-000039F0 .text kyoroPos__11daNpc_Kk1_cFi */ -cXyz daNpc_Kk1_c::kyoroPos(int param_1) { +cXyz daNpc_Kk1_c::kyoroPos(int i_offset_index) { -static f32 a_tgt_offst[12][3] = {0.0, 0.0, 0.0, -100.0, 0.0, 0.0, 100.0, 0.0, -0.0, -100.0, 0.0, 100.0, 100.0, 0.0, 100.0, 0.0, -0.0, 100.0, -100.0, 40.0, 0.0, 100.0, 40.0, 0.0, --100.0, 40.0, 100.0, 100.0, 40.0, 100.0, 0.0, 40.0, -100.0, -40.0, 10.0, 40.0}; - Vec local_1c; - Vec local_28; - local_1c.x = a_tgt_offst[param_1][0]; - local_1c.y = a_tgt_offst[param_1][1]; - local_1c.z = a_tgt_offst[param_1][2]; + static f32 a_tgt_offst[12][3] = { + 0.0, 0.0, 0.0, + -100.0, 0.0, 0.0, + 100.0, 0.0, 0.0, + -100.0, 0.0, 100.0, + 100.0, 0.0, 100.0, + 0.0, 0.0, 100.0, + -100.0, 40.0, 0.0, + 100.0, 40.0, 0.0, + -100.0, 40.0, 100.0, + 100.0, 40.0, 100.0, + 0.0, 40.0, 100.0, + -40.0, 10.0, 40.0 + }; + Vec offset_vec, o_output_vec; + offset_vec.x = a_tgt_offst[i_offset_index][0]; + offset_vec.y = a_tgt_offst[i_offset_index][1]; + offset_vec.z = a_tgt_offst[i_offset_index][2]; mDoMtx_stack_c::transS(eyePos); - - mDoMtx_YrotM(mDoMtx_stack_c::get(),this->current.angle.y); - - mDoMtx_stack_c::multVec(&local_1c,&local_28); - return (cXyz)local_28; + mDoMtx_stack_c::YrotM(this->current.angle.y); + mDoMtx_stack_c::multVec(&offset_vec,&o_output_vec); + return (cXyz)o_output_vec; } @@ -1952,16 +1946,16 @@ static f32 a_tgt_offst[12][3] = {0.0, 0.0, 0.0, -100.0, 0.0, 0.0, 100.0, 0.0, bool daNpc_Kk1_c::kyorokyoro() { - s16 retval = cLib_calcTimer(&field_0x794); - if(retval){ - field_0x738 = kyoroPos(field_0x796); - return 1; + + if(cLib_calcTimer(&field_0x794)){ + field_0x738 = kyoroPos(mKyoroRNG); + return true; } int rng = cLib_getRndValue(1,10); - field_0x796 = rng; + mKyoroRNG = rng; field_0x794 = l_HIO.field_0x28; field_0x792 = l_HIO.field_0x2A; - return 0; + return false; //Return value not used } /* 00003A84-00003C9C .text chk_attn__11daNpc_Kk1_cFv */ @@ -1970,7 +1964,7 @@ bool daNpc_Kk1_c::chk_attn() { f32 distToLinkXZ = (current.pos-LINKPOS).absXZ(); f32 heightDiff = current.pos.y - LINKPOS.y; s16 iVar3 = cLib_targetAngleY(¤t.pos, &LINKPOS) - current.angle.y; - if ((s32)field_0x81E == 1) { + if ((s32)mWhereToLook == 1) { return distToLinkXZ < 200.0f && SHORT2DEG_ANGLE(abs(iVar3)) < 90.0f && //TODO: Possible inline (cAngle::s2d()) std::fabsf(heightDiff) < 300.0f; @@ -2050,21 +2044,21 @@ BOOL daNpc_Kk1_c::wait_1() { if(chk_talk() != 0){ setStt(2); setAnm_NUM(0,1); - field_0x81E = 1; - field_0x7C4 = 0; + mWhereToLook = 1; + mLockBodyRotation = 0; m_jnt.setTrn(); } return 1; } field_0x81B = 2; - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; cXyz sp20; if(field_0x7B6 != 0){ sp20 = mRunPath.getPoint(mRunPath.mCurrPointIndex); s16 temp_r3 = cLib_targetAngleY(¤t.pos,&sp20); - cLib_addCalcAngleS(¤t.angle.y,temp_r3,l_HIO.field_0x30,l_HIO.field_0x32, 0x80); + cLib_addCalcAngleS(¤t.angle.y,temp_r3,l_HIO.mScale,l_HIO.mMaxStep, 0x80); temp_r3 = temp_r3 - current.angle.y; if(abs(temp_r3) < 0x1800){ setStt('\x03'); @@ -2090,7 +2084,7 @@ BOOL daNpc_Kk1_c::wait_1() { mDoMtx_stack_c::multVec(&sp14,&sp20); s16 temp_r3_r2 = cLib_targetAngleY(¤t.pos,&sp20); - cLib_addCalcAngleS(¤t.angle.y,temp_r3_r2,l_HIO.field_0x30,l_HIO.field_0x32, 0x80); + cLib_addCalcAngleS(¤t.angle.y,temp_r3_r2,l_HIO.mScale,l_HIO.mMaxStep, 0x80); temp_r3_r2 = temp_r3_r2 - current.angle.y; if(field_0x7B7 == 0){ @@ -2147,7 +2141,7 @@ BOOL daNpc_Kk1_c::walk_1() { target = cLib_targetAngleY(¤t.pos,&local_40); sVar2 = current.angle.y; - cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); fVar7 = l_HIO.field_0x38; if (!field_0x7B6 || field_0x7C3 || chk_attn()) { fVar7 = 0.0; @@ -2163,8 +2157,8 @@ BOOL daNpc_Kk1_c::walk_1() { if(chk_talk()){ setStt(1); setAnm_NUM(0,1); - field_0x81E = 1; - field_0x7C4 = 0; + mWhereToLook = 1; + mLockBodyRotation = 0; m_jnt.setTrn(); } return 1; @@ -2182,8 +2176,8 @@ BOOL daNpc_Kk1_c::walk_1() { } } field_0x81B = 2; - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; return 1; } @@ -2196,15 +2190,15 @@ BOOL daNpc_Kk1_c::wait_2() { if(field_0x7C3 != 0){ if(chk_talk() != 0){ setStt(2); - field_0x81E = 1; - field_0x7C4 = 0; + mWhereToLook = 1; + mLockBodyRotation = 0; field_0x7C5 = 0; m_jnt.setTrn(); } return 1; } - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; s8 temp_r0 = field_0x81B; if(temp_r0 == 3 || temp_r0 == 4){ return 1; @@ -2234,8 +2228,8 @@ BOOL daNpc_Kk1_c::wait_2() { void daNpc_Kk1_c::init_CMT_WAI() { field_0x7A4 = cLib_getRndValue(0x5a,0xb4); - this->field_0x81E = 5; - this->field_0x7C4 = 1; + this->mWhereToLook = 5; + this->mLockBodyRotation = 1; setAnm_NUM(0,1); return; } @@ -2273,11 +2267,11 @@ void daNpc_Kk1_c::init_CMT_TRN() { field_0x7AA = current.angle.y; s16 uVar1 = cLib_getRndValue(0x5A,0xB4); field_0x7A4 = uVar1; - field_0x798 = l_HIO.field_0x2C; + mTimer = l_HIO.field_0x2C; field_0x794 = l_HIO.field_0x28; field_0x792 = l_HIO.field_0x2A; - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; setAnm_NUM(0,1); return; } @@ -2293,7 +2287,7 @@ void daNpc_Kk1_c::move_CMT_TRN() { sVar1 = field_0x7AA + 0x8000; sVar3 = current.angle.y; - uVar2 = cLib_calcTimer(&field_0x798); + uVar2 = cLib_calcTimer(&mTimer); if ((short)uVar2 != 0) { s8 temp_r0 = field_0x81B; if((temp_r0 != 1) && (temp_r0 < 3) && startEvent_check() != 0){ @@ -2302,7 +2296,7 @@ void daNpc_Kk1_c::move_CMT_TRN() { }else if (field_0x7A4 == 0) { local_20 = mRunPath.getPoint(mRunPath.mCurrPointIndex); sVar3 = cLib_targetAngleY(¤t.pos,&local_20); - sVar1 = cLib_addCalcAngleS(¤t.angle.y,sVar3,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + sVar1 = cLib_addCalcAngleS(¤t.angle.y,sVar3,l_HIO.mScale,l_HIO.mMaxStep,0x80); uVar2 = (uint)sVar1; if ((field_0x81B != 1) && ((char)field_0x81B < 3)) { @@ -2317,13 +2311,13 @@ void daNpc_Kk1_c::move_CMT_TRN() { } } }else { - sVar4 = cLib_addCalcAngleS(¤t.angle.y,sVar1,l_HIO.field_0x30,l_HIO.field_0x32,0x80); - uVar2 = (uint)sVar4; - sVar4 = current.angle.y; - if (sVar4 == sVar1) { - if (sVar4 != sVar3) { - field_0x81E = 5; - field_0x7C4 = 1; + uVar2 = cLib_addCalcAngleS(¤t.angle.y,sVar1,l_HIO.mScale,l_HIO.mMaxStep,0x80); + //uVar2 = (uint)sVar4; + //sVar4 = current.angle.y; + if (current.angle.y == sVar1) { + if (current.angle.y != sVar3) { + mWhereToLook = 5; + mLockBodyRotation = true; } if (cLib_calcTimer(&field_0x7A4) == 0) { if ((field_0x81B != '\x01') && ((char)field_0x81B < '\x03')) { @@ -2331,8 +2325,8 @@ void daNpc_Kk1_c::move_CMT_TRN() { field_0x81B = 8; } } - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = true; } } if (((field_0x81B != '\x01') && ((char)field_0x81B < '\x03')) && @@ -2347,8 +2341,8 @@ void daNpc_Kk1_c::init_CMT_PCK() { setAnm_NUM(1,1); field_0x7A4 = l_HIO.field_0x26; - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; mEvtIDIdx = 2; eventInfo.mEventId = mEvtIDTbl[mEvtIDIdx]; } @@ -2365,7 +2359,7 @@ void daNpc_Kk1_c::move_CMT_PCK() { sp8 = mRunPath.getPoint(mRunPath.mCurrPointIndex); temp_r3 = cLib_targetAngleY(¤t.pos,&sp8); - cLib_addCalcAngleS(¤t.angle.y, temp_r3, l_HIO.field_0x30, l_HIO.field_0x32, 0x80); + cLib_addCalcAngleS(¤t.angle.y, temp_r3, l_HIO.mScale, l_HIO.mMaxStep, 0x80); temp_r0 = field_0x81B; if (((s8) temp_r0 != 1) && ((s8) temp_r0 < 3)) { if (startEvent_check() != 0) { @@ -2416,8 +2410,8 @@ BOOL daNpc_Kk1_c::cmmt_1() { if ((field_0x81B != 1) && (field_0x81B < 3) && (field_0x81A != 1) && (startEvent_check() != 0)) { field_0x81B = 9; } - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; if (event_move( 1) != 0) { if ((field_0x81B == 1) || (field_0x81B >= 3)) { return 1; @@ -2465,8 +2459,8 @@ BOOL daNpc_Kk1_c::wait_3() { if (field_0x7C3 != 0) { if (chk_talk()) { setStt(2); - this->field_0x81E = 1; - this->field_0x7C4 = 0; + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; this->field_0x7C5 = 0; m_jnt.mbTrn = true; @@ -2474,10 +2468,10 @@ BOOL daNpc_Kk1_c::wait_3() { return 1; } else { - field_0x81E = 0; - field_0x7C4 = 1; + mWhereToLook = 0; + mLockBodyRotation = 1; if (chk_attn()) { - this->field_0x81E = 1; + this->mWhereToLook = 1; } if ((this->field_0x81B != 1) && (field_0x81B < 3)) { this->field_0x81B = 2; @@ -2501,30 +2495,30 @@ BOOL daNpc_Kk1_c::wait_4() { if (chk_talk()) { setStt('\x02'); setAnm_NUM(0,1); - this->field_0x81E = 1; - this->field_0x7C4 = 0; + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; m_jnt.mbTrn = true; } return 1; } else { this->field_0x81B = 2; - this->field_0x81E = 1; - this->field_0x7C4 = 0; + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; this->field_0x7B6 = fVar4 > 300.0f; if (this->field_0x7B6) { local_20[0] = mRunPath.getPoint(mRunPath.mCurrPointIndex); target = cLib_targetAngleY(¤t.pos,local_20); - cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.field_0x30,l_HIO.field_0x32,0x80); + cLib_addCalcAngleS(¤t.angle.y,target,l_HIO.mScale,l_HIO.mMaxStep,0x80); s16 diff = target - current.angle.y; iVar2 = abs(diff); if (iVar2 < 0x1800) { setStt('\x03'); field_0x7B7 = 0; } - this->field_0x81E = 0; - this->field_0x7C4 = 1; + this->mWhereToLook = 0; + this->mLockBodyRotation = 1; } } return 1; @@ -2556,15 +2550,15 @@ BOOL daNpc_Kk1_c::talk_1() { field_0x79E = uVar4; switch(mCurrMsgNo){ - case 0x1CA9: - dComIfGs_onEventBit(0xE10); + case 0x1CA9: //Welcome to you, sir! This way to Windfall's outdoor shop, chock-full of fun and happy products! + dComIfGs_onEventBit(0xE10); //Intro text seen break; - case 0x1CAB: + case 0x1CAB: //'Bye! Thanks for tonight! field_0x81B = 7; break; - case 0x1CAC: - field_0x81E = 1; - field_0x7C4 = 0; + case 0x1CAC: //Take off! Go away! + mWhereToLook = 1; + mLockBodyRotation = 0; field_0x7A2 = 0; break; default: @@ -2575,8 +2569,8 @@ BOOL daNpc_Kk1_c::talk_1() { } sVar5 = cLib_calcTimer(&field_0x7A2); if ((sVar5 != 0) && (field_0x7A2 == 1)) { - this->field_0x81E = 1; - this->field_0x7C4 = 0; + this->mWhereToLook = 1; + this->mLockBodyRotation = 0; } return uVar6; } @@ -2758,7 +2752,7 @@ bool daNpc_Kk1_c::_execute() { ); if ((field_0x7BD ) && (!demoActorID)) { - return 1; + return true; } partner_search(); checkOrder(); From c8eb2c4a8419fa760a7906de18b2ccd5ecda5fb7 Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Sat, 24 May 2025 20:33:04 -0500 Subject: [PATCH 13/15] Naming a couple more variables --- include/d/actor/d_a_npc_kk1.h | 8 +- src/d/actor/d_a_npc_kk1.cpp | 140 +++++++++++++++++----------------- 2 files changed, 76 insertions(+), 72 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index 7668c6a3b..e688aa2bb 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -174,7 +174,7 @@ public: /* 0x6D0 */ u32 field_0x6D0; /* 0x6D4 */ u32 mShadowID; /* 0x6D8 */ mDoExt_btpAnm mBtpAnm; - /* 0x6EC*/ u8 field_0x6EC; + /* 0x6EC*/ u8 mBtpFrame; /* 0x6ED*/ s8 field_0x6ED; /* 0x6EE*/ s16 field_0x6EE; /* 0x6F0*/ ActionFunc field_0x6F0; @@ -183,14 +183,14 @@ public: /* 0x704*/ dNpc_PathRun_c mRunPath; /* 0x70C*/ cXyz field_0x70C; /* 0x718*/ csXyz field_0x718; - /* 0x71E */ csXyz field_0x71E; + /* 0x71E */ csXyz mAngle; /* 0x724 */ u8 field_0x724[0x72C - 0x724]; /* 0x72C */ cXyz field_0x72C; /* 0x738 */ cXyz field_0x738; /* 0x744 */ u8 field_0x744[0x750 - 0x744]; /* 0x750 */ cXyz field_0x750; /* 0x75C */ cXyz field_0x75C; - /* 0x768 */ f32 field_0x768; + /* 0x768 */ f32 mAnimeFrame; /* 0x76A */ u8 field_0x76A[4]; /* 0x770 */ s16 mLookBackAngleY; /* 0x772 */ s16 mLookBackHeadY; @@ -219,7 +219,7 @@ public: /* 0x7B2 */ s8 field_0x7B2; /* 0x7B3 */ u8 field_0x7B3; /* 0x7B4 */ u8 field_0x7B4; - /* 0x7B5 */ u8 field_0x7B5; + /* 0x7B5 */ u8 mSWbit; /* 0x7B6 */ u8 field_0x7B6; /* 0x7B7 */ u8 field_0x7B7; /* 0x7B8 */ u8 field_0x7B8; diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index c72efbec2..dca6ab7ff 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -36,7 +36,7 @@ s32 l_check_wrk; inline int daNpc_Kk1_c::getSWbit() { - return this->field_0x7B5; + return this->mSWbit; } @@ -57,6 +57,7 @@ char* l_evn_tbl[] = { "run_start", "run_start_2", "catch", "get_empty_btl", "bye", "otoboke", "runaway", "bye_2", }; + //TODO: Declare somewhere else? enum EVENT_NAME { RUN_START, @@ -71,41 +72,41 @@ enum EVENT_NAME { /* 00000198-000001E4 .text nodeCB_Head__FP7J3DNodei */ -static BOOL nodeCB_Head(J3DNode* arg0, int arg1) { +static BOOL nodeCB_Head(J3DNode* i_node, int i_arg1) { daNpc_Kk1_c* temp_r3; - if (arg1 == 0) { + if (i_arg1 == 0) { temp_r3 = (daNpc_Kk1_c*)j3dSys.mModel->getUserArea(); if (temp_r3 != NULL) { - temp_r3->_nodeCB_Head(arg0, j3dSys.mModel); + temp_r3->_nodeCB_Head(i_node, j3dSys.mModel); } } return 1; } /* 000001E4-00000304 .text _nodeCB_Head__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ -void daNpc_Kk1_c::_nodeCB_Head(J3DNode* node, J3DModel* model) { +void daNpc_Kk1_c::_nodeCB_Head(J3DNode* i_node, J3DModel* i_model) { static cXyz a_eye_pos_off(14.0f,18.0f,0.0f); - u16 joint_number = ((J3DJoint*)(node))->getJntNo(); - mDoMtx_stack_c::copy(model->getAnmMtx(joint_number)); + u16 joint_number = ((J3DJoint*)(i_node))->getJntNo(); + mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_number)); mDoMtx_stack_c::multVecZero(&field_0x750); mDoMtx_stack_c::multVec(&a_eye_pos_off,&field_0x72C); mDoMtx_stack_c::XrotM(m_jnt.getHead_y()); mDoMtx_stack_c::ZrotM(-m_jnt.getHead_x()); cMtx_copy(mDoMtx_stack_c::get(),j3dSys.mCurrentMtx); - model->setAnmMtx(joint_number, mDoMtx_stack_c::now); + i_model->setAnmMtx(joint_number, mDoMtx_stack_c::now); } /* 00000340-0000038C .text nodeCB_BackBone__FP7J3DNodei */ -static BOOL nodeCB_BackBone(J3DNode *param_1, int param_2) { +static BOOL nodeCB_BackBone(J3DNode *i_node, int param_2) { if (param_2 == 0) { J3DModel* model = (J3DModel*)j3dSys.mModel; if ((J3DModel *)(j3dSys.mModel)->getUserArea() != (J3DModel *)0x0) { - ((daNpc_Kk1_c*)(model->getUserArea()))->_nodeCB_BackBone(param_1,model); + ((daNpc_Kk1_c*)(model->getUserArea()))->_nodeCB_BackBone(i_node,model); } } @@ -113,20 +114,20 @@ static BOOL nodeCB_BackBone(J3DNode *param_1, int param_2) { } /* 0000038C-0000042C .text _nodeCB_BackBone__11daNpc_Kk1_cFP7J3DNodeP8J3DModel */ -void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode* node, J3DModel* model) { - u16 joint_number = static_cast(node)->getJntNo(); - MTXCopy(model->getAnmMtx(joint_number), mDoMtx_stack_c::now); +void daNpc_Kk1_c::_nodeCB_BackBone(J3DNode* i_node, J3DModel* i_model) { + u16 joint_number = static_cast(i_node)->getJntNo(); + MTXCopy(i_model->getAnmMtx(joint_number), mDoMtx_stack_c::now); mDoMtx_stack_c::XrotM(this->m_jnt.getBackbone_y()); mDoMtx_stack_c::ZrotM(-this->m_jnt.getBackbone_x()); MTXCopy(mDoMtx_stack_c::now, j3dSys.mCurrentMtx); - model->setAnmMtx(joint_number, mDoMtx_stack_c::now); + i_model->setAnmMtx(joint_number, mDoMtx_stack_c::now); } /* 0000042C-0000044C .text CheckCreateHeap__FP10fopAc_ac_c */ -static int CheckCreateHeap(fopAc_ac_c* param_1) { +static int CheckCreateHeap(fopAc_ac_c* i_npc) { - return ((daNpc_Kk1_c*)param_1)->CreateHeap(); + return ((daNpc_Kk1_c*)i_npc)->CreateHeap(); } @@ -134,14 +135,15 @@ static int CheckCreateHeap(fopAc_ac_c* param_1) { /* 0000044C-000004EC .text searchActor_SWC00__FPvPv */ void* searchActor_SWC00(void* i_swc, void* i_kk1) { - swc00_class* SwcAct = static_cast(i_swc); - daNpc_Kk1_c* Kk1Act = static_cast(i_kk1); + //swc00_class* swc_act = static_cast(i_swc); + swc00_class* swc_act = (swc00_class*)(i_swc); + daNpc_Kk1_c* kk1_act = (daNpc_Kk1_c*)(i_kk1); if ( - l_check_wrk < L_CHECK_SZ && fopAc_IsActor(SwcAct) && - fopAcM_GetName(SwcAct) == PROC_SWC00 && daSwc00_getType(SwcAct) == 0 && - daSwc00_getSw1No(SwcAct) == Kk1Act->getSWbit() + l_check_wrk < L_CHECK_SZ && fopAc_IsActor(swc_act) && + fopAcM_GetName(swc_act) == PROC_SWC00 && daSwc00_getType(swc_act) == 0 && + daSwc00_getSw1No(swc_act) == kk1_act->getSWbit() ){ - l_check_inf[l_check_wrk] = SwcAct; + l_check_inf[l_check_wrk] = swc_act; l_check_wrk++; } return NULL; @@ -179,7 +181,7 @@ bool daNpc_Kk1_c::createInit() { mEvtIDTbl[i] = dComIfGp_evmng_getEventIdx(l_evn_tbl[i], 0xFF); } mEventCut.setActorInfo2("Kk1", this); - field_0x7B5 = base.mParameters >> 8; + mSWbit = base.mParameters >> 8; u8 params = base.mParameters >> 0x10; if (params != 0xff) { @@ -224,8 +226,8 @@ bool daNpc_Kk1_c::createInit() { } - field_0x71E = current.angle; - shape_angle = field_0x71E; + mAngle = current.angle; + shape_angle = mAngle; mStts.Init(0xFF, 0xff, this); mCyl.SetStts(&mStts); mCyl.Set(dNpc_cyl_src); @@ -244,20 +246,20 @@ bool daNpc_Kk1_c::createInit() { void daNpc_Kk1_c::play_animation() { cXyz floatload; - u32 uVar5 = 0; + u32 mtl_snd_id = 0; play_btp_anm(); if (mObjAcch.ChkGroundHit() != 0) { - uVar5 = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd); + mtl_snd_id = dComIfG_Bgsp()->GetMtrlSndId(mObjAcch.m_gnd); } - field_0x7B2 = mpMorf->play(&eyePos,uVar5,dComIfGp_getReverb(fopAcM_GetRoomNo(this))); - if(mpMorf->getFrame() < field_0x768){ + field_0x7B2 = mpMorf->play(&eyePos,mtl_snd_id,dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if(mpMorf->getFrame() < mAnimeFrame){ field_0x7B2 = 1; } - field_0x768 = mpMorf->getFrame(); + mAnimeFrame = mpMorf->getFrame(); switch(field_0x81A){ case 8: @@ -284,7 +286,7 @@ void daNpc_Kk1_c::setMtx(bool param_1) { mpMorf->mpModel->setBaseScale(scale); PSMTXTrans(mDoMtx_stack_c::get(),current.pos.x,current.pos.y,current.pos.z); - mDoMtx_stack_c::ZXYrotM(field_0x71E); + mDoMtx_stack_c::ZXYrotM(mAngle); mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); mpMorf->calc(); cXyz someFloat1(0.0,120.0,30.0); @@ -332,7 +334,7 @@ bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { OSPanic("d_a_npc_kk1.cpp",0x234,"Halt"); } field_0x819 = param_1; - field_0x6EC = 0; + mBtpFrame = 0; field_0x6EE = 0; return mBtpAnm.init(pJVar5->getModelData(),pJVar1,1,0,1.0,0,-1,param_2,0) != 0; } @@ -348,19 +350,19 @@ bool daNpc_Kk1_c::init_texPttrnAnm(signed char param_1, bool param_2) { void daNpc_Kk1_c::play_btp_anm() { - u8 uVar1 = mBtpAnm.getBtpAnm()->getFrameMax(); + u8 frame_max = mBtpAnm.getBtpAnm()->getFrameMax(); if ((field_0x819 != 0) || (cLib_calcTimer(&field_0x6EE) == 0)) { - field_0x6EC = field_0x6EC + 1; - if (field_0x6EC >= uVar1) { + mBtpFrame += 1; + if (mBtpFrame >= frame_max) { if (field_0x819 != 0) { - field_0x6EC = (char)uVar1; + mBtpFrame = frame_max; return; } else { field_0x6EE = cLib_getRndValue(0x3c,0x5a); - field_0x6EC = 0; + mBtpFrame = 0; } } } @@ -394,14 +396,14 @@ void daNpc_Kk1_c::play_eff_anm() { } /* 00000CFC-00000DDC .text setAnm_anm__11daNpc_Kk1_cFPQ211daNpc_Kk1_c9anm_prm_c */ -void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* param_1) { +void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* i_anm_ptr) { - if (param_1->field0 < 0 || field_0x81A == param_1->field0) { + if (i_anm_ptr->field0 < 0 || field_0x81A == i_anm_ptr->field0) { return; } - dNpc_setAnmIDRes(mpMorf,param_1->fieldC,param_1->field4,param_1->field8,bckResID(param_1->field0),0xFFFFFFFF,&mArcName); - field_0x81A = param_1->field0; + dNpc_setAnmIDRes(mpMorf,i_anm_ptr->fieldC,i_anm_ptr->field4,i_anm_ptr->field8,bckResID(i_anm_ptr->field0),0xFFFFFFFF,&mArcName); + field_0x81A = i_anm_ptr->field0; delBikon(); delAse(); field_0x7BE = 1; @@ -416,7 +418,7 @@ void daNpc_Kk1_c::setAnm_anm(daNpc_Kk1_c::anm_prm_c* param_1) { } this->field_0x7B2 = 0; this->field_0x7B3 = 0; - this->field_0x768 = 0.0; + this->mAnimeFrame = 0.0; @@ -1213,7 +1215,7 @@ void daNpc_Kk1_c::cut_init_BYE(int param_1) { if(timer_ptr != NULL){ mTimer = *timer_ptr; } - field_0x79A = 0xffff; + field_0x79A = -1; if(delay_ptr != NULL){ field_0x79A = *delay_ptr; } @@ -1237,7 +1239,7 @@ bool daNpc_Kk1_c::cut_move_BYE() { daPy_py_c* player = (daPy_py_c*)dComIfGp_getLinkPlayer(); player->mDemo.setDemoType(3); player->mDemo.setParam0(0); - ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setDemoMode(9); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setDemoMode(daPy_demo_c::DEMO_UNK09_e); ((daPy_py_c*)dComIfGp_getLinkPlayer())->mDemo.setParam0(0x3217); } } @@ -1278,10 +1280,10 @@ bool daNpc_Kk1_c::cut_move_BYE_CONTINUE() { } /* 00002620-000026BC .text cut_init_BYE_END__11daNpc_Kk1_cFi */ -void daNpc_Kk1_c::cut_init_BYE_END(int) { +void daNpc_Kk1_c::cut_init_BYE_END(int i_unusedParam) { ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); - ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(daPy_demo_c::DEMO_UNK04_e); s16 angle_y = cLib_targetAngleY(&LINKPOS,¤t.pos); ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS, angle_y); ((daPy_py_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); @@ -1308,7 +1310,7 @@ bool daNpc_Kk1_c::cut_move_PLYER_TRN() { void daNpc_Kk1_c::cut_init_OTOBOKE(int) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(1); player->changeOriginalDemo(); - ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(daPy_demo_c::DEMO_UNK04_e); ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS, current.angle.y); mTimer = 2; return; @@ -1363,7 +1365,7 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { s32* puVar2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",dEvDtData_c::TYPE_INT); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); - ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(4); + ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(daPy_demo_c::DEMO_UNK04_e); short sVar4 = cLib_targetAngleY(&LINKPOS,¤t.pos); ((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,sVar4); @@ -1374,10 +1376,11 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { field_0x7BF = 1; speedF = 0.0; - m_jnt.mAngles[0][1] = 0; - m_jnt.mAngles[0][0] = 0; - m_jnt.mAngles[1][1] = 0; - m_jnt.mAngles[1][0] = 0; + m_jnt.setHead_y(0); + m_jnt.setHead_x(0); + m_jnt.setBackBone_y(0); + m_jnt.setBackBone_x(0); + mWhereToLook = 0; if (abs((s16)(r29 - current.angle.y)) > 0x3800) { current.angle.y = r29 + 0x8000; @@ -2204,7 +2207,7 @@ BOOL daNpc_Kk1_c::wait_2() { return 1; } if(field_0x7B8 != 0){ - u8 temp_r4 = field_0x7B5; + u8 temp_r4 = mSWbit; if((temp_r4 != 0xFF) && (dComIfGs_isSwitch(temp_r4,current.roomNo) != 0)){ fopAc_ac_c* temp_r3 = searchByID(mPartnerProcID,&sp8); if((temp_r3 != NULL) && (sp8 == 0)){ @@ -2395,7 +2398,7 @@ BOOL daNpc_Kk1_c::cmmt_1() { u8 temp_r0_4; - switch (field_0x816) { /* irregular */ + switch (field_0x816) { case 1: move_CMT_WAI(); return 1; @@ -2657,9 +2660,9 @@ u8 daNpc_Kk1_c::demo() { if (pJVar2 != NULL) { u8 cmp = pJVar2 ->getFrameMax(); - field_0x6EC += 1; - if (field_0x6EC >= cmp) { - field_0x6EC = cmp; + mBtpFrame += 1; + if (mBtpFrame >= cmp) { + mBtpFrame = cmp; } } @@ -2668,7 +2671,7 @@ u8 daNpc_Kk1_c::demo() { mBtpAnm.init(mpMorf->getModel()->getModelData(),pJVar2,1,0,1.0,0,-1,true,0); field_0x819 = 1; - field_0x6EC = 0; + mBtpFrame = 0; } dDemo_setDemoData(this,0x6A,mpMorf,&mArcName,0,0,0,0); @@ -2690,24 +2693,24 @@ void daNpc_Kk1_c::shadowDraw() { /* 000055C4-00005798 .text _draw__11daNpc_Kk1_cFv */ BOOL daNpc_Kk1_c::_draw() { - J3DModelData *pJVar1; - J3DModel *pJVar2; + J3DModelData *model_data; + J3DModel *model; - dBgS* dbgs; + //dbgs; - pJVar2 = mpMorf->getModel(); + model = mpMorf->getModel(); - pJVar1 = pJVar2->getModelData(); - dbgs = dComIfG_Bgsp(); + model_data = model->getModelData(); + dBgS* dbgs = dComIfG_Bgsp(); if ((field_0x7BD) || (field_0x7C0)) { return 1; } g_env_light.settingTevStruct(TEV_TYPE_ACTOR,¤t.pos,&tevStr); - g_env_light.setLightTevColorType(pJVar2,&tevStr); + g_env_light.setLightTevColorType(model,&tevStr); - mBtpAnm.entry(pJVar1,field_0x6EC); + mBtpAnm.entry(model_data,mBtpFrame); mpMorf->entryDL(); - mBtpAnm.remove(pJVar1); + mBtpAnm.remove(model_data); if (!field_0x7BE) { field_0x7C8.entry(field_0x808->getModelData(),field_0x800); @@ -2715,6 +2718,7 @@ BOOL daNpc_Kk1_c::_draw() { mDoExt_modelEntryDL(field_0x808); field_0x7DC.remove(field_0x808->getModelData()); field_0x7C8.remove(field_0x808->getModelData()); + } shadowDraw(); dSnap_RegistFig(0x58,(fopAc_ac_c *)this,1.0,1.0,1.0); @@ -2781,7 +2785,7 @@ bool daNpc_Kk1_c::_execute() { field_0x7BD = 0; } eventOrder(); - field_0x71E = current.angle; + mAngle = current.angle; if (!field_0x7BF) { shape_angle = current.angle; From 81ceafdcfa3d4f49ee769326b8436a977ecad984 Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Sat, 24 May 2025 23:50:36 -0500 Subject: [PATCH 14/15] change out getMySubstanceP for getMyIntegerP inline --- src/d/actor/d_a_npc_kk1.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index dca6ab7ff..b1e6025f0 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -1062,7 +1062,7 @@ bool daNpc_Kk1_c::cut_move_RUN_START() { /* 00001DD0-00001E58 .text cut_init_RUN__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_RUN(int param_1) { - s32* somePtr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",dEvDtData_c::TYPE_INT); + s32* somePtr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Timer"); mTimer = -1; if(somePtr != NULL){ mTimer = *somePtr; @@ -1206,9 +1206,9 @@ bool daNpc_Kk1_c::cut_move_BYE_START() { /* 00002390-00002490 .text cut_init_BYE__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE(int param_1) { - s32* timer_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",dEvDtData_c::TYPE_INT); - s32* delay_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Delay",dEvDtData_c::TYPE_INT); - s32* prm_0_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"prm_0",dEvDtData_c::TYPE_INT); + s32* timer_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Timer"); + s32* delay_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Delay"); + s32* prm_0_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"prm_0"); mTimer = 0x1E; @@ -1258,7 +1258,7 @@ bool daNpc_Kk1_c::cut_move_BYE() { /* 00002568-000025C8 .text cut_init_BYE_CONTINUE__11daNpc_Kk1_cFi */ void daNpc_Kk1_c::cut_init_BYE_CONTINUE(int i_staffIdx) { - s32* timer_ptr = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(i_staffIdx,"Timer",dEvDtData_c::TYPE_INT); + s32* timer_ptr = (s32*)dComIfGp_evmng_getMyIntegerP(i_staffIdx,"Timer"); mTimer = 0x1E; if(timer_ptr != NULL){ mTimer = *timer_ptr; @@ -1362,7 +1362,7 @@ void daNpc_Kk1_c::cut_init_RUNAWAY_START(int param_1) { - s32* puVar2 = (s32*)g_dComIfG_gameInfo.play.mEvtManager.getMySubstanceP(param_1,"Timer",dEvDtData_c::TYPE_INT); + s32* puVar2 = (s32*)dComIfGp_evmng_getMyIntegerP(param_1,"Timer"); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeOriginalDemo(); ((daPy_py_c*)dComIfGp_getLinkPlayer())->changeDemoMode(daPy_demo_c::DEMO_UNK04_e); From 81618b6177a230c7ba86503249766b864d798888 Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Mon, 26 May 2025 01:23:29 -0500 Subject: [PATCH 15/15] Refactor to use JUT_ASSERT macro --- include/d/actor/d_a_npc_kk1.h | 4 +- src/d/actor/d_a_npc_kk1.cpp | 91 +++++++++++++---------------------- 2 files changed, 36 insertions(+), 59 deletions(-) diff --git a/include/d/actor/d_a_npc_kk1.h b/include/d/actor/d_a_npc_kk1.h index e688aa2bb..509710ebe 100644 --- a/include/d/actor/d_a_npc_kk1.h +++ b/include/d/actor/d_a_npc_kk1.h @@ -167,8 +167,8 @@ public: public: /* 0x6C4 */ request_of_phase_process_class field_0x6C4; - /* 0x6CC */ s8 mAnmMtxIdx; - /* 0x6CD */ s8 field_0x6CD; + /* 0x6CC */ s8 m_hed_jnt_num; + /* 0x6CD */ s8 m_bbone_jnt_num; /* 0x6CE */ char mArcName; /* 0x6CF */ u8 field_0x6CF; /* 0x6D0 */ u32 field_0x6D0; diff --git a/src/d/actor/d_a_npc_kk1.cpp b/src/d/actor/d_a_npc_kk1.cpp index b1e6025f0..d64d23ba4 100644 --- a/src/d/actor/d_a_npc_kk1.cpp +++ b/src/d/actor/d_a_npc_kk1.cpp @@ -321,22 +321,19 @@ int daNpc_Kk1_c::btpResID(int param_1) { /* 00000AC0-00000BC4 .text setBtp__11daNpc_Kk1_cFScb */ bool daNpc_Kk1_c::setBtp(signed char param_1, bool param_2) { - J3DAnmTexPattern *pJVar1; + J3DAnmTexPattern *a_btp; J3DModel* pJVar5 = mpMorf->getModel(); if (param_1 < 0) { return false; } else { - pJVar1 = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(&mArcName,btpResID(param_1)); - if (pJVar1 == 0) { - u32 uVar2 = JUTAssertion::getSDevice(); - JUTAssertion::showAssert(uVar2,"d_a_npc_kk1.cpp",0x234,"a_btp != 0"); - OSPanic("d_a_npc_kk1.cpp",0x234,"Halt"); - } + a_btp = (J3DAnmTexPattern*)dComIfG_getObjectIDRes(&mArcName,btpResID(param_1)); + JUT_ASSERT(0x234,a_btp != 0); //Line 564 + field_0x819 = param_1; mBtpFrame = 0; field_0x6EE = 0; - return mBtpAnm.init(pJVar5->getModelData(),pJVar1,1,0,1.0,0,-1,param_2,0) != 0; + return mBtpAnm.init(pJVar5->getModelData(),a_btp,1,0,1.0,0,-1,param_2,0) != 0; } } @@ -1031,11 +1028,8 @@ void daNpc_Kk1_c::cut_init_RUN_START(int param_1) { int idArray[2]; a_actor = searchByID(mPartnerProcID,idArray); - if(a_actor == NULL){ + JUT_ASSERT(0x54F,a_actor != 0); //Line 1359 - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0x54f,"a_actor != 0"); - OSPanic("d_a_npc_kk1.cpp",0x54f,"Halt"); - } dComIfGp_event_setItemPartner(a_actor); mRunPath.nextIdxAuto(); return; @@ -2020,7 +2014,7 @@ void daNpc_Kk1_c::flwAse() { JGeometry::TVec3 out; if (field_0x810 != NULL) { - mDoMtx_stack_c::copy(mpMorf->mpModel->getAnmMtx(mAnmMtxIdx)); + mDoMtx_stack_c::copy(mpMorf->mpModel->getAnmMtx(m_hed_jnt_num)); mDoMtx_stack_c::multVecZero(out); field_0x810->setGlobalTranslation(out); @@ -2861,20 +2855,17 @@ cPhs_State daNpc_Kk1_c::_create() { /* 00006118-0000638C .text bodyCreateHeap__11daNpc_Kk1_cFv */ BOOL daNpc_Kk1_c::bodyCreateHeap() { - J3DModelData *pModelData; + J3DModelData *a_mdl_dat; mDoExt_McaMorf *pmVar2; - pModelData = (J3DModelData*)dComIfG_getObjectIDRes(&mArcName,0xD); - pModelData->getJointName(); + a_mdl_dat = (J3DModelData*)dComIfG_getObjectIDRes(&mArcName,0xD); + a_mdl_dat->getJointName(); + JUT_ASSERT(0xDD6,a_mdl_dat != 0); //Line 3542 - if (pModelData == NULL) { - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xdd6,"a_mdl_dat != 0"); - OSPanic("d_a_npc_kk1.cpp",0xdd6,"Halt"); - } - pmVar2 = new mDoExt_McaMorf(pModelData,NULL,NULL,NULL, + pmVar2 = new mDoExt_McaMorf(a_mdl_dat,NULL,NULL,NULL, -0x1,1.0,0,-1,1,NULL,0x80000,0x11020022); @@ -2894,18 +2885,12 @@ BOOL daNpc_Kk1_c::bodyCreateHeap() { return 0; } - mAnmMtxIdx = pModelData->getJointName()->getIndex("head"); - if (mAnmMtxIdx < 0) { - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xdea,"m_hed_jnt_num >= 0"); - OSPanic("d_a_npc_kk1.cpp",0xdea,"Halt"); - } - field_0x6CD = pModelData->getJointName()->getIndex("backbone"); - if (field_0x6CD < 0) { - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xdec,"m_bbone_jnt_num >= 0"); - OSPanic("d_a_npc_kk1.cpp",0xdec,"Halt"); - } - mpMorf->mpModel->getModelData()->getJointNodePointer(mAnmMtxIdx)->setCallBack(nodeCB_Head); - mpMorf->mpModel->getModelData()->getJointNodePointer(field_0x6CD)->setCallBack(nodeCB_BackBone); + m_hed_jnt_num = a_mdl_dat->getJointName()->getIndex("head"); + JUT_ASSERT(0xDEA,m_hed_jnt_num >= 0); //Line 3562 + m_bbone_jnt_num = a_mdl_dat->getJointName()->getIndex("backbone"); + JUT_ASSERT(0xDEC,m_bbone_jnt_num >= 0); //Line 3564 + mpMorf->mpModel->getModelData()->getJointNodePointer(m_hed_jnt_num)->setCallBack(nodeCB_Head); + mpMorf->mpModel->getModelData()->getJointNodePointer(m_bbone_jnt_num)->setCallBack(nodeCB_BackBone); mpMorf->mpModel->setUserArea((u32)this); return 1; @@ -2916,11 +2901,11 @@ BOOL daNpc_Kk1_c::effcCreateHeap() { J3DModelData *pModel; J3DModel *pJVar1; - J3DAnmColor *pvVar2; + J3DAnmColor *a_bpk; int iVar4; - J3DAnmTextureSRTKey *pAnm; - J3DAnmTransform *pJVar5; + J3DAnmTextureSRTKey *a_btk; + J3DAnmTransform *a_bck; pModel = (J3DModelData*)dComIfG_getObjectIDRes(&mArcName,0xE); @@ -2928,31 +2913,23 @@ BOOL daNpc_Kk1_c::effcCreateHeap() { field_0x808 = pJVar1; if(field_0x808 != NULL){ - pvVar2 = (J3DAnmColor*)dComIfG_getObjectIDRes(&mArcName,0xF); - if(pvVar2 == NULL){ + a_bpk = (J3DAnmColor*)dComIfG_getObjectIDRes(&mArcName,0xF); + JUT_ASSERT(0xE01,0 != a_bpk); //Line 3585 + iVar4 = field_0x7C8.init(field_0x808->getModelData(),a_bpk,true,0,0.0,0,-1,false,0); + if(iVar4 == 0){ + return 0; + } + a_btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectIDRes(&mArcName,0x10); + JUT_ASSERT(0xE09,0 != a_btk); //Line 3593 - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xE01,"0 != a_bpk"); - OSPanic("d_a_npc_kk1.cpp",0xE01,"Halt"); - } - iVar4 = field_0x7C8.init(field_0x808->getModelData(),pvVar2,true,0,0.0,0,-1,false,0); + iVar4 = field_0x7DC.init(field_0x808->getModelData(),a_btk,true,0,0.0,0,-1,false,0); if(iVar4 == 0){ return 0; } - pAnm = (J3DAnmTextureSRTKey*)dComIfG_getObjectIDRes(&mArcName,0x10); - if(pAnm == NULL){ - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xE09,"0 != a_btk"); - OSPanic("d_a_npc_kk1.cpp",0xE09,"Halt"); - } - iVar4 = field_0x7DC.init(field_0x808->getModelData(),pAnm,true,0,0.0,0,-1,false,0); - if(iVar4 == 0){ - return 0; - } - pJVar5 = (J3DAnmTransform*)dComIfG_getObjectIDRes(&mArcName,0x0); - if(pJVar5 == NULL){ - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_kk1.cpp",0xE11,"0 != a_bck"); - OSPanic("d_a_npc_kk1.cpp",0xE11,"Halt"); - } - iVar4 = field_0x7F0.init(field_0x808->getModelData(),pJVar5,true,0,0.0,0,-1,false); + a_bck = (J3DAnmTransform*)dComIfG_getObjectIDRes(&mArcName,0x0); + JUT_ASSERT(0xE11,0 != a_bck); //Line 3601 + + iVar4 = field_0x7F0.init(field_0x808->getModelData(),a_bck,true,0,0.0,0,-1,false); if(iVar4 == 0){ return 0; }