22#define D_A_NPC_COACH_H
33
44#include " d/actor/d_a_npc.h"
5+ #include " d/d_path.h"
56
67/* *
78 * @ingroup actors-npcs
1011 *
1112 * @details
1213 *
13- */
14+ */
15+
16+ class daNpcCoach_Attr_c {
17+ public:
18+ /* 0x00 */ f32 gravity; // 重力 - Gravity
19+ /* 0x04 */ f32 max_fall_speed; // 最大落下速度 - Maximum Fall Speed
20+ /* 0x08 */ f32 jump_coeff; // 跳係数 - Jump Coefficient
21+ /* 0x0C */ f32 field_0xc;
22+ /* 0x10 */ f32 field_0x10;
23+ /* 0x14 */ f32 field_0x14;
24+ /* 0x18 */ f32 field_0x18;
25+ /* 0x1C */ f32 max_speed; // 最大速度 - Maximum Speed
26+ /* 0x20 */ f32 spring_constant; // バネ係数 - Spring Constant
27+ /* 0x24 */ f32 damp_coeff[1 ]; // 減衰係数 - Damp Coefficient
28+ /* 0x28 */ f32 field_0x28[1 ];
29+ /* 0x2C */ f32 field_0x2c;
30+ /* 0x30 */ f32 field_0x30;
31+ /* 0x34 */ f32 field_0x34;
32+ /* 0x38 */ f32 vert_swing_width; // 縦揺れ幅 - Vertical Swing Width
33+ /* 0x3C */ f32 shake_dist; // 揺れ距離 - Shake Distance
34+ /* 0x40 */ f32 jump_dist; // 跳ね距離 - Jump Distance
35+ /* 0x44 */ f32 wheel_bounce; // 車輪跳ね - Wheel Bounce
36+ /* 0x48 */ f32 field_0x48;
37+ /* 0x4C */ f32 field_0x4c;
38+ /* 0x50 */ f32 field_0x50;
39+ /* 0x54 */ f32 field_0x54;
40+ /* 0x58 */ f32 field_0x58;
41+ /* 0x5C */ f32 field_0x5c;
42+ /* 0x60 */ s16 field_0x60;
43+ /* 0x62 */ s16 horse_rot_limit; // 馬Rot限度 - Horse Rot Limit
44+ /* 0x64 */ s16 horiz_sway_range; // 横揺れ幅 - Horizontal Sway Range
45+ /* 0x66 */ s16 field_0x66;
46+ /* 0x68 */ s16 field_0x68;
47+ /* 0x6A */ s8 field_0x6a;
48+ /* 0x6B */ u8 field_0x6b;
49+ /* 0x6C */ u8 field_0x6c;
50+ /* 0x6D */ u8 shake_test; // 揺れ実験 - Shake Test
51+ /* 0x6E */ s16 field_0x6e;
52+ /* 0x70 */ int damage_reduction; // ダメージ減量 - Damage Reduction
53+ /* 0x74 */ int damage_durability; // ダメージ耐久度 - Damage Durability
54+ /* 0x78 */ u8 damage_extinguish_level; // ダメージ消火度 - Damage Extinguish Level
55+ /* 0x79 */ u8 horse_camera; // 馬カメラ - Horse Camera
56+ /* 0x7A */ u8 field_0x7a;
57+ /* 0x7B */ u8 field_0x7b;
58+ /* 0x7C */ f32 camera_dist; // カメラ距離 - Camera Distance
59+ /* 0x80 */ s16 camera_elevation_angle; // カメラ仰角 - Camera Elevation Angle
60+ /* 0x82 */ s16 camera_rotation_angle; // カメラ回転角 - Camera Rotation Angle
61+ /* 0x84 */ s16 field_0x84;
62+ /* 0x86 */ u8 field_0x86;
63+ /* 0x87 */ u8 field_0x87;
64+ /* 0x88 */ u8 field_0x88;
65+ /* 0x89 */ u8 field_0x89;
66+ /* 0x8A */ s16 field_0x8a;
67+ /* 0x8C */ f32 field_0x8c;
68+ /* 0x90 */ f32 field_0x90;
69+ /* 0x94 */ f32 field_0x94;
70+ /* 0x98 */ f32 deceleration_speed; // 減速速度 - Deceleration Speed
71+ /* 0x9C */ s32 deceleration_time; // 減速時間 - Deceleration Time
72+ };
73+
74+ class daNpcChReins_c {
75+ public:
76+ /* 0x000 */ mDoExt_3DlineMat1_c field_0x0;
77+ /* 0x03C */ mDoExt_3DlineMat1_c field_0x3c;
78+ /* 0x078 */ cXyz field_0x78[10 ];
79+ /* 0x0F0 */ cXyz field_0xf0[10 ];
80+ /* 0x168 */ f32 field_0x168;
81+ /* 0x16C */ s8 field_0x16c;
82+ /* 0x170 */ cXyz field_0x170;
83+ };
84+
85+ class daNpcChHorse_c {
86+ public:
87+ /* 0x000 */ mDoExt_McaMorf2 * mpModelMorf;
88+ /* 0x004 */ mDoExt_btpAnm * mpBtpAnm;
89+ /* 0x008 */ mDoExt_bckAnm * mpBckAnm;
90+ /* 0x00C */ dBgS_ObjAcch mBgc ;
91+ /* 0x1F0 */ dCcD_Cyl field_0x1f0[4 ];
92+ /* 0x6D4 */ Z2CreatureRide mSound ;
93+ /* 0x770 */ cXyz field_0x770;
94+ /* 0x77C */ f32 mAnmRate ;
95+ /* 0x780 */ f32 mAimSpeed ;
96+ /* 0x784 */ f32 field_0x784;
97+ /* 0x788 */ int field_0x788;
98+ /* 0x78C */ int field_0x78c;
99+ /* 0x790 */ int field_0x790;
100+ /* 0x794 */ u32 mShadowKey ;
101+ /* 0x798 */ daNpcChReins_c mChReins ;
102+ };
103+
104+ class daNpcChWheel_c {
105+ public:
106+ /* 0x00 */ cXyz field_0x0;
107+ /* 0x0C */ u32 field_0xc[2 ];
108+ /* 0x14 */ csXyz mWheelRot ;
109+ /* 0x1A */ s16 field_0x1a;
110+ /* 0x1C */ s16 field_0x1c;
111+ /* 0x1E */ s16 field_0x1e;
112+ /* 0x20 */ s16 field_0x20;
113+ };
114+
115+ class daNpcChHarness_c {
116+ public:
117+ /* 809A3570 */ ~daNpcChHarness_c ();
118+
119+ /* 0x000 */ J3DModel* mHarnessModel ;
120+ /* 0x004 */ dKy_tevstr_c mTevStr ;
121+ /* 0x38C */ dBgS_ObjAcch mBgc ;
122+ /* 0x564 */ dCcD_Cyl field_0x564;
123+ /* 0x6A0 */ dBgW* field_0x6a0;
124+ /* 0x6A4 */ Mtx mMtx ;
125+ /* 0x6D4 */ cXyz field_0x6d4;
126+ /* 0x6E0 */ cXyz field_0x6e0;
127+ /* 0x6EC */ cXyz field_0x6ec;
128+ /* 0x6F8 */ u32 mShadowKey ;
129+ /* 0x6FC */ f32 field_0x6fc;
130+ /* 0x700 */ csXyz field_0x700;
131+ /* 0x706 */ csXyz field_0x706;
132+ /* 0x70C */ daNpcChWheel_c field_0x70c;
133+ /* 0x730 */ daNpcChWheel_c field_0x730;
134+ };
135+
136+ class daNpcChCoach_c {
137+ public:
138+ /* 809A3674 */ ~daNpcChCoach_c ();
139+
140+ /* 0x000 */ J3DModel* mCoachModel ;
141+ /* 0x004 */ dKy_tevstr_c mTevStr ;
142+ /* 0x38C */ dBgS_ObjAcch mBgc ;
143+ /* 0x564 */ dBgW* field_0x564;
144+ /* 0x568 */ Mtx field_0x568;
145+ /* 0x598 */ Mtx field_0x598;
146+ /* 0x5C8 */ cXyz field_0x5c8;
147+ /* 0x5D4 */ cXyz field_0x5d4;
148+ /* 0x5E0 */ cXyz field_0x5e0;
149+ /* 0x5EC */ cXyz field_0x5ec;
150+ /* 0x5F8 */ JPABaseEmitter* field_0x5f8[10 ];
151+ /* 0x620 */ Z2SoundObjCoach mSound ;
152+ /* 0x644 */ dCcD_Sph field_0x644;
153+ /* 0x77C */ int field_0x77c;
154+ /* 0x780 */ u32 mShadowKey ;
155+ /* 0x784 */ f32 field_0x784;
156+ /* 0x788 */ f32 field_0x788;
157+ /* 0x78C */ f32 mCoachTrans ;
158+ /* 0x790 */ f32 field_0x790;
159+ /* 0x794 */ f32 field_0x794;
160+ /* 0x798 */ s16 mCoachRot ;
161+ /* 0x79A */ csXyz field_0x79a;
162+ /* 0x7A0 */ csXyz field_0x7a0;
163+ /* 0x7A8 */ daNpcChWheel_c field_0x7a8;
164+ /* 0x7CC */ daNpcChWheel_c field_0x7cc;
165+ };
166+
167+ class daNpcChYelia_c {
168+ public:
169+ /* 0x000 */ mDoExt_McaMorfSO * mpModelMorf;
170+ /* 0x004 */ dKy_tevstr_c mTevStr ;
171+ /* 0x38C */ Z2Creature mSound ;
172+ /* 0x41C */ dCcD_Cyl field_0x41c[2 ];
173+ /* 0x694 */ cXyz field_0x694;
174+ };
175+
176+ class daNpcChPath_c {
177+ public:
178+ BOOL setPath (int , int , cXyz*, bool );
179+ BOOL isClose () { return dPath_ChkClose (mpPath); }
180+ bool setNextPoint () {
181+ mPntIndex ++;
182+
183+ if (mPntIndex >= mpPath->m_num ) {
184+ if (isClose ()) {
185+ mPntIndex = 0 ;
186+ } else {
187+ mPntIndex --;
188+ return FALSE ;
189+ }
190+ }
191+
192+ return TRUE ;
193+ }
194+ BOOL setPrevPoint () {
195+ mPntIndex --;
196+
197+ if (mPntIndex < 0 ) {
198+ if (isClose ()) {
199+ mPntIndex = mpPath->m_num - 1 ;
200+ } else {
201+ mPntIndex ++;
202+ return FALSE ;
203+ }
204+ }
205+
206+ return TRUE ;
207+ }
208+ void getTargetPoint (cXyz& param_1) {
209+ if (mpPath != NULL ) {
210+ param_1 = dPath_GetPnt (mpPath, mPntIndex )->m_position ;
211+ }
212+ }
213+ bool isPath () { return mpPath != NULL ; }
214+ int getCurrentId () { return mCurrentID ; }
215+ s8 getArg0 () { return mpPath->m_points [mPntIndex ].mArg0 ; }
216+ s8 getArg1 () { return mpPath->m_points [mPntIndex ].mArg1 ; }
217+ s8 getArg2 () { return mpPath->m_points [mPntIndex ].mArg2 ; }
218+ int getArg3 () { return mpPath->m_points [mPntIndex ].mArg3 ; }
219+ inline int checkNearAttackPoint ();
220+ inline bool checkPoint (cXyz*, f32 );
221+ inline bool setNextTarget ();
222+
223+ /* 0x00 */ dPath* mpPath;
224+ /* 0x04 */ cXyz* field_0x4;
225+ /* 0x08 */ f32 field_0x8;
226+ /* 0x0C */ int mCurrentID ;
227+ /* 0x10 */ int mPntIndex ;
228+ };
229+
14230class daNpcCoach_c : public fopAc_ac_c {
15231public:
16232 /* 8099DA60 */ void hitFireArrow (cXyz);
17233 /* 8099DBA4 */ void deleteFireArrow (unsigned int );
18234 /* 8099DCE8 */ bool deleteFireArrowFromList (unsigned int );
19235 /* 8099DD28 */ void setPosAngle (cXyz&, csXyz&);
20- /* 8099DD7C */ void ctrlJointHorse (J3DJoint*, J3DModel*);
236+ /* 8099DD7C */ int ctrlJointHorse (J3DJoint*, J3DModel*);
21237 /* 8099DE18 */ void initCoachPosition (Vec&, SVec&);
22238 /* 8099E138 */ void changeAtherPath (s8, cXyz&, csXyz&);
23- /* 8099E4C0 */ void createHeap ();
24- /* 8099EB40 */ void execute ();
239+ /* 8099E4C0 */ int createHeap ();
240+ /* 8099EB40 */ int execute ();
25241 /* 8099EEA0 */ void checkCoachDamage ();
26242 /* 8099F1B8 */ void setCoachBlazing (u8 );
27243 /* 8099F4BC */ void reinsExecute ();
@@ -33,40 +249,107 @@ class daNpcCoach_c : public fopAc_ac_c {
33249 /* 809A1810 */ void calcHorseMotion ();
34250 /* 809A1BE0 */ void calcHorseAnm ();
35251 /* 809A2740 */ void calcHorsePath ();
36- /* 809A2EB8 */ void draw ();
252+ /* 809A2EB8 */ int draw ();
37253 /* 809A3330 */ ~daNpcCoach_c ();
38- /* 809A3884 */ void create ();
254+ /* 809A3884 */ cPhs__Step create ();
39255 /* 809A3928 */ void create_init ();
40256 /* 809A4078 */ void initCollision ();
41257 /* 809A43A0 */ void initBaseMtx ();
42258 /* 809A43DC */ void setBaseMtx ();
43259 /* 809A46C4 */ void initCoachBlazing ();
44260 /* 809A48A8 */ daNpcCoach_c();
45261
46- bool checkCoachBlazing () { return field_0x1dc4; }
47- Mtx* getCoachMtx () { return &field_0x2490; }
262+ inline bool checkCoachBlazing () { return mCoachBlazing ; }
263+ inline Mtx* getCoachMtx () { return &mCoachMtx ; }
264+ inline csXyz* getFrontWheelRot (int param_1) {
265+ if (param_1 == 2 ) {
266+ return &mChHarness .field_0x70c .mWheelRot ;
267+ }
268+
269+ return &mChHarness .field_0x730 .mWheelRot ;
270+ }
271+ inline csXyz* getRearWheelRot (int param_1) {
272+ if (param_1 == 1 ) {
273+ return &mChCoach .field_0x7a8 .mWheelRot ;
274+ }
275+
276+ return &mChCoach .field_0x7cc .mWheelRot ;
277+ }
278+ inline s16 getCoachRotate () { return mChCoach .mCoachRot ; }
279+ inline f32 getCoachTrans () { return mChCoach .mCoachTrans ; }
280+ inline int getRailID () { return mChPath .getCurrentId (); }
48281
49- static u8 const M_attr[160 ];
282+ inline void setDriverMtx ();
283+ inline void calcDriverMotion () { setDriverMtx (); }
284+ inline void calcYeliaMotion ();
285+ inline void setYeliaMtx () {
286+ mDoMtx_stack_c::copy (mChCoach .mCoachModel ->getAnmMtx (6 ));
287+ mDoMtx_stack_c::multVecZero (&mChYelia .field_0x694 );
288+ mChYelia .mpModelMorf ->getModel ()->setBaseTRMtx (mDoMtx_stack_c::get ());
289+ }
290+ inline void setCoachCollision ();
291+ inline s16 getGroundSlope (dBgS_ObjAcch*, s16);
292+ inline void calcSpringF (f32 *, f32 , f32 *);
293+ inline void calcSpringS (s16*, s16, f32 *);
294+ inline void setCoachMtx ();
295+ inline void setWheelSmoke (daNpcChWheel_c*, dBgS_ObjAcch*, dKy_tevstr_c*, csXyz*);
296+ inline void setHarnessCollision ();
297+ inline f32 calcMaxSpeed ();
298+ inline void setHorseCollision ();
299+ inline void setHorseMtx ();
300+ inline void setHorseAnm (int );
301+ inline void eyeWink ();
302+ inline BOOL checkKargoAttack ();
303+ inline BOOL setExpressionAnm (int , bool );
304+ inline void resetOverAngle ();
305+ inline void reinsDraw ();
306+ inline u8 getPathID () { return fopAcM_GetParam (this ) & 0xFF ; }
307+ inline int getMessageNo () { return home.angle .x ; }
308+ inline void setHarnessMtx ();
309+
310+ const daNpcCoach_Attr_c& attr () { return M_attr; }
311+
312+ static daNpcCoach_Attr_c const M_attr;
313+ static u16 const ParticleName[10 ];
50314private:
51- /* 0x568 */ u8 field_0x568[0x1dc4 - 0x568 ];
52- /* 0x1DC4 */ bool field_0x1dc4;
53- /* 0x1DC5 */ u8 field_0x1dc5[0x247c - 0x1dc5 ];
54- /* 0x247C */ u32 field_0x247c[4 ];
55- /* 0x248C */ u8 field_0x248c[0x2490 - 0x248c ];
56- /* 0x2490 */ Mtx field_0x2490;
57- /* 0x24C0 */ u8 field_0x254c[0x2570 - 0x24c0 ];
315+ /* 0x0568 */ daNpcChHorse_c mChHorse ;
316+ /* 0x0E7C */ daNpcChHarness_c mChHarness ;
317+ /* 0x15D0 */ daNpcChCoach_c mChCoach ;
318+ /* 0x1DC0 */ int field_0x1dc0;
319+ /* 0x1DC4 */ bool mCoachBlazing ;
320+ /* 0x1DC5 */ u8 field_0x1dc5;
321+ /* 0x1DC6 */ u8 field_0x1dc6;
322+ /* 0x1DC7 */ u8 field_0x1dc7;
323+ /* 0x1DC8 */ daNpcChYelia_c mChYelia ;
324+ /* 0x2468 */ daNpcChPath_c mChPath ;
325+ /* 0x247C */ fpc_ProcID field_0x247c[5 ];
326+ /* 0x2490 */ Mtx mCoachMtx ;
327+ /* 0x24C0 */ int field_0x24c0;
328+ /* 0x24C4 */ int field_0x24c4;
329+ /* 0x24C8 */ f32 field_0x24c8;
330+ /* 0x24CC */ dBgS_AcchCir mAcchCir ;
331+ /* 0x250C */ dCcD_Stts mStts ;
332+ /* 0x2548 */ request_of_phase_process_class mPhase ;
333+ /* 0x2550 */ int field_0x2550;
334+ /* 0x2554 */ fpc_ProcID field_0x2554;
335+ /* 0x2558 */ u8 field_0x2558;
336+ /* 0x2559 */ u8 field_0x2559;
337+ /* 0x255C */ cXyz field_0x255c;
338+ /* 0x2568 */ int mPathID ;
339+ /* 0x256C */ u8 field_0x256c[0x2570 - 0x256c ];
58340};
59341
60342STATIC_ASSERT (sizeof (daNpcCoach_c) == 0x2570);
61343
62- class daNpcChHarness_c {
344+ struct daNpcCoach_Hio_c {
63345public:
64- /* 809A3570 */ ~daNpcChHarness_c ();
65- };
346+ void default_set () {
347+ field_0xc = daNpcCoach_c::M_attr;
348+ }
66349
67- class daNpcChCoach_c {
68- public:
69- /* 809A3674 */ ~daNpcChCoach_c () ;
350+ /* 0x0 */ u8 field_0x0[ 0x8 - 0x0 ];
351+ /* 0x8 */ int field_0x8;
352+ /* 0xC */ daNpcCoach_Attr_c field_0xc ;
70353};
71354
72355#endif /* D_A_NPC_COACH_H */
0 commit comments