#ifndef _EFFECTS_H_
#define _EFFECTS_H_

#include "types.h"
#include "common_structs.h"

enum EffectID {
    EFFECT_00                       = 0x00,
    EFFECT_BIG_SMOKE_PUFF           = 0x01,
    EFFECT_02                       = 0x02, // unused
    EFFECT_03                       = 0x03, // unused
    EFFECT_04                       = 0x04, // unused
    EFFECT_05                       = 0x05, // unused
    EFFECT_LANDING_DUST             = 0x06,
    EFFECT_WALKING_DUST             = 0x07,
    EFFECT_FLOWER_SPLASH            = 0x08,
    EFFECT_FLOWER_TRAIL             = 0x09,
    EFFECT_CLOUD_PUFF               = 0x0A,
    EFFECT_CLOUD_TRAIL              = 0x0B,
    EFFECT_FOOTPRINT                = 0x0C,
    EFFECT_FLOATING_FLOWER          = 0x0D,
    EFFECT_SNOWFLAKE                = 0x0E,
    EFFECT_STAR                     = 0x0F,
    EFFECT_EMOTE                    = 0x10,
    EFFECT_SPARKLES                 = 0x11,
    EFFECT_SHAPE_SPELL              = 0x12,
    EFFECT_GATHER_ENERGY_PINK       = 0x13,
    EFFECT_DROP_LEAVES              = 0x14,
    EFFECT_DUST                     = 0x15,
    EFFECT_SHATTERING_STONES        = 0x16,
    EFFECT_SMOKE_RING               = 0x17,
    EFFECT_DAMAGE_STARS             = 0x18,
    EFFECT_EXPLOSION                = 0x19,
    EFFECT_LENS_FLARE               = 0x1A,
    EFFECT_GOT_ITEM_OUTLINE         = 0x1B,
    EFFECT_SPIKY_WHITE_AURA         = 0x1C,
    EFFECT_SMOKE_IMPACT             = 0x1D,
    EFFECT_DAMAGE_INDICATOR         = 0x1E,
    EFFECT_PURPLE_RING              = 0x1F,
    EFFECT_FLAME                    = 0x20,
    EFFECT_STARS_BURST              = 0x21,
    EFFECT_STARS_SHIMMER            = 0x22,
    EFFECT_RISING_BUBBLE            = 0x23,
    EFFECT_RING_BLAST               = 0x24,
    EFFECT_SHOCKWAVE                = 0x25,
    EFFECT_MUSIC_NOTE               = 0x26,
    EFFECT_SMOKE_BURST              = 0x27,
    EFFECT_SWEAT                    = 0x28,
    EFFECT_SLEEP_BUBBLE             = 0x29,
    EFFECT_2A                       = 0x2A, // unused
    EFFECT_WINDY_LEAVES             = 0x2B,
    EFFECT_FALLING_LEAVES           = 0x2C,
    EFFECT_STARS_SPREAD             = 0x2D,
    EFFECT_STEAM_BURST              = 0x2E,
    EFFECT_STARS_ORBITING           = 0x2F,
    EFFECT_BIG_SNOWFLAKES           = 0x30,
    EFFECT_DEBUFF                   = 0x31,
    EFFECT_GREEN_IMPACT             = 0x32,
    EFFECT_RADIAL_SHIMMER           = 0x33,
    EFFECT_ENDING_DECALS            = 0x34,
    EFFECT_LIGHT_RAYS               = 0x35,
    EFFECT_LIGHTNING                = 0x36,
    EFFECT_FIRE_BREATH              = 0x37,
    EFFECT_SHIMMER_BURST            = 0x38,
    EFFECT_ENERGY_SHOCKWAVE         = 0x39,
    EFFECT_SHIMMER_WAVE             = 0x3A,
    EFFECT_AURA                     = 0x3B,
    EFFECT_BULB_GLOW                = 0x3C,
    EFFECT_3D                       = 0x3D,
    EFFECT_BLAST                    = 0x3E,
    EFFECT_FIRE_FLOWER              = 0x3F,
    EFFECT_RECOVER                  = 0x40,
    EFFECT_DISABLE_X                = 0x41,
    EFFECT_BOMBETTE_BREAKING        = 0x42,
    EFFECT_FIREWORK                 = 0x43,
    EFFECT_CONFETTI                 = 0x44,
    EFFECT_SNOWFALL                 = 0x45,
    EFFECT_46                       = 0x46,
    EFFECT_GATHER_MAGIC             = 0x47,
    EFFECT_ATTACK_RESULT_TEXT       = 0x48,
    EFFECT_SMALL_GOLD_SPARKLE       = 0x49,
    EFFECT_FLASHING_BOX_SHOCKWAVE   = 0x4A,
    EFFECT_BALLOON                  = 0x4B,
    EFFECT_FLOATING_ROCK            = 0x4C,
    EFFECT_CHOMP_DROP               = 0x4D,
    EFFECT_QUIZMO_STAGE             = 0x4E,
    EFFECT_RADIATING_ENERGY_ORB     = 0x4F,
    EFFECT_QUIZMO_ANSWER            = 0x50, // unused
    EFFECT_MOTION_BLUR_FLAME        = 0x51, // three orbs emanating from super block during upgrading animation
    EFFECT_ENERGY_ORB_WAVE          = 0x52,
    EFFECT_MERLIN_HOUSE_STARS       = 0x53,
    EFFECT_QUIZMO_AUDIENCE          = 0x54, // unused
    EFFECT_BUTTERFLIES              = 0x55,
    EFFECT_STAT_CHANGE              = 0x56,
    EFFECT_SNAKING_STATIC           = 0x57,
    EFFECT_THUNDERBOLT_RING         = 0x58,
    EFFECT_SQUIRT                   = 0x59,
    EFFECT_WATER_BLOCK              = 0x5A,
    EFFECT_WATERFALL                = 0x5B,
    EFFECT_WATER_FOUNTAIN           = 0x5C,
    EFFECT_UNDERWATER               = 0x5D,
    EFFECT_LIGHTNING_BOLT           = 0x5E,
    EFFECT_WATER_SPLASH             = 0x5F,
    EFFECT_SNOWMAN_DOLL             = 0x60,
    EFFECT_FRIGHT_JAR               = 0x61,
    EFFECT_STOP_WATCH               = 0x62,
    EFFECT_63                       = 0x63,
    EFFECT_THROW_SPINY              = 0x64,
    EFFECT_65                       = 0x65,
    EFFECT_TUBBA_HEART_ATTACK       = 0x66,
    EFFECT_WHIRLWIND                = 0x67,
    EFFECT_RED_IMPACT               = 0x68,
    EFFECT_FLOATING_CLOUD_PUFF      = 0x69,
    EFFECT_6A                       = 0x6A, // unused
    EFFECT_ENERGY_IN_OUT            = 0x6B,
    EFFECT_TATTLE_WINDOW            = 0x6C,
    EFFECT_SHINY_FLARE              = 0x6D,
    EFFECT_HUFF_PUFF_BREATH         = 0x6E,
    EFFECT_COLD_BREATH              = 0x6F,
    EFFECT_EMBERS                   = 0x70,
    EFFECT_HIEROGLYPHS              = 0x71,
    EFFECT_MISC_PARTICLES           = 0x72,
    EFFECT_STATIC_STATUS            = 0x73,
    EFFECT_MOVING_CLOUD             = 0x74,
    EFFECT_75                       = 0x75,
    EFFECT_76                       = 0x76, // unused
    EFFECT_FIREWORK_ROCKET          = 0x77,
    EFFECT_PEACH_STAR_BEAM          = 0x78,
    EFFECT_CHAPTER_CHANGE           = 0x79,
    EFFECT_ICE_SHARD                = 0x7A,
    EFFECT_SPIRIT_CARD              = 0x7B,
    EFFECT_LIL_OINK                 = 0x7C,
    EFFECT_SOMETHING_ROTATING       = 0x7D,
    EFFECT_BREAKING_JUNK            = 0x7E,
    EFFECT_PARTNER_BUFF             = 0x7F,
    EFFECT_QUIZMO_ASSISTANT         = 0x80,
    EFFECT_ICE_PILLAR               = 0x81,
    EFFECT_SUN                      = 0x82,
    EFFECT_STAR_SPIRITS_ENERGY      = 0x83,
    EFFECT_PINK_SPARKLES            = 0x84,
    EFFECT_STAR_OUTLINE             = 0x85,
    EFFECT_86                       = 0x86,
};

typedef struct BigSmokePuffFXData {
    /* 0x00 */ s16 unk_00;
    /* 0x02 */ s16 unk_02;
    /* 0x04 */ s16 unk_04;
    /* 0x06 */ s16 unk_06;
    /* 0x08 */ s32 unk_08;
    /* 0x0C */ f32 x;
    /* 0x10 */ f32 y;
    /* 0x14 */ f32 z;
    /* 0x18 */ f32 partX;
    /* 0x1C */ f32 partY;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ char unk_28[0x4];
} BigSmokePuffFXData; // size = 0x2C

typedef struct LandingDustFXData {
    /* 0x00 */ u16 type;
    /* 0x02 */ char unk_02[0x2];
    /* 0x04 */ f32 x;
    /* 0x08 */ f32 y;
    /* 0x0C */ f32 z;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
} LandingDustFXData; // size = 0x44

