Animation
The Animation section holds two separate things, split into tabs:
| Tab | What it covers |
|---|---|
| Parts | Doors, trunks, wipers and windows. Motion authored as curves. |
| Passenger | What the Zoi in a seat does - the seated posture, plus driving, reversing and steering. Set by animation Id, not by curve. |
The two are unrelated systems that happen to share a section, so the rest of this page treats them separately.
The section is hidden only when the vehicle has neither parts nor seats. A bicycle has no animatable parts but does have seats, so it opens on the Passenger tab.
01. How a part animation is put together
Each entry in the section is one part in one state - for example
DriverDoor / Open. Behind it is a curve that describes where the
part travels over time.
Three things matter before you touch anything:
| Concept | What it means for you |
|---|---|
| Delta from the closed pose | Motion is described as an offset from where the part sits when closed, not as absolute positions. |
| Open drives Close | Open and Close share one animation. Author Open; the part closes back along the exact reverse automatically. |
| Curves are the source of truth | Once a curve exists, it is what plays. The values you seeded it with no longer matter. |
That second point is the one that saves the most time: you never author a Close state.
02. Authoring a motion
Step 1 - seed it
The first time you author a state, you give it a starting shape:
| Field | Unit | Notes |
|---|---|---|
| Delta Location | cm | Where the part ends up relative to closed. |
| Delta Rotation | degrees | How far it swings. |
| Duration | seconds | How long the motion takes. |
| Smooth | on/off | On for eased motion, off for a constant-speed linear move. |
A conventional door is mostly rotation; a sliding door or a lifting trunk is mostly location. A scissor door is both.
Step 2 - shape it
Once the curve exists, the seed fields disappear and an inline curve editor takes their place inside the slot's group. Drag keys there to shape the motion - add a slow start, a small bounce at the end, whatever the part needs.
The seed fields go away on purpose. Regenerating the curve from a delta would throw away the keys you just tuned.
Step 3 - watch it
Use the Preview button on the slot to play the motion in the editor. The preview reads the same curve the game does, so what you see is what the player gets.
03. Mesh Name
Mesh Name tells the animation which mesh to move. Most vehicles fill this in already, but some ship it empty - Casper's wipers are the usual example.
If a part refuses to move, check this field first. An animation with no mesh named has nothing to drive, and it fails quietly.
04. Working on the curve outside ModKit
The curve is a normal asset, so you can open it in the Unreal curve editor if you want more room to work.
Reopen the workspace afterwards. The panel reads the curve when it opens, so an edit made elsewhere while the workspace is open will not show up until you do.
05. Animation and the shared template
Part animation lives on the vehicle template, which several vehicles can share. To keep your change off the other vehicles, the workspace splits off a private template the first time you author a motion. You do not have to do anything - it happens on the first edit.
The practical consequence is that an animation edit makes your vehicle stop sharing template-level data with its siblings from that point on.
06. The Passenger tab
The other tab has nothing to do with curves. It sets which animation
the Zoi in a seat plays, by pointing a field at an AnimCharacter row
Id. Every seat gets a group of its own.
| Field | When it plays |
|---|---|
| Vehicle Posture Anim Id | Boarding, exiting and the seated idle. One Id covers all three, because the montage behind it carries Default / Loop / End sections. |
| Driving Anim Id | Moving forward. |
| Reverse Driving Anim Id | Reversing. Empty means the seated posture is kept. |
| Driver Left / Right Steering Anim Id | Turning. Empty means the seated posture is kept. |
Every seat has a posture Id. The moving Ids are read from the driver seat only, and which of them exist differs by type:
| Vehicle | Driving | Reverse | Steering |
|---|---|---|---|
| Bicycle, motorcycle | yes | yes | yes |
| Boat | yes | - | yes |
| Car | - | - | yes |
A car has no driving animation at all. That is not a gap in ModKit - the game does not define one.
07. Reusing an Id versus making your own
Each field is a dropdown of existing Ids plus two buttons.
| You want | Do this |
|---|---|
| A different animation that already exists | Pick it from the dropdown. Nothing else to do. |
| Your own animation | Clone, then swap the montage in the row that opens. |
| To see what an Id actually contains | Edit. |
Clone is the important one. The shipped data points several vehicles
at one Id - the child bicycle's driver seat uses Scooter_DriverSeat,
the same row the scooter uses - so editing that row in place changes
every vehicle that shares it. Clone copies the row to an Id only your
workspace uses and repoints the field at the copy.
To supply an animation of your own you still need a montage: matching
skeleton, Root or Head playing component, and one entry per
gender / growth-step combination. Clone gives you the row to hang it on,
not the animation itself.
The Ids are spread across several
AnimCharacterfiles. Bikes, scooters and boats live inAnimCharacter_Vehicle; car seat postures live inAnimCharacter_PostureasS_DriverSeatand friends. The dropdown lists all of them, and Edit opens whichever file actually holds the row.
08. A field is empty but the vehicle animates anyway
Expected for now, and only for the four moving Ids. The shipped
ObjectBP data was exported before they could travel in a mod patch, so
they read blank even though the vehicle plays the animation in game.
Vehicle Posture Anim Id is unaffected - it has always been exported.
Typing or picking an Id saves normally from that point. Leaving a field blank writes nothing, so an untouched field cannot wipe the vehicle's existing animation.
09. Common issues and fixes
| Issue | Cause | Fix |
|---|---|---|
| Part does not move at all | Mesh Name is empty | Set it from the mesh list |
| No Animation section | The vehicle has neither animatable parts nor seats | Nothing to do - a few test vehicles are like this |
| Motion plays but ends in the wrong place | Delta was measured from the open pose | Deltas are relative to closed |
| Curve edits do not show in the preview | Curve was edited elsewhere while the workspace was open | Reopen the workspace |
| Door closes wrongly | Trying to author Close separately | Author Open only; Close is its reverse |
| Another vehicle changed too | Template still shared | Author one motion to trigger the split, or duplicate the template first |
| A passenger field is empty although the vehicle clearly animates | The shipped ObjectBP data predates these fields | Type or pick the Id; it saves from then on |
| A moving Id is missing entirely | It does not exist on this vehicle type | Cars have steering only; ships have no reverse |
| Changing a passenger Id changed another vehicle | The Id was shared | Use Clone to get your own copy, then point the field at it |
10. Chapter summary
| Checklist | Done |
|---|---|
| Is Mesh Name filled in for every part I animated? | ✅ |
| Did I author only the Open state? | ✅ |
| Are my deltas measured from the closed pose? | ✅ |
| Did I preview the motion rather than trusting the numbers? | ✅ |
11. What the MCP tools cover
| Tool | Use |
|---|---|
modkit_set_vehicle_animation | Author a part animation from a delta: part, state, location/rotation offset, duration, smoothing. |
modkit_create_vehicle_template | Split off a private template up front, before any template-level edit. |
modkit_set_vehicle_seat_anim | Set a passenger animation Id on a seat: posture, driving, reverse or steering. |
modkit_list_vehicle_components | Reports each seat's current passenger Ids, and only the fields that apply to it. |
Shaping the curve by hand is editor-only. The tool gives you the seed; the inline curve editor gives you the finish.
12. Data reference
- VehicleTemplate - where a vehicle's animated parts are listed.
- FB1VehiclePart - one animated part and the meshes it moves.
- FB1VehiclePartState - one state of that part.
- EB1VehiclePartType - the parts that can be animated.