mirror of
https://github.com/encounter/tp.git
synced 2026-07-11 06:18:46 -07:00
NPC work, obj_szbridge matching (#2757)
* Some NPC work * Fix impal * Hopefully fix regressions in debug * HIO work for more NPCs * fix regressions * obj_szbridge matching * Fix literals
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+4
-4
@@ -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"),
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
+209
-455
File diff suppressed because it is too large
Load Diff
+341
-591
File diff suppressed because it is too large
Load Diff
+133
-144
@@ -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;
|
||||
|
||||
+95
-47
@@ -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;
|
||||
|
||||
+109
-47
@@ -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:
|
||||
|
||||
+103
-93
@@ -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);
|
||||
|
||||
|
||||
+252
-260
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user