Files
2026-03-12 17:26:42 -04:00

217 lines
6.3 KiB
C++

#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 */