#ifndef D_A_FM_H #define D_A_FM_H #include "f_op/f_op_actor.h" #include "c/c_damagereaction.h" #include "d/d_path.h" #include "d/d_bg_s_lin_chk.h" class daFm_c : public fopEn_enemy_c { public: enum Proc_e { PROC_INIT_e = 0, PROC_EXEC_e = 1, }; bool isBodyAppear() { return mMode != 1 && mMode != 0x12 && mMode != 0 && (mMode != 2 && (mMode != 4) && (mMode != 3 && (mMode != 0x11))); } bool isHoleAppear() { return field_0x3E0 > 0.015f; } void modeProcInit(int newMode) { modeProc(PROC_INIT_e, newMode); } void _nodeControl(J3DNode*, J3DModel*); BOOL _createHeap(); bool holeCreateHeap(); bool bodyCreateHeap(); bool jntHitCreateHeap(); BOOL _pathMove(cXyz*, cXyz*, cXyz*); fopAc_ac_c* searchNearOtherActor(fopAc_ac_c*); void* searchNearFm(fopAc_ac_c*); void moveRndBack(); void moveRndEscape(); void spAttackVJump(); void spAttackJump(); void spAttackNone(); void iceProc(); void bodySetMtx(); void holeSetMtx(); void setCollision(); void setAttention(); bool checkTgHit(); void setGrabPos(); cXyz getOffsetPos(); u8 checkPlayerGrabBomb(); u8 checkPlayerGrabNpc(); u8 checkPlayerGrabTarget(); bool isGrabPos(); bool isGrab(); bool isGrabFoot(); void modeSwWaitInit(); void modeSwWait(); void modeHideInit(); void modeHide(); void modeUnderFootInit(); void modeUnderFoot(); void modePathMoveInit(); void modePathMove(); void modeGoalKeeperInit(); void modeGoalKeeper(); void modeAppearInit(); void modeAppear(); void modeDisappearInit(); void modeDisappear(); void modeWaitInit(); void modeWait(); void modeAttackInit(); void modeAttack(); void modeThrowInit(); void modeThrow(); void modeGrabFootDemoInit(); void modeGrabFootDemo(); void modeParalysisInit(); void modeParalysis(); void modeDamageInit(); void modeDamage(); void modeGrabInit(); void modeGrab(); void modeGrabDemoInit(); void modeGrabDemo(); void modeDeathInit(); void modeDeath(); void modePrepareItemInit(); void modePrepareItem(); void modeGrabNpcDemoInit(); void modeGrabNpcDemo(); void modePlayerStartDemoInit(); void modePlayerStartDemo(); void modeDeleteInit(); void modeDelete(); void modeBikubikuInit(); void modeBikubiku(); void modeProc(Proc_e, int); void setAnm(s8, bool); void cancelGrab(); void calcInvKine(fopAc_ac_c*); void resetInvKine(); void grabBomb(); void grabTsubo(); void grabPlayer(); void grabNPC(); void searchTarget(); void setBaseTarget(); void turnToBaseTarget(); bool isNpc(fopAc_ac_c*); bool checkHeight(fopAc_ac_c*); bool isLink(fopAc_ac_c*); bool isLinkControl(); bool areaCheck(); bool lineCheck(cXyz*, cXyz*); int setRnd(int, int); void setHoleEffect(); void holeExecute(); bool setHoleScale(f32, f32, f32); bool _execute(); void MtxToRot(Mtx, csXyz*); void debugDraw(); void holeDraw(); void bodyDraw(); bool _draw(); void getArg(); void createInit(); cPhs_State _create(); bool _delete(); typedef void (daFm_c::*ModeFunc)(); static const dCcD_SrcSph m_sph_src; static const dCcD_SrcCyl m_cyl_src; static const u32 m_heapsize; static const char m_arc_name[3]; public: /* 0x2AC */ int mMode; /* 0x2B0 */ dPa_followEcallBack mpFollowEcallBack; /* 0x2C4 */ s8 mBckIdx; /* 0x2C5 */ s8 mAnmPrmIdx; /* 0x2C6 */ s8 mOldAnmPrmIdx; /* 0x2C7 */ u8 field_0x2C7; /* 0x2C8 */ s16 field_0x2C8; /* 0x2CC */ int m_path_no; /* 0x2D0 */ int field_0x2D0; /* 0x2D4 */ int field_0x2D4; /* 0x2D8 */ int field_0x2D8; /* 0x2DC */ int field_0x2DC; /* 0x2E0 */ f32 field_0x2E0; /* 0x2E4 */ u8 field_0x2E4; /* 0x2E5 */ bool field_0x2E5; /* 0x2E6 */ u8 field_0x2E6[0x2E8 - 0x2E6]; #if VERSION == VERSION_DEMO u8 field_0x2E82[0x10]; #endif /* 0x2E8 */ cXyz field_0x2E8[6]; /* 0x330 */ Quaternion field_0x330[6]; /* 0x390 */ int field_0x390; /* 0x394 */ f32 field_0x394; /* 0x398 */ cXyz field_0x398; /* 0x3A4 */ cXyz field_0x3A4; /* 0x3B0 */ cXyz field_0x3B0; /* 0x3BC */ s8 field_0x3BC; /* 0x3C0 */ dPath* mpPath; /* 0x3C4 */ u8 field_0x3C4[0x3C8 - 0x3C4]; /* 0x3C8 */ J3DModel* mpModel; /* 0x3CC */ mDoExt_btkAnm mBtkAnm; /* 0x3E0 */ f32 field_0x3E0; /* 0x3E4 */ cXyz field_0x3E4; /* 0x3F0 */ request_of_phase_process_class mPhs; /* 0x3F8 */ u8 field_0x3F8[0x3FC - 0x3F8]; /* 0x3FC */ bool field_0x3FC; /* 0x400 */ mDoExt_McaMorf* mpMorf; /* 0x404 */ dBgS_ObjAcch mObjAcch; /* 0x5C8 */ dBgS_AcchCir mAcchCir; /* 0x608 */ mDoExt_invisibleModel mInvisibleModel; /* 0x610 */ cXyz field_0x610; /* 0x61C */ cXyz field_0x61C; /* 0x628 */ u8 field_0x628[0x630 - 0x628]; /* 0x630 */ cXyz field_0x630; /* 0x63C */ cXyz field_0x63C; /* 0x648 */ int field_0x648; /* 0x64C */ int field_0x64C; /* 0x650 */ int field_0x650; /* 0x654 */ int mSinkTimer; /* 0x658 */ int field_0x658; /* 0x65C */ int field_0x65C; /* 0x660 */ cXyz field_0x660; /* 0x66C */ fopAc_ac_c* mpActorTarget; /* 0x670 */ fpc_ProcID mProcId; /* 0x674 */ cXyz mGrabPos; /* 0x680 */ s16 field_0x680; /* 0x684 */ int field_0x684; /* 0x688 */ bool field_0x688; /* 0x68A */ s16 field_0x68A; /* 0x68C */ s16 field_0x68C; /* 0x690 */ cXyz field_0x690; /* 0x69C */ cXyz field_0x69C; /* 0x6A8 */ fpc_ProcID mProcId2; /* 0x6AC */ u8 field_0x6AC[0x6B4 - 0x6AC]; /* 0x6B4 */ int field_0x6B4; /* 0x6B8 */ u8 field_0x6B8; /* 0x6BC */ Mtx field_0x6BC; /* 0x6EC */ JntHit_c* mpJntHit; /* 0x6F0 */ dCcD_Stts mStts; /* 0x72C */ dCcD_Stts mStts2; /* 0x768 */ dCcD_Sph mSph; /* 0x894 */ dCcD_Cyl mCyl; /* 0x9C4 */ int field_0x9C4; /* 0x9C8 */ u8 mHitType; /* 0x9CC */ fopAc_ac_c* mBaseTarget; /* 0x9D0 */ s16 field_0x9D0; /* 0x9D4 */ f32 field_0x9D4; /* 0x9D8 */ dBgS_ObjLinChk mLinChk; /* 0xA44 */ u8 field_0xA44[0xA48 - 0xA44]; /* 0xA48 */ cXyz field_0xA48[12]; /* 0xAD8 */ bool field_0xAD8[12]; /* 0xAE4 */ u8 field_0xAE4; /* 0xAE5 */ u8 field_0xAE5; /* 0xAE8 */ enemyice mEnemyIce; }; // Size: 0xEA0 #endif /* D_A_FM_H */