typedef struct WalkingDustFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ u16 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ char unk_14[0x44];
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 unk_64;
    /* 0x68 */ f32 unk_68;
    /* 0x6C */ s32 unk_6C;
    /* 0x70 */ s32 unk_70;
    /* 0x74 */ s32 unk_74;
} WalkingDustFXData; // size = 0x78

// Used by both flower_splash and flower_trail
typedef struct FlowerFXData {
    /* 0x00 */ s32 alive;
    /* 0x04 */ u16 triggeredByNpc;
    /* 0x06 */ s16 timeLeft;
    /* 0x08 */ u8 primAlpha;
    /* 0x09 */ s8 useAltColor;
    /* 0x0A */ char unk_0A[0x2];
    /* 0x0C */ Vec3f pos;
    /* 0x18 */ Vec3f scale;
    /* 0x24 */ Vec3f rot;
    /* 0x30 */ Mtx transformMtx;
    /* 0x70 */ f32 velocityScaleA;
    /* 0x74 */ f32 velocityScaleB;
    /* 0x78 */ f32 visibilityAmt;   // when this is zero, the flower can vanish. may have once controlled alpha.
    /* 0x7C */ f32 unk_7C;
    /* 0x80 */ f32 integrator[4];
    /* 0x90 */ VecXZf velocity;
} FlowerFXData; // size = 0x98

typedef struct CloudPuffFXData {
    /* 0x00 */ s32 alive;
    /* 0x04 */ char unk_04[0x2];
    /* 0x06 */ s16 timeLeft;
    /* 0x08 */ u8 alpha;
    /* 0x09 */ char unk_09[0x3];
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
} CloudPuffFXData; // size = 0x4C

typedef struct CloudTrailFXData {
    /* 0x00 */ s32 alive;
    /* 0x04 */ u16 unk_04;
    /* 0x06 */ s16 lifetime;
    /* 0x08 */ u8 alpha;
    /* 0x09 */ char unk_09[0x3];
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ char unk_34[0x4];
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ s32 unk_44;
    /* 0x48 */ char unk_48[0x8];
} CloudTrailFXData; // size = 0x50

typedef struct FootprintFXData {
    /* 0x00 */ s32 alive;
    /* 0x04 */ char unk_04[0x2];
    /* 0x06 */ s16 lifetime;
    /* 0x08 */ u8 alpha;
    /* 0x09 */ char unk_09[0x3];
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ Mtx mtx;
    /* 0x70 */ s32 unk_70;
    /* 0x74 */ char unk_74[0x8];
    /* 0x7C */ s32 unk_7C;
    /* 0x80 */ s32 unk_80;
    /* 0x84 */ s32 unk_84;
    /* 0x88 */ char unk_88[0x8];
    /* 0x90 */ f32 unk_90;
    /* 0x94 */ f32 unk_94;
} FootprintFXData; // size = 0x98

typedef struct FloatingFlowerFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ Vec3f vel;
    /* 0x1C */ f32 accelY;
    /* 0x20 */ f32 jerkY;
    /* 0x24 */ Vec2f rot;
    /* 0x2C */ Vec2f angularVel;
    /* 0x34 */ s32 timeLeft;
    /* 0x38 */ s32 lifetime;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
} FloatingFlowerFXData; // size = 0x48

typedef struct SnowflakeFXData {
    /* 0x00 */ Vec3f pos;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
} SnowflakeFXData; // size = 0x2C

typedef struct StarFXData {
    /* 0x000 */ s32 unk_00;
    /* 0x004 */ f32 unk_04;
    /* 0x008 */ f32 unk_08;
    /* 0x00C */ f32 unk_0C;
    /* 0x010 */ f32 unk_10;
    /* 0x014 */ f32 unk_14;
    /* 0x018 */ f32 unk_18;
    /* 0x01C */ f32 unk_1C;
    /* 0x020 */ f32 unk_20;
    /* 0x024 */ f32 unk_24;
    /* 0x028 */ s32 unk_28;
    /* 0x02C */ f32 unk_2C;
    /* 0x030 */ s32 unk_30;
    /* 0x034 */ f32 unk_34;
    /* 0x038 */ s32 unk_38;
    /* 0x03C */ s32 unk_3C;
    /* 0x040 */ Mtx unk_40[8];
    /* 0x240 */ f32 unk_240;
    /* 0x244 */ s32 unk_244;
    /* 0x248 */ s32 unk_248;
    /* 0x24C */ s32 unk_24C;
} StarFXData; // size = 0x250

typedef struct EmoteFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ Npc* unk_3C;
} EmoteFXData; // size = 0x40

typedef struct SparklesFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
} SparklesFXData; // size = 0x30

enum SparkesFXTypes {
    FX_SPARKLES_0   = 0,
    FX_SPARKLES_1   = 1,
    FX_SPARKLES_2   = 2,
    FX_SPARKLES_3   = 3,
    FX_SPARKLES_4   = 4
};

typedef struct ShapeSpellFXData {
    /* 0x00 */ s32 isChild;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 timeLeft;
    /* 0x34 */ s32 unk_34;
} ShapeSpellFXData; // size = 0x38

typedef struct GatherEnergyPinkFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f posA;
    /* 0x10 */ Vec3f posB;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
    /* 0x48 */ s32 unk_48;
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ f32 unk_5C;
} GatherEnergyPinkFXData; // size = 0x60

typedef struct DropLeavesFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
} DropLeavesFXData; // size = 0x30

typedef struct DustFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
} DustFXData; // size = 0x48

typedef struct ShatteringStonesFXData {
    /* 0x00 */ f32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
} ShatteringStonesFXData; // size = 0x40

typedef struct SmokeRingFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x02 */ char unk_02[2];
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
} SmokeRingFXData; // size = 0x44

typedef struct DamageStarsFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x14 */ f32 unk_04;
    /* 0x18 */ f32 unk_08;
    /* 0x1C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
} DamageStarsFXData; // size = 0x30

typedef struct ExplosionFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ char unk_10[0x10];
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
} ExplosionFXData; // size = 0x3C

typedef struct LensFlareFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
} LensFlareFXData; // size = 0x34

typedef struct GotItemOutlineFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
} GotItemOutlineFXData; // size = 0x20

typedef struct SpikyWhiteAuraFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
} SpikyWhiteAuraFXData; // size = 0x30

typedef struct SmokeImpactFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x02 */ char unk_02[2];
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
} SmokeImpactFXData; // size = 0x34

typedef struct DamageIndicatorFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f unk_04;
    /* 0x10 */ Vec3f unk_10;
    /* 0x1C */ Vec3f unk_1C;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 alpha;
    /* 0x30 */ s32 effectDurationTimer;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ s32 numParts;
} DamageIndicatorFXData; // size = 0x40

typedef struct PurpleRingFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ Matrix4f unk_1C;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 unk_64;
    /* 0x68 */ s32 unk_68;
    /* 0x6C */ s32 unk_6C;
    /* 0x70 */ s32 unk_70;
    /* 0x74 */ u8 unk_74;
    /* 0x75 */ u8 unk_75;
    /* 0x76 */ u8 unk_76;
    /* 0x77 */ u8 unk_77;
    /* 0x78 */ u8 unk_78;
    /* 0x79 */ u8 unk_79;
    /* 0x7A */ char unk_7A[2];
} PurpleRingFXData; // size = 0x7C

typedef struct FlameFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
} FlameFXData; // size = 0x34

typedef struct StarsBurstFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ char unk_1C[8];
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
} StarsBurstFXData; // size = 0x38

typedef struct StarsShimmerFXData {
    /* 0x00 */ s16 unk_00;
    /* 0x02 */ s16 state;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 lifeTime;
    /* 0x24 */ s32 timeLeft;
    /* 0x28 */ s32 unk_28;
} StarsShimmerFXData; // size = 0x2C

typedef struct RisingBubbleFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 timeLeft;
    /* 0x1C */ s32 lifeTime;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
} RisingBubbleFXData; // size = 0x28

typedef struct RingBlastFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 timeLeft;
    /* 0x18 */ s32 lifeTime;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
} RingBlastFXData; // size = 0x2C

// Likely to be the same as GreenImpactFXData and RedImpactFXData
typedef struct ShockwaveFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x02 */ char unk_02[2]; // likely padding
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 alpha;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ Color_RGB8 prim;
    /* 0x53 */ Color_RGB8 env;
    /* 0x56 */ char unk_56[2]; // likely padding
} ShockwaveFXData; // size = 0x58

typedef struct MusicNoteFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 timeLeft;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
} MusicNoteFXData; // size = 0x34

typedef struct SmokeBurstFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 timeLeft;
    /* 0x18 */ s32 lifeTime;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ Color_RGBA8 rgba;
} SmokeBurstFXData; // size = 0x28

typedef struct SweatFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ char unk_14[0x04];
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 timeLeft;
} SweatFXData; // size = 0x28

typedef struct SleepBubbleFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 timeLeft;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ Vec2f points[20];
    /* 0xC4 */ f32 unk_C4;
    /* 0xC8 */ f32 unk_C8;
} SleepBubbleFXData; // size = 0xCC

typedef struct WindyLeavesFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f unk_04;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 alpha;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
} WindyLeavesFXData; // size = 0x3C

typedef struct FallingLeavesFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ char unk_30[4];
} FallingLeavesFXData; // size = 0x34

typedef struct StarsSpreadFXData {
    /* 0x00 */ s16 unk_00;
    /* 0x02 */ char unk_02[2];
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
} StarsSpreadFXData; // size = 0x34

typedef struct SteamBurstFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x02 */ char unk_02[2];
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
} SteamBurstFXData; // size = 0x34

