A small studio, a long list, and a racing game that had to run well on a phone somebody bought three years ago. This is what we chose, what we threw away, and what we are doing next.
We built the circuits first and the weapons second.
Most combat racers start as a kart game and bolt guns on, which is why the driving in them so often feels like an afterthought — the corners are wide, the grip is generous, and the only real skill is aiming. We went the other way. Every circuit has a proper line through it, the AI knows that line, and beating them means finding it too. The guns then make that line a thing worth fighting over.
It cost us months. It is also the only reason the game is worth playing twice.
The target was never "runs on a flagship". It was sixty frames on a mid-range Android handset with eight cars on screen, all of them shooting. That constraint shaped everything: how much of a circuit is loaded at once, how the cars are drawn, how the picture quality moves up and down with the frame rate instead of being fixed at whatever the settings screen last said.
The game watches its own frame times and adjusts. If the phone gets warm and starts throttling, the picture gives ground before the frame rate does — because a race that stutters is a race you lose, and one that is very slightly softer is a race you barely notice.
The phone build is not the desktop build with bigger buttons. It is a different control scheme, because a phone player has two thumbs and one of them is steering.
That single fact decided most of the mobile design: the throttle holds itself so the right thumb is free, the trigger latches rather than needing to be held, the brake is a slab under where the thumb already rests, and the instruments stay out of the rear-view mirror. Every one of those started as a complaint from somebody playing it.
The game tests itself. Not "does the code compile" — a large set of small programs that actually play it: drive a lap, take a corner, open the garage, buy a car, watch what appears on screen, and fail loudly if it is not what was promised.
The rule we hold ourselves to is simple and slightly annoying: a test has to be shown to fail before it is allowed to pass. More than once we have written a check, watched it go green first time, and found it was measuring nothing at all. A test that has never been red has never been tested.
It is the least glamorous thing in the project and it is why the game does not break in the places games usually break.
Visionary Gaming Studio — a very small independent team. If you have found a bug, the fastest route to us is the REPORT button inside the game: it fills in everything we need to fix it without guessing.