NUMEN-1 · cartridge 001
The Last Flight Of
The Dragolich
A whole arcade game, written straight onto silicon we designed ourselves. There is no game engine under this. There is no sprite sheet, no tilemap, no audio file, no texture, no shader, no physics library. There are 2,105 instruction words. Every mountain, every star, every wing beat, every note of the soundtrack is arithmetic executed at sixty frames a second by a processor that did not exist until we wrote it.
arrows or WASD move · space fires · enter starts. Click the canvas area first so the page has keyboard focus.
booting the machine…
The machine
NUMEN-1 is our console. Freestanding integer-only C, compiled to WebAssembly, running in your browser tab right now. No floating point anywhere in the machine — the sine table, the physics, the audio phase accumulators are all fixed-point integers.
- screen
- 256 x 192 pixels, 64-colour fixed palette
- processor
- 16 registers, fixed 32-bit instruction words
- program store
- 8,192 instruction words
- memory
- 16,384 bytes of RAM
- frame budget
- 400,000 instructions per frame
- sound
- 4 voices — square, saw, sine, noise
- font
- 4 x 6, forty glyphs, no lowercase
- assets
- none — there is no image or sound file anywhere in the cartridge
What the cartridge costs
Measured, not estimated. These are the numbers the machine reports about itself while the game runs.
- cartridge size
- 11,916 bytes
- program
- 2,105 of 8,192 instruction words (26%)
- data segment
- 3,432 of 16,384 bytes (21%)
- peak load, title screen
- 3,830 instructions per frame
- peak load, in flight
- 3,906 instructions per frame
- headroom
- about 1% of the machine’s per-frame budget
- distinct colours on the title screen
- 53 of 64
NUMEN plays it
The same rollout-and-rewind search we use on power grids, orbital debris and physics control plays this game. There is no neural network, no training, no learned weights, no gradient. On every decision the brain snapshots the entire machine state, plays eight candidate button holds forward through the real game for a fixed horizon, scores what it finds, rewinds the machine, and commits to the best one. It is direct search over the actual future, nothing else.
Press LET NUMEN PLAY above and it takes the controls in front of you. Drag the horizon slider to watch it get better and worse.
| controller | outcome | result |
|---|---|---|
| random button masher | died at frame 1,414 | score 1,700 — gate 1 |
| pacifist (never fires) | died at frame 554 | — |
| hold-fire wiggler | died at frame 1,227 | score 2,025 — gate 1 |
| search brain, horizon 8 | alive at frame 25,000 | score 38,500 — gate 5 |
| search brain, horizon 14 | alive at frame 25,000 | score 17,515 — gate 3 |
| search brain, horizon 28 | CLEARED ALL SIX GATES at frame 15,122 | score 46,300 — 1 life left |
Read the middle rows honestly: horizon 14 did worse than horizon 8. A deeper look is not automatically a better one. At 14 frames the brain can see the boss’s spread fire coming but cannot yet see far enough to be rewarded for closing the distance, so it hovers safely out of range and the fight stalls. At 28 frames the payoff finally fits inside the window and it commits. That non-monotonic dip is a real property of finite-horizon search and we are publishing it rather than quietly dropping the row.
The winning run: 15,122 frames of real play, 120,976 rollouts, 3,387,000 simulated frames, 35.5 seconds of wall clock on one core. In the browser the brain re-decides every fourth frame so it can keep pace with the display; the benchmark above re-decides every frame.
How a picture gets made here
The sky
A vertical gradient, then forty-eight stars in four parallax bands, each one a single pixel with a two-pixel streak on the fastest band. Two mountain ridges built from triangles, scrolling at different rates against the same integer clock.
The dragon
No sprite. A body of stacked discs, a neck, a head, a horn, an eye, and two wings whose span is a sine of the frame counter. It is redrawn from parameters every single frame, which is why it can flap.
The Sixth
The boss is six nodes orbiting a core on a shared phase, two pulsing rings, and an eye that tracks your ship. Its health bar is a rectangle. It fires a five-way spread that tightens as the gates go on.
Where the sound comes from
Four voices. Three of them are effects with hand-written decay envelopes — a saw chirp when you fire, a noise burst when something dies, a low noise hit when a gate opens. The fourth is a four-step sine arpeggio that only sounds while you are actually flying, and its root note rises with the gate number. The browser pulls raw sixteen-bit samples out of the machine’s sound chip and hands them to your speakers untouched.
Honest caveat: the sound chip’s phase increments assume a 44,100 Hz sample rate. We ask your browser for a 44,100 Hz audio context and it usually agrees — the readout above tells you what you actually got. If your device forces 48,000 Hz, everything plays about nine percent sharp. We have not resampled it.
What this is not
- — It is not an emulator of anybody else’s hardware. The instruction set is ours.
- — It is not a game made with a toolkit. The cartridge is emitted by a compiler we wrote, one instruction at a time.
- — The search brain has learned nothing. Reset the page and it is exactly as good as it was.
- — It is not conscious, and neither is anything else here. It is arithmetic, done quickly and in the right order.