typedef struct StarsOrbitingFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 orbitRadius;
    /* 0x14 */ f32 targetRadius;
    /* 0x18 */ f32 roll;
    /* 0x1C */ f32 rollSpinRate;
    /* 0x20 */ f32 pitch;
    /* 0x24 */ s32 yaw;
    /* 0x28 */ s32 enabled;
} StarsOrbitingFXData; // size = 0x2C

typedef struct BigSnowflakesFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
} BigSnowflakesFXData; // size = 0x30

typedef struct DebuffFXData {
    /* 0x00 */ s16 unk_00;
    /* 0x02 */ char unk_02[2];
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ u8 unk_38;
    /* 0x39 */ u8 unk_39;
    /* 0x3A */ u8 unk_3A;
    /* 0x3B */ u8 unk_3B;
    /* 0x3C */ u8 unk_3C;
    /* 0x3D */ u8 unk_3D;
    /* 0x3E */ char unk_3E[2];
} DebuffFXData; // size = 0x40

// Likely to be the same as RedImpactFXData and ShockwaveFXData
typedef struct GreenImpactFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x02 */ char unk_02[2]; // likely padding
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ Color_RGB8 unk_50;
    /* 0x53 */ Color_RGB8 unk_53;
    /* 0x56 */ char unk_56[2]; // likely padding
} GreenImpactFXData; // size = 0x58

typedef struct RadialShimmerFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 timeLeft;
    /* 0x2C */ s32 lifeTime;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 unk_64;
    /* 0x68 */ u8 unk_68;
    /* 0x69 */ u8 unk_69;
    /* 0x6A */ u8 unk_6A;
    /* 0x6B */ u8 unk_6B;
    /* 0x6C */ u8 unk_6C;
    /* 0x6D */ u8 unk_6D;
    /* 0x6E */ char unk_6E[2];
} RadialShimmerFXData; // size = 0x70

typedef struct EndingDecalsFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 scale;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 haloAlpha;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ u8 unk_24;
    /* 0x25 */ u8 unk_25;
    /* 0x26 */ u8 unk_26;
    /* 0x27 */ u8 unk_27;
    /* 0x28 */ u8 unk_28;
    /* 0x29 */ u8 unk_29;
    /* 0x2A */ char unk_2A[2];
} EndingDecalsFXData; // size = 0x2C

typedef struct LightRaysFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ char unk_04[0xC];
    /* 0x10 */ Vec3f pos;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 alpha;
    /* 0x28 */ s32 timeLeft;
    /* 0x2C */ s32 lifetime;
    /* 0x30 */ char unk_30[4];
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ char unk_44[4];
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ Vec3f rotation;
    /* 0x68 */ f32 unk_68;
    /* 0x6C */ f32 unk_6C;
    /* 0x70 */ Vec3f initialRot;
    /* 0x7C */ s32 unk_7C;
    /* 0x80 */ f32 unk_80;
    /* 0x84 */ f32 unk_84;
    /* 0x88 */ f32 unk_88;
    /* 0x8C */ f32 unk_8C;
    /* 0x90 */ s32 unk_90;
} LightRaysFXData; // size = 0x94

typedef struct LightningFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ struct EffectInstance* unk_44;
    /* 0x48 */ struct EffectInstance* unk_48;
} LightningFXData; // size = 0x4C

typedef struct FireBreathFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ s32 numChildren;
    /* 0x08 */ s32 spawnDelay;
    /* 0x0C */ Vec3f pos;
    /* 0x18 */ Vec3f initPos;
    /* 0x24 */ Vec3f endPos;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 scale;
    /* 0x3C */ f32 scaleChangeFactor;
    /* 0x40 */ s32 alpha;
    /* 0x44 */ s32 lifeTime;
    /* 0x48 */ s32 timeLeft;
    /* 0x4C */ s32 spawnTimer;
    /* 0x50 */ Vec3f unk_50;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ s32 primR;
    /* 0x68 */ s32 primG;
    /* 0x6C */ s32 primB;
    /* 0x70 */ s32 envR;
    /* 0x74 */ s32 envG;
    /* 0x78 */ s32 envB;
} FireBreathFXData; // size = 0x7C

typedef struct ShimmerBurstFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
    /* 0x48 */ s32 unk_48;
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ s32 unk_50;
    /* 0x54 */ s32 unk_54;
    /* 0x58 */ s32 unk_58;
    /* 0x5C */ s32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 unk_64;
    /* 0x68 */ f32 unk_68;
} ShimmerBurstFXData; // size = 0x6C

typedef struct EnergyShockwaveFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ char unk_10[0xC];
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ u8 unk_50;
    /* 0x51 */ u8 unk_51;
    /* 0x52 */ s8 unk_52;
    /* 0x53 */ char unk_53[1];
} EnergyShockwaveFXData; // size = 0x54

typedef struct ShimmerWaveFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
    /* 0x48 */ s32 unk_48;
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ s32 unk_50;
    /* 0x54 */ s32 unk_54;
    /* 0x58 */ s32 unk_58;
    /* 0x5C */ s32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 unk_64;
    /* 0x68 */ f32 unk_68;
} ShimmerWaveFXData; // size = 0x6C

typedef struct AuraFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f posA;
    /* 0x10 */ Vec3f posB;
    /* 0x1C */ Vec2f scale;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 primA;
    /* 0x2C */ s32 fadeTime;
    /* 0x30 */ s32 lifeTime;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 renderYaw;
    /* 0x68 */ u8 primR;
    /* 0x69 */ u8 primG;
    /* 0x6A */ u8 primB;
    /* 0x6B */ u8 envR;
    /* 0x6C */ u8 envG;
    /* 0x6D */ u8 engB;
    /* 0x6E */ u8 engA;
} AuraFXData; // size = 0x70

typedef struct BulbGlowFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
} BulbGlowFXData; // size = 0x24

typedef struct Effect3DFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ Vec3f pos;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ s32 unk_58;
    /* 0x5C */ s32 unk_5C;
    /* 0x60 */ s32 unk_60;
    /* 0x64 */ s32 unk_64;
} Effect3DFXData; // size = 0x68

typedef struct BlastFXData {
    /* 0x00 */ s16 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 timeLeft;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
} BlastFXData; // size = 0x2C

typedef struct FireFlowerFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ Vec3f pos;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ Vec3i unk_40;
} FireFlowerFXData; // size = 0x4C

typedef struct RecoverFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
} RecoverFXData; // size = 0x48

typedef struct DisableXFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ Vec3f pos;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 alpha;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 scale;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 koDuration;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ s32 unk_44;
} DisableXFXData; // size = 0x48

typedef struct BombetteBreakingFXData {
    /* 0x00 */ s16 type;
    /* 0x02 */ s16 treeIndex;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ Vec3f center;
    /* 0x14 */ Vec3f unk_14;
    /* 0x20 */ Vec3f unk_20;
    /* 0x2C */ Vec3f unk_2C;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ s32 timeLeft;
    /* 0x48 */ s32 unk_48;
    /* 0x4C */ s32 alpha;
} BombetteBreakingFXData;

typedef struct FireworkFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ char unk_18[4];
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ u8 unk_3C;
    /* 0x3D */ u8 unk_3D;
    /* 0x3E */ u8 unk_3E;
    /* 0x3F */ u8 unk_3F;
    /* 0x40 */ u8 unk_40;
    /* 0x41 */ u8 unk_41;
    /* 0x42 */ char unk_42[2];
} FireworkFXData; // size = 0x44

typedef struct ConfettiFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
} ConfettiFXData; // size = 0x34

typedef struct SnowfallFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 timeLeft;
    /* 0x24 */ s32 lifeTime;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
} SnowfallFXData; // size = 0x34

typedef struct Effect46FXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ PlayerStatus* unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ u8 unk_44;
    /* 0x45 */ u8 unk_45;
    /* 0x46 */ u8 unk_46;
    /* 0x47 */ char unk_47;
} Effect46FXData; // size = 0x48

typedef struct GatherMagicFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
} GatherMagicFXData;

typedef struct AttackResultTextFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ char unk_2C[0x4];
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
} AttackResultTextFXData; // size = 0x38

typedef struct SmallGoldSparkleFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 unk_20;
} SmallGoldSparkleFXData; // size = 0x24

typedef struct FlashingBoxShockwaveFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
} FlashingBoxShockwaveFXData; // size = 0x48

typedef struct BalloonFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
} BalloonFXData; // size = 0x24

typedef struct FloatingRockFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ Vec3f unk_30;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
    /* 0x48 */ s32 unk_48;
    /* 0x4C */ s32 unk_4C;
} FloatingRockFXData; // size = 0x50

typedef struct ChompDropFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
} ChompDropFXData; // size = 0x48

typedef struct QuizmoStageFXData {
   /* 0x00 */ s32 unk_00;
   /* 0x04 */ s32 vanishTimer;
   /* 0x08 */ s32 lifetime;
   /* 0x0C */ Vec3f origin;
   /* 0x18 */ s32 microphoneRaiseAmt;
   /* 0x1C */ s32 rearWallRaiseAmt;
   /* 0x20 */ s32 leftWallRaiseAmt;
   /* 0x24 */ s32 rightWallRaiseAmt;
   /* 0x28 */ s32 podiumRaiseAmt;
   /* 0x2C */ s32 lightScrollAmt;
   /* 0x30 */ s32 lightScrollIncrement;
   /* 0x34 */ s32 lightScrollDelay;
   /* 0x38 */ s32 unkEffectMode;
   /* 0x3C */ s32 unk_3C; // stage hidden when == 0xFF
   /* 0x40 */ char unk_40[0x04];
} QuizmoStageFXData; // size 0x44

