← BX Foundry Play it online

How Violent Checkers NES Edition was made

A physics game from the web, ported to a real Nintendo Entertainment System cartridge by an AI coding agent, then put online so two people can play it in their browsers. This is how it works, how it was checked, and what is still imperfect.

The title screen: BENJ EDWARDS PRESENTS, a dripping red VIOLENT CHECKERS logo, PRESS START, © 2026 BX FOUNDRY
128 KBcartridge program (MMC3 board)
6502assembly language, all of it
4computer levels, Easy to Ultra
7 + 26original songs and sound effects
3TV systems: NTSC, PAL, Dendy
1½ daysfrom the first line to online play

1The request

Violent Checkers, the original web game at bxfoundry.com/violentcheckers, is checkers where you don't move your pieces, you flick them, and they crash into each other with real physics. Impacts hurt both pieces, a hard enough shot destroys them, pieces that reach the far wall become Kings, Kings that come home become Queens, and two Queens smashed together fuse into a giant Super Queen.

On October 15, 2026, Benj Edwards gave Claude Code, Anthropic's AI coding agent (running the Claude Opus 5.5 model), this instruction:

"Port the latest version of Violent Checkers the HTML web game to the NES, make it one or two player and run on a real NES with AAA production values."— Benj Edwards, BX Foundry

The agent read the web game's source (its rules, its computer player and its physics), designed the cartridge, and wrote the game, the art tools, the tests and the documentation. A second Claude agent, working in parallel, wrote the sound driver and the music. Benj directed the work, played it, and asked for the online edition the next day.

2Choosing the cartridge

An NES game is a cartridge as much as a program: the board inside decides how much code fits and how graphics reach the screen. The edition uses the most common advanced board of the NES era, Nintendo's MMC3, with:

It is built for real hardware:

The same cartridge runs on American and Japanese consoles (NTSC), European ones (PAL), and the Dendy, a Russian clone. At power-on the game times one video frame to tell which it is on, and adjusts its speed and music tuning to match.

3Physics on a 1.79 MHz processor

The web game uses Matter.js, a full physics engine running in floating point. The NES has an 8-bit processor with no multiply instruction, no division and no floating point. So the edition has its own small physics engine, written for exactly this game: round pieces of equal mass on a walled board.

424 round pieces and no flicker

The NES can show only 8 sprites (moving objects) on any line of the screen. A checkers board has up to 6 pieces in a row, each one made of several sprites, so drawing every piece as a sprite would make them flicker badly, the classic NES look the edition wanted to avoid.

The answer was to paint pieces at rest into the background. The board is a grid of 576 small tiles. When a piece stops, the game builds new tiles that show the board square with the piece blended in, writes them into graphics RAM, and points the board at them. Identical tiles are shared, so the opening position needs only 9 new tiles. Only the pieces that are actually moving are sprites, and when nothing is moving there is no flicker at all.

This takes care: the console only lets the game touch graphics memory during the short gap between video frames, so every change is queued and fed in a little at a time, within a strict budget. A piece stays a sprite until its painted version is completely in place, so a half-drawn piece never shows.

Aiming: a dotted aim line from a red piece toward a black piece, the power meter on the left
Aiming: the dotted line shows the shot, the meter on the left the power. The status line previews the damage.
A KILL! banner across the board
A callout banner, opened by a split screen partway down the frame.
FIRST BLOOD banner over the board with debris from a shattered piece
First blood: shards, sparks and smoke are sprites from a shared particle pool.

5The rules, unchanged

The rules come straight from the web game's latest version (4.0): the damage formula and who takes more of it, the 75% power Destroy shot, Kings with double health and 1.5× damage, Queens that take half damage and deal double, demotion of a royal piece whose shot touches nothing, Super Queen fusion, a draw when both sides are wiped out at once, and the end-of-match statistics. The web game's hidden rocket is in there too.

Three NES screens: the options menu, the How to Play page about power, and the page about the Super Queen
The options menu and two of the seven How to Play pages.

6A computer player that thinks while the screen moves

Easy plays like the web game's original computer player: a random piece, the nearest target, some power. The three higher levels work like the web game's newer player, in miniature:

  1. Every possible pair of shooter and target (and wall shots for crowning) is traced along a straight line and scored with a fast damage model.
  2. The best 2 (Medium), 4 (Hard) or 6 (Ultra) candidates are then played out with the real physics on a private copy of the board, and the results are judged with the weights the web game's player learned. Ultra also looks at the best reply the other side would have.
  3. The shot is aimed with a little error that shrinks with the level.

The NES can't do all that in one frame, so the computer thinks in the spare time between frames, in small slices, while the game keeps animating at full speed. It takes about 1.3, 1.8 and 2.4 seconds to decide at the three higher levels. The same damage model drives the player's own aiming preview ("HIT 37 · TAKE 75", "KILL!").

To check the levels, the computer played itself hundreds of shots at a time: Hard beat Easy 8–0, Ultra beat Hard 4–2, and Hard against Hard went 3–1 with one draw, which showed that neither side has a built-in advantage.

7Sound: an original soundtrack

All the music and effects are original. The NES has five sound channels: two square waves, a triangle wave, noise, and a channel that plays 1-bit delta-compressed samples. The sound agent built:

One detail took a while. The voice has to land exactly as the FIGHT! banner opens, and at first they were about 20 frames apart. The sound runs on the console's real frame clock, while the game's own clock falls behind whenever a frame is too busy to finish, as the opening pieces drop in. Timing the banner on the same clock as the music fixed it on all three TV systems.

8Testing without a console

Most of the checking was automated, using an accurate NES emulator (Mesen 2) driven by scripts with no screen:

These tests found real bugs:

9Online: one console, many screens

The online edition uses the same approach as BX Foundry's Atari Multiplayer Arcade. Nobody streams video. Instead:

The server runs the real cartridge in an NES emulator (Nestopia, compiled to WebAssembly), 60 frames a second, with the seated players' controllers.
two bytes a frame →
← your controller
Every browser runs its own copy of the same NES. It gets one snapshot, then just the controller presses for every frame, and makes the picture and the sound itself.

Because the emulator is deterministic, the same presses give the same game everywhere: the two players and everyone watching see the identical match. Every second the server sends a fingerprint of its console's memory, and a browser whose copy drifts asks for a fresh snapshot. A small buffer of frames smooths out bumps in the connection.

What Violent Checkers needed on top

CPU TAKES OVER banner: RED LEFT - THE CPU PLAYS ON
A player left mid-match: the computer plays on for them.
The online page: the NES screen showing the title, the player and game lists on the right, and a NEW game button
The online page: the game, the players, the list of games running, and the NEW button.

10What is still imperfect

11Credits