Tombstone
Goat
Late 2018 โ mid 2019 ยท age 36โ37
What it was
A monorepo of twelve C# projects and a Node.js game master, all named after goat breeds and Battlestar characters, with one goal: put a board game on every screen in the room. At its centre is Lamancha, a declarative XML screen language rendered with SkiaSharp, in which any property can be a live expression over JSON state. A game master on a laptop holds the game and pushes JSON to every tablet over a 12-byte binary frame protocol shared by C# and Node; each screen redraws itself from the variables. Around that sit a schema-driven generator that wrote about forty thousand lines of the engine and its tests, a visual editor with undo as JSON deltas, Windows and Android players, and UDP beacons so the tablets could find the laptop. The game being built was Battlestar Galactica. The engine worked. The rules never finished, and the readme is one word: "Hello".
Wins, for the age
- At thirty-six, one human built a language, a generator, three editors and four players, which is roughly the headcount of a small studio compressed into one ape with a keyboard.
- Made every property tri-state and optionally an expression, finding on its own what QML property bindings (2010) had already found, and kept parser, editor and documentation in sync from one schema.
- Rendered tests with a captured clock, so an animation could be snapshotted at exact instants and checked against gold images, the same idea as Sinon.JS fake timers (2010), reached from a renderer.
- Undo as JSON deltas, rediscovering the shape JSON Patch (2013) standardized.
What it taught
- Generate the boilerplate, hand-write the semantics. That ratio is what makes a big language tractable alone.
- A renderer is testable once time is a variable.
- A monorepo of twelve projects needs one build story. Mixed toolchains and generators writing across projects through relative paths meant it built on one machine only.
- Documentation stubs are a promise. Most of these said TODO, and the site published every one.
- Prototype in the fast language, then port, and then actually delete the prototype.
Genealogy
Ancestors: Oldskool: values that are expressions over other values. World Bootstrap: editor tooling and generated code, from the CAD program. Z Multicast Toolbox: finding peers on a LAN without a server. Descendants: Adama Net: framed binary messages between machines, grown up. BSG Prototype: the Battlestar game, rebuilt and finally played. Lamancha I: the screen engine, carried into its next attempt. Parts: Goat BSG, Goat Lamancha.
Epitaph
Here lies Goat: a language, a generator, three editors and four players, all so five friends could play one board game, and the rules were the part never finished.