From b8807b2f504fe469d52d83fc14aaca2c8c7da0d2 Mon Sep 17 00:00:00 2001 From: WilliamArnett Date: Sun, 25 May 2025 20:27:32 -0500 Subject: [PATCH] 100% text --- configure.py | 2 +- include/d/actor/d_a_npc_km1.h | 110 ++++--- src/d/actor/d_a_npc_km1.cpp | 602 ++++++++++++++++++++++++++++------ 3 files changed, 575 insertions(+), 139 deletions(-) diff --git a/configure.py b/configure.py index 25c293028..c2b59b7b7 100755 --- a/configure.py +++ b/configure.py @@ -1605,7 +1605,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_kg1"), ActorRel(NonMatching, "d_a_npc_kg2"), ActorRel(NonMatching, "d_a_npc_kk1"), - ActorRel(NonMatching, "d_a_npc_km1"), + ActorRel(Equivalent, "d_a_npc_km1",extra_cflags=['-pragma "nosyminline on"']), # weak func order ActorRel(NonMatching, "d_a_npc_ko1"), ActorRel(NonMatching, "d_a_npc_kp1"), ActorRel(NonMatching, "d_a_npc_ls1"), diff --git a/include/d/actor/d_a_npc_km1.h b/include/d/actor/d_a_npc_km1.h index b7e988556..2e369bb1f 100644 --- a/include/d/actor/d_a_npc_km1.h +++ b/include/d/actor/d_a_npc_km1.h @@ -5,22 +5,41 @@ #include "f_op/f_op_actor.h" #include "m_Do/m_Do_hostIO.h" + + class daNpc_Km1_c : public fopNpc_npc_c { public: + + typedef int (daNpc_Km1_c::*ActionFunc)(void*); + struct anm_prm_c { - + s8 field_0x0; + s8 field_0x1; + u16 field_0x2; + float field_0x4; + float field_0x8; + int field_0xC; + }; + struct prm_tbl { + u32 field_0x00; + u32 field_0x04; + u32 field_0x08; + u32 field_0x0C; + u32 field_0x10; + f32 field_0x14; + u32 field_0x18; }; - void getAttPos() {} - void getBackboneJntNum() {} + Vec* getAttPos() {return &field_0x780;} + s8 getBackboneJntNum() {return m_backbone_jnt_num;} void getBackbone_x() {} void getBackbone_y() {} - void getEyePos() {} - void getHeadJntNum() {} + Vec* getEyePos() {return &field_0x78C;} + s8 getHeadJntNum() {return m_head_jnt_num;} void getHead_x() {} void getHead_y() {} - void createInit(); + bool createInit(); void setMtx(); bool anmResID(int, int*, int*); void BtpNum2ResID(int, int*); @@ -28,7 +47,7 @@ public: u8 init_btp(bool, int); bool initTexPatternAnm(bool); void playTexPatternAnm(); - void setAnm_anm(anm_prm_c*); + s32 setAnm_anm(anm_prm_c*); void setAnm(); void chngAnmTag(); void ctrlAnmTag(); @@ -50,26 +69,31 @@ public: void privateCut(); void endEvent(); void event_proc(); - void set_action(int (daNpc_Km1_c::*)(void*), void*); - void wait01(); - void talk01(); - void wait_action1(void*); - void demo(); + bool set_action(ActionFunc, void*); + BOOL wait01(); + BOOL talk01(); + int wait_action1(void*); + u8 demo(); bool _draw(); bool _execute(); bool _delete(); cPhs_State _create(); - void CreateHeap(); + BOOL CreateHeap(); public: - /* 0x6C4 */ u8 m6C4[0x6CC - 0x6C4]; - /* 0x6CC */ u8 mHeadJntIdx; - /* 0x6CD */ u8 mBackBoneJntIdx; - /* 0x6CE */ u8 field_0x6CE[0x6F4 - 0x6CE]; - /* 0x6F4 */ int (daNpc_Km1_c::*field_0x6F4)(); - /* 0x700 */ u8 field_0x700[0x738 - 0x700]; - /* 0x700 */ cXyz field_0x738; - /* 0x700 */ u8 field_0x744[0x76C - 0x744]; + /* 0x6C4 */ request_of_phase_process_class field_0x6C4; + /* 0x6CC */ s8 m_head_jnt_num; + /* 0x6CD */ s8 m_backbone_jnt_num; + /* 0x6CE */ u8 field_0x6CE[0x6D0 - 0x6CE]; + /* 0x6D0 */ u32 mShadowId; + /* 0x6D4 */ J3DModel* field_0x6D4; + /* 0x6D8 */ J3DAnmTexPattern* m_head_tex_pattern; + /* 0x6DC */ mDoExt_btpAnm mBtpAnm; + /* 0x6F0 */ u8 mBtpFrame; + /* 0x6F1 */ u8 field_0x6F1; + /* 0x6F2 */ s16 field_0x6F2; + /* 0x6F4 */ ActionFunc field_0x6F4; + /* 0x700 */ dNpc_EventCut_c mEventCut; /* 0x76C */ csXyz field_0x76C; /* 0x772 */ u8 field_0x772[0x774 - 0x772]; /* 0x774 */ cXyz field_0x774; @@ -79,39 +103,49 @@ public: /* 0x7A4 */ f32 field_0x7A4; /* 0x7A8 */ u8 field_0x7A8[0x7AC - 0x7A8]; /* 0x7AC */ f32 field_0x7AC; - /* 0x7B0 */ s16 field_0x7B0; /* 0x7B2 */ s16 field_0x7B2; /* 0x7B4 */ s8 field_0x7B4; /* 0x7B5 */ s8 field_0x7B5; - /* 0x7B6 */ u8 field_0x7B6[0x7B8 - 0x7B6]; + /* 0x7B6 */ u8 field_0x7B6; + /* 0x7B7 */ u8 field_0x7B7; /* 0x7B8 */ u8 field_0x7B8; /* 0x7B9 */ u8 field_0x7B9[0x7BC - 0x7B9]; /* 0x7BC */ s32 field_0x7BC; /* 0x7C0 */ s32 field_0x7C0; - /* 0x7C4 */ u16 field_0x7C5; + /* 0x7C4 */ u8 field_0x7C4; + /* 0x7C5 */ u8 field_0x7C5; /* 0x7C6 */ bool mHeadOnlyFollow; /* 0x7C7 */ u8 field_0x7C7; - /* 0x7C8 */ u8 field_0x7C8[0x7CA - 0x7C8]; + /* 0x7C8 */ u8 field_0x7C8; + /* 0x7C8 */ s8 field_0x7C9; /* 0x7CA */ s8 field_0x7CA; - /* 0x7CB */ s8 field_0x7CB; - /* 0x7CC */ s8 field_0x7CC; + /* 0x7CB */ u8 field_0x7CB; + /* 0x7CC */ u8 field_0x7CC; /* 0x7CD */ s8 field_0x7CD; /* 0x7CE */ s8 field_0x7CE; - /* 0x7CF */ u8 field_0x7CF; + /* 0x7CF */ s8 field_0x7CF; /* 0x7D0 */ s8 field_0x7D0; - /* 0x7D0 */ s8 field_0x7D1; - /* 0x7D0 */ s8 field_0x7D2; - /* 0x7D0 */ s8 field_0x7D3; - /* 0x7D0 */ s8 field_0x7D4; - /* 0x7D0 */ s8 field_0x7D5; - /* 0x7D0 */ s8 field_0x7D6; - /* 0x7D0 */ s8 field_0x7D7; + /* 0x7D1 */ s8 field_0x7D1; + /* 0x7D2 */ s8 field_0x7D2; + /* 0x7D3 */ s8 field_0x7D3; + /* 0x7D4 */ s8 field_0x7D4; + /* 0x7D5 */ s8 field_0x7D5; + /* 0x7D6 */ s8 field_0x7D6; + /* 0x7D7 */ s8 field_0x7D7; }; // Size: 0x7D8 -class daNpc_Km1_HIO_c : mDoHIO_entry_c { +class daNpc_Km1_HIO_c : public JORReflexible{ struct daNpc_Km1_HIO__PrmTbl{ - s16 field_0[0x9]; + s16 field_0; + s16 field_2; + s16 field_4; + s16 field_6; + s16 field_8; + s16 field_A; + s16 field_C; + s16 field_E; + s16 field_10; s16 field_12; f32 mAttentionArrowYOffset; f32 field_18; @@ -121,7 +155,7 @@ public: virtual ~daNpc_Km1_HIO_c(){}; public: /* Place member variables here */ - /* 0x4 */ s8 field_0x4; + /* 0x4 */ s8 mNo; /* 0x5 */ s8 field_0x5; /* 0x6 */ s8 field_0x6; /* 0x7 */ s8 field_0x7; diff --git a/src/d/actor/d_a_npc_km1.cpp b/src/d/actor/d_a_npc_km1.cpp index e945d7392..2b338311e 100644 --- a/src/d/actor/d_a_npc_km1.cpp +++ b/src/d/actor/d_a_npc_km1.cpp @@ -5,30 +5,82 @@ #include "d/actor/d_a_npc_km1.h" #include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "d/d_snap.h" #include "m_Do/m_Do_ext.h" #include "d/d_procname.h" #include "d/d_priority.h" - +#include "weak_bss_936_to_1036.h" static daNpc_Km1_HIO_c l_HIO; /* 000000EC-00000144 .text __ct__15daNpc_Km1_HIO_cFv */ daNpc_Km1_HIO_c::daNpc_Km1_HIO_c() { - /* Nonmatching */ + + static daNpc_Km1_c::prm_tbl a_prm_tbl[] = {0x1FFE38E0, 0xE002C720, 0x00000000, 0x00000000, + 0x08000800, 150.0, 0x00000000}; + memcpy(&mPrmTbl,a_prm_tbl,0x1C); + mNo = -1; + field_0x8 = -1; + return; } /* 00000144-000002F0 .text nodeCallBack_Km__FP7J3DNodei */ -static BOOL nodeCallBack_Km(J3DNode*, int) { - /* Nonmatching */ -} +static BOOL nodeCallBack_Km(J3DNode* i_node, int i_calcTiming) { + + if (i_calcTiming == 0) { + J3DModel* model = j3dSys.getModel(); + daNpc_Km1_c* km1Actor = (daNpc_Km1_c *)(model->getUserArea()); + u16 jointIdx; + if (km1Actor) { + static cXyz a_att_pos_offst(0.0,0.0,0.0); + static cXyz a_eye_pos_offst(20.0,20.0,0.0); + jointIdx = ((J3DJoint*)(i_node))->getJntNo(); + mDoMtx_stack_c::copy(model->getAnmMtx(jointIdx)); + if(jointIdx == km1Actor->getHeadJntNum()){ + MTXMultVec(mDoMtx_stack_c::get(),&a_att_pos_offst,km1Actor->getAttPos()); + mDoMtx_stack_c::XrotM(km1Actor->m_jnt.getHead_y()); + mDoMtx_stack_c::ZrotM(km1Actor->m_jnt.getHead_x()); + MTXMultVec(mDoMtx_stack_c::get(),&a_eye_pos_offst,km1Actor->getEyePos()); + }else if(jointIdx == km1Actor->getBackboneJntNum()){ + mDoMtx_stack_c::XrotM(km1Actor->m_jnt.getBackbone_y()); + mDoMtx_stack_c::ZrotM(km1Actor->m_jnt.getBackbone_x()); + } + MtxP stack = mDoMtx_stack_c::get(); + cMtx_copy(stack,J3DSys::mCurrentMtx); + MTXCopy(stack,model->getAnmMtx(jointIdx)); + + } + } + return 1; + } + + +extern dCcD_SrcCyl dNpc_cyl_src; /* 0000032C-0000043C .text createInit__11daNpc_Km1_cFv */ -void daNpc_Km1_c::createInit() { - /* Nonmatching */ +bool daNpc_Km1_c::createInit() { + + mEventCut.setActorInfo2("Km1", this); + attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e; + attention_info.distances[1] = 0xAB; + attention_info.distances[3] = 0xA9; + gravity = -4.0; + field_0x798 = current.pos; + set_action(&daNpc_Km1_c::wait_action1,NULL); + shape_angle = current.angle; + mStts.Init(0xFF,0xFF,this); + mCyl.SetStts(&mStts); + mCyl.Set(dNpc_cyl_src); + mpMorf->setMorf(0.0); + field_0x7BC = 1; + setMtx(); + return 1; + } /* 0000043C-0000054C .text setMtx__11daNpc_Km1_cFv */ void daNpc_Km1_c::setMtx() { - /* Nonmatching */ + u32 uVar1; char cVar2; u8 bVar3; @@ -55,45 +107,27 @@ void daNpc_Km1_c::setMtx() { setAttention(); } -#define ANM_END 1 -static int a_anm_idx_tbl[1][2]; + /* 0000054C-00000654 .text anmResID__11daNpc_Km1_cFiPiPi */ bool daNpc_Km1_c::anmResID(int i_num, int* o_bck_num, int* o_bas_num) { - /* Nonmatching */ - bool check_safe = false; - if(0 <= i_num && i_num < ANM_END){ - check_safe = true; - } - if(!check_safe){ - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_km1.cpp",0x11A,"0 <= i_num && i_num < ANM_END"); //ANM_END = 1 - OSPanic("d_a_npc_km1.cpp", 0x11A, "Halt"); - } - check_safe = false; - if(o_bck_num != NULL && o_bas_num != NULL){ - check_safe = true; - } - if(!check_safe){ - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_km1.cpp",0x11A,"o_bck_num && o_bas_num"); - OSPanic("d_a_npc_km1.cpp", 0x11B, "Halt"); - } + const int ANM_END = 1; + static const int a_anm_idx_tbl[1][2] = {1,0}; + + JUT_ASSERT(0x11A,0 <= i_num && i_num < ANM_END); + JUT_ASSERT(0x11B,o_bck_num && o_bas_num); *o_bck_num = a_anm_idx_tbl[i_num][0]; *o_bas_num = a_anm_idx_tbl[i_num][1]; return 1; } -static int a_btp_arc_ix_tbl[2] = {0,3}; + /* 00000654-000006F0 .text BtpNum2ResID__11daNpc_Km1_cFiPi */ void daNpc_Km1_c::BtpNum2ResID(int i_num, int* o_btp_num) { - bool check_safe = false; - if (0 <= i_num && i_num < ANM_END) { //TODO: Possibly not this define, 1 instead. - check_safe = true; - } - if (!check_safe) { - JUTAssertion::showAssert(JUTAssertion::getSDevice(),"d_a_npc_km1.cpp",0x130,"0 <= i_num && i_num < TEXPATTERN_END"); - OSPanic("d_a_npc_km1.cpp",0x130,"Halt"); - } - *o_btp_num = a_btp_arc_ix_tbl[i_num]; + const int TEXPATTERN_END = 1; + static const int a_btp_arc_ix_tbl[1] = {3}; + JUT_ASSERT(0x130,0 <= i_num && i_num < TEXPATTERN_END); + *o_btp_num = a_btp_arc_ix_tbl[i_num]; return; } @@ -107,8 +141,27 @@ void daNpc_Km1_c::setAnm_tex(signed char i_param_1) { } /* 00000734-00000850 .text init_btp__11daNpc_Km1_cFbi */ -u8 daNpc_Km1_c::init_btp(bool, int) { - /* Nonmatching */ +u8 daNpc_Km1_c::init_btp(bool param_1, int param_2) { + + int btp_num; + int iVar3; + J3DModelData *pJVar4; + + pJVar4 = mpMorf->getModel()->getModelData(); + if (param_2 >= 0) { + BtpNum2ResID(param_2,&btp_num); + J3DAnmTexPattern* pVVar1 = (J3DAnmTexPattern*)dComIfG_getObjectIDRes("Km",btp_num); + m_head_tex_pattern = pVVar1; + JUT_ASSERT(0x151,m_head_tex_pattern != 0); + iVar3 = mBtpAnm.init(pJVar4,m_head_tex_pattern,1,2,1.0,0,-1,param_1,0); + + if (iVar3 == 0) { + return 0; + } + mBtpFrame = 0; + field_0x6F2 = 0; + } + return 1; } /* 00000850-00000894 .text initTexPatternAnm__11daNpc_Km1_cFb */ @@ -125,63 +178,164 @@ bool daNpc_Km1_c::initTexPatternAnm(bool param_1) { /* 00000894-00000958 .text playTexPatternAnm__11daNpc_Km1_cFv */ void daNpc_Km1_c::playTexPatternAnm() { - /* Nonmatching */ + + + //TODO: Rewrite this conditional logic + bool var_r4 = 1; + if(field_0x7CD == 0){ + var_r4 = !cLib_calcTimer(&field_0x6F2); + } + if(!var_r4){ + return; + } + + if((mBtpFrame += 1) < m_head_tex_pattern->getFrameMax()){ + return; + } + + if(field_0x7CD){ + mBtpFrame = m_head_tex_pattern->getFrameMax(); + return; + + }else{ + mBtpFrame = 0; + field_0x6F2 = cM_rndF(60.0) + 30.0f; + } + return; } /* 00000958-00000A24 .text setAnm_anm__11daNpc_Km1_cFPQ211daNpc_Km1_c9anm_prm_c */ -void daNpc_Km1_c::setAnm_anm(daNpc_Km1_c::anm_prm_c*) { - /* Nonmatching */ +s32 daNpc_Km1_c::setAnm_anm(daNpc_Km1_c::anm_prm_c* i_anm_ptr) { + + u32 uVar2 = 0; + int local_18; + int local_14; + + + if (i_anm_ptr->field_0x0 >= 0 && field_0x7CE != i_anm_ptr->field_0x0) { + + field_0x7CE = i_anm_ptr->field_0x0; + if (mpMorf != NULL) { + anmResID(field_0x7CE,&local_18,&local_14); + if (local_18 >= 0) { + dNpc_setAnmIDRes(mpMorf,i_anm_ptr->field_0xC,i_anm_ptr->field_0x4,i_anm_ptr->field_0x8,local_18,local_14,"Km"); + } + uVar2 = 1; + } + field_0x7A4 = 0; + field_0x7B5 = 0; + field_0x7B4 = 0; + } + return uVar2; } /* 00000A24-00000A8C .text setAnm__11daNpc_Km1_cFv */ void daNpc_Km1_c::setAnm() { - /* Nonmatching */ + + static daNpc_Km1_c::anm_prm_c a_anm_prm_tbl2[3] = { + {-1,-1,0,0,0,-1}, + {0,0,0x00,8,1,2}, + {-1,-1,0,0,0,-1} + }; + setAnm_tex(a_anm_prm_tbl2[field_0x7D0].field_0x1); + setAnm_anm(&a_anm_prm_tbl2[field_0x7D0]); } /* 00000A8C-00000A98 .text chngAnmTag__11daNpc_Km1_cFv */ void daNpc_Km1_c::chngAnmTag() { - /* Nonmatching */ + + switch(field_0x7CC){ + case 0: + break; + } + return; } /* 00000A98-00000AA4 .text ctrlAnmTag__11daNpc_Km1_cFv */ void daNpc_Km1_c::ctrlAnmTag() { - /* Nonmatching */ + + switch(field_0x7CB){ + case 0: + break; + } } /* 00000AA4-00000AE4 .text chngAnmAtr__11daNpc_Km1_cFUc */ -void daNpc_Km1_c::chngAnmAtr(unsigned char) { - /* Nonmatching */ +void daNpc_Km1_c::chngAnmAtr(unsigned char param_1) { + if(param_1 < 1 && param_1 != field_0x7CB){ + field_0x7CB = param_1; + setAnm_ATR(1); + } + return; } /* 00000AE4-00000AE8 .text ctrlAnmAtr__11daNpc_Km1_cFv */ void daNpc_Km1_c::ctrlAnmAtr() { - /* Nonmatching */ -} +} /* 00000AE8-00000B50 .text setAnm_ATR__11daNpc_Km1_cFi */ -void daNpc_Km1_c::setAnm_ATR(int) { - /* Nonmatching */ +void daNpc_Km1_c::setAnm_ATR(int param_1) { + + static daNpc_Km1_c::anm_prm_c a_anm_prm_tbl3[1] = { + {0x00,0x00,0x00,8,1,2} + }; + if(param_1 != 0){ + setAnm_tex(a_anm_prm_tbl3[field_0x7CB].field_0x1); + } + setAnm_anm((&a_anm_prm_tbl3[field_0x7CB])); + return; } /* 00000B50-00000C0C .text anmAtr__11daNpc_Km1_cFUs */ -void daNpc_Km1_c::anmAtr(unsigned short) { - /* Nonmatching */ +void daNpc_Km1_c::anmAtr(unsigned short param_1) { + + if(param_1 == 6){ + if(field_0x7D6 == 0){ + field_0x7CC = 0xFF; + chngAnmAtr(dComIfGp_getMesgAnimeAttrInfo()); + field_0x7D6 += 1; + } + u8 uVar1 = dComIfGp_getMesgAnimeTagInfo(); + if(uVar1 != 0xFF && uVar1 != field_0x7CC){ + dComIfGp_clearMesgAnimeTagInfo(); + field_0x7CC = uVar1; + chngAnmTag(); + } + }else if(param_1 == 0xE){ + field_0x7D6 = 0; + } + ctrlAnmAtr(); + ctrlAnmTag(); + return; } /* 00000C0C-00000C64 .text setStt__11daNpc_Km1_cFSc */ -void daNpc_Km1_c::setStt(signed char) { - /* Nonmatching */ -} +void daNpc_Km1_c::setStt(signed char param_1) { + s8 uVar1 = field_0x7D0; + field_0x7D0 = param_1; + switch((s8)field_0x7D0) { + case 2: + field_0x7D2 = 1; + field_0x7CB = 0xFF; + field_0x7D1 = uVar1; + break; + default: + case 1: + setAnm(); + break; + } + return; +} /* 00000C64-00000C6C .text next_msgStatus__11daNpc_Km1_cFPUl */ u16 daNpc_Km1_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ + return 0x10; } /* 00000C6C-00000C74 .text getMsg__11daNpc_Km1_cFv */ u32 daNpc_Km1_c::getMsg() { - /* Nonmatching */ + return 0; } @@ -199,7 +353,7 @@ void daNpc_Km1_c::eventOrder() { /* 00000CC4-00000D04 .text checkOrder__11daNpc_Km1_cFv */ void daNpc_Km1_c::checkOrder() { - /* Nonmatching */ + if(eventInfo.checkCommandDemoAccrpt()){ return; } @@ -216,18 +370,13 @@ void daNpc_Km1_c::checkOrder() { /* 00000D04-00000E94 .text lookBack__11daNpc_Km1_cFv */ void daNpc_Km1_c::lookBack() { - /* Nonmatching */ - // mLookBackHeadY = m_jnt.getHead_y(); - // mLookBackBackboneY = m_jnt.getBackbone_y(); - // mLookBackAngleY = current.angle.y; + cXyz vec1; cXyz vec2 = current.pos; vec2.y = eyePos.y; vec1.setall(0.0); - - int Int1; - fopAc_ac_c *pActor; + cXyz* dstPos = NULL; s16 targetY = current.angle.y; bool headOnlyFollow = mHeadOnlyFollow; @@ -271,6 +420,7 @@ bool daNpc_Km1_c::chkAttention() { } } +const u32 fillerbytes[] = {0xFF000080,0x0000FF80}; /* 00000F14-00000F78 .text setAttention__11daNpc_Km1_cFv */ void daNpc_Km1_c::setAttention() { @@ -316,102 +466,354 @@ bool daNpc_Km1_c::event_action() { } return 1; } - +static char* cut_name_tbl[] = {"ACTION"}; /* 0000103C-00001144 .text privateCut__11daNpc_Km1_cFv */ void daNpc_Km1_c::privateCut() { - /* Nonmatching */ - // dComIfGp_evmng_getMyStringP() - // int staffIdx = dComIfGp_evmng_getMyStaffId() + + int staffIdx = dComIfGp_evmng_getMyStaffId("Km1",NULL,0); + if(staffIdx != -1){ + int uVar1 = dComIfGp_evmng_getMyActIdx(staffIdx,cut_name_tbl,1,1,0); + field_0x7C9 = uVar1; + if(field_0x7C9 == -1){ + dComIfGp_evmng_cutEnd(staffIdx); + return; + } + if(dComIfGp_evmng_getIsAddvance(staffIdx)){ + switch(field_0x7C9){ + case 0: + event_actionInit(staffIdx); + } + } + bool bVar1; + switch(field_0x7C9){ + case 0: + bVar1 = event_action(); + break; + default: + bVar1 = 1; + break; + } + + if(bVar1){ + dComIfGp_evmng_cutEnd(staffIdx); + } + + } } /* 00001144-00001164 .text endEvent__11daNpc_Km1_cFv */ void daNpc_Km1_c::endEvent() { - /* Nonmatching */ + + dComIfGp_event_onEventFlag(8); + field_0x7CB = 0xFF; + return; } /* 00001164-000011C4 .text event_proc__11daNpc_Km1_cFv */ void daNpc_Km1_c::event_proc() { - /* Nonmatching */ + + if(!mEventCut.cutProc()){ + privateCut(); + } + lookBack(); + shape_angle = current.angle; } /* 000011C4-00001270 .text set_action__11daNpc_Km1_cFM11daNpc_Km1_cFPCvPvPv_iPv */ -void daNpc_Km1_c::set_action(int (daNpc_Km1_c::*)(void*), void*) { - /* Nonmatching */ +bool daNpc_Km1_c::set_action(ActionFunc i_action, void* param_2) { + + if(field_0x6F4 != i_action){ + if(field_0x6F4 != 0){ + field_0x7D5 = 0xFF; + (this->*field_0x6F4)(param_2); + } + field_0x6F4 = i_action; + field_0x7D5 = 0; + (this->*field_0x6F4)(param_2); + } + return 1; } /* 00001270-00001368 .text wait01__11daNpc_Km1_cFv */ -void daNpc_Km1_c::wait01() { - /* Nonmatching */ +BOOL daNpc_Km1_c::wait01() { + + if(field_0x7C5 != 0){ + bool set_stt = true; + field_0x7B7 = 0xFF; + if(dComIfGp_event_chkTalkXY()){ + if(dComIfGp_evmng_ChkPresentEnd() != 0){ + field_0x7B7 = dComIfGp_event_getPreItemNo(); + }else{ + set_stt = false; + } + } + if(set_stt){ + setStt(2); + } + }else{ + field_0x7CF = 2; + if(field_0x7C4){ + field_0x7D2 = 1; + }else{ + field_0x7D2 = 3; + field_0x7B2 = field_0x76C.y; + m_jnt.setTrn(); + } + } + return 1; } /* 00001368-000013F8 .text talk01__11daNpc_Km1_cFv */ -void daNpc_Km1_c::talk01() { - /* Nonmatching */ +BOOL daNpc_Km1_c::talk01() { + talk(1); + if(mpCurrMsg != NULL){ + switch(mpCurrMsg->mStatus){ + case 6: + case 2: + break; + case 19: + field_0x7B7 = 0xFF; + setStt((field_0x7D1)); + field_0x7C8 = 0; + field_0x7C5 = 0; + endEvent(); + break; + } + } + return 1; } /* 000013F8-000014AC .text wait_action1__11daNpc_Km1_cFPv */ -void daNpc_Km1_c::wait_action1(void*) { - /* Nonmatching */ +int daNpc_Km1_c::wait_action1(void*) { + + if(field_0x7D5 == 0){ + setStt(1); + field_0x7D5 += 1; + }else if( field_0x7D5 != -1){ + + field_0x7C4 = chkAttention(); + switch(field_0x7D0){ + case 2: + field_0x7C0 = talk01(); + break; + case 1: + field_0x7C0 = wait01(); + break; + default: + field_0x7C0 = 0; + break; + } + lookBack(); + } + return 1; } /* 000014AC-00001548 .text demo__11daNpc_Km1_cFv */ -void daNpc_Km1_c::demo() { - /* Nonmatching */ +u8 daNpc_Km1_c::demo() { + + if(demoActorID == 0){ + if(field_0x7C7 != 0){ + field_0x7C7 = 0; + } + }else{ + field_0x7C7 = 1; + dComIfGp_demo_getActor(demoActorID); + dDemo_setDemoData(this,0x6A,mpMorf,"Km",0,0,0,0); + } + return field_0x7C7; } /* 00001548-000016AC .text _draw__11daNpc_Km1_cFv */ bool daNpc_Km1_c::_draw() { - /* Nonmatching */ + + J3DModelData *model_data; + J3DModel *model; + model = mpMorf->getModel(); + model_data = model->getModelData(); + g_env_light.settingTevStruct(TEV_TYPE_ACTOR,¤t.pos,&tevStr); + g_env_light.setLightTevColorType(model,&tevStr); + mBtpAnm.entry(model_data,mBtpFrame); + mpMorf->entryDL(); + mBtpAnm.remove(model_data); + dNpc_setShadowModel(field_0x6D4,model_data,model); + + cXyz pos(current.pos.x,current.pos.y+150.0f,current.pos.z); + mShadowId = dComIfGd_setRealShadow(mShadowId,1,field_0x6D4,&pos,800.0,current.pos.y-mObjAcch.GetGroundH(),NULL); + if(mShadowId == 0){ + cXyz* pFloorNrm = (cXyz*)dComIfG_Bgsp()->GetTriPla(mObjAcch.m_gnd.GetBgIndex(),mObjAcch.m_gnd.GetPolyIndex()); + dComIfGd_setSimpleShadow(¤t.pos,mObjAcch.GetGroundH(),40.0,pFloorNrm); + } + dSnap_RegistFig(0x58,this,1.0,1.0,1.0); + return 1; } /* 000016AC-00001808 .text _execute__11daNpc_Km1_cFv */ bool daNpc_Km1_c::_execute() { - /* Nonmatching */ + + if(field_0x7B8 == 0){ + field_0x774 = current.pos; + field_0x76C = current.angle; + field_0x7B8 = 1; + } + m_jnt.setParam(l_HIO.mPrmTbl.field_8, + l_HIO.mPrmTbl.field_A,l_HIO.mPrmTbl.field_C, + l_HIO.mPrmTbl.field_E,l_HIO.mPrmTbl.field_0, + l_HIO.mPrmTbl.field_2,l_HIO.mPrmTbl.field_4, + l_HIO.mPrmTbl.field_6,l_HIO.mPrmTbl.field_10); + checkOrder(); + if(demo() == 0){ + if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()){ + event_proc(); + }else{ + (this->*field_0x6F4)(NULL); + shape_angle = current.angle; + } + } + eventOrder(); + if(field_0x7C7 == 0){ + fopAcM_posMoveF(this,(cXyz*)&mStts); + } + setMtx(); + setCollision(60.0,150.0); + return 1; } /* 00001808-0000188C .text _delete__11daNpc_Km1_cFv */ bool daNpc_Km1_c::_delete() { - /* Nonmatching */ + + fopAcM_GetID(this); + dComIfG_resDelete(&field_0x6C4,"Km"); + + if(mpMorf != NULL){ + mpMorf->stopZelAnime(); + } + if(l_HIO.field_0x8 >= 0){ + l_HIO.field_0x8 += -1; + if(l_HIO.field_0x8 < 0){ + mDoHIO_deleteChild(l_HIO.mNo); + } + } + return 1; + } /* 0000188C-000018AC .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* actor) { + + return ((daNpc_Km1_c*)actor)->CreateHeap(); } /* 000018AC-00001A1C .text _create__11daNpc_Km1_cFv */ cPhs_State daNpc_Km1_c::_create() { - /* Nonmatching */ + + static int a_heap_size_tbl[1] = {0x000272E0}; + fopAcM_SetupActor(this,daNpc_Km1_c); + + + if (!decideType(base.mParameters & 0xff)) { + return cPhs_ERROR_e; + } + + s32 resLoadResult = dComIfG_resLoad(&field_0x6C4,"Km"); + + + if(resLoadResult != cPhs_COMPLEATE_e){ + return resLoadResult; + } + if(l_HIO.field_0x8 < 0){ + l_HIO.mNo = mDoHIO_createChild("金持ちム−ル",&l_HIO); + } + l_HIO.field_0x8 += 1; + if(fopAcM_entrySolidHeap(this,CheckCreateHeap,a_heap_size_tbl[field_0x7D3])){ + + cullMtx = (MtxP)mpMorf->mpModel->getBaseTRMtx(); + fopAcM_SetMtx(this,cullMtx); + fopAcM_setCullSizeBox(this,-60.0,-20.0,-80.0,60.0,160.0,60.0); + + }else{ + return cPhs_ERROR_e; + } + if (createInit() == 0) { + resLoadResult = cPhs_ERROR_e; + + + } + return resLoadResult; + } /* 00001E4C-00002158 .text CreateHeap__11daNpc_Km1_cFv */ -void daNpc_Km1_c::CreateHeap() { - /* Nonmatching */ -} +BOOL daNpc_Km1_c::CreateHeap() { + static u8 a_tex_pattern_num_tbl[1] = {0}; + J3DModelData *a_mdl_data; + + + a_mdl_data = (J3DModelData*)dComIfG_getObjectIDRes("Km",0x2); + JUT_ASSERT(0x52D,a_mdl_data != 0); + mpMorf = new mDoExt_McaMorf( + a_mdl_data, + NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectIDRes("Km", 0x1), + J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1, NULL, + 0x80000, 0x11020002 + ); + if (mpMorf){ + if(mpMorf->getModel()) { + + m_head_jnt_num = a_mdl_data->getJointName()->getIndex("head"); + JUT_ASSERT(0x540,m_head_jnt_num >= 0); + m_backbone_jnt_num = a_mdl_data->getJointName()->getIndex("backbone"); + JUT_ASSERT(0x542,m_backbone_jnt_num >= 0); + field_0x7CD = a_tex_pattern_num_tbl[field_0x7D3]; + if (initTexPatternAnm(false) != 0) { + field_0x6D4 = mDoExt_J3DModel__create(a_mdl_data,0x20000,0x11020203); + if (field_0x6D4 != 0) { + for (u16 i = 0; i < a_mdl_data->getJointNum(); i += 1) { + if ((i == m_head_jnt_num) || (i == m_backbone_jnt_num)) { + mpMorf->mpModel->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_Km); + } + } + mpMorf->getModel()->setUserArea((u32)this); + mAcchCir.SetWall(30.0,60.0); + mObjAcch.Set(¤t.pos,&old.pos,(fopAc_ac_c *)this,1, + &mAcchCir,&speed,NULL,NULL); + return 1; + } + } + } + mpMorf = NULL; + } + return 0; +} /* 00002158-00002178 .text daNpc_Km1_Create__FP10fopAc_ac_c */ -static cPhs_State daNpc_Km1_Create(fopAc_ac_c*) { - /* Nonmatching */ +static cPhs_State daNpc_Km1_Create(fopAc_ac_c* obj) { + + (static_cast(obj))->_create(); } /* 00002178-00002198 .text daNpc_Km1_Delete__FP11daNpc_Km1_c */ -static BOOL daNpc_Km1_Delete(daNpc_Km1_c*) { - /* Nonmatching */ +static BOOL daNpc_Km1_Delete(daNpc_Km1_c* obj) { + + (static_cast(obj))->_delete(); } /* 00002198-000021B8 .text daNpc_Km1_Execute__FP11daNpc_Km1_c */ -static BOOL daNpc_Km1_Execute(daNpc_Km1_c*) { - /* Nonmatching */ +static BOOL daNpc_Km1_Execute(daNpc_Km1_c* obj) { + + (static_cast(obj))->_execute(); } /* 000021B8-000021D8 .text daNpc_Km1_Draw__FP11daNpc_Km1_c */ -static BOOL daNpc_Km1_Draw(daNpc_Km1_c*) { - /* Nonmatching */ +static BOOL daNpc_Km1_Draw(daNpc_Km1_c* obj) { + + (static_cast(obj))->_draw(); } /* 000021D8-000021E0 .text daNpc_Km1_IsDelete__FP11daNpc_Km1_c */ static BOOL daNpc_Km1_IsDelete(daNpc_Km1_c*) { - /* Nonmatching */ + return TRUE; + } static actor_method_class l_daNpc_Km1_Method = {