#ifndef D_A_BPW_H
#define D_A_BPW_H

#include "f_op/f_op_actor.h"
#include "d/d_cc_d.h"
#include "d/d_bg_s_acch.h"
#include "d/d_particle.h"

struct bpw_class {
    /* 0x000 */ fopEn_enemy_c actor;
    /* 0x2AC */ request_of_phase_process_class mPhase;
    /* 0x2B4 */ mDoExt_McaMorf* mpMorf;
    /* 0x2B8 */ u8 m2B8[0x2BC - 0x2B8];
    /* 0x2BC */ mDoExt_brkAnm* mpLightFreezeBrkAnm; // Freezing before falling to the ground
    /* 0x2C0 */ mDoExt_brkAnm* mpLanternGlowBrkAnm;
    /* 0x2C4 */ mDoExt_brkAnm* mpLightStunBrkAnm;  // Hit with light from the Mirror Shield before freezing
    /* 0x2C8 */ mDoExt_brkAnm* mpCurseStartBrkAnm; // Falling on Link and inverting the controls
    /* 0x2CC */ mDoExt_brkAnm* mpCurseEndBrkAnm;
    /* 0x2D0 */ mDoExt_brkAnm* mpDefaultBrkAnm;
    /* 0x2D4 */ Mtx m2D4;
    /* 0x304 */ cXyz m304[3];
    /* 0x328 */ cXyz m328[3];
    /* 0x34C */ cXyz mBodyPos;
    /* 0x358 */ cXyz m358;
    /* 0x364 */ u8 m364[0x370 - 0x364];
    /* 0x370 */ cXyz m370;
    /* 0x37C */ cXyz mChildActorPos;
    /* 0x388 */ f32 m388;
    /* 0x38C */ f32 m38C;
    /* 0x390 */ f32 m390;
    /* 0x394 */ cXyz m394;
    /* 0x3A0 */ cXyz m3A0;
    /* 0x3AC */ cXyz m3AC;
    /* 0x3B8 */ cXyz m3B8;
    /* 0x3C4 */ cXyz m3C4;
    /* 0x3D0 */ csXyz mKanteraDousaRot;
    /* 0x3D6 */ csXyz m3D6;
    /* 0x3DC */ u8 mType;
    /* 0x3DD */ u8 mUnknownParam2;
    /* 0x3DE */ u8 mLightState;
    /* 0x3DF */ u8 mHitType;
    /* 0x3E0 */ u8 m3E0;
    /* 0x3E1 */ u8 m3E1;
    /* 0x3E2 */ u8 m3E2;
    /* 0x3E3 */ u8 m3E3[0x3E4 - 0x3E3];
    /* 0x3E4 */ u8 m3E4;
    /* 0x3E5 */ u8 m3E5;
    /* 0x3E6 */ u8 m3E6;
    /* 0x3E7 */ u8 m3E7;
    /* 0x3E8 */ u8 m3E8;
    /* 0x3E9 */ u8 m3E9;
    /* 0x3EA */ u8 m3EA;
    /* 0x3EB */ u8 mKankyouHendouState;
    /* 0x3EC */ f32 m3EC;
    /* 0x3F0 */ f32 m3F0;
    /* 0x3F4 */ s16 m3F4;
    /* 0x3F6 */ s16 m3F6;
    /* 0x3F8 */ int m3F8;
    /* 0x3FC */ fpc_ProcID m3FC;
    /* 0x400 */ fpc_ProcID m400;
    /* 0x404 */ fpc_ProcID m404;
#if VERSION > VERSION_DEMO
    /* 0x408 */ s16 m408;
#endif
    /* 0x40C */ cXyz m40C;
    /* 0x418 */ cXyz m418;
    /* 0x424 */ cXyz m424;
    /* 0x430 */ u8 m430[0x43C - 0x430];
    /* 0x43C */ f32 m43C;
    /* 0x440 */ f32 m440;
    /* 0x444 */ s16 mBodyAction;
    /* 0x446 */ s16 mActionState;
    /* 0x448 */ u8 m448[0x44C - 0x448];
    /* 0x44C */ s16 mAttWaitTimer;
    /* 0x44E */ s16 mSomeCountdownTimers[10];
    /* 0x462 */ s16 m462;
    /* 0x464 */ s16 m464;
    /* 0x466 */ u8 m466[0x474 - 0x466];
    /* 0x474 */ s16 m474;
    /* 0x476 */ s16 m476;
    /* 0x478 */ s16 m478;
    /* 0x47A */ s16 m47A;
    /* 0x47C */ s16 m47C;
    /* 0x47E */ s16 m47E;
    /* 0x480 */ s16 m480;
    /* 0x482 */ s16 m482;
    /* 0x484 */ s16 m484;
    /* 0x486 */ u8 m486[0x488 - 0x486];
    /* 0x488 */ f32 m488;
    /* 0x48C */ f32 m48C;
    /* 0x490 */ f32 m490;
    /* 0x494 */ f32 m494;
    /* 0x498 */ f32 m498;
    /* 0x49C */ f32 m49C;
    /* 0x4A0 */ f32 m4A0;
    /* 0x4A4 */ f32 m4A4;
    /* 0x4A8 */ f32 m4A8;
    /* 0x4AC */ int mChildPoeIds[15];
    /* 0x4E8 */ u32 mShadowId;
    /* 0x4EC */ LIGHT_INFLUENCE mLightInfluence;
#if VERSION == VERSION_DEMO
    /* 0x508 */ JPABaseEmitter* m508_demo;
    /* 0x50C */ JPABaseEmitter* m50C_demo;
    /* 0x510 */ JPABaseEmitter* m510_demo;
#endif
    /* 0x50C */ dPa_smokeEcallBack m50C;
#if VERSION == VERSION_DEMO
    /* 0x534 */ JPABaseEmitter* m534_demo;
    /* 0x538 */ JPABaseEmitter* m538_demo;
    /* 0x53C */ JPABaseEmitter* m53C_demo;
    /* 0x540 */ JPABaseEmitter* m540_demo;
#else
    /* 0x52C */ dPa_followEcallBack m52C;
    /* 0x540 */ dPa_followEcallBack m540;
#endif
    /* 0x554 */ dPa_followEcallBack m554;
    /* 0x568 */ dPa_followEcallBack mFire1Dousa_Pa_followEcallBack;
    /* 0x57C */ dPa_followEcallBack mFire1Dousa_Pa_followEcallBack2;
    /* 0x590 */ dPa_followEcallBack m590;
#if VERSION == VERSION_DEMO
    /* 0x594 */ JPABaseEmitter* m594_demo;
    /* 0x598 */ JPABaseEmitter* m598_demo;
#endif
    /* 0x5A4 */ dPa_followEcallBack mFireDousa2_Pa_followEcallBack;
    /* 0x5B8 */ dPa_followEcallBack mFireDousa2_Pa_followEcallBack2;
    /* 0x5CC */ dPa_followEcallBack m5CC;
    /* 0x5E0 */ dPa_smokeEcallBack m5E0[4];
    /* 0x660 */ cXyz mFire1DousaPos;
    /* 0x66C */ cXyz m66C;
    /* 0x678 */ csXyz mFire1DousaRot;
    /* 0x67E */ s16 m67E;
    /* 0x680 */ s16 m680;
    /* 0x67E */ u8 m682[0x684 - 0x682];
    /* 0x684 */ s16 m684;
    /* 0x686 */ u8 m686[0x688 - 0x686];
    /* 0x688 */ dBgS_AcchCir mAcchCir;
    /* 0x6C8 */ dBgS_ObjAcch mAcch;
    /* 0x88C */ dCcD_Stts mStts;
    /* 0x8C8 */ dCcD_Sph mBodyCoSph;
    /* 0x9F4 */ dCcD_Sph mBodyAtSph;
    /* 0xB20 */ dCcD_Sph mKanteraCoSph;
    /* 0xC4C */ dCcD_Sph mDamageBallCoSph;
    /* 0xD78 */ mDoExt_invisibleModel mInvisibleModel;
};

#endif /* D_A_BPW_H */
