-
Notifications
You must be signed in to change notification settings - Fork 0
Keyframer Classes
Keyframer classes with Linear
in the class name use Linear interpolation to interpolate values between keyframes. Classes without Linear
in the name use Quadratic Bézier interpolation to interpolate values between keyframes.
Classes with Comp
(Compressed) in the name use std::int16_t
values in place of float
values to minimize the size of keyframes. 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. For some reason, KeyframerVec4fLinearComp_Z
is identical to KeyframerVec4fLinear_Z
despite the former having Comp
in its name.
Classes with Ext
(Extended?) in the name... The only class that fits this description is KeyframerExtVec3f_Z
.
The class names on this page were taken from the WALL-E Mac debug symbols.
struct KeyframerFloat_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
float value;
float tangentIn;
float tangentOut;
}> keyframes;
};
struct KeyframerFloatComp_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
std::int16_t value;
std::int16_t tangentIn;
std::int16_t tangentOut;
std::uint16_t padding;
}> keyframes;
};
struct KeyframerFloatLinearComp_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
std::int16_t value;
std::uint16_t padding;
}> keyframes;
};
struct KeyframerVec2fLinear_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
Vec2f data;
}> keyframes;
};
struct KeyframerVec2fLinearComp_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
Vec2i16 value;
}> keyframes;
};
struct KeyframerVec3fComp_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
Vec3i16 value;
Vec3i16 tangentIn;
Vec3i16 tangentOut;
std::uint16_t padding;
// Always 0xFF
}> keyframes;
};
struct KeyframerVec3fLinear_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
Vec3f value;
}> keyframes;
};
struct KeyframerExtVec3f_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
Vec3f value;
Vec3f tangentIn;
Vec3f tangentOut;
}> keyframes;
};
struct KeyframerVec4fLinear_Z {
std::uint16_t flags;
PascalArray<struct {
float time;
Vec4f value;
}> keyframes;
};
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.
}> keyframes;
};
struct KeyframerRot_Z {
PascalArray<struct {
float time;
Quati16 rotation;
}> keyframes;
};
struct KeyframerBezierRot_Z {
PascalArray<struct {
float time;
Vec3f a;
Vec3f b;
Vec3f c;
}> keyframes;
};
struct KeyframerHdl_Z // KeyframerHandle
{
PascalArray<struct {
float time;
crc32_t crc32;
}> keyframes;
};
struct KeyframerFlag_Z {
PascalArray<struct {
float time;
std::uint32_t flag;
}> keyframes;
};
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;
}> messages;
}> keyframes;
};
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