Designing a car
Everything you need to get a car of your own driving in Web Cars 2. Twenty minutes if you already have Blockbench open.
You do not need to write any code, and there is no export step: the game loads your .bbmodel file directly.
What a car actually is
A car is a Blockbench model whose group names say what each part does. The shapes are yours; the names are the contract.
The smallest car that works has four things:
- a group called
body— the chassis - a group called
tire_backand one calledtire_front - a group called
spawn— where the car sits when the track loads
Everything else — lights, exhausts, extra body panels, a second pair of visible wheels — is optional decoration you can add once it drives.
Start from the sample, not from nothing
Run this once in the repo:
cd game && npm run generate:assets
That writes models/generated/sample-car.bbmodel. Copy it to models/cars/my-car/my-car.bbmodel and open that copy in Blockbench. It is already correctly named and scaled, so restyling it is much faster than building the naming from scratch — and much harder to get subtly wrong.
Never edit a file under models/generated/. That folder is regenerated and your work would vanish.
The three rules that catch everyone
The car faces +X. That is right on screen. Build the nose to the right; a car modelled facing left will drive backwards and look wrong in every screenshot.
One Blockbench block is one metre. A car about 2.5 blocks long is about 2.5 m, which is the intended size. If a model arrives wildly off-scale the loader normalises the chassis to 2.4 m and prints a warning — take the warning as a signal you modelled at the wrong scale, not as a fix.
Two physics wheels, four visible wheels. The simulation runs two wheels: one rear, one front. To show four, add a wheelshell group inside each tire group and it mirrors that axle. This is a design decision, not a limitation to work around — there is no independent left/right suspension in a side-view game.
Naming, briefly
A group can simply be called what it is:
body
tires
├── tire_front
│ └── wheelshell
└── tire_back
└── wheelshell
suspension_front
suspension_back
headlight
exhaust
spawn
Recognised names include body/chassis, tire/wheel, wheelshell, suspension/strut, headlight, taillight, light, exhaust and spawn. Each may take a _front, _back, _left, _right or number suffix and nothing else — so tire_front claims a role while light_bar stays an ordinary panel of whatever group it sits in.
When you want to tune something, append settings to the name:
body;weight=900;softness=20
See Blockbench tags for the settings worth knowing, and the repository's docs/model-format.md for the complete grammar — that file is the authority, and this wiki deliberately does not duplicate it.
Making it feel like a car
Three settings do most of the work. All of them go on a group name.
| Setting | Goes on | What it changes |
|---|---|---|
weight=900 | a body group | mass in kg — heavier feels planted, lighter flips easily |
power=800 | a body group | engine torque — how hard it pulls up a hill |
topSpeed=90 | a body group | speed cap in km/h |
springHz=4 | a suspension group | bounce rate — low is floaty, high is stiff |
damping=55 | a suspension group | how fast the bounce settles |
Tag values are always whole numbers. damping=55 means 0.55. There are no decimal points anywhere in the grammar, and a value with one will be rejected.
Trying it
Save the file and reload the page — that is the whole loop. Then:
?screen=garagebrowses every car, including yours once it is in the roster- The 🐞 button in the Garage's detail panel runs the car test suite: drive, drop, jump and air-steer checks with pass/fail criteria
If the car does not appear, the loader will tell you why on screen. Parsing never throws — problems come back as a list of errors and warnings, so read the message rather than guessing.
Common problems
The car sinks through the ground. Your body group has no cubes in it, so there is no collider. A group's cubes are the shape.
The car spawns inside the terrain. Move the spawn group up. It marks where the chassis centre starts.
The wheels spin the wrong way. The model is facing −X. Rotate the whole thing 180°.
Nothing loads at all. Check that the textures are embedded rather than linked to files on disk — a linked texture that cannot be found opens the model empty.