forked from zeldaret/tp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathd_a_npc_kasi_hana.h
More file actions
239 lines (216 loc) · 7.12 KB
/
d_a_npc_kasi_hana.h
File metadata and controls
239 lines (216 loc) · 7.12 KB
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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
#ifndef D_A_NPC_KASI_HANA_H
#define D_A_NPC_KASI_HANA_H
#include "d/actor/d_a_npc4.h"
#include "d/actor/d_a_tag_escape.h"
/**
* @ingroup actors-npcs
* @class daNpcKasiHana_c
* @brief Hannah
*
* @details
*
*/
struct daNpcKasiHana_HIOParam {
/* 0x00 */ daNpcF_HIOParam common;
/* 0x6C */ f32 track_start_dist; // 追跡開始距離 - Track Start Distance
/* 0x70 */ f32 track_stop_dist; // 追跡停止距離 - Track Stop Distance
/* 0x74 */ f32 track_spd; // 追跡速度 - Track Speed
/* 0x78 */ f32 escape_spd; // 逃げる速度 - Escape Speed
};
class daNpcKasiHana_Param_c {
public:
virtual ~daNpcKasiHana_Param_c() {}
static daNpcKasiHana_HIOParam const m;
};
#if DEBUG
class daNpcKasiHana_HIO_c : public mDoHIO_entry_c {
public:
daNpcKasiHana_HIO_c();
void genMessage(JORMContext*);
daNpcKasiHana_HIOParam m;
};
#define NPC_KASI_HANA_HIO_CLASS daNpcKasiHana_HIO_c
#else
#define NPC_KASI_HANA_HIO_CLASS daNpcKasiHana_Param_c
#endif
class daNpcKasi_Mng_c {
public:
daNpcKasi_Mng_c() {
mIsPathInit = false;
mCenterPos.set(0.0f, 0.0f, 0.0f);
mSygnal = 0;
}
~daNpcKasi_Mng_c() {}
void calcEscapeForm();
BOOL calcCenterPos();
f32 getDistFromCenter();
void getOffsetFromLeader(cXyz const&, cXyz&);
void initPath(u8, u16);
int getPlNearPoint();
int getSygnalInfo();
void sendInfo();
void offTalk();
BOOL chkTalk();
BOOL chkFear();
BOOL chkEscape();
BOOL createHearts();
void allDemoMove();
void allDemoNotMove();
BOOL isMiniGamePlaying();
void schMemberActor();
void schDanchoActor();
void deleteAllMember();
void chgWeightHeavy();
void chgWeightLight();
cXyz getCenterPos() { return mCenterPos; }
void setKyuPos(const cXyz& i_pos) { mKyuPos = i_pos; }
void setMichPos(const cXyz& i_pos) { mMichPos = i_pos; }
BOOL chkSygnal(int param_1) { return mSygnal & param_1; }
void SygnalClear() { mSygnal = 0; }
void onSygnal(int param_1) { mSygnal |= param_1; }
void setHanaActor(fopAc_ac_c* a_this) { if (a_this != NULL) mHanaActorMngr.entry(a_this); }
BOOL isPathInit() { return mIsPathInit; }
fopAc_ac_c* getHanaActor() { return mHanaActorMngr.getActorP(); }
fopAc_ac_c* getKyuActor() { return mKyuActorMngr.getActorP(); }
fopAc_ac_c* getMichActor() { return mMichActorMngr.getActorP(); }
void setKyuActor(fopAc_ac_c* kyu_p) {
if (kyu_p != NULL) {
mKyuActorMngr.entry(kyu_p);
}
}
void setMichActor(fopAc_ac_c* mich_p) {
if (mich_p != NULL) {
mMichActorMngr.entry(mich_p);
}
}
void setDanchoActor(fopAc_ac_c* dancho_p) {
if (dancho_p != NULL) {
mDanchoActorMngr.entry(dancho_p);
}
}
/* 0x00 */ daNpcF_ActorMngr_c mHanaActorMngr;
/* 0x08 */ daNpcF_ActorMngr_c mKyuActorMngr;
/* 0x10 */ daNpcF_ActorMngr_c mMichActorMngr;
/* 0x18 */ daNpcF_ActorMngr_c mDanchoActorMngr;
/* 0x20 */ int mSygnal;
/* 0x24 */ cXyz mKyuPos;
/* 0x30 */ cXyz mMichPos;
/* 0x3C */ cXyz mCenterPos;
/* 0x48 */ int mPlPoint;
/* 0x4C */ bool mIsPathInit;
/* 0x50 */ daNpcF_Path_c mPath;
};
class daNpcKasiHana_c : public daNpcF_c {
public:
typedef int (daNpcKasiHana_c::*actionFunc)(int);
typedef BOOL (daNpcKasiHana_c::*cutFunc)(int);
typedef BOOL (daNpcKasiHana_c::*EventFn)(int);
daNpcKasiHana_c();
~daNpcKasiHana_c();
cPhs_Step Create();
int CreateHeap();
int Delete();
int Execute();
int Draw();
int ctrlJoint(J3DJoint*, J3DModel*);
static int createHeapCallBack(fopAc_ac_c*);
static int ctrlJointCallBack(J3DJoint*, int);
void setParam();
BOOL main();
void setAttnPos();
void setMotionAnm(int, f32);
void setMotion(int, f32, int);
int drawDbgInfo();
void reset();
void playMotion();
void playMotionAnmLoop(daNpcF_c::daNpcF_anmPlayData***);
BOOL setAction(actionFunc);
void setLookMode(int);
void lookat();
BOOL step(s16, int);
BOOL chkFindPlayer();
int wait(int);
int chace_st(int);
int chace(int);
cXyz getChacePos();
int turn(int);
int fear(int);
daTagEscape_c* srchWolfTag();
static void* _srch_escape_tag(void*, void*);
int getWolfPathNearIdx();
int talk(int);
int demo(int);
int escape(int);
int cheer(int);
BOOL _turn_to_link(s16);
BOOL _turn_pos(cXyz const&, s16);
BOOL actor_front_check(fopAc_ac_c*);
void _getOffset(cXyz const&, cXyz&);
BOOL _Evt_Kasi_Appear(int);
BOOL _Evt_Kasi_Appear_CutInit(int const&);
BOOL _Evt_Kasi_Appear_CutMain(int const&);
BOOL _Evt_Kasi_Talk(int);
BOOL _Evt_Kasi_Talk_CutInit(int const&);
BOOL _Evt_Kasi_Talk_CutMain(int const&, int);
BOOL _Evt_Kasi(int);
BOOL _Evt_Kasi_CutInit(int const&);
BOOL _Evt_Kasi_CutMain(int const&);
BOOL _Evt_Kasi_Cheer(int);
BOOL _Evt_Kasi_Cheer_CutInit(int const&);
BOOL _Evt_Kasi_Cheer_CutMain(int const&, int);
BOOL _Evt_Kasi_Cheer2(int);
BOOL _Evt_Kasi_Cheer2_CutInit(int const&);
BOOL _Evt_Kasi_Cheer2_CutMain(int const&, int);
void adjustShapeAngle() {}
s16 getMessageNo() { return s16(home.angle.x); }
s8 getType() {
s8 rv = fopAcM_GetParam(this) & 0xFF;
// !@bug Comparison of s8 with 0xFF will always evaluate to false
if (rv == 0xFF) {
rv = 0;
}
return rv;
}
void off_talked() { mTalked = false; }
BOOL is_talked() { return mTalked; }
BOOL is_escape() { return mEscape; }
void chgWeightHeavy() { mCcStts.SetWeight(0xFE); }
void chgWeightLight() { mCcStts.SetWeight(0xD8); }
int getRailNo() { return s8((fopAcM_GetParam(this) >> 8) & 0xFF); }
bool chkAction(actionFunc action) { return action == mAction; }
int getSwitchBitNo() { return (fopAcM_GetParam(this) >> 16) & 0xFF; }
BOOL pl_front_check() { return actor_front_check(daPy_getPlayerActorClass()); }
void setEscapePathDir() { if (pl_front_check()) mPath.reverse(); }
static EventFn mEvtSeqList[6];
static daTagEscape_c* mTargetTag;
static f32 mTargetTagDist;
static s16 mWolfAngle;
private:
/* 0x0B48 */ Z2CreatureCitizen mSound;
/* 0x0BEC */ u8 field_0xbec[0xbf0 - 0xbec];
/* 0x0BF0 */ daNpcF_Lookat_c mLookat;
/* 0x0C8C */ daNpcF_ActorMngr_c mActorMngr[1];
/* 0x0C94 */ daNpcF_Path_c mPath;
/* 0x12C4 */ NPC_KASI_HANA_HIO_CLASS* mpHIO;
/* 0x12C8 */ dCcD_Cyl mCyl;
/* 0x1404 */ s8 mType;
/* 0x1405 */ u8 field_0x1405;
/* 0x1406 */ s16 mMode;
/* 0x1408 */ actionFunc mAction;
/* 0x1414 */ request_of_phase_process_class mPhases[3];
/* 0x142C */ fpc_ProcID field_0x142c;
/* 0x1430 */ int field_0x1430;
/* 0x1434 */ int field_0x1434;
/* 0x1438 */ int mMessageNo;
/* 0x143C */ s16 mLookMode;
/* 0x143E */ s16 field_0x143e;
/* 0x1440 */ u8 field_0x1440;
/* 0x1441 */ s8 field_0x1441;
/* 0x1442 */ bool mTalked;
/* 0x1443 */ bool mEscape;
/* 0x1444 */ u8 field_0x1444;
/* 0x1445 */ bool field_0x1445;
/* 0x1448 */ daNpcKasi_Mng_c mKasiMng;
};
STATIC_ASSERT(sizeof(daNpcKasiHana_c) == 0x1ac8);
#endif /* D_A_NPC_KASI_HANA_H */