Advanced Suspension Maker SDK

Build custom, fully-animated suspension for CarX Drift Racing Online

Hub Arm Shock Axle

Get started Browse tutorials View on GitHub

Reference — known-good MacPherson corner (LOCKED 2026-06-27)

Verified working in-game on both front corners of Chassis_D-Master (GT86): hub follows the wheel with camber, arms stay attached, strut stays joined at the tophat and turns with the wheel (kingpin), spring telescopes. This is the locked baseline — copy it for every MacPherson corner.

Hierarchy (one corner)

SUSP_LF
└── HUB_LF
    ├── Steering Rack          (mesh — no component)
    │   └── FL_TieRod          KSuspBone · Arm    Outer = FL_Steer_end, Telescopes = ON
    ├── Shock
    │   ├── Spring             (mesh — no component)
    │   │   └── FL_Spring      KSuspBone · Shock  (the whole strut — see table)
    │   ├── Tophat_mesh        (mesh — no component; the shock SHAFT/rod)
    │   │   └── FL_Tophat      (no component — Shock's Tophat; shaft pivot)
    │   └── ShockBody_mesh     (mesh — no component; strut tube)
    │       └── FL_StrutBody   (no component — Shock's Body Bone)
    ├── Hub                    (mesh — no component)
    │   └── FL_HUB             KSuspBone · Hub    Wheel Rotation = SteerCamber
    │       ├── FL_Steer_end     (no component — TieRod's Outer Target)
    │       ├── FL_Lowerarm_end  (no component — LowerArm's Outer Target)
    │       └── FL_Shock_low     (no component — Shock's Lower Mount / strut-to-hub joint)
    └── LowerArm               (mesh — no component)
        └── FL_Lowerarm        KSuspBone · Arm    Outer = FL_Lowerarm_end, Telescopes = ON

The 4 components per corner (and ONLY these)

Marker Role Fields
FL_HUB Hub Wheel Rotation = SteerCamber
FL_TieRod Arm Inner Pivot = self (at the rack) · Outer Target = FL_Steer_end · Telescopes = ON
FL_Lowerarm Arm Inner Pivot = self (inner bolt) · Outer Target = FL_Lowerarm_end · Telescopes = ON
FL_Spring Shock Tophat = FL_Tophat · Tophat Rotates (shaft) = ON · Lower Mount = FL_Shock_low · Body Bone = FL_StrutBody · Body Anchored At Tophat = ON · Spring Bone = FL_Spring

Everything else (FL_Steer_end, FL_Lowerarm_end, FL_Shock_low, FL_Tophat, FL_StrutBody, and all the meshes) has no component.

Two placements that matter

How each part moves (so you know what “right” looks like)

Build order

  1. Build Rig Hierarchy → 2. Attach Parts to Bones → 3. set Car Id + Setup Name on KSuspensionRoot → 4. Bake Suspension Descriptor → 5. drop the .ksusp in kino\suspensions\ → 6. fully restart the game (the .kse loads at startup).

Mirroring to the other side (FR / RR)

  1. Duplicate the whole corner group (tree + markers).
  2. Mirror it: Scale X = −1 (watch for inverted normals in HDRP; use mirrored meshes if so).
  3. Rename every FL_*FR_* (names must be unique).
  4. On every KSuspBone, set the Corner dropdown to FR (the baker reads the Corner enum, not the name — this is the step people miss).
  5. Re-bake. The FR hub auto-follows the game’s FR wheel, so steer/camber mirror for free.

The rear is usually NOT a mirror of the front (no steering, different arms) — set it up fresh.

Locked mod baseline (find+animate only)

Backed up at build/locked/AdvancedSusp-macpherson-locked.kse. Feature set: car-local rest-relative motion · SteerCamber hub · arm telescope · strut aim+telescope+twist (kingpin) with followsHub baked into the descriptor · stock mesh_suspension auto-hidden.