Equivalent. A lot of work is needed to name variables and clean up functions. Weak function ordering is wrong.

This commit is contained in:
WilliamArnett
2025-05-23 01:08:09 -05:00
parent 41d9631073
commit 7387d532f5
3 changed files with 400 additions and 199 deletions
+1 -1
View File
@@ -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"),
+41 -51
View File
@@ -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 */
+358 -147
View File
@@ -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(&current.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,&current.pos);
((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos, angle_y);
s16 angle_y = cLib_targetAngleY(&LINKPOS,&current.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(&current.pos,&dComIfGp_getLinkPlayer()->current.pos);
s16 sVar3 = cLib_targetAngleY(&current.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,&current.pos);
((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&dComIfGp_getLinkPlayer()->current.pos,sVar4);
s16 r29=cLib_targetAngleY(&current.pos,&dComIfGp_getLinkPlayer()->current.pos);
short sVar4 = cLib_targetAngleY(&LINKPOS,&current.pos);
((daPy_py_c*)dComIfGp_getLinkPlayer())->setPlayerPosAndAngle(&LINKPOS,sVar4);
s16 r29=cLib_targetAngleY(&current.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(&current.pos,&player->current.pos);
current.angle.y = cLib_targetAngleY(&current.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(&current.pos,&dComIfGp_getLinkPlayer()->current.pos) - current.angle.y;
s16 angdiff = cLib_targetAngleY(&current.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(&current.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(&current.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(&current.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<f32> 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(&current.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(&current.angle.y,field_0x71A,4,0x800,0x80);
cLib_addCalcAngleS(&current.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(&current.angle.y,field_0x71A,4,0x800,0x80);
cLib_addCalcAngleS(&current.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,&current.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(&current.pos,&old.pos,this,1,&mAcchCir,&speed,NULL,NULL);
return 1;
}
}
}
/* 00006684-000066A4 .text daNpc_Kk1_Create__FP10fopAc_ac_c */