Overview
beamng.assetto is one Python application with three independent steps. Each step reads files and writes files; the next step reads only what the previous one wrote.
| Step | Reads | Writes |
|---|---|---|
S1 Extract, kspkg | content.kspkg | an extracted folder, as the game reads it |
S2 Read, evo | the extracted folder (or the package) and AssettoCorsaEVO.exe | work/evo: each circuit part by part, and the assets they use |
S3 Build, beamng | work/evo only | work/beamng/evo_<circuit>: a mod per circuit, a level per layout |
Step 1 knows nothing about tracks
Step 1 reads Kunos packages (.kspkg) and extracts them byte for byte. It knows nothing about circuits or BeamNG: you can use it on its own, on content.kspkg or on a mod package. See Inside content.kspkg.
Step 2 speaks EVO
Step 2 reads a circuit the way the game does: its scene, its containers of objects, its layouts and game modes, and every actor in them. It writes them in EVO's own terms, without converting anything yet: positions in EVO's frame, materials with EVO's shader parameters, textures as EVO stores them. The game's executable tells it how EVO's data is laid out, so step 2 reads the game's data with the game's own definitions.
Step 3 speaks BeamNG
Step 3 turns step 2's files into a BeamNG level, using a native BeamNG system for each job, as BeamNG's own levels are built: a terrain for the landscape, ground cover for the grass, a forest for the trees, decal roads for the markings, an AI road for the AI. See From EVO track to BeamNG level.
The rules every step follows
- 1:1 with EVO. Nothing is guessed or drawn by hand. Positions, sizes, materials, lights and settings come from EVO's data, with no per-circuit values in the code.
- Nothing lost in silence. When BeamNG can't do what EVO does, or a value has to be approximated, the step reports it, with a count, so you always know how faithful a level is.
- Your copy only. The tool works on the game files on your disk. The project contains no game data, and what it builds is for your own use.
- Only what changed. Every file written records what it was made from. A run skips what is already up to date, so you can stop and resume, and updates are quick.
Where to read more
The project's repository documents every detail, with the evidence behind it, for those who want to go deeper: