Game balancing notes
AI Use Disclosure
The ideas here are my own. I use AI tools in various parts of the writing process, including summarizing my notes and prompts, improving grammar, tightening wording, and checking whether an argument is clear. These posts are as much notes for myself as they are for anyone else who is interested.
A few notes about Lich Please.
I wrote it because I wanted more games with mass movement simulations / crowd dynamics. Not just one hero and a few enemies, but little crowds breaking, jamming, routing, panicking, getting body-blocked, then suddenly tipping into a snowball.
The game is a necromancer puzzle-sim roguelite. Drop skeletons, panic villagers, abuse terrain, raise corpses, try to get that one cascading disaster where the whole stage flips from “under control” to “oh no”.
There is also a fun asset pipeline hidden under it. AI wrote most of the assets as data: 3d-ish model specs, music/sound recipes, and the tooling to render/pack them into PNG assets. That part still feels like cheating in the good way: text goes in, tiny skeletons / houses / music loops come out.
The crowding system is the other core bit. Units do not simply pass through each other. Movement is admitted through local capacity rules, with narrow spaces, unit size, skeleton-vs-human occupancy, side steps, and density penalties. Nothing too magic; just enough local pressure that a crowd can visibly jam or leak around an obstacle.
But the two balance ideas are the real thing I wanted to write down.
What should be rare?
The game gives upgrade choices. Usually something like: here are 3 options, pick one.
Some options should be rare. But “rare” is not really a property of an upgrade. It is a statement about how desirable that upgrade is relative to everything else the player could have picked.
So: record the choice as a comparison.
player saw A, B, C
player picked B
Then update a ranking model. Elo-ish / Plackett-Luce-ish. The selected thing gets evidence that it is preferred over the other offered things. Over many runs, the player base tells you which powers they actually value.
That ranking can then feed rarity. If something keeps winning comparisons, show it less often, price it higher, or visually mark it as special. The designer still seeds the system, but player choices get to push back.
This is the part I like: rarity becomes an observed balance output, not only an authored label.
How strong is a skeleton?
The other question: how strong is a unit?
You can do the abstract math first. Health, damage, attack speed, XP value, skeleton-equivalent threat, civilian-equivalent rewards, etc. Good. Necessary. Still not enough.
Because in this kind of game a skeleton is not just
hp * dps. It is also body blocking, crowd pressure, target
choice, arrival timing, surround geometry, and whether the pathing made
three units fight one at a time instead of together.
So I built a matchup tool. It runs lots of deterministic simulated fights, aggregates the outcomes, and draws the result.
Skeletons vs soldiers, 50 runs per cell:
Each cell is not a formula. It is the actual game simulation saying: with this many skeletons against this many soldiers, across a bunch of seeds, this is how often the skeleton side won.
The future version should be a browser dashboard. Pick two unit compositions, maybe add a modifier like haste or bone wall support, click run, get the matrix. Not because the matrix is the truth, but because it makes the weirdness visible.
And that is the balancing target: not perfectly fair. Perfectly fair is often dead. Players should still feel like they found that one cheat that lets them snowball a few stages because they got so lucky.
But the unfairness should be legible. Ranking tells me what players prefer. Matchup simulation tells me what the combat system actually does. Between those two, tuning becomes a lot less vibes-only.
First written: 2026-06-07
Last edited: 2026-06-10