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
FL_Shock_low= where the strut bottom bolts to the hub. Put it on the steering/kingpin axis (the line fromFL_TophattoFL_Lowerarm_end). The strut’s bottom locks onto this point (aim + telescope) and the strut twists about this line with the wheel.- Pose the meshes how they should look at rest. The mod keeps that orientation — there’s no axis/flip to pick. If a part points wrong, rotate the bone/mesh in the scene and re-bake.
How each part moves (so you know what “right” looks like)
- Hub follows the game wheel: track/wheelbase, travel, steer, and camber (no spin).
- Arms rotate about their inner pivot toward the hub point and stretch to stay attached as the hub cambers/steers (that length change is what absorbs the camber).
- Strut (body + spring + shaft) pins at the tophat, locks its bottom to
FL_Shock_low(aim + telescope), and twists about the strut line with the hub (kingpin). The spring telescopes; the tophat shaft stays pinned and aims down the strut.
Build order
- Build Rig Hierarchy → 2. Attach Parts to Bones → 3. set Car Id + Setup Name on
KSuspensionRoot→ 4. Bake Suspension Descriptor → 5. drop the.ksuspinkino\suspensions\→ 6. fully restart the game (the.kseloads at startup).
Mirroring to the other side (FR / RR)
- Duplicate the whole corner group (tree + markers).
- Mirror it: Scale X = −1 (watch for inverted normals in HDRP; use mirrored meshes if so).
- Rename every
FL_*→FR_*(names must be unique). - On every KSuspBone, set the Corner dropdown to FR (the baker reads the Corner enum, not the name — this is the step people miss).
- 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.