-
Notifications
You must be signed in to change notification settings - Fork 0
Asobo Classes
The same warning about accuracy from the Asobo BigFile Format Specification entry applies to the class format pages. I recommend reading that entry first. The class specifications are regarding the serialized format found in BigFiles NOT the C++ object structure.
While there are some noticeable differences, the Chum World wiki and zouna-templates-docs are incredibly useful. A number of the file formats are exactly the same and the remaining ones only require minor modifications in most cases.
In addition to the usual Asobo File Format Idioms, the following structures are shared by some of the object formats. Furthermore, the Keyframer Classes are used extensively in objects like Animation_Z, MaterialAnim_Z, Particles_Z, and Rtc_Z.
struct Vec2f {
float x;
float y;
};
struct Vec2i16 {
std::int16_t x;
std::int16_t y;
};
struct Vec3f {
float x;
float y;
float z;
};
struct Vec4f {
float x;
float y;
float z;
float w;
};
struct Vec3u32 {
std::uint32_t x;
std::uint32_t y;
std::uint32_t z;
};
struct Vec3i32 {
std::int32_t x;
std::int32_t y;
std::int32_t z;
};
struct Vec3i16 {
std::int16_t x;
std::int16_t y;
std::int16_t z;
};
struct Quat {
float i;
float j;
float k;
float w;
};
struct Quati16 {
std::int16_t i;
std::int16_t j;
std::int16_t k;
std::int16_t w;
};
struct Mat3f {
float data[3][3];
// left to right top to bottom. Row major.
};
struct Mat4f {
float data[4][4];
// left to right top to bottom. Row major.
};
struct Sphere_Z {
Vec3f center;
float radius;
};
struct ResourceObject_Z : BaseObject_Z { // 4
crc32_t linkCRC32;
};
struct ResourceObject_Z : BaseObject_Z { // > 4
crc32_t linkCRC32;
PascalArray<crc32_t> crc32s;
};
Chum World TransformationHeader
zouna-templates-docs rat/GameObj_Z
enum ObjectType : u16 {
Points_Z = 0,
Surface_Z = 1,
Spline_Z = 2,
Skin_Z = 3,
RotShape_Z = 4,
Lod_Z = 5,
Mesh_Z = 6,
Camera_Z = 7,
SplineZone_Z = 9,
Occluder_Z = 10,
CameraZone_Z = 11,
Light_Z = 12,
HFog_Z = 13,
CollisionVol_Z = 14,
Emiter_Z = 15,
Omni_Z = 16,
Graph_Z = 17,
Particles_Z = 18,
Flare_Z = 19,
HField_Z = 20,
Tree_Z = 21,
GenWorld_Z = 22,
Road_Z = 23,
GenWorldSurface_Z = 24,
SplineGraph_Z = 25,
WorldRef_Z = 26,
};
struct Object_Z { // 98
crc32_t linkCRC32;
crc32_t dataCRC32;
// The associated data object for this object or 0 if there is none
Quat rot;
Mat4f transform;
float radius;
// radius of the object
// meshes use this in the close calculations
// if 0 then the object will never pop out
// how close the camera is allowed to get to the object before it pops out
// particles also use this
std::uint32_t flags;
// 0x2 - mesh load additional field
// 0x4 - set in a mesh but never checked
ObjectType type;
};
struct Object_Z { // > 98
crc32_t linkCRC32;
PascalArray<crc32_t> crc32s;
crc32_t dataCRC32;
// The associated data object for this object or 0 if there is none
Quat rot;
Mat4f transform;
float radius;
// 0, 99.99999
float flags;
ObjectType type;
};
The engine uses a paradigm called Data Classes which is important to understand when working with BigFiles.
Class Name | Status |
---|---|
Animation_Z | Solvedish |
Binary_Z | Solved✔️ |
Bitmap_Z | Tooled🎉 |
Camera_Z | Tooled🎉 |
CollisionVol_Z | Tooled🎉 |
Fonts_Z | Tooled🎉 |
GameObj_Z | Tooled🎉 |
GenWorld_Z | Solved✔️ |
GwRoad_Z | Tooled🎉 |
Keyframer*_Z | Solved✔️ |
Light_Z | |
LightData_Z | Tooled🎉 |
Lod_Z | Tooled🎉 |
LodData_Z | Tooled🎉 |
Material_Z | Solvedish |
MaterialAnim_Z | Solvedish |
MaterialObj_Z | Tooled🎉 |
Mesh_Z | Solved✔️ |
MeshData_Z | Tooled🎉 |
Node_Z | Tooled🎉 |
Omni_Z | Tooled🎉 |
Particles_Z | Solvedish |
ParticlesData_Z | Solved✔️ |
RotShape_Z | Tooled🎉 |
RotShapeData_Z | Tooled🎉 |
Rtc_Z | Solvedish |
Skel_Z | Solved✔️ |
Skin_Z | Solved✔️ |
Sound_Z | Tooled🎉 |
Spline_Z | Solved✔️ |
SplineGraph_Z | Solved✔️ |
Surface_Z | Solvedish |
SurfaceDatas_Z | Solved✔️ |
UserDefine_Z | Tooled🎉 |
Warp_Z | Tooled🎉 |
World_Z | Solvedish |
WorldRef_Z | Solved✔️ |
Status meanings in order of increasing completeness:
-
Unused: The format is not used in the game. - Unstructured: The format cannot be read or written and the field names and purposes are mostly unknown.
- Structured: The format can be read and written but the field names and purposes are mostly unknown.
- Solvedish: The format can be read and written and the field names and purposes are somewhat known.
- Solved✔️: The format can be read and written and the field names and purposes are mostly known.
-
Tooled🎉: Tooling exists to edit the format in a reasonable way.
- For simple formats, this could mean a dpc tool JSON file, or for more complex formats, a Blender addon
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