⚙️
Hard Link Model (.cmp)

💨 Overview

Compound comprised for multiple parts. Ships with destructible parts, stations with docking ports having moving doors and so forth.

Compound model embeds one or more .3db inside while using shared resources (meshes, materials, etc) between parts.

Cmpnd entry contains Root part and other parts starting with Part_ prefix. Hierarchial relation between parts is defined in constraints Cons entry.

stateDiagram-v2

    File_name: File name
    Object_name: Object name
    Constraint: Fix, Rev, Pris, etc
    Part: Root, Part_*
    Fragment: part.3db
    VMesh: VMeshPart or MultiLevel

    VMeshLibrary --> mesh.vms
    mesh.vms --> VMeshData

    Cmpnd --> Cons
    Cons --> Constraint
    Cmpnd --> Part
    Part --> Object_name
    Part --> Index
    Part --> File_name
    Object_name --> Constraint : Value ref
    File_name --> Fragment : Value ref

    Fragment --> VMesh
    Fragment --> VMeshWire
    VMeshWire --> VWireData
    VWireData --> VMeshData : meshId reference
    Fragment --> Hardpoints
    VMesh --> VMeshRef
    VMeshRef --> VMeshData : meshId reference

💢 Constraints

  • Parent and child part names in constraints are always 64 bytes regardless of actual string length, string is trimmed at NUL character.

🔥 Fix (fixed)

Name Type Description
parent char[64] Parent name.
child char[64] Child name.
translation float[3] Translation vector.
rotation float[9] 3x3 rotation matrix.
  • Inanimate but can be made destructible via [CollisionGroup] section in archetype.

📎 Rev (revolute)

Name Type Description
parent char[64] Parent name.
child char[64] Child name.
translation float[3] Translation vector.
offset float[3] Offset vector.
rotation float[9] 3x3 rotation matrix.
axis float[3] Direction axis vector.
min float Min angle.
max float Max angle.
  • Animated by keyframe with single float value.

📌 Pris (prismatic)

Name Type Description
parent char[64] Parent name.
child char[64] Child name.
translation float[3] Translation vector.
offset float[3] Offset vector. Unused.
rotation float[9] 3x3 rotation matrix.
axis float[3] Direction axis vector.
min float Min length.
max float Max length.
  • Animated by keyframe with single float value.

⚡ Cyl (cylindric)

Name Type Description
parent char[64] Parent name.
child char[64] Child name.
translation float[3] Translation vector.
offset float[3] Offset vector.
rotation float[9] 3x3 rotation matrix.
axis float[3] Direction axis.
rotateMin float
rotateMax float
slideMin float
slideMax float
  • ❗ Exists but appears to be unused. Attempting to animate cylindrical joint crashes the game.

💨 Sphere (spherical)

Ball joint and unlike revolute constraint its rotation isn't axis fixed.

Name Type Description
parent char[64] Parent name.
child char[64] Child name.
translation float[3] Translation vector.
rotation float[9] 3x3 rotation matrix.
pitchMin float
pitchMax float
yawMin float
yawMax float
rollMin float
rollMax float
  • Animated by keyframe with quaternion value.

💥 Loose

Permits free motion (translation and rotation).

Name Type Description
parent char[64] Parent name.
child char[64] Child name.
translation float[3] Translation vector.
rotation float[9] 3x3 rotation matrix.
  • Animated by keyframe with vector and quaternion values.