Skip to content

Car parameters ​

2026-10-23.

Saber in the viewer, with its parameter table beside the model

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 0xD8 bytes: 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_004284cc multiplies each grip by the surface's grip and a quarter of the car's weight. The suspension has a spring and a damper (FUN_00426f18 computes −(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_00426184 converts 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 on their wheels, placed from the parameters

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.

Gamma's parameters: the torque curve, the garage settings and the wheels

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_file and the copy in FUN_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_00443048 builds the torque curve from the settings.
  • Find out what the two animated objects and the sound slots are.

Prose CC0 1.0, code Apache 2.0. POD: Planet of Death is © Ubi Soft; none of its files are on this site.