/ game-development / Balancing a Roguelike to a One-in-Three Win Rate With a Headless Harness
game-development 4 min read

Balancing a Roguelike to a One-in-Three Win Rate With a Headless Harness

My draft roguelike was too easy. A strong team won the cup two-thirds of the time, so winning meant nothing. Here is how I stopped guessing and tuned it to a real one-in-three with a few hundred simulated runs.

Balancing a Roguelike to a One-in-Three Win Rate With a Headless Harness - Complete game-development guide and tutorial

The first playable version of my draft roguelike, World 11, had a problem I did not notice until someone said it out loud: it was too easy. You drafted a team, ran the fourteen-match gauntlet, and lifted the cup almost every time. When winning is the default, winning is worthless. The whole arc of a roguelike, the tension of a run that might end, was missing.

The temptation was to nerf something by feel. Make opponents stronger, see if it feels better, repeat. I have done that on other projects and it is a trap, because "feels right" after you have played the same build forty times is not the same as "is right." So this time I measured.

The Harness

Because the match simulation is pure and seeded (a deterministic function, no rendering, no scene tree), I could run it thousands of times in a headless process. I wrote a small harness that:

  • Auto-drafts a strong team, the kind of optimal, chemistry-stacked side a focused player builds.
  • Plays it like a human would: names a captain, picks an attacking mentality.
  • Runs the full fourteen-match gauntlet.
  • Repeats a few hundred times and reports the champion rate plus where the losing runs fall out.

The first run of the harness told me the truth in about thirty seconds: a strong, captained, attacking team was winning the cup 65 percent of the time. That is not a tournament. That is a coronation with extra steps. And crucially, it explained why my own playtests felt easy without me having to trust my gut, the number was just sitting there.

The Levers

I wanted a strong team to win roughly a third of the time, with a believable spread of teams falling at every stage and a healthy number of heartbreak losses in the final. Two data-driven levers got me there, neither of which touched the simulation code.

A difficulty ramp. Each knockout round adds a flat bump to the opponent's strength, escalating toward the final. Early rounds stay winnable; the back half bites. This shapes where runs end, pushing the drama into the knockouts where it belongs.

Match-day variance. A small random swing on the opponent's strength each match, so the favourite is never a sure thing. This is the lever that creates upsets, the smash-and-grab loss in the quarterfinal that makes a run feel alive. Without it, the better team wins too cleanly and every run feels the same.

Both values live in a balance data file. Tuning was a loop: change a number, run the harness, read the champion rate and the exit distribution, adjust. No reloading the game, no playing by hand.

Where It Landed

After a few iterations, the harness reported a champion rate around 31 percent for a strong team, with losses spread sensibly across the rounds and a satisfying clump of defeats in the final. That is the number I wanted: a good team makes a deep run more often than not, but lifting the cup, and especially going unbeaten, is an achievement rather than a formality.

I left the harness in the repo. It is now a permanent dial. Any time I change the squad data, a formation, or the rating math, I can re-run it and see immediately whether the balance drifted. Balance is not a one-time pass; it is a number I can re-measure whenever the game changes.

The Takeaway

The reusable lesson has nothing to do with football. If your game has an outcome you can simulate without a player, you can measure its balance instead of guessing at it. A few hundred headless runs told me more, more honestly, than an hour of playing on a hunch ever could, because my hunch was contaminated by having played the same build all week.

Decouple the thing that decides outcomes from the thing that draws them. Then you can run the first part ten thousand times in a loop, and balance stops being vibes and starts being a measurement.

World 11 is free in the browser if you want to see whether a one-in-three feels right to you. It is harder than it was. That is the point.

Built by Kevin

Like this? You'll like what I'm building too.

Two ways to support and get more of this work.

Desktop App

HEARTH

A privacy-first Life OS for your desktop. Journal, tasks, and notes that stay on your machine. Coming soon, direct download from this site.

Read more
Digital Products

MY TOOLKITS

Receipts-first toolkits for shipping after hours, building Claude agents, publishing on Amazon, and more. The exact methods I used, not theory.

Browse on Whop

Need This Built?

Kevin builds products solo, from first version to live. If you want something like this made, work with him.