-
Notifications
You must be signed in to change notification settings - Fork 0
SplineGraph_Z
The spline_z_visualizer.py script is able to visualize Spline_Z
and SplineGraph_Z
data using Matplotlib. There is some SVG parsing code that is not used in the final game that appears to be related to this.
struct SplineSegmentSubdivision {
/// Endpoints of the line segment
Vec3f P[2];
/// Length of the line segment
/// Distance between P[0] and P[1]
f32 length;
};
struct SplineSegment {
/// P and T contain indices into points
/// Control points { P[0], T[0], T[1], P[1] }
u16 P[2];
u16 T[2];
u32 flags;
std::assert(flags == 0x10000000 || flags == 0x10000002, "flags != 0x10000000,0x10000002");
/// Length of the spline segment
f32 length;
/// Approximation of the spline segment divided into 8 line segments
/// P[0] of a subdivision will always be equal to P[1] of the previous subdivision if one exists
SplineSegmentSubdivision spline_segment_subdivisions[8];
};
struct SplineGraph_Z : Object_Z {
std::assert(type == ObjectType::SplineGraph_Z, "type != ObjectType::SplineGraph_Z");
DynArray_Z<Vec3f> points;
DynArray_Z<SplineSegment> spline_segments;
f32 unknown2;
std::assert(unknown2 >= 0 && unknown2 <= 1, "unknown2 < 0 || unknown2 > 1");
f32 unknown3;
std::assert(unknown3 >= 0 && unknown3 <= 1, "unknown3 < 0 || unknown3 > 1");
f32 unknown4;
std::assert(unknown4 >= 0 && unknown4 <= 1, "unknown4 < 0 || unknown4 > 1");
f32 unknown5;
std::assert(unknown5 >= 0 && unknown5 <= 1, "unknown5 < 0 || unknown5 > 1");
f32 unknown6;
std::assert(unknown6 >= 0 && unknown6 <= 1, "unknown6 < 0 || unknown6 > 1");
DynArray_Z<u32> unknown7s;
std::assert(unknown7s.size == points.size, "unknown7s.size != points.size");
std::assert(all_eq(unknown7s.data, 0), "!all_eq(unknown7s.data, 0)");
DynArray_Z<DynArray_Z<u8>> unknown8s;
std::assert(unknown8s.size == unknown7s.size, "unknown8s.size != unknown7s.size");
std::assert(all_empty(unknown8s.data), "!all_empty(unknown8s.data)");
DynArray_Z<DynArray_Z<u8>> unknown9s;
std::assert(unknown9s.size == spline_segments.size, "unknown9s.size != spline_segments.size");
std::assert(all_empty(unknown9s.data), "!all_empty(unknown9s.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