BadFriend← the lab

Exp 003playableStarted 4 September 2026 · fifteen milestones in

SUPER & ARCHER

A make-believe afternoon.

  • 5 days to playable
  • 15 milestones
  • three.js
  • Blender, headless
  • Claude Code
  • two seats over Supabase
Dad from SUPER & ARCHER: a cartoon man with swept-back brown hair, in a white shirt over a black tee.

Ethan Lance, art by Alyx Lance

Play it

Opens in your browser. Nothing to install, and it's free.

Two sisters and a golden retriever standing on a green hillside in SUPER & ARCHER. One wears a purple dress and striped socks and carries a bow; the other wears a yellow cape and a blue mask.
Ink, Mab and Betsy on the hill above the house.

We tried this ten years ago#

About ten years ago Alyx and I started building a game out of these characters. We didn't get far.

The art was never what stopped us. Alyx is an artist and she already had sketchbooks and paintings full of this world. What stopped us was everything in between. Engines, pipelines, rigging, shaders, a stack of things I would have had to learn before I could put one of her drawings on a screen and walk around inside it. I'm a product engineer. I could see how far away it was, and it was daunting enough that we put it down.

This is a world I wasn't able to bring to life until now.

A pencil drawing in a sketchbook of a girl in a pointed-eared mask and a dark cape, arms out, spinning in a field of drawn grass. Signed Alyx L. and dated 9.24.14.
Super, in Alyx's hand. Signed and dated 9.24.14.

The stories came first#

Super and Archer are imaginary stories about my daughters. Years of them.

Alyx drew the girls and she drew the place they live. There's a finished piece of the two of them in ink and coloured pencil, a holiday card lettered Have a Super Holiday, The Lance Family, pages of hair, faces in profile. None of it was made for a game. It was just there, the way things are when somebody in your house draws every day.

A graphite sketchbook page of four girls with different hair, each in a dress patterned by hand with tiny drawn shapes. Every face is two solid dots and a small mouth.
A page of hair. There are years of these.

threejs.org, and a hill#

I found threejs.org and started reading. Then I opened Claude Code and asked for a hill.

What came back was a hill. Then grass that moved in wind, and an ocean, and a sun crossing the sky on a real clock. Milestone 1 shipped on the 4th of September in six increments, and by the end of it there was a Marin hillside I could walk around.

I want to be accurate about what happened there, because it isn't that I learned three.js the way I would have had to ten years ago. I read its documentation, decided what I wanted, and reviewed what came back. The distance between wanting a hill with grass on it and having one is what collapsed.

An aerial view of the game's world: a green hillside neighbourhood above the ocean, with roads, a creek, a school and a dark forest at the edge.
The whole place, from higher up than the game lets you get.

Then Blender, for the characters#

Code placeholders got the girls onto the hill and then stopped being enough. Real characters meant Blender, which is its own mountain, so we didn't click around in it. Python scripts drive Blender headlessly and write the models out, which means changing a face is changing code and I can rebuild every character with one command.

That mattered more than it sounds. I could go back to Alyx's drawings, measure something, change a number, and see it on all five characters a minute later. The faces have been rebuilt five or six times. Nobody hand-sculpts a head five or six times.

Ink standing on a paved driveway in daylight, hood up, purple dress and striped socks, holding a wooden bow.
Two dots and nothing else, which is the whole design.

Her drawings are the specification#

Not a mood board. A specification, with numbers in it.

An eye in Alyx's finished drawing is one solid mark. No white, no iris inside a lid, no lid line, no lashes, no highlight. Measured against the width of the face at the eye line, the mark is 10% wide and the pair sit 55% apart, centre to centre. What the game had at that point was 23% and 62%, with seven separate parts inside each eye. It was an anime eye wearing Alyx's proportions.

Nothing she draws is mirrored either. One side of a fringe sits higher than the other, one eye sits a little off its twin, and that asymmetry is most of what makes a drawn face read as drawn. Every face in the game carries a fixed per-side offset that never averages out. Her profiles gave me the width of a skull at every height up the face, traced rather than sculpted, which is why the heads are wider than they are tall.

Alyx's finished drawing of the two characters in ink and coloured pencil: Archer in a grey hood with a bow and arrows, Super in a blue pointed mask with a star-patterned cape, both in striped socks and boots.
The drawing everything gets measured against. Both of those eyes are one mark.

What the tools did, and what they didn't#

Fifteen milestones between the 4th of September and the 8th. Ten years ago we couldn't finish one.

But none of this was designed by a tool. The eye measurements came from measuring a photograph of Alyx's drawing. The blink took three wrong answers before the right one, and the only reason I knew they were wrong was that I looked at them and they were wrong. Every good call on this project is somebody in my family having taste, and me checking the result against it.

What changed is the cost of being wrong. The faces have been rebuilt five or six times and not one of those rebuilds cost me a weekend.

Two sisters, two colleges#

Ink is Archer and Mab is Super. They're both at college now, at different schools, which is why the game has two seats and runs over Supabase.

Super gets a jump you can hold past the top until the cape opens into a glide, and a sword that makes mailboxes wobble. Archer gets a bow that shoots where the camera looks and four kinds of arrow, one of which is a firecracker and one of which ropes her onto a roof. Betsy the golden retriever sleeps under the lawn tree until somebody walks into the yard, and she'll fetch an arrow back to your feet.

The terrain is written once as a set of constants and read twice, by JavaScript for physics and by GLSL for the picture, so the ground you walk on and the ground you see can't drift apart. There's no engine under any of it.

Play it

Opens in your browser. Nothing to install, and it's free.

You can work in the same order. Build one yourself →