typedef struct RadiatingEnergyOrbFXData {
    /* 0x00 */ char unk_00[4];
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ char unk_24[4];
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
} RadiatingEnergyOrbFXData; // size = 0x34

typedef struct MotionBlurFlameFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ Vec3f pos;
    /* 0x1C */ f32 unk_1C[4];
    /* 0x2C */ f32 unk_2C[4];
    /* 0x3C */ f32 unk_3C[4];
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ s32 unk_50;
    /* 0x54 */ s32 unk_54;
    /* 0x58 */ char unk_58[4];
    /* 0x5C */ s32 unk_5C;
    /* 0x60 */ s32 unk_60;
    /* 0x64 */ s32 unk_64;
} MotionBlurFlameFXData; // size = 0x68

typedef struct EnergyOrbWaveFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 scale;
    /* 0x34 */ f32 unk_34;
} EnergyOrbWaveFXData; // size = 0x38

typedef struct MerlinHouseStarsFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ s32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
} MerlinHouseStarsFXData; // size = 0x3C

#define MAX_QUIZMO_AUDIENCE 10

typedef struct QuizmoAudienceFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 timeLeft;
    /* 0x08 */ s32 lifeTime;
    /* 0x0C */ Vec3f pos;
    /* 0x18 */ s32 primColor;
    /* 0x1C */ s32 compState[MAX_QUIZMO_AUDIENCE];
    /* 0x44 */ s32 compType[MAX_QUIZMO_AUDIENCE];
    /* 0x6C */ s32 compPosIdx[MAX_QUIZMO_AUDIENCE];
    /* 0x94 */ f32 compMoveMagnitude[MAX_QUIZMO_AUDIENCE];
    /* 0xBC */ f32 compX[MAX_QUIZMO_AUDIENCE];
    /* 0xE4 */ f32 compY[MAX_QUIZMO_AUDIENCE];
} QuizmoAudienceFXData; // size = 0x10C

typedef struct ButterfliesFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ s32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
} ButterfliesFXData; // size = 0x48

typedef struct StatChangeFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 scale;
    /* 0x14 */ s32 timeLeft;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 arrowType;
    /* 0x20 */ s32 arrowValue;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 scaleX;
    /* 0x2C */ f32 scaleY;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
} StatChangeFXData;

typedef struct SnakingStaticFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ s32 unk_40;
} SnakingStaticFXData; // size = 0x44

typedef struct ThunderboltRingFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ s32 unk_30;
} ThunderboltRingFXData; // size = 0x34

typedef struct SquirtFXData {
    /* 0x000 */ s32 unk_00;
    /* 0x004 */ f32 unk_04;
    /* 0x008 */ f32 unk_08;
    /* 0x00C */ f32 unk_0C;
    /* 0x010 */ f32 unk_10;
    /* 0x014 */ f32 unk_14;
    /* 0x018 */ f32 unk_18;
    /* 0x01C */ f32 unk_1C;
    /* 0x020 */ f32 unk_20;
    /* 0x024 */ f32 unk_24;
    /* 0x028 */ s32 unk_28;
    /* 0x02C */ s32 unk_2C;
    /* 0x030 */ s32 unk_30;
    /* 0x034 */ s32 unk_34;
    /* 0x038 */ s32 unk_38;
    /* 0x03C */ s32 unk_3C;
    /* 0x040 */ s32 unk_40;
    /* 0x044 */ s32 unk_44;
    /* 0x048 */ s32 unk_48;
    /* 0x04C */ s32 unk_4C;
    /* 0x050 */ f32 unk_50;
    /* 0x054 */ s32 unk_54;
    /* 0x058 */ f32 unk_58[12];
    /* 0x088 */ f32 unk_88[12];
    /* 0x0B8 */ s32 unk_B8[12];
    /* 0x0E8 */ f32 unk_E8[12];
    /* 0x118 */ f32 unk_118[12];
    /* 0x148 */ f32 unk_148[12];
    /* 0x178 */ s32 unk_178[12];
    /* 0x1A8 */ s32 unk_1A8[12];
    /* 0x1D8 */ u8 unk_1D8[12];
} SquirtFXData; // size = 0x1E4

#define NUM_WATER_BLOCK_COMPONENTS 4

typedef struct WaterBlockFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38[NUM_WATER_BLOCK_COMPONENTS];
    /* 0x48 */ f32 unk_48[NUM_WATER_BLOCK_COMPONENTS];
    /* 0x58 */ f32 unk_58[NUM_WATER_BLOCK_COMPONENTS];
    /* 0x68 */ f32 unk_68[NUM_WATER_BLOCK_COMPONENTS];
    /* 0x78 */ f32 unk_78[NUM_WATER_BLOCK_COMPONENTS];
    /* 0x88 */ s32 unk_88[NUM_WATER_BLOCK_COMPONENTS];
} WaterBlockFXData; // size = 0x98

typedef struct WaterfallFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C[12];
    /* 0x5C */ f32 unk_5C[12];
} WaterfallFXData; // size = 0x8C

typedef struct WaterFountainFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
} WaterFountainFXData; // size = 0x44

typedef struct UnderwaterFXData {
    /* 0x000 */ s32 unk_00;
    /* 0x004 */ f32 unk_04;
    /* 0x008 */ f32 unk_08;
    /* 0x00C */ f32 unk_0C;
    /* 0x010 */ s32 unk_10;
    /* 0x014 */ s32 unk_14;
    /* 0x018 */ f32 unk_18;
    /* 0x01C */ u8 unk_1C;
    /* 0x01D */ u8 unk_1D;
    /* 0x01E */ u8 unk_1E;
    /* 0x01F */ u8 unk_1F;
    /* 0x020 */ u8 unk_20;
    /* 0x021 */ u8 unk_21;
    /* 0x022 */ u8 unk_22;
    /* 0x023 */ s8 unk_23[19][13];
    /* 0x11A */ s16 unk_11A[19][13];
} UnderwaterFXData; // size = 0x308

typedef struct LightningBoltFXData {
    /* 0x000 */ s32 type;
    /* 0x004 */ Vec3f tipPos;
    /* 0x010 */ Vec3f startPos;
    /* 0x01C */ Vec3f endPos;
    /* 0x028 */ s32 timeLeft;
    /* 0x02C */ s32 lifetime;
    /* 0x030 */ Color4i outerColor;
    /* 0x040 */ Color3i innerColor;
    /* 0x04C */ f32 widthScale;
    /* 0x050 */ f32 boltVertexPosX[12];
    /* 0x080 */ f32 boltVertexPosY[12];
    /* 0x0B0 */ f32 boltVertexPosZ[12];
    /* 0x0E0 */ f32 edgeLength[12];
    /* 0x110 */ s32 unk_110;
    /* 0x114 */ f32 unk_114;
} LightningBoltFXData; // size = 0x118

typedef struct WaterSplashFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f unk_04;
    /* 0x10 */ Vec3f unk_10;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
} WaterSplashFXData; // size = 0x38

typedef struct SnowmanDollFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ s32 unk_54;
    /* 0x58 */ s32 unk_58;
    /* 0x5C */ s32 unk_5C;
} SnowmanDollFXData; // size = 0x60

typedef struct FrightJarFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 unk_28;
} FrightJarFXData; // size = 0x2C

typedef struct StopWatchFXData {
    /* 0x000 */ s32 unk_00;
    /* 0x004 */ f32 unk_04;
    /* 0x008 */ f32 unk_08;
    /* 0x00C */ f32 unk_0C;
    /* 0x010 */ s32 unk_10;
    /* 0x014 */ s32 unk_14;
    /* 0x018 */ s32 unk_18;
    /* 0x01C */ s32 unk_1C;
    /* 0x020 */ s32 unk_20;
    /* 0x024 */ s32 unk_24;
    /* 0x028 */ f32 unk_28;
    /* 0x02C */ s32 unk_2C;
    /* 0x030 */ f32 unk_30;
    /* 0x034 */ f32 unk_34[10];
    /* 0x05C */ f32 unk_5C[10];
    /* 0x084 */ f32 unk_84[10];
    /* 0x0AC */ f32 unk_AC[10];
    /* 0x0D4 */ f32 unk_D4[10];
    /* 0x0FC */ f32 unk_FC[10];
    /* 0x124 */ s32 unk_124[10];
    /* 0x14C */ s32 unk_14C[10];
} StopWatchFXData; // size = 0x174

typedef struct Effect63FXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ char unk_5C[4];
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 unk_64;
    /* 0x68 */ f32 unk_68;
    /* 0x6C */ f32 unk_6C;
    /* 0x70 */ f32 unk_70;
    /* 0x74 */ f32 unk_74;
    /* 0x78 */ f32 unk_78;
} Effect63FXData; // size = 0x7C

typedef struct ThrowSpinyFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 life;
    /* 0x2C */ s32 lifeDuration;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 rgba;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 gravity;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 yaw;
    /* 0x54 */ f32 rotationSpeed;
    /* 0x58 */ f32 xScale;
    /* 0x5C */ f32 yScale;
    /* 0x60 */ u32 state;
    /* 0x64 */ s32 unk_64;
    /* 0x68 */ s32 timeUntilFall; //how long until spiny falls to ground?
} ThrowSpinyFXData; //sizeof 0x6C

