-
Notifications
You must be signed in to change notification settings - Fork 0
Keyframer Classes
Bezier vs Linear
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.
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;
};
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;
};
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;
};
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;
};
struct KeyframerRot_Z {
PascalArray<struct {
float time;
Quati16 rotation;
}> data;
};
struct KeyframerBezierRot_Z {
PascalArray<struct {
float time;
Vec3f a;
Vec3f b;
Vec3f c;
}> data;
};
struct KeyframerHdl_Z // KeyframerHandle
{
PascalArray<struct {
float time;
crc32_t crc32;
}> data;
};
struct KeyframerFlag_Z {
PascalArray<struct {
float time;
std::uint32_t flag;
}> data;
};
Sends Message_Z
s
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;
};
For FMTK Users and Mod Developers
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