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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
#ifndef D_A_NPC_MK_H
#define D_A_NPC_MK_H
#include "f_op/f_op_actor.h"
#include "d/d_npc.h"
#include "d/actor/d_a_npc_mk_static.h"
class daNpc_Mk_c : public fopAc_ac_c {
public:
enum TalkStates {
TALK_FINISHED = -1,
TALK_INIT = 0,
TALK_MSG_CREATE = 1,
TALK_ACTIVE = 2
};
enum ActionStatus {
ACTION_STARTING = 0,
ACTION_ONGOING = 1,
ACTION_ENDING = -1,
};
enum VisitModes {
VISIT_START = 0,
VISIT_TALK = 1,
VISIT_WALK_PATH = 2,
VISIT_RUN_LINK = 3,
VISIT_WALK_AROUND_LINK = 4,
VISIT_REACHED_LINK = 5,
VISIT_NOTICE_LINK = 6,
VISIT_LEFT_PATH = 7,
VISIT_WALK_PATH_FAST = 8,
VISIT_WALK_PATH_IGNORE_LINK = 9,
};
enum States {
STATE_WAIT = 0,
STATE_TALK01 = 1,
STATE_TALK02 = 2,
STATE_VISIT = 3,
STATE_CLIMB01 = 4,
STATE_DROP01 = 5,
STATE_RUNAWAY = 6,
STATE_JUMP = 7,
STATE_JITANDA01 = 8,
STATE_JITANDA02 = 9,
STATE_DEMO01 = 10,
STATE_DEMO02 = 11,
STATE_DEMO03 = 12,
STATE_13 = 13 // unsure how to call
};
enum Types {
TYPE_NONE = 0, // unsure how to call
TYPE_NORMAL = 1,
TYPE_MINIGAME = 2,
};
typedef BOOL (daNpc_Mk_c::*ActionFunc)(void*);
BOOL ChkOrder(u8 flag) { return mOrderFlags & flag; }
void ClrOrder(u8 flag) { mOrderFlags &= ~flag; }
void SetOrder(u8 flag) { mOrderFlags |= flag; }
void chkAngry() {}
bool chkFlag(u16 flag) { return (mFlags & flag) == flag; }
void clrFlag(u16 flag) { mFlags &= ~flag; }
s8 getBackboneJntNum() { return m_jnt.getBackboneJntNum(); }
s8 getHeadJntNum() { return m_jnt.getHeadJntNum(); }
s16 getBackbone_x() { return m_jnt.getBackbone_x(); }
s16 getBackbone_y() { return m_jnt.getBackbone_y(); }
s16 getHead_x() { return m_jnt.getHead_x(); }
s16 getHead_y() { return m_jnt.getHead_y(); }
void getVisitMode() {}
void incAttnSetCount() {
if (mAttnSetCount != 0xff) {
mAttnSetCount++;
}
}
BOOL setAction(ActionFunc actionFunc, void* arg) {
if (mCurrActionFunc != actionFunc) {
if (mCurrActionFunc != NULL) {
mActionStatus = ACTION_ENDING;
(this->*mCurrActionFunc)(arg);
}
mCurrActionFunc = actionFunc;
mActionStatus = ACTION_STARTING;
(this->*mCurrActionFunc)(arg);
}
return TRUE;
}
void setAttentionBasePos(cXyz i_attnBasePos) { mAttnBasePos = i_attnBasePos; }
void setEyePos(cXyz i_eyePos) { mEyePos = i_eyePos; }
void setFlag(u16 flag) { mFlags |= flag; }
BOOL initTexPatternAnm(bool);
void playTexPatternAnm();
void setAnm(s8);
void setAnmStatus();
bool chkAttentionLocal();
void chkAttention();
void eventOrder();
void checkOrder();
u16 next_msgStatus(u32*);
u32 getMsg();
void setCollision();
void msgAnm(u8);
void talkInit();
void msgPushButton();
u16 talk();
BOOL checkDemoStart();
s32 getNowEventAction();
BOOL init();
u8 getType();
u8 getPath();
u8 nextVisitMode();
void visitInit(u8);
void visitProc();
void runawayInit();
void walkPath(u8);
void runLink();
void aroundLink();
void remove_Um2();
void demoInitCom();
bool demoProc();
void setAttention(bool);
u8 getLookBackMode();
void lookBack();
bool wait01();
bool talk01();
bool talk02();
u8 visitTalkInit();
void visitSetEvent();
bool visit01();
bool climb01();
bool drop01();
bool runaway();
bool jump();
bool jitanda01();
bool jitanda02();
bool demo01();
bool demo02();
bool demo03();
BOOL wait_action(void*);
BOOL seek_action(void*);
BOOL hind_action(void*);
BOOL visit_action(void*);
BOOL _draw();
BOOL _execute();
BOOL _delete();
cPhs_State _create();
BOOL CreateHeap();
public:
/* 0x290 */ request_of_phase_process_class mPhs;
/* 0x298 */ mDoExt_McaMorf* mpMorf;
/* 0x29C */ u32 mShadowId;
/* 0x2A0 */ J3DAnmTexPattern* m_head_tex_pattern;
/* 0x2A4 */ mDoExt_btpAnm mBtpAnm;
/* 0x2B8 */ u8 mBlinkFrame;
/* 0x2B9 */ u8 field_0x2B9[0x2BA - 0x2B9];
/* 0x2BA */ s16 mBlinkTimer;
/* 0x2BC */ dBgS_ObjAcch mObjAcch;
/* 0x480 */ dBgS_AcchCir mAcchCir;
/* 0x4C0 */ dCcD_Stts mStts;
/* 0x4FC */ dCcD_Cyl mCyl;
/* 0x62C */ dNpc_JntCtrl_c m_jnt;
/* 0x660 */ cXyz mEyePos;
/* 0x66C */ cXyz mAttnBasePos;
/* 0x678 */ s16 mMaxHeadTurnVelocity;
/* 0x67A */ s8 mAnmEnded;
/* 0x67B */ u8 mAttnSetCount;
/* 0x67C */ f32 mAnmTimer;
/* 0x680 */ u32 mCurrMsgNo;
/* 0x684 */ u16 mFlags;
/* 0x686 */ u8 mAttentionTimer;
/* 0x687 */ u8 mMsgSelectNum;
/* 0x688 */ dNpc_PathRun_c field_0x688;
/* 0x690 */ dNpc_PathRun_c field_0x690;
/* 0x698 */ dNpc_PathRun_c field_0x698;
/* 0x6A0 */ u8 mVisitMode;
/* 0x6A1 */ u8 mWaitTimer;
/* 0x6A2 */ u8 mRunAroundLinkTimer;
/* 0x6A3 */ u8 mTimerToReachLink;
/* 0x6A4 */ u16 field_0x6A4;
/* 0x6A6 */ u8 field_0x6A6[0x6A8 - 0x6A6];
/* 0x6A8 */ ActionFunc mCurrActionFunc;
/* 0x6B4 */ s8 mTexPatternIdx;
/* 0x6B5 */ s8 mAnmIdx;
/* 0x6B6 */ u8 field_0x6B6[0x6B8 - 0x6B6];
/* 0x6B8 */ int mStaffIdx;
/* 0x6BC */ s32 mEventAction;
/* 0x6C0 */ u8 mOrderFlags;
/* 0x6C1 */ s8 mState;
/* 0x6C2 */ s8 mPrevState;
/* 0x6C3 */ s8 mType;
/* 0x6C4 */ s8 mActionStatus;
/* 0x6C5 */ s8 mTalkState;
/* 0x6C6 */ u8 mMsgAnmIdx;
/* 0x6C7 */ u8 field_0x6C7[0x6C8 - 0x6C7];
/* 0x6C8 */ u32 mMtrlSndId;
/* 0x6CC */ s8 mReverb;
/* 0x6CD */ u8 field_0x6CD[0x6D0 - 0x6CD];
/* 0x6D0 */ cXyz field_0x6D0;
/* 0x6DC */ cXyz field_0x6DC;
/* 0x6E8 */ s16 field_0x6E8;
/* 0x6EA */ s16 mEventIdx;
/* 0x6EC */ char* mpName;
/* 0x6F0 */ s16 field_0x6F0;
/* 0x6F2 */ u8 field_0x6F2[0x6F4 - 0x6F2];
/* 0x6F4 */ u32 mMsgNo;
/* 0x6F8 */ daNpc_Mk_Static_c mMkStatic;
}; // Size: 0x708
#endif /* D_A_NPC_MK_H */
|