#ifndef D_A_BGN3_H
#define D_A_BGN3_H

#include "f_op/f_op_actor.h"
#include "d/actor/d_a_bgn.h"
#include "d/d_cc_d.h"
#include "m_Do/m_Do_ext.h"

struct bgn3_ke_s {
    /* 0x00 */ cXyz m00[5];
    /* 0x3C */ cXyz m3C[5];
    /* 0x78 */ cXyz m78;
};

struct part_s3 {
    /* 0x0000 */ J3DModel* mpPart3Model;
    /* 0x0004 */ mDoExt_J3DModelPacketS m0004;
    /* 0x0018 */ dKy_tevstr_c mPart3TevStr;
    /* 0x00C8 */ s16 m00C8;
    /* 0x00CA */ u8 m00CA[0x00CC - 0x00CA];
    /* 0x00CC */ f32 m00CC;
    /* 0x00D0 */ s16 mPart3ArrowHitFlashTimer;
    /* 0x00D2 */ u8 m00D2[0x00D4 - 0x00D2];
    /* 0x00D4 */ cXyz m00D4;
    /* 0x00E0 */ s16 m00E0;
    /* 0x00E2 */ s16 m00E2;
    /* 0x00E4 */ u8 m00E4[0x00E8 - 0x00E4];
    /* 0x00E8 */ cXyz m00E8;
    /* 0x00F4 */ f32 m00F4;
    /* 0x00F8 */ dCcD_Sph mPart3Sph;
    /* 0x0224 */ u8 m0224[0x0230 - 0x0224];
#if VERSION > VERSION_DEMO
    /* 0x0230 */ JPABaseEmitter* mpPart3ArrowHitEmitter1;
    /* 0x0234 */ JPABaseEmitter* mpPart3ArrowHitEmitter2;
    /* 0x0238 */ s16 mPart3ArrowHitEffectTimer;
    /* 0x023A */ u8 m023A[0x023C - 0x023A];
#endif
    /* 0x023C */ bgn3_ke_s mPart3Hairs[40];
    /* 0x16DC */ mDoExt_3DlineMat0_c mPart3LineMat;
};

struct bgn3_class {
    /* 0x00000 */ fopEn_enemy_c actor;
    /* 0x002AC */ request_of_phase_process_class mPhase;
    /* 0x002B4 */ mDoExt_McaMorf* mpMorf;
    /* 0x002B8 */ mDoExt_J3DModelPacketS m002B8;
    /* 0x002CC */ J3DModel* m002CC;
    /* 0x002D0 */ mDoExt_J3DModelPacketS m002D0;
    /* 0x002E4 */ bgn3_ke_s mHairs[40];
    /* 0x01784 */ mDoExt_3DlineMat0_c mLineMat;
    /* 0x017A0 */ mDoExt_J3DModelPacketS m017A0;
    /* 0x017B4 */ J3DModel* mpJyakutenCModel; // Weak point (1 hit left)
    /* 0x017B8 */ J3DModel* mpJyakutenBModel; // Weak point (2 hits left)
    /* 0x017BC */ J3DModel* mpJyakutenAModel; // Weak point (3 hits left)
    /* 0x017C0 */ mDoExt_brkAnm* mJyakutenCBrkAnm;
    /* 0x017C4 */ mDoExt_brkAnm* mJyakutenBBrkAnm;
    /* 0x017C8 */ u8 m017C8[0x017CC - 0x017C8];
    /* 0x017CC */ part_s3 mParts[10];
    /* 0x0FD7C */ cXyz m0FD7C;
    /* 0x0FD88 */ s16 m0FD88;
    /* 0x0FD8A */ s16 m0FD8A;
    /* 0x0FD8C */ s16 m0FD8C;
    /* 0x0FD8E */ s16 m0FD8E;
    /* 0x0FD90 */ s16 m0FD90;
    /* 0x0FD92 */ s16 m0FD92;
    /* 0x0FD94 */ s16 m0FD94;
#if VERSION > VERSION_DEMO
    /* 0x0FD96 */ s16 m0FD96;
    /* 0x0FD98 */ f32 m0FD98;
    /* 0x0FD9C */ s16 mArrowHitFlashTimer;
    /* 0x0FD9E */ s16 m0FD9E;
    /* 0x0FDA0 */ JPABaseEmitter* mpArrowHitEmitter1;
    /* 0x0FDA4 */ JPABaseEmitter* mpArrowHitEmitter2;
    /* 0x0FDA8 */ s16 mArrowHitEffectTimer;
#endif
    /* 0x0FDAA */ s16 m0FDAA[2];
    /* 0x0FDAE */ s16 m0FDAE;
    /* 0x0FDB0 */ s16 m0FDB0;
    /* 0x0FDB2 */ u8 m0FDB2[0x0FDB4 - 0x0FDB2];
    /* 0x0FDB4 */ s16 m0FDB4;
    /* 0x0FDB6 */ s16 m0FDB6;
    /* 0x0FDB8 */ f32 m0FDB8;
    /* 0x0FDBC */ f32 m0FDBC;
    /* 0x0FDC0 */ dCcD_Stts mStts;
    /* 0x0FDFC */ dCcD_Sph m0FDFC;
    /* 0x0FF28 */ dCcD_Sph m0FF28;
    /* 0x10054 */ cXyz m10054;
    /* 0x10060 */ f32 m10060;
    /* 0x10064 */ mDoExt_3DlineMat1_c mRedRopeMat;
    /* 0x100A0 */ f32 m100A0;
    /* 0x100A4 */ u8 m100A4[0x100A8 - 0x100A4];
    /* 0x100A8 */ s16 m100A8;
    /* 0x100AA */ u8 m100AA[0x100AC - 0x100AA];
    /* 0x100AC */ s32 m100AC;
    /* 0x100B0 */ u8 m100B0;
    /* 0x100B1 */ u8 m100B1[0x100B4 - 0x100B1];
}; // Size: 0x100B4

#endif /* D_A_BGN3_H */
