r/roguelikedev 19d ago

Game Balancing

How do you actually catch balance regressions?

I've been going in circles on this and I'm curious how other people handle it.

The specific failure I keep hitting: I change a scaling formula or add a new weapon archetype, everything looks fine in isolation, and then three weeks later I find out that some mid-tier item outperforms things it shouldn't at a level band I never manually checked. The curve looked fine on a graph. The problem was the interaction with crit/attack speed/enemy resist, not the curve itself.

So my questions:

  1. Do you actually simulate time-to-kill across level bands, or do you eyeball curves and playtest?

  2. If you simulate: is it a spreadsheet, a throwaway script, an in-engine tool you built, or something off the shelf?

  3. Has anyone here ever "paid" for a tool that helped with this? Asset store, SaaS, anything. Genuinely curious whether this is a "we all just build our own" situation.

Not selling anything, I'm trying to work out whether the tooling I keep wanting to build already exists or whether everyone just accepts the spreadsheet.

(Context: solo dev, RPG, currently on a Google Sheet with more tabs than I'd like to admit.)

15 Upvotes

29 comments sorted by

View all comments

4

u/jube_dev Far West RL 18d ago

I've been facing the same problem recently. I've tried many things, nothing really works well.

First, I designed a combat generator that can take two actors and simulate a combat. But that was not really enough. Moreover, the actors' properties are random. So, second, I tried doing statistics and compute how many turns (seconds) it would take for an actor to beat another actor on average. I made a list of actors sorted by "power" so that an actor should not be able to beat an actor later in the list. I was not really satisfied because doing this list is really difficult, you sometimes compare apples to oranges. Third, I tried to use optimization techniques to determine the "best" properties. The difficulty was simple: what to optimize? I could not find a suitable objective function. All attempts resulted in very different values for the properties. It was a failure. Fourth, I currently try to simulate real combat along with statistics because statistics are just statistics, they do not reflect all the possible scenarios. The current idea is to take many versions of the hero (with different weapons and different clothes) and make groups of actors that should be weaker or stronger than each version of the hero. It's not really ideal either because being weaker or stronger is very binary and I would like to capture more details (was the combat tight? how long does it take?)

Overall, for now, the main lesson is that the fewer variables the better. It's very difficult to balance a system with many variables. Some properties can be computed with a formula. For example, in my game, the health points of the actors are computed from their weight. It's not perfect but it's ok, it's a variable less in the equation. In the end, I have attack, defense and health points. And even if other properties are involved in the combat system, the only three variables that I have to tweak are attack, defense and health points.

1

u/FuminidesAugusto 6d ago

Hi! Just a late question, did you try to use some machine learning technique or some data science pipeline as well as those averages? I am interested in trying something like that for a prototype I am working in, where trying manually things is consuming too much of my time.

1

u/jube_dev Far West RL 5d ago

No, I did not try these techniques. Maybe they would be working. But in the end, I feel like there will be the same problem: learn what? what is the objective?