A Diablo-like roguelike for the terminal.
Every torch, campfire, crystal, lava pool and spell casts real, colored, flickering light.
You see only what the light reaches.
Nothing to install:
ssh medv.io -p 2222Or run it locally:
go run github.com/antonmedv/termablo@latestAdd -seed 42 and the world is the same every time. Share the seed, race a friend.
docker compose up -d # then: ssh localhost -p 2222or, without Docker:
go run github.com/antonmedv/termablo@latest -ssh :2222Built with Bubble Tea and Wish.
Nobody tuned the numbers by hand. Two scripted players, a fighter and a
caster, play the game to the end over many seeds. How deep they get, what
kills them and what their gold does is held against a set of goals
(internal/balance), and every number in the game's formulas is a knob
(rules.go) a balance pass may turn.
make knobs # every knob: value, range, meaning
make eval OUT=balance/runs/a.json SEEDS=96 # both builds over 96 seeds, scored
make eval OUT=balance/runs/b.json SEEDS=96 RULES=try.json # knobs laid over the defaults
go run ./cmd/balance compare balance/runs/a.json balance/runs/b.json
go run . -bot fighter -seed 7 # watch one runA rules file is a JSON overlay, {"WakeRange": 12}. The score is the
weighted distance outside the goals, lower is better; compare pairs
the two runs by seed and says whether the difference is noise. Every
decision goes in balance/LEDGER.md, every pass
ends in balance/REPORT.md. In Claude Code,
/balance runs the whole loop; the runbook is
docs/balancing.md.

