#ifndef D_A_B_OB_H #define D_A_B_OB_H #include "SSystem/SComponent/c_phase.h" #include "Z2AudioLib/Z2Creature.h" #include "f_op/f_op_actor.h" #include "d/d_bg_s_acch.h" #include "d/d_cc_d.h" #include "d/d_cc_uty.h" enum b_ob_action { // Phase 1 OB_ACTION_CORE_START, OB_ACTION_CORE_HAND_MOVE, OB_ACTION_BOMBFISH_SET, OB_ACTION_CORE_HOOK, OB_ACTION_CORE_CHANCE, OB_ACTION_CORE_END, // Phase 2 OB_ACTION_FISH_NORMAL = 100, OB_ACTION_FISH_VACUME, OB_ACTION_FISH_END, }; struct ob_part_s { /* 0x00 */ mDoExt_McaMorf* mpMorf; /* 0x04 */ mDoExt_McaMorf* mpFinMorf; /* 0x08 */ mDoExt_McaMorf* mpFinUnkMorf; /* 0x0C */ mDoExt_McaMorf* mpFinBMorf; /* 0x10 */ mDoExt_McaMorf* mpFinCMorf; /* 0x14 */ cXyz mPos; /* 0x20 */ csXyz mAngle; /* 0x26 */ s16 field_0x26; /* 0x28 */ f32 mSize; /* 0x2C */ csXyz mFinARot; /* 0x32 */ csXyz mFinBRot; /* 0x38 */ csXyz mFinCRot; /* 0x3E */ s8 field_0x3e; /* 0x3F */ s8 mHide; /* 0x40 */ dCcD_Sph mSph; }; // Size: 0x178 struct ob_ke_s { /* 0x000 */ cXyz field_0x0[20]; /* 0x0F0 */ cXyz field_0xf0[20]; /* 0x1E0 */ cXyz field_0x1e0; }; // Size: 0x1EC /** * @ingroup actors-enemies * @class b_ob_class * @brief Morpheel (body) * * @details Lakebed Temple dungeon boss. This is the core/body part of the boss. * */ class b_ob_class : public fopEn_enemy_c { public: /* 0x05AC */ request_of_phase_process_class mPhase; /* 0x05B4 */ mDoExt_McaMorfSO* mpCoreMorf; /* 0x05B8 */ s8 mHideCore; /* 0x05BC */ f32 mBossLightScale; /* 0x05C0 */ ob_part_s mBodyParts[20]; /* 0x2320 */ int field_0x2320; /* 0x2324 */ cXyz field_0x2324[512]; /* 0x3B24 */ csXyz field_0x3b24[512]; /* 0x4724 */ J3DModel* mpSuiModel; /* 0x4728 */ mDoExt_btkAnm* mpSuiBtk; /* 0x472C */ mDoExt_brkAnm* mpSuiBrk; /* 0x4730 */ f32 mSuiBrkFrame; /* 0x4734 */ int mAnmID; /* 0x4738 */ int mCoreAnm; /* 0x473C */ u8 mCoreAnmMode; /* 0x4740 */ f32 field_0x4740; /* 0x4744 */ s8 field_0x4744; /* 0x4745 */ s8 mDrawShadow; /* 0x4748 */ u32 mShadowKey; /* 0x474C */ s8 mCoreBattleMode; /* 0x474D */ s8 mFishBattleMode; /* 0x474E */ u8 mAttnOffTimer; /* 0x4750 */ s16 field_0x4750; /* 0x4752 */ s16 mAction; /* 0x4754 */ s16 mMode; /* 0x4756 */ s16 field_0x4756; /* 0x4758 */ cXyz mTargetMovePos; /* 0x4764 */ csXyz mMoveAngle; /* 0x476A */ s16 field_0x476a; /* 0x476C */ s16 mYAngleToPlayer; /* 0x476E */ s16 mXAngleToPlayer; /* 0x4770 */ f32 mDistToPlayer; /* 0x4774 */ u8 field_0x4774[0x4778 - 0x4774]; /* 0x4778 */ s16 mTimers[6]; /* 0x05AC */ s16 mHitIFrameTimer; /* 0x4786 */ u8 field_0x4786[0x4788 - 0x4786]; /* 0x4788 */ int mCoreHandNo; /* 0x478C */ int field_0x478c; /* 0x4790 */ int field_0x4790; /* 0x4794 */ s16 field_0x4794; /* 0x4798 */ f32 field_0x4798; /* 0x479C */ f32 field_0x479c; /* 0x47A0 */ f32 field_0x47a0; /* 0x47A4 */ s16 field_0x47a4[3]; /* 0x47AA */ s16 field_0x47aa; /* 0x47AC */ s16 field_0x47ac; /* 0x47AE */ s16 field_0x47ae; /* 0x47B0 */ s16 field_0x47b0; /* 0x47B4 */ int field_0x47b4; /* 0x47B8 */ s16 mHangTimer; /* 0x47BA */ s16 field_0x47ba; /* 0x47BC */ s16 field_0x47bc; /* 0x47C0 */ f32 field_0x47c0; /* 0x47C4 */ s16 field_0x47c4; /* 0x47C8 */ int mDemoMovePosIdx; /* 0x47CC */ dCcD_Stts mCoreCcStts; /* 0x4808 */ dCcD_Sph mCcSph; /* 0x4940 */ dCcD_Sph mCoreSph; /* 0x4A78 */ dCcU_AtInfo mAtInfo; /* 0x4A9C */ u8 field_0x4a9c[0x4aa0 - 0x4a9c]; /* 0x4AA0 */ dCcD_Stts mBodyCcStts; /* 0x4ADC */ dCcD_Sph mBodySph; /* 0x4C14 */ dCcD_Sph mFishHeadSph; /* 0x4D4C */ dBgS_AcchCir mAcchCir; /* 0x4D8C */ dBgS_ObjAcch mAcch; /* 0x4F64 */ u32 mTentacleActorIDs[8]; /* 0x4F84 */ ob_ke_s field_0x4f84[5]; /* 0x5920 */ mDoExt_3DlineMat0_c field_0x5920; /* 0x593C */ Z2CreatureEnemy mSound; /* 0x59E0 */ Z2CreatureOI mOISound; /* 0x5BE4 */ cXyz field_0x5be4[13]; /* 0x5C80 */ s16 mDemoAction; /* 0x5C82 */ s16 mDemoActionTimer; /* 0x5C84 */ cXyz mDemoCamEye; /* 0x5C90 */ cXyz mDemoCamCenter; /* 0x5C9C */ cXyz mDemoCamEyeTarget; /* 0x5CA8 */ cXyz mDemoCamCenterTarget; /* 0x5CB4 */ f32 field_0x5cb4; /* 0x5CB8 */ f32 field_0x5cb8; /* 0x5CBC */ f32 field_0x5cbc; /* 0x5CC0 */ f32 field_0x5cc0; /* 0x5CC4 */ f32 field_0x5cc4; /* 0x5CC8 */ f32 field_0x5cc8; /* 0x5CCC */ f32 mDemoCamFovy; /* 0x5CD0 */ f32 field_0x5cd0; /* 0x5CD4 */ f32 field_0x5cd4; /* 0x5CD8 */ f32 field_0x5cd8; /* 0x5CDC */ f32 field_0x5cdc; /* 0x5CE0 */ s16 field_0x5ce0; /* 0x5CE4 */ f32 field_0x5ce4; /* 0x5CE8 */ int field_0x5ce8; /* 0x5CEC */ cXyz field_0x5cec; /* 0x5CF8 */ s16 field_0x5cf8; /* 0x5CFC */ f32 field_0x5cfc; /* 0x5D00 */ f32 field_0x5d00; /* 0x5D04 */ f32 field_0x5d04; /* 0x5D08 */ s16 field_0x5d08; /* 0x5D0A */ s16 mBlureRate; /* 0x5D0C */ s16 mBlureRateTarget; /* 0x5D0E */ u8 field_0x5d0e[0x5d10 - 0x5d0e]; /* 0x5D10 */ u8 field_0x5d10; /* 0x5D11 */ s8 mHangHitCount; /* 0x5D12 */ s8 mHangFinishCount; /* 0x5D12 */ s8 field_0x5d13; /* 0x5D14 */ f32 field_0x5d14; /* 0x5D18 */ u8 field_0x5d18; /* 0x5D19 */ u8 field_0x5d19[0x5d24 - 0x5d19]; /* 0x5D24 */ u32 field_0x5d24[5]; /* 0x5D38 */ u32 field_0x5d38; /* 0x5D3C */ s16 mZoneSwTimer; /* 0x5D40 */ JPABaseEmitter* field_0x5d40[2][19]; /* 0x5DD8 */ int field_0x5dd8; /* 0x5DDC */ f32 mColsetBlend; /* 0x5DE0 */ u8 mHIOInit; }; STATIC_ASSERT(sizeof(b_ob_class) == 0x5DE4); #endif /* D_A_B_OB_H */