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:
hev7 2025-10-26 11:03:16 +00:00 committed by GitHub
parent 6bd013741b
commit a61d0272a6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
23 changed files with 2138 additions and 2969 deletions

View File

@ -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

View File

@ -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

View File

@ -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"),

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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];

View File

@ -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 */

View File

@ -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 */

View File

@ -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;

View File

@ -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 */

View File

@ -3,251 +3,62 @@
* NPC - Ashei
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_ash.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "SSystem/SComponent/c_math.h"
#include "d/actor/d_a_npc_ash.h"
#include "d/actor/d_a_tag_evtarea.h"
#include "dol2asm.h"
//
// Forward References:
//
/* 8095D640-8095D6AC 000000 006C+00 14/14 0/0 0/0 .rodata m__16daNpcAsh_Param_c */
const daNpcAsh_HIOParam daNpcAsh_Param_c::m = {
35.0f, // attention_offset
-3.0f, // gravity
1.0f, // scale
400.0f, // real_shadow_size
255.0f, // weight
200.0f, // height
35.0f, // knee_length
30.0f, // width
0.0f, // body_angleX_max
0.0f, // body_angleX_min
0.0f, // body_angleY_max
0.0f, // body_angleY_min
30.0f, // head_angleX_max
0.0f, // head_angleX_min
30.0f, // head_angleY_max
-30.0f, // head_angleY_min
0.8f, // neck_rotation_ratio
12.0f, // morf_frame
3, // talk_distance
6, // talk_angle
5, // attention_distance
6, // attention_angle
120.0f, // fov
500.0f, // search_distance
300.0f, // search_height
-300.0f, // search_depth
60, // attention_time
8, // damage_time
0, // face_expression
0, // motion
0, // look_mode
0, // debug_mode_ON
0, // debug_info_ON
};
extern "C" void __ct__10daNpcAsh_cFv();
extern "C" void __dt__8dCcD_CylFv();
extern "C" void __ct__8dCcD_CylFv();
extern "C" void __dt__8cM3dGCylFv();
extern "C" void __dt__8cM3dGAabFv();
extern "C" void __dt__10daNpcAsh_cFv();
extern "C" void Create__10daNpcAsh_cFv();
extern "C" void CreateHeap__10daNpcAsh_cFv();
extern "C" void __dt__15J3DTevKColorAnmFv();
extern "C" void __ct__15J3DTevKColorAnmFv();
extern "C" void __dt__14J3DTevColorAnmFv();
extern "C" void __ct__14J3DTevColorAnmFv();
extern "C" void __dt__11J3DTexNoAnmFv();
extern "C" void __ct__11J3DTexNoAnmFv();
extern "C" void __dt__12J3DTexMtxAnmFv();
extern "C" void __ct__12J3DTexMtxAnmFv();
extern "C" void __dt__14J3DMatColorAnmFv();
extern "C" void __ct__14J3DMatColorAnmFv();
extern "C" void Delete__10daNpcAsh_cFv();
extern "C" void Execute__10daNpcAsh_cFv();
extern "C" void Draw__10daNpcAsh_cFv();
extern "C" void ctrlJoint__10daNpcAsh_cFP8J3DJointP8J3DModel();
extern "C" void createHeapCallBack__10daNpcAsh_cFP10fopAc_ac_c();
extern "C" void ctrlJointCallBack__10daNpcAsh_cFP8J3DJointi();
extern "C" void setExpressionAnm__10daNpcAsh_cFib();
extern "C" void setExpressionBtp__10daNpcAsh_cFi();
extern "C" void setMotionAnm__10daNpcAsh_cFif();
extern "C" void reset__10daNpcAsh_cFv();
extern "C" void setAction__10daNpcAsh_cFM10daNpcAsh_cFPCvPvPv_b();
extern "C" void isSneaking__10daNpcAsh_cFv();
extern "C" void wait_type0__10daNpcAsh_cFPv();
extern "C" void setMotion__10daNpcAsh_cFifi();
extern "C" void setExpression__10daNpcAsh_cFif();
extern "C" void wait_type1__10daNpcAsh_cFPv();
extern "C" void talk__10daNpcAsh_cFPv();
extern "C" void demo__10daNpcAsh_cFPv();
extern "C" void leave__10daNpcAsh_cFPv();
extern "C" void EvCut_Introduction__10daNpcAsh_cFi();
extern "C" void EvCut_Meeting__10daNpcAsh_cFi();
extern "C" void EvCut_WiretapSponsor__10daNpcAsh_cFi();
extern "C" void EvCut_WiretapEntrant__10daNpcAsh_cFi();
extern "C" static void daNpcAsh_Create__FPv();
extern "C" static void daNpcAsh_Delete__FPv();
extern "C" static void daNpcAsh_Execute__FPv();
extern "C" static void daNpcAsh_Draw__FPv();
extern "C" static bool daNpcAsh_IsDelete__FPv();
extern "C" void calc__11J3DTexNoAnmCFPUs();
extern "C" void setParam__10daNpcAsh_cFv();
extern "C" void main__10daNpcAsh_cFv();
extern "C" void playMotion__10daNpcAsh_cFv();
extern "C" void ctrlBtk__10daNpcAsh_cFv();
extern "C" void setAttnPos__10daNpcAsh_cFv();
extern "C" void lookat__10daNpcAsh_cFv();
extern "C" bool drawDbgInfo__10daNpcAsh_cFv();
extern "C" void func_8095CC94(void* _this, s16);
extern "C" void __sinit_d_a_npc_ash_cpp();
extern "C" void __dt__18daNpcF_ActorMngr_cFv();
extern "C" void __ct__18daNpcF_ActorMngr_cFv();
extern "C" void __dt__15daNpcF_Lookat_cFv();
extern "C" void __dt__5csXyzFv();
extern "C" void __ct__5csXyzFv();
extern "C" void __dt__4cXyzFv();
extern "C" void __ct__4cXyzFv();
extern "C" void __dt__8daNpcF_cFv();
extern "C" void __ct__8daNpcF_cFv();
extern "C" void __dt__12dBgS_AcchCirFv();
extern "C" void __dt__10dCcD_GSttsFv();
extern "C" void __dt__12dBgS_ObjAcchFv();
extern "C" void __dt__12J3DFrameCtrlFv();
extern "C" void adjustShapeAngle__8daNpcF_cFv();
extern "C" void setCollisions__8daNpcF_cFv();
extern "C" void drawOtherMdls__8daNpcF_cFv();
extern "C" void __dt__10cCcD_GSttsFv();
extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz();
extern "C" void __dt__16daNpcAsh_Param_cFv();
extern "C" static void func_8095D61C();
extern "C" static void func_8095D624();
extern "C" u8 const m__16daNpcAsh_Param_c[108];
extern "C" extern char* const d_a_npc_ash__stringBase0;
extern "C" u8 mEvtSeqList__10daNpcAsh_c[72];
#if DEBUG
daNpcAsh_HIO_c::daNpcAsh_HIO_c() {
m = daNpcAsh_Param_c::m;
}
//
// External References:
//
extern "C" void changeBckOnly__13mDoExt_bckAnmFP15J3DAnmTransform();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void
__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl();
extern "C" void modelCalc__16mDoExt_McaMorfSOFv();
extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void __ct__10fopAc_ac_cFv();
extern "C" void __dt__10fopAc_ac_cFv();
extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fpcSch_JudgeForPName__FPvPv();
extern "C" void getLayerNo__14dComIfG_play_cFi();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
extern "C" void dComIfGs_isStageSwitch__Fii();
extern "C" void isSwitch__12dSv_memBit_cCFi();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void reset__14dEvt_control_cFv();
extern "C" void convPId__14dEvt_control_cFUi();
extern "C" void setPtI_Id__14dEvt_control_cFUi();
extern "C" void endCheck__16dEvent_manager_cFs();
extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci();
extern "C" void getIsAddvance__16dEvent_manager_cFi();
extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii();
extern "C" void getMyNowCutName__16dEvent_manager_cFi();
extern "C" void getMySubstanceP__16dEvent_manager_cFiPCci();
extern "C" void cutEnd__16dEvent_manager_cFi();
extern "C" void ChkPresentEnd__16dEvent_manager_cFv();
extern "C" void __ct__12dBgS_AcchCirFv();
extern "C" void SetWall__12dBgS_AcchCirFff();
extern "C" void __dt__9dBgS_AcchFv();
extern "C" void __ct__9dBgS_AcchFv();
extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
extern "C" void __ct__11dBgS_GndChkFv();
extern "C" void __dt__11dBgS_GndChkFv();
extern "C" void __ct__11dBgS_LinChkFv();
extern "C" void __dt__11dBgS_LinChkFv();
extern "C" void SetObj__16dBgS_PolyPassChkFv();
extern "C" void __ct__10dCcD_GSttsFv();
extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
extern "C" void __ct__12dCcD_GObjInfFv();
extern "C" void __dt__12dCcD_GObjInfFv();
extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
extern "C" void initialize__18daNpcF_ActorMngr_cFv();
extern "C" void entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c();
extern "C" void remove__18daNpcF_ActorMngr_cFv();
extern "C" void getActorP__18daNpcF_ActorMngr_cFv();
extern "C" void initialize__15daNpcF_MatAnm_cFv();
extern "C" void initialize__15daNpcF_Lookat_cFv();
extern "C" void setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz();
extern "C" void calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii();
extern "C" void execute__8daNpcF_cFv();
extern "C" void draw__8daNpcF_cFiifP11_GXColorS10i();
extern "C" void setMtx__8daNpcF_cFv();
extern "C" void setMtx2__8daNpcF_cFv();
extern "C" void initialize__8daNpcF_cFv();
extern "C" void getTrnsfrmKeyAnmP__8daNpcF_cFPci();
extern "C" void getTexPtrnAnmP__8daNpcF_cFPci();
extern "C" void getTexSRTKeyAnmP__8daNpcF_cFPci();
extern "C" void setMcaMorfAnm__8daNpcF_cFP18J3DAnmTransformKeyffiii();
extern "C" void setBckAnm__8daNpcF_cFP15J3DAnmTransformfiiib();
extern "C" void setBtpAnm__8daNpcF_cFP16J3DAnmTexPatternP12J3DModelDatafi();
extern "C" void setBtkAnm__8daNpcF_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi();
extern "C" void setEnvTevColor__8daNpcF_cFv();
extern "C" void setRoomNo__8daNpcF_cFv();
extern "C" void playExpressionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData();
extern "C" void playMotionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData();
extern "C" void setLookatMtx__8daNpcF_cFiPif();
extern "C" void ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci();
extern "C" void orderEvent__8daNpcF_cFiPcUsUsUcUs();
extern "C" void changeEvent__8daNpcF_cFPcPcUsUs();
extern "C" void chkActorInSight__8daNpcF_cFP10fopAc_ac_cf();
extern "C" void chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci();
extern "C" void initTalk__8daNpcF_cFiPP10fopAc_ac_c();
extern "C" void talkProc__8daNpcF_cFPiiPP10fopAc_ac_c();
extern "C" void turn__8daNpcF_cFsfi();
extern "C" void setAngle__8daNpcF_cFs();
extern "C" void getDistTableIdx__8daNpcF_cFii();
extern "C" void getEvtAreaTagP__8daNpcF_cFii();
extern "C" void daNpcF_chkEvtBit__FUl();
extern "C" void daNpcF_chkTmpBit__FUl();
extern "C" void daNpcF_offTmpBit__FUl();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void __ct__10dMsgFlow_cFv();
extern "C" void __dt__10dMsgFlow_cFv();
extern "C" void Set__4cCcSFP8cCcD_Obj();
extern "C" void __mi__4cXyzCFRC3Vec();
extern "C" void cM_atan2s__Fff();
extern "C" void __ct__11cBgS_GndChkFv();
extern "C" void __dt__11cBgS_GndChkFv();
extern "C" void __dt__13cBgS_PolyInfoFv();
extern "C" void __dt__8cM3dGCirFv();
extern "C" void SetC__8cM3dGCylFRC4cXyz();
extern "C" void SetH__8cM3dGCylFf();
extern "C" void SetR__8cM3dGCylFf();
extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz();
extern "C" void __ct__10Z2CreatureFv();
extern "C" void __dt__10Z2CreatureFv();
extern "C" void init__10Z2CreatureFP3VecP3VecUcUc();
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void init__12J3DFrameCtrlFs();
extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs();
extern "C" void initialize__14J3DMaterialAnmFv();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void __ptmf_test();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_24();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_24();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */];
extern "C" extern void* __vt__8dCcD_Cyl[36];
extern "C" extern void* __vt__9dCcD_Stts[11];
extern "C" u8 mCcDCyl__8daNpcF_c[68];
extern "C" extern void* __vt__8daNpcF_c[18];
extern "C" extern void* __vt__15daNpcF_MatAnm_c[4 + 6 /* padding */];
extern "C" extern void* __vt__12cCcD_CylAttr[25];
extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
extern "C" extern void* __vt__9cCcD_Stts[8];
extern "C" extern void* __vt__14J3DMaterialAnm[4];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 mCurrentMtx__6J3DSys[48];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz4cXyz();
extern "C" void __register_global_object();
//
// Declarations:
//
void daNpcAsh_HIO_c::genMessage(JORMContext* ctext) {
// TODO
}
#endif
/* 8095DD4C-8095DD50 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */
static daNpcAsh_Param_c l_HIO;
NPC_ASH_HIO_CLASS l_HIO;
void daNpcAsh_c::setLookMode(int i_lookMode, fopAc_ac_c* i_talkPartner) {
if (i_lookMode != mLookMode || i_talkPartner != mTalkPartner) {
@ -276,7 +87,7 @@ void daNpcAsh_c::searchActors() {
BOOL daNpcAsh_c::chkFindPlayer() {
BOOL ret;
if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcAsh_Param_c::m.mAttnFovY)) {
if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) {
mActorMngr[0].remove();
ret = false;
} else {
@ -326,44 +137,48 @@ bool daNpcAsh_c::step(s16 i_angY, bool i_animate) {
/* 8095D9B0-8095DA88 000020 00D8+00 1/2 0/0 0/0 .data l_bckGetParamList */
static daNpc_GetParam2 l_bckGetParamList[18] = {
{-1, 2, 0}, // <none>
{7, 0, 0}, // ash_f_talk_a
{12, 0, 1}, // ash_f_talk_b
{11, 0, 1}, // ash_f_silent
{8, 0, 1}, // ash_f_cool
{7, 0, 1}, // ash_f_ask
{9, 0, 1}, // ash_f_explain_a
{10, 0, 1}, // ash_f_explain_b
{8, 2, 0}, // ash_wait_a
{14, 2, 1}, // ash_wait_b
{15, 2, 1}, // ash_wait_c
{13, 0, 1}, // ash_step
{4, 0, 1}, // ash_cool
{3, 0, 1}, // ash_ask
{5, 0, 1}, // ash_explain_a
{6, 0, 1}, // ash_explain_b
{5, 2, 2}, // ash_bowwait
{4, 2, 2}, // ash_bowrun
{-1, 2, 0}, // <none>
{7, 0, 0}, // ash_f_talk_a
{12, 0, 1}, // ash_f_talk_b
{11, 0, 1}, // ash_f_silent
{8, 0, 1}, // ash_f_cool
{7, 0, 1}, // ash_f_ask
{9, 0, 1}, // ash_f_explain_a
{10, 0, 1}, // ash_f_explain_b
{8, 2, 0}, // ash_wait_a
{14, 2, 1}, // ash_wait_b
{15, 2, 1}, // ash_wait_c
{13, 0, 1}, // ash_step
{4, 0, 1}, // ash_cool
{3, 0, 1}, // ash_ask
{5, 0, 1}, // ash_explain_a
{6, 0, 1}, // ash_explain_b
{5, 2, 2}, // ash_bowwait
{4, 2, 2}, // ash_bowrun
};
/* 8095DA88-8095DA94 0000F8 000C+00 1/1 0/0 0/0 .data l_btpGetParamList */
static daNpc_GetParam2 l_btpGetParamList[1] = {
{17, 2, 0}, // ash
{17, 2, 0}, // ash
};
/* 8095DA94-8095DAA0 000104 000C+00 0/1 0/0 0/0 .data l_btkGetParamList */
static daNpc_GetParam2 l_btkGetParamList[1] = {
{14, 2, 0}, // ash
{14, 2, 0}, // ash
};
/* 8095DAA0-8095DAAC 000110 000C+00 1/0 0/0 0/0 .data l_loadRes_ASH0 */
static int l_loadRes_ASH0[3] = {
0, 1, -1,
0,
1,
-1,
};
/* 8095DAAC-8095DAB8 00011C 000C+00 1/0 0/0 0/0 .data l_loadRes_ASH1 */
static int l_loadRes_ASH1[3] = {
0, 2, -1,
0,
2,
-1,
};
/* 8095DAB8-8095DAC0 -00001 0008+00 2/2 0/0 0/0 .data l_loadRes_list */
@ -402,9 +217,7 @@ daNpcAsh_c::EventFn daNpcAsh_c::mEvtSeqList[6] = {
};
/* 809582EC-80958430 0000EC 0144+00 1/1 0/0 0/0 .text __ct__10daNpcAsh_cFv */
daNpcAsh_c::daNpcAsh_c() {
// NONMATCHING
}
daNpcAsh_c::daNpcAsh_c() {}
/* 80958610-809587A0 000410 0190+00 1/0 0/0 0/0 .text __dt__10daNpcAsh_cFv */
daNpcAsh_c::~daNpcAsh_c() {
@ -417,42 +230,6 @@ daNpcAsh_c::~daNpcAsh_c() {
}
}
/* 8095D640-8095D6AC 000000 006C+00 14/14 0/0 0/0 .rodata m__16daNpcAsh_Param_c */
daNpcAsh_Param_c::param const daNpcAsh_Param_c::m = {
35.0f, // mAttnOffsetY
-3.0f, // mGravity
1.0f, // mScale
400.0f, // mShadowDepth
255.0f, // mCcWeight
200.0f, // mCylH
35.0f, // mWallH
30.0f, // mWallR
0.0f, // mBodyUpAngle
0.0f, // mBodyDownAngle
0.0f, // mBodyLeftAngle
0.0f, // mBodyRightAngle
30.0f, // mHeadUpAngle
0.0f, // mHeadDownAngle
30.0f, // mHeadLeftAngle
-30.0f, // mHeadRightAngle
0.8f, // mNeckAngleScl
12.0f, // mMorfFrames
3, // mSpeakDistIdx
6, // mSpeakAngleIdx
5, // mTalkDistIdx
6, // mTalkAngleIdx
120.0f, // mAttnFovY
500.0f, // mAttnRadius
300.0f, // mAttnUpperY
-300.0f, // mAttnLowerY
60,
8, // mDamageTimer
0, // mTestExpression
0, // mTestMotion
0, // mTestLookMode
false, // mTest
};
/* 809587A0-80958B68 0005A0 03C8+00 1/1 0/0 0/0 .text Create__10daNpcAsh_cFv */
cPhs__Step daNpcAsh_c::Create() {
cPhs__Step step;
@ -460,10 +237,11 @@ cPhs__Step daNpcAsh_c::Create() {
fopAcM_ct(this, daNpcAsh_c);
if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") && dComIfG_play_c::getLayerNo(0) == 4) {
/* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */
/* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */
if (daNpcF_chkEvtBit(0x169)
/* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */
&& !daNpcF_chkEvtBit(0x10A)) {
/* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */
&& !daNpcF_chkEvtBit(0x10A))
{
return cPhs_ERROR_e;
}
if (dComIfGs_isStageSwitch(0x18, 0x4b)) {
@ -509,13 +287,13 @@ cPhs__Step daNpcAsh_c::Create() {
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 220.0f, 100.0f);
mCreatureSound.init(&current.pos, &eyePos, 3, 1);
mAcchCir.SetWall(daNpcAsh_Param_c::m.mWallR, daNpcAsh_Param_c::m.mWallH);
mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length);
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
mAcch.SetRoofNone();
mAcch.SetWaterNone();
mAcch.CrrPos(dComIfG_Bgsp());
mCcStts.Init((int)daNpcAsh_Param_c::m.mCcWeight, 0, this);
mCcStts.Init((int)mpHIO->m.common.weight, 0, this);
mCcCyl[0].Set(daNpcF_c::mCcDCyl);
mCcCyl[0].SetStts(&mCcStts);
mCcCyl[0].SetTgType(0);
@ -542,8 +320,8 @@ cPhs__Step daNpcAsh_c::Create() {
/* 80958B68-80958F08 000968 03A0+00 1/1 0/0 0/0 .text CreateHeap__10daNpcAsh_cFv */
BOOL daNpcAsh_c::CreateHeap() {
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(l_arcNames[0], 11));
mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1,
&mCreatureSound, 0x80000, 0x11020284);
mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreatureSound,
0x80000, 0x11020284);
if (mpMorf != NULL && mpMorf->mpModel == NULL) {
mpMorf->stopZelAnime();
mpMorf = NULL;
@ -566,13 +344,15 @@ BOOL daNpcAsh_c::CreateHeap() {
mModelQuiver = NULL;
mModelBow = NULL;
if (mType == TYPE_CASTLE) {
mModelBow = mDoExt_J3DModel__create(static_cast<J3DModelData*>(
dComIfG_getObjectRes(l_arcNames[2], 8)), 0x80000, 0x11000084);
mModelBow = mDoExt_J3DModel__create(
static_cast<J3DModelData*>(dComIfG_getObjectRes(l_arcNames[2], 8)), 0x80000,
0x11000084);
if (mModelBow == NULL) {
return false;
}
mModelQuiver = mDoExt_J3DModel__create(static_cast<J3DModelData*>(
dComIfG_getObjectRes(l_arcNames[2], 9)), 0x80000, 0x11000084);
mModelQuiver = mDoExt_J3DModel__create(
static_cast<J3DModelData*>(dComIfG_getObjectRes(l_arcNames[2], 9)), 0x80000,
0x11000084);
if (mModelQuiver == NULL) {
return false;
}
@ -612,7 +392,7 @@ int daNpcAsh_c::Execute() {
/* 8095911C-80959238 000F1C 011C+00 1/1 0/0 0/0 .text Draw__10daNpcAsh_cFv */
int daNpcAsh_c::Draw() {
mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm);
draw(false, false, daNpcAsh_Param_c::m.mShadowDepth, NULL, false);
draw(false, false, mpHIO->m.common.real_shadow_size, NULL, false);
if (mType == TYPE_CASTLE) {
g_env_light.setLightTevColorType_MAJI(mModelBow, &tevStr);
@ -649,12 +429,12 @@ bool daNpcAsh_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
case 1:
case 3:
case 4:
setLookatMtx(jointNo, lookatJoints, daNpcAsh_Param_c::m.mNeckAngleScl);
setLookatMtx(jointNo, lookatJoints, mpHIO->m.common.neck_rotation_ratio);
break;
}
i_model->setAnmMtx(jointNo, mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
if ((jointNo == 4 || jointNo == 12) && (mAnmFlags & ANM_PLAY_BCK)) {
J3DAnmTransform* bckAnm = mBckAnm.getBckAnm();
mBckAnm.changeBckOnly(mpMorf->getAnm());
@ -783,8 +563,8 @@ void daNpcAsh_c::setMotionAnm(int i_idx, f32 i_morf) {
J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx],
l_bckGetParamList[i_idx].fileIdx);
J3DAnmTextureSRTKey* btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx],
l_btkGetParamList[0].fileIdx);
J3DAnmTextureSRTKey* btkAnm =
getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx);
s32 morfAttr = l_bckGetParamList[i_idx].attr;
s32 btkAttr = l_btkGetParamList[0].attr;
mAnmFlags &= ~ANM_MOTION_FLAGS;
@ -817,7 +597,7 @@ void daNpcAsh_c::reset() {
mpActionFn = NULL;
mLookMode = -1;
mMode = 0;
gravity = daNpcAsh_Param_c::m.mGravity;
gravity = mpHIO->m.common.gravity;
current.pos = home.pos;
old.pos = current.pos;
current.angle.set(0, home.angle.y, 0);
@ -866,8 +646,8 @@ bool daNpcAsh_c::setAction(daNpcAsh_c::ActionFn i_actionFn) {
/* 80959BD0-80959C40 0019D0 0070+00 1/1 0/0 0/0 .text isSneaking__10daNpcAsh_cFv */
bool daNpcAsh_c::isSneaking() {
if (!strcmp(dComIfGp_getStartStageName(), "R_SP116")
&& dComIfGp_getStartStageRoomNo() == 5 && dComIfG_play_c::getLayerNo(0) == 2)
if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") && dComIfGp_getStartStageRoomNo() == 5 &&
dComIfG_play_c::getLayerNo(0) == 2)
{
return true;
} else {
@ -876,31 +656,24 @@ bool daNpcAsh_c::isSneaking() {
}
void daNpcAsh_c::playExpression() {
daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0};
daNpcF_anmPlayData dat1 = {ANM_F_TALK_B, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat1 = {ANM_F_TALK_B, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat1[1] = {&dat1};
daNpcF_anmPlayData dat2 = {ANM_F_SILENT, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat2 = {ANM_F_SILENT, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat2[1] = {&dat2};
daNpcF_anmPlayData dat3 = {ANM_F_COOL, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat3 = {ANM_F_COOL, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat3[1] = {&dat3};
daNpcF_anmPlayData dat4 = {ANM_F_ASK, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat4 = {ANM_F_ASK, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat4[1] = {&dat4};
daNpcF_anmPlayData dat5 = {ANM_F_EXPLAIN_A, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat5 = {ANM_F_EXPLAIN_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat5[1] = {&dat5};
daNpcF_anmPlayData dat6 = {ANM_F_EXPLAIN_B, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat6 = {ANM_F_EXPLAIN_B, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat6[1] = {&dat6};
daNpcF_anmPlayData dat7 = {ANM_NONE, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat7 = {ANM_NONE, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat7[1] = {&dat7};
daNpcF_anmPlayData** ppDat[8] = {
pDat0,
pDat1,
pDat2,
pDat3,
pDat4,
pDat5,
pDat6,
pDat7,
pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7,
};
if (mExpression >= 0 && mExpression < 8) {
playExpressionAnm(ppDat);
@ -909,56 +682,90 @@ void daNpcAsh_c::playExpression() {
/* 8095C200-8095C520 004000 0320+00 1/1 0/0 0/0 .text playMotion__10daNpcAsh_cFv */
void daNpcAsh_c::playMotion() {
daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0};
daNpcF_anmPlayData dat1 = {ANM_WAIT_B, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat1 = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat1[1] = {&dat1};
daNpcF_anmPlayData dat2 = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat2 = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat2[1] = {&dat2};
daNpcF_anmPlayData dat3a = {ANM_COOL, daNpcAsh_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat3b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat3a = {ANM_COOL, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat3b = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b};
daNpcF_anmPlayData dat4a = {ANM_ASK, daNpcAsh_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat4b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat4a = {ANM_ASK, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat4b = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b};
daNpcF_anmPlayData dat5a = {ANM_EXPLAIN_A, daNpcAsh_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat5b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat5a = {ANM_EXPLAIN_A, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat5b = {ANM_WAIT_C, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b};
daNpcF_anmPlayData dat6a = {ANM_EXPLAIN_B, daNpcAsh_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat6b = {ANM_WAIT_A, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat6a = {ANM_EXPLAIN_B, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat6b = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b};
daNpcF_anmPlayData dat7 = {ANM_BOWWAIT, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat7 = {ANM_BOWWAIT, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat7[1] = {&dat7};
daNpcF_anmPlayData dat8 = {ANM_BOWRUN, daNpcAsh_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat8 = {ANM_BOWRUN, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat8[1] = {&dat8};
daNpcF_anmPlayData dat9 = {ANM_STEP, 4.0f, 1};
daNpcF_anmPlayData* pDat9[1] = {&dat9};
daNpcF_anmPlayData** ppDat[10] = {
pDat0,
pDat1,
pDat2,
pDat3,
pDat4,
pDat5,
pDat6,
pDat7,
pDat8,
pDat9,
pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9,
};
if (mMotion >= 0 && mMotion < 10) {
playMotionAnm(ppDat);
}
}
/* 8095D878-8095D884 000238 000C+00 0/1 0/0 0/0 .rodata @4697 */
// somehow supposed to be part of lookat()
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_4697[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x8095D878, &lit_4697);
#pragma pop
/* 8095C9BC-8095CC8C 0047BC 02D0+00 1/1 0/0 0/0 .text lookat__10daNpcAsh_cFv */
void daNpcAsh_c::lookat() {
daPy_py_c* player = NULL;
J3DModel* model = mpMorf->getModel();
BOOL snap = false;
f32 body_angleX_min = mpHIO->m.common.body_angleX_min;
f32 body_angleX_max = mpHIO->m.common.body_angleX_max;
f32 body_angleY_min = mMotion == MOT_WAIT_A ? -15.0f : mpHIO->m.common.body_angleY_min;
f32 body_angleY_max = mMotion == MOT_WAIT_A ? 15.0f : mpHIO->m.common.body_angleY_max;
f32 head_angleX_min = mpHIO->m.common.head_angleX_min;
f32 head_angleX_max = mpHIO->m.common.head_angleX_max;
f32 head_angleY_min = mMotion == MOT_WAIT_A ? -30.0f : mpHIO->m.common.head_angleY_min;
f32 head_angleY_max = mMotion == MOT_WAIT_A ? 30.0f : mpHIO->m.common.head_angleY_max;
s16 angle_delta = mCurAngle.y - mOldAngle.y;
cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
switch (mLookMode) {
case LOOK_NONE:
break;
case LOOK_RESET:
snap = true;
break;
case LOOK_PLAYER:
case LOOK_PLAYER_TALK:
player = daPy_getPlayerActorClass();
break;
case LOOK_ACTOR:
player = (daPy_py_c*)mActorMngr[4].getActorP();
break;
case LOOK_ATTN:
player = (daPy_py_c*)mTalkPartner;
break;
}
if (player != NULL) {
mLookPos = player->attention_info.position;
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) {
mLookPos.y -= 40.0f;
}
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(NULL);
}
mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f,
0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max,
mCurAngle.y, lookat_pos);
mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false);
}
/* 80959C40-8095A67C 001A40 0A3C+00 4/0 0/0 0/0 .text wait_type0__10daNpcAsh_cFPv */
bool daNpcAsh_c::wait_type0(void* param_0) {
@ -1010,8 +817,8 @@ bool daNpcAsh_c::wait_type0(void* param_0) {
}
daTag_EvtArea_c* evtArea = static_cast<daTag_EvtArea_c*>(mActorMngr[5].getActorP());
if (evtArea != NULL
&& evtArea->chkPointInArea(*fopAcM_GetPosition_p(daPy_getPlayerActorClass())))
if (evtArea != NULL &&
evtArea->chkPointInArea(*fopAcM_GetPosition_p(daPy_getPlayerActorClass())))
{
daNpcF_offTmpBit(11);
mOrderEvtNo = 2;
@ -1050,8 +857,8 @@ bool daNpcAsh_c::wait_type0(void* param_0) {
if (mOrderEvtNo != 0) {
eventInfo.setArchiveName("Ash");
}
orderEvent(mMapToolId, mOrderEvtNo != 0 ? l_evtNames[mOrderEvtNo] : NULL,
-1, 40, -1, 1);
orderEvent(mMapToolId, mOrderEvtNo != 0 ? l_evtNames[mOrderEvtNo] : NULL, -1, 40, -1,
1);
}
break;
@ -1200,8 +1007,8 @@ bool daNpcAsh_c::demo(void* param_0) {
s32 staff_id = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staff_id != -1) {
mStaffID = staff_id;
s32 eventIdx = eventManager.getMyActIdx(staff_id, l_evtNames,
ARRAY_SIZEU(l_evtNames), 0, 0);
s32 eventIdx =
eventManager.getMyActIdx(staff_id, l_evtNames, ARRAY_SIZEU(l_evtNames), 0, 0);
if (eventIdx >= 1 && eventIdx < 6) {
mOrderEvtNo = eventIdx;
}
@ -1210,8 +1017,8 @@ bool daNpcAsh_c::demo(void* param_0) {
}
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1
&& eventManager.endCheck(mEventIdx))
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 &&
eventManager.endCheck(mEventIdx))
{
dComIfGp_event_reset();
mOrderEvtNo = 0;
@ -1307,8 +1114,8 @@ BOOL daNpcAsh_c::EvCut_Meeting(int i_staffID) {
switch (*cutName) {
case '0001':
case '0002':
dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3],
NULL, NULL, NULL, NULL, NULL, NULL);
dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], NULL, NULL,
NULL, NULL, NULL, NULL);
initTalk(0x42e, actors);
}
}
@ -1344,7 +1151,7 @@ BOOL daNpcAsh_c::EvCut_Meeting(int i_staffID) {
setLookMode(LOOK_PLAYER, NULL);
break;
}
return false;
}
@ -1362,8 +1169,8 @@ BOOL daNpcAsh_c::EvCut_WiretapSponsor(int i_staffID) {
if (evtMgr.getIsAddvance(i_staffID)) {
switch (*cutName) {
case '0001':
dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3],
NULL, NULL, NULL, NULL, NULL, NULL);
dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], NULL, NULL,
NULL, NULL, NULL, NULL);
initTalk(mFlowID, actors);
break;
}
@ -1424,7 +1231,7 @@ BOOL daNpcAsh_c::EvCut_WiretapEntrant(int i_staffID) {
setExpressionTalkAfter();
}
}
fopAc_ac_c* talk_partner = dComIfGp_event_getTalkPartner();
if (talk_partner == this) {
talk_partner = NULL;
@ -1470,14 +1277,16 @@ void daNpcAsh_c::setParam() {
} else {
if (!strcmp(dComIfGp_getStartStageName(), "R_SP116")) {
attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(3, 6);
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_TALK_e] =
attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(2, 6);
} else {
attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(daNpcAsh_Param_c::m.mTalkDistIdx,
daNpcAsh_Param_c::m.mTalkAngleIdx);
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e] = getDistTableIdx(daNpcAsh_Param_c::m.mSpeakDistIdx,
daNpcAsh_Param_c::m.mSpeakAngleIdx);
attention_info.distances[fopAc_attn_LOCK_e] = getDistTableIdx(
mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle);
attention_info.distances[fopAc_attn_TALK_e] =
attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e] =
getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle);
}
}
}
@ -1497,7 +1306,6 @@ BOOL daNpcAsh_c::main() {
}
/* 8095C520-8095C5C4 004320 00A4+00 1/0 0/0 0/0 .text ctrlBtk__10daNpcAsh_cFv */
// NONMATCHING inlining issues
BOOL daNpcAsh_c::ctrlBtk() {
if (mpMatAnm != NULL) {
mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f * -1.0f);
@ -1540,8 +1348,7 @@ void daNpcAsh_c::setAttnPos() {
mEyeAngle.x = 0;
}
attention_info.position.set(mHeadPos.x,
mHeadPos.y + daNpcAsh_Param_c::m.mAttnOffsetY,
attention_info.position.set(mHeadPos.x, mHeadPos.y + mpHIO->m.common.attention_offset,
mHeadPos.z);
cXyz center;
@ -1549,18 +1356,20 @@ void daNpcAsh_c::setAttnPos() {
mDoMtx_stack_c::multVecZero(&center);
center.y = current.pos.y;
mCcCyl[0].SetC(center);
mCcCyl[0].SetH(daNpcAsh_Param_c::m.mCylH);
mCcCyl[0].SetR(daNpcAsh_Param_c::m.mWallR);
mCcCyl[0].SetH(mpHIO->m.common.height);
mCcCyl[0].SetR(mpHIO->m.common.width);
dComIfG_Ccsp()->Set(&mCcCyl[0]);
/* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */
if (mType == TYPE_BAR && (!daNpcF_chkEvtBit(0x169)
/* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */
|| !daNpcF_chkEvtBit(0x10A)
/* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */
|| !daNpcF_chkEvtBit(0x10B)
/* dSv_event_flag_c::F_0268 - City in the Sky - City in the Sky clear */
|| daNpcF_chkEvtBit(0x10C))) {
/* dSv_event_flag_c::F_0361 - Arbiter's Grounds - Spun the spinning pillars */
if (mType == TYPE_BAR &&
(!daNpcF_chkEvtBit(0x169)
/* dSv_event_flag_c::F_0266 - Snowpeak Ruins - Snowpeak Ruins clear */
|| !daNpcF_chkEvtBit(0x10A)
/* dSv_event_flag_c::F_0267 - Temple of Time - Temple of Time clear */
|| !daNpcF_chkEvtBit(0x10B)
/* dSv_event_flag_c::F_0268 - City in the Sky - City in the Sky clear */
|| daNpcF_chkEvtBit(0x10C)))
{
center.set(3070.0f, -1150.0f, 2446.0f);
mCcCyl[1].SetC(center);
mCcCyl[1].SetH(170.0f);
@ -1569,59 +1378,6 @@ void daNpcAsh_c::setAttnPos() {
}
}
/* 8095C9BC-8095CC8C 0047BC 02D0+00 1/1 0/0 0/0 .text lookat__10daNpcAsh_cFv */
// NONMATCHING literal issues
void daNpcAsh_c::lookat() {
fopAc_ac_c* actor = NULL;
J3DModel* model = mpMorf->getModel();
BOOL snap = false;
f32 body_down_angle = daNpcAsh_Param_c::m.mBodyDownAngle;
f32 body_up_angle = daNpcAsh_Param_c::m.mBodyUpAngle;
f32 body_right_angle = mMotion == MOT_WAIT_A ? -15.0f : daNpcAsh_Param_c::m.mBodyRightAngle;
f32 body_left_angle = mMotion == MOT_WAIT_A ? 15.0f : daNpcAsh_Param_c::m.mBodyLeftAngle;
f32 head_down_angle = daNpcAsh_Param_c::m.mHeadDownAngle;
f32 head_up_angle = daNpcAsh_Param_c::m.mHeadUpAngle;
f32 head_right_angle = mMotion == MOT_WAIT_A ? -30.0f : daNpcAsh_Param_c::m.mHeadRightAngle;
f32 head_left_angle = mMotion == MOT_WAIT_A ? 30.0f : daNpcAsh_Param_c::m.mHeadLeftAngle;
s16 angle_delta = mCurAngle.y - mOldAngle.y;
cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
switch (mLookMode) {
case LOOK_NONE:
break;
case LOOK_RESET:
snap = true;
break;
case LOOK_PLAYER:
case LOOK_PLAYER_TALK:
actor = daPy_getPlayerActorClass();
break;
case LOOK_ACTOR:
actor = mActorMngr[4].getActorP();
break;
case LOOK_ATTN:
actor = mTalkPartner;
break;
}
if (actor != NULL) {
mLookPos = actor->attention_info.position;
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) {
mLookPos.y -= 40.0f;
}
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(NULL);
}
mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle,
0.0f, 0.0f, 0.0f, 0.0f,
head_down_angle, head_up_angle, head_right_angle, head_left_angle,
mCurAngle.y, lookat_pos);
mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false);
}
/* 8095CC8C-8095CC94 004A8C 0008+00 1/0 0/0 0/0 .text drawDbgInfo__10daNpcAsh_cFv */
BOOL daNpcAsh_c::drawDbgInfo() {
return false;
@ -1629,10 +1385,8 @@ BOOL daNpcAsh_c::drawDbgInfo() {
/* 8095DC04-8095DC24 -00001 0020+00 1/0 0/0 0/0 .data daNpcAsh_MethodTable */
static actor_method_class daNpcAsh_MethodTable = {
(process_method_func)daNpcAsh_Create,
(process_method_func)daNpcAsh_Delete,
(process_method_func)daNpcAsh_Execute,
(process_method_func)daNpcAsh_IsDelete,
(process_method_func)daNpcAsh_Create, (process_method_func)daNpcAsh_Delete,
(process_method_func)daNpcAsh_Execute, (process_method_func)daNpcAsh_IsDelete,
(process_method_func)daNpcAsh_Draw,
};

File diff suppressed because it is too large Load Diff

View File

@ -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(&current.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;

View File

@ -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;

View File

@ -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:

View File

@ -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(&current.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);

View File

@ -1,18 +1,60 @@
/**
* @file d_a_npc_shoe.cpp
*
*/
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_shoe.h"
#include "dol2asm.h"
//
// Declarations:
//
/* 80AEA3B0-80AEA41C 000000 006C+00 11/11 0/0 0/0 .rodata m__17daNpcShoe_Param_c */
const daNpcShoe_HIOParam daNpcShoe_Param_c::m = {
55.0f, // attention_offset
-3.0f, // gravity
1.0f, // scale
300.0f, // real_shadow_size
255.0f, // weight
140.0f, // height
35.0f, // knee_length
30.0f, // width
0.0f, // body_angleX_max
0.0f, // body_angleX_min
10.0f, // body_angleY_max
-10.0f, // body_angleY_min
30.0f, // head_angleX_max
-10.0f, // head_angleX_min
45.0f, // head_angleY_max
-45.0f, // head_angleY_min
0.6f, // neck_rotation_ratio
12.0f, // morf_frame
2, // talk_distance
2, // talk_angle
3, // attention_distance
2, // attention_angle
60.0f, // fov
500.0f, // search_distance
300.0f, // search_height
-300.0f, // search_depth
60, // attention_time
0, // damage_time
0, // face_expression
0, // motion
0, // look_mode
0, // debug_mode_ON
0, // debug_info_ON
};
static daNpcShoe_Param_c l_HIO;
#if DEBUG
daNpcShoe_HIO_c::daNpcShoe_HIO_c() {
m = daNpcShoe_Param_c::m;
}
void daNpcShoe_HIO_c::genMessage(JORMContext* ctext) {
// TODO
}
#endif
NPC_SHOE_HIO_CLASS l_HIO;
void daNpcShoe_c::setLookMode(int i_lookMode) {
if (mLookMode != i_lookMode) {
@ -22,7 +64,7 @@ void daNpcShoe_c::setLookMode(int i_lookMode) {
bool daNpcShoe_c::chkFindPlayer() {
bool ret;
if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcShoe_Param_c::m.mAttnFovY)) {
if (!chkActorInSight(daPy_getPlayerActorClass(), mpHIO->m.common.fov)) {
mActorMngr[0].remove();
ret = false;
} else {
@ -42,16 +84,16 @@ bool daNpcShoe_c::chkFindPlayer() {
/* 80AEA558-80AEA594 000020 003C+00 1/1 0/0 0/0 .data l_bckGetParamList */
static daNpc_GetParam2 l_bckGetParamList[5] = {
{ 17, 2, 1}, // m_sitwait_a
{ 13, 0, 1}, // m_sittalk_a
{ 14, 0, 1}, // m_sittalk_a_b
{ 5, 0, 0}, // shoe_talk_a
{ 11, 2, 1} // m_sit_to_wolf_a
{17, 2, 1}, // m_sitwait_a
{13, 0, 1}, // m_sittalk_a
{14, 0, 1}, // m_sittalk_a_b
{5, 0, 0}, // shoe_talk_a
{11, 2, 1} // m_sit_to_wolf_a
};
/* 80AEA594-80AEA5A0 00005C 000C+00 0/0 0/0 0/0 .data l_btpGetParamList */
static daNpc_GetParam2 l_btpGetParamList[1] = {
{ 12, 2, 0 }, // shoe
{12, 2, 0}, // shoe
};
/* 80AEA5A0-80AEA5AC -00001 000C+00 5/6 0/0 0/0 .data l_arcNames */
@ -62,22 +104,16 @@ static char* l_arcNames[3] = {
};
/* 80AEA5AC-80AEA5B0 000074 0004+00 0/1 0/0 0/0 .data l_evtNames */
static char* l_evtNames[1] = {
l_arcNames[0]
};
static char* l_evtNames[1] = {l_arcNames[0]};
/* 80AEA5B0-80AEA5B4 -00001 0004+00 0/2 0/0 0/0 .data l_myName */
static char* l_myName = "Shoe";
/* 80AEA5B4-80AEA5C0 00007C 000C+00 1/2 0/0 0/0 .data mEvtSeqList__11daNpcShoe_c */
daNpcShoe_c::EventFn daNpcShoe_c::mEvtSeqList[1] = {
NULL
};
daNpcShoe_c::EventFn daNpcShoe_c::mEvtSeqList[1] = {NULL};
/* 80AE794C-80AE7AD0 0000EC 0184+00 1/1 0/0 0/0 .text __ct__11daNpcShoe_cFv */
daNpcShoe_c::daNpcShoe_c() {
// NONMATCHING
}
daNpcShoe_c::daNpcShoe_c() {}
/* 80AE7B60-80AE7D48 000300 01E8+00 1/0 0/0 0/0 .text __dt__11daNpcShoe_cFv */
daNpcShoe_c::~daNpcShoe_c() {
@ -89,43 +125,6 @@ daNpcShoe_c::~daNpcShoe_c() {
}
}
/* ############################################################################################## */
/* 80AEA3B0-80AEA41C 000000 006C+00 11/11 0/0 0/0 .rodata m__17daNpcShoe_Param_c */
daNpcShoe_Param_c::param const daNpcShoe_Param_c::m = {
55.0f,
-3.0f,
1.0f,
300.0f,
255.0f,
140.0f,
35.0f,
30.0f,
0.0f,
0.0f,
10.0f,
-10.0f,
30.0f,
-10.0f,
45.0f,
-45.0f,
0.6f,
12.0f,
2,
2,
3,
2,
60.0f,
500.0f,
300.0f,
-300.0f,
60,
0,
0,
0,
0,
false,
};
/* 80AE7D48-80AE7FD8 0004E8 0290+00 1/1 0/0 0/0 .text Create__11daNpcShoe_cFv */
cPhs__Step daNpcShoe_c::Create() {
cPhs__Step step;
@ -154,13 +153,13 @@ cPhs__Step daNpcShoe_c::Create() {
mCreature.init(&current.pos, &eyePos, 3, 1);
mCreature.setMdlType(7, false, (BOOL)(dKy_darkworld_check() != 0));
mAcchCir.SetWall(daNpcShoe_Param_c::m.mWallR, daNpcShoe_Param_c::m.mWallH);
mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length);
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
mAcch.CrrPos(dComIfG_Bgsp());
mCcStts.Init((int)daNpcShoe_Param_c::m.mCcWeight, 0, this);
mCcStts.Init((int)mpHIO->m.common.weight, 0, this);
mCcCyl.Set(mCcDCyl);
mCcCyl.SetStts(&mCcStts);
@ -169,7 +168,7 @@ cPhs__Step daNpcShoe_c::Create() {
mGndChk = mAcch.m_gnd;
mGroundH = mAcch.m_ground_h;
gravity = daNpcShoe_Param_c::m.mGravity;
gravity = mpHIO->m.common.gravity;
setEnvTevColor();
setRoomNo();
@ -186,9 +185,9 @@ BOOL daNpcShoe_c::CreateHeap() {
JUT_ASSERT(292, NULL != mdlData_p)
mpMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1,
&mCreature, 0x80000, 0x11020084);
mpMorf = new mDoExt_McaMorfSO(mdlData_p, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mCreature, 0x80000,
0x11020084);
if (mpMorf != NULL && mpMorf->mpModel == NULL) {
mpMorf->stopZelAnime();
mpMorf = NULL;
@ -267,15 +266,16 @@ int daNpcShoe_c::Draw() {
return 1;
}
draw(false, false, daNpcShoe_Param_c::m.mShadowDepth, NULL, false);
draw(false, false, mpHIO->m.common.real_shadow_size, NULL, false);
g_env_light.setLightTevColorType_MAJI(mpModel1->mModelData, &tevStr);
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(11));
mpModel1->setBaseTRMtx(mDoMtx_stack_c::get());
mDoExt_modelUpdateDL(mpModel1);
g_env_light.setLightTevColorType_MAJI(mpModel2->mModelData, &tevStr);
mDoExt_modelUpdateDL(mpModel2);
dComIfGd_setSimpleShadow(&current.pos, mAcch.GetGroundH(), 50.0f, mAcch.m_gnd, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
dComIfGd_setSimpleShadow(&current.pos, mAcch.GetGroundH(), 50.0f, mAcch.m_gnd, 0, 1.0f,
dDlst_shadowControl_c::getSimpleTex());
return 1;
}
@ -293,14 +293,14 @@ bool daNpcShoe_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3));
mDoMtx_stack_c::multVecZero(&mLookatPos[2]);
}
mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no));
switch(joint_no) {
case 1:
case 2:
case 3:
setLookatMtx(joint_no, lookat_joints, daNpcShoe_Param_c::m.mNeckAngleScl);
break;
switch (joint_no) {
case 1:
case 2:
case 3:
setLookatMtx(joint_no, lookat_joints, mpHIO->m.common.neck_rotation_ratio);
break;
}
i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get());
@ -342,7 +342,6 @@ void daNpcShoe_c::setMotion(int i_motion, f32 i_morf, BOOL i_restart) {
}
}
/* 80AE864C-80AE895C 000DEC 0310+00 1/1 0/0 0/0 .text reset__11daNpcShoe_cFv */
void daNpcShoe_c::reset() {
initialize();
@ -410,28 +409,23 @@ void daNpcShoe_c::reset() {
mMotionMorfOverride = 0.0f;
}
void daNpcShoe_c::playMotion() {
daNpcF_anmPlayData dat0 = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat0 = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0};
daNpcF_anmPlayData dat1a = {ANM_M_SITTALK_A, daNpcShoe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat1b = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat1a = {ANM_M_SITTALK_A, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat1b = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b};
daNpcF_anmPlayData dat2a = {ANM_M_SITTALK_A_B, daNpcShoe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat2b = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat2a = {ANM_M_SITTALK_A_B, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat2b = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b};
daNpcF_anmPlayData dat3a = {ANM_SHOE_TALK_A, daNpcShoe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat3b = {ANM_M_SITWAIT_A, daNpcShoe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat3a = {ANM_SHOE_TALK_A, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat3b = {ANM_M_SITWAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b};
daNpcF_anmPlayData dat4 = {ANM_M_SIT_TO_WOLF_A, daNpcShoe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat4 = {ANM_M_SIT_TO_WOLF_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat4[1] = {&dat4};
daNpcF_anmPlayData** ppDat[5] = {
pDat0,
pDat1,
pDat2,
pDat3,
pDat4,
pDat0, pDat1, pDat2, pDat3, pDat4,
};
if (mMotion >= 0 && mMotion < 5) {
field_0xe16 = mMotionPhase;
@ -439,6 +433,57 @@ void daNpcShoe_c::playMotion() {
}
}
/* 80AE9820-80AE9A00 001FC0 01E0+00 1/1 0/0 0/0 .text lookat__11daNpcShoe_cFv */
void daNpcShoe_c::lookat() {
fopAc_ac_c* actor = NULL;
J3DModel* model = mpMorf->getModel();
BOOL snap = false;
f32 body_angleX_min = mpHIO->m.common.body_angleX_min;
f32 body_angleX_max = mpHIO->m.common.body_angleX_max;
f32 body_angleY_min = mpHIO->m.common.body_angleY_min;
f32 body_angleY_max = mpHIO->m.common.body_angleY_max;
f32 head_angleX_min = mpHIO->m.common.head_angleX_min;
f32 head_angleX_max = mpHIO->m.common.head_angleX_max;
f32 head_angleY_min = mpHIO->m.common.head_angleY_min;
f32 head_angleY_max = mpHIO->m.common.head_angleY_max;
s16 angle_delta = mCurAngle.y - mOldAngle.y;
cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
switch (mLookMode) {
case LOOK_NONE:
break;
case LOOK_RESET:
snap = true;
break;
case LOOK_PLAYER:
case LOOK_PLAYER_TALK:
actor = daPy_getPlayerActorClass();
if (mLookMode != LOOK_PLAYER_TALK) {
break;
}
head_angleY_min = -80.0f;
head_angleY_max = 80.0f;
break;
}
if (actor != NULL) {
mLookPos = actor->attention_info.position;
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) {
mLookPos.y -= 40.0f;
}
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(NULL);
}
mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f,
0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max,
mCurAngle.y, lookat_pos);
mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false);
}
/* 80AE895C-80AE8A04 0010FC 00A8+00 1/1 0/0 0/0 .text
* setAction__11daNpcShoe_cFM11daNpcShoe_cFPCvPvPv_b */
@ -458,7 +503,6 @@ int daNpcShoe_c::setAction(bool (daNpcShoe_c::*i_actionFunc)(void*)) {
/* 80AE8A04-80AE8E24 0011A4 0420+00 3/0 0/0 0/0 .text wait__11daNpcShoe_cFPv */
bool daNpcShoe_c::wait(void* param_0) {
// NONMATCHING
switch (mMode) {
case 0:
setMotion(MOT_SITWAIT_A, -1.0f, false);
@ -469,7 +513,7 @@ bool daNpcShoe_c::wait(void* param_0) {
break;
case 2: {
chkFindPlayer();
fopAc_ac_c* pactor = mActorMngr->getActorP();
if (pactor != NULL) {
setLookMode(LOOK_PLAYER);
@ -513,27 +557,26 @@ bool daNpcShoe_c::wait(void* param_0) {
return 1;
}
/* 80AE8E24-80AE8ED4 0015C4 00B0+00 1/0 0/0 0/0 .text fear__11daNpcShoe_cFPv */
bool daNpcShoe_c::fear(void* param_0) {
switch (mMode) {
case 0:
setMotion(MOT_SIT_TO_WOLF_A, -1.0f, false);
speedF = 0.0f;
mMode = 2;
break;
case 1:
break;
case 2:
if (mpMorf->checkFrame(1.0f)) {
mCreature.playVoice(2);
}
break;
case 3:
break;
default:
JUT_ASSERT(1100, FALSE);
break;
case 0:
setMotion(MOT_SIT_TO_WOLF_A, -1.0f, false);
speedF = 0.0f;
mMode = 2;
break;
case 1:
break;
case 2:
if (mpMorf->checkFrame(1.0f)) {
mCreature.playVoice(2);
}
break;
case 3:
break;
default:
JUT_ASSERT(1100, FALSE);
break;
}
return 1;
}
@ -542,37 +585,37 @@ bool daNpcShoe_c::fear(void* param_0) {
bool daNpcShoe_c::talk(void* param_0) {
bool ret = 0;
switch (mMode) {
case 0:
initTalk(field_0xe0c, NULL);
mMsgTimer = 0;
field_0xe1a = 0;
setLookMode(LOOK_PLAYER_TALK);
mMode = 2;
break;
case 1:
break;
case 2:
if (talkProc(NULL, 1, NULL)) {
mActorMngr->entry(daPy_getPlayerActorClass());
setAction(&daNpcShoe_c::wait);
ret = 1;
} else {
int expression, motion;
if (ctrlMsgAnm(expression, motion, this, false)) {
setMotion(motion, -1.0f, false);
}
case 0:
initTalk(field_0xe0c, NULL);
mMsgTimer = 0;
field_0xe1a = 0;
setLookMode(LOOK_PLAYER_TALK);
mMode = 2;
break;
case 1:
break;
case 2:
if (talkProc(NULL, 1, NULL)) {
mActorMngr->entry(daPy_getPlayerActorClass());
setAction(&daNpcShoe_c::wait);
ret = 1;
} else {
int expression, motion;
if (ctrlMsgAnm(expression, motion, this, false)) {
setMotion(motion, -1.0f, false);
}
}
break;
case 3:
if (field_0x9ec != 0) {
break;
case 3:
if (field_0x9ec != 0) {
break;
}
dComIfGp_event_reset();
break;
default:
JUT_ASSERT(1169, FALSE);
break;
}
dComIfGp_event_reset();
break;
default:
JUT_ASSERT(1169, FALSE);
break;
}
return ret;
}
@ -580,39 +623,41 @@ bool daNpcShoe_c::talk(void* param_0) {
/* 80AE9094-80AE9260 001834 01CC+00 1/0 0/0 0/0 .text demo__11daNpcShoe_cFPv */
bool daNpcShoe_c::demo(void* param_0) {
switch (mMode) {
case 0:
setMotion(MOT_SITWAIT_A, -1.0f, false);
mMode = 2;
break;
case 1:
break;
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staff_id = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staff_id != -1) {
mStaffID = staff_id;
case 0:
setMotion(MOT_SITWAIT_A, -1.0f, false);
mMode = 2;
break;
case 1:
break;
case 2:
if (dComIfGp_event_runCheck() != FALSE && !eventInfo.checkCommandTalk()) {
dEvent_manager_c& eventManager = dComIfGp_getEventManager();
s32 staff_id = eventManager.getMyStaffId(l_myName, NULL, 0);
if (staff_id != -1) {
mStaffID = staff_id;
JUT_ASSERT(1203, NULL != mEvtSeqList[mOrderEvtNo])
JUT_ASSERT(1203, NULL != mEvtSeqList[mOrderEvtNo])
if ((this->*(mEvtSeqList[mOrderEvtNo]))(staff_id)) {
eventManager.cutEnd(staff_id);
}
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && eventManager.endCheck(mEventIdx)) {
dComIfGp_event_reset();
mOrderEvtNo = 0;
mEventIdx = -1;
setAction(&daNpcShoe_c::wait);
if ((this->*(mEvtSeqList[mOrderEvtNo]))(staff_id)) {
eventManager.cutEnd(staff_id);
}
}
break;
case 3:
break;
default:
JUT_ASSERT(1169, FALSE);
break;
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 &&
eventManager.endCheck(mEventIdx))
{
dComIfGp_event_reset();
mOrderEvtNo = 0;
mEventIdx = -1;
setAction(&daNpcShoe_c::wait);
}
}
break;
case 3:
break;
default:
JUT_ASSERT(1169, FALSE);
break;
}
return 1;
}
@ -644,16 +689,19 @@ static bool daNpcShoe_IsDelete(void* param_0) {
/* 80AE92E8-80AE93A0 001A88 00B8+00 1/0 0/0 0/0 .text setParam__11daNpcShoe_cFv */
void daNpcShoe_c::setParam() {
attention_info.distances[0] = getDistTableIdx(daNpcShoe_Param_c::m.mTalkDistIdx, daNpcShoe_Param_c::m.mTalkAngleIdx);
attention_info.distances[0] =
getDistTableIdx(mpHIO->m.common.attention_distance, mpHIO->m.common.attention_angle);
attention_info.distances[1] = attention_info.distances[0];
attention_info.distances[3] = getDistTableIdx(daNpcShoe_Param_c::m.mSpeakDistIdx, daNpcShoe_Param_c::m.mSpeakAngleIdx);
attention_info.distances[3] =
getDistTableIdx(mpHIO->m.common.talk_distance, mpHIO->m.common.talk_angle);
attention_info.flags = (field_0xe1b != 0) ? (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e) : 0;
attention_info.flags =
(field_0xe1b != 0) ? (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e) : 0;
scale.setall(daNpcShoe_Param_c::m.mScale);
mAcchCir.SetWallR(daNpcShoe_Param_c::m.mWallR);
mAcchCir.SetWallH(daNpcShoe_Param_c::m.mWallH);
gravity = daNpcShoe_Param_c::m.mGravity;
scale.setall(mpHIO->m.common.scale);
mAcchCir.SetWallR(mpHIO->m.common.width);
mAcchCir.SetWallH(mpHIO->m.common.knee_length);
gravity = mpHIO->m.common.gravity;
}
/* 80AE93A0-80AE9624 001B40 0284+00 1/0 0/0 0/0 .text main__11daNpcShoe_cFv */
@ -671,7 +719,6 @@ BOOL daNpcShoe_c::main() {
/* 80AE9624-80AE9820 001DC4 01FC+00 1/0 0/0 0/0 .text setAttnPos__11daNpcShoe_cFv */
void daNpcShoe_c::setAttnPos() {
// NONMATCHING
if (mLookMode == LOOK_RESET) {
for (int i = 0; i < 3; i++) {
mLookatAngle[i].setall(0);
@ -681,88 +728,37 @@ void daNpcShoe_c::setAttnPos() {
setMtx();
lookat();
cXyz vec(10.0f,15.0f,0.0f);
cXyz vec(10.0f, 15.0f, 0.0f);
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3));
mDoMtx_stack_c::multVecZero(&mHeadPos);
mDoMtx_stack_c::multVec(&vec, &eyePos);
vec.x = 0.0f;
mDoMtx_stack_c::multVec(&vec, &vec);
mHeadAngle.x = cLib_targetAngleX(&mHeadPos,&vec);
mHeadAngle.y = cLib_targetAngleY(&mHeadPos,&vec);
mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &vec);
mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &vec);
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3));
mDoMtx_stack_c::multVecZero(&attention_info.position);
attention_info.position.y += daNpcShoe_Param_c::m.mAttnOffsetY;
attention_info.position.y += mpHIO->m.common.attention_offset;
cXyz cStack28;
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1));
mDoMtx_stack_c::multVecZero(&cStack28);
cStack28.y = current.pos.y;
mCcCyl.SetC(cStack28);
mCcCyl.SetH(daNpcShoe_Param_c::m.mCylH);
mCcCyl.SetR(daNpcShoe_Param_c::m.mWallR);
mCcCyl.SetH(mpHIO->m.common.height);
mCcCyl.SetR(mpHIO->m.common.width);
dComIfG_Ccsp()->Set(&mCcCyl);
}
/* 80AE9820-80AE9A00 001FC0 01E0+00 1/1 0/0 0/0 .text lookat__11daNpcShoe_cFv */
void daNpcShoe_c::lookat() {
// NONMATCHING
fopAc_ac_c* actor = NULL;
J3DModel* model = mpMorf->getModel();
BOOL snap = false;
f32 body_down_angle = daNpcShoe_Param_c::m.mBodyDownAngle;
f32 body_up_angle = daNpcShoe_Param_c::m.mBodyUpAngle;
f32 body_right_angle = daNpcShoe_Param_c::m.mBodyRightAngle;
f32 body_left_angle = daNpcShoe_Param_c::m.mBodyLeftAngle;
f32 head_down_angle = daNpcShoe_Param_c::m.mHeadDownAngle;
f32 head_up_angle = daNpcShoe_Param_c::m.mHeadUpAngle;
f32 head_right_angle = daNpcShoe_Param_c::m.mHeadRightAngle;
f32 head_left_angle = daNpcShoe_Param_c::m.mHeadLeftAngle;
s16 angle_delta = mCurAngle.y - mOldAngle.y;
cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
switch (mLookMode) {
case LOOK_NONE:
break;
case LOOK_RESET:
snap = true;
break;
case LOOK_PLAYER:
case LOOK_PLAYER_TALK:
actor = daPy_getPlayerActorClass();
if (mLookMode != LOOK_PLAYER_TALK) {
break;
}
head_right_angle = -80.0f;
head_left_angle = 80.0f;
break;
}
if (actor != NULL) {
mLookPos = actor->attention_info.position;
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) {
mLookPos.y -= 40.0f;
}
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(NULL);
}
mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle,
0.0f, 0.0f, 0.0f, 0.0f,
head_down_angle, head_up_angle, head_right_angle, head_left_angle,
mCurAngle.y, lookat_pos);
mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false);
}
/* 80AE9A00-80AE9AD0 0021A0 00D0+00 1/0 0/0 0/0 .text setMotionAnm__11daNpcShoe_cFif */
void daNpcShoe_c::setMotionAnm(int i_idx, f32 i_morf) {
J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], l_bckGetParamList[i_idx].fileIdx);
J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx],
l_bckGetParamList[i_idx].fileIdx);
int morfAttr = l_bckGetParamList[i_idx].attr;
mAnmFlags &= ~(ANM_PAUSE_MORF | ANM_PLAY_MORF);
if (morfAnm) {
@ -780,33 +776,29 @@ BOOL daNpcShoe_c::drawDbgInfo() {
/* 80AEA340-80AEA344 002AE0 0004+00 1/0 0/0 0/0 .text adjustShapeAngle__11daNpcShoe_cFv
*/
void daNpcShoe_c::adjustShapeAngle() {
/* empty function */
}
void daNpcShoe_c::adjustShapeAngle() {}
/* 80AEA608-80AEA628 -00001 0020+00 1/0 0/0 0/0 .data daNpcShoe_MethodTable */
static actor_method_class daNpcShoe_MethodTable = {
(process_method_func)daNpcShoe_Create,
(process_method_func)daNpcShoe_Delete,
(process_method_func)daNpcShoe_Execute,
(process_method_func)daNpcShoe_IsDelete,
(process_method_func)daNpcShoe_Create, (process_method_func)daNpcShoe_Delete,
(process_method_func)daNpcShoe_Execute, (process_method_func)daNpcShoe_IsDelete,
(process_method_func)daNpcShoe_Draw,
};
/* 80AEA628-80AEA658 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_SHOE */
extern actor_process_profile_definition g_profile_NPC_SHOE = {
fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_NPC_SHOE, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daNpcShoe_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
417, // mPriority
&daNpcShoe_MethodTable, // sub_method
0x00044107, // mStatus
fopAc_NPC_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_NPC_SHOE, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daNpcShoe_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
417, // mPriority
&daNpcShoe_MethodTable, // sub_method
0x00044107, // mStatus
fopAc_NPC_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};

View File

@ -3,248 +3,66 @@
* NPC - Telma
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_the.h"
#include "SSystem/SComponent/c_math.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "SSystem/SComponent/c_math.h"
#include "d/actor/d_a_npc_the.h"
#include "d/actor/d_a_tag_evtarea.h"
#include "dol2asm.h"
//
// Forward References:
//
/* 80AFBE0C-80AFBE78 000000 006C+00 11/11 0/0 0/0 .rodata m__16daNpcThe_Param_c */
const daNpcThe_HIOParam daNpcThe_Param_c::m = {
220.0f, // attention_offset
-3.0f, // gravity
1.0f, // scale
400.0f, // real_shadow_size
255.0f, // weight
200.0f, // height
35.0f, // knee_length
40.0f, // width
0.0f, // body_angleX_max
-20.0f, // body_angleX_min
10.0f, // body_angleY_max
-10.0f, // body_angleY_min
30.0f, // head_angleX_max
-20.0f, // head_angleX_min
45.0f, // head_angleY_max
-45.0f, // head_angleY_min
0.6f, // neck_rotation_ratio
12.0f, // morf_frame
3, // talk_distance
6, // talk_angle
5, // attention_distance
6, // attention_angle
80.0f, // fov
500.0f, // search_distance
300.0f, // search_height
-300.0f, // search_depth
60, // attention_time
8, // damage_time
0, // face_expression
0, // motion
0, // look_mode
0, // debug_mode_ON
0, // debug_info_ON
};
extern "C" void __ct__10daNpcThe_cFv();
extern "C" void __dt__8cM3dGCylFv();
extern "C" void __dt__8cM3dGAabFv();
extern "C" void __dt__10daNpcThe_cFv();
extern "C" void ctrlJoint__10daNpcThe_cFP8J3DJointP8J3DModel();
extern "C" void createHeapCallBack__10daNpcThe_cFP10fopAc_ac_c();
extern "C" void __dt__15J3DTevKColorAnmFv();
extern "C" void __ct__15J3DTevKColorAnmFv();
extern "C" void __dt__14J3DTevColorAnmFv();
extern "C" void __ct__14J3DTevColorAnmFv();
extern "C" void __dt__11J3DTexNoAnmFv();
extern "C" void __ct__11J3DTexNoAnmFv();
extern "C" void __dt__12J3DTexMtxAnmFv();
extern "C" void __ct__12J3DTexMtxAnmFv();
extern "C" void __dt__14J3DMatColorAnmFv();
extern "C" void __ct__14J3DMatColorAnmFv();
extern "C" void ctrlJointCallBack__10daNpcThe_cFP8J3DJointi();
extern "C" void setExpressionAnm__10daNpcThe_cFib();
extern "C" void setExpressionBtp__10daNpcThe_cFi();
extern "C" void setMotionAnm__10daNpcThe_cFif();
extern "C" void wait__10daNpcThe_cFPv();
extern "C" void setMotion__10daNpcThe_cFifi();
extern "C" void setExpression__10daNpcThe_cFif();
extern "C" void waitTW__10daNpcThe_cFPv();
extern "C" void talk__10daNpcThe_cFPv();
extern "C" void test__10daNpcThe_cFPv();
extern "C" bool EvCut_TwResistance__10daNpcThe_cFi();
extern "C" void EvCut_Introduction__10daNpcThe_cFi();
extern "C" static void daNpcThe_Create__FPv();
extern "C" void create__10daNpcThe_cFv();
extern "C" void reset__10daNpcThe_cFv();
extern "C" static void daNpcThe_Delete__FPv();
extern "C" static void daNpcThe_Execute__FPv();
extern "C" static void daNpcThe_Draw__FPv();
extern "C" static bool daNpcThe_IsDelete__FPv();
extern "C" void calc__11J3DTexNoAnmCFPUs();
extern "C" void setParam__10daNpcThe_cFv();
extern "C" void main__10daNpcThe_cFv();
extern "C" void playMotion__10daNpcThe_cFv();
extern "C" void playExpression__10daNpcThe_cFv();
extern "C" void doEvent__10daNpcThe_cFv();
extern "C" void ctrlBtk__10daNpcThe_cFv();
extern "C" void setAttnPos__10daNpcThe_cFv();
extern "C" void lookat__10daNpcThe_cFv();
extern "C" bool drawDbgInfo__10daNpcThe_cFv();
extern "C" void func_80AFB490(void* _this, s16);
extern "C" void __sinit_d_a_npc_the_cpp();
extern "C" void __dt__18daNpcF_ActorMngr_cFv();
extern "C" void __ct__18daNpcF_ActorMngr_cFv();
extern "C" void __dt__15daNpcF_Lookat_cFv();
extern "C" void __dt__5csXyzFv();
extern "C" void __ct__5csXyzFv();
extern "C" void __dt__4cXyzFv();
extern "C" void __ct__4cXyzFv();
extern "C" void __dt__8daNpcF_cFv();
extern "C" void __ct__8daNpcF_cFv();
extern "C" void __dt__12dBgS_AcchCirFv();
extern "C" void __dt__10dCcD_GSttsFv();
extern "C" void __dt__12dBgS_ObjAcchFv();
extern "C" void __dt__12J3DFrameCtrlFv();
extern "C" void setCollisions__8daNpcF_cFv();
extern "C" void drawOtherMdls__8daNpcF_cFv();
extern "C" void __dt__10cCcD_GSttsFv();
extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz();
extern "C" void adjustShapeAngle__10daNpcThe_cFv();
extern "C" void __dt__16daNpcThe_Param_cFv();
extern "C" static void func_80AFBDE8();
extern "C" static void func_80AFBDF0();
extern "C" u8 const m__16daNpcThe_Param_c[108];
extern "C" extern char const* const d_a_npc_the__stringBase0;
extern "C" void* mEvtCutNameList__10daNpcThe_c[4];
extern "C" u8 mEvtCutList__10daNpcThe_c[48];
static cPhs__Step daNpcThe_Create(void*);
static int daNpcThe_Delete(void*);
static int daNpcThe_Execute(void*);
static int daNpcThe_IsDelete(void*);
static int daNpcThe_Draw(void*);
#if DEBUG
daNpcThe_HIO_c::daNpcThe_HIO_c() {
m = daNpcThe_Param_c::m;
}
//
// External References:
//
void daNpcThe_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) {
// TODO
}
extern "C" void changeBckOnly__13mDoExt_bckAnmFP15J3DAnmTransform();
extern "C" void
__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl();
extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv();
extern "C" void __ct__10fopAc_ac_cFv();
extern "C" void __dt__10fopAc_ac_cFv();
extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData();
extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs();
extern "C" void fopAcM_createItemForPresentDemo__FPC4cXyziUciiPC5csXyzPC4cXyz();
extern "C" void fpcSch_JudgeForPName__FPvPv();
extern "C" void getLayerNo__14dComIfG_play_cFi();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
extern "C" void dComIfGs_wolfeye_effect_check__Fv();
extern "C" void isEventBit__11dSv_event_cCFUs();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void reset__14dEvt_control_cFv();
extern "C" void reset__14dEvt_control_cFPv();
extern "C" void setPtI_Id__14dEvt_control_cFUi();
extern "C" void setObjectArchive__16dEvent_manager_cFPc();
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc();
extern "C" void endCheck__16dEvent_manager_cFs();
extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci();
extern "C" void getIsAddvance__16dEvent_manager_cFi();
extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii();
extern "C" void getMyNowCutName__16dEvent_manager_cFi();
extern "C" void cutEnd__16dEvent_manager_cFi();
extern "C" void ChkPresentEnd__16dEvent_manager_cFv();
extern "C" void __ct__12dBgS_AcchCirFv();
extern "C" void SetWallR__12dBgS_AcchCirFf();
extern "C" void SetWall__12dBgS_AcchCirFff();
extern "C" void __dt__9dBgS_AcchFv();
extern "C" void __ct__9dBgS_AcchFv();
extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
extern "C" void __ct__11dBgS_GndChkFv();
extern "C" void __dt__11dBgS_GndChkFv();
extern "C" void __ct__11dBgS_LinChkFv();
extern "C" void __dt__11dBgS_LinChkFv();
extern "C" void SetObj__16dBgS_PolyPassChkFv();
extern "C" void __ct__10dCcD_GSttsFv();
extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
extern "C" void __ct__12dCcD_GObjInfFv();
extern "C" void __dt__12dCcD_GObjInfFv();
extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
extern "C" void initialize__18daNpcF_ActorMngr_cFv();
extern "C" void entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c();
extern "C" void remove__18daNpcF_ActorMngr_cFv();
extern "C" void getActorP__18daNpcF_ActorMngr_cFv();
extern "C" void initialize__15daNpcF_MatAnm_cFv();
extern "C" void initialize__15daNpcF_Lookat_cFv();
extern "C" void setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz();
extern "C" void calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii();
extern "C" void execute__8daNpcF_cFv();
extern "C" void draw__8daNpcF_cFiifP11_GXColorS10i();
extern "C" void srchAttnActor1__8daNpcF_cFPvPv();
extern "C" void setMtx__8daNpcF_cFv();
extern "C" void setMtx2__8daNpcF_cFv();
extern "C" void initialize__8daNpcF_cFv();
extern "C" void getTrnsfrmKeyAnmP__8daNpcF_cFPci();
extern "C" void getTexPtrnAnmP__8daNpcF_cFPci();
extern "C" void getTexSRTKeyAnmP__8daNpcF_cFPci();
extern "C" void setMcaMorfAnm__8daNpcF_cFP18J3DAnmTransformKeyffiii();
extern "C" void setBckAnm__8daNpcF_cFP15J3DAnmTransformfiiib();
extern "C" void setBtpAnm__8daNpcF_cFP16J3DAnmTexPatternP12J3DModelDatafi();
extern "C" void setBtkAnm__8daNpcF_cFP19J3DAnmTextureSRTKeyP12J3DModelDatafi();
extern "C" void setEnvTevColor__8daNpcF_cFv();
extern "C" void setRoomNo__8daNpcF_cFv();
extern "C" void playExpressionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData();
extern "C" void playMotionAnm__8daNpcF_cFPPPQ28daNpcF_c18daNpcF_anmPlayData();
extern "C" void setLookatMtx__8daNpcF_cFiPif();
extern "C" void ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci();
extern "C" void orderEvent__8daNpcF_cFiPcUsUsUcUs();
extern "C" void initTalk__8daNpcF_cFiPP10fopAc_ac_c();
extern "C" void talkProc__8daNpcF_cFPiiPP10fopAc_ac_c();
extern "C" void step__8daNpcF_cFsiii();
extern "C" void getDistTableIdx__8daNpcF_cFii();
extern "C" void getEvtAreaTagP__8daNpcF_cFii();
extern "C" void getAttnActorP__8daNpcF_cFiPFPvPv_Pvffffsii();
extern "C" void chkFindPlayer2__8daNpcF_cFis();
extern "C" void daNpcF_chkEvtBit__FUl();
extern "C" void daNpcF_offTmpBit__FUl();
extern "C" void dKy_darkworld_check__Fv();
extern "C" void __ct__10dMsgFlow_cFv();
extern "C" void __dt__10dMsgFlow_cFv();
extern "C" void getEventId__10dMsgFlow_cFPi();
extern "C" void Set__4cCcSFP8cCcD_Obj();
extern "C" void __mi__4cXyzCFRC3Vec();
extern "C" void cM_atan2s__Fff();
extern "C" void __ct__11cBgS_GndChkFv();
extern "C" void __dt__11cBgS_GndChkFv();
extern "C" void __dt__13cBgS_PolyInfoFv();
extern "C" void __dt__8cM3dGCirFv();
extern "C" void SetC__8cM3dGCylFRC4cXyz();
extern "C" void SetH__8cM3dGCylFf();
extern "C" void SetR__8cM3dGCylFf();
extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz();
extern "C" void __ct__10Z2CreatureFv();
extern "C" void __dt__10Z2CreatureFv();
extern "C" void init__10Z2CreatureFP3VecP3VecUcUc();
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void init__12J3DFrameCtrlFs();
extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs();
extern "C" void initialize__14J3DMaterialAnmFv();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void __ptmf_test();
extern "C" void __ptmf_cmpr();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */];
extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
extern "C" extern void* __vt__8dCcD_Cyl[36];
extern "C" extern void* __vt__9dCcD_Stts[11];
extern "C" u8 mCcDCyl__8daNpcF_c[68];
extern "C" extern void* __vt__8daNpcF_c[18];
extern "C" extern void* __vt__15daNpcF_MatAnm_c[4 + 6 /* padding */];
extern "C" extern void* __vt__12cCcD_CylAttr[25];
extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
extern "C" extern void* __vt__9cCcD_Stts[8];
extern "C" extern void* __vt__14J3DMaterialAnm[4];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 mCurrentMtx__6J3DSys[48];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" void chkPointInArea__15daTag_EvtArea_cF4cXyz4cXyz();
extern "C" void __register_global_object();
//
// Declarations:
//
void daNpcThe_HIO_c::genMessage(JORMContext* ctext) {
// TODO
}
#endif
/* 80AFC67C-80AFC680 000014 0004+00 1/1 0/0 0/0 .bss l_HIO */
static daNpcThe_Param_c l_HIO;
NPC_THE_HIO_CLASS l_HIO;
/* 80AFC1F0-80AFC200 000020 0010+00 1/1 0/0 0/0 .data l_bmdGetParamList */
static daNpc_GetParam1 l_bmdGetParamList[2] = {
@ -332,7 +150,10 @@ static char* l_resNames[4] = {
/* 80AFC390-80AFC3A0 0001C0 0010+00 0/2 0/0 0/0 .data l_evtGetParamList */
static int l_evtGetParamList[4] = {
0, 3, 3, 0,
0,
3,
3,
0,
};
/* 80AFC3A0-80AFC3B0 -00001 0010+00 0/2 0/0 0/0 .data l_evtNames */
@ -365,14 +186,11 @@ int daNpcThe_c::Draw() {
mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm);
ActionFn action_test = &test;
int is_test = mpActionFn == action_test;
return draw(is_test, false, daNpcThe_Param_c::m.mShadowDepth, NULL, false);
return draw(is_test, false, mpHIO->m.common.real_shadow_size, NULL, false);
}
/* 80AF76CC-80AF7850 0000EC 0184+00 1/1 0/0 0/0 .text __ct__10daNpcThe_cFv */
// NONMATCHING daNpcF_c constructor needs to not be inlined
daNpcThe_c::daNpcThe_c() {
/* empty function */
}
daNpcThe_c::daNpcThe_c() {}
/* 80AF78E0-80AF7AE0 000300 0200+00 1/0 0/0 0/0 .text __dt__10daNpcThe_cFv */
daNpcThe_c::~daNpcThe_c() {
@ -384,55 +202,18 @@ daNpcThe_c::~daNpcThe_c() {
}
}
/* 80AFBE0C-80AFBE78 000000 006C+00 11/11 0/0 0/0 .rodata m__16daNpcThe_Param_c */
daNpcThe_Param_c::param const daNpcThe_Param_c::m = {
220.0f, // mAttnOffsetY
-3.0f, // mGravity
1.0f, // mScale
400.0f, // mShadowDepth
255.0f, // mCcWeight
200.0f, // mCylH
35.0f, // mWallH
40.0f, // mWallR
0.0f, // mBodyUpAngle
-20.0f, // mBodyDownAngle
10.0f, // mBodyLeftAngle
-10.0f, // mBodyRightAngle
30.0f, // mHeadUpAngle
-20.0f, // mHeadDownAngle
45.0f, // mHeadLeftAngle
-45.0f, // mHeadRightAngle
0.6f, // mNeckAngleScl
12.0f, // mMorfFrames
3, // mSpeakDistIdx
6, // mSpeakAngleIdx
5, // mTalkDistIdx
6, // mTalkAngleIdx
80.0f, // mAttnFovY
500.0f, // mAttnRadius
300.0f, // mAttnUpperY
-300.0f, // mAttnLowerY
60,
8, // mDamageTimer
0, // mTestExpression
0, // mTestMotion
0, // mTestLookMode
false, // mTest
};
int daNpcThe_c::CreateHeap() {
J3DModelData* model_data = NULL;
mTwilight = dKy_darkworld_check();
int bmd_get_idx = mTwilight ? 1 : 0;
if (l_bmdGetParamList[bmd_get_idx].fileIdx >= 0) {
model_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(
l_resNames[l_bmdGetParamList[bmd_get_idx].arcIdx],
l_bmdGetParamList[bmd_get_idx].fileIdx
));
model_data = static_cast<J3DModelData*>(
dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[bmd_get_idx].arcIdx],
l_bmdGetParamList[bmd_get_idx].fileIdx));
}
mpMorf = new mDoExt_McaMorfSO(model_data, NULL, NULL, NULL, -1, 1.0f, 0, -1,
&mSound, 0x80000, 0x11020284);
mpMorf = new mDoExt_McaMorfSO(model_data, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mSound, 0x80000,
0x11020284);
if (mpMorf != NULL && mpMorf->getModel() == NULL) {
mpMorf->stopZelAnime();
mpMorf = NULL;
@ -475,13 +256,13 @@ int daNpcThe_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
}
mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no));
switch (joint_no) {
case 1:
case 3:
case 4:
setLookatMtx(joint_no, lookat_joints, daNpcThe_Param_c::m.mNeckAngleScl);
break;
case 1:
case 3:
case 4:
setLookatMtx(joint_no, lookat_joints, mpHIO->m.common.neck_rotation_ratio);
break;
}
i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get());
@ -723,10 +504,10 @@ void daNpcThe_c::setMotionAnm(int i_idx, f32 i_morf) {
}
if (l_btkGetParamList[0].fileIdx >= 0) {
anm_tex = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[0].arcIdx],
l_btkGetParamList[0].fileIdx);
anm_tex =
getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx);
}
if (anm_tex != NULL) {
if (setBtkAnm(anm_tex, mpMorf->getModel()->getModelData(), 1.0f, 2)) {
mAnmFlags |= ANM_PAUSE_BTK | ANM_PLAY_BTK;
@ -743,19 +524,19 @@ void daNpcThe_c::setMotionAnm(int i_idx, f32 i_morf) {
/* 80AFA338-80AFA6CC 002D58 0394+00 1/1 0/0 0/0 .text playExpression__10daNpcThe_cFv */
void daNpcThe_c::playExpression() {
daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData* pDat0[2] = {&dat0, NULL};
daNpcF_anmPlayData dat1 = {ANM_F_SMILE, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat1 = {ANM_F_SMILE, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData* pDat1[2] = {&dat1, NULL};
daNpcF_anmPlayData dat2 = {ANM_F_CHUCKLE, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat2 = {ANM_F_CHUCKLE, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData* pDat2[2] = {&dat2, NULL};
daNpcF_anmPlayData dat3 = {ANM_F_TALK_B, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat3 = {ANM_F_TALK_B, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData* pDat3[2] = {&dat3, NULL};
daNpcF_anmPlayData dat4 = {ANM_F_TALK_C, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat4 = {ANM_F_TALK_C, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData* pDat4[2] = {&dat4, NULL};
daNpcF_anmPlayData dat5 = {ANM_F_LAUGH, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat5 = {ANM_F_LAUGH, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData* pDat5[2] = {&dat5, NULL};
daNpcF_anmPlayData dat6 = {ANM_F_TALK_R, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat6 = {ANM_F_TALK_R, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData* pDat6[2] = {&dat6, NULL};
daNpcF_anmPlayData dat7 = {ANM_FH_TALK_R, 0.0f, 0};
daNpcF_anmPlayData* pDat7[2] = {&dat7, NULL};
@ -769,23 +550,11 @@ void daNpcThe_c::playExpression() {
daNpcF_anmPlayData* pDat11[2] = {&dat11, NULL};
daNpcF_anmPlayData dat12 = {ANM_FH_LAUGH, 0.0f, 0};
daNpcF_anmPlayData* pDat12[2] = {&dat12, NULL};
daNpcF_anmPlayData dat13 = {ANM_NONE, daNpcThe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat13 = {ANM_NONE, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat13[1] = {&dat13};
daNpcF_anmPlayData** ppDat[14] = {
pDat0,
pDat1,
pDat2,
pDat3,
pDat4,
pDat5,
pDat6,
pDat7,
pDat8,
pDat9,
pDat10,
pDat11,
pDat12,
pDat13,
pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6,
pDat7, pDat8, pDat9, pDat10, pDat11, pDat12, pDat13,
};
if (mExpression >= 0 && mExpression < 14) {
playExpressionAnm(ppDat);
@ -794,56 +563,99 @@ void daNpcThe_c::playExpression() {
/* 80AF9F94-80AFA338 0029B4 03A4+00 1/1 0/0 0/0 .text playMotion__10daNpcThe_cFv */
void daNpcThe_c::playMotion() {
daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat0 = {ANM_WAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat0[1] = {&dat0};
daNpcF_anmPlayData dat1a = {ANM_LOOK_A, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat1a = {ANM_LOOK_A, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat1b = {ANM_WAIT_LOOKING, 0.0f, 0};
daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b};
daNpcF_anmPlayData dat2a = {ANM_TO_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat2a = {ANM_TO_WAIT_B, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat2b = {ANM_WAIT_B, 0.0f, 0};
daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b};
daNpcF_anmPlayData dat3 = {ANM_WAIT_LOOKUP, daNpcThe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat3 = {ANM_WAIT_LOOKUP, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat3[1] = {&dat3};
daNpcF_anmPlayData dat4a = {ANM_KUNE_TALK, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat4a = {ANM_KUNE_TALK, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat4b = {ANM_KUNE_WAIT_B, 0.0f, 0};
daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b};
daNpcF_anmPlayData dat5 = {ANM_KUNE_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat5 = {ANM_KUNE_WAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat5[1] = {&dat5};
daNpcF_anmPlayData dat6a = {ANM_KUNE_SHISHI, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat6b = {ANM_KUNE_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat6a = {ANM_KUNE_SHISHI, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat6b = {ANM_KUNE_WAIT_A, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b};
daNpcF_anmPlayData dat7 = {ANM_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat7 = {ANM_WAIT_B, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat7[1] = {&dat7};
daNpcF_anmPlayData dat8 = {ANM_KUNE_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 0};
daNpcF_anmPlayData dat8 = {ANM_KUNE_WAIT_B, mpHIO->m.common.morf_frame, 0};
daNpcF_anmPlayData* pDat8[1] = {&dat8};
daNpcF_anmPlayData dat9a = {ANM_TALK_R, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat9a = {ANM_TALK_R, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat9b = {ANM_TALKING_R, 0.0f, 0};
daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b};
daNpcF_anmPlayData dat10a = {ANM_LOOK, daNpcThe_Param_c::m.mMorfFrames, 1};
daNpcF_anmPlayData dat10a = {ANM_LOOK, mpHIO->m.common.morf_frame, 1};
daNpcF_anmPlayData dat10b = {ANM_WAIT_LOOKING, 0.0f, 0};
daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b};
daNpcF_anmPlayData** ppDat[11] = {
pDat0,
pDat1,
pDat2,
pDat3,
pDat4,
pDat5,
pDat6,
pDat7,
pDat8,
pDat9,
pDat10,
pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10,
};
if (mMotion >= 0 && mMotion < 11) {
playMotionAnm(ppDat);
}
}
/* 80AFC114-80AFC120 000308 000C+00 0/1 0/0 0/0 .rodata @4676 */
static u8 const lit_4676[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80AFB1C4-80AFB488 003BE4 02C4+00 1/1 0/0 0/0 .text lookat__10daNpcThe_cFv */
void daNpcThe_c::lookat() {
fopAc_ac_c* actor = NULL;
J3DModel* model = mpMorf->getModel();
BOOL snap = false;
f32 body_angleX_min = mpHIO->m.common.body_angleX_min;
f32 body_angleX_max = mpHIO->m.common.body_angleX_max;
f32 body_angleY_min = mpHIO->m.common.body_angleY_min;
f32 body_angleY_max = mpHIO->m.common.body_angleY_max;
f32 head_angleX_min = mpHIO->m.common.head_angleX_min;
f32 head_angleX_max = mpHIO->m.common.head_angleX_max;
f32 head_angleY_min = mpHIO->m.common.head_angleY_min;
f32 head_angleY_max = mpHIO->m.common.head_angleY_max;
s16 angle_delta = mCurAngle.y - mOldAngle.y;
cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
switch (mLookMode) {
case LOOK_RESET:
snap = true;
break;
case LOOK_PLAYER_TALK:
head_angleY_min = -80.0f;
head_angleY_max = 80.0f;
// fallthrough
case LOOK_PLAYER:
actor = daPy_getPlayerActorClass();
break;
case LOOK_ACTOR:
actor = fopAcM_SearchByName(PROC_NPC_ZRC);
break;
case LOOK_ATTN:
break;
}
if (actor != NULL) {
if (mLookMode == LOOK_ACTOR) {
mLookPos = actor->eyePos;
} else {
mLookPos = actor->attention_info.position;
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK && mLookMode != LOOK_ATTN)
{
mLookPos.y -= 40.0f;
}
}
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(NULL);
}
mLookat.setParam(body_angleX_min, body_angleX_max, body_angleY_min, body_angleY_max, 0.0f, 0.0f,
0.0f, 0.0f, head_angleX_min, head_angleX_max, head_angleY_min, head_angleY_max,
mCurAngle.y, lookat_pos);
mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, 0);
}
/* 80AF8744-80AF8B0C 001164 03C8+00 1/0 0/0 0/0 .text wait__10daNpcThe_cFPv */
BOOL daNpcThe_c::wait(void* param_0) {
@ -912,11 +724,10 @@ BOOL daNpcThe_c::wait(void* param_0) {
}
if (mCurAngle.y == home.angle.y) {
fopAc_ac_c* actor =
getAttnActorP(mActorMngr[0].getActorP() != NULL, srchAttnActor1,
daNpcThe_Param_c::m.mAttnRadius, daNpcThe_Param_c::m.mAttnUpperY,
daNpcThe_Param_c::m.mAttnLowerY, daNpcThe_Param_c::m.mAttnFovY,
shape_angle.y, 120, 1);
fopAc_ac_c* actor = getAttnActorP(
mActorMngr[0].getActorP() != NULL, srchAttnActor1,
mpHIO->m.common.search_distance, mpHIO->m.common.search_height,
mpHIO->m.common.search_depth, mpHIO->m.common.fov, shape_angle.y, 120, 1);
if (actor != NULL) {
mActorMngr[1].entry(actor);
setLookMode(LOOK_ATTN);
@ -1008,12 +819,12 @@ BOOL daNpcThe_c::talk(void* param_0) {
bvar1 = true;
} else {
if (mType == TYPE_KAKARIKO &&
(mpMorf->getAnm() == getTrnsfrmKeyAnmP(
l_resNames[l_bckGetParamList[24].arcIdx], l_bckGetParamList[24].fileIdx)
|| mpMorf->getAnm() == getTrnsfrmKeyAnmP(
l_resNames[l_bckGetParamList[25].arcIdx], l_bckGetParamList[25].fileIdx)
|| mpMorf->getAnm() == getTrnsfrmKeyAnmP(
l_resNames[l_bckGetParamList[26].arcIdx], l_bckGetParamList[26].fileIdx)))
(mpMorf->getAnm() == getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[24].arcIdx],
l_bckGetParamList[24].fileIdx) ||
mpMorf->getAnm() == getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[25].arcIdx],
l_bckGetParamList[25].fileIdx) ||
mpMorf->getAnm() == getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[26].arcIdx],
l_bckGetParamList[26].fileIdx)))
{
setLookMode(LOOK_NONE);
} else {
@ -1045,11 +856,11 @@ BOOL daNpcThe_c::talk(void* param_0) {
}
int item_no = 0;
if (mFlow.getEventId(&item_no) == 1) {
mItemID = fopAcM_createItemForPresentDemo(&current.pos, item_no,
0, -1, -1, NULL, NULL);
mItemID = fopAcM_createItemForPresentDemo(&current.pos, item_no, 0, -1, -1,
NULL, NULL);
if (mItemID != -1) {
s16 event_id = dComIfGp_getEventManager()
.getEventIdx(this, "DEFAULT_GETITEM", 0xff);
s16 event_id = dComIfGp_getEventManager().getEventIdx(
this, "DEFAULT_GETITEM", 0xff);
dComIfGp_getEvent().reset(this);
fopAcM_orderChangeEventId(this, event_id, 1, 0xffff);
field_0x9ec = true;
@ -1100,11 +911,11 @@ BOOL daNpcThe_c::test(void* param_0) {
case 2:
attention_info.flags = 0;
if (mExpression != daNpcThe_Param_c::m.mTestExpression) {
setExpression(daNpcThe_Param_c::m.mTestExpression, daNpcThe_Param_c::m.mMorfFrames);
if (mExpression != mpHIO->m.common.face_expression) {
setExpression(mpHIO->m.common.face_expression, mpHIO->m.common.morf_frame);
}
setMotion(daNpcThe_Param_c::m.mTestMotion, daNpcThe_Param_c::m.mMorfFrames, false);
setLookMode(daNpcThe_Param_c::m.mTestLookMode);
setMotion(mpHIO->m.common.motion, mpHIO->m.common.morf_frame, false);
setLookMode(mpHIO->m.common.look_mode);
break;
case 3:
@ -1160,9 +971,9 @@ static cPhs__Step daNpcThe_Create(void* i_this) {
/* 80AF9358-80AF9748 001D78 03F0+00 1/1 0/0 0/0 .text create__10daNpcThe_cFv */
cPhs__Step daNpcThe_c::create() {
fopAcM_ct(this, daNpcThe_c);
mType = getTypeFromParam();
int flow_id = home.angle.x;
if (flow_id != 0xffff) {
mFlowID = flow_id;
@ -1171,10 +982,11 @@ cPhs__Step daNpcThe_c::create() {
}
if (mType == TYPE_KAKARIKO
/* dSv_event_flag_c::M_035 - Cutscene - [cutscene: 35] after carriage guarding event */
/* dSv_event_flag_c::M_035 - Cutscene - [cutscene: 35] after carriage guarding event */
&& (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[68])
/* dSv_event_flag_c::M_045 - Lakebed Temple - Lakebed Temple clear */
|| dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[78]))) {
/* dSv_event_flag_c::M_045 - Lakebed Temple - Lakebed Temple clear */
|| dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[78])))
{
return cPhs_ERROR_e;
}
@ -1215,19 +1027,19 @@ cPhs__Step daNpcThe_c::create() {
fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
fopAcM_setCullSizeBox2(this, mpMorf->getModel()->getModelData());
mSound.init(&current.pos, &eyePos, 3, 1);
mAcchCir.SetWall(daNpcThe_Param_c::m.mWallR, daNpcThe_Param_c::m.mWallH);
mAcchCir.SetWall(mpHIO->m.common.width, mpHIO->m.common.knee_length);
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
mAcch.SetRoofNone();
mAcch.SetWaterNone();
mAcch.CrrPos(dComIfG_Bgsp());
mCcStts.Init(daNpcThe_Param_c::m.mCcWeight, 0, this);
mCcStts.Init(mpHIO->m.common.weight, 0, this);
mColCyl.Set(mCcDCyl);
mColCyl.SetStts(&mCcStts);
mColCyl.SetTgType(0);
mColCyl.SetTgSPrm(0);
mColCyl.SetH(daNpcThe_Param_c::m.mCylH);
mColCyl.SetR(daNpcThe_Param_c::m.mWallR);
mColCyl.SetH(mpHIO->m.common.height);
mColCyl.SetR(mpHIO->m.common.width);
mGndChk = mAcch.m_gnd;
mGroundH = mAcch.GetGroundH();
@ -1288,7 +1100,6 @@ static int daNpcThe_Draw(void* i_this) {
return static_cast<daNpcThe_c*>(i_this)->Draw();
}
/* 80AF99BC-80AF99C4 0023DC 0008+00 1/0 0/0 0/0 .text daNpcThe_IsDelete__FPv */
static int daNpcThe_IsDelete(void* i_this) {
return 1;
@ -1302,7 +1113,7 @@ void daNpcThe_c::setParam() {
ActionFn next_action = mpNextActionFn;
mpNextActionFn = NULL;
if (daNpcThe_Param_c::m.mTest) {
if (mpHIO->m.common.debug_mode_ON) {
mpNextActionFn = &test;
} else if (mTwilight) {
mpNextActionFn = &waitTW;
@ -1315,8 +1126,8 @@ void daNpcThe_c::setParam() {
}
}
int speak_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : daNpcThe_Param_c::m.mSpeakAngleIdx;
int talk_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : daNpcThe_Param_c::m.mTalkAngleIdx;
int speak_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : mpHIO->m.common.talk_angle;
int talk_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : mpHIO->m.common.attention_angle;
attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
if (isSneaking()) {
attention_info.distances[fopAc_attn_LOCK_e] = 0x4e;
@ -1325,29 +1136,28 @@ void daNpcThe_c::setParam() {
attention_info.flags |= fopAc_AttnFlag_UNK_0x800000;
} else {
if (!strcmp(dComIfGp_getStartStageName(), "R_SP116")) {
attention_info.distances[fopAc_attn_LOCK_e]
= getDistTableIdx(daNpcThe_Param_c::m.mTalkDistIdx, talk_angle_idx);
attention_info.distances[fopAc_attn_TALK_e]
= attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e]
= getDistTableIdx(daNpcThe_Param_c::m.mSpeakDistIdx + 1, speak_angle_idx);
attention_info.distances[fopAc_attn_LOCK_e] =
getDistTableIdx(mpHIO->m.common.attention_distance, talk_angle_idx);
attention_info.distances[fopAc_attn_TALK_e] =
attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e] =
getDistTableIdx(mpHIO->m.common.talk_distance + 1, speak_angle_idx);
} else {
attention_info.distances[fopAc_attn_LOCK_e]
= getDistTableIdx(daNpcThe_Param_c::m.mTalkDistIdx, talk_angle_idx);
attention_info.distances[fopAc_attn_TALK_e]
= attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e]
= getDistTableIdx(daNpcThe_Param_c::m.mSpeakDistIdx, speak_angle_idx);
attention_info.distances[fopAc_attn_LOCK_e] =
getDistTableIdx(mpHIO->m.common.attention_distance, talk_angle_idx);
attention_info.distances[fopAc_attn_TALK_e] =
attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e] =
getDistTableIdx(mpHIO->m.common.talk_distance, speak_angle_idx);
}
}
scale.setall(daNpcThe_Param_c::m.mScale);
mAcchCir.SetWallR(daNpcThe_Param_c::m.mWallR);
mAcchCir.SetWallH(daNpcThe_Param_c::m.mWallH);
gravity = daNpcThe_Param_c::m.mGravity;
scale.setall(mpHIO->m.common.scale);
mAcchCir.SetWallR(mpHIO->m.common.width);
mAcchCir.SetWallH(mpHIO->m.common.knee_length);
gravity = mpHIO->m.common.gravity;
}
/* 80AF9CF0-80AF9F94 002710 02A4+00 1/0 0/0 0/0 .text main__10daNpcThe_cFv */
// NONMATCHING dComIfG_gameInfo issues
BOOL daNpcThe_c::main() {
@ -1370,9 +1180,8 @@ BOOL daNpcThe_c::main() {
mItemID = -1;
}
if (!daNpcThe_Param_c::m.mTest
&& (dComIfGp_event_runCheck() == FALSE
|| (mOrderNewEvt && dComIfGp_getEvent().isOrderOK())))
if (!mpHIO->m.common.debug_mode_ON &&
(dComIfGp_event_runCheck() == FALSE || (mOrderNewEvt && dComIfGp_getEvent().isOrderOK())))
{
if (mOrderEvtNo != 0 && l_resNames[l_evtGetParamList[mOrderEvtNo]] != NULL) {
eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo]]);
@ -1421,7 +1230,8 @@ BOOL daNpcThe_c::doEvent() {
dEvent_manager_c& event_manager = dComIfGp_getEventManager();
if (eventInfo.checkCommandTalk()) {
if (mTwilight) {
/* dSv_event_flag_c::F_0277 - Castle Town - Hear conversation between Telma and Ilia in Telma's shop (Twilight) */
/* dSv_event_flag_c::F_0277 - Castle Town - Hear conversation between Telma and Ilia
* in Telma's shop (Twilight) */
if (daNpcF_chkEvtBit(0x115)) {
mOrderEvtNo = 2;
} else {
@ -1454,8 +1264,8 @@ BOOL daNpcThe_c::doEvent() {
setAction(&talk);
}
} else {
s16 event_idx
= dComIfGp_getEventManager().getEventIdx(this, "NO_RESPONSE", 0xff);
s16 event_idx =
dComIfGp_getEventManager().getEventIdx(this, "NO_RESPONSE", 0xff);
dComIfGp_getEvent().reset(this);
fopAcM_orderChangeEventId(this, event_idx, 1, 0xffff);
}
@ -1484,8 +1294,9 @@ BOOL daNpcThe_c::doEvent() {
}
ret = true;
}
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1
&& event_manager.endCheck(mEventIdx)) {
if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 &&
event_manager.endCheck(mEventIdx))
{
dComIfGp_event_reset();
mOrderEvtNo = 0;
mEventIdx = -1;
@ -1514,7 +1325,6 @@ BOOL daNpcThe_c::doEvent() {
}
/* 80AFADEC-80AFAEC8 00380C 00DC+00 1/0 0/0 0/0 .text ctrlBtk__10daNpcThe_cFv */
// NONMATCHING somehow this needs to not inline TSinCosTable<13,f32>::sinShort
BOOL daNpcThe_c::ctrlBtk() {
if (mpMatAnm != NULL) {
J3DAnmTextureSRTKey* anm = NULL;
@ -1552,7 +1362,7 @@ void daNpcThe_c::setAttnPos() {
mDoMtx_stack_c::multVec(&vec1, &vec1);
mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &vec1);
mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &vec1);
cXyz* attn_pos = mLookat.getAttnPos();
if (attn_pos != NULL) {
cXyz vec2 = *attn_pos - eyePos;
@ -1564,8 +1374,7 @@ void daNpcThe_c::setAttnPos() {
mEyeAngle.x = 0;
}
attention_info.position.set(current.pos.x,
current.pos.y + daNpcThe_Param_c::m.mAttnOffsetY,
attention_info.position.set(current.pos.x, current.pos.y + mpHIO->m.common.attention_offset,
current.pos.z);
if (!mHide) {
@ -1574,65 +1383,6 @@ void daNpcThe_c::setAttnPos() {
}
}
/* 80AFB1C4-80AFB488 003BE4 02C4+00 1/1 0/0 0/0 .text lookat__10daNpcThe_cFv */
// NONMATCHING rodata problems
void daNpcThe_c::lookat() {
fopAc_ac_c* actor = NULL;
J3DModel* model = mpMorf->getModel();
BOOL snap = false;
f32 body_down_angle = daNpcThe_Param_c::m.mBodyDownAngle;
f32 body_up_angle = daNpcThe_Param_c::m.mBodyUpAngle;
f32 body_right_angle = daNpcThe_Param_c::m.mBodyRightAngle;
f32 body_left_angle = daNpcThe_Param_c::m.mBodyLeftAngle;
f32 head_down_angle = daNpcThe_Param_c::m.mHeadDownAngle;
f32 head_up_angle = daNpcThe_Param_c::m.mHeadUpAngle;
f32 head_right_angle = daNpcThe_Param_c::m.mHeadRightAngle;
f32 head_left_angle = daNpcThe_Param_c::m.mHeadLeftAngle;
s16 angle_delta = mCurAngle.y - mOldAngle.y;
cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]};
csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]};
switch (mLookMode) {
case LOOK_RESET:
snap = true;
break;
case LOOK_PLAYER_TALK:
head_right_angle = -80.0f;
head_left_angle = 80.0f;
// fallthrough
case LOOK_PLAYER:
actor = daPy_getPlayerActorClass();
break;
case LOOK_ACTOR:
actor = fopAcM_SearchByName(PROC_NPC_ZRC);
break;
case LOOK_ATTN:
break;
}
if (actor != NULL) {
if (mLookMode == LOOK_ACTOR) {
mLookPos = actor->eyePos;
} else {
mLookPos = actor->attention_info.position;
if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK && mLookMode != LOOK_ATTN)
{
mLookPos.y -= 40.0f;
}
}
mLookat.setAttnPos(&mLookPos);
} else {
mLookat.setAttnPos(NULL);
}
mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle,
0.0f, 0.0f, 0.0f, 0.0f,
head_down_angle, head_up_angle, head_right_angle, head_left_angle,
mCurAngle.y, lookat_pos);
mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, 0);
}
/* 80AFB488-80AFB490 003EA8 0008+00 1/0 0/0 0/0 .text drawDbgInfo__10daNpcThe_cFv */
BOOL daNpcThe_c::drawDbgInfo() {
return false;
@ -1640,10 +1390,8 @@ BOOL daNpcThe_c::drawDbgInfo() {
/* 80AFC534-80AFC554 -00001 0020+00 1/0 0/0 0/0 .data daNpcThe_MethodTable */
static actor_method_class daNpcThe_MethodTable = {
(process_method_func)daNpcThe_Create,
(process_method_func)daNpcThe_Delete,
(process_method_func)daNpcThe_Execute,
(process_method_func)daNpcThe_IsDelete,
(process_method_func)daNpcThe_Create, (process_method_func)daNpcThe_Delete,
(process_method_func)daNpcThe_Execute, (process_method_func)daNpcThe_IsDelete,
(process_method_func)daNpcThe_Draw,
};

View File

@ -1,14 +1,84 @@
/**
* @file d_a_npc_uri.cpp
* @file d_a_npc_uri.cpp
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_npc_uri.h"
#include "Z2AudioLib/Z2Instances.h"
#include "d/actor/d_a_npc_uri.h"
#include "m_Do/m_Do_graphic.h"
/* 80B2CE14-80B2CEC0 000000 00AC+00 14/14 0/0 0/0 .rodata m__17daNpc_Uri_Param_c */
const daNpc_Uri_HIOParam daNpc_Uri_Param_c::m = {
200.0f, // attention_offset
-3.0f, // gravity
1.0f, // scale
500.0f, // real_shadow_size
255.0f, // weight
180.0f, // height
35.0f, // knee_length
30.0f, // width
0.0f, // body_angleX_max
0.0f, // body_angleX_min
10.0f, // body_angleY_max
-10.0f, // body_angleY_min
30.0f, // head_angleX_max
-10.0f, // head_angleX_min
45.0f, // head_angleY_max
-45.0f, // head_angleY_min
0.6f, // neck_rotation_ratio
20.0f, // morf_frame
3, // talk_distance
6, // talk_angle
5, // attention_distance
6, // attention_angle
110.0f, // fov
400.0f, // search_distance
300.0f, // search_height
-300.0f, // search_depth
60, // attention_time
8, // damage_time
0, // face_expression
0, // motion
0, // look_mode
0, // debug_mode_ON
0, // debug_info_ON
4.0f, // expression_morf_frame
0.0f, // box_min_x
0.0f, // box_min_y
0.0f, // box_min_z
0.0f, // box_max_x
0.0f, // box_max_y
0.0f, // box_max_z
0.0f, // box_offset
120, // field_0x8c
120, // field_0x8e
60, // field_0x90
180, // field_0x92
10, // field_0x94
0, // field_0x96
350.0f, // field_0x98
400.0f, // field_0x9c
3000.0f, // field_0xa0
200.0f, // field_0xa4
600.0f, // field_0xa8
};
#if DEBUG
daNpc_Uri_HIO_c::daNpc_Uri_HIO_c() {
m = daNpc_Uri_Param_c::m;
}
void daNpc_Uri_HIO_c::listenPropertyEvent(const JORPropertyEvent* event) {
// TODO
}
void daNpc_Uri_HIO_c::genMessage(JORMContext* ctext) {
// TODO
}
#endif
/* 80B2D068-80B2D078 000020 0010+00 1/1 0/0 0/0 .data l_bmdData */
static int l_bmdData[2][2] = {{12, 1}, {33, 2}};
@ -164,54 +234,6 @@ daNpc_Uri_c::~daNpc_Uri_c() {
deleteRes(l_loadResPtrnList[mType], (char const**)l_resNameList);
}
/* ############################################################################################## */
/* 80B2CE14-80B2CEC0 000000 00AC+00 14/14 0/0 0/0 .rodata m__17daNpc_Uri_Param_c */
daNpc_Uri_HIOParam const daNpc_Uri_Param_c::m = {
200.0f, // field_0x00
-3.0f, // field_0x04
1.0f, // field_0x08
500.0f, // field_0x0c
255.0f, // field_0x10
180.0f, // field_0x14
35.0f, // field_0x18
30.0f, // field_0x1c
0.0f, // field_0x20
0.0f, // field_0x24
10.0f, // field_0x28
-10.0f, // field_0x2c
30.0f, // field_0x30
-10.0f, // field_0x34
45.0f, // field_0x38
-45.0f, // field_0x3c
0.6f, // field_0x40
20.0f, // field_0x44
3, // field_0x48
6, // field_0x4a
5, // field_0x4c
6, // field_0x4e
110.0f, // field_0x50
400.0f, // field_0x54
300.0f, // field_0x58
-300.0f, // field_0x5c
60, // field_0x60
8, // field_0x62
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4.0f, // field_0x6c
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120, // field_0x8c
120, // field_0x8e
60, // field_0x90
180, // field_0x92
10, // field_0x94
0, // field_0x96
350.0f, // field_0x98
400.0f, // field_0x9c
3000.0f, // field_0xa0
200.0f, // field_0xa4
600.0f, // field_0xa8
};
/* 80B268F8-80B26BE4 000238 02EC+00 1/1 0/0 0/0 .text create__11daNpc_Uri_cFv */
int daNpc_Uri_c::create() {
static const int heapSize[] = {0, 0x3F20, 0, 0, 0x3740, 0x3740, 0};
@ -242,7 +264,7 @@ int daNpc_Uri_c::create() {
reset();
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this));
mCcStts.Init(daNpc_Uri_Param_c::m.field_0x10, 0, this);
mCcStts.Init(daNpc_Uri_Param_c::m.common.weight, 0, this);
mCyl.Set(mCcDCyl);
mCyl.SetStts(&mCcStts);
mCyl.SetTgHitCallback(tgHitCallBack);
@ -433,7 +455,8 @@ void daNpc_Uri_c::reset() {
field_0xfd8 = cStack_44;
field_0xfe4.setall(0);
field_0xfe4.y = cLib_targetAngleY(&acStack_38, &field_0xfd8);
/* dSv_event_flag_c::F_0032 - Ordon Ranch - 3rd day - First convo with fado (before forced goat chase) */
/* dSv_event_flag_c::F_0032 - Ordon Ranch - 3rd day - First convo with fado (before forced
* goat chase) */
if (daNpcT_chkEvtBit(0x25)) {
setPos(cStack_44);
cStack_a0.y = cLib_targetAngleY(&acStack_38, &cStack_44);
@ -446,23 +469,26 @@ void daNpc_Uri_c::reset() {
cStack_a0.y = cLib_targetAngleY(&acStack_38, &cStack_44);
mPath.setNextIdx(mPath.getNumPnts());
}
/* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail) */
/* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail)
*/
if (daNpcT_chkEvtBit(0x20)
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
|| daNpcT_chkEvtBit(0x1E)
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
|| daNpcT_chkEvtBit(0x92) )
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
|| daNpcT_chkEvtBit(0x92))
{
setPos(home.pos);
/* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail) */
/* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or
* fail) */
if (daNpcT_chkEvtBit(0x20)) {
field_0x100d = 1;
} else {
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
if (daNpcT_chkEvtBit(0x1E)
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
|| daNpcT_chkEvtBit(0x92)) {
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
|| daNpcT_chkEvtBit(0x92))
{
field_0x100f = 1;
}
}
@ -480,7 +506,8 @@ void daNpc_Uri_c::reset() {
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
daNpcT_offTmpBit(7);
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night
*/
dComIfGs_offTmpBit(0x1308);
setAngle(cStack_a0);
}
@ -509,10 +536,10 @@ void daNpc_Uri_c::setParam() {
selectAction();
srchActors();
s16 sVar7 = daNpc_Uri_Param_c::m.field_0x48;
s16 sVar6 = daNpc_Uri_Param_c::m.field_0x4a;
s16 sVar5 = daNpc_Uri_Param_c::m.field_0x4c;
s16 sVar4 = daNpc_Uri_Param_c::m.field_0x4e;
s16 sVar7 = mpHIO->m.common.talk_distance;
s16 sVar6 = mpHIO->m.common.talk_angle;
s16 sVar5 = mpHIO->m.common.attention_distance;
s16 sVar4 = mpHIO->m.common.attention_angle;
if (mType == TYPE_1) {
sVar6 = 4;
sVar4 = 4;
@ -528,18 +555,17 @@ void daNpc_Uri_c::setParam() {
attention_info.distances[fopAc_attn_TALK_e] = attention_info.distances[fopAc_attn_LOCK_e];
attention_info.distances[fopAc_attn_SPEAK_e] = daNpcT_getDistTableIdx(sVar7, sVar6);
attention_info.flags = (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e);
scale.set(daNpc_Uri_Param_c::m.field_0x08, daNpc_Uri_Param_c::m.field_0x08,
daNpc_Uri_Param_c::m.field_0x08);
mCcStts.SetWeight(daNpc_Uri_Param_c::m.field_0x10);
mCylH = daNpc_Uri_Param_c::m.field_0x14;
mWallR = daNpc_Uri_Param_c::m.field_0x1c;
mAttnFovY = daNpc_Uri_Param_c::m.field_0x50;
scale.set(mpHIO->m.common.scale, mpHIO->m.common.scale, mpHIO->m.common.scale);
mCcStts.SetWeight(mpHIO->m.common.weight);
mCylH = mpHIO->m.common.height;
mWallR = mpHIO->m.common.width;
mAttnFovY = mpHIO->m.common.fov;
mAcchCir.SetWallR(mWallR);
mAcchCir.SetWallH(daNpc_Uri_Param_c::m.field_0x18);
mRealShadowSize = daNpc_Uri_Param_c::m.field_0x0c;
gravity = daNpc_Uri_Param_c::m.field_0x04;
mExpressionMorfFrame = daNpc_Uri_Param_c::m.field_0x6c;
mMorfFrames = daNpc_Uri_Param_c::m.field_0x44;
mAcchCir.SetWallH(mpHIO->m.common.knee_length);
mRealShadowSize = mpHIO->m.common.real_shadow_size;
gravity = mpHIO->m.common.gravity;
mExpressionMorfFrame = mpHIO->m.common.expression_morf_frame;
mMorfFrames = mpHIO->m.common.morf_frame;
if (mType == TYPE_4) {
mAcch.SetGrndNone();
mAcch.SetWallNone();
@ -562,13 +588,15 @@ BOOL daNpc_Uri_c::checkChangeEvt() {
switch (mType) {
case TYPE_1:
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
if (!daNpcT_chkEvtBit(0x1E)
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
&& !daNpcT_chkEvtBit(0x92)) {
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
&& !daNpcT_chkEvtBit(0x92))
{
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
if (!daNpcT_chkTmpBit(0x7)) {
/* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore finding basket */
/* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore
* finding basket */
if (daNpcT_chkEvtBit(0x24)) {
mEvtNo = 4;
} else {
@ -577,7 +605,8 @@ BOOL daNpc_Uri_c::checkChangeEvt() {
evtChange();
return TRUE;
}
/* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass or fail) */
/* dSv_event_flag_c::F_0027 - Ordon Village - Uli tutorial ends (same whether pass
* or fail) */
} else if (!daNpcT_chkEvtBit(0x20) && field_0x100b == 0) {
mEvtNo = 7;
evtChange();
@ -585,10 +614,13 @@ BOOL daNpc_Uri_c::checkChangeEvt() {
}
break;
case TYPE_4:
/* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit - Reuinion with Colin et al. */
/* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit -
* Reuinion with Colin et al. */
if (daNpcT_chkEvtBit(0x3D)
/* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time (first forced conversation) */
&& !daNpcT_chkEvtBit(0x14A)) {
/* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time
(first forced conversation) */
&& !daNpcT_chkEvtBit(0x14A))
{
mEvtNo = 10;
evtChange();
return TRUE;
@ -714,7 +746,7 @@ void daNpc_Uri_c::beforeMove() {
}
/* 80B2DD64-80B2DD68 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */
static daNpc_Uri_Param_c l_HIO;
NPC_URI_HIO_CLASS l_HIO;
/* 80B27FD8-80B28318 001918 0340+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_Uri_cFv */
void daNpc_Uri_c::setAttnPos() {
@ -724,9 +756,12 @@ void daNpc_Uri_c::setAttnPos() {
f32 dVar6 = cM_s2rad(mCurAngle.y - field_0xd7e.y);
mJntAnm.setParam(this, mpMorf[0]->getModel(), &acStack_3c, getBackboneJointNo(),
getNeckJointNo(), getHeadJointNo(), l_HIO.m.field_0x24, l_HIO.m.field_0x20,
l_HIO.m.field_0x2c, l_HIO.m.field_0x28, l_HIO.m.field_0x34, l_HIO.m.field_0x30,
l_HIO.m.field_0x3c, l_HIO.m.field_0x38, l_HIO.m.field_0x40, dVar6, NULL);
getNeckJointNo(), getHeadJointNo(), mpHIO->m.common.body_angleX_min,
mpHIO->m.common.body_angleX_max, mpHIO->m.common.body_angleY_min,
mpHIO->m.common.body_angleY_max, mpHIO->m.common.head_angleX_min,
mpHIO->m.common.head_angleX_max, mpHIO->m.common.head_angleY_min,
mpHIO->m.common.head_angleY_max, mpHIO->m.common.neck_rotation_ratio, dVar6,
NULL);
mJntAnm.calcJntRad(0.2f, 1.0f, dVar6);
setMtx();
@ -737,7 +772,7 @@ void daNpc_Uri_c::setAttnPos() {
mJntAnm.setEyeAngleY(eyePos, mCurAngle.y + field_0xd8a.y, 1, 1.0f, 0);
acStack_3c.set(0.0f, 0.0f, 0.0f);
acStack_3c.y = l_HIO.m.field_0x00;
acStack_3c.y = mpHIO->m.common.attention_offset;
if (field_0x100d != 0) {
if (mType == TYPE_1) {
@ -907,7 +942,7 @@ int daNpc_Uri_c::selectAction() {
field_0xfc0[0] = &daNpc_Uri_c::sitWait;
} else {
if (field_0x100e != NULL) {
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
if (daNpcT_chkTmpBit(7) && field_0x100f == NULL) {
field_0xfc0[0] = &daNpc_Uri_c::walk;
} else {
@ -975,16 +1010,16 @@ int daNpc_Uri_c::getTutorialCond(cXyz param_1) {
cXyz cStack_5c;
local_44 = mPath.getPntPos(mPath.getNumPnts() - 1);
if (local_44.absXZ(param_1) < daNpc_Uri_Param_c::m.field_0x98) {
if (local_44.absXZ(param_1) < mpHIO->m.field_0x98) {
return 9;
}
f32 fVar11 = (param_1 - current.pos).absXZ();
s16 sVar8 = cLib_targetAngleY(&current.pos, &param_1) - mCurAngle.y;
s16 uVar5 = abs(sVar8);
if (daNpc_Uri_Param_c::m.field_0xa4 < fVar11 && ((u32)uVar5 & 0xFFFF) > 0x4000) {
if (daNpc_Uri_Param_c::m.field_0xa8 < fVar11) {
field_0x1000 = daNpc_Uri_Param_c::m.field_0xa8 - 100.0f;
if (mpHIO->m.field_0xa4 < fVar11 && ((u32)uVar5 & 0xFFFF) > 0x4000) {
if (mpHIO->m.field_0xa8 < fVar11) {
field_0x1000 = mpHIO->m.field_0xa8 - 100.0f;
return 5;
}
if (field_0x1009 != NULL) {
@ -996,13 +1031,13 @@ int daNpc_Uri_c::getTutorialCond(cXyz param_1) {
for (i = 0; i < mPath.getNumPnts() - 1; i++) {
local_44 = mPath.getPntPos(i);
local_50 = mPath.getPntPos(i + 1);
if (!((param_1 - local_44).absXZ() < daNpc_Uri_Param_c::m.field_0xa8)) {
if (!((param_1 - local_50).absXZ() < daNpc_Uri_Param_c::m.field_0xa8)) {
if (!((param_1 - local_44).absXZ() < mpHIO->m.field_0xa8)) {
if (!((param_1 - local_50).absXZ() < mpHIO->m.field_0xa8)) {
f32 local_a8;
if (cM3d_Len2dSqPntAndSegLine(param_1.x, param_1.z, local_44.x, local_44.z,
local_50.x, local_50.z, &cStack_5c.x, &cStack_5c.z,
&local_a8) &&
local_a8 < daNpc_Uri_Param_c::m.field_0xa8)
local_a8 < mpHIO->m.field_0xa8)
{
break;
}
@ -1015,7 +1050,7 @@ int daNpc_Uri_c::getTutorialCond(cXyz param_1) {
}
if (mPath.getNumPnts() - 1 <= i) {
field_0x1000 = daNpc_Uri_Param_c::m.field_0xa8 - 100.0f;
field_0x1000 = mpHIO->m.field_0xa8 - 100.0f;
return 5;
}
@ -1180,7 +1215,8 @@ int daNpc_Uri_c::cutEndCarryTutorial(int param_1) {
if (fopAcM_IsExecuting(mItemPartnerId)) {
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
daNpcT_offTmpBit(7);
/* dSv_event_tmp_flag_c::T_0009 - Ordon Village - Walked a bit during Uli's pick-up tutorial */
/* dSv_event_tmp_flag_c::T_0009 - Ordon Village - Walked a bit during Uli's pick-up
* tutorial */
daNpcT_offTmpBit(10);
/* dSv_event_tmp_flag_c::T_0031 - Ordon Village - Borrow Rusl's sword */
daNpcT_offTmpBit(0x20);
@ -1270,14 +1306,15 @@ int daNpc_Uri_c::cutFindWolf(int param_1) {
sVar9 = -0x4000;
}
sVar9 += home.angle.y;
cStack_2c.set(0.0f, 300.0f, daNpc_Uri_Param_c::m.field_0x54 + 150.0f);
cStack_2c.set(0.0f, 300.0f, mpHIO->m.common.search_distance + 150.0f);
mDoMtx_stack_c::YrotS(sVar9);
mDoMtx_stack_c::multVec(&cStack_2c, &cStack_2c);
cStack_2c += current.pos;
mGndChk.SetPos(&cStack_2c);
cStack_2c.y = dComIfG_Bgsp().GroundCross(&mGndChk);
daPy_getPlayerActorClass()->setPlayerPosAndAngle(&cStack_2c, sVar9 - (s16)0x8000, 0);
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village
* night */
dComIfGs_onTmpBit(0x1308);
break;
case 1:
@ -1332,7 +1369,8 @@ int daNpc_Uri_c::cutMeetingAgain(int param_1) {
switch (iVar10) {
case 0:
mJntAnm.lookPlayer(0);
/* dSv_event_tmp_flag_c::T_0010 - General use - General use temporary flag (flow control) A */
/* dSv_event_tmp_flag_c::T_0010 - General use - General use temporary flag (flow
* control) A */
daNpcT_offTmpBit(0xB);
initTalk(mFlowNodeNo, NULL);
break;
@ -1393,7 +1431,7 @@ int daNpc_Uri_c::cutMeetingAgain(int param_1) {
/* 80B29EA0-80B2A1B4 0037E0 0314+00 1/0 0/0 0/0 .text krun__11daNpc_Uri_cFPv */
int daNpc_Uri_c::krun(void* param_0) {
int iVar7 = daNpc_Uri_Param_c::m.field_0x8c / 2;
int iVar7 = mpHIO->m.field_0x8c / 2;
switch (mMode) {
case MODE_ENTER:
@ -1455,10 +1493,12 @@ int daNpc_Uri_c::wait(void* param_0) {
mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
} else {
if (field_0x100f) {
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
if (!daNpcT_chkEvtBit(0x1E)
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
&& !daNpcT_chkEvtBit(0x92)) {
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial
<fail> */
&& !daNpcT_chkEvtBit(0x92))
{
mFaceMotionSeqMngr.setNo(17, -1.0f, 0, 0);
mMotionSeqMngr.setNo(8, -1.0f, 0, 0);
} else {
@ -1466,7 +1506,8 @@ int daNpc_Uri_c::wait(void* param_0) {
mMotionSeqMngr.setNo(0, -1.0f, 0, 0);
}
} else {
/* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore finding basket */
/* dSv_event_flag_c::F_0031 - Ordon Village - 2nd day - Spoke to Uli bfore
* finding basket */
if (daNpcT_chkEvtBit(0x24)) {
mFaceMotionSeqMngr.setNo(5, -1.0f, 0, 0);
mMotionSeqMngr.setNo(12, -1.0f, 0, 0);
@ -1478,7 +1519,8 @@ int daNpc_Uri_c::wait(void* param_0) {
}
break;
case TYPE_3:
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon
* village night */
if (dComIfGs_isTmpBit(0x1308)) {
mFaceMotionSeqMngr.setNo(12, -1.0f, 0, 0);
mMotionSeqMngr.setNo(22, -1.0f, 0, 0);
@ -1496,7 +1538,7 @@ int daNpc_Uri_c::wait(void* param_0) {
case MODE_RUN:
switch (mType) {
case TYPE_1:
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
/* T_0007 - Ordon Village - During Uli's pick-up tutorial */
if (daNpcT_chkTmpBit(0x7)) {
if (chkPlayerCarryBasket()) {
switch (getTutorialCond(daPy_getPlayerActorClass()->current.pos)) {
@ -1512,10 +1554,11 @@ int daNpc_Uri_c::wait(void* param_0) {
}
}
} else {
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
/* dSv_event_flag_c::F_0025 - Ordon Village - Pass Uli's pick-up tutorial */
if (!daNpcT_chkEvtBit(0x1E)
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
&& !daNpcT_chkEvtBit(0x92)) {
/* dSv_event_flag_c::F_0048 - Ordon Village - Uli's pick-up tutorial <fail> */
&& !daNpcT_chkEvtBit(0x92))
{
cXyz acStack_70 = getAttnPos(daPy_getPlayerActorClass());
int dist_index = attention_info.distances[1];
f32 fVar2 = dComIfGp_getAttention()->getDistTable(dist_index).mLowerY * -1.0f;
@ -1523,7 +1566,8 @@ int daNpc_Uri_c::wait(void* param_0) {
if (chkPointInArea(acStack_70, attention_info.position, 200.0f, fVar2, fVar3,
0))
{
if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != 0 &&
if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) !=
0 &&
chkPlayerCarryBasket())
{
mEvtNo = 5;
@ -1536,15 +1580,18 @@ int daNpc_Uri_c::wait(void* param_0) {
case TYPE_2:
break;
case TYPE_3:
/* dSv_event_flag_c::F_0205 - Ordon Village - Heard Rusl and Uli talking in Ordon village at night */
/* dSv_event_flag_c::F_0205 - Ordon Village - Heard Rusl and Uli talking in Ordon
* village at night */
if (daNpcT_chkEvtBit(0xCD)) {
cXyz cStack_7c = getAttnPos(daPy_getPlayerActorClass());
if (chkPointInArea(cStack_7c, attention_info.position,
daNpc_Uri_Param_c::m.field_0x54, daNpc_Uri_Param_c::m.field_0x58,
daNpc_Uri_Param_c::m.field_0x5c, mCurAngle.y))
mpHIO->m.common.search_distance, mpHIO->m.common.search_height,
mpHIO->m.common.search_depth, mCurAngle.y))
{
if (!daPy_getPlayerActorClass()->checkPlayerFly()) {
if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) != 0) {
if (daPy_getPlayerActorClass()->eventInfo.chkCondition(dEvtCnd_CANTALK_e) !=
0)
{
if (chkActorInSight(daPy_getPlayerActorClass(), mAttnFovY,
home.angle.y))
{
@ -1564,7 +1611,8 @@ int daNpc_Uri_c::wait(void* param_0) {
mSpeakEvent = true;
field_0xe33 = true;
}
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village night */
/* dSv_event_tmp_flag_c::GUARD_URI - Ordon Village - Rusl is guarding Uli, Ordon village
* night */
if (dComIfGs_isTmpBit(0x1308)) {
mPlayerActorMngr.entry(daPy_getPlayerActorClass());
mJntAnm.lookPlayer(0);
@ -1621,9 +1669,9 @@ int daNpc_Uri_c::wait(void* param_0) {
/* 80B2AB60-80B2B24C 0044A0 06EC+00 1/0 0/0 0/0 .text walk__11daNpc_Uri_cFPv */
int daNpc_Uri_c::walk(void* param_0) {
BOOL bVar = FALSE;
int uVar2 = daNpc_Uri_Param_c::m.field_0x8c;
int uVar3 = daNpc_Uri_Param_c::m.field_0x8e;
int uVar4 = daNpc_Uri_Param_c::m.field_0x90;
int uVar2 = mpHIO->m.field_0x8c;
int uVar3 = mpHIO->m.field_0x8e;
int uVar4 = mpHIO->m.field_0x90;
switch (mMode) {
case MODE_ENTER:
@ -1745,7 +1793,7 @@ int daNpc_Uri_c::walk(void* param_0) {
/* 80B2B24C-80B2B7C0 004B8C 0574+00 2/0 0/0 0/0 .text sitWait__11daNpc_Uri_cFPv */
int daNpc_Uri_c::sitWait(void* param_0) {
int sVar2 = daNpc_Uri_Param_c::m.field_0x92;
int sVar2 = mpHIO->m.field_0x92;
switch (mMode) {
case MODE_ENTER:
@ -1763,12 +1811,14 @@ int daNpc_Uri_c::sitWait(void* param_0) {
}
break;
case TYPE_4:
/* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit - Reuinion with Colin et al. */
/* dSv_event_flag_c::M_028 - Cutscene - [cutscene: 14] restore mountain spirit -
* Reuinion with Colin et al. */
if (daNpcT_chkEvtBit(0x3D)
/* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time
(first forced conversation) */
/* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first
time (first forced conversation) */
&& (daNpcT_chkEvtBit(0x14A)
/* dSv_event_flag_c::F_0516 - Ordon Village - Told Uli directly about having found kids */
/* dSv_event_flag_c::F_0516 - Ordon Village - Told Uli directly about having
found kids */
|| daNpcT_chkEvtBit(0x204)))
{
mFaceMotionSeqMngr.setNo(17, -1.0f, 0, 0);
@ -1782,8 +1832,8 @@ int daNpc_Uri_c::sitWait(void* param_0) {
mMode = MODE_RUN;
}
case MODE_RUN:
/* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time
(first forced conversation) */
/* dSv_event_flag_c::F_0330 - Ordon Village - Meet again with Uli for the first time
(first forced conversation) */
if (mType == TYPE_4 && !daNpcT_chkEvtBit(0x14A)) {
mSpeakEvent = true;
field_0xe33 = true;

View File

@ -1,389 +1,214 @@
/**
* @file d_a_obj_szbridge.cpp
*
*/
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_szbridge.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static void rideCallback__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c();
extern "C" void rideActor__15daObjSZbridge_cFP10fopAc_ac_c();
extern "C" void create1st__15daObjSZbridge_cFv();
extern "C" void setMtx__15daObjSZbridge_cFv();
extern "C" void CreateHeap__15daObjSZbridge_cFv();
extern "C" void chkBg__15daObjSZbridge_cFv();
extern "C" void __dt__11dBgS_WtrChkFv();
extern "C" void __dt__14dBgS_ObjGndChkFv();
extern "C" void Create__15daObjSZbridge_cFv();
extern "C" void Execute__15daObjSZbridge_cFPPA3_A4_f();
extern "C" void Draw__15daObjSZbridge_cFv();
extern "C" void Delete__15daObjSZbridge_cFv();
extern "C" static void daObjSZbridge_create1st__FP15daObjSZbridge_c();
extern "C" static void daObjSZbridge_MoveBGDelete__FP15daObjSZbridge_c();
extern "C" static void daObjSZbridge_MoveBGExecute__FP15daObjSZbridge_c();
extern "C" static void daObjSZbridge_MoveBGDraw__FP15daObjSZbridge_c();
extern "C" void __dt__15daObjSZbridge_cFv();
extern "C" static void func_80D04C00();
extern "C" static void func_80D04C08();
extern "C" static void func_80D04C10();
extern "C" static void func_80D04C18();
extern "C" static void func_80D04C20();
extern "C" static void func_80D04C28();
extern "C" extern char const* const d_a_obj_szbridge__stringBase0;
//
// External References:
//
extern "C" void mDoMtx_YrotM__FPA4_fs();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void __dt__10fopAc_ac_cFv();
extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
extern "C" void fopAcM_effHamonSet__FPUlPC4cXyzff();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
extern "C" void SplGrpChk__4dBgSFP14dBgS_SplGrpChk();
extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
extern "C" void __ct__11dBgS_GndChkFv();
extern "C" void __dt__11dBgS_GndChkFv();
extern "C" void __ct__16dBgS_MoveBgActorFv();
extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
extern "C" bool ToFore__16dBgS_MoveBgActorFv();
extern "C" bool ToBack__16dBgS_MoveBgActorFv();
extern "C" void
MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
extern "C" void Set__14dBgS_SplGrpChkFR4cXyzf();
extern "C" void __dt__14dBgS_SplGrpChkFv();
extern "C" void SetObj__16dBgS_PolyPassChkFv();
extern "C" void __ct__11dBgS_WtrChkFv();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void cM_rndF__Ff();
extern "C" void SetPos__11cBgS_GndChkFPC4cXyz();
extern "C" void __dl__FPv();
extern "C" void _savegpr_26();
extern "C" void _restgpr_26();
extern "C" extern void* __vt__16dBgS_MoveBgActor[10];
extern "C" u8 now__14mDoMtx_stack_c[48];
//
// Declarations:
//
/* 80D04338-80D04360 000078 0028+00 1/1 0/0 0/0 .text
* rideCallback__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
static void rideCallback(dBgW* param_0, fopAc_ac_c* param_1, fopAc_ac_c* param_2) {
// NONMATCHING
static_cast<daObjSZbridge_c*>(param_1)->rideActor(param_2);
}
/* ############################################################################################## */
/* 80D04C38-80D04C50 000000 0018+00 3/3 0/0 0/0 .rodata l_cull_box */
SECTION_RODATA static u8 const l_cull_box[24] = {
0xC3, 0x9B, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0xC4, 0x3E, 0x00, 0x00,
0x43, 0x9B, 0x00, 0x00, 0x43, 0xB4, 0x00, 0x00, 0x44, 0x3E, 0x00, 0x00,
static const Vec l_cull_box[2] = {
{-310.0f, -30.0f, -760.0f},
{310.0f, 360.0f, 760.0f},
};
COMPILER_STRIP_GATE(0x80D04C38, &l_cull_box);
/* 80D04C50-80D04C54 000018 0004+00 0/1 0/0 0/0 .rodata @3642 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3642 = 1.0f;
COMPILER_STRIP_GATE(0x80D04C50, &lit_3642);
#pragma pop
/* 80D04C54-80D04C58 00001C 0004+00 0/1 0/0 0/0 .rodata @3643 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3643 = 3.0f / 10.0f;
COMPILER_STRIP_GATE(0x80D04C54, &lit_3643);
#pragma pop
/* 80D04C58-80D04C5C 000020 0004+00 0/1 0/0 0/0 .rodata @3644 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3644 = 7.0f;
COMPILER_STRIP_GATE(0x80D04C58, &lit_3644);
#pragma pop
/* 80D04C5C-80D04C60 000024 0004+00 0/1 0/0 0/0 .rodata @3645 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3645 = 1.0f / 25.0f;
COMPILER_STRIP_GATE(0x80D04C5C, &lit_3645);
#pragma pop
/* 80D04C60-80D04C64 000028 0004+00 0/1 0/0 0/0 .rodata @3646 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3646 = 0.25f;
COMPILER_STRIP_GATE(0x80D04C60, &lit_3646);
#pragma pop
/* 80D04360-80D04424 0000A0 00C4+00 1/1 0/0 0/0 .text rideActor__15daObjSZbridge_cFP10fopAc_ac_c
*/
void daObjSZbridge_c::rideActor(fopAc_ac_c* param_0) {
// NONMATCHING
void daObjSZbridge_c::rideActor(fopAc_ac_c* i_actor) {
cXyz pos = i_actor->current.pos;
pos.y = mWaterY;
if ((!cM3d_IsZero(i_actor->speed.getSquareMag()) && cM_rndF(1.0f) < 0.3f) || field_0x620 == 0) {
fopAcM_effHamonSet(&field_0x618[0], &pos, 7.0f, 0.04f);
speed.y -= 0.25f;
}
field_0x620 = 10;
}
/* ############################################################################################## */
/* 80D04C80-80D04C80 000048 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80D04C80 = "S_Zbridge";
#pragma pop
/* 80D04C8C-80D04C90 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
SECTION_DATA static void* l_arcName = (void*)&d_a_obj_szbridge__stringBase0;
static const char* l_arcName = "S_Zbridge";
/* 80D04424-80D044B8 000164 0094+00 1/1 0/0 0/0 .text create1st__15daObjSZbridge_cFv */
void daObjSZbridge_c::create1st() {
// NONMATCHING
int daObjSZbridge_c::create1st() {
int rv = dComIfG_resLoad(this, l_arcName);
if (rv == cPhs_COMPLEATE_e) {
setMtx();
rv = MoveBGCreate(l_arcName, 7, dBgS_MoveBGProc_Typical, 0x11190, &mBgMtx);
if (rv == cPhs_ERROR_e) {
return rv;
}
}
return rv;
}
/* 80D044B8-80D04528 0001F8 0070+00 2/2 0/0 0/0 .text setMtx__15daObjSZbridge_cFv */
void daObjSZbridge_c::setMtx() {
// NONMATCHING
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::YrotM(current.angle.y);
MTXCopy(mDoMtx_stack_c::get(), field_0x5d8);
MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* 80D04528-80D04598 000268 0070+00 1/0 0/0 0/0 .text CreateHeap__15daObjSZbridge_cFv */
void daObjSZbridge_c::CreateHeap() {
// NONMATCHING
int daObjSZbridge_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
return mpModel != NULL ? 1 : 0;
}
/* ############################################################################################## */
/* 80D04C64-80D04C68 00002C 0004+00 0/1 0/0 0/0 .rodata @3715 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3715 = 700.0f;
COMPILER_STRIP_GATE(0x80D04C64, &lit_3715);
#pragma pop
/* 80D04C68-80D04C6C 000030 0004+00 0/1 0/0 0/0 .rodata @3716 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3716 = -G_CM3D_F_INF;
COMPILER_STRIP_GATE(0x80D04C68, &lit_3716);
#pragma pop
/* 80D04C6C-80D04C70 000034 0004+00 0/1 0/0 0/0 .rodata @3717 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3717 = 1.0f / 20.0f;
COMPILER_STRIP_GATE(0x80D04C6C, &lit_3717);
#pragma pop
/* 80D04C70-80D04C74 000038 0004+00 0/1 0/0 0/0 .rodata @3718 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3718 = 70.0f;
COMPILER_STRIP_GATE(0x80D04C70, &lit_3718);
#pragma pop
/* 80D04C74-80D04C78 00003C 0004+00 0/1 0/0 0/0 .rodata @3719 */
#pragma push
#pragma force_active on
SECTION_RODATA static u32 const lit_3719 = 0x3F7C28F6;
COMPILER_STRIP_GATE(0x80D04C74, &lit_3719);
#pragma pop
/* 80D04C78-80D04C7C 000040 0004+00 0/1 0/0 0/0 .rodata @3720 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3720 = 5.0f;
COMPILER_STRIP_GATE(0x80D04C78, &lit_3720);
#pragma pop
/* 80D04C90-80D04CB0 -00001 0020+00 1/0 0/0 0/0 .data daObjSZbridge_METHODS */
static actor_method_class daObjSZbridge_METHODS = {
(process_method_func)daObjSZbridge_create1st__FP15daObjSZbridge_c,
(process_method_func)daObjSZbridge_MoveBGDelete__FP15daObjSZbridge_c,
(process_method_func)daObjSZbridge_MoveBGExecute__FP15daObjSZbridge_c,
0,
(process_method_func)daObjSZbridge_MoveBGDraw__FP15daObjSZbridge_c,
};
/* 80D04CB0-80D04CE0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SZbridge */
extern actor_process_profile_definition g_profile_Obj_SZbridge = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_SZbridge, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjSZbridge_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
676, // mPriority
&daObjSZbridge_METHODS, // sub_method
0x00040100, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80D04CE0-80D04D10 000054 0030+00 2/2 0/0 0/0 .data __vt__11dBgS_WtrChk */
SECTION_DATA extern void* __vt__11dBgS_WtrChk[12] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11dBgS_WtrChkFv,
(void*)NULL,
(void*)NULL,
(void*)func_80D04C18,
(void*)NULL,
(void*)NULL,
(void*)func_80D04C28,
(void*)NULL,
(void*)NULL,
(void*)func_80D04C20,
};
/* 80D04D10-80D04D40 000084 0030+00 2/2 0/0 0/0 .data __vt__14dBgS_ObjGndChk */
SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14dBgS_ObjGndChkFv,
(void*)NULL,
(void*)NULL,
(void*)func_80D04C00,
(void*)NULL,
(void*)NULL,
(void*)func_80D04C10,
(void*)NULL,
(void*)NULL,
(void*)func_80D04C08,
};
/* 80D04598-80D047D4 0002D8 023C+00 2/2 0/0 0/0 .text chkBg__15daObjSZbridge_cFv */
void daObjSZbridge_c::chkBg() {
// NONMATCHING
}
cXyz chk_pos;
/* 80D047D4-80D0484C 000514 0078+00 4/3 0/0 0/0 .text __dt__11dBgS_WtrChkFv */
// dBgS_WtrChk::~dBgS_WtrChk() {
extern "C" void __dt__11dBgS_WtrChkFv() {
// NONMATCHING
}
dBgS_ObjGndChk(gnd_chk);
/* 80D0484C-80D048C4 00058C 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */
// dBgS_ObjGndChk::~dBgS_ObjGndChk() {
extern "C" void __dt__14dBgS_ObjGndChkFv() {
// NONMATCHING
}
chk_pos = current.pos;
chk_pos.y += 700.0f;
/* ############################################################################################## */
/* 80D04C7C-80D04C80 000044 0004+00 1/1 0/0 0/0 .rodata @3739 */
SECTION_RODATA static u8 const lit_3739[4] = {
0x00,
0x00,
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x80D04C7C, &lit_3739);
gnd_chk.SetPos(&chk_pos);
gnd_chk.SetActorPid(base.base.id);
mGroundY = dComIfG_Bgsp().GroundCross(&gnd_chk);
chk_pos.y = mGroundY;
f32 posY = current.pos.y + 700.0f;
dBgS_WtrChk(wtr_chk);
wtr_chk.Set(chk_pos, posY);
if (dComIfG_Bgsp().WaterChk(&wtr_chk)) {
mWaterY = wtr_chk.GetHeight();
} else {
mWaterY = -G_CM3D_F_INF;
}
if (mWaterY > mGroundY) {
speed.y -= 0.05f * (current.pos.y - (mWaterY - 70.0f));
speed.y *= 0.985f;
current.pos.y += speed.y;
if (current.pos.y > 5.0f + (mWaterY - 70.0f)) {
current.pos.y = 5.0f + (mWaterY - 70.0f);
}
if (current.pos.y < (mWaterY - 70.0f) - 5.0f) {
current.pos.y = (mWaterY - 70.0f) - 5.0f;
}
speed.y = current.pos.y - old.pos.y;
field_0x614 = 1;
} else {
current.pos.y = mGroundY;
field_0x614 = 0;
}
}
/* 80D048C4-80D04974 000604 00B0+00 1/0 0/0 0/0 .text Create__15daObjSZbridge_cFv */
void daObjSZbridge_c::Create() {
// NONMATCHING
int daObjSZbridge_c::Create() {
mpBgW->SetRideCallback(rideCallback);
chkBg();
speed.y = 0;
mpModel->setBaseTRMtx(field_0x5d8);
fopAcM_SetMtx(this, field_0x5d8);
fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x,
l_cull_box[1].y, l_cull_box[1].z);
for (int i = 0; i < 2; i++) {
field_0x618[i] = -1;
}
field_0x620 = 0;
return 1;
}
/* 80D04974-80D049E4 0006B4 0070+00 1/0 0/0 0/0 .text Execute__15daObjSZbridge_cFPPA3_A4_f */
void daObjSZbridge_c::Execute(Mtx** param_0) {
// NONMATCHING
int daObjSZbridge_c::Execute(Mtx** param_0) {
chkBg();
if (field_0x620 != 0) {
field_0x620--;
}
setMtx();
mpModel->setBaseTRMtx(field_0x5d8);
*param_0 = &mBgMtx;
return 1;
}
/* 80D049E4-80D04A88 000724 00A4+00 1/0 0/0 0/0 .text Draw__15daObjSZbridge_cFv */
void daObjSZbridge_c::Draw() {
// NONMATCHING
int daObjSZbridge_c::Draw() {
g_env_light.settingTevStruct(16, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mpModel);
dComIfGd_setList();
return 1;
}
/* 80D04A88-80D04AC4 0007C8 003C+00 1/0 0/0 0/0 .text Delete__15daObjSZbridge_cFv */
void daObjSZbridge_c::Delete() {
// NONMATCHING
int daObjSZbridge_c::Delete() {
dComIfG_resDelete(this, l_arcName);
return 1;
}
/* ############################################################################################## */
/* 80D04D40-80D04D6C 0000B4 002C+00 2/2 0/0 0/0 .data __vt__15daObjSZbridge_c */
SECTION_DATA extern void* __vt__15daObjSZbridge_c[11] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)CreateHeap__15daObjSZbridge_cFv,
(void*)Create__15daObjSZbridge_cFv,
(void*)Execute__15daObjSZbridge_cFPPA3_A4_f,
(void*)Draw__15daObjSZbridge_cFv,
(void*)Delete__15daObjSZbridge_cFv,
(void*)IsDelete__16dBgS_MoveBgActorFv,
(void*)ToFore__16dBgS_MoveBgActorFv,
(void*)ToBack__16dBgS_MoveBgActorFv,
(void*)__dt__15daObjSZbridge_cFv,
};
/* 80D04AC4-80D04B24 000804 0060+00 1/0 0/0 0/0 .text daObjSZbridge_create1st__FP15daObjSZbridge_c
*/
static void daObjSZbridge_create1st(daObjSZbridge_c* param_0) {
// NONMATCHING
static int daObjSZbridge_create1st(daObjSZbridge_c* i_this) {
fopAcM_ct(i_this, daObjSZbridge_c);
return i_this->create1st();
}
/* 80D04B24-80D04B44 000864 0020+00 1/0 0/0 0/0 .text
* daObjSZbridge_MoveBGDelete__FP15daObjSZbridge_c */
static void daObjSZbridge_MoveBGDelete(daObjSZbridge_c* param_0) {
// NONMATCHING
static int daObjSZbridge_MoveBGDelete(daObjSZbridge_c* i_this) {
return i_this->MoveBGDelete();
}
/* 80D04B44-80D04B64 000884 0020+00 1/0 0/0 0/0 .text
* daObjSZbridge_MoveBGExecute__FP15daObjSZbridge_c */
static void daObjSZbridge_MoveBGExecute(daObjSZbridge_c* param_0) {
// NONMATCHING
static int daObjSZbridge_MoveBGExecute(daObjSZbridge_c* i_this) {
return i_this->MoveBGExecute();
}
/* 80D04B64-80D04B90 0008A4 002C+00 1/0 0/0 0/0 .text
* daObjSZbridge_MoveBGDraw__FP15daObjSZbridge_c */
static void daObjSZbridge_MoveBGDraw(daObjSZbridge_c* param_0) {
// NONMATCHING
static int daObjSZbridge_MoveBGDraw(daObjSZbridge_c* i_this) {
return i_this->MoveBGDraw();
}
/* 80D04B90-80D04C00 0008D0 0070+00 1/0 0/0 0/0 .text __dt__15daObjSZbridge_cFv */
daObjSZbridge_c::~daObjSZbridge_c() {
// NONMATCHING
}
/* 80D04C90-80D04CB0 -00001 0020+00 1/0 0/0 0/0 .data daObjSZbridge_METHODS */
static actor_method_class daObjSZbridge_METHODS = {
(process_method_func)daObjSZbridge_create1st,
(process_method_func)daObjSZbridge_MoveBGDelete,
(process_method_func)daObjSZbridge_MoveBGExecute,
0,
(process_method_func)daObjSZbridge_MoveBGDraw,
};
/* 80D04C00-80D04C08 000940 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */
static void func_80D04C00() {
// NONMATCHING
}
/* 80D04C08-80D04C10 000948 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */
static void func_80D04C08() {
// NONMATCHING
}
/* 80D04C10-80D04C18 000950 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */
static void func_80D04C10() {
// NONMATCHING
}
/* 80D04C18-80D04C20 000958 0008+00 1/0 0/0 0/0 .text @16@__dt__11dBgS_WtrChkFv */
static void func_80D04C18() {
// NONMATCHING
}
/* 80D04C20-80D04C28 000960 0008+00 1/0 0/0 0/0 .text @52@__dt__11dBgS_WtrChkFv */
static void func_80D04C20() {
// NONMATCHING
}
/* 80D04C28-80D04C30 000968 0008+00 1/0 0/0 0/0 .text @36@__dt__11dBgS_WtrChkFv */
static void func_80D04C28() {
// NONMATCHING
}
/* 80D04C80-80D04C80 000048 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
/* 80D04CB0-80D04CE0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SZbridge */
extern actor_process_profile_definition g_profile_Obj_SZbridge = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_SZbridge, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjSZbridge_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
676, // mPriority
&daObjSZbridge_METHODS, // sub_method
0x00040100, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};