#ifndef Z_EN_MB_H #define Z_EN_MB_H #include "ultra64.h" #include "global.h" struct EnMb; typedef void (*EnMbActionFunc)(struct EnMb*, GlobalContext*); typedef enum { /* 0 */ ENMB_STATE_SPEAR_SPEARPATH_DAMAGED, /* 1 */ ENMB_STATE_CLUB_DEAD, /* 2 */ ENMB_STATE_CLUB_KNEELING_DAMAGED, /* 3 */ ENMB_STATE_CLUB_KNEELING, /* 5 */ ENMB_STATE_STUNNED = 5, /* 6 */ ENMB_STATE_IDLE, /* 9 */ ENMB_STATE_WALK = 9, /* 10 */ ENMB_STATE_ATTACK, /* 11 */ ENMB_STATE_ATTACK_END } EnMbState; typedef struct EnMb { /* 0x0000 */ Actor actor; /* 0x014C */ Vec3s bodyPartsPos[10]; /* 0x0188 */ u8 damageEffect; /* 0x018C */ SkelAnime skelAnime; /* 0x01D0 */ Vec3s jointTable[28]; /* 0x0278 */ Vec3s morphTable[28]; /* 0x0320 */ EnMbState state; /* 0x0324 */ EnMbActionFunc actionFunc; /* 0x0328 */ s16 iceEffectTimer; /* 0x032A */ s16 timer1; /* 0x032C */ s16 timer2; /* 0x032E */ s16 timer3; /* 0x0330 */ s16 yawToWaypoint; /* 0x0332 */ s16 unk_332; /* 0x0334 */ s16 attack; /* 0x0338 */ Vec3f effSpawnPos; /* 0x0344 */ Vec3f waypointPos; /* 0x0350 */ char unk_34A[0xC]; /* 0x035C */ s8 waypoint; /* 0x035D */ s8 path; /* 0x035E */ s8 direction; /* 0x0360 */ f32 maxHomeDist; /* 0x0364 */ f32 playerDetectionRange; /* 0x0368 */ ColliderCylinder hitbox; /* 0x03B4 */ ColliderQuad attackCollider; // for attacking the player /* 0x0434 */ ColliderTris frontShielding; // Moblins don't have shields, but this acts as one /* 0x0454 */ ColliderTrisElement frontShieldingTris[2]; } EnMb; // size = 0x050C #endif