diff --git a/config/GZ2P01/rels/d_a_grass/symbols.txt b/config/GZ2P01/rels/d_a_grass/symbols.txt index d4b5caffda5..03f333bb131 100644 --- a/config/GZ2P01/rels/d_a_grass/symbols.txt +++ b/config/GZ2P01/rels/d_a_grass/symbols.txt @@ -177,30 +177,30 @@ l_normal = .data:0x000013E0; // type:object size:0xC scope:global l_color = .data:0x000013EC; // type:object size:0x14 scope:global l_texCoord = .data:0x00001400; // type:object size:0xA0 scope:global l_M_Kusa_9qDL = .data:0x000014A0; // type:object size:0xCB scope:global -l_M_Kusa_9q_cDL = .data:0x00001580; // type:object size:0xCB scope:global -l_M_TenGusaDL = .data:0x00001660; // type:object size:0xD4 scope:global +l_M_Kusa_9q_cDL = .data:0x00001580; // type:object size:0xCB scope:global align:32 +l_M_TenGusaDL = .data:0x00001660; // type:object size:0xD4 scope:global align:32 l_Tengusa_matDL = .data:0x00001740; // type:object size:0xA8 scope:global l_kusa9q_matDL = .data:0x00001800; // type:object size:0xA8 scope:global l_kusa9q_l4_matDL = .data:0x000018C0; // type:object size:0xA8 scope:global @4620 = .data:0x00001968; // type:object size:0xC scope:local l_vtxDescList$4654 = .data:0x00001974; // type:object size:0x28 scope:local l_vtxAttrFmtList$4655 = .data:0x0000199C; // type:object size:0x50 scope:local -l_J_Ohana00_64TEX = .data:0x00001A00; // type:object size:0x800 scope:global +l_J_Ohana00_64TEX = .data:0x00001A00; // type:object size:0x800 scope:global align:32 l_flowerPos = .data:0x00002200; // type:object size:0x2C4 scope:global l_flowerNormal = .data:0x000024C4; // type:object size:0xB4 scope:global l_flowerColor = .data:0x00002578; // type:object size:0x8 scope:global l_flowerTexCoord = .data:0x00002580; // type:object size:0x138 scope:global -l_J_hana00DL = .data:0x000026C0; // type:object size:0x150 scope:global -l_J_hana00_cDL = .data:0x00002820; // type:object size:0xDE scope:global +l_J_hana00DL = .data:0x000026C0; // type:object size:0x150 scope:global align:32 +l_J_hana00_cDL = .data:0x00002820; // type:object size:0xDE scope:global align:32 l_matDL = .data:0x00002900; // type:object size:0x99 scope:global l_matLight4DL = .data:0x000029A0; // type:object size:0x99 scope:global -l_J_Ohana01_64128_0419TEX = .data:0x00002A40; // type:object size:0x1000 scope:global +l_J_Ohana01_64128_0419TEX = .data:0x00002A40; // type:object size:0x1000 scope:global align:32 l_flowerPos2 = .data:0x00003A40; // type:object size:0x4C8 scope:global l_flowerNormal2 = .data:0x00003F08; // type:object size:0x120 scope:global l_flowerColor2 = .data:0x00004028; // type:object size:0x8 scope:global l_flowerTexCoord2 = .data:0x00004030; // type:object size:0x120 scope:global -l_J_hana01DL = .data:0x00004160; // type:object size:0x138 scope:global -l_J_hana01_c_00DL = .data:0x000042A0; // type:object size:0xDE scope:global +l_J_hana01DL = .data:0x00004160; // type:object size:0x138 scope:global align:32 +l_J_hana01_c_00DL = .data:0x000042A0; // type:object size:0xDE scope:global align:32 l_J_hana01_c_01DL = .data:0x00004380; // type:object size:0x128 scope:global l_mat2DL = .data:0x000044C0; // type:object size:0x99 scope:global l_mat2Light4DL = .data:0x00004560; // type:object size:0x99 scope:global diff --git a/config/GZ2P01/rels/d_a_obj_gm/symbols.txt b/config/GZ2P01/rels/d_a_obj_gm/symbols.txt index 9e9187abb1c..bc0d7473a9c 100644 --- a/config/GZ2P01/rels/d_a_obj_gm/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_gm/symbols.txt @@ -88,6 +88,6 @@ __vt__8cM3dGAab = .data:0x0000018C; // type:object size:0xC scope:global __vt__12dBgS_ObjAcch = .data:0x00000198; // type:object size:0x24 scope:global __vt__14daObj_Gm_HIO_c = .data:0x000001BC; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_460_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte +l_initHIO = .bss:0x00000008; // type:object size:0x1 data:byte @3661 = .bss:0x0000000C; // type:object size:0xC scope:local l_HIO = .bss:0x00000018; // type:object size:0x8 scope:global data:byte diff --git a/configure.py b/configure.py index c65a40834c9..de1fc5c0f17 100755 --- a/configure.py +++ b/configure.py @@ -1839,7 +1839,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_myna"), # weird missing function issue ActorRel(MatchingFor("GZ2E01", "GZ2P01"), "d_a_ni"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_aru"), - ActorRel(NonMatching, "d_a_npc_ash", extra_cflags=[DANPCF_C_HACK]), + ActorRel(NonMatching, "d_a_npc_ash", extra_cflags=[DANPCF_C_HACK]), # weak func order ActorRel(NonMatching, "d_a_npc_ashB", extra_cflags=[DANPCF_C_HACK]), ActorRel(NonMatching, "d_a_npc_bans"), ActorRel(NonMatching, "d_a_npc_blue_ns", extra_cflags=[DANPCF_C_HACK]), @@ -1981,7 +1981,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_cho"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_cowdoor"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crope"), - ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvfence"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01"), "d_a_obj_crvfence"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crvgate"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crvhahen"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_crvlh_down"), @@ -1995,7 +1995,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_digsnow"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_dmelevator"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_drop"), - ActorRel(MatchingFor("GZ2E01"), "d_a_obj_dust"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01"), "d_a_obj_dust"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_enemy_create"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_fallobj"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_fan"), @@ -2204,7 +2204,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swspinner"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_swturn"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_syRock"), - ActorRel(NonMatching, "d_a_obj_szbridge"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_szbridge"), ActorRel(NonMatching, "d_a_obj_taFence"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_table"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_takaraDai"), diff --git a/include/d/actor/d_a_npc_ash.h b/include/d/actor/d_a_npc_ash.h index dc6adcf7b90..d8a892c36ac 100644 --- a/include/d/actor/d_a_npc_ash.h +++ b/include/d/actor/d_a_npc_ash.h @@ -3,6 +3,32 @@ #include "d/actor/d_a_npc.h" +struct daNpcAsh_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; +}; + +class daNpcAsh_Param_c { +public: + /* 8095D5D4 */ virtual ~daNpcAsh_Param_c() {} + + static const daNpcAsh_HIOParam m; +}; + +#if DEBUG +class daNpcAsh_HIO_c : public mDoHIO_entry_c { +public: + daNpcAsh_HIO_c(); + + void genMessage(JORMContext*); + + daNpcAsh_HIOParam m; +}; + +#define NPC_ASH_HIO_CLASS daNpcAsh_HIO_c +#else +#define NPC_ASH_HIO_CLASS daNpcAsh_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcAsh_c @@ -66,28 +92,6 @@ public: /* 0x9 */ MOT_STEP, }; -private: - /* 0xB48 */ Z2Creature mCreatureSound; - /* 0xBD8 */ J3DModel* mModelBow; - /* 0xBDC */ J3DModel* mModelQuiver; - /* 0xBE0 */ daNpcF_MatAnm_c* mpMatAnm; - /* 0xBE4 */ daNpcF_Lookat_c mLookat; - /* 0xC80 */ daNpcF_ActorMngr_c mActorMngr[6]; - /* 0xCB0 */ fopAc_ac_c* mTalkPartner; - /* 0xCB4 */ u32 field_0xcb4; // unused - /* 0xCB8 */ dCcD_Cyl mCcCyl[2]; - /* 0xF30 */ ActionFn mpActionFn; - /* 0xF3C */ request_of_phase_process_class mPhase[2]; - /* 0xF4C */ u32 mItemPartnerId; - /* 0xF50 */ u32 field_0xf50; // unused - /* 0xF54 */ u32 field_0xf54; - /* 0xF58 */ s16 mFlowID; - /* 0xF5A */ s16 mLookMode; - /* 0xF5C */ u16 mMode; - /* 0xF5E */ u8 mMapToolId; - /* 0xF5F */ u8 field_0xf5f; - /* 0xF60 */ u8 mType; - public: /* 809582EC */ daNpcAsh_c(); /* 80958610 */ ~daNpcAsh_c(); @@ -112,23 +116,25 @@ public: /* 8095A8EC */ bool talk(void*); /* 8095AD28 */ bool demo(void*); /* 8095B164 */ bool leave(void*); - /* 8095B48C */ BOOL EvCut_Introduction(int i_staffID); - /* 8095B58C */ BOOL EvCut_Meeting(int i_staffID); - /* 8095B83C */ BOOL EvCut_WiretapSponsor(int i_staffID); - /* 8095BA80 */ BOOL EvCut_WiretapEntrant(int i_staffID); - /* 8095BCF0 */ void setParam(); - /* 8095BF6C */ BOOL main(); - /* 8095C200 */ void playMotion(); - /* 8095C520 */ BOOL ctrlBtk(); - /* 8095C5C4 */ void setAttnPos(); - /* 8095C9BC */ void lookat(); - /* 8095CC8C */ BOOL drawDbgInfo(); + /* 8095B48C */ BOOL EvCut_Introduction(int); + /* 8095B58C */ BOOL EvCut_Meeting(int); + /* 8095B83C */ BOOL EvCut_WiretapSponsor(int); + /* 8095BA80 */ BOOL EvCut_WiretapEntrant(int); + /* 8095BCF0 */ inline void setParam(); + /* 8095BF6C */ inline BOOL main(); + /* 8095C200 */ inline void playMotion(); + /* 8095C520 */ inline BOOL ctrlBtk(); + /* 8095C5C4 */ inline void setAttnPos(); + /* 8095C9BC */ inline void lookat(); + /* 8095CC8C */ inline BOOL drawDbgInfo(); s16 getMessageNo() { return shape_angle.x; } - /* dSv_event_flag_c::F_0268 - City in the Sky - City in the Sky clear */ - bool isMap() { return !(daNpcF_chkEvtBit(0x10c) - /* dSv_event_flag_c::F_0264 - Cutscene - Get master sword */ - || !daNpcF_chkEvtBit(0x108)); } + /* dSv_event_flag_c::F_0268 - City in the Sky - City in the Sky clear */ + bool isMap() { + return !(daNpcF_chkEvtBit(0x10c) + /* dSv_event_flag_c::F_0264 - Cutscene - Get master sword */ + || !daNpcF_chkEvtBit(0x108)); + } inline void setExpressionTalkAfter() { setExpression(7, -1.0f); } inline void setLookMode(int i_lookMode, fopAc_ac_c* i_talkPartner); inline void searchActors(); @@ -137,50 +143,30 @@ public: inline void playExpression(); static EventFn mEvtSeqList[6]; + +private: + /* 0xB48 */ Z2Creature mCreatureSound; + /* 0xBD8 */ J3DModel* mModelBow; + /* 0xBDC */ J3DModel* mModelQuiver; + /* 0xBE0 */ daNpcF_MatAnm_c* mpMatAnm; + /* 0xBE4 */ daNpcF_Lookat_c mLookat; + /* 0xC80 */ daNpcF_ActorMngr_c mActorMngr[6]; + /* 0xCB0 */ fopAc_ac_c* mTalkPartner; + /* 0xCB4 */ NPC_ASH_HIO_CLASS* mpHIO; + /* 0xCB8 */ dCcD_Cyl mCcCyl[2]; + /* 0xF30 */ ActionFn mpActionFn; + /* 0xF3C */ request_of_phase_process_class mPhase[2]; + /* 0xF4C */ u32 mItemPartnerId; + /* 0xF50 */ u32 field_0xf50; // unused + /* 0xF54 */ u32 field_0xf54; + /* 0xF58 */ s16 mFlowID; + /* 0xF5A */ s16 mLookMode; + /* 0xF5C */ u16 mMode; + /* 0xF5E */ u8 mMapToolId; + /* 0xF5F */ u8 field_0xf5f; + /* 0xF60 */ u8 mType; }; STATIC_ASSERT(sizeof(daNpcAsh_c) == 0xF64); -class daNpcAsh_Param_c { -public: - /* 8095D5D4 */ virtual ~daNpcAsh_Param_c() {} - - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - }; - - static param const m; -}; - #endif /* D_A_NPC_ASH_H */ diff --git a/include/d/actor/d_a_npc_ashB.h b/include/d/actor/d_a_npc_ashB.h index a8c7e521a47..7572cd829db 100644 --- a/include/d/actor/d_a_npc_ashB.h +++ b/include/d/actor/d_a_npc_ashB.h @@ -3,6 +3,33 @@ #include "d/actor/d_a_npc.h" +struct daNpcAshB_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 field_0x6c; +}; + +class daNpcAshB_Param_c { +public: + /* 80962078 */ virtual ~daNpcAshB_Param_c() {} + + static const daNpcAshB_HIOParam m; +}; + +#if DEBUG +class daNpcAshB_HIO_c : public mDoHIO_entry_c { +public: + daNpcAshB_HIO_c(); + + void genMessage(JORMContext*); + + daNpcAshB_HIOParam m; +}; + +#define NPC_ASHB_HIO_CLASS daNpcAshB_HIO_c +#else +#define NPC_ASHB_HIO_CLASS daNpcAshB_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcAshB_c @@ -92,31 +119,31 @@ public: /* 8095FD9C */ bool talk(void*); /* 809602E0 */ bool demo(void*); /* 809604C8 */ BOOL EvCut_Appear(int); - /* 80960A60 */ void setParam(); - /* 80960AE8 */ BOOL main(); - /* 80960D64 */ void playMotion(); - /* 80961188 */ BOOL ctrlBtk(); - /* 80961264 */ void setAttnPos(); - /* 80961574 */ void lookat(); - /* 80961770 */ void drawOtherMdls(); - /* 809617F8 */ BOOL drawDbgInfo(); + /* 80960A60 */ inline void setParam(); + /* 80960AE8 */ inline BOOL main(); + /* 80960D64 */ inline void playMotion(); + /* 80961188 */ inline BOOL ctrlBtk(); + /* 80961264 */ inline void setAttnPos(); + /* 80961574 */ inline void lookat(); + /* 80961770 */ inline void drawOtherMdls(); + /* 809617F8 */ inline BOOL drawDbgInfo(); - static EventFn mEvtSeqList[2]; - - s16 getMessageNo() { return (fopAcM_GetParam(this) >> 8) & 0xFFFF;} + s16 getMessageNo() { return (fopAcM_GetParam(this) >> 8) & 0xFFFF; } inline void setExpressionTalkAfter() { setExpression(6, -1.0f); } inline void setLookMode(int i_lookMode); inline BOOL chkFindPlayer(); inline bool step(s16, int, f32); inline void playExpression(); + static EventFn mEvtSeqList[2]; + private: /* 0xB48 */ Z2Creature mCreatureSound; /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ J3DModel* mpModel; /* 0xBE0 */ daNpcF_Lookat_c mLookat; /* 0xC7C */ daNpcF_ActorMngr_c mActorMngr[1]; - /* 0xC84 */ fopAc_ac_c* mpTalkPartner; + /* 0xC84 */ NPC_ASHB_HIO_CLASS* mpHIO; /* 0xC88 */ dCcD_Cyl mCyl; /* 0xDC4 */ ActionFn mpActionFn; /* 0xDD0 */ request_of_phase_process_class mPhase[1]; @@ -130,52 +157,8 @@ private: /* 0xDEC */ u8 field_0xdec; /* 0xDED */ u8 field_0xded; /* 0xDEE */ u8 field_0xdee; - }; STATIC_ASSERT(sizeof(daNpcAshB_c) == 0xdf0); -class daNpcAshB_Param_c { -public: - /* 80962078 */ virtual ~daNpcAshB_Param_c() {} - - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - /* 0x6C */ f32 field_0x6c; - }; - - static param const m; -}; - #endif /* D_A_NPC_ASHB_H */ diff --git a/include/d/actor/d_a_npc_impal.h b/include/d/actor/d_a_npc_impal.h index b07fc773d93..cf273ad5857 100644 --- a/include/d/actor/d_a_npc_impal.h +++ b/include/d/actor/d_a_npc_impal.h @@ -3,6 +3,33 @@ #include "d/actor/d_a_npc.h" +struct daNpcImpal_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 field_0x6c; +}; + +class daNpcImpal_Param_c { +public: + /* 80A0C204 */ virtual ~daNpcImpal_Param_c() {} + + static const daNpcImpal_HIOParam m; +}; + +#if DEBUG +class daNpcImpal_HIO_c : public mDoHIO_entry_c { +public: + daNpcImpal_HIO_c(); + + void genMessage(JORMContext*); + + daNpcImpal_HIOParam m; +}; + +#define NPC_IMPAL_HIO_CLASS daNpcImpal_HIO_c +#else +#define NPC_IMPAL_HIO_CLASS daNpcImpal_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcImpal_c @@ -77,12 +104,12 @@ public: /* 80A0A1E0 */ BOOL EvCut_ImpalAppear1(int); /* 80A0A680 */ BOOL EvCut_ImpalAppear2(int); /* 80A0A950 */ BOOL EvCut_CopyRod(int); - /* 80A0ADF8 */ void setParam(); - /* 80A0AEA8 */ BOOL main(); - /* 80A0B380 */ BOOL ctrlBtk(); - /* 80A0B45C */ void setAttnPos(); - /* 80A0B76C */ void lookat(); - /* 80A0B94C */ BOOL drawDbgInfo(); + /* 80A0ADF8 */ inline void setParam(); + /* 80A0AEA8 */ inline BOOL main(); + /* 80A0B380 */ inline BOOL ctrlBtk(); + /* 80A0B45C */ inline void setAttnPos(); + /* 80A0B76C */ inline void lookat(); + /* 80A0B94C */ inline BOOL drawDbgInfo(); s16 getMessageNo() { return shape_angle.x; } u8 getSwitchNo() { return (fopAcM_GetParam(this) >> 8) & 0xFF; } @@ -101,7 +128,7 @@ private: /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ daNpcF_Lookat_c mLookat; /* 0xC78 */ daNpcF_ActorMngr_c mActorMngr[1]; - /* 0xC80 */ fopAc_ac_c* mpTalkPartner; + /* 0xC80 */ NPC_IMPAL_HIO_CLASS* mpHIO; /* 0xC84 */ dCcD_Cyl mCyl; /* 0xDC0 */ actionFunc mpActionFn; /* 0xDCC */ request_of_phase_process_class mPhase[1]; @@ -118,47 +145,4 @@ private: STATIC_ASSERT(sizeof(daNpcImpal_c) == 0xdec); -struct daNpc_Impal_HIOParam { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - /* 0x6C */ f32 field_0x6c; -}; - -class daNpcImpal_Param_c { -public: - /* 80A0C204 */ virtual ~daNpcImpal_Param_c() {} - - static daNpc_Impal_HIOParam const m; -}; - #endif /* D_A_NPC_IMPAL_H */ diff --git a/include/d/actor/d_a_npc_lud.h b/include/d/actor/d_a_npc_lud.h index 1bea412e64e..f70d1b63525 100644 --- a/include/d/actor/d_a_npc_lud.h +++ b/include/d/actor/d_a_npc_lud.h @@ -3,15 +3,6 @@ #include "d/actor/d_a_npc.h" -/** - * @ingroup actors-npcs - * @class daNpc_Lud_c - * @brief Luda - * - * @details - * - */ - struct daNpc_Lud_HIOParam { /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ f32 play_speed; @@ -24,6 +15,30 @@ public: static const daNpc_Lud_HIOParam m; }; +#if DEBUG +class daNpc_Lud_HIO_c : public mDoHIO_entry_c { +public: + daNpc_Lud_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpc_Lud_HIOParam m; +}; + +#define NPC_LUD_HIO_CLASS daNpc_Lud_HIO_c +#else +#define NPC_LUD_HIO_CLASS daNpc_Lud_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Lud_c + * @brief Luda + * + * @details + * + */ class daNpc_Lud_c : public daNpcT_c { public: typedef int (daNpc_Lud_c::*actionFunc)(void*); @@ -101,7 +116,7 @@ public: private: /* 0xE40 */ mDoExt_McaMorfSO* mpBowlMorf; - /* 0xE44 */ u8 field_0xe44[0xe48 - 0xe44]; + /* 0xE44 */ NPC_LUD_HIO_CLASS* mpHIO; /* 0xE48 */ J3DModel* mpModel[2]; /* 0xE50 */ dCcD_Cyl mCyl; /* 0xF8C */ u8 mType; diff --git a/include/d/actor/d_a_npc_moi.h b/include/d/actor/d_a_npc_moi.h index 5b15e11aa45..5b7e07abc97 100644 --- a/include/d/actor/d_a_npc_moi.h +++ b/include/d/actor/d_a_npc_moi.h @@ -3,18 +3,11 @@ #include "d/actor/d_a_npc.h" -/** - * @ingroup actors-npcs - * @class daNpc_Moi_c - * @brief Rusl - * - * @details - * - */ - struct daNpc_Moi_HIOParam { /* 0x00 */ daNpcT_HIOParam common; - /* 0x8C */ u8 field_0x70[12]; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; /* 0x98 */ s16 field_0x98; /* 0x9A */ s16 field_0x9a; /* 0x9C */ s16 field_0x9c; @@ -22,7 +15,9 @@ struct daNpc_Moi_HIOParam { /* 0xA0 */ s16 field_0xa0; /* 0xA2 */ s16 field_0xa2; /* 0xA4 */ f32 field_0xa4; - /* 0xA8 */ u8 field_0xa8[12]; + /* 0xA8 */ f32 field_0xa8; + /* 0xAC */ f32 field_0xac; + /* 0xB0 */ f32 field_0xb0; /* 0xB4 */ f32 field_0xb4; /* 0xB8 */ f32 field_0xb8; }; @@ -34,15 +29,30 @@ public: static const daNpc_Moi_HIOParam m; }; -class daNpc_Moi_HIO_c -#ifdef DEBUG - : public mDoHIO_entry_c -#endif -{ +#if DEBUG +class daNpc_Moi_HIO_c : public mDoHIO_entry_c { public: + daNpc_Moi_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); void genMessage(JORMContext*); + + daNpc_Moi_HIOParam m; }; +#define NPC_MOI_HIO_CLASS daNpc_Moi_HIO_c +#else +#define NPC_MOI_HIO_CLASS daNpc_Moi_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Moi_c + * @brief Rusl + * + * @details + * + */ class daNpc_Moi_c : public daNpcT_c { public: typedef int (daNpc_Moi_c::*cutFunc)(int); @@ -152,7 +162,7 @@ public: static cutFunc mCutList[5]; private: - /* 0x0E40 */ daNpc_Moi_HIO_c* field_0xe40; + /* 0x0E40 */ NPC_MOI_HIO_CLASS* mpHIO; /* 0x0E44 */ J3DModel* mpModel[6]; /* 0x0E5C */ dCcD_Cyl mCyl[4]; /* 0x134C */ dCcD_Cyl mCyl2; diff --git a/include/d/actor/d_a_npc_shad.h b/include/d/actor/d_a_npc_shad.h index 6cea0c52d2b..17852f4d629 100644 --- a/include/d/actor/d_a_npc_shad.h +++ b/include/d/actor/d_a_npc_shad.h @@ -3,6 +3,33 @@ #include "d/actor/d_a_npc.h" +struct daNpcShad_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; + /* 0x6C */ f32 traveling_speed; // 走行速度 (Traveling Speed) +}; + +class daNpcShad_Param_c : public JORReflexible { +public: + /* 80AE1F70 */ virtual ~daNpcShad_Param_c() {} + + static const daNpcShad_HIOParam m; +}; + +#if DEBUG +class daNpcShad_HIO_c : public mDoHIO_entry_c { +public: + daNpcShad_HIO_c(); + + void genMessage(JORMContext*); + + daNpcShad_HIOParam m; +}; + +#define NPC_SHAD_HIO_CLASS daNpcShad_HIO_c +#else +#define NPC_SHAD_HIO_CLASS daNpcShad_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcShad_c @@ -10,24 +37,7 @@ * * @details * -*/ - -struct daNpcShad_HIOParam { - /* 0x00 */ daNpcF_HIOParam common; - /* 0x6C */ f32 traveling_speed; // 走行速度 (Traveling Speed) -}; - -class daNpcShad_Param_c: public JORReflexible { -public: - /* 80AE1F70 */ virtual ~daNpcShad_Param_c() {} - -#ifdef DEBUG - void genMessage(JORMContext*); -#endif - - static const daNpcShad_HIOParam m; -}; - + */ class daNpcShad_c : public daNpcF_c { public: typedef bool (daNpcShad_c::*ActionFn)(void*); @@ -219,8 +229,10 @@ public: mActorMngr[4].entry(getEvtAreaTagP(17, 0)); } } else if (mMode == 1 - /* dSv_event_flag_c::F_0302 - Kakariko Village - Saw cutscene of Shad casting spells underneat Kakariko Village */ - && daNpcF_chkEvtBit(0x12E) && mActorMngr[4].getActorP() == NULL) { + /* dSv_event_flag_c::F_0302 - Kakariko Village - Saw cutscene of Shad casting + spells underneat Kakariko Village */ + && daNpcF_chkEvtBit(0x12E) && mActorMngr[4].getActorP() == NULL) + { mActorMngr[4].entry(getEvtAreaTagP(18, 0)); } } @@ -233,7 +245,7 @@ private: /* 0xBE4 */ daNpcF_Lookat_c mLookat; /* 0xC80 */ daNpcF_ActorMngr_c mActorMngr[5]; /* 0xCA8 */ daPy_py_c* field_0xca8; - /* 0xCAC */ u8 field_0xcac[0xcb0 - 0xcac]; + /* 0xCAC */ NPC_SHAD_HIO_CLASS* mpHIO; /* 0xCB0 */ dCcD_Cyl field_0xcb0; /* 0xDEC */ ActionFn mActionFn; /* 0xDF8 */ request_of_phase_process_class mPhases[2]; diff --git a/include/d/actor/d_a_npc_shoe.h b/include/d/actor/d_a_npc_shoe.h index 4d85ebd7972..c894263a122 100644 --- a/include/d/actor/d_a_npc_shoe.h +++ b/include/d/actor/d_a_npc_shoe.h @@ -3,6 +3,34 @@ #include "d/actor/d_a_npc.h" +struct daNpcShoe_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; +}; + +class daNpcShoe_Param_c { +public: + /* 80AEA344 */ virtual ~daNpcShoe_Param_c() {} + + static const daNpcShoe_HIOParam m; +}; + +STATIC_ASSERT(sizeof(daNpcShoe_Param_c::m) == 0x6C); + +#if DEBUG +class daNpcShoe_HIO_c : public mDoHIO_entry_c { +public: + daNpcShoe_HIO_c(); + + void genMessage(JORMContext*); + + daNpcShoe_HIOParam m; +}; + +#define NPC_SHOE_HIO_CLASS daNpcShoe_HIO_c +#else +#define NPC_SHOE_HIO_CLASS daNpcShoe_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcShoe_c @@ -52,10 +80,10 @@ public: /* 80AE92E8 */ void setParam(); /* 80AE93A0 */ BOOL main(); /* 80AE9624 */ void setAttnPos(); - /* 80AE9820 */ void lookat(); + /* 80AE9820 */ inline void lookat(); /* 80AE9A00 */ void setMotionAnm(int, f32); - /* 80AE9AD0 */ BOOL drawDbgInfo(); - /* 80AEA340 */ void adjustShapeAngle(); + /* 80AE9AD0 */ inline BOOL drawDbgInfo(); + /* 80AEA340 */ inline void adjustShapeAngle(); s16 getMessageNo() { return fopAcM_GetParam(this) >> 0x10; } @@ -83,7 +111,7 @@ public: inline void playMotion(); static EventFn mEvtSeqList[1]; - + private: /* 0xB48 */ J3DModel* mpModel1; /* 0xB4C */ J3DModel* mpModel2; @@ -91,7 +119,7 @@ private: /* 0xBF4 */ u8 field_0xbf4[0xbf8 - 0xbf4]; /* 0xBF8 */ daNpcF_Lookat_c mLookat; /* 0xC94 */ daNpcF_ActorMngr_c mActorMngr[1]; - /* 0xC9C */ u8 field_0xc9c[0xca0 - 0xc9c]; + /* 0xC9C */ NPC_SHOE_HIO_CLASS* mpHIO; /* 0xCA0 */ dCcD_Cyl mCcCyl; /* 0xDDC */ actionFunc mpActionFn; /* 0xDE8 */ request_of_phase_process_class mPhases[3]; @@ -105,53 +133,9 @@ private: /* 0xE16 */ u16 field_0xe16; /* 0xE18 */ u16 mMode; /* 0xE1A */ u8 field_0xe1a; - /* 0xE1B */ u8 field_0xe1b; // Probably isDaytime or isNighttime + /* 0xE1B */ u8 field_0xe1b; // Probably isDaytime or isNighttime }; STATIC_ASSERT(sizeof(daNpcShoe_c) == 0xe1c); -class daNpcShoe_Param_c { -public: - /* 8095D5D4 */ virtual ~daNpcShoe_Param_c() {} - - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - }; - - static param const m; -}; - -STATIC_ASSERT(sizeof(daNpcShoe_Param_c::param) == 0x6C); - #endif /* D_A_NPC_SHOE_H */ diff --git a/include/d/actor/d_a_npc_the.h b/include/d/actor/d_a_npc_the.h index 7b0adb1280d..437af224843 100644 --- a/include/d/actor/d_a_npc_the.h +++ b/include/d/actor/d_a_npc_the.h @@ -3,6 +3,35 @@ #include "d/actor/d_a_npc.h" +struct daNpcThe_HIOParam { + /* 0x00 */ daNpcF_HIOParam common; +}; + +class daNpcThe_Param_c { +public: + /* 80AFBDA0 */ virtual ~daNpcThe_Param_c() {} + + static const daNpcThe_HIOParam m; +}; + +STATIC_ASSERT(sizeof(daNpcThe_Param_c::m) == 0x6C); + +#if DEBUG +class daNpcThe_HIO_c : public mDoHIO_entry_c { +public: + daNpcThe_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); + void genMessage(JORMContext*); + + daNpcThe_HIOParam m; +}; + +#define NPC_THE_HIO_CLASS daNpcThe_HIO_c +#else +#define NPC_THE_HIO_CLASS daNpcThe_Param_c +#endif + /** * @ingroup actors-npcs * @class daNpcThe_c @@ -103,16 +132,16 @@ public: /* 80AF9358 */ cPhs__Step create(); /* 80AF9748 */ void reset(); /* inline */ inline int Draw(); - /* 80AF99F4 */ void setParam(); - /* 80AF9CF0 */ BOOL main(); - /* 80AF9F94 */ void playMotion(); - /* 80AFA338 */ void playExpression(); + /* 80AF99F4 */ inline void setParam(); + /* 80AF9CF0 */ inline BOOL main(); + /* 80AF9F94 */ inline void playMotion(); + /* 80AFA338 */ inline void playExpression(); /* inline */ inline void setExpressionTalkAfter(); - /* 80AFA6CC */ BOOL doEvent(); - /* 80AFADEC */ BOOL ctrlBtk(); - /* 80AFAEC8 */ void setAttnPos(); - /* 80AFB1C4 */ void lookat(); - /* 80AFB488 */ BOOL drawDbgInfo(); + /* 80AFA6CC */ inline BOOL doEvent(); + /* 80AFADEC */ inline BOOL ctrlBtk(); + /* 80AFAEC8 */ inline void setAttnPos(); + /* 80AFB1C4 */ inline void lookat(); + /* 80AFB488 */ inline BOOL drawDbgInfo(); /* 80AFBD9C */ void adjustShapeAngle() {} u8 getTypeFromParam() { @@ -143,16 +172,15 @@ public: } bool isSneaking() { - if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") && dComIfGp_getStartStageRoomNo() == 5 - && dComIfG_play_c::getLayerNo(0) == 2) { + if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") && + dComIfGp_getStartStageRoomNo() == 5 && dComIfG_play_c::getLayerNo(0) == 2) + { return true; } return false; } - bool chkAction(ActionFn action) { - return mpActionFn == action; - } + bool chkAction(ActionFn action) { return mpActionFn == action; } BOOL setAction(ActionFn action) { if (mpActionFn != NULL) { @@ -184,7 +212,7 @@ private: /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ daNpcF_Lookat_c mLookat; /* 0xC78 */ daNpcF_ActorMngr_c mActorMngr[3]; - /* 0xC90 */ u8 field_0xc90[4]; + /* 0xC90 */ NPC_THE_HIO_CLASS* mpHIO; /* 0xC94 */ dCcD_Cyl mColCyl; /* 0xDD0 */ ActionFn mpNextActionFn; /* 0xDDC */ ActionFn mpActionFn; @@ -208,48 +236,4 @@ private: STATIC_ASSERT(sizeof(daNpcThe_c) == 0xE20); -class daNpcThe_Param_c { -public: - struct param { - /* 0x00 */ f32 mAttnOffsetY; - /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 mScale; - /* 0x0C */ f32 mShadowDepth; - /* 0x10 */ f32 mCcWeight; - /* 0x14 */ f32 mCylH; - /* 0x18 */ f32 mWallH; - /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 mBodyUpAngle; - /* 0x24 */ f32 mBodyDownAngle; - /* 0x28 */ f32 mBodyLeftAngle; - /* 0x2C */ f32 mBodyRightAngle; - /* 0x30 */ f32 mHeadUpAngle; - /* 0x34 */ f32 mHeadDownAngle; - /* 0x38 */ f32 mHeadLeftAngle; - /* 0x3C */ f32 mHeadRightAngle; - /* 0x40 */ f32 mNeckAngleScl; - /* 0x44 */ f32 mMorfFrames; - /* 0x48 */ s16 mSpeakDistIdx; - /* 0x4A */ s16 mSpeakAngleIdx; - /* 0x4C */ s16 mTalkDistIdx; - /* 0x4E */ s16 mTalkAngleIdx; - /* 0x50 */ f32 mAttnFovY; - /* 0x54 */ f32 mAttnRadius; - /* 0x58 */ f32 mAttnUpperY; - /* 0x5C */ f32 mAttnLowerY; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 mDamageTimer; - /* 0x64 */ s16 mTestExpression; - /* 0x66 */ s16 mTestMotion; - /* 0x68 */ s16 mTestLookMode; - /* 0x6A */ bool mTest; - }; - - /* 80AFBDA0 */ virtual ~daNpcThe_Param_c() {} - - static daNpcThe_Param_c::param const m; -}; - -STATIC_ASSERT(sizeof(daNpcThe_Param_c::param) == 0x6C); - #endif /* D_A_NPC_THE_H */ diff --git a/include/d/actor/d_a_npc_uri.h b/include/d/actor/d_a_npc_uri.h index 10abae1e563..005905d454f 100644 --- a/include/d/actor/d_a_npc_uri.h +++ b/include/d/actor/d_a_npc_uri.h @@ -3,47 +3,8 @@ #include "d/actor/d_a_npc.h" -/** - * @ingroup actors-npcs - * @class daNpc_Uri_c - * @brief Uli - * - * @details - * - */ - - struct daNpc_Uri_HIOParam { - /* 0x00 */ f32 field_0x00; - /* 0x04 */ f32 field_0x04; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 field_0x40; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4a; - /* 0x4C */ s16 field_0x4c; - /* 0x4E */ s16 field_0x4e; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; - /* 0x60 */ s16 field_0x60; - /* 0x62 */ s16 field_0x62; - /* 0x64 */ u8 field_0x64[8]; - /* 0x6C */ f32 field_0x6c; - /* 0x70 */ u8 field_0x70[28]; +struct daNpc_Uri_HIOParam { + /* 0x00 */ daNpcT_HIOParam common; /* 0x8C */ s16 field_0x8c; /* 0x8E */ s16 field_0x8e; /* 0x90 */ s16 field_0x90; @@ -59,20 +20,35 @@ class daNpc_Uri_Param_c { public: - /* 80B2CD94 */ virtual ~daNpc_Uri_Param_c() {}; + /* 80B2CD94 */ virtual ~daNpc_Uri_Param_c() {} - static daNpc_Uri_HIOParam const m; + static const daNpc_Uri_HIOParam m; }; -class daNpc_Uri_HIO_c -#ifdef DEBUG -: public mDoHIO_entry_c -#endif -{ +#if DEBUG +class daNpc_Uri_HIO_c : public mDoHIO_entry_c { public: + daNpc_Uri_HIO_c(); + + void listenPropertyEvent(const JORPropertyEvent*); void genMessage(JORMContext*); + + daNpc_Uri_HIOParam m; }; +#define NPC_URI_HIO_CLASS daNpc_Uri_HIO_c +#else +#define NPC_URI_HIO_CLASS daNpc_Uri_Param_c +#endif + +/** + * @ingroup actors-npcs + * @class daNpc_Uri_c + * @brief Uli + * + * @details + * + */ class daNpc_Uri_c : public daNpcT_c { public: typedef int (daNpc_Uri_c::*cutFunc)(int); @@ -164,7 +140,7 @@ public: static cutFunc mCutList[7]; private: - /* 0x0E40 */ daNpc_Uri_HIO_c* field_0xe40; + /* 0x0E40 */ NPC_URI_HIO_CLASS* mpHIO; /* 0x0E44 */ J3DModel* mpModel[1]; /* 0x0E48 */ dCcD_Cyl mCyl; /* 0x0F84 */ u8 mType; diff --git a/include/d/actor/d_a_obj_szbridge.h b/include/d/actor/d_a_obj_szbridge.h index 00ad056753e..e9b58d1c43d 100644 --- a/include/d/actor/d_a_obj_szbridge.h +++ b/include/d/actor/d_a_obj_szbridge.h @@ -1,6 +1,7 @@ #ifndef D_A_OBJ_SZBRIDGE_H #define D_A_OBJ_SZBRIDGE_H +#include "d/d_bg_s_movebg_actor.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,24 +12,30 @@ * @details * */ -class daObjSZbridge_c : public fopAc_ac_c { +class daObjSZbridge_c : public dBgS_MoveBgActor, request_of_phase_process_class { public: /* 80D04360 */ void rideActor(fopAc_ac_c*); - /* 80D04424 */ void create1st(); + /* 80D04424 */ int create1st(); /* 80D044B8 */ void setMtx(); - /* 80D04528 */ void CreateHeap(); + /* 80D04528 */ int CreateHeap(); /* 80D04598 */ void chkBg(); - /* 80D048C4 */ void Create(); - /* 80D04974 */ void Execute(Mtx**); - /* 80D049E4 */ void Draw(); - /* 80D04A88 */ void Delete(); - /* 80D04B90 */ ~daObjSZbridge_c(); + /* 80D048C4 */ int Create(); + /* 80D04974 */ int Execute(Mtx**); + /* 80D049E4 */ int Draw(); + /* 80D04A88 */ int Delete(); + /* 80D04B90 */ virtual ~daObjSZbridge_c() {} private: - /* 0x568 */ u8 field_0x568[0x624 - 0x568]; + /* 0x5A8 */ Mtx mBgMtx; + /* 0x5D8 */ Mtx field_0x5d8; + /* 0x608 */ J3DModel* mpModel; + /* 0x60C */ f32 mWaterY; + /* 0x610 */ f32 mGroundY; + /* 0x614 */ u8 field_0x614; + /* 0x618 */ u32 field_0x618[2]; + /* 0x620 */ int field_0x620; }; STATIC_ASSERT(sizeof(daObjSZbridge_c) == 0x624); - #endif /* D_A_OBJ_SZBRIDGE_H */ diff --git a/src/d/actor/d_a_npc_ash.cpp b/src/d/actor/d_a_npc_ash.cpp index 41148824dc9..8238de3e37b 100644 --- a/src/d/actor/d_a_npc_ash.cpp +++ b/src/d/actor/d_a_npc_ash.cpp @@ -3,251 +3,62 @@ * NPC - Ashei */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep -#include "d/actor/d_a_npc_ash.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" +#include "d/actor/d_a_npc_ash.h" #include "d/actor/d_a_tag_evtarea.h" -#include "dol2asm.h" -// -// Forward References: -// +/* 8095D640-8095D6AC 000000 006C+00 14/14 0/0 0/0 .rodata m__16daNpcAsh_Param_c */ +const daNpcAsh_HIOParam daNpcAsh_Param_c::m = { + 35.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 400.0f, // real_shadow_size + 255.0f, // weight + 200.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 0.0f, // body_angleY_max + 0.0f, // body_angleY_min + 30.0f, // head_angleX_max + 0.0f, // head_angleX_min + 30.0f, // head_angleY_max + -30.0f, // head_angleY_min + 0.8f, // neck_rotation_ratio + 12.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 120.0f, // fov + 500.0f, // search_distance + 300.0f, // search_height + -300.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON +}; -extern "C" void __ct__10daNpcAsh_cFv(); -extern "C" void __dt__8dCcD_CylFv(); -extern "C" void __ct__8dCcD_CylFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10daNpcAsh_cFv(); -extern "C" void Create__10daNpcAsh_cFv(); -extern "C" void CreateHeap__10daNpcAsh_cFv(); -extern "C" void __dt__15J3DTevKColorAnmFv(); -extern "C" void __ct__15J3DTevKColorAnmFv(); -extern "C" void __dt__14J3DTevColorAnmFv(); -extern "C" void __ct__14J3DTevColorAnmFv(); -extern "C" void __dt__11J3DTexNoAnmFv(); -extern "C" void __ct__11J3DTexNoAnmFv(); -extern "C" void __dt__12J3DTexMtxAnmFv(); -extern "C" void __ct__12J3DTexMtxAnmFv(); -extern "C" void __dt__14J3DMatColorAnmFv(); -extern "C" void __ct__14J3DMatColorAnmFv(); -extern "C" void Delete__10daNpcAsh_cFv(); -extern "C" void Execute__10daNpcAsh_cFv(); -extern "C" void Draw__10daNpcAsh_cFv(); -extern "C" void ctrlJoint__10daNpcAsh_cFP8J3DJointP8J3DModel(); -extern "C" void createHeapCallBack__10daNpcAsh_cFP10fopAc_ac_c(); -extern "C" void ctrlJointCallBack__10daNpcAsh_cFP8J3DJointi(); -extern "C" void setExpressionAnm__10daNpcAsh_cFib(); -extern "C" void setExpressionBtp__10daNpcAsh_cFi(); -extern "C" void setMotionAnm__10daNpcAsh_cFif(); -extern "C" void reset__10daNpcAsh_cFv(); -extern "C" void setAction__10daNpcAsh_cFM10daNpcAsh_cFPCvPvPv_b(); -extern "C" void isSneaking__10daNpcAsh_cFv(); -extern "C" void wait_type0__10daNpcAsh_cFPv(); -extern "C" void setMotion__10daNpcAsh_cFifi(); -extern "C" void setExpression__10daNpcAsh_cFif(); -extern "C" void wait_type1__10daNpcAsh_cFPv(); -extern "C" void talk__10daNpcAsh_cFPv(); -extern "C" void demo__10daNpcAsh_cFPv(); -extern "C" void leave__10daNpcAsh_cFPv(); -extern "C" void EvCut_Introduction__10daNpcAsh_cFi(); -extern "C" void EvCut_Meeting__10daNpcAsh_cFi(); -extern "C" void EvCut_WiretapSponsor__10daNpcAsh_cFi(); -extern "C" void EvCut_WiretapEntrant__10daNpcAsh_cFi(); -extern "C" static void daNpcAsh_Create__FPv(); -extern "C" static void daNpcAsh_Delete__FPv(); -extern "C" static void daNpcAsh_Execute__FPv(); -extern "C" static void daNpcAsh_Draw__FPv(); -extern "C" static bool daNpcAsh_IsDelete__FPv(); -extern "C" void calc__11J3DTexNoAnmCFPUs(); -extern "C" void setParam__10daNpcAsh_cFv(); -extern "C" void main__10daNpcAsh_cFv(); -extern "C" void playMotion__10daNpcAsh_cFv(); -extern "C" void ctrlBtk__10daNpcAsh_cFv(); -extern "C" void setAttnPos__10daNpcAsh_cFv(); -extern "C" void lookat__10daNpcAsh_cFv(); -extern "C" bool drawDbgInfo__10daNpcAsh_cFv(); -extern "C" void func_8095CC94(void* _this, s16); -extern "C" void __sinit_d_a_npc_ash_cpp(); -extern "C" void __dt__18daNpcF_ActorMngr_cFv(); -extern "C" void __ct__18daNpcF_ActorMngr_cFv(); -extern "C" void __dt__15daNpcF_Lookat_cFv(); -extern "C" void __dt__5csXyzFv(); -extern "C" void __ct__5csXyzFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __dt__8daNpcF_cFv(); -extern "C" void __ct__8daNpcF_cFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" void adjustShapeAngle__8daNpcF_cFv(); -extern "C" void setCollisions__8daNpcF_cFv(); -extern "C" void drawOtherMdls__8daNpcF_cFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz(); -extern "C" void __dt__16daNpcAsh_Param_cFv(); -extern "C" static void func_8095D61C(); -extern "C" static void func_8095D624(); -extern "C" u8 const m__16daNpcAsh_Param_c[108]; -extern "C" extern char* const d_a_npc_ash__stringBase0; -extern "C" u8 mEvtSeqList__10daNpcAsh_c[72]; +#if DEBUG +daNpcAsh_HIO_c::daNpcAsh_HIO_c() { + m = daNpcAsh_Param_c::m; +} -// -// External References: -// - -extern "C" void changeBckOnly__13mDoExt_bckAnmFP15J3DAnmTransform(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fpcSch_JudgeForPName__FPvPv(); -extern "C" void getLayerNo__14dComIfG_play_cFi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGs_isStageSwitch__Fii(); -extern "C" void isSwitch__12dSv_memBit_cCFi(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void convPId__14dEvt_control_cFUi(); -extern "C" void setPtI_Id__14dEvt_control_cFUi(); -extern "C" void endCheck__16dEvent_manager_cFs(); -extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -extern "C" void getIsAddvance__16dEvent_manager_cFi(); -extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii(); -extern "C" void getMyNowCutName__16dEvent_manager_cFi(); -extern "C" void getMySubstanceP__16dEvent_manager_cFiPCci(); -extern "C" void cutEnd__16dEvent_manager_cFi(); -extern "C" void ChkPresentEnd__16dEvent_manager_cFv(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void initialize__18daNpcF_ActorMngr_cFv(); -extern "C" void entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c(); -extern "C" void remove__18daNpcF_ActorMngr_cFv(); -extern "C" void getActorP__18daNpcF_ActorMngr_cFv(); -extern "C" void initialize__15daNpcF_MatAnm_cFv(); -extern "C" void initialize__15daNpcF_Lookat_cFv(); -extern "C" void setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz(); -extern "C" void calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii(); -extern "C" void execute__8daNpcF_cFv(); -extern "C" void draw__8daNpcF_cFiifP11_GXColorS10i(); -extern "C" void setMtx__8daNpcF_cFv(); -extern "C" void setMtx2__8daNpcF_cFv(); -extern "C" void initialize__8daNpcF_cFv(); -extern "C" void getTrnsfrmKeyAnmP__8daNpcF_cFPci(); -extern "C" void getTexPtrnAnmP__8daNpcF_cFPci(); -extern "C" void getTexSRTKeyAnmP__8daNpcF_cFPci(); -extern "C" void setMcaMorfAnm__8daNpcF_cFP18J3DAnmTransformKeyffiii(); -extern "C" void setBckAnm__8daNpcF_cFP15J3DAnmTransformfiiib(); -extern "C" void setBtpAnm__8daNpcF_cFP16J3DAnmTexPatternP12J3DModelDatafi(); -extern "C" void setBtkAnm__8daNpcF_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi(); -extern "C" void setEnvTevColor__8daNpcF_cFv(); -extern "C" void setRoomNo__8daNpcF_cFv(); -extern "C" void playExpressionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData(); -extern "C" void playMotionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData(); -extern "C" void setLookatMtx__8daNpcF_cFiPif(); -extern "C" void ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci(); -extern "C" void orderEvent__8daNpcF_cFiPcUsUsUcUs(); -extern "C" void changeEvent__8daNpcF_cFPcPcUsUs(); -extern "C" void chkActorInSight__8daNpcF_cFP10fopAc_ac_cf(); -extern "C" void chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci(); -extern "C" void initTalk__8daNpcF_cFiPP10fopAc_ac_c(); -extern "C" void talkProc__8daNpcF_cFPiiPP10fopAc_ac_c(); -extern "C" void turn__8daNpcF_cFsfi(); -extern "C" void setAngle__8daNpcF_cFs(); -extern "C" void getDistTableIdx__8daNpcF_cFii(); -extern "C" void getEvtAreaTagP__8daNpcF_cFii(); -extern "C" void daNpcF_chkEvtBit__FUl(); -extern "C" void daNpcF_chkTmpBit__FUl(); -extern "C" void daNpcF_offTmpBit__FUl(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __ct__10dMsgFlow_cFv(); -extern "C" void __dt__10dMsgFlow_cFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void __ct__11cBgS_GndChkFv(); -extern "C" void __dt__11cBgS_GndChkFv(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void __dt__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs(); -extern "C" void initialize__14J3DMaterialAnmFv(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" u8 mCcDCyl__8daNpcF_c[68]; -extern "C" extern void* __vt__8daNpcF_c[18]; -extern "C" extern void* __vt__15daNpcF_MatAnm_c[4 + 6 /* padding */]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern void* __vt__14J3DMaterialAnm[4]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz4cXyz(); -extern "C" void __register_global_object(); - -// -// Declarations: -// +void daNpcAsh_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif /* 8095DD4C-8095DD50 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpcAsh_Param_c l_HIO; +NPC_ASH_HIO_CLASS l_HIO; void daNpcAsh_c::setLookMode(int i_lookMode, fopAc_ac_c* i_talkPartner) { if (i_lookMode != mLookMode || i_talkPartner != mTalkPartner) { @@ -276,7 +87,7 @@ void daNpcAsh_c::searchActors() { BOOL daNpcAsh_c::chkFindPlayer() { BOOL ret; - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcAsh_Param_c::m.mAttnFovY)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); ret = false; } else { @@ -326,44 +137,48 @@ bool daNpcAsh_c::step(s16 i_angY, bool i_animate) { /* 8095D9B0-8095DA88 000020 00D8+00 1/2 0/0 0/0 .data l_bckGetParamList */ static daNpc_GetParam2 l_bckGetParamList[18] = { - {-1, 2, 0}, // - {7, 0, 0}, // ash_f_talk_a - {12, 0, 1}, // ash_f_talk_b - {11, 0, 1}, // ash_f_silent - {8, 0, 1}, // ash_f_cool - {7, 0, 1}, // ash_f_ask - {9, 0, 1}, // ash_f_explain_a - {10, 0, 1}, // ash_f_explain_b - {8, 2, 0}, // ash_wait_a - {14, 2, 1}, // ash_wait_b - {15, 2, 1}, // ash_wait_c - {13, 0, 1}, // ash_step - {4, 0, 1}, // ash_cool - {3, 0, 1}, // ash_ask - {5, 0, 1}, // ash_explain_a - {6, 0, 1}, // ash_explain_b - {5, 2, 2}, // ash_bowwait - {4, 2, 2}, // ash_bowrun + {-1, 2, 0}, // + {7, 0, 0}, // ash_f_talk_a + {12, 0, 1}, // ash_f_talk_b + {11, 0, 1}, // ash_f_silent + {8, 0, 1}, // ash_f_cool + {7, 0, 1}, // ash_f_ask + {9, 0, 1}, // ash_f_explain_a + {10, 0, 1}, // ash_f_explain_b + {8, 2, 0}, // ash_wait_a + {14, 2, 1}, // ash_wait_b + {15, 2, 1}, // ash_wait_c + {13, 0, 1}, // ash_step + {4, 0, 1}, // ash_cool + {3, 0, 1}, // ash_ask + {5, 0, 1}, // ash_explain_a + {6, 0, 1}, // ash_explain_b + {5, 2, 2}, // ash_bowwait + {4, 2, 2}, // ash_bowrun }; /* 8095DA88-8095DA94 0000F8 000C+00 1/1 0/0 0/0 .data l_btpGetParamList */ static daNpc_GetParam2 l_btpGetParamList[1] = { - {17, 2, 0}, // ash + {17, 2, 0}, // ash }; /* 8095DA94-8095DAA0 000104 000C+00 0/1 0/0 0/0 .data l_btkGetParamList */ static daNpc_GetParam2 l_btkGetParamList[1] = { - {14, 2, 0}, // ash + {14, 2, 0}, // ash }; /* 8095DAA0-8095DAAC 000110 000C+00 1/0 0/0 0/0 .data l_loadRes_ASH0 */ static int l_loadRes_ASH0[3] = { - 0, 1, -1, + 0, + 1, + -1, }; /* 8095DAAC-8095DAB8 00011C 000C+00 1/0 0/0 0/0 .data l_loadRes_ASH1 */ static int l_loadRes_ASH1[3] = { - 0, 2, -1, + 0, + 2, + -1, }; /* 8095DAB8-8095DAC0 -00001 0008+00 2/2 0/0 0/0 .data l_loadRes_list */ @@ -402,9 +217,7 @@ daNpcAsh_c::EventFn daNpcAsh_c::mEvtSeqList[6] = { }; /* 809582EC-80958430 0000EC 0144+00 1/1 0/0 0/0 .text __ct__10daNpcAsh_cFv */ -daNpcAsh_c::daNpcAsh_c() { - // NONMATCHING -} +daNpcAsh_c::daNpcAsh_c() {} /* 80958610-809587A0 000410 0190+00 1/0 0/0 0/0 .text __dt__10daNpcAsh_cFv */ daNpcAsh_c::~daNpcAsh_c() { @@ -417,42 +230,6 @@ daNpcAsh_c::~daNpcAsh_c() { } } -/* 8095D640-8095D6AC 000000 006C+00 14/14 0/0 0/0 .rodata m__16daNpcAsh_Param_c */ -daNpcAsh_Param_c::param const daNpcAsh_Param_c::m = { - 35.0f, // mAttnOffsetY - -3.0f, // mGravity - 1.0f, // mScale - 400.0f, // mShadowDepth - 255.0f, // mCcWeight - 200.0f, // mCylH - 35.0f, // mWallH - 30.0f, // mWallR - 0.0f, // mBodyUpAngle - 0.0f, // mBodyDownAngle - 0.0f, // mBodyLeftAngle - 0.0f, // mBodyRightAngle - 30.0f, // mHeadUpAngle - 0.0f, // mHeadDownAngle - 30.0f, // mHeadLeftAngle - -30.0f, // mHeadRightAngle - 0.8f, // mNeckAngleScl - 12.0f, // mMorfFrames - 3, // mSpeakDistIdx - 6, // mSpeakAngleIdx - 5, // mTalkDistIdx - 6, // mTalkAngleIdx - 120.0f, // mAttnFovY - 500.0f, // mAttnRadius - 300.0f, // mAttnUpperY - -300.0f, // mAttnLowerY - 60, - 8, // mDamageTimer - 0, // mTestExpression - 0, // mTestMotion - 0, // mTestLookMode - false, // mTest -}; - /* 809587A0-80958B68 0005A0 03C8+00 1/1 0/0 0/0 .text Create__10daNpcAsh_cFv */ cPhs__Step daNpcAsh_c::Create() { cPhs__Step step; @@ -460,10 +237,11 @@ cPhs__Step daNpcAsh_c::Create() { fopAcM_ct(this, daNpcAsh_c); if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") && dComIfG_play_c::getLayerNo(0) == 4) { - /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ + /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ if (daNpcF_chkEvtBit(0x169) - /* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */ - && !daNpcF_chkEvtBit(0x10A)) { + /* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */ + && !daNpcF_chkEvtBit(0x10A)) + { return cPhs_ERROR_e; } if (dComIfGs_isStageSwitch(0x18, 0x4b)) { @@ -509,13 +287,13 @@ cPhs__Step daNpcAsh_c::Create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 220.0f, 100.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcAsh_Param_c::m.mWallR, daNpcAsh_Param_c::m.mWallH); + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init((int)daNpcAsh_Param_c::m.mCcWeight, 0, this); + mCcStts.Init((int)mpHIO->m.common.weight, 0, this); mCcCyl[0].Set(daNpcF_c::mCcDCyl); mCcCyl[0].SetStts(&mCcStts); mCcCyl[0].SetTgType(0); @@ -542,8 +320,8 @@ cPhs__Step daNpcAsh_c::Create() { /* 80958B68-80958F08 000968 03A0+00 1/1 0/0 0/0 .text CreateHeap__10daNpcAsh_cFv */ BOOL daNpcAsh_c::CreateHeap() { J3DModelData* modelData = static_cast(dComIfG_getObjectRes(l_arcNames[0], 11)); - mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, - &mCreatureSound, 0x80000, 0x11020284); + mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreatureSound, + 0x80000, 0x11020284); if (mpMorf != NULL && mpMorf->mpModel == NULL) { mpMorf->stopZelAnime(); mpMorf = NULL; @@ -566,13 +344,15 @@ BOOL daNpcAsh_c::CreateHeap() { mModelQuiver = NULL; mModelBow = NULL; if (mType == TYPE_CASTLE) { - mModelBow = mDoExt_J3DModel__create(static_cast( - dComIfG_getObjectRes(l_arcNames[2], 8)), 0x80000, 0x11000084); + mModelBow = mDoExt_J3DModel__create( + static_cast(dComIfG_getObjectRes(l_arcNames[2], 8)), 0x80000, + 0x11000084); if (mModelBow == NULL) { return false; } - mModelQuiver = mDoExt_J3DModel__create(static_cast( - dComIfG_getObjectRes(l_arcNames[2], 9)), 0x80000, 0x11000084); + mModelQuiver = mDoExt_J3DModel__create( + static_cast(dComIfG_getObjectRes(l_arcNames[2], 9)), 0x80000, + 0x11000084); if (mModelQuiver == NULL) { return false; } @@ -612,7 +392,7 @@ int daNpcAsh_c::Execute() { /* 8095911C-80959238 000F1C 011C+00 1/1 0/0 0/0 .text Draw__10daNpcAsh_cFv */ int daNpcAsh_c::Draw() { mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); - draw(false, false, daNpcAsh_Param_c::m.mShadowDepth, NULL, false); + draw(false, false, mpHIO->m.common.real_shadow_size, NULL, false); if (mType == TYPE_CASTLE) { g_env_light.setLightTevColorType_MAJI(mModelBow, &tevStr); @@ -649,12 +429,12 @@ bool daNpcAsh_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(jointNo, lookatJoints, daNpcAsh_Param_c::m.mNeckAngleScl); + setLookatMtx(jointNo, lookatJoints, mpHIO->m.common.neck_rotation_ratio); break; } i_model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); - + if ((jointNo == 4 || jointNo == 12) && (mAnmFlags & ANM_PLAY_BCK)) { J3DAnmTransform* bckAnm = mBckAnm.getBckAnm(); mBckAnm.changeBckOnly(mpMorf->getAnm()); @@ -783,8 +563,8 @@ void daNpcAsh_c::setMotionAnm(int i_idx, f32 i_morf) { J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], l_bckGetParamList[i_idx].fileIdx); - J3DAnmTextureSRTKey* btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], - l_btkGetParamList[0].fileIdx); + J3DAnmTextureSRTKey* btkAnm = + getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx); s32 morfAttr = l_bckGetParamList[i_idx].attr; s32 btkAttr = l_btkGetParamList[0].attr; mAnmFlags &= ~ANM_MOTION_FLAGS; @@ -817,7 +597,7 @@ void daNpcAsh_c::reset() { mpActionFn = NULL; mLookMode = -1; mMode = 0; - gravity = daNpcAsh_Param_c::m.mGravity; + gravity = mpHIO->m.common.gravity; current.pos = home.pos; old.pos = current.pos; current.angle.set(0, home.angle.y, 0); @@ -866,8 +646,8 @@ bool daNpcAsh_c::setAction(daNpcAsh_c::ActionFn i_actionFn) { /* 80959BD0-80959C40 0019D0 0070+00 1/1 0/0 0/0 .text isSneaking__10daNpcAsh_cFv */ bool daNpcAsh_c::isSneaking() { - if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") - && dComIfGp_getStartStageRoomNo() == 5 && dComIfG_play_c::getLayerNo(0) == 2) + if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") && dComIfGp_getStartStageRoomNo() == 5 && + dComIfG_play_c::getLayerNo(0) == 2) { return true; } else { @@ -876,31 +656,24 @@ bool daNpcAsh_c::isSneaking() { } void daNpcAsh_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_F_TALK_B, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1 = {ANM_F_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_F_SILENT, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2 = {ANM_F_SILENT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_F_COOL, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3 = {ANM_F_COOL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_F_ASK, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4 = {ANM_F_ASK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_F_EXPLAIN_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5 = {ANM_F_EXPLAIN_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_F_EXPLAIN_B, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6 = {ANM_F_EXPLAIN_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_NONE, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat7 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; daNpcF_anmPlayData** ppDat[8] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, - pDat5, - pDat6, - pDat7, + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, }; if (mExpression >= 0 && mExpression < 8) { playExpressionAnm(ppDat); @@ -909,56 +682,90 @@ void daNpcAsh_c::playExpression() { /* 8095C200-8095C520 004000 0320+00 1/1 0/0 0/0 .text playMotion__10daNpcAsh_cFv */ void daNpcAsh_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_WAIT_B, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1 = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2 = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3a = {ANM_COOL, daNpcAsh_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat3b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3a = {ANM_COOL, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4a = {ANM_ASK, daNpcAsh_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat4b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4a = {ANM_ASK, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4b = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5a = {ANM_EXPLAIN_A, daNpcAsh_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat5b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5a = {ANM_EXPLAIN_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5b = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6a = {ANM_EXPLAIN_B, daNpcAsh_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat6b = {ANM_WAIT_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6a = {ANM_EXPLAIN_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {ANM_BOWWAIT, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat7 = {ANM_BOWWAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_BOWRUN, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat8 = {ANM_BOWRUN, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; daNpcF_anmPlayData dat9 = {ANM_STEP, 4.0f, 1}; daNpcF_anmPlayData* pDat9[1] = {&dat9}; daNpcF_anmPlayData** ppDat[10] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, - pDat5, - pDat6, - pDat7, - pDat8, - pDat9, + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, }; if (mMotion >= 0 && mMotion < 10) { playMotionAnm(ppDat); } } -/* 8095D878-8095D884 000238 000C+00 0/1 0/0 0/0 .rodata @4697 */ -// somehow supposed to be part of lookat() -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4697[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x8095D878, &lit_4697); -#pragma pop +/* 8095C9BC-8095CC8C 0047BC 02D0+00 1/1 0/0 0/0 .text lookat__10daNpcAsh_cFv */ +void daNpcAsh_c::lookat() { + daPy_py_c* player = NULL; + J3DModel* model = mpMorf->getModel(); + + BOOL snap = false; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mMotion == MOT_WAIT_A ? -15.0f : mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mMotion == MOT_WAIT_A ? 15.0f : mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mMotion == MOT_WAIT_A ? -30.0f : mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mMotion == MOT_WAIT_A ? 30.0f : mpHIO->m.common.head_angleY_max; + + s16 angle_delta = mCurAngle.y - mOldAngle.y; + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; + + switch (mLookMode) { + case LOOK_NONE: + break; + case LOOK_RESET: + snap = true; + break; + case LOOK_PLAYER: + case LOOK_PLAYER_TALK: + player = daPy_getPlayerActorClass(); + break; + case LOOK_ACTOR: + player = (daPy_py_c*)mActorMngr[4].getActorP(); + break; + case LOOK_ATTN: + player = (daPy_py_c*)mTalkPartner; + break; + } + + if (player != NULL) { + mLookPos = player->attention_info.position; + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { + mLookPos.y -= 40.0f; + } + mLookat.setAttnPos(&mLookPos); + } else { + mLookat.setAttnPos(NULL); + } + + mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, + 0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); +} /* 80959C40-8095A67C 001A40 0A3C+00 4/0 0/0 0/0 .text wait_type0__10daNpcAsh_cFPv */ bool daNpcAsh_c::wait_type0(void* param_0) { @@ -1010,8 +817,8 @@ bool daNpcAsh_c::wait_type0(void* param_0) { } daTag_EvtArea_c* evtArea = static_cast(mActorMngr[5].getActorP()); - if (evtArea != NULL - && evtArea->chkPointInArea(*fopAcM_GetPosition_p(daPy_getPlayerActorClass()))) + if (evtArea != NULL && + evtArea->chkPointInArea(*fopAcM_GetPosition_p(daPy_getPlayerActorClass()))) { daNpcF_offTmpBit(11); mOrderEvtNo = 2; @@ -1050,8 +857,8 @@ bool daNpcAsh_c::wait_type0(void* param_0) { if (mOrderEvtNo != 0) { eventInfo.setArchiveName("Ash"); } - orderEvent(mMapToolId, mOrderEvtNo != 0 ? l_evtNames[mOrderEvtNo] : NULL, - -1, 40, -1, 1); + orderEvent(mMapToolId, mOrderEvtNo != 0 ? l_evtNames[mOrderEvtNo] : NULL, -1, 40, -1, + 1); } break; @@ -1200,8 +1007,8 @@ bool daNpcAsh_c::demo(void* param_0) { s32 staff_id = eventManager.getMyStaffId(l_myName, NULL, 0); if (staff_id != -1) { mStaffID = staff_id; - s32 eventIdx = eventManager.getMyActIdx(staff_id, l_evtNames, - ARRAY_SIZEU(l_evtNames), 0, 0); + s32 eventIdx = + eventManager.getMyActIdx(staff_id, l_evtNames, ARRAY_SIZEU(l_evtNames), 0, 0); if (eventIdx >= 1 && eventIdx < 6) { mOrderEvtNo = eventIdx; } @@ -1210,8 +1017,8 @@ bool daNpcAsh_c::demo(void* param_0) { } } - if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 - && eventManager.endCheck(mEventIdx)) + if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && + eventManager.endCheck(mEventIdx)) { dComIfGp_event_reset(); mOrderEvtNo = 0; @@ -1307,8 +1114,8 @@ BOOL daNpcAsh_c::EvCut_Meeting(int i_staffID) { switch (*cutName) { case '0001': case '0002': - dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], - NULL, NULL, NULL, NULL, NULL, NULL); + dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], NULL, NULL, + NULL, NULL, NULL, NULL); initTalk(0x42e, actors); } } @@ -1344,7 +1151,7 @@ BOOL daNpcAsh_c::EvCut_Meeting(int i_staffID) { setLookMode(LOOK_PLAYER, NULL); break; } - + return false; } @@ -1362,8 +1169,8 @@ BOOL daNpcAsh_c::EvCut_WiretapSponsor(int i_staffID) { if (evtMgr.getIsAddvance(i_staffID)) { switch (*cutName) { case '0001': - dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], - NULL, NULL, NULL, NULL, NULL, NULL); + dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], NULL, NULL, + NULL, NULL, NULL, NULL); initTalk(mFlowID, actors); break; } @@ -1424,7 +1231,7 @@ BOOL daNpcAsh_c::EvCut_WiretapEntrant(int i_staffID) { setExpressionTalkAfter(); } } - + fopAc_ac_c* talk_partner = dComIfGp_event_getTalkPartner(); if (talk_partner == this) { talk_partner = NULL; @@ -1470,14 +1277,16 @@ void daNpcAsh_c::setParam() { } else { if (!strcmp(dComIfGp_getStartStageName(), "R_SP116")) { attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(3, 6); - attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_TALK_e] = + attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(2, 6); } else { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcAsh_Param_c::m.mTalkDistIdx, - daNpcAsh_Param_c::m.mTalkAngleIdx); - attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcAsh_Param_c::m.mSpeakDistIdx, - daNpcAsh_Param_c::m.mSpeakAngleIdx); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx( + mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); + attention_info.distances[fopAc_attn_TALK_e] = + attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = + getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); } } } @@ -1497,7 +1306,6 @@ BOOL daNpcAsh_c::main() { } /* 8095C520-8095C5C4 004320 00A4+00 1/0 0/0 0/0 .text ctrlBtk__10daNpcAsh_cFv */ -// NONMATCHING inlining issues BOOL daNpcAsh_c::ctrlBtk() { if (mpMatAnm != NULL) { mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f * -1.0f); @@ -1540,8 +1348,7 @@ void daNpcAsh_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(mHeadPos.x, - mHeadPos.y + daNpcAsh_Param_c::m.mAttnOffsetY, + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz center; @@ -1549,18 +1356,20 @@ void daNpcAsh_c::setAttnPos() { mDoMtx_stack_c::multVecZero(¢er); center.y = current.pos.y; mCcCyl[0].SetC(center); - mCcCyl[0].SetH(daNpcAsh_Param_c::m.mCylH); - mCcCyl[0].SetR(daNpcAsh_Param_c::m.mWallR); + mCcCyl[0].SetH(mpHIO->m.common.height); + mCcCyl[0].SetR(mpHIO->m.common.width); dComIfG_Ccsp()->Set(&mCcCyl[0]); - /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ - if (mType == TYPE_BAR && (!daNpcF_chkEvtBit(0x169) - /* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */ - || !daNpcF_chkEvtBit(0x10A) - /* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */ - || !daNpcF_chkEvtBit(0x10B) - /* dSv_event_flag_c::F_0268 - City in the Sky - City in the Sky clear */ - || daNpcF_chkEvtBit(0x10C))) { + /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ + if (mType == TYPE_BAR && + (!daNpcF_chkEvtBit(0x169) + /* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */ + || !daNpcF_chkEvtBit(0x10A) + /* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */ + || !daNpcF_chkEvtBit(0x10B) + /* dSv_event_flag_c::F_0268 - City in the Sky - City in the Sky clear */ + || daNpcF_chkEvtBit(0x10C))) + { center.set(3070.0f, -1150.0f, 2446.0f); mCcCyl[1].SetC(center); mCcCyl[1].SetH(170.0f); @@ -1569,59 +1378,6 @@ void daNpcAsh_c::setAttnPos() { } } -/* 8095C9BC-8095CC8C 0047BC 02D0+00 1/1 0/0 0/0 .text lookat__10daNpcAsh_cFv */ -// NONMATCHING literal issues -void daNpcAsh_c::lookat() { - fopAc_ac_c* actor = NULL; - J3DModel* model = mpMorf->getModel(); - BOOL snap = false; - f32 body_down_angle = daNpcAsh_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpcAsh_Param_c::m.mBodyUpAngle; - f32 body_right_angle = mMotion == MOT_WAIT_A ? -15.0f : daNpcAsh_Param_c::m.mBodyRightAngle; - f32 body_left_angle = mMotion == MOT_WAIT_A ? 15.0f : daNpcAsh_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpcAsh_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpcAsh_Param_c::m.mHeadUpAngle; - f32 head_right_angle = mMotion == MOT_WAIT_A ? -30.0f : daNpcAsh_Param_c::m.mHeadRightAngle; - f32 head_left_angle = mMotion == MOT_WAIT_A ? 30.0f : daNpcAsh_Param_c::m.mHeadLeftAngle; - s16 angle_delta = mCurAngle.y - mOldAngle.y; - cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; - csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; - - switch (mLookMode) { - case LOOK_NONE: - break; - case LOOK_RESET: - snap = true; - break; - case LOOK_PLAYER: - case LOOK_PLAYER_TALK: - actor = daPy_getPlayerActorClass(); - break; - case LOOK_ACTOR: - actor = mActorMngr[4].getActorP(); - break; - case LOOK_ATTN: - actor = mTalkPartner; - break; - } - - if (actor != NULL) { - mLookPos = actor->attention_info.position; - if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { - mLookPos.y -= 40.0f; - } - mLookat.setAttnPos(&mLookPos); - } else { - mLookat.setAttnPos(NULL); - } - - mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, - 0.0f, 0.0f, 0.0f, 0.0f, - head_down_angle, head_up_angle, head_right_angle, head_left_angle, - mCurAngle.y, lookat_pos); - mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); -} - /* 8095CC8C-8095CC94 004A8C 0008+00 1/0 0/0 0/0 .text drawDbgInfo__10daNpcAsh_cFv */ BOOL daNpcAsh_c::drawDbgInfo() { return false; @@ -1629,10 +1385,8 @@ BOOL daNpcAsh_c::drawDbgInfo() { /* 8095DC04-8095DC24 -00001 0020+00 1/0 0/0 0/0 .data daNpcAsh_MethodTable */ static actor_method_class daNpcAsh_MethodTable = { - (process_method_func)daNpcAsh_Create, - (process_method_func)daNpcAsh_Delete, - (process_method_func)daNpcAsh_Execute, - (process_method_func)daNpcAsh_IsDelete, + (process_method_func)daNpcAsh_Create, (process_method_func)daNpcAsh_Delete, + (process_method_func)daNpcAsh_Execute, (process_method_func)daNpcAsh_IsDelete, (process_method_func)daNpcAsh_Draw, }; diff --git a/src/d/actor/d_a_npc_ashB.cpp b/src/d/actor/d_a_npc_ashB.cpp index 42c62fd7330..6727d71726e 100644 --- a/src/d/actor/d_a_npc_ashB.cpp +++ b/src/d/actor/d_a_npc_ashB.cpp @@ -1,276 +1,85 @@ /** * @file d_a_npc_ashB.cpp - * -*/ + * + */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep -#include "d/actor/d_a_npc_ashB.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" -#include "dol2asm.h" +#include "d/actor/d_a_npc_ashB.h" +/* 809620E4-80962154 000000 0070+00 11/11 0/0 0/0 .rodata m__17daNpcAshB_Param_c */ +const daNpcAshB_HIOParam daNpcAshB_Param_c::m = { + 205.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 400.0f, // real_shadow_size + 255.0f, // weight + 200.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 15.0f, // body_angleY_max + -15.0f, // body_angleY_min + 20.0f, // head_angleX_max + 0.0f, // head_angleX_min + 20.0f, // head_angleY_max + -20.0f, // head_angleY_min + 0.8f, // neck_rotation_ratio + 12.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 80.0f, // fov + 500.0f, // search_distance + 300.0f, // search_height + -300.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON + 400.0f, // field_0x6c +}; -// -// Forward References: -// +#if DEBUG +daNpcAshB_HIO_c::daNpcAshB_HIO_c() { + m = daNpcAshB_Param_c::m; +} -extern "C" void __ct__11daNpcAshB_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__11daNpcAshB_cFv(); -extern "C" void Create__11daNpcAshB_cFv(); -extern "C" void CreateHeap__11daNpcAshB_cFv(); -extern "C" void __dt__15J3DTevKColorAnmFv(); -extern "C" void __ct__15J3DTevKColorAnmFv(); -extern "C" void __dt__14J3DTevColorAnmFv(); -extern "C" void __ct__14J3DTevColorAnmFv(); -extern "C" void __dt__11J3DTexNoAnmFv(); -extern "C" void __ct__11J3DTexNoAnmFv(); -extern "C" void __dt__12J3DTexMtxAnmFv(); -extern "C" void __ct__12J3DTexMtxAnmFv(); -extern "C" void __dt__14J3DMatColorAnmFv(); -extern "C" void __ct__14J3DMatColorAnmFv(); -extern "C" void Delete__11daNpcAshB_cFv(); -extern "C" void Execute__11daNpcAshB_cFv(); -extern "C" void Draw__11daNpcAshB_cFv(); -extern "C" void ctrlJoint__11daNpcAshB_cFP8J3DJointP8J3DModel(); -extern "C" void createHeapCallBack__11daNpcAshB_cFP10fopAc_ac_c(); -// extern "C" void ctrlJointCallBack__11daNpcAshB_cFP8J3DJointi(); -extern "C" void setExpressionAnm__11daNpcAshB_cFib(); -extern "C" void setExpressionBtp__11daNpcAshB_cFi(); -extern "C" void setMotionAnm__11daNpcAshB_cFif(); -extern "C" void reset__11daNpcAshB_cFv(); -extern "C" void setAction__11daNpcAshB_cFM11daNpcAshB_cFPCvPvPv_b(); -extern "C" void wait__11daNpcAshB_cFPv(); -extern "C" void setMotion__11daNpcAshB_cFifi(); -extern "C" void setExpression__11daNpcAshB_cFif(); -extern "C" void talk__11daNpcAshB_cFPv(); -extern "C" void demo__11daNpcAshB_cFPv(); -extern "C" void EvCut_Appear__11daNpcAshB_cFi(); -extern "C" static void daNpcAshB_Create__FPv(); -extern "C" static void daNpcAshB_Delete__FPv(); -extern "C" static void daNpcAshB_Execute__FPv(); -extern "C" static void daNpcAshB_Draw__FPv(); -extern "C" static bool daNpcAshB_IsDelete__FPv(); -extern "C" void calc__11J3DTexNoAnmCFPUs(); -extern "C" void setParam__11daNpcAshB_cFv(); -extern "C" void main__11daNpcAshB_cFv(); -extern "C" void playMotion__11daNpcAshB_cFv(); -extern "C" void ctrlBtk__11daNpcAshB_cFv(); -extern "C" void setAttnPos__11daNpcAshB_cFv(); -extern "C" void lookat__11daNpcAshB_cFv(); -extern "C" void drawOtherMdls__11daNpcAshB_cFv(); -extern "C" bool drawDbgInfo__11daNpcAshB_cFv(); -extern "C" void func_80961800(void* _this, s16); -extern "C" void __sinit_d_a_npc_ashB_cpp(); -extern "C" void __dt__18daNpcF_ActorMngr_cFv(); -extern "C" void __ct__18daNpcF_ActorMngr_cFv(); -extern "C" void __dt__15daNpcF_Lookat_cFv(); -extern "C" void __dt__5csXyzFv(); -extern "C" void __ct__5csXyzFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __dt__8daNpcF_cFv(); -extern "C" void __ct__8daNpcF_cFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" void adjustShapeAngle__8daNpcF_cFv(); -extern "C" void setCollisions__8daNpcF_cFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void __dt__17daNpcAshB_Param_cFv(); -extern "C" static void func_809620C0(); -extern "C" static void func_809620C8(); -extern "C" u8 const m__17daNpcAshB_Param_c[112]; -extern "C" extern char const* const d_a_npc_ashB__stringBase0; -extern "C" u8 mEvtSeqList__11daNpcAshB_c[24]; +void daNpcAshB_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif -// -// External References: -// - -extern "C" void changeBckOnly__13mDoExt_bckAnmFP15J3DAnmTransform(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void modelCalc__16mDoExt_McaMorfSOFv(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_seenActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_searchActorDistanceXZ2__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs(); -extern "C" void fopAcM_createItemForPresentDemo__FPC4cXyziUciiPC5csXyzPC4cXyz(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void reset__14dEvt_control_cFPv(); -extern "C" void setPtI_Id__14dEvt_control_cFUi(); -extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc(); -extern "C" void endCheck__16dEvent_manager_cFs(); -extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -extern "C" void getIsAddvance__16dEvent_manager_cFi(); -extern "C" void getMyNowCutName__16dEvent_manager_cFi(); -extern "C" void cutEnd__16dEvent_manager_cFi(); -extern "C" void getRunEventName__16dEvent_manager_cFv(); -extern "C" void ChkPresentEnd__16dEvent_manager_cFv(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void initialize__18daNpcF_ActorMngr_cFv(); -extern "C" void entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c(); -extern "C" void remove__18daNpcF_ActorMngr_cFv(); -extern "C" void getActorP__18daNpcF_ActorMngr_cFv(); -extern "C" void initialize__15daNpcF_MatAnm_cFv(); -extern "C" void initialize__15daNpcF_Lookat_cFv(); -extern "C" void setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz(); -extern "C" void calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii(); -extern "C" void execute__8daNpcF_cFv(); -extern "C" void draw__8daNpcF_cFiifP11_GXColorS10i(); -extern "C" void setMtx__8daNpcF_cFv(); -extern "C" void setMtx2__8daNpcF_cFv(); -extern "C" void initialize__8daNpcF_cFv(); -extern "C" void getTrnsfrmKeyAnmP__8daNpcF_cFPci(); -extern "C" void getTexPtrnAnmP__8daNpcF_cFPci(); -extern "C" void getTexSRTKeyAnmP__8daNpcF_cFPci(); -extern "C" void setMcaMorfAnm__8daNpcF_cFP18J3DAnmTransformKeyffiii(); -extern "C" void setBckAnm__8daNpcF_cFP15J3DAnmTransformfiiib(); -extern "C" void setBtpAnm__8daNpcF_cFP16J3DAnmTexPatternP12J3DModelDatafi(); -extern "C" void setBtkAnm__8daNpcF_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi(); -extern "C" void setEnvTevColor__8daNpcF_cFv(); -extern "C" void setRoomNo__8daNpcF_cFv(); -extern "C" void playExpressionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData(); -extern "C" void playMotionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData(); -extern "C" void setLookatMtx__8daNpcF_cFiPif(); -extern "C" void ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci(); -extern "C" void orderEvent__8daNpcF_cFiPcUsUsUcUs(); -extern "C" void chkActorInSight__8daNpcF_cFP10fopAc_ac_cf(); -extern "C" void chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci(); -extern "C" void initTalk__8daNpcF_cFiPP10fopAc_ac_c(); -extern "C" void talkProc__8daNpcF_cFPiiPP10fopAc_ac_c(); -extern "C" void turn__8daNpcF_cFsfi(); -extern "C" void getDistTableIdx__8daNpcF_cFii(); -extern "C" void daNpcF_chkEvtBit__FUl(); -extern "C" void daNpcF_offTmpBit__FUl(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void __ct__10dMsgFlow_cFv(); -extern "C" void __dt__10dMsgFlow_cFv(); -extern "C" void getEventId__10dMsgFlow_cFPi(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void __ct__11cBgS_GndChkFv(); -extern "C" void __dt__11cBgS_GndChkFv(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void __dt__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs(); -extern "C" void initialize__14J3DMaterialAnmFv(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" u8 mCcDCyl__8daNpcF_c[68]; -extern "C" extern void* __vt__8daNpcF_c[18]; -extern "C" extern void* __vt__15daNpcF_MatAnm_c[4 + 6 /* padding */]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern void* __vt__14J3DMaterialAnm[4]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +NPC_ASHB_HIO_CLASS l_HIO; /* 80962438-80962534 000020 00FC+00 1/2 0/0 0/0 .data l_bckGetParamList */ static daNpc_GetParam2 l_bckGetParamList[21] = { - {-1, 2, 0}, - {13,0, 0}, - {14, 0, 0}, - {11, 0, 0}, - {10, 0, 0}, - {9, 0, 0}, - {12, 0, 0}, - {24, 2, 0}, - {25, 2, 0}, - {24, 2, 0}, - {21, 0, 0}, - {22, 0, 0}, - {20, 0, 0}, - {23, 0, 0}, - {7, 0, 0}, - {8, 0, 0}, - {18, 0, 0}, - {15, 0, 0}, - {16, 0, 0}, - {17, 2, 0}, - {19, 0, 0}, + {-1, 2, 0}, {13, 0, 0}, {14, 0, 0}, {11, 0, 0}, {10, 0, 0}, {9, 0, 0}, {12, 0, 0}, + {24, 2, 0}, {25, 2, 0}, {24, 2, 0}, {21, 0, 0}, {22, 0, 0}, {20, 0, 0}, {23, 0, 0}, + {7, 0, 0}, {8, 0, 0}, {18, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 2, 0}, {19, 0, 0}, }; -static daNpcAshB_Param_c l_HIO; - /* 80962534-80962564 00011C 0030+00 1/1 0/0 0/0 .data l_btpGetParamList */ static daNpc_GetParam2 l_btpGetParamList[4] = { - {38,2,0}, - {41,0,0}, - {40,0,0}, - {39,0,0}, + {38, 2, 0}, + {41, 0, 0}, + {40, 0, 0}, + {39, 0, 0}, }; /* 80962564-80962594 00014C 0030+00 1/2 0/0 0/0 .data l_btkGetParamList */ static daNpc_GetParam2 l_btkGetParamList[4] = { - {32,2,0}, - {34,0,0}, - {33,0,0}, - {35,0,0}, - + {32, 2, 0}, + {34, 0, 0}, + {33, 0, 0}, + {35, 0, 0}, + }; /* 80962594-80962598 -00001 0004+00 6/8 0/0 0/0 .data l_arcNames */ @@ -280,8 +89,8 @@ static char* l_arcNames[1] = { /* 80962598-809625A0 -00001 0008+00 0/1 0/0 0/0 .data l_evtNames */ static char* l_evtNames[2] = { - "ASHB_APPEAR", - "NO_RESPONSE", + NULL, + "ASHB_APPEAR", }; /* 809625A0-809625A4 -00001 0004+00 0/2 0/0 0/0 .data l_myName */ @@ -290,13 +99,11 @@ static char* l_myName = "AshB"; /* 809625B0-809625C8 000198 0018+00 1/2 0/0 0/0 .data mEvtSeqList__11daNpcAshB_c */ daNpcAshB_c::EventFn daNpcAshB_c::mEvtSeqList[2] = { NULL, - &EvCut_Appear + &EvCut_Appear, }; /* 8095DE4C-8095DFD0 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpcAshB_cFv */ -daNpcAshB_c::daNpcAshB_c() : daNpcF_c() { - // NONMATCHING -} +daNpcAshB_c::daNpcAshB_c() {} /* 8095E060-8095E224 000300 01C4+00 1/0 0/0 0/0 .text __dt__11daNpcAshB_cFv */ daNpcAshB_c::~daNpcAshB_c() { @@ -309,54 +116,18 @@ daNpcAshB_c::~daNpcAshB_c() { } } -/* ############################################################################################## */ -/* 809620E4-80962154 000000 0070+00 11/11 0/0 0/0 .rodata m__17daNpcAshB_Param_c */ -daNpcAshB_Param_c::param const daNpcAshB_Param_c::m = { - 205.0f, - -3.0f, - 1.0f, - 400.0f, - 255.0f, - 200.0f, - 35.0f, - 30.0f, - 0.0f, - 0.0f, - 15.0f, - -15.0f, - 20.0f, - 0.0f, - 20.0f, - -20.0f, - 0.8f, - 12.0f, - 3, - 6, - 5, - 6, - 80.0f, - 500.0f, - 300.0f, - -300.0f, - 60, - 8, - 0, - 0, - 0, - false, - 400.0f, -}; - /* 8095E224-8095E4A0 0004C4 027C+00 1/1 0/0 0/0 .text Create__11daNpcAshB_cFv */ cPhs__Step daNpcAshB_c::Create() { cPhs__Step step; fopAcM_ct(this, daNpcAshB_c); - /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ + /* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */ if (!daNpcF_chkEvtBit(0x169) - /* dSv_event_flag_c::F_0335 - Snowpeak mountain - Obtained scribble from Ashei at mountain pass */ - || daNpcF_chkEvtBit(0x14F)) { + /* dSv_event_flag_c::F_0335 - Snowpeak mountain - Obtained scribble from Ashei at mountain + pass */ + || daNpcF_chkEvtBit(0x14F)) + { return cPhs_ERROR_e; } else { mFlowID = getMessageNo(); @@ -377,13 +148,14 @@ cPhs__Step daNpcAshB_c::Create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 220.0f, 100.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcAshB_Param_c::m.mWallR,daNpcAshB_Param_c::m.mWallH); - mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, - fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, + &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), + fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init((int)daNpcAshB_Param_c::m.mCcWeight, 0, this); + mCcStts.Init((int)mpHIO->m.common.weight, 0, this); mCyl.Set(daNpcF_c::mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); @@ -405,8 +177,8 @@ cPhs__Step daNpcAshB_c::Create() { /* 8095E4A0-8095E758 000740 02B8+00 1/1 0/0 0/0 .text CreateHeap__11daNpcAshB_cFv */ BOOL daNpcAshB_c::CreateHeap() { J3DModelData* modelData = static_cast(dComIfG_getObjectRes(l_arcNames[0], 28)); - mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, - &mCreatureSound, 0x80000, 0x11020284); + mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreatureSound, + 0x80000, 0x11020284); if (mpMorf != NULL && mpMorf->mpModel == NULL) { mpMorf->stopZelAnime(); mpMorf = NULL; @@ -425,7 +197,9 @@ BOOL daNpcAshB_c::CreateHeap() { if (mpMatAnm == NULL) { return false; } else { - mpModel = mDoExt_J3DModel__create(static_cast(dComIfG_getObjectRes(l_arcNames[0], 29)),0x80000,0x11000084); + mpModel = mDoExt_J3DModel__create( + static_cast(dComIfG_getObjectRes(l_arcNames[0], 29)), 0x80000, + 0x11000084); if (mpModel == NULL) { return false; } else { @@ -454,7 +228,7 @@ int daNpcAshB_c::Execute() { /* 8095E96C-8095E9C8 000C0C 005C+00 1/1 0/0 0/0 .text Draw__11daNpcAshB_cFv */ int daNpcAshB_c::Draw() { mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); - draw(false, false, daNpcAshB_Param_c::m.mShadowDepth, NULL, false); + draw(false, false, mpHIO->m.common.real_shadow_size, NULL, false); return 1; } @@ -478,13 +252,13 @@ bool daNpcAshB_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 9: case 10: - setLookatMtx(jointNo, lookatJoints, daNpcAshB_Param_c::m.mNeckAngleScl); + setLookatMtx(jointNo, lookatJoints, mpHIO->m.common.neck_rotation_ratio); break; } i_model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); - + if ((jointNo == 10 || jointNo == 19) && (mAnmFlags & ANM_PLAY_BCK)) { J3DAnmTransform* bckAnm = mBckAnm.getBckAnm(); mBckAnm.changeBckOnly(mpMorf->getAnm()); @@ -521,7 +295,7 @@ inline void daNpcAshB_c::setLookMode(int i_lookMode) { inline BOOL daNpcAshB_c::chkFindPlayer() { BOOL ret; - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcAshB_Param_c::m.mAttnFovY)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); ret = false; } else { @@ -540,35 +314,140 @@ inline BOOL daNpcAshB_c::chkFindPlayer() { } inline void daNpcAshB_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcAshB_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_F_TALK_B, daNpcAshB_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1 = {ANM_F_TALK_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; daNpcF_anmPlayData dat2 = {ANM_F_SILENT, 0.0f, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_F_COOL, daNpcAshB_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3 = {ANM_F_COOL, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_F_ASK, daNpcAshB_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4 = {ANM_F_ASK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_F_EXPLAIN_A, daNpcAshB_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5 = {ANM_F_EXPLAIN_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_NONE, daNpcAshB_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; daNpcF_anmPlayData** ppDat[7] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, - pDat5, - pDat6, + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, }; if (mExpression >= 0 && mExpression < 7) { playExpressionAnm(ppDat); } } +/* 80960D64-80961188 003004 0424+00 1/1 0/0 0/0 .text playMotion__11daNpcAshB_cFv */ +void daNpcAshB_c::playMotion() { + daNpcF_anmPlayData dat0 = {7, mpHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData* pDat0[1] = {&dat0}; + + daNpcF_anmPlayData dat1 = {8, mpHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData* pDat1[1] = {&dat1}; + + daNpcF_anmPlayData dat2a = {0xC, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2b = {0xD, 0.0f, 1}; + daNpcF_anmPlayData dat2c = {8, 0.0f, 0}; + daNpcF_anmPlayData* pDat2[3] = {&dat2a, &dat2b, &dat2c}; + + daNpcF_anmPlayData dat3a = {0xE, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {8, 0.0f, 0}; + daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; + + daNpcF_anmPlayData dat4a = {0xF, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4b = {8, 0.0f, 0}; + daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; + + daNpcF_anmPlayData dat5a = {0x10, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5b = {8, 0.0f, 0}; + daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; + + daNpcF_anmPlayData dat6a = {0x11, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6b = {8, 0.0f, 0}; + daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; + + daNpcF_anmPlayData dat7a = {0x12, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat7b = {0x13, 0.0f, 0}; + daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; + + daNpcF_anmPlayData dat8 = {0x13, mpHIO->m.common.morf_frame, 0}; + daNpcF_anmPlayData* pDat8[1] = {&dat8}; + + daNpcF_anmPlayData dat9a = {0x14, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat9b = {8, 0.0f, 0}; + daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; + + daNpcF_anmPlayData dat10 = {0xA, 4.0f, 1}; + daNpcF_anmPlayData* pDat10[2] = {&dat10, NULL}; + daNpcF_anmPlayData dat11 = {0xB, 4.0f, 1}; + daNpcF_anmPlayData* pDat11[2] = {&dat11, NULL}; + + daNpcF_anmPlayData** ppDat[12] = { + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, pDat11, + }; + if (mMotion >= 0 && mMotion < 12) { + playMotionAnm(ppDat); + } +} + +/* 80961574-80961770 003814 01FC+00 1/1 0/0 0/0 .text lookat__11daNpcAshB_cFv */ +void daNpcAshB_c::lookat() { + fopAc_ac_c* actor = NULL; + J3DModel* model = mpMorf->getModel(); + + BOOL snap = false; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; + + s16 angle_delta = mCurAngle.y - mOldAngle.y; + + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; + + switch (mLookMode) { + case LOOK_NONE: + break; + case LOOK_RESET: + snap = true; + break; + case LOOK_PLAYER: + case LOOK_PLAYER_TALK: + actor = daPy_getPlayerActorClass(); + if (mLookMode != LOOK_PLAYER_TALK) { + break; + } + head_angleY_min = -80.0f; + head_angleY_max = 80.0f; + break; + case LOOK_ACTOR: + actor = daPy_getPlayerActorClass(); + body_angleY_min = 0.0f; + body_angleY_max = 0.0f; + break; + } + + if (actor != NULL) { + mLookPos = actor->attention_info.position; + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { + mLookPos.y -= 40.0f; + } + mLookat.setAttnPos(&mLookPos); + } else { + mLookat.setAttnPos(NULL); + } + + mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, + 0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); +} + /* 8095EC00-8095EE00 000EA0 0200+00 2/0 0/0 0/0 .text setExpressionAnm__11daNpcAshB_cFib */ bool daNpcAshB_c::setExpressionAnm(int i_idx, bool i_modify) { @@ -669,7 +548,7 @@ void daNpcAshB_c::setMotionAnm(int i_idx, f32 i_morf) { iVar5 = 3; break; } - + J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], l_bckGetParamList[i_idx].fileIdx); J3DAnmTextureSRTKey* btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[iVar5].arcIdx], @@ -678,19 +557,18 @@ void daNpcAshB_c::setMotionAnm(int i_idx, f32 i_morf) { int oiVar5 = l_bckGetParamList[i_idx].attr; int iVar4 = l_btkGetParamList[iVar5].attr; - mAnmFlags &= 0xffffffc0; if (i_idx == 12) { bool unused_bool = setExpressionBtp(1); - (void) unused_bool; + (void)unused_bool; } - if (morfAnm && setMcaMorfAnm(morfAnm,1.0f,i_morf,oiVar5,0,-1)) { + if (morfAnm && setMcaMorfAnm(morfAnm, 1.0f, i_morf, oiVar5, 0, -1)) { mAnmFlags |= 9; mMotionLoops = 0; } - if (btkAnm && setBtkAnm(btkAnm,mpMorf->getModel()->getModelData(),1.0,iVar4)) { + if (btkAnm && setBtkAnm(btkAnm, mpMorf->getModel()->getModelData(), 1.0, iVar4)) { mAnmFlags |= 0x12; } } @@ -708,7 +586,6 @@ void daNpcAshB_c::reset() { field_0xddc = 0; field_0xde0 = 0; - mpActionFn = NULL; mLookMode = -1; mMode = 0; @@ -782,7 +659,7 @@ bool daNpcAshB_c::step(s16 i_targetAngle, int param_2, f32 i_rate) { } /* 8095F2C4-8095FC70 001564 09AC+00 4/0 0/0 0/0 .text wait__11daNpcAshB_cFPv */ -// NONMATCHING - float literals, regalloc, wrong variable order loads. the shitty trifecta +// NONMATCHING - regalloc bool daNpcAshB_c::wait(void* param_0) { switch (mMode) { case 0: @@ -797,41 +674,38 @@ bool daNpcAshB_c::wait(void* param_0) { if (field_0xdee != 0) { setLookMode(LOOK_PLAYER); - if (field_0xdea == mCurAngle.y) { - s16 res = cM_deg2s(daNpcAshB_Param_c::m.mBodyLeftAngle + daNpcAshB_Param_c::m.mHeadLeftAngle); + if (mCurAngle.y == field_0xdea) { + s16 res = + cM_deg2s(mpHIO->m.common.body_angleY_max + mpHIO->m.common.head_angleY_max); if (fopAcM_seenPlayerAngleY(this) > res) { field_0xdea = fopAcM_searchPlayerAngleY(this); } - } else { - if (step(mCurAngle.y,1,15.0f)) { - setExpression(EXPR_EXPLAIN_B, -1.0f); - setMotion(MOT_WAIT_A, -1.0f, false); - mTurnMode = 0; - } + } else if (step(mCurAngle.y, 1, 15.0f)) { + setExpression(EXPR_EXPLAIN_B, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + mTurnMode = 0; } - if (fopAcM_searchPlayerDistanceXZ(this) > daNpcAshB_Param_c::m.field_0x6c) { + if (fopAcM_searchPlayerDistanceXZ(this) > mpHIO->m.field_0x6c) { field_0xdee = 0; } - } else { if (mActorMngr[0].getActorP()) { - if (!chkFindPlayer()) - mTurnMode = 0; - } else { - if (chkFindPlayer()) + if (!chkFindPlayer()) { mTurnMode = 0; + } + } else if (chkFindPlayer()) { + mTurnMode = 0; } if (mActorMngr[0].getActorP()) { setLookMode(LOOK_PLAYER); - } else { setLookMode(LOOK_NONE); if (home.angle.y != mCurAngle.y) { - if (step(home.angle.y,1,15.0f)) { + if (step(home.angle.y, 1, 15.0f)) { setExpression(EXPR_EXPLAIN_B, -1.0f); setMotion(MOT_WAIT_A, -1.0f, false); mTurnMode = 0; @@ -839,9 +713,9 @@ bool daNpcAshB_c::wait(void* param_0) { } } } - /* dSv_event_flag_c::F_0335 - Snowpeak mountain - Obtained scribble from Ashei at mountain pass */ - if (!daNpcF_chkEvtBit(0x14F) - && field_0xded == 0 && !daPy_py_c::checkNowWolf()) { + /* dSv_event_flag_c::F_0335 - Snowpeak mountain - Obtained scribble from Ashei at mountain + * pass */ + if (!daNpcF_chkEvtBit(0x14F) && field_0xded == 0 && !daPy_py_c::checkNowWolf()) { f32 res = pow(600.0f, 2.0f); if (fopAcM_searchPlayerDistanceXZ2(this) <= res) { daNpcF_offTmpBit(0xb); @@ -860,22 +734,21 @@ bool daNpcAshB_c::wait(void* param_0) { u8 preitemno = dComIfGp_event_getPreItemNo(); if (preitemno == fpcNm_ITEM_ASHS_SCRIBBLING) { mFlowID = 504; - setAction(&wait); + setAction(&talk); } else { - s16 evt_idx = dComIfGp_getEventManager().getEventIdx(this,"NO_RESPONSE",0xff); + s16 evt_idx = + dComIfGp_getEventManager().getEventIdx(this, "NO_RESPONSE", 0xff); dComIfGp_getEvent().reset(this); fopAcM_orderChangeEventId(this, evt_idx, 1, -1); - } } - } else { - setAction(&wait); + setAction(&talk); } } else { int mystaffid = dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0); if (mystaffid != -1) { - setAction(&wait); + setAction(&demo); } } } else { @@ -883,13 +756,13 @@ bool daNpcAshB_c::wait(void* param_0) { eventInfo.setArchiveName(l_arcNames[0]); } - orderEvent(field_0xdec,l_evtNames[mOrderEvtNo*1],-1, 40, -1, 1); + orderEvent(field_0xdec, l_evtNames[mOrderEvtNo * 1], -1, 40, -1, 1); - /* dSv_event_flag_c::F_0335 - Snowpeak mountain - Obtained scribble from Ashei at mountain pass */ + /* dSv_event_flag_c::F_0335 - Snowpeak mountain - Obtained scribble from Ashei at + * mountain pass */ if (daNpcF_chkEvtBit(0x14F)) { eventInfo.onCondition(0x20); } - } break; case 3: @@ -922,7 +795,6 @@ void daNpcAshB_c::setMotion(int i_motion, f32 i_morf, BOOL i_restart) { if (field_0xded != 0) motion = 10; break; - } if (i_restart || mMotion != motion) { @@ -947,7 +819,7 @@ void daNpcAshB_c::setExpression(int i_expression, f32 i_morf) { i_expression = 0; break; } - + if (i_expression >= 0 && i_expression < 7) { mExpression = i_expression; mExpressionMorfOverride = i_morf; @@ -955,8 +827,8 @@ void daNpcAshB_c::setExpression(int i_expression, f32 i_morf) { mExpressionPhase = 0; } } + /* 8095FD9C-809602E0 00203C 0544+00 2/0 0/0 0/0 .text talk__11daNpcAshB_cFPv */ -// NONMATCHING float literals bool daNpcAshB_c::talk(void* param_0) { bool ret = false; @@ -977,9 +849,11 @@ bool daNpcAshB_c::talk(void* param_0) { mActorMngr[0].entry(daPy_getPlayerActorClass()); int evt_id = 0; if (mFlow.getEventId(&evt_id) == 1) { - mItemPartnerId = fopAcM_createItemForPresentDemo(¤t.pos,evt_id,0,-1,-1,0,0); + mItemPartnerId = + fopAcM_createItemForPresentDemo(¤t.pos, evt_id, 0, -1, -1, 0, 0); if (mItemPartnerId != 0xffffffff) { - s16 evt_idx = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xff); + s16 evt_idx = + dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xff); dComIfGp_getEvent().reset(this); fopAcM_orderChangeEventId(this, evt_idx, 1, -1); field_0x9ec = 1; @@ -988,7 +862,7 @@ bool daNpcAshB_c::talk(void* param_0) { } else { setAction(&wait); } - + ret = true; } else { s32 prev_msg_timer = mMsgTimer; @@ -1010,7 +884,7 @@ bool daNpcAshB_c::talk(void* param_0) { mTurnMode = 0; } } - + if (ret) { mFlowID = getMessageNo(); } @@ -1018,7 +892,7 @@ bool daNpcAshB_c::talk(void* param_0) { case 3: setExpression(EXPR_EXPLAIN_B, -1.0f); if (!field_0x9ec) { - dComIfGp_event_reset(); + dComIfGp_event_reset(); } field_0x9ec = false; @@ -1031,7 +905,7 @@ bool daNpcAshB_c::talk(void* param_0) { /* 809602E0-809604C8 002580 01E8+00 1/0 0/0 0/0 .text demo__11daNpcAshB_cFPv */ // NONMATCHING - extra instruction at dComIfGp_event_runCheck() causing regalloc issues? bool daNpcAshB_c::demo(void* param_0) { - dEvent_manager_c& eventManager = dComIfGp_getEventManager(); + dEvent_manager_c& evtmgr = dComIfGp_getEventManager(); switch (mMode) { case 0: @@ -1041,25 +915,24 @@ bool daNpcAshB_c::demo(void* param_0) { // fallthrough case 2: - if (dComIfGp_event_runCheck()) { - if (!eventInfo.checkCommandTalk()) { - s32 staff_id = eventManager.getMyStaffId(l_myName, NULL, 0); - if (staff_id != -1) { - mStaffID = staff_id; - if ((this->*(mEvtSeqList[mOrderEvtNo]))(staff_id)) { - eventManager.cutEnd(staff_id); - } - } - - if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) { - dComIfGp_event_reset(); - mOrderEvtNo = 0; - mEventIdx = -1; - setAction(&wait); + if (dComIfGp_event_runCheck() != 0 && !eventInfo.checkCommandTalk()) { + s32 staff_id = evtmgr.getMyStaffId(l_myName, NULL, 0); + if (staff_id != -1) { + mStaffID = staff_id; + if ((this->*(mEvtSeqList[mOrderEvtNo]))(staff_id)) { + evtmgr.cutEnd(staff_id); } } + + if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && evtmgr.endCheck(mEventIdx)) + { + dComIfGp_event_reset(); + mOrderEvtNo = 0; + mEventIdx = -1; + setAction(&wait); + } } - + break; case 3: @@ -1070,7 +943,6 @@ bool daNpcAshB_c::demo(void* param_0) { } /* 809604C8-809609A8 002768 04E0+00 3/0 0/0 0/0 .text EvCut_Appear__11daNpcAshB_cFi */ -// NONMATCHING literals BOOL daNpcAshB_c::EvCut_Appear(int i_staffID) { int local_30[2]; dEvent_manager_c& evtMgr = dComIfGp_getEventManager(); @@ -1078,29 +950,31 @@ BOOL daNpcAshB_c::EvCut_Appear(int i_staffID) { if (evtMgr.getIsAddvance(i_staffID)) { switch (*cut_name) { - // '0001', '0003', etc. wouldn't match? - case 0x30303031: + case '0001': + break; + case '0002': setLookMode(LOOK_ACTOR); break; - case 0x30303033: + case '0003': setLookMode(LOOK_PLAYER); mTurnMode = 0; break; - case 0x30303034: - case 0x30303036: - case 0x30303037: - case 0x30303039: + case '0004': + case '0006': + case '0007': + case '0009': initTalk(mFlowID, NULL); break; - case 0x30303035: - setExpression(6,6.0f); - setMotion(2, 2.0f, false); + case '0005': + setExpression(6, 0.0f); + setMotion(2, -1.0f, false); mMsgTimer = 0; break; - case 0x30303038: + case '0008': local_30[0] = 0; if (mFlow.getEventId(local_30) == 1) { - mItemPartnerId = fopAcM_createItemForPresentDemo(¤t.pos,local_30[0], 0, -1, -1, 0, 0); + mItemPartnerId = + fopAcM_createItemForPresentDemo(¤t.pos, local_30[0], 0, -1, -1, 0, 0); dComIfGp_event_setItemPartnerId(mItemPartnerId); mItemPartnerId = -1; } @@ -1109,42 +983,42 @@ BOOL daNpcAshB_c::EvCut_Appear(int i_staffID) { } switch (*cut_name) { - case 0x30303031: - case 0x30303032: + case '0001': + case '0002': return TRUE; - case 0x30303033: - if (step(fopAcM_searchPlayerAngleY(this), 1, 20.0f) != 0) { - setLookMode(2); - setMotion(0, -1.0f, 0); - mTurnMode = 0; - return TRUE; - } - break; - case 0x30303034: - case 0x30303036: - case 0x30303037: - case 0x30303039: - if (talkProc(NULL, TRUE, NULL)) { - return TRUE; - } - break; - case 0x30303035: - if (mMotionPhase > 1) { - mpMorf->getModel()->getModelData()->getMaterialNodePointer(4)->getShape()->hide(); - return TRUE; - } - - if (mMotionPhase == 1) { - setExpression(6,0.0f); - f32 subtract = mpMorf->getEndFrame() - 1.0f; - if (mpMorf->getFrame() > subtract) { - field_0xded = 1; - } - } - break; - case 0x30303038: - field_0x9eb = true; + case '0003': + if (step(fopAcM_searchPlayerAngleY(this), 1, 20.0f) != 0) { + setLookMode(2); + setMotion(0, -1.0f, 0); + mTurnMode = 0; return TRUE; + } + break; + case '0004': + case '0006': + case '0007': + case '0009': + if (talkProc(NULL, TRUE, NULL)) { + return TRUE; + } + break; + case '0005': + if (mMotionPhase > 1) { + mpMorf->getModel()->getModelData()->getMaterialNodePointer(4)->getShape()->hide(); + return TRUE; + } + + if (mMotionPhase == 1) { + setExpression(6, 0.0f); + f32 subtract = mpMorf->getEndFrame() - 1.0f; + if (mpMorf->getFrame() > subtract) { + field_0xded = 1; + } + } + break; + case '0008': + field_0x9eb = true; + return TRUE; } int timer = mMsgTimer; @@ -1192,18 +1066,24 @@ static bool daNpcAshB_IsDelete(void* param_0) { /* 80960A60-80960AE8 002D00 0088+00 1/0 0/0 0/0 .text setParam__11daNpcAshB_cFv */ void daNpcAshB_c::setParam() { - attention_info.flags = daPy_py_c::checkNowWolf() ? 0 : (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - attention_info.distances[0] = getDistTableIdx(daNpcAshB_Param_c::m.mTalkDistIdx,daNpcAshB_Param_c::m.mTalkAngleIdx); + attention_info.flags = + daPy_py_c::checkNowWolf() ? 0 : (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); + attention_info.distances[0] = + getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = getDistTableIdx(daNpcAshB_Param_c::m.mSpeakDistIdx,daNpcAshB_Param_c::m.mSpeakAngleIdx); + attention_info.distances[3] = + getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); } /* 80960AE8-80960D64 002D88 027C+00 1/0 0/0 0/0 .text main__11daNpcAshB_cFv */ BOOL daNpcAshB_c::main() { - if (mpActionFn != NULL) + if (mpActionFn != NULL) { (this->*mpActionFn)(NULL); + } - if (mItemPartnerId != -1 && dComIfGp_event_runCheck() != 0 && !strcmp(dComIfGp_getEventManager().getRunEventName(), "DEFAULT_GETITEM")) { + if (mItemPartnerId != -1 && dComIfGp_event_runCheck() != 0 && + !strcmp(dComIfGp_getEventManager().getRunEventName(), "DEFAULT_GETITEM")) + { dComIfGp_event_setItemPartnerId(mItemPartnerId); mItemPartnerId = -1; } @@ -1213,77 +1093,12 @@ BOOL daNpcAshB_c::main() { return true; } -/* 80960D64-80961188 003004 0424+00 1/1 0/0 0/0 .text playMotion__11daNpcAshB_cFv */ -// NONMATCHING - no clue -void daNpcAshB_c::playMotion() { - daNpcF_anmPlayData dat0 = {7, daNpcAshB_Param_c::m.mMorfFrames, 0}; - daNpcF_anmPlayData* pDat0[1] = {&dat0}; - - daNpcF_anmPlayData dat1 = {8, daNpcAshB_Param_c::m.mMorfFrames, 0}; - daNpcF_anmPlayData* pDat1[1] = {&dat1}; - - daNpcF_anmPlayData dat2a = {0xC, daNpcAshB_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat2b = {0xD, 0.0f, 1}; - daNpcF_anmPlayData dat2c = {8, 0.0f, 0}; - daNpcF_anmPlayData* pDat2[3] = {&dat2a, &dat2b, &dat2c}; - - daNpcF_anmPlayData dat3a = {0xE, daNpcAshB_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat3b = {8, 0.0f, 0}; - daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - - daNpcF_anmPlayData dat4a = {0xF, daNpcAshB_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat4b = {8, 0.0f, 0}; - daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - - daNpcF_anmPlayData dat5a = {0x10, daNpcAshB_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat5b = {8, 0.0f, 0}; - daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - - daNpcF_anmPlayData dat6a = {0x11, daNpcAshB_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat6b = {8, 0.0f, 0}; - daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - - daNpcF_anmPlayData dat7a = {0x12, daNpcAshB_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat7b = {0x13, 0.0f, 0}; - daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; - - daNpcF_anmPlayData dat8 = {0x13, daNpcAshB_Param_c::m.mMorfFrames, 0}; - daNpcF_anmPlayData* pDat8[1] = {&dat8}; - - daNpcF_anmPlayData dat9a = {0x14, daNpcAshB_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat9b = {8, 0.0f, 0}; - daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - - daNpcF_anmPlayData dat10 = {0xA, 4.0f, 1}; - daNpcF_anmPlayData* pDat10[2] = {&dat10, NULL}; - daNpcF_anmPlayData dat11 = {0xB, 4.0f, 1}; - daNpcF_anmPlayData* pDat11[2] = {&dat11, NULL}; - - daNpcF_anmPlayData** ppDat[12] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, - pDat5, - pDat6, - pDat7, - pDat8, - pDat9, - pDat10, - pDat11, - }; - if (mMotion >= 0 && mMotion < 12) { - playMotionAnm(ppDat); - } -} - /* 80961188-80961264 003428 00DC+00 1/0 0/0 0/0 .text ctrlBtk__11daNpcAshB_cFv */ -// NONMATCHING inlining issues BOOL daNpcAshB_c::ctrlBtk() { if (mpMatAnm != NULL) { J3DAnmTextureSRTKey* btkAnm = NULL; - btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx],l_btkGetParamList[0].fileIdx); + btkAnm = + getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx); if (btkAnm == mBtkAnm.getBtkAnm()) { mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f * -1.0f); @@ -1297,10 +1112,9 @@ BOOL daNpcAshB_c::ctrlBtk() { } /* 80961264-80961574 003504 0310+00 1/0 0/0 0/0 .text setAttnPos__11daNpcAshB_cFv */ -// float literals void daNpcAshB_c::setAttnPos() { if (mLookMode == 1) { - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 3; i++) { mLookatAngle[i].setall(0); } } @@ -1308,16 +1122,15 @@ void daNpcAshB_c::setAttnPos() { setMtx(); lookat(); - cXyz vec(10.0f,10.0f,0.0f); + cXyz vec(10.0f, 10.0f, 0.0f); mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(10)); mDoMtx_stack_c::multVecZero(&mHeadPos); mDoMtx_stack_c::multVec(&vec, &eyePos); vec.x = 0.0f; mDoMtx_stack_c::multVec(&vec, &vec); - - mHeadAngle.x = cLib_targetAngleX(&mHeadPos,&vec); - mHeadAngle.y = cLib_targetAngleY(&mHeadPos,&vec); + mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &vec); + mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &vec); cXyz* attnPos = mLookat.getAttnPos(); if (attnPos != NULL) { @@ -1325,82 +1138,21 @@ void daNpcAshB_c::setAttnPos() { mEyeAngle.y = -(mLookatAngle[2].y + mCurAngle.y); mEyeAngle.y += cM_atan2s(local_48.x, local_48.z); mEyeAngle.x = mHeadAngle.x - cM_atan2s(local_48.y, local_48.absXZ()); - // mEyeAngle.x += mHeadAngle.x; } else { mEyeAngle.y = 0; mEyeAngle.x = 0; } - attention_info.position.set(current.pos.x, - current.pos.y + daNpcAshB_Param_c::m.mAttnOffsetY, + attention_info.position.set(current.pos.x, current.pos.y + mpHIO->m.common.attention_offset, current.pos.z); mCyl.SetC(current.pos); - mCyl.SetH(daNpcAshB_Param_c::m.mCylH); - mCyl.SetR(daNpcAshB_Param_c::m.mWallR); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); dComIfG_Ccsp()->Set(&mCyl); } -/* 80961574-80961770 003814 01FC+00 1/1 0/0 0/0 .text lookat__11daNpcAshB_cFv */ -// NONMATCHING literal issues -void daNpcAshB_c::lookat() { - fopAc_ac_c* actor = NULL; - J3DModel* model = mpMorf->getModel(); - BOOL snap = false; - f32 body_down_angle = daNpcAshB_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpcAshB_Param_c::m.mBodyUpAngle; - f32 body_right_angle = daNpcAshB_Param_c::m.mBodyRightAngle; - f32 body_left_angle = daNpcAshB_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpcAshB_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpcAshB_Param_c::m.mHeadUpAngle; - f32 head_right_angle = daNpcAshB_Param_c::m.mHeadRightAngle; - f32 head_left_angle = daNpcAshB_Param_c::m.mHeadLeftAngle; - - s16 angle_delta = mCurAngle.y - mOldAngle.y; - - cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; - csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; - - switch (mLookMode) { - case LOOK_NONE: - break; - case LOOK_RESET: - snap = true; - break; - case LOOK_PLAYER: - case LOOK_PLAYER_TALK: - actor = daPy_getPlayerActorClass(); - if (mLookMode != LOOK_PLAYER_TALK) { - break; - } - head_right_angle = -80.0f; - head_left_angle = 80.0f; - break; - case LOOK_ACTOR: - actor = daPy_getPlayerActorClass(); - body_right_angle = 0.0f; - body_left_angle = 0.0f; - break; - } - - if (actor != NULL) { - mLookPos = actor->attention_info.position; - if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { - mLookPos.y -= 40.0f; - } - mLookat.setAttnPos(&mLookPos); - } else { - mLookat.setAttnPos(NULL); - } - - mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, - 0.0f, 0.0f, 0.0f, 0.0f, - head_down_angle, head_up_angle, head_right_angle, head_left_angle, - mCurAngle.y, lookat_pos); - mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); -} - /* 80961770-809617F8 003A10 0088+00 1/0 0/0 0/0 .text drawOtherMdls__11daNpcAshB_cFv */ void daNpcAshB_c::drawOtherMdls() { if (field_0xded != 0) { @@ -1420,27 +1172,25 @@ BOOL daNpcAshB_c::drawDbgInfo() { /* 80962680-809626A0 -00001 0020+00 1/0 0/0 0/0 .data daNpcAshB_MethodTable */ static actor_method_class daNpcAshB_MethodTable = { - (process_method_func)daNpcAshB_Create, - (process_method_func)daNpcAshB_Delete, - (process_method_func)daNpcAshB_Execute, - (process_method_func)daNpcAshB_IsDelete, + (process_method_func)daNpcAshB_Create, (process_method_func)daNpcAshB_Delete, + (process_method_func)daNpcAshB_Execute, (process_method_func)daNpcAshB_IsDelete, (process_method_func)daNpcAshB_Draw, }; /* 809626A0-809626D0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_ASHB */ extern actor_process_profile_definition g_profile_NPC_ASHB = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_NPC_ASHB, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daNpcAshB_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 412, // mPriority - &daNpcAshB_MethodTable, // sub_method - 0x00040100, // mStatus - fopAc_NPC_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_NPC_ASHB, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daNpcAshB_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 412, // mPriority + &daNpcAshB_MethodTable, // sub_method + 0x00040100, // mStatus + fopAc_NPC_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; diff --git a/src/d/actor/d_a_npc_impal.cpp b/src/d/actor/d_a_npc_impal.cpp index 9e4a0f25509..c5259a4be7f 100644 --- a/src/d/actor/d_a_npc_impal.cpp +++ b/src/d/actor/d_a_npc_impal.cpp @@ -1,13 +1,61 @@ /** -* @file d_a_npc_impal.cpp + * @file d_a_npc_impal.cpp * */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_impal.h" -static daNpcImpal_Param_c l_HIO; +/* 80A0C270-80A0C2E0 000000 0070+00 12/12 0/0 0/0 .rodata m__18daNpcImpal_Param_c */ +daNpcImpal_HIOParam const daNpcImpal_Param_c::m = { + 135.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 560.0f, // real_shadow_size + 255.0f, // weight + 130.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 10.0f, // body_angleY_max + -10.0f, // body_angleY_min + 30.0f, // head_angleX_max + -10.0f, // head_angleX_min + 45.0f, // head_angleY_max + -45.0f, // head_angleY_min + 0.600000024f, // neck_rotation_ratio + 20.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 80.0f, // fov + 500.0f, // search_distance + 300.0f, // search_height + -300.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON + 300.0f, // field_0x6c +}; + +#if DEBUG +daNpcImpal_HIO_c::daNpcImpal_HIO_c() { + m = daNpcImpal_Param_c::m; +} + +void daNpcImpal_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif + +NPC_IMPAL_HIO_CLASS l_HIO; /* 80A0C544-80A0C61C 000020 00D8+00 1/2 0/0 0/0 .data l_bckGetParamList */ static daNpc_GetParam2 l_bckGetParamList[18] = { @@ -56,9 +104,7 @@ daNpcImpal_c::EventFn daNpcImpal_c::mEvtSeqList[4] = { }; /* 80A079EC-80A07B70 0000EC 0184+00 1/1 0/0 0/0 .text __ct__12daNpcImpal_cFv */ -daNpcImpal_c::daNpcImpal_c() { - // NONMATCHING -} +daNpcImpal_c::daNpcImpal_c() {} /* 80A07C00-80A07DC4 000300 01C4+00 1/0 0/0 0/0 .text __dt__12daNpcImpal_cFv */ daNpcImpal_c::~daNpcImpal_c() { @@ -71,43 +117,6 @@ daNpcImpal_c::~daNpcImpal_c() { } } -/* 80A0C270-80A0C2E0 000000 0070+00 12/12 0/0 0/0 .rodata m__18daNpcImpal_Param_c */ -daNpc_Impal_HIOParam const daNpcImpal_Param_c::m = { - 135.0f, // mAttnOffsetY - -3.0f, // mGravity - 1.0f, // mScale - 560.0f, // mShadowDepth - 255.0f, // mCcWeight - 130.0f, // mCylH - 35.0f, // mWallH - 30.0f, // mWallR - 0.0f, // mBodyUpAngle - 0.0f, // mBodyDownAngle - 10.0f, // mBodyLeftAngle - -10.0f, // mBodyRightAngle - 30.0f, // mHeadUpAngle - -10.0f, // mHeadDownAngle - 45.0f, // mHeadLeftAngle - -45.0f, // mHeadRightAngle - 0.600000024f, // mNeckAngleScl - 20.0f, // mMorfFrames - 3, // mSpeakDistIdx - 6, // mSpeakAngleIdx - 5, // mTalkDistIdx - 6, // mTalkAngleIdx - 80.0f, // mAttnFovY - 500.0f, // mAttnRadius - 300.0f, // mAttnUpperY - -300.0f, // mAttnLowerY - 60, // field_0x60 - 8, // mDamageTimer - 0, // mTestExpression - 0, // mTestMotion - 0, // mTestLookMode - false, // mTest - 300.0f, // field_0x6c -}; - /* 80A07DC4-80A080F8 0004C4 0334+00 1/1 0/0 0/0 .text Create__12daNpcImpal_cFv */ int daNpcImpal_c::Create() { int phase; @@ -139,13 +148,13 @@ int daNpcImpal_c::Create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -160.0f, -50.0f, -160.0f, 160.0f, 220.0f, 160.0f); mCreatureSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcImpal_Param_c::m.mWallR, daNpcImpal_Param_c::m.mWallH); + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init((int)daNpcImpal_Param_c::m.mCcWeight, 0, this); + mCcStts.Init((int)mpHIO->m.common.weight, 0, this); mCyl.Set(daNpcF_c::mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgType(0); @@ -222,7 +231,7 @@ int daNpcImpal_c::Draw() { } mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); - draw(false, false, daNpcImpal_Param_c::m.mShadowDepth, NULL, false); + draw(false, false, mpHIO->m.common.real_shadow_size, NULL, false); return 1; } @@ -247,7 +256,7 @@ bool daNpcImpal_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(jointNo, lookatJoints, daNpcImpal_Param_c::m.mNeckAngleScl); + setLookatMtx(jointNo, lookatJoints, mpHIO->m.common.neck_rotation_ratio); break; } @@ -314,21 +323,21 @@ s16 daNpcImpal_c::step(s16 i_angle, int i_animate) { } void daNpcImpal_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_1, daNpcImpal_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat0 = {ANM_1, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {ANM_5, daNpcImpal_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat1 = {ANM_5, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {ANM_4, daNpcImpal_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat2 = {ANM_4, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {ANM_6, daNpcImpal_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat3 = {ANM_6, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {ANM_8, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4 = {ANM_8, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {ANM_7, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5 = {ANM_7, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {ANM_9, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6 = {ANM_9, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {ANM_0, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat7 = {ANM_0, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; daNpcF_anmPlayData** ppDat[8] = { @@ -340,21 +349,21 @@ void daNpcImpal_c::playExpression() { } void daNpcImpal_c::playMotion() { - daNpcF_anmPlayData dat0 = {0xA, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {0xA, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {0xD, daNpcImpal_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat1b = {0xB, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1a = {0xD, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {0xB, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {0xB, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2 = {0xB, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {0xC, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3 = {0xC, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4a = {0xE, daNpcImpal_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat4b = {0xA, daNpcImpal_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4a = {0xE, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat4b = {0xA, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; daNpcF_anmPlayData dat5a = {0x10, 0.0f, 1}; @@ -459,7 +468,8 @@ bool daNpcImpal_c::setExpressionAnm(int i_idx, bool i_modify) { return false; } -/* 80A08A68-80A08B48 001168 00E0+00 1/0 0/0 0/0 .text setExpressionBtp__12daNpcImpal_cFi */ +/* 80A08A68-80A08B48 001168 00E0+00 1/0 0/0 0/0 .text setExpressionBtp__12daNpcImpal_cFi + */ bool daNpcImpal_c::setExpressionBtp(int i_idx) { J3DAnmTexPattern* btpAnm = getTexPtrnAnmP(l_arcNames[l_btpGetParamList[i_idx].arcIdx], l_btpGetParamList[i_idx].fileIdx); @@ -583,25 +593,57 @@ bool daNpcImpal_c::setAction(daNpcImpal_c::actionFunc i_actionFn) { return true; } -static u8 const lit_4589[12 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; +/* 80A0B76C-80A0B94C 003E6C 01E0+00 1/1 0/0 0/0 .text lookat__12daNpcImpal_cFv */ +void daNpcImpal_c::lookat() { + fopAc_ac_c* actor = NULL; + J3DModel* model = mpMorf->getModel(); + BOOL snap = false; + + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; + + s16 angle_delta = mCurAngle.y - mOldAngle.y; + + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; + + switch (mLookMode) { + case LOOK_NONE: + break; + case LOOK_RESET: + snap = true; + break; + case LOOK_PLAYER: + case LOOK_PLAYER_TALK: + actor = daPy_getPlayerActorClass(); + if (mLookMode == LOOK_PLAYER_TALK) { + head_angleY_min = -80.0f; + head_angleY_max = 80.0f; + } + break; + } + + if (actor != NULL) { + mLookPos = actor->attention_info.position; + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { + mLookPos.y -= 40.0f; + } + mLookat.setAttnPos(&mLookPos); + } else { + mLookat.setAttnPos(NULL); + } + + mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, + 0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); +} /* 80A08F60-80A090E8 001660 0188+00 1/1 0/0 0/0 .text s_sub1__FPvPv */ static void* s_sub1(void* i_actor, void* i_data) { @@ -616,7 +658,7 @@ static void* s_sub1(void* i_actor, void* i_data) { BOOL daNpcImpal_c::chkFindPlayer() { BOOL ret; - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcImpal_Param_c::m.mAttnFovY)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); ret = false; } else { @@ -1111,10 +1153,10 @@ static int daNpcImpal_IsDelete(void* i_this) { /* 80A0ADF8-80A0AEA8 0034F8 00B0+00 1/0 0/0 0/0 .text setParam__12daNpcImpal_cFv */ void daNpcImpal_c::setParam() { attention_info.distances[0] = - getDistTableIdx(daNpcImpal_Param_c::m.mTalkDistIdx, daNpcImpal_Param_c::m.mTalkAngleIdx); + getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[1] = attention_info.distances[0]; attention_info.distances[3] = - getDistTableIdx(daNpcImpal_Param_c::m.mSpeakDistIdx, daNpcImpal_Param_c::m.mSpeakAngleIdx); + getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); if (field_0xde9) { attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; @@ -1122,10 +1164,10 @@ void daNpcImpal_c::setParam() { attention_info.flags = 0; } - mAcchCir.SetWallR(daNpcImpal_Param_c::m.mWallR); - mAcchCir.SetWallH(daNpcImpal_Param_c::m.mWallH); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); - gravity = daNpcImpal_Param_c::m.mGravity; + gravity = mpHIO->m.common.gravity; } /* 80A0AEA8-80A0B380 0035A8 04D8+00 1/0 0/0 0/0 .text main__12daNpcImpal_cFv */ @@ -1198,70 +1240,17 @@ void daNpcImpal_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(current.pos.x, current.pos.y + daNpcImpal_Param_c::m.mAttnOffsetY, + attention_info.position.set(current.pos.x, current.pos.y + mpHIO->m.common.attention_offset, current.pos.z); if (field_0xde9) { mCyl.SetC(current.pos); - mCyl.SetH(daNpcImpal_Param_c::m.mCylH); - mCyl.SetR(daNpcImpal_Param_c::m.mWallR); + mCyl.SetH(mpHIO->m.common.height); + mCyl.SetR(mpHIO->m.common.width); dComIfG_Ccsp()->Set(&mCyl); } } -/* 80A0B76C-80A0B94C 003E6C 01E0+00 1/1 0/0 0/0 .text lookat__12daNpcImpal_cFv */ -// Nonmatching - lookat_angle causing issues with literals -void daNpcImpal_c::lookat() { - fopAc_ac_c* actor = NULL; - J3DModel* model = mpMorf->getModel(); - BOOL snap = false; - - f32 body_down_angle = daNpcImpal_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpcImpal_Param_c::m.mBodyUpAngle; - f32 body_right_angle = daNpcImpal_Param_c::m.mBodyRightAngle; - f32 body_left_angle = daNpcImpal_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpcImpal_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpcImpal_Param_c::m.mHeadUpAngle; - f32 head_right_angle = daNpcImpal_Param_c::m.mHeadRightAngle; - f32 head_left_angle = daNpcImpal_Param_c::m.mHeadLeftAngle; - - s16 angle_delta = mCurAngle.y - mOldAngle.y; - - cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; - csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; - - switch (mLookMode) { - case LOOK_NONE: - break; - case LOOK_RESET: - snap = true; - break; - case LOOK_PLAYER: - case LOOK_PLAYER_TALK: - actor = daPy_getPlayerActorClass(); - if (mLookMode == LOOK_PLAYER_TALK) { - head_right_angle = -80.0f; - head_left_angle = 80.0f; - } - break; - } - - if (actor != NULL) { - mLookPos = actor->attention_info.position; - if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { - mLookPos.y -= 40.0f; - } - mLookat.setAttnPos(&mLookPos); - } else { - mLookat.setAttnPos(NULL); - } - - mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, 0.0f, 0.0f, - 0.0f, 0.0f, head_down_angle, head_up_angle, head_right_angle, head_left_angle, - mCurAngle.y, lookat_pos); - mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); -} - /* 80A0B94C-80A0B954 00404C 0008+00 1/0 0/0 0/0 .text drawDbgInfo__12daNpcImpal_cFv */ BOOL daNpcImpal_c::drawDbgInfo() { return FALSE; diff --git a/src/d/actor/d_a_npc_lud.cpp b/src/d/actor/d_a_npc_lud.cpp index 00b8ce35938..b8197f08dce 100644 --- a/src/d/actor/d_a_npc_lud.cpp +++ b/src/d/actor/d_a_npc_lud.cpp @@ -1,13 +1,73 @@ /** * @file d_a_npc_lud.cpp * -*/ + */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_len.h" #include "d/actor/d_a_npc_lud.h" +/* 80A6FD7C-80A6FE0C 000000 0090+00 10/10 0/0 0/0 .rodata m__17daNpc_Lud_Param_c */ +const daNpc_Lud_HIOParam daNpc_Lud_Param_c::m = { + 160.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 400.0f, // real_shadow_size + 255.0f, // weight + 150.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 30.0f, // body_angleY_max + -30.0f, // body_angleY_min + 30.0f, // head_angleX_max + -10.0f, // head_angleX_min + 45.0f, // head_angleY_max + -45.0f, // head_angleY_min + 0.6f, // neck_rotation_ratio + 12.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 110.0f, // fov + 0.0f, // search_distance + 0.0f, // search_height + 0.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON + 4.0f, // expression_morf_frame + -15.0f, // box_min_x + 0.0f, // box_min_y + -15.0f, // box_min_z + 15.0f, // box_max_x + 40.0f, // box_max_y + 15.0f, // box_max_z + 90.0f, // box_offset + 1.0f, // play_speed +}; + +#if DEBUG +daNpc_Lud_HIO_c::daNpc_Lud_HIO_c() { + m = daNpc_Lud_Param_c::m; +} + +void daNpc_Lud_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // TODO +} + +void daNpc_Lud_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif + enum Type { /* 0x0 */ TYPE_0, /* 0x1 */ TYPE_1, @@ -200,14 +260,6 @@ daNpc_Lud_c::~daNpc_Lud_c() { deleteRes(l_loadResPtrnList[mType], (const char**)l_resNameList); } -/* 80A6FD7C-80A6FE0C 000000 0090+00 10/10 0/0 0/0 .rodata m__17daNpc_Lud_Param_c */ -const daNpc_Lud_HIOParam daNpc_Lud_Param_c::m = { - 160.0f, -3.0f, 1.0f, 400.0f, 255.0f, 150.0f, 35.0f, 30.0f, 0.0f, 0.0f, 30.0f, - -30.0f, 30.0f, -10.0f, 45.0f, -45.0f, 0.6f, 12.0f, 3, 6, 5, 6, - 110.0f, 0.0f, 0.0f, 0.0f, 60, 8, 0, 0, 0, 0, 0, - 4.0f, -15.0f, 0.0f, -15.0f, 15.0f, 40.0f, 15.0f, 90.0f, 1.0f, -}; - /* 80A6ACF4-80A6AFA8 000234 02B4+00 1/1 0/0 0/0 .text create__11daNpc_Lud_cFv */ int daNpc_Lud_c::create() { static int const heapSize[9] = { @@ -239,7 +291,7 @@ int daNpc_Lud_c::create() { reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Lud_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -485,10 +537,10 @@ void daNpc_Lud_c::setParam() { selectAction(); srchActors(); - s16 talk_distance = daNpc_Lud_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Lud_Param_c::m.common.talk_angle; - s16 attention_distance = daNpc_Lud_Param_c::m.common.attention_distance; - s16 attention_angle = daNpc_Lud_Param_c::m.common.attention_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attention_distance = mpHIO->m.common.attention_distance; + s16 attention_angle = mpHIO->m.common.attention_angle; switch (mType) { case TYPE_0: @@ -518,24 +570,23 @@ void daNpc_Lud_c::setParam() { daNpcT_getDistTableIdx(talk_distance, talk_angle); attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; - scale.set(daNpc_Lud_Param_c::m.common.scale, daNpc_Lud_Param_c::m.common.scale, - daNpc_Lud_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Lud_Param_c::m.common.weight); - mCylH = daNpc_Lud_Param_c::m.common.height; - mWallR = daNpc_Lud_Param_c::m.common.width; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; if (mTwilight) { mCylH = 120.0f; } - mAttnFovY = daNpc_Lud_Param_c::m.common.fov; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Lud_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Lud_Param_c::m.common.real_shadow_size; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; if (mType == TYPE_4 || mType == TYPE_5 || mType == TYPE_6) { mRealShadowSize = 500.0f; } - mExpressionMorfFrame = daNpc_Lud_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Lud_Param_c::m.common.morf_frame; - gravity = daNpc_Lud_Param_c::m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; + gravity = mpHIO->m.common.gravity; } /* 80A6BD44-80A6BE6C 001284 0128+00 1/0 0/0 0/0 .text checkChangeEvt__11daNpc_Lud_cFv */ @@ -680,7 +731,7 @@ void daNpc_Lud_c::beforeMove() { } /* 80A70B64-80A70B68 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpc_Lud_Param_c l_HIO; +NPC_LUD_HIO_CLASS l_HIO; /* 80A6C3A8-80A6C8EC 0018E8 0544+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_Lud_cFv */ void daNpc_Lud_c::setAttnPos() { @@ -697,23 +748,23 @@ void daNpc_Lud_c::setAttnPos() { if (mType == TYPE_4 || mType == TYPE_5 || mType == TYPE_6) { mJntAnm.setParam(this, mpMorf[0]->getModel(), &cStack_70, getBackboneJointNo(), - getNeckJointNo(), getHeadJointNo(), l_HIO.m.common.body_angleX_min, - l_HIO.m.common.body_angleX_max, 0.0f, 0.0f, l_HIO.m.common.head_angleX_min, - l_HIO.m.common.head_angleX_max, l_HIO.m.common.head_angleY_min, - l_HIO.m.common.head_angleY_max, l_HIO.m.common.neck_rotation_ratio, dVar8, - NULL); + getNeckJointNo(), getHeadJointNo(), mpHIO->m.common.body_angleX_min, + mpHIO->m.common.body_angleX_max, 0.0f, 0.0f, + mpHIO->m.common.head_angleX_min, mpHIO->m.common.head_angleX_max, + mpHIO->m.common.head_angleY_min, mpHIO->m.common.head_angleY_max, + mpHIO->m.common.neck_rotation_ratio, dVar8, NULL); } else { mJntAnm.setParam(this, mpMorf[0]->getModel(), &cStack_70, getBackboneJointNo(), - getNeckJointNo(), getHeadJointNo(), l_HIO.m.common.body_angleX_min, - l_HIO.m.common.body_angleX_max, l_HIO.m.common.body_angleY_min, - l_HIO.m.common.body_angleY_max, l_HIO.m.common.head_angleX_min, - l_HIO.m.common.head_angleX_max, l_HIO.m.common.head_angleY_min, - l_HIO.m.common.head_angleY_max, l_HIO.m.common.neck_rotation_ratio, dVar8, - NULL); + getNeckJointNo(), getHeadJointNo(), mpHIO->m.common.body_angleX_min, + mpHIO->m.common.body_angleX_max, mpHIO->m.common.body_angleY_min, + mpHIO->m.common.body_angleY_max, mpHIO->m.common.head_angleX_min, + mpHIO->m.common.head_angleX_max, mpHIO->m.common.head_angleY_min, + mpHIO->m.common.head_angleY_max, mpHIO->m.common.neck_rotation_ratio, + dVar8, NULL); } mJntAnm.calcJntRad(0.2f, 1.0f, dVar8); - mpMorf[0]->setPlaySpeed(l_HIO.m.play_speed); + mpMorf[0]->setPlaySpeed(mpHIO->m.play_speed); setMtx(); if (mpBowlMorf != NULL) { @@ -746,7 +797,7 @@ void daNpc_Lud_c::setAttnPos() { mDoMtx_stack_c::multVec(&cStack_70, &attention_info.position); } else { cStack_70.set(0.0f, 0.0f, 0.0f); - cStack_70.y = l_HIO.m.common.attention_offset; + cStack_70.y = mpHIO->m.common.attention_offset; mDoMtx_stack_c::YrotS(mCurAngle.y); mDoMtx_stack_c::multVec(&cStack_70, &cStack_70); attention_info.position = current.pos + cStack_70; @@ -1309,13 +1360,10 @@ int daNpc_Lud_c::wait(void* param_0) { fopAc_ac_c* actor_p = (daNpc_Len_c*)mActorMngr[2].getActorP(); if (actor_p != NULL && ((daNpc_Len_c*)actor_p) - ->checkStartDemo13StbEvt(this, daNpc_Lud_Param_c::m.common.box_min_x, - daNpc_Lud_Param_c::m.common.box_min_y, - daNpc_Lud_Param_c::m.common.box_min_z, - daNpc_Lud_Param_c::m.common.box_max_x, - daNpc_Lud_Param_c::m.common.box_max_y, - daNpc_Lud_Param_c::m.common.box_max_z, - daNpc_Lud_Param_c::m.common.box_offset)) + ->checkStartDemo13StbEvt(this, mpHIO->m.common.box_min_x, + mpHIO->m.common.box_min_y, mpHIO->m.common.box_min_z, + mpHIO->m.common.box_max_x, mpHIO->m.common.box_max_y, + mpHIO->m.common.box_max_z, mpHIO->m.common.box_offset)) { mEvtNo = 2; field_0xfd5 = 1; diff --git a/src/d/actor/d_a_npc_moi.cpp b/src/d/actor/d_a_npc_moi.cpp index 900bd1a11ec..670a4a87873 100644 --- a/src/d/actor/d_a_npc_moi.cpp +++ b/src/d/actor/d_a_npc_moi.cpp @@ -3,7 +3,7 @@ * */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep #include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2Instances.h" @@ -11,6 +11,80 @@ #include "d/actor/d_a_npc_moi.h" #include "d/actor/d_a_npc_uri.h" +/* 80A7AEF0-80A7AFAC 000000 00BC+00 19/19 0/0 0/0 .rodata m__17daNpc_Moi_Param_c */ +const daNpc_Moi_HIOParam daNpc_Moi_Param_c::m = { + 200.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 400.0f, // real_shadow_size + 255.0f, // weight + 180.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 10.0f, // body_angleY_max + -10.0f, // body_angleY_min + 30.0f, // head_angleX_max + -10.0f, // head_angleX_min + 45.0f, // head_angleY_max + -45.0f, // head_angleY_min + 0.6f, // neck_rotation_ratio + 12.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 110.0f, // fov + 0.0f, // search_distance + 0.0f, // search_height + 0.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON + 4.0f, // expression_morf_frame + 0.0f, // box_min_x + 0.0f, // box_min_y + 0.0f, // box_min_z + 0.0f, // box_max_x + 0.0f, // box_max_y + 0.0f, // box_max_z + 0.0f, // box_offset + 350.0f, // field_0x8c + 300.0f, // field_0x90 + -100.0f, // field_0x94 + 90, // field_0x98 + 200, // field_0x9a + 235, // field_0x9c + 125, // field_0x9e + 0, // field_0xa0 + 0, // field_0xa2 + 1.0f, // field_0xa4 + 1000.0f, // field_0xa8 + 300.0f, // field_0xac + -300.0f, // field_0xb0 + 30.0f, // field_0xb4 + 60.0f, // field_0xb8 +}; + +#if DEBUG +daNpc_Moi_HIO_c::daNpc_Moi_HIO_c() { + m = daNpc_Moi_Param_c::m; +} + +void daNpc_Moi_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // TODO +} + +void daNpc_Moi_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif + /* 80A7B17C-80A7B1BC 000020 0040+00 1/1 0/0 0/0 .data l_bmdData */ static int l_bmdData[8][2] = { {11, 1}, {29, 3}, {30, 3}, {31, 3}, {13, 1}, {33, 3}, {12, 1}, {32, 3}, @@ -193,17 +267,6 @@ daNpc_Moi_c::~daNpc_Moi_c() { deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } -/* 80A7AEF0-80A7AFAC 000000 00BC+00 19/19 0/0 0/0 .rodata m__17daNpc_Moi_Param_c */ -const daNpc_Moi_HIOParam daNpc_Moi_Param_c::m = { - 200.0f, -3.0f, 1.0f, 400.0f, 255.0f, 180.0f, 35.0f, 30.0f, 0.0f, 0.0f, 10.0f, - -10.0f, 30.0f, -10.0f, 45.0f, -45.0f, 0.6f, 12.0f, 3, 6, 5, 6, - 110.0f, 0.0f, 0.0f, 0.0f, 60, 8, 0, 0, 0, 0, 0, - 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x43, 0xAF, 0x00, - 0x00, 0x43, 0x96, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 90, 200, - 235, 125, 0, 0, 1.0f, 0x44, 0x7A, 0x00, 0x00, 0x43, 0x96, - 0x00, 0x00, 0xC3, 0x96, 0x00, 0x00, 30.0f, 60.0f, -}; - /* 80A74150-80A74474 0002F0 0324+00 1/1 0/0 0/0 .text create__11daNpc_Moi_cFv */ int daNpc_Moi_c::create() { static const int heapSize[] = {0, 0x5C70, 0x7CB0, 0x7CA0, 0x5C70, 0x5C80, 0}; @@ -234,7 +297,7 @@ int daNpc_Moi_c::create() { reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Moi_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); for (int i = 0; i < 4; i++) { mCyl[i].Set(mCcDCyl); mCyl[i].SetStts(&mCcStts); @@ -358,11 +421,11 @@ int daNpc_Moi_c::Draw() { actor->field_0x634 = field_0x1628; actor->current.pos = field_0x1628; GXColor color; - color.r = daNpc_Moi_Param_c::m.field_0x9c; - color.g = daNpc_Moi_Param_c::m.field_0x9e; - color.b = daNpc_Moi_Param_c::m.field_0xa0; + color.r = mpHIO->m.field_0x9c; + color.g = mpHIO->m.field_0x9e; + color.b = mpHIO->m.field_0xa0; color.a = (u8)actor->field_0x5c0; - dKy_BossLight_set(&field_0x1628, &color, daNpc_Moi_Param_c::m.field_0xa4, 1); + dKy_BossLight_set(&field_0x1628, &color, mpHIO->m.field_0xa4, 1); } } @@ -535,10 +598,10 @@ void daNpc_Moi_c::setParam() { srchActors(); int uVar5 = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - s16 talk_distance = daNpc_Moi_Param_c::m.common.talk_distance; - s16 talk_angle = daNpc_Moi_Param_c::m.common.talk_angle; - s16 attention_distance = daNpc_Moi_Param_c::m.common.attention_distance; - s16 attention_angle = daNpc_Moi_Param_c::m.common.attention_angle; + s16 talk_distance = mpHIO->m.common.talk_distance; + s16 talk_angle = mpHIO->m.common.talk_angle; + s16 attention_distance = mpHIO->m.common.attention_distance; + s16 attention_angle = mpHIO->m.common.attention_angle; if (mType == TYPE_2) { if (field_0x166d) { @@ -584,18 +647,17 @@ void daNpc_Moi_c::setParam() { attention_info.flags = uVar5; } - scale.set(daNpc_Moi_Param_c::m.common.scale, daNpc_Moi_Param_c::m.common.scale, - daNpc_Moi_Param_c::m.common.scale); - mCcStts.SetWeight(daNpc_Moi_Param_c::m.common.weight); - mCylH = daNpc_Moi_Param_c::m.common.height; - mWallR = daNpc_Moi_Param_c::m.common.width; - mAttnFovY = daNpc_Moi_Param_c::m.common.fov; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; if (mType == TYPE_2) { mAttnFovY = 135.0f; } mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Moi_Param_c::m.common.knee_length); - mRealShadowSize = daNpc_Moi_Param_c::m.common.real_shadow_size; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; if (mType == TYPE_1) { mRealShadowSize = 600.0f; } else if (mType == TYPE_2) { @@ -604,9 +666,9 @@ void daNpc_Moi_c::setParam() { mRealShadowSize = 800.0f; } } - gravity = daNpc_Moi_Param_c::m.common.gravity; - mExpressionMorfFrame = daNpc_Moi_Param_c::m.common.expression_morf_frame; - mMorfFrames = daNpc_Moi_Param_c::m.common.morf_frame; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; if (mType == TYPE_3) { mAcch.SetGrndNone(); mAcch.SetWallNone(); @@ -762,7 +824,7 @@ void daNpc_Moi_c::beforeMove() { } /* 80A7BFF4-80A7BFF8 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpc_Moi_Param_c l_HIO; +NPC_MOI_HIO_CLASS l_HIO; /* 80A75AB8-80A75E68 001C58 03B0+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_Moi_cFv */ void daNpc_Moi_c::setAttnPos() { @@ -775,15 +837,15 @@ void daNpc_Moi_c::setAttnPos() { if (mType == 3) { mJntAnm.setParam(this, mpMorf[0]->getModel(), &acStack_3c, getBackboneJointNo(), getNeckJointNo(), getHeadJointNo(), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, l_HIO.m.common.neck_rotation_ratio, dVar6, NULL); + 0.0f, 0.0f, mpHIO->m.common.neck_rotation_ratio, dVar6, NULL); } else { mJntAnm.setParam(this, mpMorf[0]->getModel(), &acStack_3c, getBackboneJointNo(), - getNeckJointNo(), getHeadJointNo(), l_HIO.m.common.body_angleX_min, - l_HIO.m.common.body_angleX_max, l_HIO.m.common.body_angleY_min, - l_HIO.m.common.body_angleY_max, l_HIO.m.common.head_angleX_min, - l_HIO.m.common.head_angleX_max, l_HIO.m.common.head_angleY_min, - l_HIO.m.common.head_angleY_max, l_HIO.m.common.neck_rotation_ratio, dVar6, - NULL); + getNeckJointNo(), getHeadJointNo(), mpHIO->m.common.body_angleX_min, + mpHIO->m.common.body_angleX_max, mpHIO->m.common.body_angleY_min, + mpHIO->m.common.body_angleY_max, mpHIO->m.common.head_angleX_min, + mpHIO->m.common.head_angleX_max, mpHIO->m.common.head_angleY_min, + mpHIO->m.common.head_angleY_max, mpHIO->m.common.neck_rotation_ratio, + dVar6, NULL); } mJntAnm.calcJntRad(0.2f, 1.0f, dVar6); @@ -795,7 +857,7 @@ void daNpc_Moi_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y + field_0xd8a.y, 1, 1.0f, 0); acStack_3c.set(0.0f, 0.0f, 0.0f); - acStack_3c.y = l_HIO.m.common.attention_offset; + acStack_3c.y = mpHIO->m.common.attention_offset; if (mType == TYPE_3) { acStack_3c.set(0.0f, 140.0f, -60.0f); @@ -1052,10 +1114,10 @@ void daNpc_Moi_c::setSSlash(int param_1) { mSound.startCreatureVoice(JAISoundID(Z2SE_MOI_V_WOUND_SWING), -1); } field_0x1664 = fopAcM_searchPlayerAngleY(this); - s16 iVar3 = cM_deg2s(daNpc_Moi_Param_c::m.field_0xb8); - daPy_getPlayerActorClass()->setThrowDamage( - fopAcM_searchPlayerAngleY(this), daNpc_Moi_Param_c::m.field_0xb4 * cM_scos(iVar3), - daNpc_Moi_Param_c::m.field_0xb4 * cM_ssin(iVar3), 1, 0, 0); + s16 iVar3 = cM_deg2s(mpHIO->m.field_0xb8); + daPy_getPlayerActorClass()->setThrowDamage(fopAcM_searchPlayerAngleY(this), + mpHIO->m.field_0xb4 * cM_scos(iVar3), + mpHIO->m.field_0xb4 * cM_ssin(iVar3), 1, 0, 0); if (param_1 != 0) { field_0x1660 = 1; field_0x165c = 202; @@ -1679,7 +1741,7 @@ int daNpc_Moi_c::cutFindWolf(int param_1) { /* 80A789D8-80A78E0C 004B78 0434+00 2/0 0/0 0/0 .text wait__11daNpc_Moi_cFPv */ int daNpc_Moi_c::wait(void* param_1) { - int iVar4 = daNpc_Moi_Param_c::m.field_0x98; + int iVar4 = mpHIO->m.field_0x98; switch (mMode) { case MODE_ENTER: @@ -1793,7 +1855,7 @@ int daNpc_Moi_c::walk(void* param_1) { /* 80A78FF4-80A794C0 005194 04CC+00 1/0 0/0 0/0 .text walkOnEggshell__11daNpc_Moi_cFPv */ int daNpc_Moi_c::walkOnEggshell(void* param_1) { - int sVar1 = daNpc_Moi_Param_c::m.field_0x9a; + int sVar1 = mpHIO->m.field_0x9a; switch (mMode) { case MODE_ENTER: diff --git a/src/d/actor/d_a_npc_shad.cpp b/src/d/actor/d_a_npc_shad.cpp index 2732feeb400..560306d9947 100644 --- a/src/d/actor/d_a_npc_shad.cpp +++ b/src/d/actor/d_a_npc_shad.cpp @@ -11,6 +11,54 @@ #include "d/actor/d_a_tag_evtarea.h" #include "d/d_msg_object.h" +/* 80AE1FDC-80AE204C 000000 0070+00 19/19 0/0 0/0 .rodata m__17daNpcShad_Param_c */ +const daNpcShad_HIOParam daNpcShad_Param_c::m = { + 35.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 400.0f, // real_shadow_size + 255.0f, // weight + 200.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 45.0f, // body_angleY_max + -45.0f, // body_angleY_min + 30.0f, // head_angleX_max + -10.0f, // head_angleX_min + 40.0f, // head_angleY_max + -40.0f, // head_angleY_min + 0.6f, // neck_rotation_ratio + 12.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 80.0f, // fov + 500.0f, // search_distance + 300.0f, // search_height + -300.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + false, // debug_mode_ON + false, // debug_info_ON + 12.0f, // traveling_speed +}; + +#if DEBUG +daNpcShad_HIO_c::daNpcShad_HIO_c() { + m = daNpcShad_Param_c::m; +} + +void daNpcShad_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif + enum Shad_RES_File_ID { /* BCK */ /* 0x07 */ BCK_SHAD_F_DISCOURAGED = 0x7, @@ -272,7 +320,7 @@ static char* l_evtArcs[14] = { static char* l_myName = "Shad"; /* 80AE2CC4-80AE2CC8 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpcShad_Param_c l_HIO; +NPC_SHAD_HIO_CLASS l_HIO; /* 80AE2A00-80AE2AA8 0003E0 00A8+00 0/2 0/0 0/0 .data mEvtSeqList__11daNpcShad_c */ daNpcShad_c::EventFn daNpcShad_c::mEvtSeqList[14] = { @@ -292,44 +340,6 @@ daNpcShad_c::EventFn daNpcShad_c::mEvtSeqList[14] = { &daNpcShad_c::EvCut_WiretapEntrant, }; -/* 80AE1FDC-80AE204C 000000 0070+00 19/19 0/0 0/0 .rodata m__17daNpcShad_Param_c */ -const daNpcShad_HIOParam daNpcShad_Param_c::m = { - 35.0f, - -3.0f, - 1.0f, - 400.0f, - 255.0f, - 200.0f, - 35.0f, - 30.0f, - 0.0f, - 0.0f, - 45.0f, - -45.0f, - 30.0f, - -10.0f, - 40.0f, - -40.0f, - 0.6f, - 12.0f, - 3, - 6, - 5, - 6, - 80.0f, - 500.0f, - 300.0f, - -300.0f, - 60, - 8, - 0, - 0, - 0, - false, - false, - 12.0f, -}; - daNpcShad_c::daNpcShad_c() { // empty function } @@ -447,13 +457,13 @@ cPhs__Step daNpcShad_c::Create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 220.0f, 100.0f); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcShad_Param_c::m.common.width, daNpcShad_Param_c::m.common.knee_length); + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcShad_Param_c::m.common.weight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); field_0xcb0.Set(mCcDCyl); field_0xcb0.SetStts(&mCcStts); @@ -567,7 +577,7 @@ int daNpcShad_c::Draw() { } mpMorf->getModel()->getModelData()->getMaterialNodePointer(1)->setMaterialAnm(mpMatAnm); - draw(FALSE, FALSE, daNpcShad_Param_c::m.common.real_shadow_size, NULL, FALSE); + draw(FALSE, FALSE, mpHIO->m.common.real_shadow_size, NULL, FALSE); if (mBookKnifeModel != NULL) { g_env_light.setLightTevColorType_MAJI(mBookKnifeModel, &tevStr); @@ -606,7 +616,7 @@ int daNpcShad_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case JNT_BACKBONE1: case JNT_NECK: case JNT_HEAD: - setLookatMtx(jntNo, lookatJoints, daNpcShad_Param_c::m.common.neck_rotation_ratio); + setLookatMtx(jntNo, lookatJoints, mpHIO->m.common.neck_rotation_ratio); break; } @@ -825,9 +835,9 @@ void daNpcShad_c::reset() { attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(2, 3); } else { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcShad_Param_c::m.common.attention_distance, daNpcShad_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcShad_Param_c::m.common.talk_distance, daNpcShad_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); } current.pos = home.pos; @@ -898,18 +908,18 @@ inline bool daNpcShad_c::isSneaking() { /* 80AE0B58-80AE0ED0 008A38 0378+00 1/1 0/0 0/0 .text playExpression__11daNpcShad_cFv */ inline void daNpcShad_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_F_HAPPY, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1a = {ANM_F_HAPPY, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat1b = {ANM_FH_HAPPY, 0.0f, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2a = {ANM_F_ANGER, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2a = {ANM_F_ANGER, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat2b = {ANM_FH_ANGER, 0.0f, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3a = {ANM_F_DISCOURAGED, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3a = {ANM_F_DISCOURAGED, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat3b = {ANM_FH_DISCOURAGED, 0.0f, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4 = {ANM_F_KOMON, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_F_KOMON, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; daNpcF_anmPlayData dat5 = {ANM_F_SURPRISE, 0.0f, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; @@ -923,9 +933,9 @@ inline void daNpcShad_c::playExpression() { daNpcF_anmPlayData* pDat9[1] = {&dat9}; daNpcF_anmPlayData dat10 = {ANM_FH_DISCOURAGED, 0.0f, 0}; daNpcF_anmPlayData* pDat10[1] = {&dat10}; - daNpcF_anmPlayData dat11 = {ANM_F_CHANT, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat11 = {ANM_F_CHANT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat11[1] = {&dat11}; - daNpcF_anmPlayData dat12 = {ANM_NONE, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat12 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[1] = {&dat12}; daNpcF_anmPlayData** ppDat[13] = { pDat0, pDat1, pDat2, pDat3, pDat4, @@ -940,52 +950,52 @@ inline void daNpcShad_c::playExpression() { /* 80AE04D8-80AE0B58 0083B8 0680+00 1/1 0/0 0/0 .text playMotion__11daNpcShad_cFv */ inline void daNpcShad_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_BOOK_TALK_A, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1a = {ANM_BOOK_TALK_A, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat1b = {ANM_BOOK_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2 = {ANM_BOOK_WAIT, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat2 = {ANM_BOOK_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3a = {ANM_HI, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3a = {ANM_HI, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat3b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4 = {ANM_SIT_A, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat4 = {ANM_SIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5a = {ANM_LOOKBACK, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat5a = {ANM_LOOKBACK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat5b = {ANM_WAIT_A, 0.0f, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6a = {ANM_DISCOURAGED, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6a = {ANM_DISCOURAGED, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat6b = {ANM_DISCOURAGED_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {ANM_DISCOURAGED_WAIT, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat7 = {ANM_DISCOURAGED_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8a = {ANM_TALK_A, daNpcShad_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat8b = {ANM_WAIT_A, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat8a = {ANM_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat8b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[2] = {&dat8a, &dat8b}; - daNpcF_anmPlayData dat9a = {ANM_SITTALK_A, daNpcShad_Param_c::m.common.morf_frame, 1}; - daNpcF_anmPlayData dat9b = {ANM_SIT_A, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat9a = {ANM_SITTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat9b = {ANM_SIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - daNpcF_anmPlayData dat10a = {ANM_LOOK, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat10a = {ANM_LOOK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat10b = {ANM_LOOK_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b}; - daNpcF_anmPlayData dat11a = {ANM_TAKE_KOMON, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat11a = {ANM_TAKE_KOMON, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat11b = {ANM_READ_KOMON, 0.0f, 0}; daNpcF_anmPlayData* pDat11[2] = {&dat11a, &dat11b}; - daNpcF_anmPlayData dat12 = {ANM_READ_KOMON, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat12 = {ANM_READ_KOMON, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat12[1] = {&dat12}; - daNpcF_anmPlayData dat13 = {ANM_LOOK_WAIT, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat13 = {ANM_LOOK_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[1] = {&dat13}; - daNpcF_anmPlayData dat14a = {ANM_SURPRISE, daNpcShad_Param_c::m.common.morf_frame, 1}; + daNpcF_anmPlayData dat14a = {ANM_SURPRISE, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat14b = {ANM_SURPRISE_WAIT, 0.0f, 0}; daNpcF_anmPlayData* pDat14[2] = {&dat14a, &dat14b}; - daNpcF_anmPlayData dat15 = {ANM_SURPRISE_WAIT, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat15 = {ANM_SURPRISE_WAIT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat15[1] = {&dat15}; - daNpcF_anmPlayData dat16 = {ANM_LOOKUP, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat16 = {ANM_LOOKUP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat16[1] = {&dat16}; - daNpcF_anmPlayData dat17 = {ANM_SAD_WALK, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat17 = {ANM_SAD_WALK, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat17[1] = {&dat17}; - daNpcF_anmPlayData dat18 = {ANM_CHANT, daNpcShad_Param_c::m.common.morf_frame, 0}; + daNpcF_anmPlayData dat18 = {ANM_CHANT, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat18[1] = {&dat18}; daNpcF_anmPlayData dat19 = {ANM_RUN_A, 4.0f, 0}; daNpcF_anmPlayData* pDat19[1] = {&dat19}; @@ -1013,27 +1023,27 @@ inline void daNpcShad_c::lookat() { daPy_py_c* player = NULL; J3DModel* model = mpMorf->getModel(); int iVar1 = 0; - f32 body_angleX_min = daNpcShad_Param_c::m.common.body_angleX_min; - f32 body_angleX_max = daNpcShad_Param_c::m.common.body_angleX_max; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; f32 body_angleY_min; if (mMode == 1) { body_angleY_min = -30.0f; } else { - body_angleY_min = daNpcShad_Param_c::m.common.body_angleY_min; + body_angleY_min = mpHIO->m.common.body_angleY_min; } f32 body_angleY_max; if (mMode == 1) { body_angleY_max = 30.0f; } else { - body_angleY_max = daNpcShad_Param_c::m.common.body_angleY_max; + body_angleY_max = mpHIO->m.common.body_angleY_max; } - f32 head_angleX_min = daNpcShad_Param_c::m.common.head_angleX_min; - f32 head_angleX_max = daNpcShad_Param_c::m.common.head_angleX_max; - f32 head_angleY_min = daNpcShad_Param_c::m.common.head_angleY_min; - f32 head_angleY_max = daNpcShad_Param_c::m.common.head_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; s16 sVar1 = mCurAngle.y - mOldAngle.y; cXyz spf0[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; @@ -1082,7 +1092,7 @@ inline BOOL daNpcShad_c::chkFindPlayer() { if (mMode == 0) { fVar1 = 135.0f; } else { - fVar1 = daNpcShad_Param_c::m.common.fov; + fVar1 = mpHIO->m.common.fov; } if (!chkActorInSight(daPy_getPlayerActorClass(), fVar1)) { @@ -1288,7 +1298,7 @@ bool daNpcShad_c::wait_type1(void* param_1) { setLookMode(LOOK_PLAYER, NULL, NULL); if (mCurAngle.y == field_0xe1c) { - if (fopAcM_seenPlayerAngleY(this) > cM_deg2s(daNpcShad_Param_c::m.common.body_angleY_max + daNpcShad_Param_c::m.common.head_angleY_max)) { + if (fopAcM_seenPlayerAngleY(this) > cM_deg2s(mpHIO->m.common.body_angleY_max + mpHIO->m.common.head_angleY_max)) { field_0xe1c = fopAcM_searchPlayerAngleY(this); } } else if (step(field_0xe1c, MOT_STEPB, 30.0f)) { @@ -1316,7 +1326,7 @@ bool daNpcShad_c::wait_type1(void* param_1) { setLookMode(LOOK_PLAYER, NULL, NULL); if (mCurAngle.y == field_0xe1c) { - if (fopAcM_seenPlayerAngleY(this) > cM_deg2s(daNpcShad_Param_c::m.common.body_angleY_max + daNpcShad_Param_c::m.common.head_angleY_max)) { + if (fopAcM_seenPlayerAngleY(this) > cM_deg2s(mpHIO->m.common.body_angleY_max + mpHIO->m.common.head_angleY_max)) { field_0xe1c = fopAcM_searchPlayerAngleY(this); } } else if (step(field_0xe1c, MOT_STEPB, 30.0f)) { @@ -1622,7 +1632,7 @@ bool daNpcShad_c::leave(void* param_1) { setExpression(EXPR_NONE, -1.0f); setMotion(MOT_RUN_A, -1.0f, FALSE); mTurnMode = 0; - speedF = daNpcShad_Param_c::m.traveling_speed; + speedF = mpHIO->m.traveling_speed; field_0xe1a = 2; break; @@ -2582,14 +2592,14 @@ void daNpcShad_c::setParam() { attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(2, 5); } else { - attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcShad_Param_c::m.common.attention_distance, daNpcShad_Param_c::m.common.attention_angle); + attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcShad_Param_c::m.common.talk_distance, daNpcShad_Param_c::m.common.talk_angle); + attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); } - mAcchCir.SetWallR(daNpcShad_Param_c::m.common.width); - mAcchCir.SetWallH(daNpcShad_Param_c::m.common.knee_length); - gravity = daNpcShad_Param_c::m.common.gravity; + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } /* 80AE0438-80AE04D8 008318 00A0+00 1/0 0/0 0/0 .text main__11daNpcShad_cFv */ @@ -2658,20 +2668,20 @@ inline void daNpcShad_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcShad_Param_c::m.common.attention_offset, mHeadPos.z); + attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset, mHeadPos.z); cXyz sp58; mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_BACKBONE2)); mDoMtx_stack_c::multVecZero(&sp58); sp58.y = current.pos.y; field_0xcb0.SetC(sp58); - field_0xcb0.SetH(daNpcShad_Param_c::m.common.height); + field_0xcb0.SetH(mpHIO->m.common.height); f32 fVar1; if (mMode == 0) { fVar1 = 45.0f; } else { - fVar1 = daNpcShad_Param_c::m.common.width; + fVar1 = mpHIO->m.common.width; } field_0xcb0.SetR(fVar1); diff --git a/src/d/actor/d_a_npc_shoe.cpp b/src/d/actor/d_a_npc_shoe.cpp index 8b82179a454..46fec85fb45 100644 --- a/src/d/actor/d_a_npc_shoe.cpp +++ b/src/d/actor/d_a_npc_shoe.cpp @@ -1,18 +1,60 @@ /** * @file d_a_npc_shoe.cpp - * -*/ + * + */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_npc_shoe.h" -#include "dol2asm.h" -// -// Declarations: -// +/* 80AEA3B0-80AEA41C 000000 006C+00 11/11 0/0 0/0 .rodata m__17daNpcShoe_Param_c */ +const daNpcShoe_HIOParam daNpcShoe_Param_c::m = { + 55.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 300.0f, // real_shadow_size + 255.0f, // weight + 140.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 10.0f, // body_angleY_max + -10.0f, // body_angleY_min + 30.0f, // head_angleX_max + -10.0f, // head_angleX_min + 45.0f, // head_angleY_max + -45.0f, // head_angleY_min + 0.6f, // neck_rotation_ratio + 12.0f, // morf_frame + 2, // talk_distance + 2, // talk_angle + 3, // attention_distance + 2, // attention_angle + 60.0f, // fov + 500.0f, // search_distance + 300.0f, // search_height + -300.0f, // search_depth + 60, // attention_time + 0, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON +}; -static daNpcShoe_Param_c l_HIO; +#if DEBUG +daNpcShoe_HIO_c::daNpcShoe_HIO_c() { + m = daNpcShoe_Param_c::m; +} + +void daNpcShoe_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif + +NPC_SHOE_HIO_CLASS l_HIO; void daNpcShoe_c::setLookMode(int i_lookMode) { if (mLookMode != i_lookMode) { @@ -22,7 +64,7 @@ void daNpcShoe_c::setLookMode(int i_lookMode) { bool daNpcShoe_c::chkFindPlayer() { bool ret; - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcShoe_Param_c::m.mAttnFovY)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) { mActorMngr[0].remove(); ret = false; } else { @@ -42,16 +84,16 @@ bool daNpcShoe_c::chkFindPlayer() { /* 80AEA558-80AEA594 000020 003C+00 1/1 0/0 0/0 .data l_bckGetParamList */ static daNpc_GetParam2 l_bckGetParamList[5] = { - { 17, 2, 1}, // m_sitwait_a - { 13, 0, 1}, // m_sittalk_a - { 14, 0, 1}, // m_sittalk_a_b - { 5, 0, 0}, // shoe_talk_a - { 11, 2, 1} // m_sit_to_wolf_a + {17, 2, 1}, // m_sitwait_a + {13, 0, 1}, // m_sittalk_a + {14, 0, 1}, // m_sittalk_a_b + {5, 0, 0}, // shoe_talk_a + {11, 2, 1} // m_sit_to_wolf_a }; /* 80AEA594-80AEA5A0 00005C 000C+00 0/0 0/0 0/0 .data l_btpGetParamList */ static daNpc_GetParam2 l_btpGetParamList[1] = { - { 12, 2, 0 }, // shoe + {12, 2, 0}, // shoe }; /* 80AEA5A0-80AEA5AC -00001 000C+00 5/6 0/0 0/0 .data l_arcNames */ @@ -62,22 +104,16 @@ static char* l_arcNames[3] = { }; /* 80AEA5AC-80AEA5B0 000074 0004+00 0/1 0/0 0/0 .data l_evtNames */ -static char* l_evtNames[1] = { - l_arcNames[0] -}; +static char* l_evtNames[1] = {l_arcNames[0]}; /* 80AEA5B0-80AEA5B4 -00001 0004+00 0/2 0/0 0/0 .data l_myName */ static char* l_myName = "Shoe"; /* 80AEA5B4-80AEA5C0 00007C 000C+00 1/2 0/0 0/0 .data mEvtSeqList__11daNpcShoe_c */ -daNpcShoe_c::EventFn daNpcShoe_c::mEvtSeqList[1] = { - NULL -}; +daNpcShoe_c::EventFn daNpcShoe_c::mEvtSeqList[1] = {NULL}; /* 80AE794C-80AE7AD0 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpcShoe_cFv */ -daNpcShoe_c::daNpcShoe_c() { - // NONMATCHING -} +daNpcShoe_c::daNpcShoe_c() {} /* 80AE7B60-80AE7D48 000300 01E8+00 1/0 0/0 0/0 .text __dt__11daNpcShoe_cFv */ daNpcShoe_c::~daNpcShoe_c() { @@ -89,43 +125,6 @@ daNpcShoe_c::~daNpcShoe_c() { } } -/* ############################################################################################## */ -/* 80AEA3B0-80AEA41C 000000 006C+00 11/11 0/0 0/0 .rodata m__17daNpcShoe_Param_c */ -daNpcShoe_Param_c::param const daNpcShoe_Param_c::m = { - 55.0f, - -3.0f, - 1.0f, - 300.0f, - 255.0f, - 140.0f, - 35.0f, - 30.0f, - 0.0f, - 0.0f, - 10.0f, - -10.0f, - 30.0f, - -10.0f, - 45.0f, - -45.0f, - 0.6f, - 12.0f, - 2, - 2, - 3, - 2, - 60.0f, - 500.0f, - 300.0f, - -300.0f, - 60, - 0, - 0, - 0, - 0, - false, -}; - /* 80AE7D48-80AE7FD8 0004E8 0290+00 1/1 0/0 0/0 .text Create__11daNpcShoe_cFv */ cPhs__Step daNpcShoe_c::Create() { cPhs__Step step; @@ -154,13 +153,13 @@ cPhs__Step daNpcShoe_c::Create() { mCreature.init(¤t.pos, &eyePos, 3, 1); mCreature.setMdlType(7, false, (BOOL)(dKy_darkworld_check() != 0)); - mAcchCir.SetWall(daNpcShoe_Param_c::m.mWallR, daNpcShoe_Param_c::m.mWallH); + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init((int)daNpcShoe_Param_c::m.mCcWeight, 0, this); + mCcStts.Init((int)mpHIO->m.common.weight, 0, this); mCcCyl.Set(mCcDCyl); mCcCyl.SetStts(&mCcStts); @@ -169,7 +168,7 @@ cPhs__Step daNpcShoe_c::Create() { mGndChk = mAcch.m_gnd; mGroundH = mAcch.m_ground_h; - gravity = daNpcShoe_Param_c::m.mGravity; + gravity = mpHIO->m.common.gravity; setEnvTevColor(); setRoomNo(); @@ -186,9 +185,9 @@ BOOL daNpcShoe_c::CreateHeap() { JUT_ASSERT(292, NULL != mdlData_p) - mpMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, - &mCreature, 0x80000, 0x11020084); - + mpMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreature, 0x80000, + 0x11020084); + if (mpMorf != NULL && mpMorf->mpModel == NULL) { mpMorf->stopZelAnime(); mpMorf = NULL; @@ -267,15 +266,16 @@ int daNpcShoe_c::Draw() { return 1; } - draw(false, false, daNpcShoe_Param_c::m.mShadowDepth, NULL, false); + draw(false, false, mpHIO->m.common.real_shadow_size, NULL, false); g_env_light.setLightTevColorType_MAJI(mpModel1->mModelData, &tevStr); mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(11)); mpModel1->setBaseTRMtx(mDoMtx_stack_c::get()); mDoExt_modelUpdateDL(mpModel1); g_env_light.setLightTevColorType_MAJI(mpModel2->mModelData, &tevStr); mDoExt_modelUpdateDL(mpModel2); - dComIfGd_setSimpleShadow(¤t.pos, mAcch.GetGroundH(), 50.0f, mAcch.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); - + dComIfGd_setSimpleShadow(¤t.pos, mAcch.GetGroundH(), 50.0f, mAcch.m_gnd, 0, 1.0f, + dDlst_shadowControl_c::getSimpleTex()); + return 1; } @@ -293,14 +293,14 @@ bool daNpcShoe_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3)); mDoMtx_stack_c::multVecZero(&mLookatPos[2]); } - + mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no)); - switch(joint_no) { - case 1: - case 2: - case 3: - setLookatMtx(joint_no, lookat_joints, daNpcShoe_Param_c::m.mNeckAngleScl); - break; + switch (joint_no) { + case 1: + case 2: + case 3: + setLookatMtx(joint_no, lookat_joints, mpHIO->m.common.neck_rotation_ratio); + break; } i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get()); @@ -342,7 +342,6 @@ void daNpcShoe_c::setMotion(int i_motion, f32 i_morf, BOOL i_restart) { } } - /* 80AE864C-80AE895C 000DEC 0310+00 1/1 0/0 0/0 .text reset__11daNpcShoe_cFv */ void daNpcShoe_c::reset() { initialize(); @@ -410,28 +409,23 @@ void daNpcShoe_c::reset() { mMotionMorfOverride = 0.0f; } - void daNpcShoe_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_M_SITTALK_A, daNpcShoe_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat1b = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1a = {ANM_M_SITTALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat1b = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2a = {ANM_M_SITTALK_A_B, daNpcShoe_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat2b = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2a = {ANM_M_SITTALK_A_B, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat2b = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3a = {ANM_SHOE_TALK_A, daNpcShoe_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat3b = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3a = {ANM_SHOE_TALK_A, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat3b = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4 = {ANM_M_SIT_TO_WOLF_A, daNpcShoe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4 = {ANM_M_SIT_TO_WOLF_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; daNpcF_anmPlayData** ppDat[5] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, + pDat0, pDat1, pDat2, pDat3, pDat4, }; if (mMotion >= 0 && mMotion < 5) { field_0xe16 = mMotionPhase; @@ -439,6 +433,57 @@ void daNpcShoe_c::playMotion() { } } +/* 80AE9820-80AE9A00 001FC0 01E0+00 1/1 0/0 0/0 .text lookat__11daNpcShoe_cFv */ +void daNpcShoe_c::lookat() { + fopAc_ac_c* actor = NULL; + J3DModel* model = mpMorf->getModel(); + + BOOL snap = false; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; + + s16 angle_delta = mCurAngle.y - mOldAngle.y; + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; + + switch (mLookMode) { + case LOOK_NONE: + break; + case LOOK_RESET: + snap = true; + break; + case LOOK_PLAYER: + case LOOK_PLAYER_TALK: + actor = daPy_getPlayerActorClass(); + if (mLookMode != LOOK_PLAYER_TALK) { + break; + } + head_angleY_min = -80.0f; + head_angleY_max = 80.0f; + break; + } + + if (actor != NULL) { + mLookPos = actor->attention_info.position; + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { + mLookPos.y -= 40.0f; + } + mLookat.setAttnPos(&mLookPos); + } else { + mLookat.setAttnPos(NULL); + } + + mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, + 0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); +} /* 80AE895C-80AE8A04 0010FC 00A8+00 1/1 0/0 0/0 .text * setAction__11daNpcShoe_cFM11daNpcShoe_cFPCvPvPv_b */ @@ -458,7 +503,6 @@ int daNpcShoe_c::setAction(bool (daNpcShoe_c::*i_actionFunc)(void*)) { /* 80AE8A04-80AE8E24 0011A4 0420+00 3/0 0/0 0/0 .text wait__11daNpcShoe_cFPv */ bool daNpcShoe_c::wait(void* param_0) { - // NONMATCHING switch (mMode) { case 0: setMotion(MOT_SITWAIT_A, -1.0f, false); @@ -469,7 +513,7 @@ bool daNpcShoe_c::wait(void* param_0) { break; case 2: { chkFindPlayer(); - + fopAc_ac_c* pactor = mActorMngr->getActorP(); if (pactor != NULL) { setLookMode(LOOK_PLAYER); @@ -513,27 +557,26 @@ bool daNpcShoe_c::wait(void* param_0) { return 1; } - /* 80AE8E24-80AE8ED4 0015C4 00B0+00 1/0 0/0 0/0 .text fear__11daNpcShoe_cFPv */ bool daNpcShoe_c::fear(void* param_0) { switch (mMode) { - case 0: - setMotion(MOT_SIT_TO_WOLF_A, -1.0f, false); - speedF = 0.0f; - mMode = 2; - break; - case 1: - break; - case 2: - if (mpMorf->checkFrame(1.0f)) { - mCreature.playVoice(2); - } - break; - case 3: - break; - default: - JUT_ASSERT(1100, FALSE); - break; + case 0: + setMotion(MOT_SIT_TO_WOLF_A, -1.0f, false); + speedF = 0.0f; + mMode = 2; + break; + case 1: + break; + case 2: + if (mpMorf->checkFrame(1.0f)) { + mCreature.playVoice(2); + } + break; + case 3: + break; + default: + JUT_ASSERT(1100, FALSE); + break; } return 1; } @@ -542,37 +585,37 @@ bool daNpcShoe_c::fear(void* param_0) { bool daNpcShoe_c::talk(void* param_0) { bool ret = 0; switch (mMode) { - case 0: - initTalk(field_0xe0c, NULL); - mMsgTimer = 0; - field_0xe1a = 0; - setLookMode(LOOK_PLAYER_TALK); - mMode = 2; - break; - case 1: - break; - case 2: - if (talkProc(NULL, 1, NULL)) { - mActorMngr->entry(daPy_getPlayerActorClass()); - setAction(&daNpcShoe_c::wait); - ret = 1; - } else { - int expression, motion; - if (ctrlMsgAnm(expression, motion, this, false)) { - setMotion(motion, -1.0f, false); - } + case 0: + initTalk(field_0xe0c, NULL); + mMsgTimer = 0; + field_0xe1a = 0; + setLookMode(LOOK_PLAYER_TALK); + mMode = 2; + break; + case 1: + break; + case 2: + if (talkProc(NULL, 1, NULL)) { + mActorMngr->entry(daPy_getPlayerActorClass()); + setAction(&daNpcShoe_c::wait); + ret = 1; + } else { + int expression, motion; + if (ctrlMsgAnm(expression, motion, this, false)) { + setMotion(motion, -1.0f, false); } + } + break; + case 3: + if (field_0x9ec != 0) { break; - case 3: - if (field_0x9ec != 0) { - break; - } - - dComIfGp_event_reset(); - break; - default: - JUT_ASSERT(1169, FALSE); - break; + } + + dComIfGp_event_reset(); + break; + default: + JUT_ASSERT(1169, FALSE); + break; } return ret; } @@ -580,39 +623,41 @@ bool daNpcShoe_c::talk(void* param_0) { /* 80AE9094-80AE9260 001834 01CC+00 1/0 0/0 0/0 .text demo__11daNpcShoe_cFPv */ bool daNpcShoe_c::demo(void* param_0) { switch (mMode) { - case 0: - setMotion(MOT_SITWAIT_A, -1.0f, false); - mMode = 2; - break; - case 1: - break; - case 2: - if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) { - dEvent_manager_c& eventManager = dComIfGp_getEventManager(); - s32 staff_id = eventManager.getMyStaffId(l_myName, NULL, 0); - if (staff_id != -1) { - mStaffID = staff_id; + case 0: + setMotion(MOT_SITWAIT_A, -1.0f, false); + mMode = 2; + break; + case 1: + break; + case 2: + if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) { + dEvent_manager_c& eventManager = dComIfGp_getEventManager(); + s32 staff_id = eventManager.getMyStaffId(l_myName, NULL, 0); + if (staff_id != -1) { + mStaffID = staff_id; - JUT_ASSERT(1203, NULL != mEvtSeqList[mOrderEvtNo]) + JUT_ASSERT(1203, NULL != mEvtSeqList[mOrderEvtNo]) - if ((this->*(mEvtSeqList[mOrderEvtNo]))(staff_id)) { - eventManager.cutEnd(staff_id); - } - } - - if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) { - dComIfGp_event_reset(); - mOrderEvtNo = 0; - mEventIdx = -1; - setAction(&daNpcShoe_c::wait); + if ((this->*(mEvtSeqList[mOrderEvtNo]))(staff_id)) { + eventManager.cutEnd(staff_id); } } - break; - case 3: - break; - default: - JUT_ASSERT(1169, FALSE); - break; + + if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && + eventManager.endCheck(mEventIdx)) + { + dComIfGp_event_reset(); + mOrderEvtNo = 0; + mEventIdx = -1; + setAction(&daNpcShoe_c::wait); + } + } + break; + case 3: + break; + default: + JUT_ASSERT(1169, FALSE); + break; } return 1; } @@ -644,16 +689,19 @@ static bool daNpcShoe_IsDelete(void* param_0) { /* 80AE92E8-80AE93A0 001A88 00B8+00 1/0 0/0 0/0 .text setParam__11daNpcShoe_cFv */ void daNpcShoe_c::setParam() { - attention_info.distances[0] = getDistTableIdx(daNpcShoe_Param_c::m.mTalkDistIdx, daNpcShoe_Param_c::m.mTalkAngleIdx); + attention_info.distances[0] = + getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle); attention_info.distances[1] = attention_info.distances[0]; - attention_info.distances[3] = getDistTableIdx(daNpcShoe_Param_c::m.mSpeakDistIdx, daNpcShoe_Param_c::m.mSpeakAngleIdx); + attention_info.distances[3] = + getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle); - attention_info.flags = (field_0xe1b != 0) ? (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e) : 0; + attention_info.flags = + (field_0xe1b != 0) ? (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e) : 0; - scale.setall(daNpcShoe_Param_c::m.mScale); - mAcchCir.SetWallR(daNpcShoe_Param_c::m.mWallR); - mAcchCir.SetWallH(daNpcShoe_Param_c::m.mWallH); - gravity = daNpcShoe_Param_c::m.mGravity; + scale.setall(mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } /* 80AE93A0-80AE9624 001B40 0284+00 1/0 0/0 0/0 .text main__11daNpcShoe_cFv */ @@ -671,7 +719,6 @@ BOOL daNpcShoe_c::main() { /* 80AE9624-80AE9820 001DC4 01FC+00 1/0 0/0 0/0 .text setAttnPos__11daNpcShoe_cFv */ void daNpcShoe_c::setAttnPos() { - // NONMATCHING if (mLookMode == LOOK_RESET) { for (int i = 0; i < 3; i++) { mLookatAngle[i].setall(0); @@ -681,88 +728,37 @@ void daNpcShoe_c::setAttnPos() { setMtx(); lookat(); - cXyz vec(10.0f,15.0f,0.0f); + cXyz vec(10.0f, 15.0f, 0.0f); mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3)); mDoMtx_stack_c::multVecZero(&mHeadPos); mDoMtx_stack_c::multVec(&vec, &eyePos); vec.x = 0.0f; mDoMtx_stack_c::multVec(&vec, &vec); - mHeadAngle.x = cLib_targetAngleX(&mHeadPos,&vec); - mHeadAngle.y = cLib_targetAngleY(&mHeadPos,&vec); + mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &vec); + mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &vec); mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3)); mDoMtx_stack_c::multVecZero(&attention_info.position); - attention_info.position.y += daNpcShoe_Param_c::m.mAttnOffsetY; + attention_info.position.y += mpHIO->m.common.attention_offset; cXyz cStack28; mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1)); mDoMtx_stack_c::multVecZero(&cStack28); cStack28.y = current.pos.y; mCcCyl.SetC(cStack28); - mCcCyl.SetH(daNpcShoe_Param_c::m.mCylH); - mCcCyl.SetR(daNpcShoe_Param_c::m.mWallR); + mCcCyl.SetH(mpHIO->m.common.height); + mCcCyl.SetR(mpHIO->m.common.width); dComIfG_Ccsp()->Set(&mCcCyl); } -/* 80AE9820-80AE9A00 001FC0 01E0+00 1/1 0/0 0/0 .text lookat__11daNpcShoe_cFv */ -void daNpcShoe_c::lookat() { - // NONMATCHING - fopAc_ac_c* actor = NULL; - J3DModel* model = mpMorf->getModel(); - BOOL snap = false; - f32 body_down_angle = daNpcShoe_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpcShoe_Param_c::m.mBodyUpAngle; - f32 body_right_angle = daNpcShoe_Param_c::m.mBodyRightAngle; - f32 body_left_angle = daNpcShoe_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpcShoe_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpcShoe_Param_c::m.mHeadUpAngle; - f32 head_right_angle = daNpcShoe_Param_c::m.mHeadRightAngle; - f32 head_left_angle = daNpcShoe_Param_c::m.mHeadLeftAngle; - s16 angle_delta = mCurAngle.y - mOldAngle.y; - cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; - csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; - - switch (mLookMode) { - case LOOK_NONE: - break; - case LOOK_RESET: - snap = true; - break; - case LOOK_PLAYER: - case LOOK_PLAYER_TALK: - actor = daPy_getPlayerActorClass(); - if (mLookMode != LOOK_PLAYER_TALK) { - break; - } - head_right_angle = -80.0f; - head_left_angle = 80.0f; - break; - } - - if (actor != NULL) { - mLookPos = actor->attention_info.position; - if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { - mLookPos.y -= 40.0f; - } - mLookat.setAttnPos(&mLookPos); - } else { - mLookat.setAttnPos(NULL); - } - - mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, - 0.0f, 0.0f, 0.0f, 0.0f, - head_down_angle, head_up_angle, head_right_angle, head_left_angle, - mCurAngle.y, lookat_pos); - mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); -} - /* 80AE9A00-80AE9AD0 0021A0 00D0+00 1/0 0/0 0/0 .text setMotionAnm__11daNpcShoe_cFif */ void daNpcShoe_c::setMotionAnm(int i_idx, f32 i_morf) { - J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], l_bckGetParamList[i_idx].fileIdx); - + J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], + l_bckGetParamList[i_idx].fileIdx); + int morfAttr = l_bckGetParamList[i_idx].attr; - + mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PLAY_MORF); if (morfAnm) { @@ -780,33 +776,29 @@ BOOL daNpcShoe_c::drawDbgInfo() { /* 80AEA340-80AEA344 002AE0 0004+00 1/0 0/0 0/0 .text adjustShapeAngle__11daNpcShoe_cFv */ -void daNpcShoe_c::adjustShapeAngle() { - /* empty function */ -} +void daNpcShoe_c::adjustShapeAngle() {} /* 80AEA608-80AEA628 -00001 0020+00 1/0 0/0 0/0 .data daNpcShoe_MethodTable */ static actor_method_class daNpcShoe_MethodTable = { - (process_method_func)daNpcShoe_Create, - (process_method_func)daNpcShoe_Delete, - (process_method_func)daNpcShoe_Execute, - (process_method_func)daNpcShoe_IsDelete, + (process_method_func)daNpcShoe_Create, (process_method_func)daNpcShoe_Delete, + (process_method_func)daNpcShoe_Execute, (process_method_func)daNpcShoe_IsDelete, (process_method_func)daNpcShoe_Draw, }; /* 80AEA628-80AEA658 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_SHOE */ extern actor_process_profile_definition g_profile_NPC_SHOE = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_NPC_SHOE, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daNpcShoe_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 417, // mPriority - &daNpcShoe_MethodTable, // sub_method - 0x00044107, // mStatus - fopAc_NPC_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_NPC_SHOE, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daNpcShoe_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 417, // mPriority + &daNpcShoe_MethodTable, // sub_method + 0x00044107, // mStatus + fopAc_NPC_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; diff --git a/src/d/actor/d_a_npc_the.cpp b/src/d/actor/d_a_npc_the.cpp index 0b94b95b7ea..cd1595a8622 100644 --- a/src/d/actor/d_a_npc_the.cpp +++ b/src/d/actor/d_a_npc_the.cpp @@ -3,248 +3,66 @@ * NPC - Telma */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep -#include "d/actor/d_a_npc_the.h" -#include "SSystem/SComponent/c_math.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "SSystem/SComponent/c_math.h" +#include "d/actor/d_a_npc_the.h" #include "d/actor/d_a_tag_evtarea.h" -#include "dol2asm.h" -// -// Forward References: -// +/* 80AFBE0C-80AFBE78 000000 006C+00 11/11 0/0 0/0 .rodata m__16daNpcThe_Param_c */ +const daNpcThe_HIOParam daNpcThe_Param_c::m = { + 220.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 400.0f, // real_shadow_size + 255.0f, // weight + 200.0f, // height + 35.0f, // knee_length + 40.0f, // width + 0.0f, // body_angleX_max + -20.0f, // body_angleX_min + 10.0f, // body_angleY_max + -10.0f, // body_angleY_min + 30.0f, // head_angleX_max + -20.0f, // head_angleX_min + 45.0f, // head_angleY_max + -45.0f, // head_angleY_min + 0.6f, // neck_rotation_ratio + 12.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 80.0f, // fov + 500.0f, // search_distance + 300.0f, // search_height + -300.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON +}; -extern "C" void __ct__10daNpcThe_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10daNpcThe_cFv(); -extern "C" void ctrlJoint__10daNpcThe_cFP8J3DJointP8J3DModel(); -extern "C" void createHeapCallBack__10daNpcThe_cFP10fopAc_ac_c(); -extern "C" void __dt__15J3DTevKColorAnmFv(); -extern "C" void __ct__15J3DTevKColorAnmFv(); -extern "C" void __dt__14J3DTevColorAnmFv(); -extern "C" void __ct__14J3DTevColorAnmFv(); -extern "C" void __dt__11J3DTexNoAnmFv(); -extern "C" void __ct__11J3DTexNoAnmFv(); -extern "C" void __dt__12J3DTexMtxAnmFv(); -extern "C" void __ct__12J3DTexMtxAnmFv(); -extern "C" void __dt__14J3DMatColorAnmFv(); -extern "C" void __ct__14J3DMatColorAnmFv(); -extern "C" void ctrlJointCallBack__10daNpcThe_cFP8J3DJointi(); -extern "C" void setExpressionAnm__10daNpcThe_cFib(); -extern "C" void setExpressionBtp__10daNpcThe_cFi(); -extern "C" void setMotionAnm__10daNpcThe_cFif(); -extern "C" void wait__10daNpcThe_cFPv(); -extern "C" void setMotion__10daNpcThe_cFifi(); -extern "C" void setExpression__10daNpcThe_cFif(); -extern "C" void waitTW__10daNpcThe_cFPv(); -extern "C" void talk__10daNpcThe_cFPv(); -extern "C" void test__10daNpcThe_cFPv(); -extern "C" bool EvCut_TwResistance__10daNpcThe_cFi(); -extern "C" void EvCut_Introduction__10daNpcThe_cFi(); -extern "C" static void daNpcThe_Create__FPv(); -extern "C" void create__10daNpcThe_cFv(); -extern "C" void reset__10daNpcThe_cFv(); -extern "C" static void daNpcThe_Delete__FPv(); -extern "C" static void daNpcThe_Execute__FPv(); -extern "C" static void daNpcThe_Draw__FPv(); -extern "C" static bool daNpcThe_IsDelete__FPv(); -extern "C" void calc__11J3DTexNoAnmCFPUs(); -extern "C" void setParam__10daNpcThe_cFv(); -extern "C" void main__10daNpcThe_cFv(); -extern "C" void playMotion__10daNpcThe_cFv(); -extern "C" void playExpression__10daNpcThe_cFv(); -extern "C" void doEvent__10daNpcThe_cFv(); -extern "C" void ctrlBtk__10daNpcThe_cFv(); -extern "C" void setAttnPos__10daNpcThe_cFv(); -extern "C" void lookat__10daNpcThe_cFv(); -extern "C" bool drawDbgInfo__10daNpcThe_cFv(); -extern "C" void func_80AFB490(void* _this, s16); -extern "C" void __sinit_d_a_npc_the_cpp(); -extern "C" void __dt__18daNpcF_ActorMngr_cFv(); -extern "C" void __ct__18daNpcF_ActorMngr_cFv(); -extern "C" void __dt__15daNpcF_Lookat_cFv(); -extern "C" void __dt__5csXyzFv(); -extern "C" void __ct__5csXyzFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __dt__8daNpcF_cFv(); -extern "C" void __ct__8daNpcF_cFv(); -extern "C" void __dt__12dBgS_AcchCirFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__12J3DFrameCtrlFv(); -extern "C" void setCollisions__8daNpcF_cFv(); -extern "C" void drawOtherMdls__8daNpcF_cFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz(); -extern "C" void adjustShapeAngle__10daNpcThe_cFv(); -extern "C" void __dt__16daNpcThe_Param_cFv(); -extern "C" static void func_80AFBDE8(); -extern "C" static void func_80AFBDF0(); -extern "C" u8 const m__16daNpcThe_Param_c[108]; -extern "C" extern char const* const d_a_npc_the__stringBase0; -extern "C" void* mEvtCutNameList__10daNpcThe_c[4]; -extern "C" u8 mEvtCutList__10daNpcThe_c[48]; -static cPhs__Step daNpcThe_Create(void*); -static int daNpcThe_Delete(void*); -static int daNpcThe_Execute(void*); -static int daNpcThe_IsDelete(void*); -static int daNpcThe_Draw(void*); +#if DEBUG +daNpcThe_HIO_c::daNpcThe_HIO_c() { + m = daNpcThe_Param_c::m; +} -// -// External References: -// +void daNpcThe_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // TODO +} -extern "C" void changeBckOnly__13mDoExt_bckAnmFP15J3DAnmTransform(); -extern "C" void -__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); -extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c(); -extern "C" void fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs(); -extern "C" void fopAcM_createItemForPresentDemo__FPC4cXyziUciiPC5csXyzPC4cXyz(); -extern "C" void fpcSch_JudgeForPName__FPvPv(); -extern "C" void getLayerNo__14dComIfG_play_cFi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGs_wolfeye_effect_check__Fv(); -extern "C" void isEventBit__11dSv_event_cCFUs(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void reset__14dEvt_control_cFPv(); -extern "C" void setPtI_Id__14dEvt_control_cFUi(); -extern "C" void setObjectArchive__16dEvent_manager_cFPc(); -extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc(); -extern "C" void endCheck__16dEvent_manager_cFs(); -extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci(); -extern "C" void getIsAddvance__16dEvent_manager_cFi(); -extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii(); -extern "C" void getMyNowCutName__16dEvent_manager_cFi(); -extern "C" void cutEnd__16dEvent_manager_cFi(); -extern "C" void ChkPresentEnd__16dEvent_manager_cFv(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWallR__12dBgS_AcchCirFf(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __ct__11dBgS_LinChkFv(); -extern "C" void __dt__11dBgS_LinChkFv(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void initialize__18daNpcF_ActorMngr_cFv(); -extern "C" void entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c(); -extern "C" void remove__18daNpcF_ActorMngr_cFv(); -extern "C" void getActorP__18daNpcF_ActorMngr_cFv(); -extern "C" void initialize__15daNpcF_MatAnm_cFv(); -extern "C" void initialize__15daNpcF_Lookat_cFv(); -extern "C" void setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz(); -extern "C" void calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii(); -extern "C" void execute__8daNpcF_cFv(); -extern "C" void draw__8daNpcF_cFiifP11_GXColorS10i(); -extern "C" void srchAttnActor1__8daNpcF_cFPvPv(); -extern "C" void setMtx__8daNpcF_cFv(); -extern "C" void setMtx2__8daNpcF_cFv(); -extern "C" void initialize__8daNpcF_cFv(); -extern "C" void getTrnsfrmKeyAnmP__8daNpcF_cFPci(); -extern "C" void getTexPtrnAnmP__8daNpcF_cFPci(); -extern "C" void getTexSRTKeyAnmP__8daNpcF_cFPci(); -extern "C" void setMcaMorfAnm__8daNpcF_cFP18J3DAnmTransformKeyffiii(); -extern "C" void setBckAnm__8daNpcF_cFP15J3DAnmTransformfiiib(); -extern "C" void setBtpAnm__8daNpcF_cFP16J3DAnmTexPatternP12J3DModelDatafi(); -extern "C" void setBtkAnm__8daNpcF_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi(); -extern "C" void setEnvTevColor__8daNpcF_cFv(); -extern "C" void setRoomNo__8daNpcF_cFv(); -extern "C" void playExpressionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData(); -extern "C" void playMotionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData(); -extern "C" void setLookatMtx__8daNpcF_cFiPif(); -extern "C" void ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci(); -extern "C" void orderEvent__8daNpcF_cFiPcUsUsUcUs(); -extern "C" void initTalk__8daNpcF_cFiPP10fopAc_ac_c(); -extern "C" void talkProc__8daNpcF_cFPiiPP10fopAc_ac_c(); -extern "C" void step__8daNpcF_cFsiii(); -extern "C" void getDistTableIdx__8daNpcF_cFii(); -extern "C" void getEvtAreaTagP__8daNpcF_cFii(); -extern "C" void getAttnActorP__8daNpcF_cFiPFPvPv_Pvffffsii(); -extern "C" void chkFindPlayer2__8daNpcF_cFis(); -extern "C" void daNpcF_chkEvtBit__FUl(); -extern "C" void daNpcF_offTmpBit__FUl(); -extern "C" void dKy_darkworld_check__Fv(); -extern "C" void __ct__10dMsgFlow_cFv(); -extern "C" void __dt__10dMsgFlow_cFv(); -extern "C" void getEventId__10dMsgFlow_cFPi(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_atan2s__Fff(); -extern "C" void __ct__11cBgS_GndChkFv(); -extern "C" void __dt__11cBgS_GndChkFv(); -extern "C" void __dt__13cBgS_PolyInfoFv(); -extern "C" void __dt__8cM3dGCirFv(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void __ct__10Z2CreatureFv(); -extern "C" void __dt__10Z2CreatureFv(); -extern "C" void init__10Z2CreatureFP3VecP3VecUcUc(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void init__12J3DFrameCtrlFs(); -extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs(); -extern "C" void initialize__14J3DMaterialAnmFv(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void __ptmf_test(); -extern "C" void __ptmf_cmpr(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */]; -extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" u8 mCcDCyl__8daNpcF_c[68]; -extern "C" extern void* __vt__8daNpcF_c[18]; -extern "C" extern void* __vt__15daNpcF_MatAnm_c[4 + 6 /* padding */]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern void* __vt__14J3DMaterialAnm[4]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mCurrentMtx__6J3DSys[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz4cXyz(); -extern "C" void __register_global_object(); - -// -// Declarations: -// +void daNpcThe_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif /* 80AFC67C-80AFC680 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpcThe_Param_c l_HIO; +NPC_THE_HIO_CLASS l_HIO; /* 80AFC1F0-80AFC200 000020 0010+00 1/1 0/0 0/0 .data l_bmdGetParamList */ static daNpc_GetParam1 l_bmdGetParamList[2] = { @@ -332,7 +150,10 @@ static char* l_resNames[4] = { /* 80AFC390-80AFC3A0 0001C0 0010+00 0/2 0/0 0/0 .data l_evtGetParamList */ static int l_evtGetParamList[4] = { - 0, 3, 3, 0, + 0, + 3, + 3, + 0, }; /* 80AFC3A0-80AFC3B0 -00001 0010+00 0/2 0/0 0/0 .data l_evtNames */ @@ -365,14 +186,11 @@ int daNpcThe_c::Draw() { mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); ActionFn action_test = &test; int is_test = mpActionFn == action_test; - return draw(is_test, false, daNpcThe_Param_c::m.mShadowDepth, NULL, false); + return draw(is_test, false, mpHIO->m.common.real_shadow_size, NULL, false); } /* 80AF76CC-80AF7850 0000EC 0184+00 1/1 0/0 0/0 .text __ct__10daNpcThe_cFv */ -// NONMATCHING daNpcF_c constructor needs to not be inlined -daNpcThe_c::daNpcThe_c() { - /* empty function */ -} +daNpcThe_c::daNpcThe_c() {} /* 80AF78E0-80AF7AE0 000300 0200+00 1/0 0/0 0/0 .text __dt__10daNpcThe_cFv */ daNpcThe_c::~daNpcThe_c() { @@ -384,55 +202,18 @@ daNpcThe_c::~daNpcThe_c() { } } -/* 80AFBE0C-80AFBE78 000000 006C+00 11/11 0/0 0/0 .rodata m__16daNpcThe_Param_c */ -daNpcThe_Param_c::param const daNpcThe_Param_c::m = { - 220.0f, // mAttnOffsetY - -3.0f, // mGravity - 1.0f, // mScale - 400.0f, // mShadowDepth - 255.0f, // mCcWeight - 200.0f, // mCylH - 35.0f, // mWallH - 40.0f, // mWallR - 0.0f, // mBodyUpAngle - -20.0f, // mBodyDownAngle - 10.0f, // mBodyLeftAngle - -10.0f, // mBodyRightAngle - 30.0f, // mHeadUpAngle - -20.0f, // mHeadDownAngle - 45.0f, // mHeadLeftAngle - -45.0f, // mHeadRightAngle - 0.6f, // mNeckAngleScl - 12.0f, // mMorfFrames - 3, // mSpeakDistIdx - 6, // mSpeakAngleIdx - 5, // mTalkDistIdx - 6, // mTalkAngleIdx - 80.0f, // mAttnFovY - 500.0f, // mAttnRadius - 300.0f, // mAttnUpperY - -300.0f, // mAttnLowerY - 60, - 8, // mDamageTimer - 0, // mTestExpression - 0, // mTestMotion - 0, // mTestLookMode - false, // mTest -}; - int daNpcThe_c::CreateHeap() { J3DModelData* model_data = NULL; mTwilight = dKy_darkworld_check(); int bmd_get_idx = mTwilight ? 1 : 0; if (l_bmdGetParamList[bmd_get_idx].fileIdx >= 0) { - model_data = static_cast(dComIfG_getObjectRes( - l_resNames[l_bmdGetParamList[bmd_get_idx].arcIdx], - l_bmdGetParamList[bmd_get_idx].fileIdx - )); + model_data = static_cast( + dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[bmd_get_idx].arcIdx], + l_bmdGetParamList[bmd_get_idx].fileIdx)); } - mpMorf = new mDoExt_McaMorfSO(model_data, NULL, NULL, NULL, -1, 1.0f, 0, -1, - &mSound, 0x80000, 0x11020284); - + mpMorf = new mDoExt_McaMorfSO(model_data, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000, + 0x11020284); + if (mpMorf != NULL && mpMorf->getModel() == NULL) { mpMorf->stopZelAnime(); mpMorf = NULL; @@ -475,13 +256,13 @@ int daNpcThe_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { } mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no)); - + switch (joint_no) { - case 1: - case 3: - case 4: - setLookatMtx(joint_no, lookat_joints, daNpcThe_Param_c::m.mNeckAngleScl); - break; + case 1: + case 3: + case 4: + setLookatMtx(joint_no, lookat_joints, mpHIO->m.common.neck_rotation_ratio); + break; } i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get()); @@ -723,10 +504,10 @@ void daNpcThe_c::setMotionAnm(int i_idx, f32 i_morf) { } if (l_btkGetParamList[0].fileIdx >= 0) { - anm_tex = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[0].arcIdx], - l_btkGetParamList[0].fileIdx); + anm_tex = + getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx); } - + if (anm_tex != NULL) { if (setBtkAnm(anm_tex, mpMorf->getModel()->getModelData(), 1.0f, 2)) { mAnmFlags |= ANM_PAUSE_BTK | ANM_PLAY_BTK; @@ -743,19 +524,19 @@ void daNpcThe_c::setMotionAnm(int i_idx, f32 i_morf) { /* 80AFA338-80AFA6CC 002D58 0394+00 1/1 0/0 0/0 .text playExpression__10daNpcThe_cFv */ void daNpcThe_c::playExpression() { - daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat0[2] = {&dat0, NULL}; - daNpcF_anmPlayData dat1 = {ANM_F_SMILE, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat1 = {ANM_F_SMILE, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat1[2] = {&dat1, NULL}; - daNpcF_anmPlayData dat2 = {ANM_F_CHUCKLE, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat2 = {ANM_F_CHUCKLE, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat2[2] = {&dat2, NULL}; - daNpcF_anmPlayData dat3 = {ANM_F_TALK_B, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat3 = {ANM_F_TALK_B, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat3[2] = {&dat3, NULL}; - daNpcF_anmPlayData dat4 = {ANM_F_TALK_C, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat4 = {ANM_F_TALK_C, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat4[2] = {&dat4, NULL}; - daNpcF_anmPlayData dat5 = {ANM_F_LAUGH, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat5 = {ANM_F_LAUGH, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat5[2] = {&dat5, NULL}; - daNpcF_anmPlayData dat6 = {ANM_F_TALK_R, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat6 = {ANM_F_TALK_R, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData* pDat6[2] = {&dat6, NULL}; daNpcF_anmPlayData dat7 = {ANM_FH_TALK_R, 0.0f, 0}; daNpcF_anmPlayData* pDat7[2] = {&dat7, NULL}; @@ -769,23 +550,11 @@ void daNpcThe_c::playExpression() { daNpcF_anmPlayData* pDat11[2] = {&dat11, NULL}; daNpcF_anmPlayData dat12 = {ANM_FH_LAUGH, 0.0f, 0}; daNpcF_anmPlayData* pDat12[2] = {&dat12, NULL}; - daNpcF_anmPlayData dat13 = {ANM_NONE, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat13 = {ANM_NONE, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat13[1] = {&dat13}; daNpcF_anmPlayData** ppDat[14] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, - pDat5, - pDat6, - pDat7, - pDat8, - pDat9, - pDat10, - pDat11, - pDat12, - pDat13, + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, + pDat7, pDat8, pDat9, pDat10, pDat11, pDat12, pDat13, }; if (mExpression >= 0 && mExpression < 14) { playExpressionAnm(ppDat); @@ -794,56 +563,99 @@ void daNpcThe_c::playExpression() { /* 80AF9F94-80AFA338 0029B4 03A4+00 1/1 0/0 0/0 .text playMotion__10daNpcThe_cFv */ void daNpcThe_c::playMotion() { - daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {ANM_LOOK_A, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat1a = {ANM_LOOK_A, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat1b = {ANM_WAIT_LOOKING, 0.0f, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2a = {ANM_TO_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat2a = {ANM_TO_WAIT_B, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat2b = {ANM_WAIT_B, 0.0f, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3 = {ANM_WAIT_LOOKUP, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat3 = {ANM_WAIT_LOOKUP, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4a = {ANM_KUNE_TALK, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat4a = {ANM_KUNE_TALK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat4b = {ANM_KUNE_WAIT_B, 0.0f, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5 = {ANM_KUNE_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat5 = {ANM_KUNE_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6a = {ANM_KUNE_SHISHI, daNpcThe_Param_c::m.mMorfFrames, 1}; - daNpcF_anmPlayData dat6b = {ANM_KUNE_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6a = {ANM_KUNE_SHISHI, mpHIO->m.common.morf_frame, 1}; + daNpcF_anmPlayData dat6b = {ANM_KUNE_WAIT_A, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {ANM_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat7 = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {ANM_KUNE_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat8 = {ANM_KUNE_WAIT_B, mpHIO->m.common.morf_frame, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9a = {ANM_TALK_R, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat9a = {ANM_TALK_R, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat9b = {ANM_TALKING_R, 0.0f, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - daNpcF_anmPlayData dat10a = {ANM_LOOK, daNpcThe_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat10a = {ANM_LOOK, mpHIO->m.common.morf_frame, 1}; daNpcF_anmPlayData dat10b = {ANM_WAIT_LOOKING, 0.0f, 0}; daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b}; daNpcF_anmPlayData** ppDat[11] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, - pDat5, - pDat6, - pDat7, - pDat8, - pDat9, - pDat10, + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, }; if (mMotion >= 0 && mMotion < 11) { playMotionAnm(ppDat); } } -/* 80AFC114-80AFC120 000308 000C+00 0/1 0/0 0/0 .rodata @4676 */ -static u8 const lit_4676[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; +/* 80AFB1C4-80AFB488 003BE4 02C4+00 1/1 0/0 0/0 .text lookat__10daNpcThe_cFv */ +void daNpcThe_c::lookat() { + fopAc_ac_c* actor = NULL; + J3DModel* model = mpMorf->getModel(); + + BOOL snap = false; + f32 body_angleX_min = mpHIO->m.common.body_angleX_min; + f32 body_angleX_max = mpHIO->m.common.body_angleX_max; + f32 body_angleY_min = mpHIO->m.common.body_angleY_min; + f32 body_angleY_max = mpHIO->m.common.body_angleY_max; + f32 head_angleX_min = mpHIO->m.common.head_angleX_min; + f32 head_angleX_max = mpHIO->m.common.head_angleX_max; + f32 head_angleY_min = mpHIO->m.common.head_angleY_min; + f32 head_angleY_max = mpHIO->m.common.head_angleY_max; + + s16 angle_delta = mCurAngle.y - mOldAngle.y; + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; + + switch (mLookMode) { + case LOOK_RESET: + snap = true; + break; + case LOOK_PLAYER_TALK: + head_angleY_min = -80.0f; + head_angleY_max = 80.0f; + // fallthrough + case LOOK_PLAYER: + actor = daPy_getPlayerActorClass(); + break; + case LOOK_ACTOR: + actor = fopAcM_SearchByName(PROC_NPC_ZRC); + break; + case LOOK_ATTN: + break; + } + + if (actor != NULL) { + if (mLookMode == LOOK_ACTOR) { + mLookPos = actor->eyePos; + } else { + mLookPos = actor->attention_info.position; + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK && mLookMode != LOOK_ATTN) + { + mLookPos.y -= 40.0f; + } + } + mLookat.setAttnPos(&mLookPos); + } else { + mLookat.setAttnPos(NULL); + } + + mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f, + 0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, 0); +} /* 80AF8744-80AF8B0C 001164 03C8+00 1/0 0/0 0/0 .text wait__10daNpcThe_cFPv */ BOOL daNpcThe_c::wait(void* param_0) { @@ -912,11 +724,10 @@ BOOL daNpcThe_c::wait(void* param_0) { } if (mCurAngle.y == home.angle.y) { - fopAc_ac_c* actor = - getAttnActorP(mActorMngr[0].getActorP() != NULL, srchAttnActor1, - daNpcThe_Param_c::m.mAttnRadius, daNpcThe_Param_c::m.mAttnUpperY, - daNpcThe_Param_c::m.mAttnLowerY, daNpcThe_Param_c::m.mAttnFovY, - shape_angle.y, 120, 1); + fopAc_ac_c* actor = getAttnActorP( + mActorMngr[0].getActorP() != NULL, srchAttnActor1, + mpHIO->m.common.search_distance, mpHIO->m.common.search_height, + mpHIO->m.common.search_depth, mpHIO->m.common.fov, shape_angle.y, 120, 1); if (actor != NULL) { mActorMngr[1].entry(actor); setLookMode(LOOK_ATTN); @@ -1008,12 +819,12 @@ BOOL daNpcThe_c::talk(void* param_0) { bvar1 = true; } else { if (mType == TYPE_KAKARIKO && - (mpMorf->getAnm() == getTrnsfrmKeyAnmP( - l_resNames[l_bckGetParamList[24].arcIdx], l_bckGetParamList[24].fileIdx) - || mpMorf->getAnm() == getTrnsfrmKeyAnmP( - l_resNames[l_bckGetParamList[25].arcIdx], l_bckGetParamList[25].fileIdx) - || mpMorf->getAnm() == getTrnsfrmKeyAnmP( - l_resNames[l_bckGetParamList[26].arcIdx], l_bckGetParamList[26].fileIdx))) + (mpMorf->getAnm() == getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[24].arcIdx], + l_bckGetParamList[24].fileIdx) || + mpMorf->getAnm() == getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[25].arcIdx], + l_bckGetParamList[25].fileIdx) || + mpMorf->getAnm() == getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[26].arcIdx], + l_bckGetParamList[26].fileIdx))) { setLookMode(LOOK_NONE); } else { @@ -1045,11 +856,11 @@ BOOL daNpcThe_c::talk(void* param_0) { } int item_no = 0; if (mFlow.getEventId(&item_no) == 1) { - mItemID = fopAcM_createItemForPresentDemo(¤t.pos, item_no, - 0, -1, -1, NULL, NULL); + mItemID = fopAcM_createItemForPresentDemo(¤t.pos, item_no, 0, -1, -1, + NULL, NULL); if (mItemID != -1) { - s16 event_id = dComIfGp_getEventManager() - .getEventIdx(this, "DEFAULT_GETITEM", 0xff); + s16 event_id = dComIfGp_getEventManager().getEventIdx( + this, "DEFAULT_GETITEM", 0xff); dComIfGp_getEvent().reset(this); fopAcM_orderChangeEventId(this, event_id, 1, 0xffff); field_0x9ec = true; @@ -1100,11 +911,11 @@ BOOL daNpcThe_c::test(void* param_0) { case 2: attention_info.flags = 0; - if (mExpression != daNpcThe_Param_c::m.mTestExpression) { - setExpression(daNpcThe_Param_c::m.mTestExpression, daNpcThe_Param_c::m.mMorfFrames); + if (mExpression != mpHIO->m.common.face_expression) { + setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame); } - setMotion(daNpcThe_Param_c::m.mTestMotion, daNpcThe_Param_c::m.mMorfFrames, false); - setLookMode(daNpcThe_Param_c::m.mTestLookMode); + setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, false); + setLookMode(mpHIO->m.common.look_mode); break; case 3: @@ -1160,9 +971,9 @@ static cPhs__Step daNpcThe_Create(void* i_this) { /* 80AF9358-80AF9748 001D78 03F0+00 1/1 0/0 0/0 .text create__10daNpcThe_cFv */ cPhs__Step daNpcThe_c::create() { fopAcM_ct(this, daNpcThe_c); - + mType = getTypeFromParam(); - + int flow_id = home.angle.x; if (flow_id != 0xffff) { mFlowID = flow_id; @@ -1171,10 +982,11 @@ cPhs__Step daNpcThe_c::create() { } if (mType == TYPE_KAKARIKO - /* dSv_event_flag_c::M_035 - Cutscene - [cutscene: 35] after carriage guarding event */ + /* dSv_event_flag_c::M_035 - Cutscene - [cutscene: 35] after carriage guarding event */ && (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[68]) - /* dSv_event_flag_c::M_045 - Lakebed Temple - Lakebed Temple clear */ - || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[78]))) { + /* dSv_event_flag_c::M_045 - Lakebed Temple - Lakebed Temple clear */ + || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[78]))) + { return cPhs_ERROR_e; } @@ -1215,19 +1027,19 @@ cPhs__Step daNpcThe_c::create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox2(this, mpMorf->getModel()->getModelData()); mSound.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcThe_Param_c::m.mWallR, daNpcThe_Param_c::m.mWallH); + mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcThe_Param_c::m.mCcWeight, 0, this); + mCcStts.Init(mpHIO->m.common.weight, 0, this); mColCyl.Set(mCcDCyl); mColCyl.SetStts(&mCcStts); mColCyl.SetTgType(0); mColCyl.SetTgSPrm(0); - mColCyl.SetH(daNpcThe_Param_c::m.mCylH); - mColCyl.SetR(daNpcThe_Param_c::m.mWallR); + mColCyl.SetH(mpHIO->m.common.height); + mColCyl.SetR(mpHIO->m.common.width); mGndChk = mAcch.m_gnd; mGroundH = mAcch.GetGroundH(); @@ -1288,7 +1100,6 @@ static int daNpcThe_Draw(void* i_this) { return static_cast(i_this)->Draw(); } - /* 80AF99BC-80AF99C4 0023DC 0008+00 1/0 0/0 0/0 .text daNpcThe_IsDelete__FPv */ static int daNpcThe_IsDelete(void* i_this) { return 1; @@ -1302,7 +1113,7 @@ void daNpcThe_c::setParam() { ActionFn next_action = mpNextActionFn; mpNextActionFn = NULL; - if (daNpcThe_Param_c::m.mTest) { + if (mpHIO->m.common.debug_mode_ON) { mpNextActionFn = &test; } else if (mTwilight) { mpNextActionFn = &waitTW; @@ -1315,8 +1126,8 @@ void daNpcThe_c::setParam() { } } - int speak_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : daNpcThe_Param_c::m.mSpeakAngleIdx; - int talk_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : daNpcThe_Param_c::m.mTalkAngleIdx; + int speak_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : mpHIO->m.common.talk_angle; + int talk_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : mpHIO->m.common.attention_angle; attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e; if (isSneaking()) { attention_info.distances[fopAc_attn_LOCK_e] = 0x4e; @@ -1325,29 +1136,28 @@ void daNpcThe_c::setParam() { attention_info.flags |= fopAc_AttnFlag_UNK_0x800000; } else { if (!strcmp(dComIfGp_getStartStageName(), "R_SP116")) { - attention_info.distances[fopAc_attn_LOCK_e] - = getDistTableIdx(daNpcThe_Param_c::m.mTalkDistIdx, talk_angle_idx); - attention_info.distances[fopAc_attn_TALK_e] - = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] - = getDistTableIdx(daNpcThe_Param_c::m.mSpeakDistIdx + 1, speak_angle_idx); + attention_info.distances[fopAc_attn_LOCK_e] = + getDistTableIdx(mpHIO->m.common.attention_distance, talk_angle_idx); + attention_info.distances[fopAc_attn_TALK_e] = + attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = + getDistTableIdx(mpHIO->m.common.talk_distance + 1, speak_angle_idx); } else { - attention_info.distances[fopAc_attn_LOCK_e] - = getDistTableIdx(daNpcThe_Param_c::m.mTalkDistIdx, talk_angle_idx); - attention_info.distances[fopAc_attn_TALK_e] - = attention_info.distances[fopAc_attn_LOCK_e]; - attention_info.distances[fopAc_attn_SPEAK_e] - = getDistTableIdx(daNpcThe_Param_c::m.mSpeakDistIdx, speak_angle_idx); + attention_info.distances[fopAc_attn_LOCK_e] = + getDistTableIdx(mpHIO->m.common.attention_distance, talk_angle_idx); + attention_info.distances[fopAc_attn_TALK_e] = + attention_info.distances[fopAc_attn_LOCK_e]; + attention_info.distances[fopAc_attn_SPEAK_e] = + getDistTableIdx(mpHIO->m.common.talk_distance, speak_angle_idx); } } - scale.setall(daNpcThe_Param_c::m.mScale); - mAcchCir.SetWallR(daNpcThe_Param_c::m.mWallR); - mAcchCir.SetWallH(daNpcThe_Param_c::m.mWallH); - gravity = daNpcThe_Param_c::m.mGravity; + scale.setall(mpHIO->m.common.scale); + mAcchCir.SetWallR(mpHIO->m.common.width); + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + gravity = mpHIO->m.common.gravity; } - /* 80AF9CF0-80AF9F94 002710 02A4+00 1/0 0/0 0/0 .text main__10daNpcThe_cFv */ // NONMATCHING dComIfG_gameInfo issues BOOL daNpcThe_c::main() { @@ -1370,9 +1180,8 @@ BOOL daNpcThe_c::main() { mItemID = -1; } - if (!daNpcThe_Param_c::m.mTest - && (dComIfGp_event_runCheck() == FALSE - || (mOrderNewEvt && dComIfGp_getEvent().isOrderOK()))) + if (!mpHIO->m.common.debug_mode_ON && + (dComIfGp_event_runCheck() == FALSE || (mOrderNewEvt && dComIfGp_getEvent().isOrderOK()))) { if (mOrderEvtNo != 0 && l_resNames[l_evtGetParamList[mOrderEvtNo]] != NULL) { eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo]]); @@ -1421,7 +1230,8 @@ BOOL daNpcThe_c::doEvent() { dEvent_manager_c& event_manager = dComIfGp_getEventManager(); if (eventInfo.checkCommandTalk()) { if (mTwilight) { - /* dSv_event_flag_c::F_0277 - Castle Town - Hear conversation between Telma and Ilia in Telma's shop (Twilight) */ + /* dSv_event_flag_c::F_0277 - Castle Town - Hear conversation between Telma and Ilia + * in Telma's shop (Twilight) */ if (daNpcF_chkEvtBit(0x115)) { mOrderEvtNo = 2; } else { @@ -1454,8 +1264,8 @@ BOOL daNpcThe_c::doEvent() { setAction(&talk); } } else { - s16 event_idx - = dComIfGp_getEventManager().getEventIdx(this, "NO_RESPONSE", 0xff); + s16 event_idx = + dComIfGp_getEventManager().getEventIdx(this, "NO_RESPONSE", 0xff); dComIfGp_getEvent().reset(this); fopAcM_orderChangeEventId(this, event_idx, 1, 0xffff); } @@ -1484,8 +1294,9 @@ BOOL daNpcThe_c::doEvent() { } ret = true; } - if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 - && event_manager.endCheck(mEventIdx)) { + if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && + event_manager.endCheck(mEventIdx)) + { dComIfGp_event_reset(); mOrderEvtNo = 0; mEventIdx = -1; @@ -1514,7 +1325,6 @@ BOOL daNpcThe_c::doEvent() { } /* 80AFADEC-80AFAEC8 00380C 00DC+00 1/0 0/0 0/0 .text ctrlBtk__10daNpcThe_cFv */ -// NONMATCHING somehow this needs to not inline TSinCosTable<13,f32>::sinShort BOOL daNpcThe_c::ctrlBtk() { if (mpMatAnm != NULL) { J3DAnmTextureSRTKey* anm = NULL; @@ -1552,7 +1362,7 @@ void daNpcThe_c::setAttnPos() { mDoMtx_stack_c::multVec(&vec1, &vec1); mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &vec1); mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &vec1); - + cXyz* attn_pos = mLookat.getAttnPos(); if (attn_pos != NULL) { cXyz vec2 = *attn_pos - eyePos; @@ -1564,8 +1374,7 @@ void daNpcThe_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(current.pos.x, - current.pos.y + daNpcThe_Param_c::m.mAttnOffsetY, + attention_info.position.set(current.pos.x, current.pos.y + mpHIO->m.common.attention_offset, current.pos.z); if (!mHide) { @@ -1574,65 +1383,6 @@ void daNpcThe_c::setAttnPos() { } } -/* 80AFB1C4-80AFB488 003BE4 02C4+00 1/1 0/0 0/0 .text lookat__10daNpcThe_cFv */ -// NONMATCHING rodata problems -void daNpcThe_c::lookat() { - fopAc_ac_c* actor = NULL; - J3DModel* model = mpMorf->getModel(); - BOOL snap = false; - f32 body_down_angle = daNpcThe_Param_c::m.mBodyDownAngle; - f32 body_up_angle = daNpcThe_Param_c::m.mBodyUpAngle; - f32 body_right_angle = daNpcThe_Param_c::m.mBodyRightAngle; - f32 body_left_angle = daNpcThe_Param_c::m.mBodyLeftAngle; - f32 head_down_angle = daNpcThe_Param_c::m.mHeadDownAngle; - f32 head_up_angle = daNpcThe_Param_c::m.mHeadUpAngle; - f32 head_right_angle = daNpcThe_Param_c::m.mHeadRightAngle; - f32 head_left_angle = daNpcThe_Param_c::m.mHeadLeftAngle; - s16 angle_delta = mCurAngle.y - mOldAngle.y; - cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; - csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; - - switch (mLookMode) { - case LOOK_RESET: - snap = true; - break; - case LOOK_PLAYER_TALK: - head_right_angle = -80.0f; - head_left_angle = 80.0f; - // fallthrough - case LOOK_PLAYER: - actor = daPy_getPlayerActorClass(); - break; - case LOOK_ACTOR: - actor = fopAcM_SearchByName(PROC_NPC_ZRC); - break; - case LOOK_ATTN: - break; - } - - if (actor != NULL) { - if (mLookMode == LOOK_ACTOR) { - mLookPos = actor->eyePos; - } else { - mLookPos = actor->attention_info.position; - if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK && mLookMode != LOOK_ATTN) - { - mLookPos.y -= 40.0f; - } - } - mLookat.setAttnPos(&mLookPos); - } else { - mLookat.setAttnPos(NULL); - } - - mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, - 0.0f, 0.0f, 0.0f, 0.0f, - head_down_angle, head_up_angle, head_right_angle, head_left_angle, - mCurAngle.y, lookat_pos); - mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, 0); -} - - /* 80AFB488-80AFB490 003EA8 0008+00 1/0 0/0 0/0 .text drawDbgInfo__10daNpcThe_cFv */ BOOL daNpcThe_c::drawDbgInfo() { return false; @@ -1640,10 +1390,8 @@ BOOL daNpcThe_c::drawDbgInfo() { /* 80AFC534-80AFC554 -00001 0020+00 1/0 0/0 0/0 .data daNpcThe_MethodTable */ static actor_method_class daNpcThe_MethodTable = { - (process_method_func)daNpcThe_Create, - (process_method_func)daNpcThe_Delete, - (process_method_func)daNpcThe_Execute, - (process_method_func)daNpcThe_IsDelete, + (process_method_func)daNpcThe_Create, (process_method_func)daNpcThe_Delete, + (process_method_func)daNpcThe_Execute, (process_method_func)daNpcThe_IsDelete, (process_method_func)daNpcThe_Draw, }; diff --git a/src/d/actor/d_a_npc_uri.cpp b/src/d/actor/d_a_npc_uri.cpp index 3f253d8854a..cb0831a39b5 100644 --- a/src/d/actor/d_a_npc_uri.cpp +++ b/src/d/actor/d_a_npc_uri.cpp @@ -1,14 +1,84 @@ /** -* @file d_a_npc_uri.cpp + * @file d_a_npc_uri.cpp * */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep -#include "d/actor/d_a_npc_uri.h" #include "Z2AudioLib/Z2Instances.h" +#include "d/actor/d_a_npc_uri.h" #include "m_Do/m_Do_graphic.h" +/* 80B2CE14-80B2CEC0 000000 00AC+00 14/14 0/0 0/0 .rodata m__17daNpc_Uri_Param_c */ +const daNpc_Uri_HIOParam daNpc_Uri_Param_c::m = { + 200.0f, // attention_offset + -3.0f, // gravity + 1.0f, // scale + 500.0f, // real_shadow_size + 255.0f, // weight + 180.0f, // height + 35.0f, // knee_length + 30.0f, // width + 0.0f, // body_angleX_max + 0.0f, // body_angleX_min + 10.0f, // body_angleY_max + -10.0f, // body_angleY_min + 30.0f, // head_angleX_max + -10.0f, // head_angleX_min + 45.0f, // head_angleY_max + -45.0f, // head_angleY_min + 0.6f, // neck_rotation_ratio + 20.0f, // morf_frame + 3, // talk_distance + 6, // talk_angle + 5, // attention_distance + 6, // attention_angle + 110.0f, // fov + 400.0f, // search_distance + 300.0f, // search_height + -300.0f, // search_depth + 60, // attention_time + 8, // damage_time + 0, // face_expression + 0, // motion + 0, // look_mode + 0, // debug_mode_ON + 0, // debug_info_ON + 4.0f, // expression_morf_frame + 0.0f, // box_min_x + 0.0f, // box_min_y + 0.0f, // box_min_z + 0.0f, // box_max_x + 0.0f, // box_max_y + 0.0f, // box_max_z + 0.0f, // box_offset + 120, // field_0x8c + 120, // field_0x8e + 60, // field_0x90 + 180, // field_0x92 + 10, // field_0x94 + 0, // field_0x96 + 350.0f, // field_0x98 + 400.0f, // field_0x9c + 3000.0f, // field_0xa0 + 200.0f, // field_0xa4 + 600.0f, // field_0xa8 +}; + +#if DEBUG +daNpc_Uri_HIO_c::daNpc_Uri_HIO_c() { + m = daNpc_Uri_Param_c::m; +} + +void daNpc_Uri_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) { + // TODO +} + +void daNpc_Uri_HIO_c::genMessage(JORMContext* ctext) { + // TODO +} +#endif + /* 80B2D068-80B2D078 000020 0010+00 1/1 0/0 0/0 .data l_bmdData */ static int l_bmdData[2][2] = {{12, 1}, {33, 2}}; @@ -164,54 +234,6 @@ daNpc_Uri_c::~daNpc_Uri_c() { deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList); } -/* ############################################################################################## */ -/* 80B2CE14-80B2CEC0 000000 00AC+00 14/14 0/0 0/0 .rodata m__17daNpc_Uri_Param_c */ -daNpc_Uri_HIOParam const daNpc_Uri_Param_c::m = { - 200.0f, // field_0x00 - -3.0f, // field_0x04 - 1.0f, // field_0x08 - 500.0f, // field_0x0c - 255.0f, // field_0x10 - 180.0f, // field_0x14 - 35.0f, // field_0x18 - 30.0f, // field_0x1c - 0.0f, // field_0x20 - 0.0f, // field_0x24 - 10.0f, // field_0x28 - -10.0f, // field_0x2c - 30.0f, // field_0x30 - -10.0f, // field_0x34 - 45.0f, // field_0x38 - -45.0f, // field_0x3c - 0.6f, // field_0x40 - 20.0f, // field_0x44 - 3, // field_0x48 - 6, // field_0x4a - 5, // field_0x4c - 6, // field_0x4e - 110.0f, // field_0x50 - 400.0f, // field_0x54 - 300.0f, // field_0x58 - -300.0f, // field_0x5c - 60, // field_0x60 - 8, // field_0x62 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 4.0f, // field_0x6c - 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, - 120, // field_0x8c - 120, // field_0x8e - 60, // field_0x90 - 180, // field_0x92 - 10, // field_0x94 - 0, // field_0x96 - 350.0f, // field_0x98 - 400.0f, // field_0x9c - 3000.0f, // field_0xa0 - 200.0f, // field_0xa4 - 600.0f, // field_0xa8 -}; - /* 80B268F8-80B26BE4 000238 02EC+00 1/1 0/0 0/0 .text create__11daNpc_Uri_cFv */ int daNpc_Uri_c::create() { static const int heapSize[] = {0, 0x3F20, 0, 0, 0x3740, 0x3740, 0}; @@ -242,7 +264,7 @@ int daNpc_Uri_c::create() { reset(); mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); - mCcStts.Init(daNpc_Uri_Param_c::m.field_0x10, 0, this); + mCcStts.Init(daNpc_Uri_Param_c::m.common.weight, 0, this); mCyl.Set(mCcDCyl); mCyl.SetStts(&mCcStts); mCyl.SetTgHitCallback(tgHitCallBack); @@ -433,7 +455,8 @@ void daNpc_Uri_c::reset() { field_0xfd8 = cStack_44; field_0xfe4.setall(0); field_0xfe4.y = cLib_targetAngleY(&acStack_38, &field_0xfd8); - /* dSv_event_flag_c::F_0032 - Ordon Ranch - 3rd day - First convo with fado (before forced goat chase) */ + /* dSv_event_flag_c::F_0032 - Ordon Ranch - 3rd day - First convo with fado (before forced + * goat chase) */ if (daNpcT_chkEvtBit(0x25)) { setPos(cStack_44); cStack_a0.y = cLib_targetAngleY(&acStack_38, &cStack_44); @@ -446,23 +469,26 @@ void daNpc_Uri_c::reset() { cStack_a0.y = cLib_targetAngleY(&acStack_38, &cStack_44); mPath.setNextIdx(mPath.getNumPnts()); } - /* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail) */ + /* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail) + */ if (daNpcT_chkEvtBit(0x20) - /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ + /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ || daNpcT_chkEvtBit(0x1E) - /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ - || daNpcT_chkEvtBit(0x92) ) + /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ + || daNpcT_chkEvtBit(0x92)) { setPos(home.pos); - /* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail) */ + /* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or + * fail) */ if (daNpcT_chkEvtBit(0x20)) { field_0x100d = 1; } else { - /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ + /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ if (daNpcT_chkEvtBit(0x1E) - /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ - || daNpcT_chkEvtBit(0x92)) { + /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ + || daNpcT_chkEvtBit(0x92)) + { field_0x100f = 1; } } @@ -480,7 +506,8 @@ void daNpc_Uri_c::reset() { /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ daNpcT_offTmpBit(7); - /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */ + /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night + */ dComIfGs_offTmpBit(0x1308); setAngle(cStack_a0); } @@ -509,10 +536,10 @@ void daNpc_Uri_c::setParam() { selectAction(); srchActors(); - s16 sVar7 = daNpc_Uri_Param_c::m.field_0x48; - s16 sVar6 = daNpc_Uri_Param_c::m.field_0x4a; - s16 sVar5 = daNpc_Uri_Param_c::m.field_0x4c; - s16 sVar4 = daNpc_Uri_Param_c::m.field_0x4e; + s16 sVar7 = mpHIO->m.common.talk_distance; + s16 sVar6 = mpHIO->m.common.talk_angle; + s16 sVar5 = mpHIO->m.common.attention_distance; + s16 sVar4 = mpHIO->m.common.attention_angle; if (mType == TYPE_1) { sVar6 = 4; sVar4 = 4; @@ -528,18 +555,17 @@ void daNpc_Uri_c::setParam() { attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e]; attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(sVar7, sVar6); attention_info.flags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e); - scale.set(daNpc_Uri_Param_c::m.field_0x08, daNpc_Uri_Param_c::m.field_0x08, - daNpc_Uri_Param_c::m.field_0x08); - mCcStts.SetWeight(daNpc_Uri_Param_c::m.field_0x10); - mCylH = daNpc_Uri_Param_c::m.field_0x14; - mWallR = daNpc_Uri_Param_c::m.field_0x1c; - mAttnFovY = daNpc_Uri_Param_c::m.field_0x50; + scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale); + mCcStts.SetWeight(mpHIO->m.common.weight); + mCylH = mpHIO->m.common.height; + mWallR = mpHIO->m.common.width; + mAttnFovY = mpHIO->m.common.fov; mAcchCir.SetWallR(mWallR); - mAcchCir.SetWallH(daNpc_Uri_Param_c::m.field_0x18); - mRealShadowSize = daNpc_Uri_Param_c::m.field_0x0c; - gravity = daNpc_Uri_Param_c::m.field_0x04; - mExpressionMorfFrame = daNpc_Uri_Param_c::m.field_0x6c; - mMorfFrames = daNpc_Uri_Param_c::m.field_0x44; + mAcchCir.SetWallH(mpHIO->m.common.knee_length); + mRealShadowSize = mpHIO->m.common.real_shadow_size; + gravity = mpHIO->m.common.gravity; + mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame; + mMorfFrames = mpHIO->m.common.morf_frame; if (mType == TYPE_4) { mAcch.SetGrndNone(); mAcch.SetWallNone(); @@ -562,13 +588,15 @@ BOOL daNpc_Uri_c::checkChangeEvt() { switch (mType) { case TYPE_1: - /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ + /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ if (!daNpcT_chkEvtBit(0x1E) - /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ - && !daNpcT_chkEvtBit(0x92)) { - /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ + /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ + && !daNpcT_chkEvtBit(0x92)) + { + /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ if (!daNpcT_chkTmpBit(0x7)) { - /* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore finding basket */ + /* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore + * finding basket */ if (daNpcT_chkEvtBit(0x24)) { mEvtNo = 4; } else { @@ -577,7 +605,8 @@ BOOL daNpc_Uri_c::checkChangeEvt() { evtChange(); return TRUE; } - /* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail) */ + /* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass + * or fail) */ } else if (!daNpcT_chkEvtBit(0x20) && field_0x100b == 0) { mEvtNo = 7; evtChange(); @@ -585,10 +614,13 @@ BOOL daNpc_Uri_c::checkChangeEvt() { } break; case TYPE_4: - /* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit - Reuinion with Colin et al. */ + /* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit - + * Reuinion with Colin et al. */ if (daNpcT_chkEvtBit(0x3D) - /* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time (first forced conversation) */ - && !daNpcT_chkEvtBit(0x14A)) { + /* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time + (first forced conversation) */ + && !daNpcT_chkEvtBit(0x14A)) + { mEvtNo = 10; evtChange(); return TRUE; @@ -714,7 +746,7 @@ void daNpc_Uri_c::beforeMove() { } /* 80B2DD64-80B2DD68 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */ -static daNpc_Uri_Param_c l_HIO; +NPC_URI_HIO_CLASS l_HIO; /* 80B27FD8-80B28318 001918 0340+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_Uri_cFv */ void daNpc_Uri_c::setAttnPos() { @@ -724,9 +756,12 @@ void daNpc_Uri_c::setAttnPos() { f32 dVar6 = cM_s2rad(mCurAngle.y - field_0xd7e.y); mJntAnm.setParam(this, mpMorf[0]->getModel(), &acStack_3c, getBackboneJointNo(), - getNeckJointNo(), getHeadJointNo(), l_HIO.m.field_0x24, l_HIO.m.field_0x20, - l_HIO.m.field_0x2c, l_HIO.m.field_0x28, l_HIO.m.field_0x34, l_HIO.m.field_0x30, - l_HIO.m.field_0x3c, l_HIO.m.field_0x38, l_HIO.m.field_0x40, dVar6, NULL); + getNeckJointNo(), getHeadJointNo(), mpHIO->m.common.body_angleX_min, + mpHIO->m.common.body_angleX_max, mpHIO->m.common.body_angleY_min, + mpHIO->m.common.body_angleY_max, mpHIO->m.common.head_angleX_min, + mpHIO->m.common.head_angleX_max, mpHIO->m.common.head_angleY_min, + mpHIO->m.common.head_angleY_max, mpHIO->m.common.neck_rotation_ratio, dVar6, + NULL); mJntAnm.calcJntRad(0.2f, 1.0f, dVar6); setMtx(); @@ -737,7 +772,7 @@ void daNpc_Uri_c::setAttnPos() { mJntAnm.setEyeAngleY(eyePos, mCurAngle.y + field_0xd8a.y, 1, 1.0f, 0); acStack_3c.set(0.0f, 0.0f, 0.0f); - acStack_3c.y = l_HIO.m.field_0x00; + acStack_3c.y = mpHIO->m.common.attention_offset; if (field_0x100d != 0) { if (mType == TYPE_1) { @@ -907,7 +942,7 @@ int daNpc_Uri_c::selectAction() { field_0xfc0[0] = &daNpc_Uri_c::sitWait; } else { if (field_0x100e != NULL) { - /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ + /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ if (daNpcT_chkTmpBit(7) && field_0x100f == NULL) { field_0xfc0[0] = &daNpc_Uri_c::walk; } else { @@ -975,16 +1010,16 @@ int daNpc_Uri_c::getTutorialCond(cXyz param_1) { cXyz cStack_5c; local_44 = mPath.getPntPos(mPath.getNumPnts() - 1); - if (local_44.absXZ(param_1) < daNpc_Uri_Param_c::m.field_0x98) { + if (local_44.absXZ(param_1) < mpHIO->m.field_0x98) { return 9; } f32 fVar11 = (param_1 - current.pos).absXZ(); s16 sVar8 = cLib_targetAngleY(¤t.pos, ¶m_1) - mCurAngle.y; s16 uVar5 = abs(sVar8); - if (daNpc_Uri_Param_c::m.field_0xa4 < fVar11 && ((u32)uVar5 & 0xFFFF) > 0x4000) { - if (daNpc_Uri_Param_c::m.field_0xa8 < fVar11) { - field_0x1000 = daNpc_Uri_Param_c::m.field_0xa8 - 100.0f; + if (mpHIO->m.field_0xa4 < fVar11 && ((u32)uVar5 & 0xFFFF) > 0x4000) { + if (mpHIO->m.field_0xa8 < fVar11) { + field_0x1000 = mpHIO->m.field_0xa8 - 100.0f; return 5; } if (field_0x1009 != NULL) { @@ -996,13 +1031,13 @@ int daNpc_Uri_c::getTutorialCond(cXyz param_1) { for (i = 0; i < mPath.getNumPnts() - 1; i++) { local_44 = mPath.getPntPos(i); local_50 = mPath.getPntPos(i + 1); - if (!((param_1 - local_44).absXZ() < daNpc_Uri_Param_c::m.field_0xa8)) { - if (!((param_1 - local_50).absXZ() < daNpc_Uri_Param_c::m.field_0xa8)) { + if (!((param_1 - local_44).absXZ() < mpHIO->m.field_0xa8)) { + if (!((param_1 - local_50).absXZ() < mpHIO->m.field_0xa8)) { f32 local_a8; if (cM3d_Len2dSqPntAndSegLine(param_1.x, param_1.z, local_44.x, local_44.z, local_50.x, local_50.z, &cStack_5c.x, &cStack_5c.z, &local_a8) && - local_a8 < daNpc_Uri_Param_c::m.field_0xa8) + local_a8 < mpHIO->m.field_0xa8) { break; } @@ -1015,7 +1050,7 @@ int daNpc_Uri_c::getTutorialCond(cXyz param_1) { } if (mPath.getNumPnts() - 1 <= i) { - field_0x1000 = daNpc_Uri_Param_c::m.field_0xa8 - 100.0f; + field_0x1000 = mpHIO->m.field_0xa8 - 100.0f; return 5; } @@ -1180,7 +1215,8 @@ int daNpc_Uri_c::cutEndCarryTutorial(int param_1) { if (fopAcM_IsExecuting(mItemPartnerId)) { /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ daNpcT_offTmpBit(7); - /* dSv_event_tmp_flag_c::T_0009 - Ordon Village - Walked a bit during Uli's pick-up tutorial */ + /* dSv_event_tmp_flag_c::T_0009 - Ordon Village - Walked a bit during Uli's pick-up + * tutorial */ daNpcT_offTmpBit(10); /* dSv_event_tmp_flag_c::T_0031 - Ordon Village - Borrow Rusl's sword */ daNpcT_offTmpBit(0x20); @@ -1270,14 +1306,15 @@ int daNpc_Uri_c::cutFindWolf(int param_1) { sVar9 = -0x4000; } sVar9 += home.angle.y; - cStack_2c.set(0.0f, 300.0f, daNpc_Uri_Param_c::m.field_0x54 + 150.0f); + cStack_2c.set(0.0f, 300.0f, mpHIO->m.common.search_distance + 150.0f); mDoMtx_stack_c::YrotS(sVar9); mDoMtx_stack_c::multVec(&cStack_2c, &cStack_2c); cStack_2c += current.pos; mGndChk.SetPos(&cStack_2c); cStack_2c.y = dComIfG_Bgsp().GroundCross(&mGndChk); daPy_getPlayerActorClass()->setPlayerPosAndAngle(&cStack_2c, sVar9 - (s16)0x8000, 0); - /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */ + /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village + * night */ dComIfGs_onTmpBit(0x1308); break; case 1: @@ -1332,7 +1369,8 @@ int daNpc_Uri_c::cutMeetingAgain(int param_1) { switch (iVar10) { case 0: mJntAnm.lookPlayer(0); - /* dSv_event_tmp_flag_c::T_0010 - General use - General use temporary flag (flow control) A */ + /* dSv_event_tmp_flag_c::T_0010 - General use - General use temporary flag (flow + * control) A */ daNpcT_offTmpBit(0xB); initTalk(mFlowNodeNo, NULL); break; @@ -1393,7 +1431,7 @@ int daNpc_Uri_c::cutMeetingAgain(int param_1) { /* 80B29EA0-80B2A1B4 0037E0 0314+00 1/0 0/0 0/0 .text krun__11daNpc_Uri_cFPv */ int daNpc_Uri_c::krun(void* param_0) { - int iVar7 = daNpc_Uri_Param_c::m.field_0x8c / 2; + int iVar7 = mpHIO->m.field_0x8c / 2; switch (mMode) { case MODE_ENTER: @@ -1455,10 +1493,12 @@ int daNpc_Uri_c::wait(void* param_0) { mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } else { if (field_0x100f) { - /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ + /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ if (!daNpcT_chkEvtBit(0x1E) - /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ - && !daNpcT_chkEvtBit(0x92)) { + /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial + */ + && !daNpcT_chkEvtBit(0x92)) + { mFaceMotionSeqMngr.setNo(17, -1.0f, 0, 0); mMotionSeqMngr.setNo(8, -1.0f, 0, 0); } else { @@ -1466,7 +1506,8 @@ int daNpc_Uri_c::wait(void* param_0) { mMotionSeqMngr.setNo(0, -1.0f, 0, 0); } } else { - /* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore finding basket */ + /* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore + * finding basket */ if (daNpcT_chkEvtBit(0x24)) { mFaceMotionSeqMngr.setNo(5, -1.0f, 0, 0); mMotionSeqMngr.setNo(12, -1.0f, 0, 0); @@ -1478,7 +1519,8 @@ int daNpc_Uri_c::wait(void* param_0) { } break; case TYPE_3: - /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */ + /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon + * village night */ if (dComIfGs_isTmpBit(0x1308)) { mFaceMotionSeqMngr.setNo(12, -1.0f, 0, 0); mMotionSeqMngr.setNo(22, -1.0f, 0, 0); @@ -1496,7 +1538,7 @@ int daNpc_Uri_c::wait(void* param_0) { case MODE_RUN: switch (mType) { case TYPE_1: - /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ + /* T_0007 - Ordon Village - During Uli's pick-up tutorial */ if (daNpcT_chkTmpBit(0x7)) { if (chkPlayerCarryBasket()) { switch (getTutorialCond(daPy_getPlayerActorClass()->current.pos)) { @@ -1512,10 +1554,11 @@ int daNpc_Uri_c::wait(void* param_0) { } } } else { - /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ + /* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */ if (!daNpcT_chkEvtBit(0x1E) - /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ - && !daNpcT_chkEvtBit(0x92)) { + /* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial */ + && !daNpcT_chkEvtBit(0x92)) + { cXyz acStack_70 = getAttnPos(daPy_getPlayerActorClass()); int dist_index = attention_info.distances[1]; f32 fVar2 = dComIfGp_getAttention()->getDistTable(dist_index).mLowerY * -1.0f; @@ -1523,7 +1566,8 @@ int daNpc_Uri_c::wait(void* param_0) { if (chkPointInArea(acStack_70, attention_info.position, 200.0f, fVar2, fVar3, 0)) { - if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != 0 && + if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != + 0 && chkPlayerCarryBasket()) { mEvtNo = 5; @@ -1536,15 +1580,18 @@ int daNpc_Uri_c::wait(void* param_0) { case TYPE_2: break; case TYPE_3: - /* dSv_event_flag_c::F_0205 - Ordon Village - Heard Rusl and Uli talking in Ordon village at night */ + /* dSv_event_flag_c::F_0205 - Ordon Village - Heard Rusl and Uli talking in Ordon + * village at night */ if (daNpcT_chkEvtBit(0xCD)) { cXyz cStack_7c = getAttnPos(daPy_getPlayerActorClass()); if (chkPointInArea(cStack_7c, attention_info.position, - daNpc_Uri_Param_c::m.field_0x54, daNpc_Uri_Param_c::m.field_0x58, - daNpc_Uri_Param_c::m.field_0x5c, mCurAngle.y)) + mpHIO->m.common.search_distance, mpHIO->m.common.search_height, + mpHIO->m.common.search_depth, mCurAngle.y)) { if (!daPy_getPlayerActorClass()->checkPlayerFly()) { - if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != 0) { + if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != + 0) + { if (chkActorInSight(daPy_getPlayerActorClass(), mAttnFovY, home.angle.y)) { @@ -1564,7 +1611,8 @@ int daNpc_Uri_c::wait(void* param_0) { mSpeakEvent = true; field_0xe33 = true; } - /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */ + /* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village + * night */ if (dComIfGs_isTmpBit(0x1308)) { mPlayerActorMngr.entry(daPy_getPlayerActorClass()); mJntAnm.lookPlayer(0); @@ -1621,9 +1669,9 @@ int daNpc_Uri_c::wait(void* param_0) { /* 80B2AB60-80B2B24C 0044A0 06EC+00 1/0 0/0 0/0 .text walk__11daNpc_Uri_cFPv */ int daNpc_Uri_c::walk(void* param_0) { BOOL bVar = FALSE; - int uVar2 = daNpc_Uri_Param_c::m.field_0x8c; - int uVar3 = daNpc_Uri_Param_c::m.field_0x8e; - int uVar4 = daNpc_Uri_Param_c::m.field_0x90; + int uVar2 = mpHIO->m.field_0x8c; + int uVar3 = mpHIO->m.field_0x8e; + int uVar4 = mpHIO->m.field_0x90; switch (mMode) { case MODE_ENTER: @@ -1745,7 +1793,7 @@ int daNpc_Uri_c::walk(void* param_0) { /* 80B2B24C-80B2B7C0 004B8C 0574+00 2/0 0/0 0/0 .text sitWait__11daNpc_Uri_cFPv */ int daNpc_Uri_c::sitWait(void* param_0) { - int sVar2 = daNpc_Uri_Param_c::m.field_0x92; + int sVar2 = mpHIO->m.field_0x92; switch (mMode) { case MODE_ENTER: @@ -1763,12 +1811,14 @@ int daNpc_Uri_c::sitWait(void* param_0) { } break; case TYPE_4: - /* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit - Reuinion with Colin et al. */ + /* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit - + * Reuinion with Colin et al. */ if (daNpcT_chkEvtBit(0x3D) - /* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time - (first forced conversation) */ + /* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first + time (first forced conversation) */ && (daNpcT_chkEvtBit(0x14A) - /* dSv_event_flag_c::F_0516 - Ordon Village - Told Uli directly about having found kids */ + /* dSv_event_flag_c::F_0516 - Ordon Village - Told Uli directly about having + found kids */ || daNpcT_chkEvtBit(0x204))) { mFaceMotionSeqMngr.setNo(17, -1.0f, 0, 0); @@ -1782,8 +1832,8 @@ int daNpc_Uri_c::sitWait(void* param_0) { mMode = MODE_RUN; } case MODE_RUN: - /* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time - (first forced conversation) */ + /* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time + (first forced conversation) */ if (mType == TYPE_4 && !daNpcT_chkEvtBit(0x14A)) { mSpeakEvent = true; field_0xe33 = true; diff --git a/src/d/actor/d_a_obj_szbridge.cpp b/src/d/actor/d_a_obj_szbridge.cpp index f5bc8b298b8..25d5a0834f5 100644 --- a/src/d/actor/d_a_obj_szbridge.cpp +++ b/src/d/actor/d_a_obj_szbridge.cpp @@ -1,389 +1,214 @@ /** * @file d_a_obj_szbridge.cpp - * -*/ + * + */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_szbridge.h" -#include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" static void rideCallback__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c(); -extern "C" void rideActor__15daObjSZbridge_cFP10fopAc_ac_c(); -extern "C" void create1st__15daObjSZbridge_cFv(); -extern "C" void setMtx__15daObjSZbridge_cFv(); -extern "C" void CreateHeap__15daObjSZbridge_cFv(); -extern "C" void chkBg__15daObjSZbridge_cFv(); -extern "C" void __dt__11dBgS_WtrChkFv(); -extern "C" void __dt__14dBgS_ObjGndChkFv(); -extern "C" void Create__15daObjSZbridge_cFv(); -extern "C" void Execute__15daObjSZbridge_cFPPA3_A4_f(); -extern "C" void Draw__15daObjSZbridge_cFv(); -extern "C" void Delete__15daObjSZbridge_cFv(); -extern "C" static void daObjSZbridge_create1st__FP15daObjSZbridge_c(); -extern "C" static void daObjSZbridge_MoveBGDelete__FP15daObjSZbridge_c(); -extern "C" static void daObjSZbridge_MoveBGExecute__FP15daObjSZbridge_c(); -extern "C" static void daObjSZbridge_MoveBGDraw__FP15daObjSZbridge_c(); -extern "C" void __dt__15daObjSZbridge_cFv(); -extern "C" static void func_80D04C00(); -extern "C" static void func_80D04C08(); -extern "C" static void func_80D04C10(); -extern "C" static void func_80D04C18(); -extern "C" static void func_80D04C20(); -extern "C" static void func_80D04C28(); -extern "C" extern char const* const d_a_obj_szbridge__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_effHamonSet__FPUlPC4cXyzff(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void SplGrpChk__4dBgSFP14dBgS_SplGrpChk(); -extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void Set__14dBgS_SplGrpChkFR4cXyzf(); -extern "C" void __dt__14dBgS_SplGrpChkFv(); -extern "C" void SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__11dBgS_WtrChkFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cM_rndF__Ff(); -extern "C" void SetPos__11cBgS_GndChkFPC4cXyz(); -extern "C" void __dl__FPv(); -extern "C" void _savegpr_26(); -extern "C" void _restgpr_26(); -extern "C" extern void* __vt__16dBgS_MoveBgActor[10]; -extern "C" u8 now__14mDoMtx_stack_c[48]; - -// -// Declarations: -// /* 80D04338-80D04360 000078 0028+00 1/1 0/0 0/0 .text * rideCallback__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */ static void rideCallback(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) { - // NONMATCHING + static_cast(param_1)->rideActor(param_2); } -/* ############################################################################################## */ /* 80D04C38-80D04C50 000000 0018+00 3/3 0/0 0/0 .rodata l_cull_box */ -SECTION_RODATA static u8 const l_cull_box[24] = { - 0xC3, 0x9B, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0xC4, 0x3E, 0x00, 0x00, - 0x43, 0x9B, 0x00, 0x00, 0x43, 0xB4, 0x00, 0x00, 0x44, 0x3E, 0x00, 0x00, +static const Vec l_cull_box[2] = { + {-310.0f, -30.0f, -760.0f}, + {310.0f, 360.0f, 760.0f}, }; -COMPILER_STRIP_GATE(0x80D04C38, &l_cull_box); - -/* 80D04C50-80D04C54 000018 0004+00 0/1 0/0 0/0 .rodata @3642 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3642 = 1.0f; -COMPILER_STRIP_GATE(0x80D04C50, &lit_3642); -#pragma pop - -/* 80D04C54-80D04C58 00001C 0004+00 0/1 0/0 0/0 .rodata @3643 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3643 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80D04C54, &lit_3643); -#pragma pop - -/* 80D04C58-80D04C5C 000020 0004+00 0/1 0/0 0/0 .rodata @3644 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3644 = 7.0f; -COMPILER_STRIP_GATE(0x80D04C58, &lit_3644); -#pragma pop - -/* 80D04C5C-80D04C60 000024 0004+00 0/1 0/0 0/0 .rodata @3645 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3645 = 1.0f / 25.0f; -COMPILER_STRIP_GATE(0x80D04C5C, &lit_3645); -#pragma pop - -/* 80D04C60-80D04C64 000028 0004+00 0/1 0/0 0/0 .rodata @3646 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3646 = 0.25f; -COMPILER_STRIP_GATE(0x80D04C60, &lit_3646); -#pragma pop /* 80D04360-80D04424 0000A0 00C4+00 1/1 0/0 0/0 .text rideActor__15daObjSZbridge_cFP10fopAc_ac_c */ -void daObjSZbridge_c::rideActor(fopAc_ac_c* param_0) { - // NONMATCHING +void daObjSZbridge_c::rideActor(fopAc_ac_c* i_actor) { + cXyz pos = i_actor->current.pos; + pos.y = mWaterY; + if ((!cM3d_IsZero(i_actor->speed.getSquareMag()) && cM_rndF(1.0f) < 0.3f) || field_0x620 == 0) { + fopAcM_effHamonSet(&field_0x618[0], &pos, 7.0f, 0.04f); + speed.y -= 0.25f; + } + field_0x620 = 10; } -/* ############################################################################################## */ -/* 80D04C80-80D04C80 000048 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D04C80 = "S_Zbridge"; -#pragma pop - /* 80D04C8C-80D04C90 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_szbridge__stringBase0; +static const char* l_arcName = "S_Zbridge"; /* 80D04424-80D044B8 000164 0094+00 1/1 0/0 0/0 .text create1st__15daObjSZbridge_cFv */ -void daObjSZbridge_c::create1st() { - // NONMATCHING +int daObjSZbridge_c::create1st() { + int rv = dComIfG_resLoad(this, l_arcName); + if (rv == cPhs_COMPLEATE_e) { + setMtx(); + rv = MoveBGCreate(l_arcName, 7, dBgS_MoveBGProc_Typical, 0x11190, &mBgMtx); + if (rv == cPhs_ERROR_e) { + return rv; + } + } + return rv; } /* 80D044B8-80D04528 0001F8 0070+00 2/2 0/0 0/0 .text setMtx__15daObjSZbridge_cFv */ void daObjSZbridge_c::setMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y); + MTXCopy(mDoMtx_stack_c::get(), field_0x5d8); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } /* 80D04528-80D04598 000268 0070+00 1/0 0/0 0/0 .text CreateHeap__15daObjSZbridge_cFv */ -void daObjSZbridge_c::CreateHeap() { - // NONMATCHING +int daObjSZbridge_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + return mpModel != NULL ? 1 : 0; } -/* ############################################################################################## */ -/* 80D04C64-80D04C68 00002C 0004+00 0/1 0/0 0/0 .rodata @3715 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3715 = 700.0f; -COMPILER_STRIP_GATE(0x80D04C64, &lit_3715); -#pragma pop - -/* 80D04C68-80D04C6C 000030 0004+00 0/1 0/0 0/0 .rodata @3716 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3716 = -G_CM3D_F_INF; -COMPILER_STRIP_GATE(0x80D04C68, &lit_3716); -#pragma pop - -/* 80D04C6C-80D04C70 000034 0004+00 0/1 0/0 0/0 .rodata @3717 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3717 = 1.0f / 20.0f; -COMPILER_STRIP_GATE(0x80D04C6C, &lit_3717); -#pragma pop - -/* 80D04C70-80D04C74 000038 0004+00 0/1 0/0 0/0 .rodata @3718 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3718 = 70.0f; -COMPILER_STRIP_GATE(0x80D04C70, &lit_3718); -#pragma pop - -/* 80D04C74-80D04C78 00003C 0004+00 0/1 0/0 0/0 .rodata @3719 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_3719 = 0x3F7C28F6; -COMPILER_STRIP_GATE(0x80D04C74, &lit_3719); -#pragma pop - -/* 80D04C78-80D04C7C 000040 0004+00 0/1 0/0 0/0 .rodata @3720 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3720 = 5.0f; -COMPILER_STRIP_GATE(0x80D04C78, &lit_3720); -#pragma pop - -/* 80D04C90-80D04CB0 -00001 0020+00 1/0 0/0 0/0 .data daObjSZbridge_METHODS */ -static actor_method_class daObjSZbridge_METHODS = { - (process_method_func)daObjSZbridge_create1st__FP15daObjSZbridge_c, - (process_method_func)daObjSZbridge_MoveBGDelete__FP15daObjSZbridge_c, - (process_method_func)daObjSZbridge_MoveBGExecute__FP15daObjSZbridge_c, - 0, - (process_method_func)daObjSZbridge_MoveBGDraw__FP15daObjSZbridge_c, -}; - -/* 80D04CB0-80D04CE0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SZbridge */ -extern actor_process_profile_definition g_profile_Obj_SZbridge = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_SZbridge, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjSZbridge_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 676, // mPriority - &daObjSZbridge_METHODS, // sub_method - 0x00040100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80D04CE0-80D04D10 000054 0030+00 2/2 0/0 0/0 .data __vt__11dBgS_WtrChk */ -SECTION_DATA extern void* __vt__11dBgS_WtrChk[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__11dBgS_WtrChkFv, - (void*)NULL, - (void*)NULL, - (void*)func_80D04C18, - (void*)NULL, - (void*)NULL, - (void*)func_80D04C28, - (void*)NULL, - (void*)NULL, - (void*)func_80D04C20, -}; - -/* 80D04D10-80D04D40 000084 0030+00 2/2 0/0 0/0 .data __vt__14dBgS_ObjGndChk */ -SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14dBgS_ObjGndChkFv, - (void*)NULL, - (void*)NULL, - (void*)func_80D04C00, - (void*)NULL, - (void*)NULL, - (void*)func_80D04C10, - (void*)NULL, - (void*)NULL, - (void*)func_80D04C08, -}; - /* 80D04598-80D047D4 0002D8 023C+00 2/2 0/0 0/0 .text chkBg__15daObjSZbridge_cFv */ void daObjSZbridge_c::chkBg() { - // NONMATCHING -} + cXyz chk_pos; -/* 80D047D4-80D0484C 000514 0078+00 4/3 0/0 0/0 .text __dt__11dBgS_WtrChkFv */ -// dBgS_WtrChk::~dBgS_WtrChk() { -extern "C" void __dt__11dBgS_WtrChkFv() { - // NONMATCHING -} + dBgS_ObjGndChk(gnd_chk); -/* 80D0484C-80D048C4 00058C 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */ -// dBgS_ObjGndChk::~dBgS_ObjGndChk() { -extern "C" void __dt__14dBgS_ObjGndChkFv() { - // NONMATCHING -} + chk_pos = current.pos; + chk_pos.y += 700.0f; -/* ############################################################################################## */ -/* 80D04C7C-80D04C80 000044 0004+00 1/1 0/0 0/0 .rodata @3739 */ -SECTION_RODATA static u8 const lit_3739[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D04C7C, &lit_3739); + gnd_chk.SetPos(&chk_pos); + gnd_chk.SetActorPid(base.base.id); + mGroundY = dComIfG_Bgsp().GroundCross(&gnd_chk); + chk_pos.y = mGroundY; + + f32 posY = current.pos.y + 700.0f; + dBgS_WtrChk(wtr_chk); + wtr_chk.Set(chk_pos, posY); + + if (dComIfG_Bgsp().WaterChk(&wtr_chk)) { + mWaterY = wtr_chk.GetHeight(); + } else { + mWaterY = -G_CM3D_F_INF; + } + + if (mWaterY > mGroundY) { + speed.y -= 0.05f * (current.pos.y - (mWaterY - 70.0f)); + speed.y *= 0.985f; + current.pos.y += speed.y; + + if (current.pos.y > 5.0f + (mWaterY - 70.0f)) { + current.pos.y = 5.0f + (mWaterY - 70.0f); + } + + if (current.pos.y < (mWaterY - 70.0f) - 5.0f) { + current.pos.y = (mWaterY - 70.0f) - 5.0f; + } + + speed.y = current.pos.y - old.pos.y; + field_0x614 = 1; + } else { + current.pos.y = mGroundY; + field_0x614 = 0; + } +} /* 80D048C4-80D04974 000604 00B0+00 1/0 0/0 0/0 .text Create__15daObjSZbridge_cFv */ -void daObjSZbridge_c::Create() { - // NONMATCHING +int daObjSZbridge_c::Create() { + mpBgW->SetRideCallback(rideCallback); + chkBg(); + speed.y = 0; + + mpModel->setBaseTRMtx(field_0x5d8); + fopAcM_SetMtx(this, field_0x5d8); + fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x, + l_cull_box[1].y, l_cull_box[1].z); + + for (int i = 0; i < 2; i++) { + field_0x618[i] = -1; + } + + field_0x620 = 0; + + return 1; } /* 80D04974-80D049E4 0006B4 0070+00 1/0 0/0 0/0 .text Execute__15daObjSZbridge_cFPPA3_A4_f */ -void daObjSZbridge_c::Execute(Mtx** param_0) { - // NONMATCHING +int daObjSZbridge_c::Execute(Mtx** param_0) { + chkBg(); + + if (field_0x620 != 0) { + field_0x620--; + } + + setMtx(); + mpModel->setBaseTRMtx(field_0x5d8); + + *param_0 = &mBgMtx; + + return 1; } /* 80D049E4-80D04A88 000724 00A4+00 1/0 0/0 0/0 .text Draw__15daObjSZbridge_cFv */ -void daObjSZbridge_c::Draw() { - // NONMATCHING +int daObjSZbridge_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + + return 1; } /* 80D04A88-80D04AC4 0007C8 003C+00 1/0 0/0 0/0 .text Delete__15daObjSZbridge_cFv */ -void daObjSZbridge_c::Delete() { - // NONMATCHING +int daObjSZbridge_c::Delete() { + dComIfG_resDelete(this, l_arcName); + return 1; } -/* ############################################################################################## */ -/* 80D04D40-80D04D6C 0000B4 002C+00 2/2 0/0 0/0 .data __vt__15daObjSZbridge_c */ -SECTION_DATA extern void* __vt__15daObjSZbridge_c[11] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__15daObjSZbridge_cFv, - (void*)Create__15daObjSZbridge_cFv, - (void*)Execute__15daObjSZbridge_cFPPA3_A4_f, - (void*)Draw__15daObjSZbridge_cFv, - (void*)Delete__15daObjSZbridge_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, - (void*)__dt__15daObjSZbridge_cFv, -}; - /* 80D04AC4-80D04B24 000804 0060+00 1/0 0/0 0/0 .text daObjSZbridge_create1st__FP15daObjSZbridge_c */ -static void daObjSZbridge_create1st(daObjSZbridge_c* param_0) { - // NONMATCHING +static int daObjSZbridge_create1st(daObjSZbridge_c* i_this) { + fopAcM_ct(i_this, daObjSZbridge_c); + return i_this->create1st(); } /* 80D04B24-80D04B44 000864 0020+00 1/0 0/0 0/0 .text * daObjSZbridge_MoveBGDelete__FP15daObjSZbridge_c */ -static void daObjSZbridge_MoveBGDelete(daObjSZbridge_c* param_0) { - // NONMATCHING +static int daObjSZbridge_MoveBGDelete(daObjSZbridge_c* i_this) { + return i_this->MoveBGDelete(); } /* 80D04B44-80D04B64 000884 0020+00 1/0 0/0 0/0 .text * daObjSZbridge_MoveBGExecute__FP15daObjSZbridge_c */ -static void daObjSZbridge_MoveBGExecute(daObjSZbridge_c* param_0) { - // NONMATCHING +static int daObjSZbridge_MoveBGExecute(daObjSZbridge_c* i_this) { + return i_this->MoveBGExecute(); } /* 80D04B64-80D04B90 0008A4 002C+00 1/0 0/0 0/0 .text * daObjSZbridge_MoveBGDraw__FP15daObjSZbridge_c */ -static void daObjSZbridge_MoveBGDraw(daObjSZbridge_c* param_0) { - // NONMATCHING +static int daObjSZbridge_MoveBGDraw(daObjSZbridge_c* i_this) { + return i_this->MoveBGDraw(); } -/* 80D04B90-80D04C00 0008D0 0070+00 1/0 0/0 0/0 .text __dt__15daObjSZbridge_cFv */ -daObjSZbridge_c::~daObjSZbridge_c() { - // NONMATCHING -} +/* 80D04C90-80D04CB0 -00001 0020+00 1/0 0/0 0/0 .data daObjSZbridge_METHODS */ +static actor_method_class daObjSZbridge_METHODS = { + (process_method_func)daObjSZbridge_create1st, + (process_method_func)daObjSZbridge_MoveBGDelete, + (process_method_func)daObjSZbridge_MoveBGExecute, + 0, + (process_method_func)daObjSZbridge_MoveBGDraw, +}; -/* 80D04C00-80D04C08 000940 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */ -static void func_80D04C00() { - // NONMATCHING -} - -/* 80D04C08-80D04C10 000948 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */ -static void func_80D04C08() { - // NONMATCHING -} - -/* 80D04C10-80D04C18 000950 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */ -static void func_80D04C10() { - // NONMATCHING -} - -/* 80D04C18-80D04C20 000958 0008+00 1/0 0/0 0/0 .text @16@__dt__11dBgS_WtrChkFv */ -static void func_80D04C18() { - // NONMATCHING -} - -/* 80D04C20-80D04C28 000960 0008+00 1/0 0/0 0/0 .text @52@__dt__11dBgS_WtrChkFv */ -static void func_80D04C20() { - // NONMATCHING -} - -/* 80D04C28-80D04C30 000968 0008+00 1/0 0/0 0/0 .text @36@__dt__11dBgS_WtrChkFv */ -static void func_80D04C28() { - // NONMATCHING -} - -/* 80D04C80-80D04C80 000048 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80D04CB0-80D04CE0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SZbridge */ +extern actor_process_profile_definition g_profile_Obj_SZbridge = { + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_SZbridge, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjSZbridge_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 676, // mPriority + &daObjSZbridge_METHODS, // sub_method + 0x00040100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +};