summaryrefslogtreecommitdiff
path: root/include/d/a/e/d_a_e_ks.h
blob: d63150e8c1d983501f6d4ec600f32ab4e30d65d3 (plain)
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
#ifndef D_A_E_KS_H
#define D_A_E_KS_H

#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/e/d_a_en_base.h"
#include "d/col/bg/d_bg_s_acch.h"
#include "d/col/cc/d_cc_d.h"
#include "d/d_light_env.h"
#include "m/m3d/m_anmtexpat.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "toBeSorted/d_emitter.h"
#include "toBeSorted/d_path.h"
#include "toBeSorted/time_area_mgr.h"

class dTgKiesuTag_c;
class dAcEKs_c : public dAcEnBase_c {
public:
    dAcEKs_c() : mStateMgr(*this) {}
    virtual ~dAcEKs_c() {}

    virtual int doDelete() override;
    virtual int draw() override;
    virtual bool createHeap() override;
    virtual int actorCreate() override;
    virtual int actorPostCreate() override;
    virtual int actorExecute() override;
    virtual bool restorePosRotFromCopy() override;

    STATE_FUNC_DECLARE(dAcEKs_c, Wait);
    STATE_FUNC_DECLARE(dAcEKs_c, WakeUp);
    STATE_FUNC_DECLARE(dAcEKs_c, ReturnToWait);
    STATE_FUNC_DECLARE(dAcEKs_c, WaitReady);
    STATE_FUNC_DECLARE(dAcEKs_c, Move);
    STATE_FUNC_DECLARE(dAcEKs_c, Chase);
    STATE_FUNC_DECLARE(dAcEKs_c, ChaseAttack);
    STATE_FUNC_DECLARE(dAcEKs_c, Fighting);
    STATE_FUNC_DECLARE(dAcEKs_c, AttackReady);
    STATE_FUNC_DECLARE(dAcEKs_c, Attack);
    STATE_FUNC_DECLARE(dAcEKs_c, Damage);
    STATE_FUNC_DECLARE(dAcEKs_c, Stun);
    STATE_FUNC_DECLARE(dAcEKs_c, WindBlow);
    STATE_FUNC_DECLARE(dAcEKs_c, PathMove);

    STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcEKs_c);
    STATE_MGR_DEFINE_UTIL_ISSTATE(dAcEKs_c);

    enum Type_e {
        EKS_NORMAL,
        EKS_FIRE,
        EKS_ELECTRIC,
        EKS_CURSED,
    };
    enum StartingStateParam_e {
        EKS_STARTSTATE_Move = 0,
        EKS_STARTSTATE_Wait = 1,
        EKS_STARTSTATE_PathMove = 2,
    };
    enum State_e {
        EKS_STATE_Move = 0,
        EKS_STATE_Wait = 1,
        EKS_STATE_PathMove = 2,
        EKS_STATE_WakeUp = 4,
        EKS_STATE_ReturnToWait = 5,
        EKS_STATE_Chase = 6,
        EKS_STATE_ChaseAttack = 7,
        EKS_STATE_Fighting = 8,
        EKS_STATE_AttackReady = 9,
        EKS_STATE_Attack = 10,
        EKS_STATE_Damage = 11,
        EKS_STATE_Stun = 12,
        EKS_STATE_WindBlow = 13,
    };
    enum AnmTexPat_e {
        EKS_TEXPAT_BLINK1,
        EKS_TEXPAT_BLINK2,
        EKS_TEXPAT_BLINK3,
    };

public:
    void linkKiesuTag(dTgKiesuTag_c *pTgKs);
    void setStartingState();
    void setIdleState();

    void fn_155_A60();

    f32 getLineCrossYRange(const mVec3_c &pos, f32 range);

    void kill(bool dropItem);
    void chaseTargetY(f32, f32);
    void playBlinkAnm();
    void soundSqueak();
    void soundStun();
    void fn_155_1430();

    void fn_155_1470();

    // Move impl?
    void fn_155_1C80();

    /* 0 -> blink_1, 1 -> blink_2, 2 -> blink_3*/
    void setBlink(u8 blink);
    void setBlinkChecked(u8 blink);

    void fn_155_2270();
    /* p1 = 0 -> just LineCross return check,  1 ->  increment field_0xDCB till 10 then return check*/
    bool fn_155_29D0(s32 p1);
    bool fn_155_2B80(bool b, s32 p1);
    bool fn_155_2D60(bool b, s32 p1);
    bool fn_155_2EA0();
    bool isOutsideRange();
    bool isNotWaitingNorDamage();
    bool isTargeted();
    bool checkWallCross();
    void adjustTargetGnd();
    void adjustTargetRoof();
    bool ChkHit();
    void fn_155_3460();
    void fn_155_3480();
    bool transitionToNextState();
    void setAnim(char *, f32, f32, f32);
    void fn_155_3720(f32, f32);
    void fn_155_3750(u8 state);
    void fn_155_37A0();
    void fn_155_37F0();
    void fn_155_3840();
    void fn_155_3890();
    void on_lbl_155_bss_389();
    /* 0: Checks states to set AC_PROP_0x1 - 1: Unset AC_PROP_0x1*/
    void fn_155_3900(s32 p0);
    void setPitchYawToPoint(const mVec3_c &pnt);
    void fn_155_3BD0(const mVec3_c &);
    void fn_155_3BE0(const mVec3_c &);
    void clampRotationX();
    bool checkPathPntParam(u32 param);
    void fn_155_3E30();
    void fn_155_3E90();
    void fn_155_3EC0();

    /* Some Timestone Check */
    bool fn_155_3EF0();

    void fn_155_3F50();

