/ 4 min read
Spare Knight: choosing the engine you can ship
Why I parked a from-scratch Unity rebuild, kept the jam codebase, and pointed it at Steam.
Five months after the jam, Spare Knight had two codebases. The Phaser build that shipped in April was live on itch.io with a tutorial run, fog of war, a node map, and my painted cast. The second was a Unity 6 rebuild I had started in July: an HD-2D look with 3D tile meshes under painted billboards, a pure C# rules engine with about a thousand tests, and a cleaner design document. It was better engineered in every way I could measure. On September 5 I parked it.
The test that decided it
The rebuild’s promise was light. Real shadows, a camera that could pitch and orbit, elevation, weather. To check whether the characters could live in that world I put a low-poly 3D Cog in the sandbox scene next to the painted one, same height, same lighting. The 3D knight won on turning and on how it sat in the light. The painted one won on everything a player looks at: the brush texture, the tilt of the helmet, the expression in one glowing eye. It was not close. Props and tiles were fine in 3D. Characters were not, and characters are the game.
That result reframed the whole project. The friction in the rebuild was never the engine. It was art direction, and it was permanent.
What “ship” meant
The goal had changed since April. Spare Knight was no longer a jam entry to polish. It was going to be my first sold desktop release, on Steam, with itch as the beta channel. I work on it around ten hours a week. Every hour on the rebuild had gone into infrastructure. Every hour on the Phaser build went into the game.
I wrote the decision down as an architecture record so I would stop relitigating it. The Phaser codebase ships, wrapped in Electron with Steamworks. The Unity project stays on disk as an idea bank, and when a rule from it is worth having, I port the behaviour by writing the JavaScript test from the C# test’s observable rule, never the code. The Phaser Editor tooling was retired the same day. Code-first is faster for one person.
Making the drawing the bottleneck
If the painted characters are the reason the game exists, the pipeline should make painting the only slow step. Before, a new animation meant exporting frames from Krita, renaming them by hand, and editing a manifest. Now the export folder is the contract: drop frames into a folder named for the entity and the animation, run one command, and the entity appears in the game with default timing. A CI check fails the build if the generated manifest is stale. From a Krita export to a moving sprite takes under a minute.
The same week I picked the direction for what comes next: a bigger cast of stranger machines, drawn with the boldness of Edmund McMillen’s silhouettes. Draw more, tool less.
Redesigning the hero without losing him
Cog’s diving-helmet look had carried the jam and I was tired of it. Rather than iterate on the existing drawing, I ran the redesign as a silhouette pass: six directions, each with a name and a one-line idea, judged at 64 pixels against written criteria. Does it say “knight” in one glance? Does it read old and loyal? Is it distinct from every generic diving-helmet robot?
Those boards came out of a concept pipeline I directed with generative tools. They are exploration, the way a mood board is exploration. The finished character will be painted by me, the way every character in the shipped game was, because the look test above already settled that nothing else sits beside Wren.
The winner was “The Oathwall”: a great helm with a lit visor slit, one enormous moss-eaten shield worn as a pauldron, a torn red tabard with a faded device, long open hands, and a stoop. The inspiration list was deliberate. The robot soldier from Castle in the Sky for an ancient guardian who moves gently. The Iron Giant for mass and a weapon that chose otherwise. A 13th-century great helm so the reader says “knight” without being told. Next to Wren, the human he protects, the design tells the whole story in one frame.
Where it stands
Since the decision the desktop build has grown into a beta: runs resume from map checkpoints, saves recover from a corrupted file, and the interface moved to a black-and-paper language with near-black silhouettes and bone paper controls. None of that is published yet. The build on itch.io is still the July UI overhaul, and it stays that way until the beta survives a clean-machine install.
What I’d keep
Decide with a look test, not a spreadsheet. The 3D-versus-painted comparison took an evening and ended a two-month argument I had been having with myself. Write the decision down with its reasons so it stays decided. And protect the one slow, human step in the pipeline by making everything around it fast.