From 43f89340b2d4617ee4632d0420c97518406b7707 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 7 Jan 2024 18:43:23 -0500 Subject: [PATCH] d_a_npc_btsw2 50% --- configure.py | 2 +- include/d/actor/d_a_npc_btsw2.h | 88 +++++++-- include/d/d_npc.h | 5 +- include/m_Do/m_Do_ext.h | 50 ++--- src/d/actor/d_a_npc_btsw2.cpp | 332 +++++++++++++++++++++++++++++--- src/m_Do/m_Do_ext.cpp | 20 +- 6 files changed, 410 insertions(+), 87 deletions(-) diff --git a/configure.py b/configure.py index 31bfe1925..2888610da 100644 --- a/configure.py +++ b/configure.py @@ -1459,7 +1459,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_bmsw"), ActorRel(NonMatching, "d_a_npc_bs1"), ActorRel(NonMatching, "d_a_npc_btsw"), - ActorRel(NonMatching, "d_a_npc_btsw2"), + ActorRel(NonMatching, "d_a_npc_btsw2", extra_cflags=['-pragma "nosyminline on"']), ActorRel(NonMatching, "d_a_npc_co1"), ActorRel(NonMatching, "d_a_npc_de1"), ActorRel(NonMatching, "d_a_npc_ds1"), diff --git a/include/d/actor/d_a_npc_btsw2.h b/include/d/actor/d_a_npc_btsw2.h index 9d3f96847..4b457c30a 100644 --- a/include/d/actor/d_a_npc_btsw2.h +++ b/include/d/actor/d_a_npc_btsw2.h @@ -2,44 +2,104 @@ #define D_A_NPC_BTSW2_H #include "f_op/f_op_actor.h" +#include "d/d_npc.h" -class daNpc_Btsw2_c : public fopAc_ac_c { +class daNpc_Btsw2_c : public fopNpc_npc_c { public: - void getAttentionBasePos() {} - void setAction(int (daNpc_Btsw2_c::*)(void*), void*) {} + typedef BOOL (daNpc_Btsw2_c::*ActionFunc)(void*); - void initTexPatternAnm(bool); + void getAttentionBasePos() {} + void setAction(ActionFunc func, void*) { + if (mCurrActionFunc != func) { + if (mCurrActionFunc) { + m74A = -1; + (this->*mCurrActionFunc)(NULL); + } + mCurrActionFunc = func; + m74A = 0; + (this->*mCurrActionFunc)(NULL); + } + } + + BOOL initTexPatternAnm(bool); void playTexPatternAnm(); - void setAnm(signed char); - void chkAttention(cXyz, short); + void setAnm(s8); + void chkAttention(cXyz, s16); void eventOrder(); void checkOrder(); - void anmAtr(unsigned short); - void getMsg(); - void next_msgStatus(unsigned long*); + virtual void anmAtr(u16); + virtual u32 getMsg(); + virtual u16 next_msgStatus(u32*); void setAttention(); void lookBack(); - void CreateHeap(); - void CreateInit(); + BOOL CreateHeap(); + BOOL CreateInit(); void wait01(); void talk01(); void pathMove(); - void wait_action(void*); + BOOL wait_action(void*); s32 _create(); BOOL _delete(); BOOL _execute(); BOOL _draw(); + static const char m_arc_name[]; + public: - /* Place member variables here */ + /* 0x6C4 */ request_of_phase_process_class mPhs; + /* 0x6CC */ u32 mShadowId; + /* 0x6D0 */ J3DModel* m6D0; + /* 0x6D4 */ J3DModel* m6D4; + /* 0x6D8 */ J3DAnmTexPattern* m_btp; + /* 0x6DC */ mDoExt_btpAnm mBtpAnm; + /* 0x6F0 */ s8 m6F0; + /* 0x6F1 */ s8 m6F1; + /* 0x6F2 */ s8 m6F2; + /* 0x6F3 */ u8 m6F3[0x6F4 - 0x6F3]; + /* 0x6F4 */ s16 m6F4; + /* 0x6F6 */ u8 m6F6[0x704 - 0x6F6]; + /* 0x704 */ cXyz m704; + /* 0x710 */ u8 m710[0x714 - 0x710]; + /* 0x714 */ csXyz m714; + /* 0x71A */ u8 m71A[0x71D - 0x71A]; + /* 0x71D */ u8 m71D; + /* 0x71E */ bool m71E; + /* 0x71F */ u8 m71F[0x724 - 0x71F]; + /* 0x724 */ u8 m724; + /* 0x725 */ u8 m725[0x728 - 0x725]; + /* 0x728 */ ActionFunc mCurrActionFunc; + /* 0x734 */ s8 mPathNo; + /* 0x735 */ u8 m735; + /* 0x736 */ u8 m736; + /* 0x737 */ u8 m737[0x738 - 0x737]; + /* 0x738 */ dPath* mpPath; + /* 0x73C */ s16 m73C; + /* 0x73E */ s16 m73E; + /* 0x740 */ s16 m740; + /* 0x742 */ s16 m742; + /* 0x744 */ s8 m744; + /* 0x745 */ u8 m745; + /* 0x746 */ u8 m746; + /* 0x747 */ u8 m747; + /* 0x748 */ u8 m748[0x74A - 0x748]; + /* 0x74A */ s8 m74A; + /* 0x74B */ u8 m74B[0x74C - 0x74B]; }; class daNpc_Btsw2_HIO_c { public: daNpc_Btsw2_HIO_c(); + virtual ~daNpc_Btsw2_HIO_c() {} public: - /* Place member variables here */ + /* 0x04 */ s8 mChildID; + /* 0x08 */ dNpc_HIO_c mNpc; + /* 0x30 */ s16 m30; + /* 0x32 */ s16 m32; + /* 0x34 */ f32 m34; + /* 0x38 */ f32 m38; + /* 0x3C */ s16 m3C; + /* 0x3E */ s16 m3E; }; #endif /* D_A_NPC_BTSW2_H */ diff --git a/include/d/d_npc.h b/include/d/d_npc.h index b5fe2462c..ebeaa38c1 100644 --- a/include/d/d_npc.h +++ b/include/d/d_npc.h @@ -214,7 +214,7 @@ public: mCurrMsgBsPcId = fpcM_ERROR_PROCESS_ID_e; mpCurrMsg = 0; } - /* 0x290 */ dNpc_JntCtrl_c mJntCtrl; + /* 0x290 */ dNpc_JntCtrl_c m_jnt; /* 0x2C4 */ dNpc_EventCut_c mEventCut; /* 0x330 */ mDoExt_McaMorf* mpMcaMorf; /* 0x334 */ dBgS_ObjAcch mObjAcch; @@ -226,6 +226,7 @@ public: /* 0x6AC */ u32 mCurrMsgBsPcId; /* 0x6B0 */ msg_class* mpCurrMsg; /* 0x6B4 */ u8 pad_0x6B4[0x6C0 - 0x6B4]; + /* 0x6C0 */ /* vtable */ virtual u16 next_msgStatus(u32* msgId) { return fopMsgStts_MSG_ENDS_e; } virtual u32 getMsg() { return 0; } @@ -233,7 +234,7 @@ public: void setCollision(float radius, float height); u16 talk(int); -}; +}; // Size: 0x6C4 bool dNpc_setAnmIDRes(mDoExt_McaMorf* pMorf, int loopMode, float morf, float speed, int animResId, int soundResId, const char* arcName); bool dNpc_setAnmFNDirect(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, char* animFilename, char* soundFilename, const char* arcName); diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index cb4cec7ce..4c3042db5 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -49,13 +49,13 @@ private: class mDoExt_btkAnm : public mDoExt_baseAnm { public: mDoExt_btkAnm() { mpTexMtxAnm = NULL; } - int init(J3DMaterialTable* i_matTable, J3DAnmTextureSRTKey* i_btk, int i_anmPlay, + int init(J3DMaterialTable* i_matTable, J3DAnmTextureSRTKey* i_btk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); void entry(J3DMaterialTable* i_matTable, f32 i_frame); void entry(J3DModelData *i_modelData, f32 i_frame); void entry(J3DModelData* i_modelData) { entry(i_modelData, getFrame()); } - int init(J3DModelData* i_modelData, J3DAnmTextureSRTKey* i_btk, int i_anmPlay, int i_attribute, + int init(J3DModelData* i_modelData, J3DAnmTextureSRTKey* i_btk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); int remove(J3DModelData* i_modelData) { return i_modelData->removeTexMtxAnimator(mpAnm); } @@ -80,14 +80,14 @@ public: mpCRegAnm = NULL; mpKRegAnm = NULL; } - int init(J3DMaterialTable* i_matTable, J3DAnmTevRegKey* i_brk, int i_anmPlay, + int init(J3DMaterialTable* i_matTable, J3DAnmTevRegKey* i_brk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); void entry(J3DMaterialTable* i_matTable, f32 i_frame); void entry(J3DModelData* i_modelData) { entry(i_modelData, getFrame()); } void entry(J3DModelData* i_modelData, f32 i_frame); - int init(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, int i_anmPlay, int i_attribute, + int init(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); int remove(J3DModelData* i_modelData) { return i_modelData->removeTevRegAnimator(mpAnm); } @@ -113,18 +113,10 @@ public: f32 i_rate, s16 i_startF, s16 i_endF1, bool i_modify); void changeBckOnly(J3DAnmTransform* i_bck); void entry(J3DModelData* i_modelData, f32 i_frame); - void entryJoint(J3DModelData* i_modelData, u16 i_jntNo, f32 i_frame); void entry(J3DModelData* i_modelData) { entry(i_modelData, getFrame()); } - void remove(J3DModelData* i_modelData) { i_modelData->getJointNodePointer(0)->setMtxCalc(NULL); } - - J3DAnmTransform* getBckAnm() { return mAnmTransform; } - - void removeJoint(J3DModelData* i_modelData, u16 i_idx) { - J3DJoint* mpJnt = i_modelData->getJointNodePointer(i_idx); - mpJnt->setMtxCalc(0); - } + J3DAnmTransform* getBckAnm() const { return mAnmTransform; } private: /* 0x08 */ J3DAnmTransform* mAnmTransform; @@ -136,22 +128,16 @@ STATIC_ASSERT(sizeof(mDoExt_bckAnm) == 0x10); class mDoExt_btpAnm : public mDoExt_baseAnm { public: mDoExt_btpAnm() { field_0xc = NULL; } - int init(J3DMaterialTable* i_matTable, J3DAnmTexPattern* i_btk, int i_anmPlay, - int i_attribute, f32 i_rate, s16 i_start, s16 param_6); - int init(J3DModelData*, J3DAnmTexPattern*, int, int, float, short, short, bool, int); - int init(J3DMaterialTable*, J3DAnmTexPattern*, int, int, float, short, short, bool, int); + int init(J3DModelData* i_modelData, J3DAnmTexPattern* i_btp, BOOL i_anmPlay, int i_attribute, + f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); + int init(J3DMaterialTable* i_matTable, J3DAnmTexPattern* i_btp, BOOL i_anmPlay, int i_attribute, + f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); void entry(J3DModelData* i_modelData, s16 i_frame); void entry(J3DMaterialTable* i_matTable, s16 i_frame); void entry(J3DModelData* i_modelData) { entry(i_modelData, getFrame()); } - - int init(J3DModelData* i_modelData, J3DAnmTexPattern* i_btk, int i_anmPlay, int i_attribute, - f32 i_rate, s16 i_start, s16 param_6) { - return init(&i_modelData->getMaterialTable(), i_btk, i_anmPlay, i_attribute, i_rate, - i_start, param_6); - } - int remove(J3DModelData* i_modelData) { return i_modelData->removeTexNoAnimator(mpAnm); } + J3DAnmTexPattern* getBtpAnm() const { return mpAnm; } private: /* 0x08 */ J3DAnmTexPattern* mpAnm; @@ -161,7 +147,7 @@ private: class mDoExt_blkAnm : public mDoExt_baseAnm { public: - int init(J3DDeformData* i_deformData, J3DAnmCluster* i_blk, int i_anmPlay, + int init(J3DDeformData* i_deformData, J3DAnmCluster* i_blk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 param_6); J3DAnmCluster* getBlkAnm() { return mpAnm; } @@ -172,11 +158,11 @@ private: class mDoExt_bpkAnm : public mDoExt_baseAnm { public: - int init(J3DModelData*, J3DAnmColor*, int, int, float, short, short, bool, int); - int init(J3DMaterialTable*, J3DAnmColor*, int, int, float, short, short, bool, int); + int init(J3DModelData*, J3DAnmColor*, int, int, f32, s16, s16, bool, int); + int init(J3DMaterialTable*, J3DAnmColor*, int, int, f32, s16, s16, bool, int); - void entry(J3DModelData*, float); - void entry(J3DMaterialTable*, float); + void entry(J3DModelData*, f32); + void entry(J3DMaterialTable*, f32); private: /* 0x08 */ J3DAnmColor* mpAnm; @@ -186,10 +172,10 @@ private: class mDoExt_bvaAnm : public mDoExt_baseAnm { public: - int init(J3DModel*, J3DAnmVisibilityFull*, int, int, float, short, short, bool, int); - void entry(J3DModel*, short); + int init(J3DModel*, J3DAnmVisibilityFull*, int, int, f32, s16, s16, bool, int); + void entry(J3DModel*, s16); - int init(J3DModelData*, J3DAnmTransform*, int, int, float, short, short, bool); + int init(J3DModelData*, J3DAnmTransform*, int, int, f32, s16, s16, bool); private: /* 0x08 */ J3DAnmVisibilityFull* mpAnm; diff --git a/src/d/actor/d_a_npc_btsw2.cpp b/src/d/actor/d_a_npc_btsw2.cpp index d8323d460..9032cf615 100644 --- a/src/d/actor/d_a_npc_btsw2.cpp +++ b/src/d/actor/d_a_npc_btsw2.cpp @@ -4,21 +4,180 @@ // #include "d/actor/d_a_npc_btsw2.h" +#include "d/d_com_inf_game.h" +#include "d/d_item.h" +#include "d/d_procname.h" +#include "f_op/f_op_actor_mng.h" #include "m_Do/m_Do_ext.h" +enum BTSW_RES_FILE_ID { + /* BCKS */ + BTSW_BCK_BN_KASIGE=0xF, + BTSW_BCK_BN_ONEGAI=0x10, + BTSW_BCK_BN_SIWAKE01=0x11, + BTSW_BCK_BN_SIWAKE02=0x12, + BTSW_BCK_BN_SUGOI=0x13, + BTSW_BCK_BN_TALK01=0x14, + BTSW_BCK_BN_TALK02=0x15, + BTSW_BCK_BN_WAIT01=0x16, + BTSW_BCK_BN_WAIT02=0x17, + BTSW_BCK_BN_WALK=0x18, + + /* BDL */ + BTSW_BDL_BN_KABAN=0xC, + BTSW_BDL_BM_LETTER=0x19, + BTSW_BDL_BN_TIRASI=0x1A, + + /* BDLM */ + BTSW_BDL_QMAIL=0x4, + BTSW_BDL_BN=0xD, + + /* BMDM */ + BTSW_BMD_SHOP_CURSOR01=0x5, + + /* BRK */ + BTSW_BRK_SHOP_CURSOR01=0x8, + + /* BTP */ + BTSW_BTP_QMAIL=0xA, + BTSW_BTP_BN_MABA=0xE, +}; + +enum BTSW_RES_FILE_INDEX { + /* BCKS */ + BTSW_INDEX_BCK_BN_KASIGE=0x8, + BTSW_INDEX_BCK_BN_ONEGAI=0x9, + BTSW_INDEX_BCK_BN_SIWAKE01=0xA, + BTSW_INDEX_BCK_BN_SIWAKE02=0xB, + BTSW_INDEX_BCK_BN_SUGOI=0xC, + BTSW_INDEX_BCK_BN_TALK01=0xD, + BTSW_INDEX_BCK_BN_TALK02=0xE, + BTSW_INDEX_BCK_BN_WAIT01=0xF, + BTSW_INDEX_BCK_BN_WAIT02=0x10, + BTSW_INDEX_BCK_BN_WALK=0x11, + + /* BDL */ + BTSW_INDEX_BDL_BN_KABAN=0x14, + BTSW_INDEX_BDL_BM_LETTER=0x15, + BTSW_INDEX_BDL_BN_TIRASI=0x16, + + /* BDLM */ + BTSW_INDEX_BDL_QMAIL=0x19, + BTSW_INDEX_BDL_BN=0x1A, + + /* BMDM */ + BTSW_INDEX_BMD_SHOP_CURSOR01=0x1D, + + /* BRK */ + BTSW_INDEX_BRK_SHOP_CURSOR01=0x20, + + /* BTP */ + BTSW_INDEX_BTP_QMAIL=0x23, + BTSW_INDEX_BTP_BN_MABA=0x24, +}; + +// Needed for the .data section to match. +static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; +static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; +static u8 dummy3[4] = {0x02, 0x00, 0x02, 0x01}; +static f64 dummy4[2] = {3.0, 0.5}; + +static u8 dummy[0x4C]; + +static daNpc_Btsw2_HIO_c l_HIO; + +static dCcD_SrcCyl l_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ ~(AT_TYPE_BOOMERANG), + /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_ENEMY, + /* SrcObjCo SPrm */ CO_SPRM_SET | CO_SPRM_IS_UNK4 | CO_SPRM_VSGRP, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 30.0f, + /* Height */ 80.0f, + }, +}; + /* 000000EC-000001A8 .text __ct__17daNpc_Btsw2_HIO_cFv */ daNpc_Btsw2_HIO_c::daNpc_Btsw2_HIO_c() { - /* Nonmatching */ + mNpc.m04 = 0.0; + mNpc.m08 = 0x1F40; + mNpc.mMaxHeadRot = 0x1F40; + mNpc.m0A = 0x0; + mNpc.mMaxBackBoneRot = 0x1F40; + mNpc.m10 = -0xBB8; + mNpc.mMinHeadRot = -0x1F40; + mNpc.m12 = 0x0; + mNpc.mMinBackBoneRot = -0x1F40; + mNpc.m18 = 0x3E8; + mNpc.mMaxHeadTurnVel = 0x640; + mNpc.m1C = 40.0; + mNpc.m20 = 0x2000; + mNpc.m22 = 0x0; + mNpc.m24 = 200.0; + m30 = 0x258; + m32 = 0x5; + m34 = 0.8; + m38 = 0.95; + m3C = 0x5A; + m3E = 0x5A; + mChildID = -1; } +const char daNpc_Btsw2_c::m_arc_name[] = "Btsw"; + +static const int l_bck_ix_tbl[] = { + BTSW_INDEX_BCK_BN_WAIT01, + BTSW_INDEX_BCK_BN_WAIT02, + BTSW_INDEX_BCK_BN_TALK01, + BTSW_INDEX_BCK_BN_TALK02, + BTSW_INDEX_BCK_BN_ONEGAI, + BTSW_INDEX_BCK_BN_SUGOI, + BTSW_INDEX_BCK_BN_SUGOI, + BTSW_INDEX_BCK_BN_WALK, + BTSW_INDEX_BCK_BN_KASIGE, + BTSW_INDEX_BCK_BN_SIWAKE01, + BTSW_INDEX_BCK_BN_SIWAKE02, +}; + +static const int l_btp_ix_tbl[] = { + BTSW_INDEX_BTP_BN_MABA, +}; + /* 000001A8-000003E0 .text nodeCallBack__FP7J3DNodei */ static BOOL nodeCallBack(J3DNode*, int) { /* Nonmatching */ } /* 0000041C-00000524 .text initTexPatternAnm__13daNpc_Btsw2_cFb */ -void daNpc_Btsw2_c::initTexPatternAnm(bool) { - /* Nonmatching */ +BOOL daNpc_Btsw2_c::initTexPatternAnm(bool r31) { + J3DModelData* modelData = mpMcaMorf->getModel()->getModelData(); + m_btp = static_cast(dComIfG_getObjectRes(m_arc_name, l_btp_ix_tbl[m744])); + JUT_ASSERT(282, m_btp != 0); + if (!mBtpAnm.init(modelData, m_btp, TRUE, 2, 1.0f, 0, -1, r31, 0)) { + return FALSE; + } + m6F0 = 0; + m6F4 = 0; + return TRUE; } /* 00000524-000005B0 .text playTexPatternAnm__13daNpc_Btsw2_cFv */ @@ -27,12 +186,12 @@ void daNpc_Btsw2_c::playTexPatternAnm() { } /* 000005B0-0000067C .text setAnm__13daNpc_Btsw2_cFSc */ -void daNpc_Btsw2_c::setAnm(signed char) { +void daNpc_Btsw2_c::setAnm(s8) { /* Nonmatching */ } /* 0000067C-000007D0 .text chkAttention__13daNpc_Btsw2_cF4cXyzs */ -void daNpc_Btsw2_c::chkAttention(cXyz, short) { +void daNpc_Btsw2_c::chkAttention(cXyz, s16) { /* Nonmatching */ } @@ -47,23 +206,24 @@ void daNpc_Btsw2_c::checkOrder() { } /* 00000860-0000097C .text anmAtr__13daNpc_Btsw2_cFUs */ -void daNpc_Btsw2_c::anmAtr(unsigned short) { +void daNpc_Btsw2_c::anmAtr(u16) { /* Nonmatching */ } /* 0000097C-000009EC .text getMsg__13daNpc_Btsw2_cFv */ -void daNpc_Btsw2_c::getMsg() { +u32 daNpc_Btsw2_c::getMsg() { /* Nonmatching */ } /* 000009EC-000009F4 .text next_msgStatus__13daNpc_Btsw2_cFPUl */ -void daNpc_Btsw2_c::next_msgStatus(unsigned long*) { +u16 daNpc_Btsw2_c::next_msgStatus(u32*) { /* Nonmatching */ + return fopMsgStts_MSG_ENDS_e; } /* 000009F4-00000A20 .text setAttention__13daNpc_Btsw2_cFv */ void daNpc_Btsw2_c::setAttention() { - /* Nonmatching */ + mAttentionInfo.mPosition.set(m704.x, m704.y + l_HIO.mNpc.m1C, m704.z); } /* 00000A20-00000B94 .text lookBack__13daNpc_Btsw2_cFv */ @@ -72,23 +232,91 @@ void daNpc_Btsw2_c::lookBack() { } /* 00000B94-00000BB4 .text CallbackCreateHeap__FP10fopAc_ac_c */ -static BOOL CallbackCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CallbackCreateHeap(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); } /* 00000BB4-00000EFC .text CreateHeap__13daNpc_Btsw2_cFv */ -void daNpc_Btsw2_c::CreateHeap() { +BOOL daNpc_Btsw2_c::CreateHeap() { /* Nonmatching */ + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(m_arc_name, BTSW_INDEX_BDL_BN)); + JUT_ASSERT(616, modelData != 0); + mpMcaMorf = new mDoExt_McaMorf( + modelData, + NULL, NULL, + static_cast(dComIfG_getObjectRes(m_arc_name, BTSW_INDEX_BCK_BN_WAIT01)), + J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1, NULL, 0x80000, 0x15020022 + ); + if (mpMcaMorf == NULL || mpMcaMorf->getModel() == NULL) { + return FALSE; + } + + m_jnt.setHeadJntNum(modelData->getJointName()->getIndex("head")); + JUT_ASSERT(634, m_jnt.getHeadJntNum() >= 0); + m_jnt.setBackboneJntNum(modelData->getJointName()->getIndex("backbone")); + JUT_ASSERT(639, m_jnt.getBackboneJntNum() >= 0); + m6F1 = modelData->getJointName()->getIndex("handL"); + m6F2 = modelData->getJointName()->getIndex("handR"); + + modelData = static_cast(dComIfG_getObjectRes(m_arc_name, BTSW_INDEX_BDL_BN_KABAN)); + m6D0 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if (m6D0 == NULL) { + return FALSE; + } + modelData = static_cast(dComIfG_getObjectRes(m_arc_name, BTSW_INDEX_BDL_BN_TIRASI)); + m6D4 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if (m6D4 == NULL) { + return FALSE; + } + + m744 = 0; + if (!initTexPatternAnm(false)) { + return FALSE; + } + + modelData = mpMcaMorf->getModel()->getModelData(); + modelData->getJointNodePointer(m_jnt.getHeadJntNum())->setCallBack(nodeCallBack); + modelData->getJointNodePointer(m_jnt.getBackboneJntNum())->setCallBack(nodeCallBack); + mpMcaMorf->getModel()->setUserArea((u32)this); + mAcchCir.SetWall(30.0f, 0.0f); + mObjAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, &speed); + + return TRUE; } /* 00000EFC-000010F8 .text CreateInit__13daNpc_Btsw2_cFv */ -void daNpc_Btsw2_c::CreateInit() { - /* Nonmatching */ +BOOL daNpc_Btsw2_c::CreateInit() { + m714 = current.angle; + mAttentionInfo.mFlags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_TALK_e; + mGravity = -30.0f; + setAction(&daNpc_Btsw2_c::wait_action, NULL); + m704 = current.pos; + mStts.Init(0xFF, 0xFF, this); + mCyl.Set(l_cyl_src); + mCyl.SetStts(&mStts); + setCollision(60.0f, 150.0f); + m724 = 0; + mPathNo = fopAcM_GetParamBit(fopAcM_GetParam(this), 0x10, 8); + mpPath = dPath_GetRoomPath(mPathNo, current.roomNo); + m73C = mpPath->m_num - 1; + m73E = 1.0f + cM_rndF(3.0f); + m742 = 90.0f + cM_rndF(300.0f); + m735 = 0; + m736 = 0; + m740 = 0; + mEventCut.setActorInfo2("Btsw2", this); + mAttentionInfo.mDistances[1] = 0xAB; + mAttentionInfo.mDistances[3] = 0xAB; + return TRUE; } /* 000010F8-0000111C .text wait01__13daNpc_Btsw2_cFv */ void daNpc_Btsw2_c::wait01() { - /* Nonmatching */ + if (m71E) { + m747 = 2; + } else { + m746 = 2; + } } /* 0000111C-000011A8 .text talk01__13daNpc_Btsw2_cFv */ @@ -102,18 +330,42 @@ void daNpc_Btsw2_c::pathMove() { } /* 00001574-00001660 .text wait_action__13daNpc_Btsw2_cFPv */ -void daNpc_Btsw2_c::wait_action(void*) { +BOOL daNpc_Btsw2_c::wait_action(void*) { /* Nonmatching */ } /* 00001660-00001884 .text _create__13daNpc_Btsw2_cFv */ s32 daNpc_Btsw2_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daNpc_Btsw2_c); + + if (dComIfGs_getEventReg(0xC203) == 3 || !checkItemGet(PEARL2, TRUE)) { + return cPhs_ERROR_e; + } + + int phase_state = dComIfG_resLoad(&mPhs, m_arc_name); + + if (phase_state == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, CallbackCreateHeap, 0x29E0)) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpMcaMorf->getModel()->getBaseTRMtx()); + + if (!CreateInit()) { + return cPhs_ERROR_e; + } + } + + return phase_state; } /* 00001C34-00001C8C .text _delete__13daNpc_Btsw2_cFv */ BOOL daNpc_Btsw2_c::_delete() { - /* Nonmatching */ + dComIfG_resDelete(&mPhs, m_arc_name); + if (heap && mpMcaMorf) { + mpMcaMorf->stopZelAnime(); + } + return TRUE; } /* 00001C8C-00001DDC .text _execute__13daNpc_Btsw2_cFv */ @@ -127,27 +379,51 @@ BOOL daNpc_Btsw2_c::_draw() { } /* 00001F6C-00001F8C .text daNpc_Btsw2_Create__FP10fopAc_ac_c */ -static s32 daNpc_Btsw2_Create(fopAc_ac_c*) { - /* Nonmatching */ +static s32 daNpc_Btsw2_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->_create(); } /* 00001F8C-00001FAC .text daNpc_Btsw2_Delete__FP13daNpc_Btsw2_c */ -static BOOL daNpc_Btsw2_Delete(daNpc_Btsw2_c*) { - /* Nonmatching */ +static BOOL daNpc_Btsw2_Delete(daNpc_Btsw2_c* i_this) { + return static_cast(i_this)->_delete(); } /* 00001FAC-00001FCC .text daNpc_Btsw2_Execute__FP13daNpc_Btsw2_c */ -static BOOL daNpc_Btsw2_Execute(daNpc_Btsw2_c*) { - /* Nonmatching */ +static BOOL daNpc_Btsw2_Execute(daNpc_Btsw2_c* i_this) { + return static_cast(i_this)->_execute(); } /* 00001FCC-00001FEC .text daNpc_Btsw2_Draw__FP13daNpc_Btsw2_c */ -static BOOL daNpc_Btsw2_Draw(daNpc_Btsw2_c*) { - /* Nonmatching */ +static BOOL daNpc_Btsw2_Draw(daNpc_Btsw2_c* i_this) { + return static_cast(i_this)->_draw(); } /* 00001FEC-00001FF4 .text daNpc_Btsw2_IsDelete__FP13daNpc_Btsw2_c */ -static BOOL daNpc_Btsw2_IsDelete(daNpc_Btsw2_c*) { - /* Nonmatching */ +static BOOL daNpc_Btsw2_IsDelete(daNpc_Btsw2_c* i_this) { + return TRUE; } +actor_method_class l_daNpc_Btsw2_Method = { + (process_method_func)daNpc_Btsw2_Create, + (process_method_func)daNpc_Btsw2_Delete, + (process_method_func)daNpc_Btsw2_Execute, + (process_method_func)daNpc_Btsw2_IsDelete, + (process_method_func)daNpc_Btsw2_Draw, +}; + +actor_process_profile_definition g_profile_NPC_BTSW2 = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 7, + /* ListPrio */ fpcLy_CURRENT_e, + /* ProcName */ PROC_NPC_BTSW2, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daNpc_Btsw2_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x0163, + /* Actor SubMtd */ &l_daNpc_Btsw2_Method, + /* Status */ 0x07 | fopAcStts_SHOWMAP_e | fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_12_e, +}; diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 39ec0d1ee..02c8c7b54 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -115,7 +115,7 @@ int mDoExt_baseAnm::play() { } /* 8000DFC4-8000DFF0 .text init__13mDoExt_bpkAnmFP12J3DModelDataP11J3DAnmColoriifssbi */ -int mDoExt_bpkAnm::init(J3DModelData* i_modelData, J3DAnmColor* i_bpk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_bpkAnm::init(J3DModelData* i_modelData, J3DAnmColor* i_bpk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { return init(&i_modelData->getMaterialTable(), i_bpk, i_anmPlay, i_attribute, i_rate, i_startF, i_endF, i_modify, i_entry); } @@ -125,7 +125,7 @@ void mDoExt_bpkAnm::entry(J3DModelData* i_modelData, f32 param_1) { } /* 8000E014-8000E2A8 .text init__13mDoExt_bpkAnmFP16J3DMaterialTableP11J3DAnmColoriifssbi */ -int mDoExt_bpkAnm::init(J3DMaterialTable* i_matTable, J3DAnmColor* i_bpk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_bpkAnm::init(J3DMaterialTable* i_matTable, J3DAnmColor* i_bpk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { JUT_ASSERT(531, i_modify || isCurrentSolidHeap()); JUT_ASSERT(533, i_matTable != 0 && i_bpk != 0); @@ -168,7 +168,7 @@ void mDoExt_bpkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) { } /* 8000E32C-8000E358 .text init__13mDoExt_btpAnmFP12J3DModelDataP16J3DAnmTexPatterniifssbi */ -int mDoExt_btpAnm::init(J3DModelData* i_modelData, J3DAnmTexPattern* i_btp, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_btpAnm::init(J3DModelData* i_modelData, J3DAnmTexPattern* i_btp, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { return init(&i_modelData->getMaterialTable(), i_btp, i_anmPlay, i_attribute, i_rate, i_startF, i_endF, i_modify, i_entry); } @@ -178,7 +178,7 @@ void mDoExt_btpAnm::entry(J3DModelData* i_modelData, s16 i_frame) { } /* 8000E37C-8000E610 .text init__13mDoExt_btpAnmFP16J3DMaterialTableP16J3DAnmTexPatterniifssbi */ -int mDoExt_btpAnm::init(J3DMaterialTable* i_matTable, J3DAnmTexPattern* i_btp, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_btpAnm::init(J3DMaterialTable* i_matTable, J3DAnmTexPattern* i_btp, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { JUT_ASSERT(648, i_modify || isCurrentSolidHeap()); JUT_ASSERT(650, i_matTable != 0 && i_btp != 0); mpAnm = i_btp; @@ -220,7 +220,7 @@ void mDoExt_btpAnm::entry(J3DMaterialTable* i_matTable, s16 i_frame) { } /* 8000E6CC-8000E6F8 .text init__13mDoExt_btkAnmFP12J3DModelDataP19J3DAnmTextureSRTKeyiifssbi */ -int mDoExt_btkAnm::init(J3DModelData* i_modelData, J3DAnmTextureSRTKey* i_btk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_btkAnm::init(J3DModelData* i_modelData, J3DAnmTextureSRTKey* i_btk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { return init(&i_modelData->getMaterialTable(), i_btk, i_anmPlay, i_attribute, i_rate, i_startF, i_endF, i_modify, i_entry); } @@ -230,7 +230,7 @@ void mDoExt_btkAnm::entry(J3DModelData* i_modelData, f32 i_frame) { } /* 8000E71C-8000EAE4 .text init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifssbi */ -int mDoExt_btkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTextureSRTKey* i_btk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_btkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTextureSRTKey* i_btk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { JUT_ASSERT(781, i_modify || isCurrentSolidHeap()); JUT_ASSERT(783, i_matTable != 0 && i_btk != 0); mpAnm = i_btk; @@ -285,7 +285,7 @@ void mDoExt_btkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) { } /* 8000EB74-8000EBA0 .text init__13mDoExt_brkAnmFP12J3DModelDataP15J3DAnmTevRegKeyiifssbi */ -int mDoExt_brkAnm::init(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, int i_anmPlay, +int mDoExt_brkAnm::init(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry) { return init(&i_modelData->getMaterialTable(), i_brk, i_anmPlay, i_attribute, i_rate, i_start, i_end, i_modify, i_entry); @@ -297,7 +297,7 @@ void mDoExt_brkAnm::entry(J3DModelData* i_modelData, f32 i_frame) { } /* 8000EBC4-8000EEE8 .text init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifssbi */ -int mDoExt_brkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTevRegKey* i_brk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_brkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTevRegKey* i_brk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { JUT_ASSERT(910, i_modify || isCurrentSolidHeap()); JUT_ASSERT(912, i_matTable != 0 && i_brk != 0); mpAnm = i_brk; @@ -354,7 +354,7 @@ void mDoExt_brkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) { } /* 8000EFBC-8000F178 .text init__13mDoExt_bvaAnmFP8J3DModelP20J3DAnmVisibilityFulliifssbi */ -int mDoExt_bvaAnm::init(J3DModel* i_model, J3DAnmVisibilityFull* i_bva, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { +int mDoExt_bvaAnm::init(J3DModel* i_model, J3DAnmVisibilityFull* i_bva, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) { JUT_ASSERT(1002, i_modify || isCurrentSolidHeap()); JUT_ASSERT(1004, i_model != 0 && i_bva != 0); mpAnm = i_bva; @@ -384,7 +384,7 @@ void mDoExt_bvaAnm::entry(J3DModel* i_model, s16 i_frame) { } /* 8000F1B4-8000F408 .text init__13mDoExt_bckAnmFP12J3DModelDataP15J3DAnmTransformiifssb */ -int mDoExt_bckAnm::init(J3DModelData* i_modelData, J3DAnmTransform* i_bck, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify) { +int mDoExt_bckAnm::init(J3DModelData* i_modelData, J3DAnmTransform* i_bck, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify) { JUT_ASSERT(1065, i_modify || isCurrentSolidHeap()); JUT_ASSERT(1067, i_bck != 0); mAnmTransform = i_bck;