typedef struct Effect65FXData {
    /* 0x000 */ s32 unk_00;
    /* 0x004 */ f32 unk_04;
    /* 0x008 */ f32 unk_08;
    /* 0x00C */ f32 unk_0C;
    /* 0x010 */ s32 unk_10;
    /* 0x014 */ s32 unk_14;
    /* 0x018 */ s32 unk_18;
    /* 0x01C */ s32 unk_1C;
    /* 0x020 */ s32 unk_20;
    /* 0x024 */ s32 unk_24;
    /* 0x028 */ s32 unk_28;
    /* 0x02C */ s32 unk_2C;
    /* 0x030 */ s32 unk_30;
    /* 0x034 */ f32 unk_34;
    /* 0x038 */ Vec3f pos;
    /* 0x044 */ f32 unk_44;
    /* 0x048 */ f32 unk_48;
    /* 0x04C */ f32 unk_4C;
    /* 0x050 */ f32 unk_50[30];
    /* 0x0C8 */ f32 unk_C8[30];
    /* 0x140 */ f32 unk_140[30];
    /* 0x1B8 */ s32 unk_1B8[30];
    /* 0x230 */ s32 unk_230[30]; // a bool
    /* 0x2A8 */ s32 unk_2A8;
    /* 0x2AC */ f32 unk_2AC[30];
} Effect65FXData; // size = 0x324

typedef struct TubbaHeartAttackFXData {
    /* 0x000 */ s32 unk_00;
    /* 0x004 */ f32 unk_04;
    /* 0x008 */ f32 unk_08;
    /* 0x00C */ f32 unk_0C;
    /* 0x010 */ s32 unk_10;
    /* 0x014 */ s32 unk_14;
    /* 0x018 */ s32 unk_18;
    /* 0x01C */ s32 unk_1C;
    /* 0x020 */ s32 unk_20;
    /* 0x024 */ s32 unk_24;
    /* 0x028 */ f32 unk_28;
    /* 0x02C */ f32 unk_2C[25];
    /* 0x090 */ f32 unk_90[25];
    /* 0x0F4 */ f32 unk_F4[25];
    /* 0x158 */ f32 unk_158[25];
    /* 0x1BC */ f32 unk_1BC[25];
    /* 0x220 */ f32 unk_220[25];
    /* 0x284 */ f32 unk_284[25];
    /* 0x2E8 */ f32 unk_2E8[25];
    /* 0x34C */ f32 unk_34C[25];
    /* 0x3B0 */ f32 unk_3B0[25];
    /* 0x414 */ f32 unk_414[25];
    /* 0x478 */ f32 unk_478[25];
    /* 0x4DC */ f32 unk_4DC[25];
    /* 0x540 */ f32 unk_540[25];
    /* 0x5A4 */ f32 unk_5A4[25];
    /* 0x608 */ f32 unk_608[25];
    /* 0x66C */ s32 unk_66C[25];
    /* 0x6D0 */ s32 unk_6D0[25];
    /* 0x734 */ s32 unk_734[25];
} TubbaHeartAttackFXData; // size = 0x798

#define MAX_WHIRLWIND_SEGMENTS 8

typedef struct WhirlwindFXData {
    /* 0x000 */ s32 unk_00;
    /* 0x004 */ Vec3f pos;
    /* 0x010 */ s32 unk_10;
    /* 0x014 */ s32 unk_14;
    /* 0x018 */ s32 primR;
    /* 0x01C */ s32 primG;
    /* 0x020 */ s32 primB;
    /* 0x024 */ s32 primAlpha;
    /* 0x028 */ s32 envR;
    /* 0x02C */ s32 envG;
    /* 0x030 */ s32 envB;
    /* 0x034 */ f32 unk_34;
    /* 0x038 */ f32 unk_38[MAX_WHIRLWIND_SEGMENTS];
    /* 0x058 */ f32 unk_58[MAX_WHIRLWIND_SEGMENTS];
    /* 0x078 */ f32 unk_78[MAX_WHIRLWIND_SEGMENTS];
    /* 0x098 */ f32 unk_98[MAX_WHIRLWIND_SEGMENTS];
    /* 0x0B8 */ f32 unk_B8[MAX_WHIRLWIND_SEGMENTS];
    /* 0x0D8 */ f32 unk_D8[MAX_WHIRLWIND_SEGMENTS];
    /* 0x0F8 */ f32 unk_F8[MAX_WHIRLWIND_SEGMENTS];
    /* 0x118 */ f32 unk_118[MAX_WHIRLWIND_SEGMENTS];
    /* 0x138 */ f32 unk_138;
    /* 0x13C */ f32 unk_13C;
    /* 0x140 */ f32 unk_140;
} WhirlwindFXData; // size = 0x144

// Likely to be the same as GreenImpactFXData and ShockwaveFXData
typedef struct RedImpactFXData {
    /* 0x00 */ u16 unk_00;
    /* 0x02 */ char unk_02[2]; // likely padding
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ Color_RGB8 unk_50;
    /* 0x53 */ Color_RGB8 unk_53;
    /* 0x56 */ char unk_56[2]; // likely padding
} RedImpactFXData; // size = 0x58

typedef struct FloatingCloudPuffFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ f32 unk_38;
} FloatingCloudPuffFXData; // size = 0x3C

typedef struct EnergyInOutFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 scale;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
} EnergyInOutFXData; // size = 0x48

typedef struct Effect6BFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ char unk_10[12];
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ char unk_24[8];
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 scale;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ char unk_40[0x4];
} Effect6BFXData; // size = 0x44

typedef struct TattleWindowFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 scale;
    /* 0x20 */ Vec3f rot;
    /* 0x2C */ Vec2f offset;
    /* 0x34 */ u8 unk_34;
    /* 0x35 */ u8 unk_35;
} TattleWindowFXData; // size = 0x38

typedef struct ShinyFlareFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
} ShinyFlareFXData; // size = 0x30

typedef struct HuffPuffBreathFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ s32 primR;
    /* 0x1C */ s32 primG;
    /* 0x20 */ s32 primB;
    /* 0x24 */ s32 primA;
    /* 0x28 */ s32 envR;
    /* 0x2C */ s32 envG;
    /* 0x30 */ s32 envB;
    /* 0x34 */ s32 envA;
    /* 0x38 */ f32 texOffsetX;
    /* 0x3C */ f32 speedX;
    /* 0x40 */ f32 texOffsetY;
    /* 0x44 */ f32 speedY;
    /* 0x48 */ f32 angle;
    /* 0x4C */ f32 scale;
} HuffPuffBreathFXData; // size = 0x50

typedef struct ColdBreathFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;  // TODO:  Vec3i color?
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40;
} ColdBreathFXData; // size = 0x44

typedef struct EmbersFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ s32 unk_64;
    /* 0x68 */ f32 unk_68;
    /* 0x6C */ f32 unk_6C;
} EmbersFXData; // size = 0x70

typedef struct HieroglyphsFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ f32 unk_38;
} HieroglyphsFXData; // size = 0x3C

typedef struct MiscParticlesFXData {
    /* 0x00 */ s32 variation;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ f32 scaleX;
    /* 0x14 */ f32 scaleY;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ char unk_20[4];
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ s32 animTime;
    /* 0x30 */ s32 timeLeft;
    /* 0x34 */ s32 lifetime;
    /* 0x38 */ Color4i innerColor;
    /* 0x48 */ Color4i glowColor;
    /* 0x58 */ f32 scale;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
} MiscParticlesFXData; // size = 0x64

typedef struct StaticStatusFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
} StaticStatusFXData; // size = 0x38

typedef struct MovingCloudFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ f32 unk_44;
} MovingCloudFXData; // size = 0x48

typedef struct Effect75FXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ Color3i primCol;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ Color3i envCol;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 masterAlpha;
    /* 0x3C */ f32 scale;
    /* 0x40 */ f32 unk_40;
    /* 0x44 */ f32 unk_44;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
    /* 0x58 */ f32 unk_58;
    /* 0x5C */ f32 unk_5C;
    /* 0x60 */ f32 unk_60;
    /* 0x64 */ f32 unk_64;
    /* 0x68 */ f32 unk_68;
    /* 0x6C */ f32 unk_6C;
    /* 0x70 */ f32 unk_70;
    /* 0x74 */ f32 unk_74;
    /* 0x78 */ f32 unk_78;
    /* 0x7C */ f32 unk_7C;
} Effect75FXData; // size = 0x80

typedef struct FireworkRocketFXData {
    /* 0x00 */ s32 variation;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ Vec3f velocity;
    /* 0x1C */ s32 timeLeft;
    /* 0x20 */ s32 lifeTime;
    /* 0x24 */ s32 r;
    /* 0x28 */ s32 g;
    /* 0x2C */ s32 b;
    /* 0x30 */ s32 minBlurAlpha;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ f32 radius;
    /* 0x48 */ f32 maxRadius;
    /* 0x4C */ s32 isExploded;
    /* 0x50 */ f32 rocketX[4];
    /* 0x60 */ f32 rocketY[4];
    /* 0x70 */ f32 rocketZ[4];
    /* 0x80 */ f32 rocketVelocityX[4];
    /* 0x90 */ f32 rocketVelocityY[4];
    /* 0xA0 */ f32 rocketVelocityZ[4];
} FireworkRocketFXData; // size = 0xB0

typedef struct PeachStarBeamSpirit {
    /* 0x00 */ s32 flags;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ Vec3f lockedPos;
} PeachStarBeamSpirit; // size = 0x1C

