Xs of Y – roguelike that names itself every run. Written in 4kLoC

· web · Source ↗

TLDR

  • Procedurally titled roguelike where spells are s-expressions, written in ~6900 lines of let-go, a Clojure dialect on a Go bytecode VM.

Key Takeaways

  • Every run generates a unique title (e.g. “Gazebos of Mounting Dread”), quest, and rune-to-symbol mappings; spells are literal Lisp s-expressions.
  • Built on let-go, a custom Clojure-like language running on a Go bytecode VM with persistent data structures and zero external dependencies.
  • Full world state is recomputed each tick using persistent data structures; startup time is 6ms; runs natively or in the browser via WASM.
  • Fire propagation, creature pushing, slime splitting, and troll regeneration are implemented as emergent dungeon physics, not scripted events.
  • Power curve is intentionally inverted: early game is survival-critical, late game is described as “applied theology with inadequate safety margins.”

Hacker News Comment Review

  • The author confirmed the Lisp-in-Lisp architecture is intentional: let-go powers both the engine and the in-game magic system, making the language itself the gameplay mechanic.
  • Safari on iOS 26.4 hits a cross-origin isolation redirect loop; the fix requires deploying coi-serviceworker.js alongside the WASM build, a known SharedArrayBuffer requirement.
  • A attribution dispute surfaced around Brogue: commenters noted the visual style and animations appear directly copied rather than loosely inspired, without credit given.

Notable Comments

  • @seabass-labrax: A real crash surfaced mid-run: cannot subtract nil and let-go.lang.Int triggered inside the AI distance calculation, exposed by a flaming spear kill.

Original | Discuss on HN