summaryrefslogtreecommitdiff
path: root/include/d/lyt/d_lyt_mini_game.h
blob: 919b936e69c44db7d6ce41da52d79a854b4ade39 (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
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
#ifndef D_LYT_MINI_GAME_H
#define D_LYT_MINI_GAME_H

#include "common.h"
#include "d/d_base.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"

/** 2D UI - Mini Game - Pumpkin score popup */
class dLytMiniGamePumpkinParts_c {
public:
    dLytMiniGamePumpkinParts_c() : field_0x154(false), mHasPlayedDoubleScoreSound(false) {}
    virtual ~dLytMiniGamePumpkinParts_c() {}

    bool build(d2d::ResAccIf_c *resAcc);
    bool remove();
    bool execute();
    bool draw();
    void init();

    void setPumpkinPos(const mVec3_c &pos);
    void getPoint(u8 combo, bool doubleScore);
    bool isActive() const;

private:
    void resetPattern();
    void setPattern(s32 pat);
    void startGetPoint();
    void startDoubleScore();
    void stopDoubleScore();
    void resetGetPoint();
    void resetDoubleScore();

    /* 0x004 */ d2d::LytBase_c mLyt;
    /* 0x094 */ d2d::AnmGroup_c mAnm[3];
    /* 0x154 */ bool field_0x154;
    /* 0x158 */ mVec3_c mPumpkinWorldPos;
    /* 0x164 */ mVec3_c mPumpkinScreenPos;
    /* 0x170 */ mVec2_c field_0x170;
    /* 0x178 */ bool mHasPlayedDoubleScoreSound;
};

/** 2D UI - Mini Game - Pumpkin score popups */
class dLytMiniGamePumpkin_c {
public:
    dLytMiniGamePumpkin_c() : field_0x478(10), mCombo(0) {}
    virtual ~dLytMiniGamePumpkin_c() {}

    bool build(d2d::ResAccIf_c *resAcc);
    bool remove();
    bool execute();
    bool draw();
    void init();

    void getPoint(const mVec3_c &pumpkinPos, s32 unk, bool doubleScore);
    void calcCombo(s32 unk);

private:
    static dLytMiniGamePumpkin_c *sInstance;

    /* 0x004 */ dLytMiniGamePumpkinParts_c mParts[3];
    /* 0x478 */ s32 field_0x478;
    /* 0x47C */ s32 mCombo;
};

/** 2D UI - Mini Game - Bug Heaven */
class dLytMiniGameBugs_c {
public:
    dLytMiniGameBugs_c()
        : mBugIconsInEnded(false),
          mInTriggered(false),
          mBugIconsFlashStarted(false),
          mBugsNumLevel(1),
          mBugsNum(10),
          field_0xB4B(false),
          field_0xB4C(true) {}
    virtual ~dLytMiniGameBugs_c() {}

    bool build(d2d::ResAccIf_c *resAcc);
    bool remove();
    bool execute();
    bool draw();
    void init();

    enum BugIndex_e {
        DEKU_HORNET,
        BLESSED_BUTTERFLY,
        GERUDO_DRAGONFLY,
        STARRY_FIREFLY,
        WOODLAND_RHINO_BEETLE,
        VOLCANIC_LADYBUG,
        SAND_CICADA,
        SKY_STAG_BEETLE,
        FARON_GRASSHOPPER,
        SKYLOFT_MANTIS,
        LANAYRU_ANT,
        ELDIN_ROLLER,
    };

    void startAllIconsIn();
    void setBugsNumLevel(u8 level) {
        mBugsNumLevel = level;
    }
    void setBug(s32 slot, s32 bugIndex);
    void collectBug(s32 slot);
    void startBugsFlash();
    bool isSlotIconOnEndReached(s32 slot) const;
    bool isSlotBugCollected(s32 slot) const;

    void startOut();
    void startIn();
    void startOutTemp();

private:
    bool isSlotIconOnEnabled(s32 slot) const;
    void resetBugIconsIn();
    void resetIn();
    void resetOut();
    void resetBugIconsOn();
    void resetBugIconsTex();
    void resetBugIconsFlash();
    void stopBugIconsIn();
    void stopIn();
    void stopOut();
    void stopBugIconOn(s32);
    void stopBugIconsFlash();
    bool isIconInEndReached() const;
    bool isInEndReached() const;
    bool isOutEndReached() const;
    bool isSlotOnEndReached(s32 slot) const;
    bool isBug0Flashing() const;
    bool areAllBugIconsOn() const;

    static dLytMiniGameBugs_c *sInstance;

    /* 0x004 */ d2d::LytBase_c mLyt;
    /* 0x094 */ d2d::AnmGroup_c mAnm[42];
    /* 0xB14 */ s32 mBugItemIds[10];
    /* 0xB3C */ bool mBugIconsInEnded;
    /* 0xB3D */ bool mInTriggered;
    /* 0xB3E */ bool mBugCollected[10];
    /* 0xB48 */ bool mBugIconsFlashStarted;
    /* 0xB49 */ u8 mBugsNumLevel; ///< 0 = 5 bugs, 1 = 10 bugs
    /* 0xB4A */ u8 mBugsNum;
    /* 0xB4B */ bool field_0xB4B;
    /* 0xB4C */ bool field_0xB4C;
};

/** 2D UI - Mini Game - Time */
class dLytMiniGameTime_c {
public:
    enum Variant_e {
        TIME_VARIANT_INSECT_CAPTURE,
        TIME_VARIANT_SPIRAL_CHARGE_TUTORIAL,
        TIME_VARIANT_PUMPKIN_ARCHERY,
        TIME_VARIANT_ROLLERCOASTER,
        TIME_VARIANT_BOSS_RUSH,
        TIME_VARIANT_TRIAL_TIME_ATTACK,
    };

public:
    dLytMiniGameTime_c()
        : field_0x7D4(0),
          mCurrentTimerValueMilliSeconds(0),
          mCurrentTimerValueSeconds(0),
          mLastTimerValueSeconds(0),
          mTimeFormat(0),
          mHighestDigitIndex(0),
          field_0x7EC(false),
          field_0x7ED(false),
          mResultMode(false),
          mVariant(0),
          field_0x7F4(0),
          mIsVisible(false) {}
    virtual ~dLytMiniGameTime_c() {}

    bool build(d2d::ResAccIf_c *resAcc);
    bool remove();
    bool execute();
    bool draw();
    void init();

    void setVariant(s32 var) {
        mVariant = var;
    }

    void setResultMode(bool v) {
        mResultMode = v;
    }

    void fn_8028DD80();
    void startOut();
    void startIn();
    void startOutTemp();
    void startFinish();
    void startAlphaIn();
    void startAlphaOut();

    void setTimerValueInMilliSeconds(s32 time);
    void setTimerSecondsValueInMilliSeconds(s32 time);
    void setBestTime(s32 time);
    void setShowBestTime(bool show);

private:
    enum TimeFormat_e {
        TIMER_LONG,
        TIMER_SECONDS,
    };

    void startLoop();
    void updateLongTimer();
    void updateSecondsTimer();
    void saveSecondsTimer();
    void resetIn();
    void resetOut();
    void resetAlphaIn();
    void resetAlphaOut();
    void resetDigits();
    void resetPosition();
    void resetShowBestTime();
    void resetFinish();
    void resetLoop();
    void initSignChange();
    void stopIn();
    void stopOut();
    void stopAlphaIn();
    void stopAlphaOut();
    void stopFinish();
    void stopLoop();
    bool isInEndReached() const;
    bool isOutEndReached() const;
    bool isAlphaInEndReached() const;
    bool isAlphaOutEndReached() const;
    bool isFinishEndReached() const;
    void setHighestDigitIndex(u8);
    void setSignChange(u32);
    void setTimePosition(bool);
    void setBestHasSixDigits(bool);
    void setDigit(s32 digitIndex, s32 number);
    void setDigitBest(s32 digitIndex, s32 number);

    static dLytMiniGameTime_c *sInstance;

    /* 0x004 */ d2d::LytBase_c mLyt;
    /* 0x094 */ d2d::AnmGroup_c mAnm[29];
    /* 0x7D4 */ u8 field_0x7D4;
    /* 0x7D8 */ s32 mCurrentTimerValueMilliSeconds;
    /* 0x7DC */ s32 mCurrentTimerValueSeconds;
    /* 0x7E0 */ s32 mLastTimerValueSeconds;
    /* 0x7E4 */ u8 mTimeFormat;
    /* 0x7E8 */ s32 mHighestDigitIndex;
    /* 0x7EC */ bool field_0x7EC;
    /* 0x7ED */ bool field_0x7ED;
    /* 0x7EE */ bool mResultMode;
    /* 0x7F0 */ s32 mVariant;
    /* 0x7F4 */ u8 field_0x7F4;
    /* 0x7F5 */ bool mIsVisible;
};

/** 2D UI - Mini Game - Start / Finish Popup */
class dLytMiniGameStart_c {
public:
    dLytMiniGameStart_c() : mIsVisible(false) {}
    virtual ~dLytMiniGameStart_c() {}

    bool build(d2d::ResAccIf_c *resAcc);
    bool remove();
    bool execute();
    bool draw();
    void init();

    void startCountdown();
    void startCountdown120();
    void startFinish();
    void startTimeup();
    bool isCountdownEndReached() const;
    bool isFinishEndReached() const;
    bool isTimeupEndReached() const;

private:
    void resetPlayedSounds();
    void resetCountdown();
    void resetFinish();
    void resetStart();
    void stopCountdown();
    void stopFinish();
    void stopTimeup();
    bool checkCountdown3();
    bool checkCountdown2();
    bool checkCountdown1();
    bool checkStart();
    bool checkFinish();
    bool checkTimeup();

    static dLytMiniGameStart_c *sInstance;

    /* 0x004 */ d2d::LytBase_c mLyt;
    /* 0x094 */ d2d::AnmGroup_c mAnm[3];
    /* 0x154 */ bool mPlayedSounds[6];
    /* 0x15A */ bool mIsVisible;
};

/** 2D UI - Mini Game - Score counter */
class dLytMiniGameScore_c {
public:
    enum Variant_e {
        SCORE_VARIANT_BAMBOO_CUTTING,
        SCORE_VARIANT_FUN_FUN_ISLAND,
        SCORE_VARIANT_THRILL_DIGGER,
        SCORE_VARIANT_PUMPKIN_ARCHERY,
        SCORE_VARIANT_SPIRAL_CHARGE_TUTORIAL,
    };

public:
    dLytMiniGameScore_c()
        : mScore(0),
          mLastScore(0),
          mHighestDigitIndex(0),
          field_0x7E4(0),
          field_0x7E8(0.0f),
          field_0x7EC(-2),
          field_0x7F0(0),
          field_0x7F4(0),
          field_0x7F8(-1),
          field_0x7FC(1),
          field_0x800(0),
          field_0x804(false),
          field_0x808(0),
          field_0x80C(0),
          field_0x810(0),
          field_0x814(false),
          field_0x815(false),
          mResultMode(false),
          mVariant(SCORE_VARIANT_BAMBOO_CUTTING),
          field_0x81C(0),
          field_0x820(false),
          field_0x824(0),
          field_0x828(false),
          field_0x829(false),
          field_0x82C(0),
          field_0x830(1),
          mIsVisible(false) {}
    virtual ~dLytMiniGameScore_c() {}

    bool build(d2d::ResAccIf_c *resAcc);
    bool remove();
    bool execute();
    bool draw();
    void init();

    void setVariant(s32 var) {
        mVariant = var;
    }

    void setResultMode(bool v) {
        mResultMode = v;
    }

    void setField_0x828(bool v) {
        field_0x828 = v;
    }

    s32 getScore() const {
        return mScore;
    }

    void startIn();
    void startOut();
    void startOutTemp();
    void setScore(s32 score);
    void fn_80291410();
    void startAlphaIn();
    void startAlphaOut();
    void fn_80291D40(s32 score);
    void fn_80291ED0(s32);
    void startFinish();

private:
    void startGetScore();
    void startLoop();
    void fn_80291BC0();
    bool hasIncreasedScore() const;
    bool hasDecreasedScore() const;
    void fn_80291EF0();
    void increaseScore(s32);
    void fn_80292040();
    s32 calcNumDigits();
    void realizePosition();
    void setDigit(s32 digitIndex, s32 number);
    void saveScore();
    void resetIn();
    void resetDigits();
    void resetOut();
    void resetAlphaIn();
    void resetAlphaOut();
    void resetSetPosition();
    void resetRupeeChange();
    void resetGetScore();
    void resetFinish();
    void resetLoop();
    void stopIn();
    void stopOut();
    void stopAlphaIn();
    void stopAlphaOut();
    void stopGetScore();
    void stopFinish();
    void stopLoop();
    bool isInEndReached() const;
    bool isOutEndReached() const;
    bool isAlphaInEndReached() const;
    bool isAlphaOutEndReached() const;
    bool isGetScoreEndReached() const;
    bool isFinishEndReached() const;
    void fn_80292C30();
    void loadTextVariant(s32 variant);
    void fn_80293410();
    void fn_80293450(s32);

    static dLytMiniGameScore_c *sInstance;

    /* 0x004 */ d2d::LytBase_c mLyt;
    /* 0x094 */ d2d::AnmGroup_c mAnm[26];

    /* 0x714 */ nw4r::lyt::Pane *mpPanes[20];

    /* 0x764 */ f32 mFloats[26];

    /* 0x7CC */ dTextBox_c *mpTextBoxes[3];

    /* 0x7D8 */ s32 mScore;
    /* 0x7DC */ s32 mLastScore;
    /* 0x7E0 */ s32 mHighestDigitIndex;
    /* 0x7E4 */ UNKWORD field_0x7E4;

    /* 0x7E8 */ f32 field_0x7E8;
    /* 0x7EC */ s32 field_0x7EC;
    /* 0x7F0 */ s32 field_0x7F0;
    /* 0x7F4 */ s32 field_0x7F4;
    /* 0x7F8 */ s32 field_0x7F8;
    /* 0x7FC */ s32 field_0x7FC;
    /* 0x800 */ s32 field_0x800;
    /* 0x804 */ bool field_0x804;
    /* 0x808 */ s32 field_0x808;
    /* 0x80C */ s32 field_0x80C;
    /* 0x810 */ s32 field_0x810;
    /* 0x814 */ bool field_0x814;
    /* 0x815 */ bool field_0x815;
    /* 0x816 */ bool mResultMode;
    /* 0x818 */ s32 mVariant;
    /* 0x81C */ s32 field_0x81C;
    /* 0x820 */ bool field_0x820;
    /* 0x824 */ s32 field_0x824;
    /* 0x828 */ bool field_0x828;
    /* 0x829 */ bool field_0x829;
    /* 0x82C */ UNKWORD field_0x82C;
    /* 0x830 */ s32 field_0x830;
    /* 0x834 */ f32 field_0x834[3][2];
    /* 0x84C */ bool mIsVisible;
};

/** 2D UI - Mini Game - Fun Fun Island score */
class dLytMiniGameScoreSd_c {
public:
    dLytMiniGameScoreSd_c() : field_0x1D4(0), mIsVisible(false) {}
    virtual ~dLytMiniGameScoreSd_c() {}

    bool build(d2d::ResAccIf_c *resAcc);
    bool remove();
    bool execute();
    bool draw();
    void init();

    void setScoreUp(s32 score);
    void setScoreDown(s32 score);

private:
    static dLytMiniGameScoreSd_c *sInstance;

    void setScoreInternal(s32 score);
    void setHighestDigitIndex(s32);
    void setDigit(s32 digitIndex, s32 number);
    void resetScoreUp();
    void resetScoreDown();
    void resetDigits();
    void resetPosition();
    void startScoreUp();
    void startScoreDown();
    void stopScoreUp();
    void stopScoreDown();
    bool isScoreUpEndReached() const;
    bool isScoreDownEndReached() const;

    /* 0x004 */ d2d::LytBase_c mLyt;
    /* 0x094 */ d2d::AnmGroup_c mAnm[5];
    /* 0x1D4 */ s32 field_0x1D4;
    /* 0x1D8 */ bool mIsVisible;
    /* 0x1D9 */ bool field_0x1D9;
};

class dLytMiniGame_c : public dBase_c {
public:
    enum Variant_e {
        VARIANT_0,
        VARIANT_BAMBOO_CUTTING,
        VARIANT_FUN_FUN_ISLAND,
        VARIANT_THRILL_DIGGER,
        VARIANT_INSECT_CAPTURE,
        VARIANT_SPIRAL_CHARGE_TUTORIAL,
        VARIANT_PUMPKIN_ARCHERY,
        VARIANT_ROLLERCOASTER,
        VARIANT_BOSS_RUSH,
        VARIANT_TRIAL_TIME_ATTACK,
        // These are created by dFlow_c and correspond to above entries.
        // They also cause things to behave a bit differently. What is the purpose
        // of these special variants?
        VARIANT_BAMBOO_CUTTING_RESULT,
        VARIANT_THRILL_DIGGER_RESULT,
        VARIANT_INSECT_CAPTURE_RESULT,
        VARIANT_PUMPKIN_ARCHERY_RESULT,
        VARIANT_ROLLERCOASTER_RESULT,
        VARIANT_BOSS_RUSH_RESULT,
        VARIANT_TRIAL_TIME_ATTACK_RESULT,
    };

private:
    enum Slot_e {
        SLOT_MINI_GAME,
        SLOT_MINI_GAME_SCORE,
        SLOT_MINI_GAME_TIME,
        SLOT_MINI_GAME_BUGS,
        SLOT_MINI_GAME_PUMPKIN,
        SLOT_MINI_GAME_SCORE_SD,
    };

public:
    dLytMiniGame_c()
        : mLoadRequestStart(false),
          mLoadRequestScore(false),
          mLoadRequestTime(false),
          mLoadRequestBugs(false),
          mLoadRequestPumpkin(false),
          mLoadRequestScoreSd(false),
          mVariant(VARIANT_BAMBOO_CUTTING),
          field_0x3864(false),
          field_0x3865(false),
          field_0x3866(false),
          field_0x3867(false),
          field_0x3868(false) {}
    virtual ~dLytMiniGame_c() {}

    virtual int create() override;
    virtual int doDelete() override;
    virtual int execute() override;
    virtual int draw() override;

    static dLytMiniGame_c *GetInstance() {
        return sInstance;
    }

    void startCountdown();
    void startFinish();
    void startTimeup();

    bool isStartCountdownDone();
    bool isFinishAnimDone();
    bool isTimeupAnimDone();

    void setScoreUp(s32 score);
    void setScoreDown(s32);

    void setBestTime(s32 time);
    void setShowBestTime(bool);

    void timeRelatedInit();
    void scoreRelatedInit();

    void setDisplayedTime(s32 time);
    void setDisplayedPoints(s32 points);

    void endTimeResult();
    void endScoreResult();

    void fn_80295900(s32);

    /** GUESS: Assumption based on function caller */
    void setComplete() {
        field_0x3866 = true;
    }

private:
    static dLytMiniGame_c *sInstance;

    bool isLoading(const char *name) const;
    bool loadData(const char *name, s32 slot);
    void unloadData(const char *name);
    void attachLoadedData(const char *name, d2d::ResAccIf_c &resAcc);

    void init();

    void startBugsAllIconsIn();
    void set5Bugs();
    void set10Bugs();
    void reInitBugs();
    void setBug(s32 slot, s32 bugIndex);
    void collectBug(s32 slot);
    void startBugsFlash();
    bool isBugIconOnEndReached(s32 slot) const;
    bool isBugCollected(s32 slot) const;
    void fn_80295D80();
    void fn_80295D90(s32 points);
    void getPumpkin(const mVec3_c &pumpkinPos, s32 unk, bool doubleScore);
    bool isDisplayingResult();
    bool isInEvent() const;
    bool isPopupOpen() const;
    bool isPopupOpenExceptHelp() const;
    bool isFadingOut() const;

    void executeBambooCutting();
    void executeFunFunIsland();
    void executeThrillDigger();
    void executeInsectCapture();
    void executeSpiralChargeTutorial();
    void executePumpkinArchery();
    void executeRollercoaster();

    // These two do the same thing
    void executeBossRush();
    void executeTrialTimeAttack();

    /* 0x0068 */ bool mLoadRequestStart;
    /* 0x0069 */ bool mLoadRequestScore;
    /* 0x006A */ bool mLoadRequestTime;
    /* 0x006B */ bool mLoadRequestBugs;
    /* 0x006C */ bool mLoadRequestPumpkin;
    /* 0x006D */ bool mLoadRequestScoreSd;

    /* 0x0070 */ d2d::ResAccIf_c mResAccStart;
    /* 0x03E0 */ d2d::ResAccIf_c mResAccScore;
    /* 0x0750 */ d2d::ResAccIf_c mResAccTime;
    /* 0x0AC0 */ d2d::ResAccIf_c mResAccBugs;
    /* 0x0E30 */ d2d::ResAccIf_c mResAccPumpkin;
    /* 0x11A0 */ d2d::ResAccIf_c mResAccScoreSd;

    /* 0x1510 */ s32 mVariant;

    /* 0x1514 */ dLytMiniGameScore_c mScore;
    /* 0x1D64 */ dLytMiniGameScoreSd_c mScoreSd;
    /* 0x1F40 */ dLytMiniGameStart_c mStart;
    /* 0x209C */ dLytMiniGameTime_c mTime;
    /* 0x2894 */ dLytMiniGameBugs_c mBugs;
    /* 0x33E4 */ dLytMiniGamePumpkin_c mPumpkin;
    /* 0x3864 */ bool field_0x3864;
    /* 0x3865 */ bool field_0x3865;
    /* 0x3866 */ bool field_0x3866;
    /* 0x3867 */ bool field_0x3867;
    /* 0x3868 */ bool field_0x3868;
};

#endif