summaryrefslogtreecommitdiff
path: root/include/d/a/b/d_a_b_lastboss.h
blob: 84bf0baa3aaa35b17b9d9a04524d2802edcb0b59 (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
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
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
#ifndef D_A_B_LASTBOSS_H
#define D_A_B_LASTBOSS_H

#include "d/a/e/d_a_en_base.h"
#include "d/d_cc.h"
#include "d/d_light_env.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m3d/m_anmtexsrt.h"
#include "m/m3d/m_mdl.h"
#include "m/m3d/m_smdl.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
#include "toBeSorted/d_emitter.h"
#include "toBeSorted/d_enemy_sword_mdl.h"
#include "toBeSorted/stage_render_stuff.h"

class dTgSwordBattleGame_c;

// TODO this might be a template but what about the offset?
struct UnkLastBossCcSph1 {
    /* 0x000 */ u8 _0x000[0x002 - 0x000];
    /* 0x002 */ s16 field_0x002;
    /* 0x004 */ s16 field_0x004;
    /* 0x006 */ s16 field_0x006;
    /* 0x008 */ mVec3_c field_0x008[5];
    /* 0x044 */ mVec3_c field_0x044[5];
    /* 0x080 */ mVec3_c field_0x080[5];
    /* 0x0BC */ dCcD_Linked_Sph mCc;
};

struct UnkLastBossCcSph2 {
    /* 0x000 */ s16 field_0x000;
    /* 0x002 */ s16 field_0x002;
    /* 0x004 */ s16 field_0x004;
    /* 0x006 */ s16 field_0x006;
    /* 0x008 */ s16 field_0x008;
    /* 0x00A */ s16 field_0x00A;
    /* 0x00C */ f32 field_0x00C;
    /* 0x010 */ f32 field_0x010;
    /* 0x014 */ mVec3_c field_0x014[10];
    /* 0x08C */ mVec3_c field_0x08C[10];
    /* 0x104 */ mVec3_c field_0x104[10];
    /* 0x17C */ dCcD_Linked_Sph mCc;
};

class dAcBlastboss_c : public dAcEnBase_c {
    class callback_c : public m3d::callback_c {
    public:
        virtual void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override;

        /* 0x04 */ mAng field_0x04;
        /* 0x06 */ mAng field_0x06;
        /* 0x08 */ mAng field_0x08;
        /* 0x0A */ mAng field_0x0A;
        /* 0x0C */ mAng field_0x0C;
        /* 0x0E */ mAng field_0x0E;
        /* 0x10 */ mAng field_0x10;
        /* 0x12 */ mAng field_0x12;
        /* 0x14 */ mAng field_0x14;
        /* 0x16 */ mAng field_0x16;
        /* 0x18 */ mAng field_0x18;
        /* 0x1A */ mAng field_0x1A;
        /* 0x1C */ mAng field_0x1C[9];
        /* 0x2E */ mAng field_0x2E;
        /* 0x30 */ f32 field_0x30;
        /* 0x34 */ dAcBlastboss_c *mpOwner;
    };

    friend class callback_c;

    // BLastBoss.arc > g3d > model.brres > 3DModels(NW4R) > LastBoss > Bones > ...
    enum BLastBossModelNode_e {
        B_LAST_BOSS_NODE_center = 0,
        B_LAST_BOSS_NODE_backbone1 = 1,
        B_LAST_BOSS_NODE_backbone2 = 2,
        B_LAST_BOSS_NODE_chest = 3,
        B_LAST_BOSS_NODE_neck = 4,
        B_LAST_BOSS_NODE_head = 5,
        B_LAST_BOSS_NODE_browL = 6,
        B_LAST_BOSS_NODE_browR = 7,
        B_LAST_BOSS_NODE_chin = 8,
        B_LAST_BOSS_NODE_hairA1 = 9,
        B_LAST_BOSS_NODE_hairA2 = 10,
        B_LAST_BOSS_NODE_hairA3 = 11,
        B_LAST_BOSS_NODE_hairA4 = 12,
        B_LAST_BOSS_NODE_hairBL1 = 13,
        B_LAST_BOSS_NODE_hairBL2 = 14,
        B_LAST_BOSS_NODE_hairBL3 = 15,
        B_LAST_BOSS_NODE_hairBR1 = 16,
        B_LAST_BOSS_NODE_hairBR2 = 17,
        B_LAST_BOSS_NODE_hairBR3 = 18,
        B_LAST_BOSS_NODE_hairC1 = 19,
        B_LAST_BOSS_NODE_hairC2 = 20,
        B_LAST_BOSS_NODE_hairC3 = 21,
        B_LAST_BOSS_NODE_mouthL = 22,
        B_LAST_BOSS_NODE_mouthR = 23,
        B_LAST_BOSS_NODE_shoulderL = 24,
        B_LAST_BOSS_NODE_armL1 = 25,
        B_LAST_BOSS_NODE_armL2 = 26,
        B_LAST_BOSS_NODE_assistanceL = 27,
        B_LAST_BOSS_NODE_wristL = 28,
        B_LAST_BOSS_NODE_indexL1 = 29,
        B_LAST_BOSS_NODE_indexL2 = 30,
        B_LAST_BOSS_NODE_littleL1 = 31,
        B_LAST_BOSS_NODE_littleL2 = 32,
        B_LAST_BOSS_NODE_middleL1 = 33,
        B_LAST_BOSS_NODE_middleL2 = 34,
        B_LAST_BOSS_NODE_ringL1 = 35,
        B_LAST_BOSS_NODE_ringL2 = 36,
        B_LAST_BOSS_NODE_thumbL1 = 37,
        B_LAST_BOSS_NODE_thumbL2 = 38,
        B_LAST_BOSS_NODE_shoulderR = 39,
        B_LAST_BOSS_NODE_armR1 = 40,
        B_LAST_BOSS_NODE_armR2 = 41,
        B_LAST_BOSS_NODE_assistanceR = 42,
        B_LAST_BOSS_NODE_wristR = 43,
        B_LAST_BOSS_NODE_indexR1 = 44,
        B_LAST_BOSS_NODE_indexR2 = 45,
        B_LAST_BOSS_NODE_littleR1 = 46,
        B_LAST_BOSS_NODE_littleR2 = 47,
        B_LAST_BOSS_NODE_loc_sword01 = 48,
        B_LAST_BOSS_NODE_middleR1 = 49,
        B_LAST_BOSS_NODE_middleR2 = 50,
        B_LAST_BOSS_NODE_ringR1 = 51,
        B_LAST_BOSS_NODE_ringR2 = 52,
        B_LAST_BOSS_NODE_thumbR1 = 53,
        B_LAST_BOSS_NODE_thumbR2 = 54,
        B_LAST_BOSS_NODE_belly = 55,
        B_LAST_BOSS_NODE_waist = 56,
        B_LAST_BOSS_NODE_legL1 = 57,
        B_LAST_BOSS_NODE_legL2 = 58,
        B_LAST_BOSS_NODE_ankleL = 59,
        B_LAST_BOSS_NODE_toeL = 60,
        B_LAST_BOSS_NODE_legR1 = 61,
        B_LAST_BOSS_NODE_legR2 = 62,
        B_LAST_BOSS_NODE_ankleR = 63,
        B_LAST_BOSS_NODE_toeR = 64,
        B_LAST_BOSS_NODE_skirtA1 = 65,
        B_LAST_BOSS_NODE_skirtA2 = 66,
        B_LAST_BOSS_NODE_skirtAU1 = 67,
        B_LAST_BOSS_NODE_skirtB1 = 68,
        B_LAST_BOSS_NODE_skirtB2 = 69,
        B_LAST_BOSS_NODE_skirtB3 = 70,
        B_LAST_BOSS_NODE_skirtB4 = 71,
        B_LAST_BOSS_NODE_skirtB5 = 72,
        B_LAST_BOSS_NODE_skirtB6 = 73,
        B_LAST_BOSS_NODE_skirtB7 = 74,
        B_LAST_BOSS_NODE_skirtB8 = 75,
        B_LAST_BOSS_NODE_skirtB9 = 76,
        B_LAST_BOSS_NODE_skirtBU1 = 77,
        B_LAST_BOSS_NODE_skirtC1 = 78,
        B_LAST_BOSS_NODE_skirtC2 = 79,
        B_LAST_BOSS_NODE_skirtC3 = 80,
        B_LAST_BOSS_NODE_skirtC4 = 81,
        B_LAST_BOSS_NODE_skirtC5 = 82,
        B_LAST_BOSS_NODE_skirtC6 = 83,
        B_LAST_BOSS_NODE_skirtC7 = 84,
        B_LAST_BOSS_NODE_skirtC8 = 85,
        B_LAST_BOSS_NODE_skirtC9 = 86,
        B_LAST_BOSS_NODE_skirtCU1 = 87,
        B_LAST_BOSS_NODE_skirtD1 = 88,
        B_LAST_BOSS_NODE_skirtD2 = 89,
        B_LAST_BOSS_NODE_skirtD3 = 90,
        B_LAST_BOSS_NODE_skirtD4 = 91,
        B_LAST_BOSS_NODE_skirtD5 = 92,
        B_LAST_BOSS_NODE_skirtD6 = 93,
        B_LAST_BOSS_NODE_skirtD7 = 94,
        B_LAST_BOSS_NODE_skirtD8 = 95,
        B_LAST_BOSS_NODE_skirtD9 = 96,
        B_LAST_BOSS_NODE_skirtDU1 = 97,
        B_LAST_BOSS_NODE_skirtE1 = 98,
        B_LAST_BOSS_NODE_skirtE2 = 99,
        B_LAST_BOSS_NODE_skirtE3 = 100,
        B_LAST_BOSS_NODE_skirtE4 = 101,
        B_LAST_BOSS_NODE_skirtE5 = 102,
        B_LAST_BOSS_NODE_skirtE6 = 103,
        B_LAST_BOSS_NODE_skirtE7 = 104,
        B_LAST_BOSS_NODE_skirtE8 = 105,
        B_LAST_BOSS_NODE_skirtE9 = 106,
        B_LAST_BOSS_NODE_skirtEU1 = 107,
        B_LAST_BOSS_NODE_skirtEU2 = 108,
        B_LAST_BOSS_NODE_skirtF1 = 109,
        B_LAST_BOSS_NODE_skirtF2 = 110,
        B_LAST_BOSS_NODE_skirtF3 = 111,
        B_LAST_BOSS_NODE_skirtF4 = 112,
        B_LAST_BOSS_NODE_skirtF5 = 113,
        B_LAST_BOSS_NODE_skirtF6 = 114,
        B_LAST_BOSS_NODE_skirtF7 = 115,
        B_LAST_BOSS_NODE_skirtF8 = 116,
        B_LAST_BOSS_NODE_skirtF9 = 117,
        B_LAST_BOSS_NODE_skirtFU1 = 118,
        B_LAST_BOSS_NODE_skirtG1 = 119,
        B_LAST_BOSS_NODE_skirtG2 = 120,
        B_LAST_BOSS_NODE_skirtG3 = 121,
        B_LAST_BOSS_NODE_skirtG4 = 122,
        B_LAST_BOSS_NODE_skirtG5 = 123,
        B_LAST_BOSS_NODE_skirtG6 = 124,
        B_LAST_BOSS_NODE_skirtG7 = 125,
        B_LAST_BOSS_NODE_skirtG8 = 126,
        B_LAST_BOSS_NODE_skirtG9 = 127,
        B_LAST_BOSS_NODE_skirtGU1 = 128,
        B_LAST_BOSS_NODE_skirtH1 = 129,
        B_LAST_BOSS_NODE_skirtH2 = 130,
        B_LAST_BOSS_NODE_skirtH3 = 131,
        B_LAST_BOSS_NODE_skirtH4 = 132,
        B_LAST_BOSS_NODE_skirtH5 = 133,
        B_LAST_BOSS_NODE_skirtHU1 = 134,
    };

    // TODO: mFightState probably means different things in
    // different states, so maybe we need to either remove
    // this again or split this up further.
    enum SubState_e {
        SUB_STATE_0 = 0,
        SUB_STATE_1,
        SUB_STATE_2,
        SUB_STATE_3,
        SUB_STATE_4,
        SUB_STATE_5,
        SUB_STATE_6,

        SUB_STATE_10 = 10,
        SUB_STATE_11,

        SUB_STATE_20 = 20,
        SUB_STATE_21,

        SUB_STATE_50 = 50,
    };

    enum Timer_e {
        TIMER_0,
        TIMER_1,
        TIMER_2,
        TIMER_3,
        TIMER_4,
        TIMER_5,

        TIMER_MAX,
    };

    // TODO: Maybe reused in other sword fight bosses?
    // Names taken from the string array
    enum GuardDirection_e {
        GUARD_RIGHT,
        GUARD_UPRIGHT,
        GUARD_DOWNRIGHT,
        GUARD_LEFT,
        GUARD_UPLEFT,
        GUARD_DOWNLEFT,
        GUARD_UP,
        GUARD_DOWN,
        GUARD_CENTER,
        GUARD_BT, // not sure
    };

    enum LightningState_e {
        LIGHTNING_STRIKE_STATE_NONE = 0,

        LIGHTNING_STRIKE_START_DEMO = 1,
        LIGHTNING_STRIKE_DEMO,
        LIGHTNING_STRIKE_WAIT,

        LIGHTNING_STRIKE_TRIGGER_END = 100,
        LIGHTNING_STRIKE_ENDING,

        LIGHTNING_STRIKE_TRIGGER_START = 200,
        LIGHTNING_STRIKE_START,
        LIGHTNING_STRIKE_START_LAST = 299,

        LIGHTNING_STRIKE_FINISH = 1000,
    };

public:
    dAcBlastboss_c() : mStateMgr(*this), mScnCallback(this) {}
    virtual ~dAcBlastboss_c() {}

    virtual bool createHeap() override;
    int create() override;
    int doDelete() override;
    int actorExecute() override;
    int draw() override;

    STATE_FUNC_DECLARE(dAcBlastboss_c, Fight);
    STATE_FUNC_DECLARE(dAcBlastboss_c, Guard);
    STATE_FUNC_DECLARE(dAcBlastboss_c, GuardBreak);
    STATE_FUNC_DECLARE(dAcBlastboss_c, Attack);
    STATE_FUNC_DECLARE(dAcBlastboss_c, CounterAttack);
    STATE_FUNC_DECLARE(dAcBlastboss_c, PunchAttack);
    STATE_FUNC_DECLARE(dAcBlastboss_c, DashAttack);
    STATE_FUNC_DECLARE(dAcBlastboss_c, SmallAttack);
    STATE_FUNC_DECLARE(dAcBlastboss_c, ThunderAttack);
    STATE_FUNC_DECLARE(dAcBlastboss_c, Damage);
    STATE_FUNC_DECLARE(dAcBlastboss_c, SitDamage);
    STATE_FUNC_DECLARE(dAcBlastboss_c, Down);
    STATE_FUNC_DECLARE(dAcBlastboss_c, Stun);
    STATE_FUNC_DECLARE(dAcBlastboss_c, ThunderWait);

private:
    void setAnm(const char *anim, f32 blend);
    void forceSetAnm(const char *anim, f32 blend);
    void setAnmRate(f32 rate);

    bool checkDamage();
    bool checkForCloseRangeAttack();
    bool checkForRangeAttack();
    bool checkForCounter();
    void updateMainNodeTransforms();
    void updateSkirtHairTransforms();
    void updateSkirtTransform(s32 level);
    void updateHairTransform(s32 level);
    bool checkForLinkSwordBySwordHit();
    u8 classifyAttackDirection(s32 attackDir);
    void executeLightningStrike();
    void setLightningTimerMaybe(s32);

    /* 0x0378 */ d3d::AnmMdlWrapper mMdl;
    /* 0x03E8 */ m3d::anmTexSrt_c mAnmTexSrt;
    /* 0x0414 */ m3d::anmMatClr_c mAnmMatClr1;
    /* 0x0440 */ m3d::smdl_c mThunderMdl;
    /* 0x045C */ m3d::anmMatClr_c mThunderAnmMatClr;
    /* 0x0488 */ callback_c mMdlCallback;
    /* 0x04C0 */ dCcD_Linked_Cyl mCc1;
    /* 0x0620 */ dCcD_Linked_Cyl mCc2;
    /* 0x0780 */ dCcD_Linked_Cyl mCc3;
    /* 0x08E0 */ dCcD_Linked_Sph mCc4;
    /* 0x0A40 */ dCcD_Linked_Sph mLightningCc;
    /* 0x0BA0 */ dScnCallback_c mScnCallback;
    /* 0x0BAC */ STATE_MGR_DECLARE(dAcBlastboss_c);
    /* 0x0BE8 */ dColliderLinkedList mCcList;
    /* 0x0BF4 */ dEnemySwordMdl_c mSwordMdl;
    /* 0x1130 */ u8 mThunderWaitSceneFlag;
    /* 0x1131 */ u8 field_0x1131;
    /* 0x1132 */ bool field_0x1132;
    /* 0x1133 */ u8 field_0x1133;
    /* 0x1134 */ u8 field_0x1134;
    /* 0x1135 */ s8 mNumConsecutiveOppositeDirectionAttacks;
    /* 0x1136 */ s8 mNumConsecutiveSameDirectionAttacks;
    /* 0x1137 */ u8 field_0x1137;
    /* 0x1138 */ u8 field_0x1138;
    /* 0x1139 */ u8 field_0x1139;
    /* 0x113A */ u8 mChanceAttackCounter;
    /* 0x113B */ u8 field_0x113B;
    /* 0x113C */ u8 mChanceCounter;
    /* 0x113D */ u8 field_0x113D;
    /* 0x113E */ u8 field_0x113E;
    /* 0x113F */ u8 field_0x113F;
    /* 0x1140 */ bool field_0x1140;
    /* 0x1141 */ bool mIsDown;
    /* 0x1142 */ u8 field_0x1142;
    /* 0x1143 */ u8 mInvulnerabilityTimerMaybe;
    /* 0x1144 */ s8 mGuardDirection;
    /* 0x1145 */ s8 mLinkCloseRangeShieldTime;
    /* 0x1146 */ bool mIsSwordEmpowered;
    /* 0x1147 */ bool mIsThunderBeamAttackActive;
    /* 0x1148 */ u8 mThunderBeamTimer;
    /* 0x1149 */ s8 mIsPhaseTwo;
    /* 0x114A */ u8 mLightingFallSwordTimer;
    /* 0x114B */ u8 mStunState;
    /* 0x114C */ u8 field_0x114C;
    /* 0x114D */ bool mInBossRush;
    /* 0x114E */ u8 field_0x114E;
    /* 0x114F */ bool mIsDead;
    /* 0x1150 */ bool mThunderBeamReflected;
    /* 0x1152 */ u16 field_0x1152;
    /* 0x1154 */ u16 mStunCounter;
    /* 0x1156 */ u16 mTimers[TIMER_MAX];
    /* 0x1162 */ u16 field_0x1162;
    /* 0x1164 */ s16 mCounter;
    /* 0x1166 */ s16 mSubState;

    /* 0x1168 */ u8 _0x1168[0x116A - 0x1168];

    /* 0x116A */ s16 mYAngleToLink;

    /* 0x116C */ u8 _0x116C[0x1170 - 0x116C];

    /* 0x1170 */ s16 field_0x1170;
    /* 0x1172 */ s16 field_0x1172;
    /* 0x1174 */ s16 field_0x1174;

    /* 0x1176 */ u8 _0x1176[0x1178 - 0x1176];

    /* 0x1178 */ s16 field_0x1178;
    /* 0x117A */ s16 field_0x117A;
    /* 0x117C */ s16 field_0x117C;
    /* 0x117E */ s16 field_0x117E;
    /* 0x1180 */ s16 field_0x1180;
    /* 0x1182 */ s16 field_0x1182;
    /* 0x1184 */ s16 mLightningTimerMaybe;
    /* 0x1186 */ s16 mYRotationRelativeToLink;
    /* 0x1188 */ s16 field_0x1188;
    /* 0x118A */ mAng field_0x118A;
    /* 0x118C */ mAng field_0x118C;

    /* 0x118E */ u8 _0x118E[0x1190 - 0x118E];

    /* 0x1190 */ f32 mXZDistanceToLink;

    /* 0x1194 */ u8 _0x1194[0x119C - 0x1194];

    /* 0x119C */ f32 mAttackKnockbackX;
    /* 0x11A0 */ f32 mAttackKnockbackZ;
    /* 0x11A4 */ f32 field_0x11A4;
    /* 0x11A8 */ f32 mAnmRate;
    /* 0x11AC */ f32 field_0x11AC;
    /* 0x11B0 */ f32 field_0x11B0;
    /* 0x11B0 */ f32 field_0x11B4;
    /* 0x11B8 */ f32 field_0x11B8;
    /* 0x11BC */ f32 field_0x11BC;
    /* 0x11C0 */ f32 field_0x11C0;
    /* 0x11C4 */ f32 field_0x11C4;
    /* 0x11C8 */ f32 field_0x11C8;
    /* 0x11CC */ f32 field_0x11CC;
    /* 0x11D0 */ f32 field_0x11D0;
    /* 0x11D4 */ s32 mLastAttackDir;
    /* 0x11D8 */ s32 mSecondLastAttackDirection;
    /* 0x11DC */ mAng3_c mThunderBeamRotation;
    /* 0x11E4 */ mVec3_c mThumbL2Translation;
    /* 0x11F0 */ mVec3_c mBackbone1Translation;
    /* 0x11FC */ mVec3_c mChestTranslation;
    /* 0x1208 */ mVec3_c mSwordPosition;
    /* 0x1214 */ mVec3_c mBugNetPos;
    /* 0x1220 */ mVec3_c mThunderBeamPosition;
    /* 0x122C */ mVec3_c mThunderBeamVelocity;
    /* 0x1238 */ mVec3_c mToeTranslation[2];
    /* 0x1250 */ mVec3_c field_0x1250[2];

    /* 0x1268 */ UnkLastBossCcSph2 field_0x1268[8];
    /* 0x2948 */ UnkLastBossCcSph1 field_0x2948[1];

    /* 0x2B64 */ dEmitter_c mWaterEmitter;
    /* 0x2B98 */ dEmitter_c mEmitter2;
    /* 0x2BCC */ dEmitter_c mEmitter3;
    /* 0x2C00 */ dEmitter_c mEmitter4;
    /* 0x2C34 */ dEmitter_c mEmitter5;
    /* 0x2C68 */ dEmitter_c mEmitter6;
    /* 0x2C9C */ dEmitter_c mEmitter7;
    /* 0x2CD0 */ LIGHT_INFLUENCE mLightInfo;
    /* 0x2CEC */ s16 mLightingStrikeState;
    /* 0x2CEE */ s16 field_0x2CEE;
    /* 0x2CF0 */ s16 field_0x2CF0;
    /* 0x2CF4 */ f32 field_0x2CF4;
    /* 0x2CF8 */ u8 _0x2CF8[0x2CFC - 0x2CF8];
    /* 0x2CFC */ f32 field_0x2CFC;
    /* 0x2D00 */ f32 field_0x2D00;
    /* 0x2D04 */ mVec3_c field_0x2D04;
    /* 0x2D10 */ mVec3_c field_0x2D10;
    /* 0x2D1C */ const char *mpCurrentAnm;
    /* 0x2D20 */ dTgSwordBattleGame_c *mpSwordBattleGame;
};

#endif