#ifndef Z_EN_ZO_H
#define Z_EN_ZO_H

#include "ultra64.h"
#include "actor.h"

struct EnZo;

#define EN_ZO_EFFECT_COUNT 15

typedef struct EnZoEffect {
    /* 0x00 */ u8 type;
    /* 0x04 */ f32 scale;
    /* 0x08 */ f32 targetScale;
    /* 0x0C */ Color_RGBA8 color;
    /* 0x10 */ u32 pad;
    /* 0x14 */ Vec3f pos;
    /* 0x20 */ Vec3f vel;
    /* 0x2C */ Vec3f vec; // Usage specific
} EnZoEffect; // size = 0x38

typedef void (*EnZoActionFunc)(struct EnZo*, struct PlayState*);

typedef struct EnZo {
    /* 0x0000 */ Actor actor;
    /* 0x014C */ SkelAnime skelAnime;
    /* 0x0190 */ EnZoActionFunc actionFunc;
    /* 0x0194 */ NpcInteractInfo interactInfo;
    /* 0x01BC */ ColliderCylinder collider;
    /* 0x0208 */ u8 canSpeak;
    /* 0x020A */ Vec3s jointTable[20];
    /* 0x0282 */ Vec3s morphTable[20];
    /* 0x02FC */ EnZoEffect effects[EN_ZO_EFFECT_COUNT];
    /* 0x0644 */ f32 dialogRadius;
    /* 0x0648 */ f32 alpha;
    /* 0x064C */ s16 trackingMode;
    /* 0x064E */ s16 rippleTimer;
    /* 0x0650 */ s16 timeToDive;
    /* 0x0652 */ s16 blinkTimer;
    /* 0x0654 */ s16 eyeTexture;
    /* 0x0656 */ s16 fidgetTableY[20];
    /* 0x067E */ s16 fidgetTableZ[20];
} EnZo; // size = 0x06A8

#endif
