Skip to content

Keyframer Classes

widberg edited this page Mar 26, 2023 · 46 revisions

To decompress the Compressed Keyframer values, divide the signed 16-bit integers by 2000. This yields normalized quaternions in the case of KeyframerRot_Z, so I assume it is the correct conversion but I have not checked the disassembly for confirmation.

Float Keyframers

struct KeyframerFloat_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        float value;
        float tangentIn;
        float tangentOut;
     }> data;
};

struct KeyframerFloatComp_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        std::uint16_t value;
        std::uint16_t tangentIn;
        std::uint16_t tangentOut;
        std::uint16_t padding;
    }> data;
};

struct KeyframerFloatLinearComp_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        std::uint16_t value;
        std::uint16_t padding;
    }> data;
};

Vec2f Keyframer

struct KeyframerVec2fLinear_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        Vec2f data;
    }> data;
};

struct KeyframerVec2fLinearComp_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        Vec2i16 value;
    }> data;
};

Vec3f Keyframer

struct KeyframerVec3fComp_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        Vec3i16 value;
        Vec3i16 tangentIn;
        Vec3i16 tangentOut;
        std::uint16_t padding;
            // Always 0xFF
    }> data;
};

struct KeyframerVec3fLinear_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        Vec3f value;
    }> data;
};

struct KeyframerExtVec3f_Z {
    std::uint16_t flags;
    PascalArray<struct {
        std::uint16_t time;
        std::uint16_t flags;
            // 0x80
        Vec3f value;
        Vec3f tangentIn;
        Vec3f tangentOut;
    }> data;
};

Vec4f Keyframer

struct KeyframerVec4fLinear_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        Vec4f value;
    }> data;
};

struct KeyframerVec4fLinearComp_Z {
    std::uint16_t flags;
    PascalArray<struct {
        float time;
        Vec4f value;
            // Even though this struct has Comp in the name
            // The value is not compressed. Strange.
    }> data;
};

Rotation Keyframer

struct KeyframerRot_Z {
    PascalArray<struct {
        float time;
        Quati16 rotation;
    }> data;
};

Beszier Rotation Keyframer

struct KeyframerBezierRot_Z {
    PascalArray<struct {
        float time;
        std::uint16_t a;
        std::uint16_t b;
        std::uint16_t c;
        std::uint16_t d;
        std::uint16_t e;
        std::uint16_t f;
        std::uint16_t g;
        std::uint16_t h;
        std::uint16_t i;
        std::uint16_t j;
        std::uint16_t k;
        std::uint16_t l;
        std::uint16_t m;
        std::uint16_t n;
        std::uint16_t o;
        std::uint16_t p;
        std::uint16_t q;
        std::uint16_t r;
    }> data;
};

Handle Keyframer

struct KeyframerHdl_Z // KeyframerHandle
{
    PascalArray<struct {
        float time;
        crc32_t crc32;
    }> data;
};

Flag Keyframer

struct KeyframerFlag_Z {
    PascalArray<struct {
        float time;
        std::uint32_t flag;
    }> data;
};

Message Keyframer

Sends Message_Zs

struct KeyframerMessage_Z {
    PascalArray<struct {
        float time;
        PascalArray<struct {
            std::uint32_t messageClass;
                // Observed values:
                //   * 12
                //   * 13
                //   * 32
                //   * 36 - Sound_Z related
            crc32_t recieverCRC32;
                // 0
                // Sound_Z crc32s
            std::uint32_t c;
                // Observed values:
                //   * 0
                //   * 15
                //   * 792146210
                //   * 1162695237
                //   * 10295924
            float parameter;
            crc32_t messageID;
        }> data;
    }> data;
};

Home
FAQ

For FMTK Users and Mod Developers

Read the Docs

For FMTK Developers

Asobo BigFile Format Specification
Asobo Classes
      Animation_Z
      Binary_Z
      Bitmap_Z
      Camera_Z
      CollisionVol_Z
      Fonts_Z
      GameObj_Z
      GenWorld_Z
      GwRoad_Z
      Keyframer*_Z
      Light_Z
      LightData_Z
      Lod_Z
      LodData_Z
      Material_Z
      MaterialAnim_Z
      MaterialObj_Z
      Mesh_Z
      MeshData_Z
      Node_Z
      Omni_Z
      Particles_Z
      ParticlesData_Z
      RotShape_Z
      RotShapeData_Z
      Rtc_Z
      Skel_Z
      Skin_Z
      Sound_Z
      Spline_Z
      SplineGraph_Z
      Surface_Z
      SurfaceDatas_Z
      UserDefine_Z
      Warp_Z
      World_Z
      WorldRef_Z
Asobo File Format Idioms
Asobo CRC32
Asobo LZ Compression
Asobo Arithmetic Coding Compression
Asobo Save Game File Format Specification
Asobo Audio Formats
TotemTech/ToonTech/Zouna/ACE/BSSTech/Opal Timeline
Zouna Modding Resources
Miscellaneous

Clone this wiki locally