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
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
|
#ifndef D_A_B_DS_H
#define D_A_B_DS_H
#include "SSystem/SComponent/c_phase.h"
#include "Z2AudioLib/Z2Creature.h"
#include "f_op/f_op_actor.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
#include "d/d_msg_flow.h"
#include "m_Do/m_Do_ext.h"
/**
* @ingroup actors-enemies
* @class daB_DS_c
* @brief Stallord
*
* @details Arbiter's Grounds dungeon boss.
*
*/
class daB_DS_c : public fopEn_enemy_c {
public:
enum Arg0 {
/* 0 */ TYPE_BATTLE_1,
/* 1 */ TYPE_BULLET_A,
/* 2 */ TYPE_BATTLE_2,
/* 3 */ TYPE_BULLET_B,
/* 4 */ TYPE_BULLET_C,
};
enum Action {
/* 0 */ ACT_WAIT,
/* 1 */ ACT_OPENING_DEMO,
/* 2 */ ACT_CIRCLE,
/* 3 */ ACT_DAMAGE,
/* 4 */ ACT_ETC_DAMAGE,
/* 5 */ ACT_HAND_ATTACK,
/* 6 */ ACT_BREATH_ATTACK,
/* 7 */ ACT_BREATH_SEARCH,
};
enum B2Action {
/* 0 */ ACT_B2_OPENING_DEMO,
/* 1 */ ACT_B2_WAIT,
/* 2 */ ACT_B2_F_MOVE,
/* 3 */ ACT_B2_TIRED,
/* 4 */ ACT_B2_DAMAGE,
/* 5 */ ACT_B2_DEAD,
};
enum AnmID {
/* 0x06 */ ANM_ATTACK01_A = 6,
/* 0x07 */ ANM_ATTACK01_B,
/* 0x08 */ ANM_ATTACK01_C,
/* 0x09 */ ANM_ATTACK02_A_A,
/* 0x0A */ ANM_ATTACK02_A_B,
/* 0x0B */ ANM_ATTACK02_A_C,
/* 0x0C */ ANM_ATTACK02_B_A,
/* 0x0D */ ANM_ATTACK02_B_B,
/* 0x0E */ ANM_ATTACK02_B_C,
/* 0x0F */ ANM_ATTACK02_C_A,
/* 0x10 */ ANM_ATTACK02_C_B,
/* 0x11 */ ANM_ATTACK02_C_C,
/* 0x12 */ ANM_ATTACK_L_A,
/* 0x13 */ ANM_ATTACK_L_B,
/* 0x14 */ ANM_ATTACK_L_C,
/* 0x15 */ ANM_ATTACK_R_A,
/* 0x16 */ ANM_ATTACK_R_B,
/* 0x17 */ ANM_ATTACK_R_C,
/* 0x18 */ ANM_CIRCLE_L_A,
/* 0x19 */ ANM_CIRCLE_L_B,
/* 0x1A */ ANM_CIRCLE_L_C,
/* 0x1B */ ANM_CIRCLE_R_A,
/* 0x1C */ ANM_CIRCLE_R_B,
/* 0x1D */ ANM_CIRCLE_R_C,
/* 0x1E */ ANM_DAMAGE_A,
/* 0x1F */ ANM_DAMAGE_A_WAIT,
/* 0x20 */ ANM_DAMAGE_B,
/* 0x21 */ ANM_DAMAGE_B_WAIT,
/* 0x22 */ ANM_ENDDEMO,
/* 0x23 */ ANM_HEAD_DAMAGE,
/* 0x24 */ ANM_HEAD_DIE,
/* 0x25 */ ANM_HEAD_DIEB,
/* 0x26 */ ANM_HEAD_DOWN,
/* 0x27 */ ANM_HEAD_DOWN_DAMAGE,
/* 0x28 */ ANM_HEAD_DOWN_UP,
/* 0x29 */ ANM_HEAD_FATTACK_A,
/* 0x2A */ ANM_HEAD_FATTACK_B,
/* 0x2B */ ANM_HEAD_FATTACK_C,
/* 0x2C */ ANM_HEAD_FWAIT,
/* 0x2D */ ANM_HEAD_RETURN,
/* 0x2E */ ANM_HEAD_TIRED,
/* 0x2F */ ANM_LASTDAMAGE,
/* 0x30 */ ANM_LASTDAMAGE_WAIT,
/* 0x31 */ ANM_NODAMAGE_01_A,
/* 0x32 */ ANM_NODAMAGE_01_B,
/* 0x33 */ ANM_NODAMAGE_01_C,
/* 0x34 */ ANM_NODAMAGE_02_A,
/* 0x35 */ ANM_NODAMAGE_02_B,
/* 0x36 */ ANM_NODAMAGE_02_C,
/* 0x37 */ ANM_NODAMAGE_03_A,
/* 0x38 */ ANM_NODAMAGE_03_B,
/* 0x39 */ ANM_NODAMAGE_03_C,
/* 0x3A */ ANM_OPDEMO,
/* 0x3B */ ANM_REVIVAL,
/* 0x3C */ ANM_WAIT01_A,
/* 0x3D */ ANM_WAIT01_B,
/* 0x3E */ ANM_WAIT01_C,
};
int ctrlJoint(J3DJoint*, J3DModel*);
static int JointCallBack(J3DJoint*, int);
int draw();
void setBck(int, u8, f32, f32);
void setActionMode(int, int);
void mSmokeSet();
void mHeadAngle_Clear();
void HandHitSoundSet(bool);
void handSPosSet(int);
void hand_smokeSet(u8);
void mZsMoveChk();
void mZsMoveChk_Guard();
void mTrapScale();
void mClearTrap(bool);
void mCreateTrap(bool);
void mChangeVer2();
void damage_check();
void neck_set();
bool mCutTypeCheck();
bool startDemoCheck();
void setYoMessage(int);
bool doYoMessage();
void executeOpeningDemo();
bool mHandBreathChk();
void executeWait();
void executeCircle();
void mBreakBoneSUB();
void damageSet();
void damageHitCamera();
void damageDownCheck();
void executeDamage();
void executeEtcDamage();
void breath_smokeSet();
void executeBreathAttack();
void executeHandAttack();
void executeBreathSearch();
void executeBattle2OpeningDemo();
void mFlyBMove(f32);
void mFuwafuwaSet(bool);
void mBattle2BreathFireSet(u32);
bool mNeckAngleSet();
void mSetFirstPos();
bool mChkScreenIn();
bool mRailInOutCheck();
void executeBattle2Wait();
bool mBattle2MoveFSet();
void executeBattle2FMove();
void executeBattle2Tired();
void executeBattle2Damage();
bool mDeadMove();
void executeBattle2Dead();
void executeBullet();
void mBulletAction();
void mSoundSE_Set();
void action();
void mtx_set();
void cc_set();
void cc_etc_set();
void mBattle2Action();
void mBattle2_spinner_damage_check();
bool mBattle2_damage_check();
void mBattle2_mtx_set();
void mBattle2_cc_etc_set();
void mBattle2_cc_set();
int execute();
int _delete();
int CreateHeap();
cPhs_Step create();
daB_DS_c();
cXyz getHandPosR();
cXyz getHandPosL();
BOOL isOpening() { return mAction == ACT_OPENING_DEMO; }
bool isDemo() { return mIsDemo; }
bool isAppear() { return mIsAppear; }
bool isAppearG() { return mIsAppearG; }
bool isDead() { return mDead; }
bool isArg0() { return arg0; }
void onDemo() { mIsDemo = true; }
void offDemo() { mIsDemo = false; }
private:
/* 0x05AC */ request_of_phase_process_class mPhase;
/* 0x05B4 */ mDoExt_McaMorfSO* mpMorf;
/* 0x05B8 */ mDoExt_McaMorfSO* mpSwordMorf;
/* 0x05BC */ mDoExt_McaMorfSO* mpZantMorf;
/* 0x05C0 */ J3DModel* mpOpPatternModel;
/* 0x05C4 */ J3DModel* mpPatternModel;
/* 0x05C8 */ mDoExt_brkAnm* mpSwordBrkAnm;
/* 0x05CC */ mDoExt_brkAnm* mpOpPatternBrkAnm;
/* 0x05D0 */ mDoExt_btkAnm* mpOpPatternBtkAnm;
/* 0x05D4 */ mDoExt_brkAnm* mpPatternBrkAnm;
/* 0x05D8 */ mDoExt_btkAnm* mpPatternBtkAnm;
/* 0x05DC */ Z2CreatureEnemy mSound;
/* 0x0680 */ int mAction;
/* 0x0684 */ int mMode;
/* 0x0688 */ int mHitLocation;
/* 0x068C */ int mAnmID;
/* 0x0690 */ int mBirthTrapTimerF;
/* 0x0694 */ int mPedestalFallTimer;
/* 0x0698 */ int mSandFallTimer;
/* 0x069C */ int mSwordTimer;
/* 0x06A0 */ int mHintTimer1;
/* 0x06A4 */ int mHintTimer2;
/* 0x06A8 */ int field_0x6a8;
/* 0x06AC */ cXyz mZantScale;
/* 0x06B8 */ cXyz mSwordScale;
/* 0x06C4 */ cXyz mSoundPos;
/* 0x06D0 */ cXyz field_0x6d0;
/* 0x06DC */ cXyz mZantEyePos;
/* 0x06E8 */ cXyz mSwordPos;
/* 0x06F4 */ cXyz field_0x6f4;
/* 0x0700 */ cXyz mMouthPos;
/* 0x070C */ cXyz mBulletPos;
/* 0x0718 */ cXyz field_0x718;
/* 0x0724 */ cXyz field_0x724;
/* 0x0730 */ cXyz mSandPos;
/* 0x073C */ cXyz mBackbonePos;
/* 0x0748 */ cXyz mZantPos;
/* 0x0754 */ cXyz mHeadPos;
/* 0x0760 */ cXyz mHandPos[2];
/* 0x0778 */ cXyz mFingerPos[2];
/* 0x0790 */ cXyz field_0x790;
/* 0x079C */ cXyz field_0x79c;
/* 0x07A8 */ csXyz mHeadAngle;
/* 0x07AE */ csXyz field_0x7ae;
/* 0x07B4 */ u8 field_0x7b4[6];
/* 0x07BA */ csXyz field_0x7ba;
/* 0x07C0 */ csXyz field_0x7c0;
/* 0x07C6 */ u8 field_0x7c6[4];
/* 0x07CA */ s16 field_0x7ca;
/* 0x07CC */ s16 mBh2AttackAngleF;
/* 0x07CE */ s16 field_0x7ce;
/* 0x07D0 */ s16 field_0x7d0;
/* 0x07D2 */ s16 field_0x7d2;
/* 0x07D4 */ f32 mBreathTimerBase;
/* 0x07D8 */ f32 mBulletRadius;
/* 0x07DC */ f32 mBackboneCrackAlpha[3];
/* 0x07E8 */ f32 mEyeColorAlpha;
/* 0x07EC */ f32 mCrackAlpha;
/* 0x07F0 */ f32 mBulletDistance;
/* 0x07F4 */ f32 mChkHigh;
/* 0x07F8 */ f32 field_0x7f8;
/* 0x07FC */ f32 mColBlend;
/* 0x0800 */ f32 mGroundUpY;
/* 0x0804 */ f32 field_0x804;
/* 0x0808 */ f32 field_0x808;
/* 0x080C */ f32 field_0x80c;
/* 0x0810 */ f32 mWallR;
/* 0x0814 */ int mBrokenBone;
/* 0x0818 */ int mTimerCount;
/* 0x081C */ int mModeTimer;
/* 0x0820 */ int mHitTimer;
/* 0x0824 */ u8 field_0x824[4];
/* 0x0828 */ int mP2FallTimer;
/* 0x082C */ int field_0x82c;
/* 0x0830 */ int mBreathTimeCount;
/* 0x0834 */ int mOutTimer;
/* 0x0838 */ int mSmokeCount;
/* 0x083C */ int field_0x83c;
/* 0x0840 */ int field_0x840;
/* 0x0844 */ u8 field_0x844[4];
/* 0x0848 */ u32 mShadowKey;
/* 0x084C */ u8 mAttackingHand;
/* 0x084D */ u8 field_0x84d;
/* 0x084E */ u8 mDamageTimer;
/* 0x084F */ u8 mBackboneLevel;
/* 0x0850 */ bool mDead;
/* 0x0851 */ bool mIsDemo;
/* 0x0852 */ u8 mBossPhase;
/* 0x0853 */ bool mIsOpeningDemo;
/* 0x0854 */ bool mIsAppear;
/* 0x0855 */ bool mIsAppearG;
/* 0x0856 */ u8 arg0;
/* 0x0857 */ u8 bitSw;
/* 0x0858 */ u8 bitSw2;
/* 0x0859 */ u8 bitSw3;
/* 0x085A */ bool mCreateFireBreath;
/* 0x085B */ bool mNoDrawSword;
/* 0x085C */ bool mDrawZant;
/* 0x085D */ bool mDrawZantSword;
/* 0x085E */ bool field_0x85e;
/* 0x085F */ bool mPlayPatternAnm;
/* 0x0860 */ bool mTrapCreate;
/* 0x0861 */ bool field_0x861;
/* 0x0862 */ u8 field_0x862[1];
/* 0x0864 */ u32 mMsgIdx;
/* 0x0868 */ u32 mMsgPcID;
/* 0x086C */ msg_class* mpMsg;
/* 0x0870 */ dBgS_AcchCir mAcchCir;
/* 0x08B0 */ dBgS_ObjAcch mAcch;
/* 0x0A88 */ dCcD_Stts mCcStts;
/* 0x0AC4 */ dCcD_Sph mWeakSph;
/* 0x0BFC */ dCcD_Sph mHeadSph[5];
/* 0x1214 */ dCcD_Sph mBreathAtSph;
/* 0x134C */ dCcD_Sph mEtcSph[18];
/* 0x293C */ dCcD_Cyl mBackboneCyl;
/* 0x2A78 */ dCcD_Cyl mHandAtLCyl;
/* 0x2BB4 */ dCcD_Cyl mHandAtRCyl;
/* 0x2CF0 */ dCcU_AtInfo mAtInfo;
/* 0x2D14 */ cXyz mCameraEye;
/* 0x2D20 */ cXyz mCameraCenter;
/* 0x2D2C */ f32 mCameraFovy;
/* 0x2D30 */ u8 field_0x2d30[0xc];
/* 0x2D3C */ u32 mStaltroopID[15];
/* 0x2D78 */ u32 mTrapID[20];
/* 0x2DC8 */ u32 mStaltroop2ID[5];
/* 0x2DDC */ u32 mHandSmokeParticleKey[4];
/* 0x2DEC */ u32 mHitParticleKey[2];
/* 0x2DF4 */ u32 mDeathParticleKey;
/* 0x2DF8 */ u8 field_0x2df8[0xc];
/* 0x2E04 */ u32 mBackboneParticleKey[2];
/* 0x2E0C */ u32 mSandParticleKey[2];
/* 0x2E14 */ u32 mParticleKey1;
/* 0x2E18 */ u32 mParticleKey2;
/* 0x2E1C */ u32 mSmokeParticleKey[20];
/* 0x2E6C */ u32 mStartingParticleKey[16];
/* 0x2EAC */ u32 mBreathSmokeParticleKey[3];
/* 0x2EB8 */ u32 mBulletParticleKey[4];
/* 0x2EC8 */ bool mHIOInit;
/* 0x2EC9 */ u8 field_0x2ec9[0x13];
/* 0x2EDC */ dMsgFlow_c mMsgFlow;
};
cXyz daB_DS_c::getHandPosR() { return mHandPos[1]; }
cXyz daB_DS_c::getHandPosL() { return mHandPos[0]; }
STATIC_ASSERT(sizeof(daB_DS_c) == 0x2F28);
class daB_DS_HIO_c {
public:
daB_DS_HIO_c();
virtual ~daB_DS_HIO_c() {}
/* 0x04 */ s8 field_0x04;
/* 0x08 */ f32 mModelSize;
/* 0x0C */ f32 mHandRange;
/* 0x10 */ f32 mBreathRange;
/* 0x14 */ f32 mGuardSpawnRange;
/* 0x18 */ f32 mNoSearchRange;
/* 0x1C */ f32 mP2MoveAxis;
/* 0x20 */ f32 mP2ModelSize;
/* 0x24 */ f32 mP2AttackHeight;
/* 0x28 */ s16 mP2FallTime;
/* 0x2A */ s16 mPedestalFallTime;
/* 0x2C */ s16 mSandFallWaitTime;
/* 0x2E */ s16 mP2BulletFireTime;
/* 0x30 */ s16 mP2OuterWallAttackTime;
/* 0x32 */ s16 mP2TrapCreateWaitTime1;
/* 0x34 */ s16 mP2TrapCreateWaitTime2;
/* 0x36 */ s16 mP2TrapCreateID1;
/* 0x38 */ s16 mP2TrapCreateID2;
/* 0x3A */ s16 mHintTime1;
/* 0x3C */ s16 mHintTime2;
/* 0x3E */ s16 mP2OuterWallTrapSpeed;
/* 0x40 */ s16 mTowerTrapSpeed;
/* 0x42 */ s16 mP2ApproachAccel;
/* 0x44 */ s16 mP2ApproachSpeedMax;
/* 0x46 */ s16 mP2ApproachAfterBullet;
/* 0x48 */ s16 mP2ApproachDist;
/* 0x4A */ s16 mP2Health;
/* 0x4C */ bool mP2HealthDebugOn;
};
#endif /* D_A_B_DS_H */
|