typedef struct PeachStarBeamFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifetime;
    /* 0x18 */ s32 primR;
    /* 0x1C */ s32 primG;
    /* 0x20 */ s32 primB;
    /* 0x24 */ s32 beamAlpha;
    /* 0x28 */ s32 envR;
    /* 0x2C */ s32 envG;
    /* 0x30 */ s32 envB;
    /* 0x34 */ s32 envA;
    /* 0x38 */ f32 beamScale;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ f32 rotationSpeed;
    /* 0x44 */ f32 rotationAngle;
    /* 0x48 */ f32 circleRadius;
    /* 0x4C */ Vec3f circleCenter;
    /* 0x58 */ f32 twinkYOffset;
    /* 0x5C */ PeachStarBeamSpirit spirits[8];
} PeachStarBeamFXData; // size = 0x13C

typedef struct ChapterChangeFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec2f chapterPos;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ Vec2f endOfPos;
    /* 0x18 */ s32 timeLeft;
    /* 0x1C */ s32 lifetime;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40;
    /* 0x44 */ s32 unk_44;
    /* 0x48 */ s32 unk_48;
    /* 0x4C */ s32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ s32 unk_54;
} ChapterChangeFXData; // size = 0x58

typedef struct IceShardFXData {
    /* 0x00 */ s32 type;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifetime;
    /* 0x18 */ Color4i primCol;
    /* 0x28 */ Color4i envCol;
    /* 0x38 */ f32 scale;
    /* 0x3C */ f32 rotation;
    /* 0x40 */ f32 angularVel;
    /* 0x44 */ f32 animFrame;
    /* 0x48 */ f32 animRate;
    /* 0x4C */ Vec3f vel;
    /* 0x58 */ f32 gravAccel;
} IceShardFXData; // size = 0x5C

typedef struct SpiritCardFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ struct EffectInstance* unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 yaw;
    /* 0x28 */ char unk_28[0xC];
    /* 0x34 */ u8 chapter;
    /* 0x35 */ char unk_35[3];
} SpiritCardFXData; // size = 0x38

#define MAX_LIL_OINKS 11

enum LilOinkFlags {
    LIL_OINK_FLAG_VISIBLE = 1,
    LIL_OINK_FLAG_ANIM_CHANGED = 2,
};

enum LilOinkTypes {
    LIL_OINK_TYPE_BLACK     = 0,
    LIL_OINK_TYPE_WHITE     = 1,
    LIL_OINK_TYPE_PINK      = 2,
    LIL_OINK_TYPE_PIKACHU   = 3,
    LIL_OINK_TYPE_SHROOM    = 4,
    LIL_OINK_TYPE_FLOWER    = 5,
    LIL_OINK_TYPE_STAR      = 6,
    LIL_OINK_TYPE_QUESTION  = 7,
    LIL_OINK_TYPE_SILVER    = 8,
    LIL_OINK_TYPE_GOLD      = 9,
};

enum LilOinkAnims {
    LIL_OINK_ANIM_0 = 0,
    LIL_OINK_ANIM_1 = 1,
    LIL_OINK_ANIM_2 = 2,
    LIL_OINK_ANIM_3 = 3,
    LIL_OINK_ANIM_4 = 4,
    LIL_OINK_ANIM_5 = 5,
};

typedef struct LilOinkFXData {
    /* 0x000 */ s32 timeLeft;
    /* 0x004 */ s32 lifetime;
    /* 0x008 */ s32 flags[MAX_LIL_OINKS];
    /* 0x034 */ f32 x[MAX_LIL_OINKS];
    /* 0x060 */ f32 y[MAX_LIL_OINKS];
    /* 0x08C */ f32 z[MAX_LIL_OINKS];
    /* 0x0B8 */ f32 rot[MAX_LIL_OINKS];
    /* 0x0E4 */ u8 type[MAX_LIL_OINKS];
    /* 0x0EF */ s8 nextAnim[MAX_LIL_OINKS];
    /* 0x0FA */ u8 anim[MAX_LIL_OINKS];
    /* 0x105 */ u8 gfxFrame[MAX_LIL_OINKS];
    /* 0x110 */ f32 jumpOffset[MAX_LIL_OINKS];
    /* 0x13C */ s8 animTime[MAX_LIL_OINKS];
} LilOinkFXData; // size = 0x148

typedef struct SomethingRotatingFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ u8 primAlpha;
    /* 0x25 */ s8 unk_25;
    /* 0x26 */ Color_RGB8 env;
    /* 0x29 */ u8 state;
    /* 0x2A */ char unk_2A[2];
    /* 0x2C */ f32 unk_2C;
} SomethingRotatingFXData; // size = 0x30

typedef struct BreakingJunkFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ Vec3f vel;
    /* 0x1C */ s32 timeLeft;
    /* 0x20 */ s32 lifeTime;
    /* 0x24 */ f32 scale;
    /* 0x28 */ f32 rot;
    /* 0x2C */ s16 primR;
    /* 0x2E */ s16 primG;
    /* 0x30 */ s16 primB;
    /* 0x32 */ s16 primA;
    /* 0x34 */ s16 envR;
    /* 0x36 */ s16 envG;
    /* 0x38 */ s16 envB;
    /* 0x3A */ s16 envA;
} BreakingJunkFXData; // size = unknown

enum {
    FX_BUFF_DATA_WATER_BLOCK    = 0,
    FX_BUFF_DATA_CLOUD_NINE     = 1,
    FX_BUFF_DATA_TURBO_CHARGE   = 2
};

typedef struct BuffData {
    /* 0x00 */ s16 alpha;
    /* 0x02 */ s16 turnsDisplay;
    /* 0x04 */ s16 turnsLeft;
    /* 0x06 */ s16 state;
    /* 0x08 */ s16 stateTimer;
} BuffData; // size = 0xA

typedef struct PartnerBuffFXData {
    /* 0x00 */ s16 useRandomValues;
    /* 0x02 */ s16 unk_02;
    /* 0x04 */ s32 timeLeft;
    /* 0x08 */ s32 lifeTime;
    /* 0x0C */ BuffData unk_0C[3];
} PartnerBuffFXData; // size = 0x2C

typedef struct QuizmoAssistantFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f position;
    /* 0x10 */ s32 vanishTimer;
    /* 0x14 */ s32 lifetime;
    /* 0x18 */ s32 fadeInAmt; // 0 = all-black, FF = fully-visible
    /* 0x1C */ s32 anim;
} QuizmoAssistantFXData; // size = 0x20

typedef struct IcePillarFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ Color_RGBA8 prim;
    /* 0x1C */ Color_RGBA8 env;
    /* 0x20 */ f32 scale;
    /* 0x24 */ s8 unk_24;
    /* 0x25 */ s8 unk_25;
    /* 0x26 */ char unk_26[0x2];
    /* 0x28 */ struct EffectInstance* miscParticles;
} IcePillarFXData; // size = 0x2C

// sun shine directions
enum {
    FX_SUN_FROM_LEFT    = 0,
    FX_SUN_FROM_RIGHT   = 1,
};

typedef struct SunFXData {
    /* 0x00 */ s32 shineFromRight;
    /* 0x04 */ Vec3f pos; // does nothing
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ Color_RGB8 primColor;
    /* 0x1B */ Color_RGBA8 envColor;
    /* 0x1F */ char unk_1F[0x1];
    /* 0x20 */ f32 texScrollAmt[5];
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 alpha;
    /* 0x3C */ s32 targetAlpha;
} SunFXData; // size = 0x40

typedef struct StarSpiritsEnergyFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ f32 unk_3C;
    /* 0x40 */ f32 unk_40[4];
    /* 0x50 */ s32 unk_50[4];
    /* 0x60 */ s32 unk_60;
    /* 0x64 */ s32 unk_64;
    /* 0x68 */ s32 unk_68;
    /* 0x6C */ s32 unk_6C;
    /* 0x70 */ s32 unk_70;
    /* 0x74 */ s32 unk_74;
} StarSpiritsEnergyFXData; // size = 0x78

typedef struct PinkSparklesFXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ s32 unk_28;
} PinkSparklesFXData; // size = 0x2C

typedef struct StarOutlineFXData {
    /* 0x00 */ s16 unk_00;
    /* 0x02 */ s16 unk_02;
    /* 0x04 */ Vec3f pos;
    /* 0x10 */ s32 timeLeft;
    /* 0x14 */ s32 lifeTime;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ s32 unk_34;
    /* 0x38 */ f32 unk_38;
    /* 0x3C */ Vec3f unk_3C;
    /* 0x48 */ f32 unk_48;
    /* 0x4C */ f32 unk_4C;
    /* 0x50 */ f32 unk_50;
    /* 0x54 */ f32 unk_54;
} StarOutlineFXData; // size = 0x58

typedef struct Effect86FXData {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ s32 unk_24;
    /* 0x28 */ s32 unk_28;
    /* 0x2C */ s32 unk_2C;
    /* 0x30 */ s32 unk_30;
    /* 0x34 */ f32 unk_34;
} Effect86FXData; // size = 0x38

