/ 3 min read
Spare Knight: 13 days, no dice
Why attacks never miss, where the randomness went instead, and what painting a whole cast taught me about scope.
Spare Knight was my first shipped game: a tactical roguelike built in 13 days for Gamedev.js Jam 2026, theme Machines. I directed it, wrote the code in Phaser 3 with Vite, and painted the characters, the event illustrations, and the interface in Krita on a Wacom tablet. Nicholas Drabb joined for sound, voice, and the lore we wrote together. It shipped open source, on the jam page and on itch.io.
The premise carries the theme. The machines have reached a philosophical consensus that organic life is inefficient. They call it the Absolution Mindset. You are a knight whose firmware is three generations out of date, too old to receive the update, with one human left to protect.
The core bet: no attack RNG
The first design decision was the one everything else hangs on: attacks never miss. No hit chance, no damage range. Combat happens on a 6x6 isometric grid with speed-based initiative, and every choice is settled the moment you make it.
The reasoning is about run length. A run is 15 to 20 minutes. In a run that short, a 75 percent roll that misses twice in a row does not read as variance. It reads as theft. XCOM can afford that feeling across a 30-hour campaign. A jam roguelike cannot. So the dice came out, and the tension had to come from somewhere else.
It moved into execution. Offense and defense both run through timing reactions: a strike wheel and a brace wheel where you hear a chime and commit on the beat. The math of an exchange is fully deterministic. Whether you flubbed the timing is on you. Randomness still exists in the game, but it lives in the run layer, a node map across two acts, cornfield to cathedral to silo, then the Herald, then the Prelate, where variance creates replayability instead of resentment.
The companion decision: defeat is a moment, not a punishment. Short runs, instant restart, and a tone that treats falling as part of the fiction of being obsolete. People retry an unfair game out of spite and a fair one out of curiosity. Only one of those survives a jam rating page.
Painting the cast
The look I wanted was what I called Bright Ruins: warm, sunlit, weighty, somewhere between Don’t Starve’s linework and a Ghibli afternoon. I painted Cog, Wren, every machine, the reaction wheels, the icons, the logo, and the nine event illustrations. The characters are the part I am proud of and the part people respond to.
Painting a cast alone on a deadline taught me the real unit cost of art. Two things kept it survivable. The battle happens on one screen, so the tile vocabulary stayed small. And a consistent brush kit in Krita meant each new character inherited the style for free instead of needing a style decision.
The unexpected benefit of directing art and code from the same chair: when a sprite read badly in the engine, the painter already knew which layer to fix.
Working with a collaborator while building
Nicholas owned sound, voice, and half the narrative, and consulted on design. What worked was one design document as the source of truth, with his deliverables plugging into hooks that already existed, audio events and dialogue beats. What I would change: I gave him lore in bursts instead of up front, and it cost us a rewrite of the late-game text.
Lessons that carried forward
Lock the mechanical core in week one. The timing wheels were the riskiest element, and they were prototyped and felt right before any content was built around them. If they had failed, the game would have become something else early instead of late. Scope the art to the camera, not to ambition. And ship to more than one storefront, because the jam page and itch brought different players and different feedback.
Two months later I applied all three in a 63-hour Godot jam. That one has its own postmortem.