1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#ifndef D_A_NPC_CHAT_H
#define D_A_NPC_CHAT_H
#include "d/actor/d_a_npc4.h"
struct daNpcChat_HIOParam {
/* 0x0 */ daNpcF_HIOParam common;
};
class daNpcChat_Param_c {
public:
virtual ~daNpcChat_Param_c() {}
static daNpcChat_HIOParam const m;
};
#if DEBUG
class daNpcChat_HIO_c : public mDoHIO_entry_c {
public:
daNpcChat_HIO_c();
void genMessage(JORMContext*);
/* 0x8 */ daNpcChat_HIOParam m;
};
#define NPC_CHAT_HIO_CLASS daNpcChat_HIO_c
#else
#define NPC_CHAT_HIO_CLASS daNpcChat_Param_c
#endif
/**
* @ingroup actors-npcs
* @class daNpcChat_c
* @brief NPC Chat
*
* @details
*
*/
class daNpcChat_c : public daNpcF_c {
public:
typedef bool (daNpcChat_c::*actionFunc)(void*);
typedef BOOL (daNpcChat_c::*eventFunc)(int);
daNpcChat_c();
~daNpcChat_c();
BOOL NpcCreate(int);
int getObjNum();
J3DModel* ObjCreate(int);
J3DModel* ChairCreate(f32);
bool isM_();
cPhs_Step loadResrc(int, int);
J3DModelData* getNpcMdlDataP(int);
J3DModelData* getObjMdlDataP(int);
J3DAnmTexPattern* getTexAnmP(int);
BOOL removeResrc(int, int);
BOOL setAttention(int);
cPhs_Step Create();
BOOL CreateHeap();
int Delete();
int Execute();
int Draw();
int draw(int, int, f32, _GXColorS10*, int);
int ctrlJoint(J3DJoint*, J3DModel*);
static int createHeapCallBack(fopAc_ac_c*);
static int ctrlJointCallBack(J3DJoint*, int);
BOOL searchGroup();
BOOL appearTimeCheck();
BOOL appearCheck();
void setParam();
BOOL main();
void setAttnPos();
bool setExpressionBtp(int);
void setMotionAnm(int, f32);
void setMotion(int, f32, int);
int drawDbgInfo();
void drawOtherMdls();
u8 getTalkMotionNo();
bool getLookPlayerCheck();
void reset();
void playMotion();
void playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData***);
BOOL setAction(actionFunc);
bool step(s16, int);
void setTalkMember(daNpcChat_c*);
bool wait(void*);
bool fear(void*);
bool talk(void*);
bool demo(void*);
void adjustShapeAngle() {}
u8 getType() { return fopAcM_GetParam(this) & 0xFF; }
u8 getTalkGroupNoParam() { return (fopAcM_GetParam(this) >> 12) & 0xF; }
u8 getTalkMenberNumParam() { return (fopAcM_GetParam(this) >> 16) & 0xF; }
u8 getTalkNoParam() { return (fopAcM_GetParam(this) >> 20) & 0xF; }
u8 getTalkIconTypeParam() { return (fopAcM_GetParam(this) >> 24) & 0xF; }
s16 getMessageNo() { return (int)home.angle.x; }
cXyz& getBaseAttnPos() { return mBaseAttnPos; }
BOOL chkAction(actionFunc action) { return action == mAction; }
u8 getTalkGroupNo() { return mTalkGroupNo; }
u8 getTalkNo() { return mTalkNo; }
void setFear() { mFear = true; }
void setTalkFlag() { mTalkFlag = true; }
static eventFunc mEvtSeqList[1];
private:
/* 0xB48 */ Z2CreatureCitizen mSound;
/* 0xBEC */ u8 field_0xbec[0xbf0 - 0xbec];
/* 0xBF0 */ J3DModel* mObjModel;
/* 0xBF4 */ daNpcF_Lookat_c mLookat;
/* 0xC90 */ daNpcF_ActorMngr_c mActorMngr[1];
/* 0xC98 */ NPC_CHAT_HIO_CLASS* mpHIO;
/* 0xC9C */ dCcD_Cyl mCyl;
/* 0xDD8 */ actionFunc mAction;
/* 0xDE4 */ request_of_phase_process_class mPhase1;
/* 0xDEC */ request_of_phase_process_class mPhase2;
/* 0xDF4 */ request_of_phase_process_class mPhase3;
/* 0xDFC */ request_of_phase_process_class mPhase4;
/* 0xE04 */ fpc_ProcID field_0xe04;
/* 0xE08 */ int field_0xe08;
/* 0xE0C */ int field_0xe0c;
/* 0xE10 */ u8 mType;
/* 0xE14 */ int mObjNum;
/* 0xE18 */ int mMsgNo;
/* 0xE1C */ s16 field_0xe1c;
/* 0xE1E */ u16 mMode;
/* 0xE20 */ u8 mTalkNo;
/* 0xE21 */ u8 mTalkMemberNum;
/* 0xE22 */ u8 mTalkGroupNo;
/* 0xE23 */ u8 mTalkIconType;
/* 0xE24 */ daNpcChat_c* mTalkMembers[5];
/* 0xE38 */ u8 field_0xe38;
/* 0xE3C */ cXyz mBaseAttnPos;
/* 0xE48 */ bool mFear;
/* 0xE4A */ s16 mPlayerAngleY;
/* 0xE4C */ u8 mMotionAnm;
/* 0xE4D */ bool mTalkFlag;
/* 0xE4E */ u8 mTalkMotionNo;
/* 0xE4F */ bool field_0xe4f;
/* 0xE50 */ u8 mLookPlayerCheck;
/* 0xE51 */ u8 field_0xe51;
};
STATIC_ASSERT(sizeof(daNpcChat_c) == 0xe54);
#endif /* D_A_NPC_CHAT_H */
|