typedef union {
    s32* any;
    struct Effect00FXData*              unk_00;
    struct BigSmokePuffFXData*          bigSmokePuff;
    struct Effect02FXData*              unk_02;
    struct Effect03FXData*              unk_03;
    struct Effect04FXData*              unk_04;
    struct Effect05FXData*              unk_05;
    struct LandingDustFXData*           landingDust;
    struct WalkingDustFXData*           walkingDust;
    struct FlowerFXData*                flowerSplash; // note: shared
    struct FlowerFXData*                flowerTrail;  // note: shared
    struct CloudPuffFXData*             cloudPuff;
    struct CloudTrailFXData*            cloudTrail;
    struct FootprintFXData*             footprint;
    struct FloatingFlowerFXData*        floatingFlower;
    struct SnowflakeFXData*             snowflake;
    struct StarFXData*                  star;
    struct EmoteFXData*                 emote;
    struct SparklesFXData*              sparkles;
    struct ShapeSpellFXData*            shapeSpell;
    struct GatherEnergyPinkFXData*      gatherEnergyPink;
    struct DropLeavesFXData*            dropLeaves;
    struct DustFXData*                  dust;
    struct ShatteringStonesFXData*      shatteringStones;
    struct SmokeRingFXData*             smokeRing;
    struct DamageStarsFXData*           damageStars;
    struct ExplosionFXData*             explosion;
    struct LensFlareFXData*             lensFlare;
    struct GotItemOutlineFXData*        gotItemOutline;
    struct SpikyWhiteAuraFXData*        spikyWhiteAura;
    struct SmokeImpactFXData*           smokeImpact;
    struct DamageIndicatorFXData*       damageIndicator;
    struct PurpleRingFXData*            purpleRing;
    struct FlameFXData*                 flame;
    struct StarsBurstFXData*            starsBurst;
    struct StarsShimmerFXData*          starsShimmer;
    struct RisingBubbleFXData*          risingBubble;
    struct RingBlastFXData*             ringBlast;
    struct ShockwaveFXData*             shockwave;
    struct MusicNoteFXData*             musicNote;
    struct SmokeBurstFXData*            smokeBurst;
    struct SweatFXData*                 sweat;
    struct SleepBubbleFXData*           sleepBubble;
    struct Unk2AFXData*                 unk_2A;
    struct WindyLeavesFXData*           windyLeaves;
    struct FallingLeavesFXData*         fallingLeaves;
    struct StarsSpreadFXData*           starsSpread;
    struct SteamBurstFXData*            steamBurst;
    struct StarsOrbitingFXData*         starsOrbiting;
    struct BigSnowflakesFXData*         bigSnowflakes;
    struct DebuffFXData*                debuff;
    struct GreenImpactFXData*           greenImpact;
    struct RadialShimmerFXData*         radialShimmer;
    struct EndingDecalsFXData*          endingDecals;
    struct LightRaysFXData*             lightRays;
    struct LightningFXData*             lightning;
    struct FireBreathFXData*            fireBreath;
    struct ShimmerBurstFXData*          shimmerBurst;
    struct EnergyShockwaveFXData*       energyShockwave;
    struct ShimmerWaveFXData*           shimmerWave;
    struct AuraFXData*                  aura;
    struct BulbGlowFXData*              bulbGlow;
    struct Effect3DFXData*              unk_3D;
    struct BlastFXData*                 blast;
    struct FireFlowerFXData*            fireFlower;
    struct RecoverFXData*               recover;
    struct DisableXFXData*              disableX;
    struct BombetteBreakingFXData*      bombetteBreaking;
    struct FireworkFXData*              firework;
    struct ConfettiFXData*              confetti;
    struct SnowfallFXData*              snowfall;
    struct Effect46FXData*              unk_46;
    struct GatherMagicFXData*           gatherMagic;
    struct AttackResultTextFXData*      attackResultText;
    struct SmallGoldSparkleFXData*      smallGoldSparkle;
    struct FlashingBoxShockwaveFXData*  flashingBoxShockwave;
    struct BalloonFXData*               balloon;
    struct FloatingRockFXData*          floatingRock;
    struct ChompDropFXData*             chompDrop;
    struct QuizmoStageFXData*           quizmoStage;
    struct RadiatingEnergyOrbFXData*    radiatingEnergyOrb;
    void*                               quizmoAnswer;
    struct MotionBlurFlameFXData*       motionBlurFlame;
    struct EnergyOrbWaveFXData*         energyOrbWave;
    struct MerlinHouseStarsFXData*      merlinHouseStars;
    struct QuizmoAudienceFXData*        quizmoAudience;
    struct ButterfliesFXData*           butterflies;
    struct StatChangeFXData*            statChange;
    struct SnakingStaticFXData*         snakingStatic;
    struct ThunderboltRingFXData*       thunderboltRing;
    struct SquirtFXData*                squirt;
    struct WaterBlockFXData*            waterBlock;
    struct WaterfallFXData*             waterfall;
    struct WaterFountainFXData*         waterFountain;
    struct UnderwaterFXData*            underwater;
    struct LightningBoltFXData*         lightningBolt;
    struct WaterSplashFXData*           waterSplash;
    struct SnowmanDollFXData*           snowmanDoll;
    struct FrightJarFXData*             frightJar;
    struct StopWatchFXData*             stopWatch;
    struct Effect63FXData*              unk_63;
    struct ThrowSpinyFXData*            throwSpiny;
    struct Effect65FXData*              unk_65;
    struct TubbaHeartAttackFXData*      tubbaHeartAttack;
    struct WhirlwindFXData*             whirlwind;
    struct RedImpactFXData*             redImpact;
    struct FloatingCloudPuffFXData*     floatingCloudPuff;
    struct Effect6AFXData*              unk_6A;
    struct EnergyInOutFXData*           energyInOut;
    struct TattleWindowFXData*          tattleWindow;
    struct ShinyFlareFXData*            shinyFlare;
    struct HuffPuffBreathFXData*        huffPuffBreath;
    struct ColdBreathFXData*            coldBreath;
    struct EmbersFXData*                embers;
    struct HieroglyphsFXData*           hieroglyphs;
    struct MiscParticlesFXData*         miscParticles;
    struct StaticStatusFXData*          staticStatus;
    struct MovingCloudFXData*           movingCloud;
    struct Effect75FXData*              unk_75;
    struct Effect76FXData*              unk_76;
    struct FireworkRocketFXData*        fireworkRocket;
    struct PeachStarBeamFXData*         peachStarBeam;
    struct ChapterChangeFXData*         chapterChange;
    struct IceShardFXData*              iceShard;
    struct SpiritCardFXData*            spiritCard;
    struct LilOinkFXData*               lilOink;
    struct SomethingRotatingFXData*     somethingRotating;
    struct BreakingJunkFXData*          breakingJunk;
    struct PartnerBuffFXData*           partnerBuff;
    struct QuizmoAssistantFXData*       quizmoAssistant;
    struct IcePillarFXData*             icePillar;
    struct SunFXData*                   sun;
    struct StarSpiritsEnergyFXData*     starSpiritsEnergy;
    struct PinkSparklesFXData*          pinkSparkles;
    struct StarOutlineFXData*           starOutline;
    struct Effect86FXData*              unk_86;
} EffectData;

typedef struct EffectInstance {
    /* 0x00 */ s32 flags;
    /* 0x04 */ s32 effectIndex;
    /* 0x08 */ s32 numParts;
    /* 0x0C */ EffectData data;
    /* 0x10 */ struct EffectGraphics* graphics;
} EffectInstance; // size = 0x14

// composite struct for watt effects -- NOT the same as StaticStatusFXData
typedef struct WattEffectData {
    /* 0x00 */ s32 flags;
    /* 0x04 */ s32 unk_04;
    /* 0x08 */ s32 angle;
    /* 0x0C */ s32 unk_0C;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ EffectInstance* effect1;
    /* 0x18 */ EffectInstance* effect2;
    /* 0x1C */ s32 debuff;
} WattEffectData;

typedef struct StarSpiritData {
    /* 0x00 */ f32 unk_00;
    /* 0x04 */ f32 unk_04;
    /* 0x08 */ f32 unk_08;
    /* 0x0C */ f32 unk_0C;
    /* 0x10 */ f32 unk_10;
    /* 0x14 */ f32 unk_14;
    /* 0x18 */ f32 unk_18;
    /* 0x1C */ f32 unk_1C;
    /* 0x20 */ f32 unk_20;
    /* 0x24 */ f32 unk_24;
    /* 0x28 */ f32 unk_28;
    /* 0x2C */ f32 unk_2C;
    /* 0x30 */ f32 unk_30;
    /* 0x34 */ f32 unk_34;
    /* 0x38 */ s32 unk_38;
    /* 0x3C */ s32 unk_3C;
    /* 0x40 */ s32 unk_40; // a shadowID
    /* 0x44 */ s16 unk_44;
    /* 0x46 */ s16 unk_46;
    /* 0x48 */ s16 unk_48;
    /* 0x4A */ s16 unk_4A;
    /* 0x4C */ s16 unk_4C;
    /* 0x4E */ s16 unk_4E;
    /* 0x50 */ EffectInstance* unk_50;
    /* 0x54 */ EffectInstance* unk_54;
} StarSpiritData; // size = 0x58

typedef struct EffectBlueprint {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ s32 effectID;
    /* 0x08 */ void (*init)(EffectInstance* effectInst);
    /* 0x0C */ void (*update)(EffectInstance* effectInst);
    /* 0x10 */ void (*renderWorld)(EffectInstance* effectInst);
    /* 0x14 */ void (*unk_14)(EffectInstance* effectInst);
} EffectBlueprint; // size = 0x18

