Car parameters
2026-10-23.

VOITURES/SABER.BV4: the parameter table and the car on the wheels it describes. © Ubi Soft for the game's content; shown from our own viewer.
Not scrambled after all
The last car session found wheel positions at stream offset 0x58 in Arc and AV1, and noise there in the other seven cars. It guessed that those seven were scrambled. They are not. The file starts with the car's name, and the parameter block comes right after it. Arc and AV1 have three-letter names. Gamma, Saber, Scorp, Bakar and Alien have five letters, and Shivan and Dopple have six. The block moves by the length of the name. With the name read first, all nine blocks read as plain 16.16 numbers. The .BV3 and .BV4 of each car hold the same block.
The game's own copy tells us the layout
load_car_file (FUN_0046fb14) reads the 0x558 bytes into the car's slot. At the start of a race, FUN_00476aa0 copies them field by field into the race car, which is also 0x558 bytes with the same layout. That copy lists every field the file supplies. All the other bytes are run-time state, such as engine speed, the current gear and velocities, and they are zero in all nine files. So every byte of the block is either a named field or zero (measured).
The physics then reads the fields at the same offsets. Each field is named from the code that uses it, without tracing the physics step itself:
- Wheels. There are five records of
0xD8bytes: four wheels, then a chassis point that serves as the centre of mass. A wheel has a mass, a position and a radius, so the game can compute its inertia as m·r²/2. It also has a side grip and a traction grip.FUN_004284ccmultiplies each grip by the surface's grip and a quarter of the car's weight. The suspension has a spring and a damper (FUN_00426f18computes −(z − rest)·spring − speed·damper), a rest height and two travel limits. - Engine and gears. The car has six forward gears. In every car, gear n's ratio is the first gear's ratio divided by n. A 64-entry torque curve follows the block, one entry per 256 rpm.
FUN_00426184converts engine speed from rad/s to rpm with the constant 60/2π. Every curve drops to zero at 10,240 rpm, just above the 1,000 rad/s limit the game sets at reset. - Steering and brakes. The block holds the largest wheel angle, the steering speed, the return speed, the brake build-up rate and maximum, and the front brake share (half in every car).
- The rest. The block also holds the body mass (1,482 to 2,024), a gravity scale of about 4.36 times 9.81, and the drive layout. All nine cars are four-wheel drive.

All nine cars, drawn by pod-viewer render, now with their wheels. Before this session only Arc and AV1 had wheels. © Ubi Soft; shown from our own viewer.
The end of the file
After the parts, load_car_file reads more than the old notes said. It reads two animated objects with no texture block, and then a record of 0x24 bytes. That record starts with a word the game overwrites, which in the files holds leftover text such as rog\. Sixteen u16 numbers follow, which look like sound numbers. Next come five garage settings from 0 to 100, and then a light record of the same kind as the track lights. The bytes after that are padding that the game never reads. The Python walk and the Rust reader both stop exactly where the game stops, in all 18 files.

VOITURES/GAMMA.BV4: its torque curve rises to a flat top and drops to zero at 10,240 rpm. © Ubi Soft; shown from our own viewer.
The car lists
SCRIPTS/VOITURES.BIN, VOITURE2.BIN and VOIRESET.BIN use their own simple scheme: a plain count, then 0x80-byte records with every byte XORed with 0x68 (FUN_00477400). Each record holds the car's file name, its menu name, and three .tga picture names that no shipped program reads. The race list holds eight cars. VOITURE2.BIN holds the spare car, the Alien. The menu code swaps cars between the two files and writes both back, and its reset copies VOIRESET.BIN's eight cars into the race list. Both files are save state.
How it is known
- Observed: the reads in
load_car_fileand the copy inFUN_00476aa0. Each field's use is observed in the function the table names. - Measured: all 18 car files decode to the last read with no stray bytes. The parameters write back byte-identical through the container. A changed body mass reads back changed with valid checksums. The three car lists round-trip (
crates/pod-formats/tests/disc.rs). - Inferred: the units (metres, kilograms, radians, from the 9.81 and 60/2π constants). Also inferred: the sound slots, and that the five settings are the garage sliders.
The full table is in Cars.
Next
- Drive a changed car under Wine (
run/wine/run.sh): for example, double Saber's side grip and check it corners harder. - Find which garage slider each setting is, and how
FUN_00443048builds the torque curve from the settings. - Find out what the two animated objects and the sound slots are.