← Back
antonmedv

antonmedv/termablo

A Diablo-like terminal roguelike

View on GitHub ↗
rougeliketerminal-game
Stars
30
Forks
0
Watchers
30
Open issues
0
Contributors
2
Language
Go
License
MIT License
Default branch
master
Created Sep 29, 2026Updated Oct 1, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

A Fallen camp charges across the Ashen Fields

Termablo

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.

Play

Nothing to install:

ssh medv.io -p 2222

Or run it locally:

go run github.com/antonmedv/termablo@latest

Add -seed 42 and the world is the same every time. Share the seed, race a friend.

Emberhold, the Ashen Fields, the Throne of the Bone King, Blackmarsh, the Sunken Grotto and the Burning Abyss

Host your own

docker compose up -d        # then: ssh localhost -p 2222

or, without Docker:

go run github.com/antonmedv/termablo@latest -ssh :2222

Built with Bubble Tea and Wish.

Balancing

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 run

A 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.

License

MIT