typedef struct EffectGraphics {
    /* 0x00 */ s32 flags;
    /* 0x04 */ s32 effectIndex;
    /* 0x08 */ s32 instanceCounter;
    /* 0x0C */ s32 freeDelay;
    /* 0x10 */ void (*update)(EffectInstance* effectInst);
    /* 0x14 */ void (*renderWorld)(EffectInstance* effectInst);
    /* 0x18 */ void (*renderUI)(EffectInstance* effectInst);
    /* 0x1C */ s32* data;
} EffectGraphics; // size = 0x20

typedef struct EffectTableEntry {
    /* 0x00 */ void (*entryPoint);
    /* 0x04 */ void* dmaStart;
    /* 0x08 */ void* dmaEnd;
    /* 0x0C */ void* dmaDest;
    /* 0x10 */ void* graphicsDmaStart;
    /* 0x14 */ void* graphicsDmaEnd;
} EffectTableEntry; // size = 0x18

enum FireBreathType {
    FIRE_BREATH_LARGE = 0,
    FIRE_BREATH_SMALL = 1,
    FIRE_BREATH_TINY  = 2,
};

EffectInstance* create_effect_instance(EffectBlueprint* effectBp);
void remove_effect(EffectInstance*);
s32 load_effect(s32 effectIndex);

void fx_big_dust_puff(s32, f32, f32, f32, s32);
void fx_big_smoke_puff(f32, f32, f32);
void fx_landing_dust(s32, f32, f32, f32, f32);
void fx_walking_dust(s32, f32, f32, f32, f32, f32);
void fx_flower_splash(f32, f32, f32, f32);
void fx_flower_trail(s32, f32, f32, f32, f32, f32);
EffectInstance* fx_cloud_puff(f32, f32, f32, f32);
EffectInstance* fx_cloud_trail(s32, f32, f32, f32);
EffectInstance* fx_footprint(f32, f32, f32, f32, f32);
EffectInstance* fx_floating_flower(s32, f32, f32, f32, s32);
EffectInstance* fx_snowflake(f32, f32, f32, s32);
void fx_star(s32, f32, f32, f32, f32, f32, f32, f32);
void fx_emote(s32, Npc*, f32, f32, f32, f32, f32, s32, s32*);
void fx_sparkles(s32, f32, f32, f32, f32);
EffectInstance* fx_shape_spell(s32, f32, f32, f32, f32, f32, f32, s32);
EffectInstance* fx_gather_energy_pink(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_drop_leaves(s32, f32, f32, f32, s32);
EffectInstance* fx_dust(s32, f32, f32, f32, s32);
void fx_shattering_stones(s32, f32, f32, f32, f32);
void fx_smoke_ring(s32, f32, f32, f32);
void fx_damage_stars(s32, f32, f32, f32, f32, f32, f32, s32);
void fx_explosion(s32, f32, f32, f32);
EffectInstance* fx_lens_flare(s32, f32, f32, f32, s32);
EffectInstance* fx_got_item_outline(s32, f32, f32, f32, f32, EffectInstance**);
EffectInstance* fx_spiky_white_aura(s32, f32, f32, f32, s32);
void fx_smoke_impact(s32, f32, f32, f32, f32, s32, f32, s32);
EffectInstance* fx_damage_indicator(s32, f32, f32, f32, f32, f32, s32, EffectInstance**);
EffectInstance* fx_purple_ring(s32, f32, f32, f32, f32, f32, f32, f32);
EffectInstance* fx_flame(s32, f32, f32, f32, f32, EffectInstance**);
EffectInstance* fx_stars_burst(s32, f32, f32, f32, f32, f32, s32);
void fx_stars_shimmer(s32, f32, f32, f32, f32, f32, s32, s32);
EffectInstance* fx_rising_bubble(u32, f32, f32, f32, f32);
EffectInstance* fx_ring_blast(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_shockwave(s32, f32, f32, f32);
void fx_music_note(s32, f32, f32, f32);
EffectInstance* fx_smoke_burst(s32, f32, f32, f32, f32, s32);
void fx_sweat(s32, f32 x, f32 y, f32 z, f32 radius, f32 pitch, s32 duration);
void fx_sleep_bubble(s32, f32, f32, f32, f32, f32, EffectInstance**);
EffectInstance* fx_2A(s32, f32, f32, f32);
EffectInstance* fx_windy_leaves(s32, f32, f32, f32);
EffectInstance* fx_falling_leaves(s32, f32, f32, f32);
void fx_stars_spread(s32, f32, f32, f32, s32, s32);
void fx_steam_burst(s32, f32, f32, f32, f32, s32);
void fx_stars_orbiting(s32, f32, f32, f32, f32, s32, EffectInstance**);
void fx_big_snowflakes(s32, f32, f32, f32);
EffectInstance* fx_debuff(s32, f32, f32, f32);
void fx_green_impact(s32, f32, f32, f32, f32);
EffectInstance* fx_radial_shimmer(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_ending_decals(s32, f32, f32, f32, f32, EffectInstance**);
EffectInstance* fx_light_rays(s32, f32, f32, f32, f32, s32*);
EffectInstance* fx_lightning(s32, f32, f32, f32, f32, f32);
EffectInstance* fx_fire_breath(s32, f32, f32, f32, f32, f32, f32, s32, s32, s32);
EffectInstance* fx_shimmer_burst(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_energy_shockwave(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_shimmer_wave(s32, f32, f32, f32, f32, f32, s32, s32);
void fx_aura(s32, f32, f32, f32, f32, EffectInstance**);
EffectInstance* fx_bulb_glow(s32, f32, f32, f32, f32, EffectInstance**);
void fx_3D(s32, f32, f32, f32, f32, f32, f32, s32, s32*);
EffectInstance* fx_blast(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_fire_flower(s32, f32, f32, f32, s32);
EffectInstance* fx_recover(s32, f32, f32, f32, s32);
EffectInstance* fx_disable_x(s32, f32, f32, f32, s32);
EffectInstance* fx_bombette_breaking(s32, s32, s32, f32, s32, s32);
EffectInstance* fx_firework(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_confetti(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_snowfall(s32, s32);
EffectInstance* fx_46(s32, PlayerStatus*, f32, s32);
EffectInstance* fx_gather_magic(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_attack_result_text(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_small_gold_sparkle(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_flashing_box_shockwave(s32, f32, f32, f32, f32, f32);
EffectInstance* fx_balloon(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_floating_rock(s32, f32, f32, f32, f32, f32, f32, f32, s32);
EffectInstance* fx_chomp_drop(s32, f32, f32, f32, f32, s32, f32, s32, f32, s32);
EffectInstance* fx_quizmo_stage(s32, f32, f32, f32);
EffectInstance* fx_radiating_energy_orb(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_quizmo_answer(s32, f32, f32, f32);
EffectInstance* fx_motion_blur_flame(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_energy_orb_wave(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_merlin_house_stars(s32, f32, f32, f32);
EffectInstance* fx_quizmo_audience(s32, f32, f32, f32);
EffectInstance* fx_butterflies(s32, f32, f32, f32);
EffectInstance* fx_stat_change(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_snaking_static(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_thunderbolt_ring(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_squirt(s32, f32, f32, f32, f32, f32, f32, f32, s32);
EffectInstance* fx_water_block(s32, f32 x, f32 y, f32 z, f32 scale /* maybe */, s32);
EffectInstance* fx_waterfall(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_water_fountain(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_underwater(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_lightning_bolt(s32, f32, f32, f32, f32, f32, f32, f32, s32);
EffectInstance* fx_water_splash(s32, f32 x, f32 y, f32 z, f32 scale /* maybe */, s32);
EffectInstance* fx_snowman_doll(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_fright_jar(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_stop_watch(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_63(s32, f32, f32, f32, f32, f32, f32, f32, s32, s32);
EffectInstance* fx_throw_spiny(s32, f32, f32, f32, f32, f32, f32, f32, s32);
EffectInstance* fx_65(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_tubba_heart_attack(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_whirlwind(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_red_impact(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_floating_cloud_puff(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_6A(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_energy_in_out(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_tattle_window(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_shiny_flare(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_huff_puff_breath(s32, f32, f32, f32, f32, f32, f32, s32);
EffectInstance* fx_cold_breath(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_embers(s32, f32, f32, f32, f32, f32, f32, s32, s32, f32, f32);
EffectInstance* fx_hieroglyphs(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_misc_particles(s32, f32, f32, f32, f32, f32, f32, s32, s32);
EffectInstance* fx_static_status(s32, f32, f32, f32, f32, s32, s32); //returns ptr to struct unk_802BE310* in watt.c
EffectInstance* fx_moving_cloud(s32, f32, f32, f32, f32, f32, f32, f32, f32);
EffectInstance* fx_75(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_76(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_firework_rocket(s32, f32, f32, f32, f32, f32, f32, f32, s32);
EffectInstance* fx_peach_star_beam(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_chapter_change(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_ice_shard(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_spirit_card(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_lil_oink(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_something_rotating(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_breaking_junk(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_partner_buff(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_quizmo_assistant(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_ice_pillar(s32, f32 x, f32 y, f32 z, f32, s32);
EffectInstance* fx_sun(s32, f32, f32, f32, f32, s32 time);
EffectInstance* fx_star_spirits_energy(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_pink_sparkles(s32, f32, f32, f32, f32, f32);
EffectInstance* fx_star_outline(s32, f32, f32, f32, f32, s32);
EffectInstance* fx_86(s32, f32, f32, f32, f32, s32);

void fx_sun_undeclared(s32, s32, s32, s32, s32, s32);

#endif