private:
    /* 0x378 */ dAcRef_c<dTgKiesuTag_c> mTgRef;
    /* 0x384 */ nw4r::g3d::ResFile mResFile;
    /* 0x388 */ d3d::AnmMdlWrapper mMdl;
    /* 0x3F8 */ m3d::anmTexPat_c mAnmTexPat;
    /* 0x324 */ dShadowCircle_c mShadow;
    /* 0x42C */ dBgS_AcchCir mAcchCir;
    /* 0x488 */ dBgS_ObjAcch mAcch;
    /* 0x838 */ dCcD_Sph mSph;
    /* 0x988 */ STATE_MGR_DECLARE(dAcEKs_c);
    /* 0x9C4 */ dEmitter_c mEmitter1;
    /* 0x9F8 */ dEmitter_c mEmitter2;
    /* 0xA2C */ dWaterEffect_c mWaterEmitter;
    /* 0xA74 */ ActorOnRail_Ext mRail;
    /* 0xAA8 */ TimeAreaStruct mTimeArea;
    /* 0xAB4 */ mMtx_c mCenterWorldMtx;
    /* 0xAE4 */ mMtx_c field_0xAE4;
    /* 0xB14 */ mVec3_c mPnts[10];
    /* 0xB8C */ mVec3_c field_0xB8C;
    /* 0xB98 */ mVec3_c field_0xB98;
    /* 0xBA4 */ mVec3_c field_0xBA4;
    /* 0xBB0 */ mVec3_c mTargetPos;
    /* 0xBBC */ mVec3_c field_0xBBC;
    /* 0xBC8 */ mVec3_c field_0xBC8;
    /* 0xBD4 */ mVec3_c field_0xBD4;
    /* 0xBE0 */ mVec3_c field_0xBE0;
    /* 0xBEC */ mVec3_c field_0xBEC;
    /* 0xBF8 */ mVec3_c field_0xBF8;
    /* 0xC04 */ mVec3_c field_0xC04;
    /* 0xC10 */ mVec3_c field_0xC10;
    /* 0xC1C */ mVec3_c field_0xC1C;
    /* 0xC28 */ mVec3_c field_0xC28;
    /* 0xC34 */ mAng mPitch_0xC34;
    /* 0xC36 */ mAng mYaw_0xC36;
    /* 0xC38 */ u8 _0xC38[0xC3C - 0xC38];
    /* 0xC3C */ f32 field_0xC3C;
    /* 0xC40 */ f32 field_0xC40;
    /* 0xC44 */ f32 field_0xC44;
    /* 0xC48 */ f32 field_0xC48;
    /* 0xC4C */ u8 _0xC4C[0xC70 - 0xC4C];
    /* 0xC70 */ f32 field_0xC70;
    /* 0xC74 */ u8 _0xC74[0xC90 - 0xC74];
    /* 0xC90 */ f32 field_0xC90;
    /* 0xC94 */ u8 _0xC94[0xCE0 - 0xC94];
    /* 0xCE0 */ f32 field_0xCE0;
    /* 0xCE4 */ f32 field_0xCE4;
    /* 0xCE8 */ u8 _0xCE8[0xCF8 - 0xCE8];
    /* 0xCF8 */ f32 field_0xCF8;
    /* 0xCFC */ f32 field_0xCFC;
    /* 0xD00 */ f32 field_0xD00;
    /* 0xD04 */ f32 field_0xD04;
    /* 0xD08 */ f32 field_0xD08;
    /* 0xD0C */ f32 field_0xD0C;
    /* 0xD10 */ f32 field_0xD10;
    /* 0xD14 */ f32 field_0xD14;
    /* 0xD18 */ f32 field_0xD18;
    /* 0xD1C */ f32 field_0xD1C;
    /* 0xD20 */ f32 field_0xD20;
    /* 0xD24 */ f32 field_0xD24;
    /* 0xD28 */ f32 field_0xD28;
    /* 0xD2C */ u32 mCenterNode;
    /* 0xD30 */ u8 field_0xD30;
    /* 0xD31 */ u8 field_0xD31;
    /* 0xD32 */ u16 mTimer;
    /* 0xD34 */ u8 _0xD34[0xD4A - 0xD34];
    /* 0xD4A */ s16 field_0xD4A;
    /* 0xD4C */ s16 field_0xD4C;
    /* 0xD4E */ s16 field_0xD4E;
    /* 0xD50 */ s16 field_0xD50;
    /* 0xD52 */ s16 field_0xD52;
    /* 0xD54 */ s16 field_0xD54;
    /* 0xD56 */ s16 field_0xD56;
    /* 0xD58 */ s16 field_0xD58;
    /* 0xD5A */ s16 field_0xD5A;
    /* 0xD5C */ s16 field_0xD5C;
    /* 0xD5E */ s16 field_0xD5E;
    /* 0xD60 */ s16 field_0xD60;
    /* 0xD62 */ s16 field_0xD62;
    /* 0xD64 */ s16 field_0xD64;
    /* 0xD66 */ s16 field_0xD66;
    /* 0xD68 */ s16 field_0xD68;
    /* 0xD6A */ s16 field_0xD6A;
    /* 0xD6C */ s16 field_0xD6C;
    /* 0xD6E */ s16 field_0xD6E;
    /* 0xD70 */ s16 field_0xD70;
    /* 0xD72 */ s16 field_0xD72;
    /* 0xD74 */ s16 field_0xD74;
    /* 0xD76 */ s16 field_0xD76;
    /* 0xD78 */ s16 mBlinkTimer;
    /* 0xD7A */ u16 field_0xD7A;
    /* 0xD7C */ s16 field_0xD7C;
    /* 0xD7E */ s16 mSqueakSoundTimer;
    /* 0xD80 */ s16 mStunSoundTimer;
    /* 0xD82 */ s16 field_0xD82;
    /* 0xD84 */ s16 field_0xD84;
    /* 0xD86 */ s16 field_0xD86;
    /* 0xD88 */ s16 field_0xD88;
    /* 0xD8A */ s16 field_0xD8A;
    /* 0xD8C */ s16 field_0xD8C;
    /* 0xD8E */ u16 field_0xD8E;
    /* 0xD90 */ s16 field_0xD90;
    /* 0xD92 */ s16 field_0xD92;
    /* 0xD94 */ s16 field_0xD94;
    /* 0xD96 */ s16 field_0xD96;
    /* 0xD98 */ s16 field_0xD98;
    /* 0xD9A */ s16 field_0xD9A;
    /* 0xD9C */ s16 field_0xD9C;
    /* 0xD9E */ s16 field_0xD9E;
    /* 0xDA0 */ s16 field_0xDA0;
    /* 0xDA2 */ s16 field_0xDA2;
    /* 0xDA4 */ u8 field_0xDA4;
    /* 0xDA5 */ u8 field_0xDA5;
    /* 0xDA6 */ u8 field_0xDA6;
    /* 0xDA7 */ u8 field_0xDA7;
    /* 0xDA8 */ u8 field_0xDA8;
    /* 0xDA9 */ u8 field_0xDA9;
    /* 0xDAA */ u8 field_0xDAA;
    /* 0xDAB */ u8 field_0xDAB;
    /* 0xDAC */ u8 field_0xDAC;
    /* 0xDAD */ u8 field_0xDAD;
    /* 0xDAE */ u8 field_0xDAE;
    /* 0xDAF */ u8 field_0xDAF;
    /* 0xDB0 */ u8 field_0xDB0;
    /* 0xDB1 */ u8 field_0xDB1;
    /* 0xDB2 */ u8 field_0xDB2;
    /* 0xDB3 */ u8 field_0xDB3;
    /* 0xDB4 */ u8 field_0xDB4;
    /* 0xDB5 */ u8 field_0xDB5;
    /* 0xDB6 */ u8 field_0xDB6;
    /* 0xDB7 */ u8 field_0xDB7;
    /* 0xDB8 */ u8 field_0xDB8;
    /* 0xDB9 */ u8 field_0xDB9;
    /* 0xDBA */ u8 field_0xDBA;
    /* 0xDBB */ u8 field_0xDBB;
    /* 0xDBC */ u8 mType;
    /* 0xDBD */ u8 field_0xDBD;
    /* 0xDBE */ u8 field_0xDBE;
    /* 0xDBF */ u8 field_0xDBF;
    /* 0xDC0 */ u8 mCurrentAnmTexPat; // blink
    /* 0xDC1 */ u8 field_0xDC1;
    /* 0xDC2 */ u8 mCurrentState;
    /* 0xDC3 */ u8 mNextState;
    /* 0xDC4 */ u8 field_0xDC4;
    /* 0xDC5 */ u8 field_0xDC5;
    /* 0xDC6 */ u8 field_0xDC6;
    /* 0xDC7 */ u8 mStartingState;
    /* 0xDC8 */ u8 field_0xDC8;
    /* 0xDC9 */ u8 field_0xDC9;
    /* 0xDCA */ u8 field_0xDCA;
    /* 0xDCB */ u8 field_0xDCB;
    /* 0xDCC */ u8 field_0xDCC;
    /* 0xDCD */ u8 field_0xDCD;
    /* 0xDCE */ u8 field_0xDCE;
    /* 0xDCF */ u8 field_0xDCF;
    /* 0xDD0 */ u8 field_0xDD0;
    /* 0xDD4 */ LIGHT_INFLUENCE mLightInfluence;

    // Controlled by dTgKiesuTag_c
    static bool lbl_155_bss_388;
    static bool lbl_155_bss_389;
};

#endif